bb2d391712fb0208347ffc0b88abe146df14dc0a galt Fri Jun 21 18:21:50 2019 -0700 Adding Support for CIDR specification of subnets, e.g. 192.168.1.255/31. It still supports the older subnet format too, e.g. 192.168 diff --git src/parasol/paraHub/sockSuck.c src/parasol/paraHub/sockSuck.c index cf2e222..cfc19f8 100644 --- src/parasol/paraHub/sockSuck.c +++ src/parasol/paraHub/sockSuck.c @@ -1,54 +1,54 @@ /* SockSuck - A process that sucks messages from a socket * and puts them in the hub queue. */ #include "paraCommon.h" #include "paraHub.h" +#include "net.h" static pthread_t sockSuckThread; -unsigned char localHost[4] = {127,0,0,1}; /* Address for local host in network order */ -boolean ipAddressOk(in_addr_t packed, unsigned char *spec) +boolean ipAddressOk(in_addr_t packed, struct cidr *spec) /* Return TRUE if packed IP address matches spec. */ { unsigned char unpacked[4]; internetUnpackIp(packed, unpacked); -return internetIpInSubnet(unpacked, spec); +return internetIpInSubnetCidr(unpacked, spec); } static void *sockSuckDaemon(void *vptr) /* Shovel messages from short socket queue to our * larger hub message queue. */ { struct paraMessage *pm; struct rudp *ru = vptr; for (;;) { AllocVar(pm); if (pmReceive(pm, ru)) { if (ipAddressOk(ntohl(pm->ipAddress.sin_addr.s_addr), hubSubnet) || - ipAddressOk(ntohl(pm->ipAddress.sin_addr.s_addr), localHost)) + ipAddressOk(ntohl(pm->ipAddress.sin_addr.s_addr), localHostSubnet)) { hubMessagePut(pm); } else { char dottedQuad[17]; internetIpToDottedQuad(ntohl(pm->ipAddress.sin_addr.s_addr), dottedQuad); warn("unauthorized access by %s", dottedQuad); freez(&pm); } } else freez(&pm); } return NULL; // avoid compiler warning } void sockSuckStart(struct rudp *ru) /* Start socket sucker deamon. */ { int err = pthread_create(&sockSuckThread, NULL, sockSuckDaemon, ru); if (err < 0) errAbort("Couldn't create sockSuckThread %s", strerror(err)); }