Author: ab Date: 2006-06-22 13:24:00 +0000 (Thu, 22 Jun 2006) New Revision: 16460
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=16460 Log: Finish TODO item for remote address checking and fix little glitches while in the same file Modified: branches/tmp/vl-messaging/source/lib/messages_stream.c Changeset: Modified: branches/tmp/vl-messaging/source/lib/messages_stream.c =================================================================== --- branches/tmp/vl-messaging/source/lib/messages_stream.c 2006-06-22 13:07:13 UTC (rev 16459) +++ branches/tmp/vl-messaging/source/lib/messages_stream.c 2006-06-22 13:24:00 UTC (rev 16460) @@ -214,10 +214,35 @@ ****************************************************************************/ #ifdef WITH_CLUSTERWIDE_MESSAGING +#define ALLONES ((uint32)0xFFFFFFFF) +#define MKNETADDR(_IP, _NM) ((_IP) & (_NM)) static BOOL remote_address_allowed(struct sockaddr_in* addr) { - /* TODO */ - return True; + struct in_addr ip, nmask; + char *token = SMB_STRDUP(lp_messaging_network()), *p; + + p = strchr_m(token,'/'); + if (p == NULL) { + ip = *interpret_addr2(token); + nmask.s_addr = ALLONES; + } else { + /* parse it into an IP address/netmasklength pair */ + *p = 0; + ip = *interpret_addr2(token); + p++; + + if (strlen(p) > 2) { + nmask = *interpret_addr2(p); + } else { + nmask.s_addr = htonl(((ALLONES >> atoi(p)) ^ ALLONES)); + } + } + + SAFE_FREE(token); + + /* check the address */ + return (MKNETADDR(ip.s_addr, nmask.s_addr) == + MKNETADDR(addr->sin_addr.s_addr, nmask.s_addr)); } #endif @@ -241,7 +266,7 @@ if (addr.sin_family != AF_INET) { DEBUG(5, ("Expected AF_INET(%d) in accept, got %d\n", - AF_UNIX, addr.sin_family)); + AF_INET, addr.sin_family)); close(fd); return; } @@ -462,7 +487,7 @@ TALLOC_CTX *mem_ctx, struct message_list *cnt) { - size_t len, to_read; + size_t len = 0, to_read; ssize_t nread; uint8_t *target;
