diff options
author | Jeremy Allison <jra@samba.org> | 2003-08-27 01:25:01 +0000 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2003-08-27 01:25:01 +0000 |
commit | 84ae44678a6c59c999bc1023fdd9b7ad87f4ec18 (patch) | |
tree | 60283db67c436454854bc0c074dae5726a17a6c9 /source/nmbd/nmbd_nodestatus.c | |
parent | e855dc8c9115fa11d315eb34d57722ff612daa11 (diff) | |
download | samba-84ae44678a6c59c999bc1023fdd9b7ad87f4ec18.tar.gz samba-84ae44678a6c59c999bc1023fdd9b7ad87f4ec18.tar.xz samba-84ae44678a6c59c999bc1023fdd9b7ad87f4ec18.zip |
Fix the character set handling properly in nmbd. Also fix bug where
iconv wasn't re-initialised on reading of "charset" parameters. This
caused workgroup name to be set incorrectly if it contained an
extended character.
Jeremy.
Diffstat (limited to 'source/nmbd/nmbd_nodestatus.c')
-rw-r--r-- | source/nmbd/nmbd_nodestatus.c | 68 |
1 files changed, 33 insertions, 35 deletions
diff --git a/source/nmbd/nmbd_nodestatus.c b/source/nmbd/nmbd_nodestatus.c index 993e4d9d175..0ea5d6a8182 100644 --- a/source/nmbd/nmbd_nodestatus.c +++ b/source/nmbd/nmbd_nodestatus.c @@ -3,7 +3,7 @@ NBT netbios routines and daemon - version 2 Copyright (C) Andrew Tridgell 1994-1998 Copyright (C) Luke Kenneth Casson Leighton 1994-1998 - Copyright (C) Jeremy Allison 1994-1998 + Copyright (C) Jeremy Allison 1994-2003 This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -26,52 +26,52 @@ /**************************************************************************** Deal with a successful node status response. ****************************************************************************/ + static void node_status_response(struct subnet_record *subrec, struct response_record *rrec, struct packet_struct *p) { - struct nmb_packet *nmb = &p->packet.nmb; - struct nmb_name *question_name = &rrec->packet->packet.nmb.question.question_name; - struct nmb_name *answer_name = &nmb->answers->rr_name; + struct nmb_packet *nmb = &p->packet.nmb; + struct nmb_name *question_name = &rrec->packet->packet.nmb.question.question_name; + struct nmb_name *answer_name = &nmb->answers->rr_name; - /* Sanity check. Ensure that the answer name in the incoming packet is the - same as the requested name in the outgoing packet. */ + /* Sanity check. Ensure that the answer name in the incoming packet is the + same as the requested name in the outgoing packet. */ - if(!nmb_name_equal(question_name, answer_name)) - { - DEBUG(0,("node_status_response: Answer name %s differs from question \ + if(!nmb_name_equal(question_name, answer_name)) { + DEBUG(0,("node_status_response: Answer name %s differs from question \ name %s.\n", nmb_namestr(answer_name), nmb_namestr(question_name))); - return; - } + return; + } - DEBUG(5,("node_status_response: response from name %s on subnet %s.\n", - nmb_namestr(answer_name), subrec->subnet_name)); + DEBUG(5,("node_status_response: response from name %s on subnet %s.\n", + nmb_namestr(answer_name), subrec->subnet_name)); - /* Just send the whole answer resource record for the success function - to parse. */ - if(rrec->success_fn) - (*(node_status_success_function)rrec->success_fn)(subrec, rrec->userdata, nmb->answers, p->ip); + /* Just send the whole answer resource record for the success function to parse. */ + if(rrec->success_fn) + (*(node_status_success_function)rrec->success_fn)(subrec, rrec->userdata, nmb->answers, p->ip); - /* Ensure we don't retry. */ - remove_response_record(subrec, rrec); + /* Ensure we don't retry. */ + remove_response_record(subrec, rrec); } /**************************************************************************** Deal with a timeout when requesting a node status. ****************************************************************************/ + static void node_status_timeout_response(struct subnet_record *subrec, struct response_record *rrec) { - struct nmb_packet *sent_nmb = &rrec->packet->packet.nmb; - struct nmb_name *question_name = &sent_nmb->question.question_name; + struct nmb_packet *sent_nmb = &rrec->packet->packet.nmb; + struct nmb_name *question_name = &sent_nmb->question.question_name; - DEBUG(5,("node_status_timeout_response: failed to get node status from name %s on subnet %s\n", - nmb_namestr(question_name), subrec->subnet_name)); + DEBUG(5,("node_status_timeout_response: failed to get node status from name %s on subnet %s\n", + nmb_namestr(question_name), subrec->subnet_name)); - if( rrec->fail_fn) - (*rrec->fail_fn)(subrec, rrec); + if( rrec->fail_fn) + (*rrec->fail_fn)(subrec, rrec); - /* Ensure we don't retry. */ - remove_response_record(subrec, rrec); + /* Ensure we don't retry. */ + remove_response_record(subrec, rrec); } /**************************************************************************** @@ -82,13 +82,11 @@ BOOL node_status(struct subnet_record *subrec, struct nmb_name *nmbname, struct in_addr send_ip, node_status_success_function success_fn, node_status_fail_function fail_fn, struct userdata_struct *userdata) { - if(queue_node_status( subrec, - node_status_response, node_status_timeout_response, - success_fn, fail_fn, userdata, nmbname, send_ip)==NULL) - { - DEBUG(0,("node_status: Failed to send packet trying to get node status for \ + if(queue_node_status( subrec, node_status_response, node_status_timeout_response, + success_fn, fail_fn, userdata, nmbname, send_ip)==NULL) { + DEBUG(0,("node_status: Failed to send packet trying to get node status for \ name %s, IP address %s\n", nmb_namestr(nmbname), inet_ntoa(send_ip))); - return True; - } - return False; + return True; + } + return False; } |