#include #include static char *bandir = "/lib/ndb/banished"; /* Log that this ipaddr, (or ipaddr!port) may be causing a nuisance */ int nuisance(char *addr, char c) { int fd, len; char *p, *path; if(!addr || !*addr) return -1; len = strlen(addr); if((p = strchr(addr, '!')) != nil) len = p - addr; path = smprint("%s/%.*s", bandir, len, addr); if((fd = open(path, OWRITE)) == -1) fd = create(path, OWRITE, 0666|DMAPPEND); free(path); if(fd == -1){ return -1; } write(fd, &c, 1); close(fd); return 0; } /* Has this ipaddr, (or ipaddr!port) caused too much of a nuisance */ int banished(char *addr, int thresh) { Dir *d; int n, len; char *p, *path; if(!addr || !*addr) return 0; len = strlen(addr); if((p = strchr(addr, '!')) != nil) len = p - addr; path = smprint("%s/%.*s", bandir, len, addr); d = dirstat(path); free(path); if(d == nil) return 0; n = d->length; free(d); if(n < thresh) return 0; return 1; }