diff options
author | Luke Leighton <lkcl@samba.org> | 1999-12-04 23:40:21 +0000 |
---|---|---|
committer | Luke Leighton <lkcl@samba.org> | 1999-12-04 23:40:21 +0000 |
commit | ddda7722a673cefc89a55133f99c07dd153b1f19 (patch) | |
tree | 6b2148dfa7539cb48e45f76103d2fb41d848a598 /source3/utils | |
parent | 97913d82f56388eee7d8fa8c204a1fa8c9754b88 (diff) | |
download | samba-ddda7722a673cefc89a55133f99c07dd153b1f19.tar.gz samba-ddda7722a673cefc89a55133f99c07dd153b1f19.tar.bz2 samba-ddda7722a673cefc89a55133f99c07dd153b1f19.zip |
argh! how horrible! spent ages working out why packets weren't being
received properly when a UDP "retry" occurs. it's because reads and
writes must be interleaved / matched.
scenario:
nmblookup connects to agent, sends request.
agent receives request, broadcasts it on 137.
agent RECEIVES 137 broadcast, sends it to nmblookup
agent receives RESPONSE to 137 broadcast, sends it to nmblookup.
if reads are not equally interspersed with writes, then second send
will fail.
if you think this is odd behaviour and that the agent should be filtering
its own UDP traffic, think again.
agent will be, potentially, redirecting nmbd traffic (including WINS
server) not just client programs.
(This used to be commit 43e158c4261e51678d6e7f77ceb4a1c7281a2525)
Diffstat (limited to 'source3/utils')
-rw-r--r-- | source3/utils/nmb-agent.c | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/source3/utils/nmb-agent.c b/source3/utils/nmb-agent.c index fb0e72d461..ad9c958350 100644 --- a/source3/utils/nmb-agent.c +++ b/source3/utils/nmb-agent.c @@ -71,7 +71,7 @@ static BOOL process_cli_sock(struct sock_redir **socks, nmb = (struct nmb_state*)malloc(sizeof(struct nmb_state)); if (nmb == NULL) { - free(p); + free_packet(p); return False; } @@ -99,10 +99,10 @@ static BOOL process_cli_sock(struct sock_redir **socks, if (!send_packet(p)) { DEBUG(0,("server is dead\n")); - free(p); + free_packet(p); return False; } - free(p); + free_packet(p); return True; } @@ -119,14 +119,17 @@ static BOOL process_srv_sock(struct sock_redir **socks, p = receive_packet(fd, NMB_PACKET, 0); if (p == NULL) { - return False; + return True; } +#if 0 if (!p->packet.nmb.header.response) { - free(p); + DEBUG(10,("skipping response packet\n")); + free_packet(p); return True; } +#endif nmb_id = p->packet.nmb.header.name_trn_id; DEBUG(10,("process_srv_sock:\tnmb_id:\t%d\n", nmb_id)); @@ -161,7 +164,7 @@ static BOOL process_srv_sock(struct sock_redir **socks, } return True; } - return False; + return True; } static int get_agent_sock(void*id) @@ -212,7 +215,7 @@ static int get_agent_sock(void*id) return -1; } - chmod(path, 0666); + chmod(path, 0777); if (listen(s, 5) == -1) { |