summaryrefslogtreecommitdiff
path: root/source3/nmbd/nmbd_packets.c
diff options
context:
space:
mode:
authorLuke Leighton <lkcl@samba.org>1999-11-19 01:01:07 +0000
committerLuke Leighton <lkcl@samba.org>1999-11-19 01:01:07 +0000
commit161c11e4bcd408064493c063b228aab589fd2a19 (patch)
tree611a376ca4d791851bec291fee1586506e48306d /source3/nmbd/nmbd_packets.c
parent1c6c4e7e39bde99f8d312516ba530b905bc01da7 (diff)
downloadsamba-161c11e4bcd408064493c063b228aab589fd2a19.tar.gz
samba-161c11e4bcd408064493c063b228aab589fd2a19.tar.bz2
samba-161c11e4bcd408064493c063b228aab589fd2a19.zip
- bug in nmbd registering DOMAIN_NAME<1c> to WINS server; recursion
desired flag MUST be set in any NBT UDP packets sent to a WINS server, else they will go to the WINS client side of the NT NetBIOS kernel instead, and will get trashed. - added \PIPE\browser server-side code. (This used to be commit 8e406c1fa296c3f97b1cd7ddde7b5aeb9232b26e)
Diffstat (limited to 'source3/nmbd/nmbd_packets.c')
-rw-r--r--source3/nmbd/nmbd_packets.c25
1 files changed, 17 insertions, 8 deletions
diff --git a/source3/nmbd/nmbd_packets.c b/source3/nmbd/nmbd_packets.c
index f10d9a2bc5..c39699f822 100644
--- a/source3/nmbd/nmbd_packets.c
+++ b/source3/nmbd/nmbd_packets.c
@@ -143,6 +143,7 @@ static BOOL send_netbios_packet(struct packet_struct *p)
static struct packet_struct *create_and_init_netbios_packet(struct nmb_name *nmbname,
BOOL bcast,
+ BOOL rec_des,
struct in_addr to_ip)
{
struct packet_struct *packet = NULL;
@@ -161,7 +162,7 @@ static struct packet_struct *create_and_init_netbios_packet(struct nmb_name *nmb
nmb->header.name_trn_id = generate_name_trn_id();
nmb->header.response = False;
- nmb->header.nm_flags.recursion_desired = False;
+ nmb->header.nm_flags.recursion_desired = rec_des;
nmb->header.nm_flags.recursion_available = False;
nmb->header.nm_flags.trunc = False;
nmb->header.nm_flags.authoritative = False;
@@ -430,11 +431,12 @@ struct response_record *queue_register_name( struct subnet_record *subrec,
struct packet_struct *p;
struct response_record *rrec;
BOOL bcast = (subrec == unicast_subnet) ? False : True;
+ BOOL rec_des = (subrec == wins_server_subnet) ? True : False;
if(assert_check_subnet(subrec))
return NULL;
- if(( p = create_and_init_netbios_packet(nmbname, bcast,
+ if(( p = create_and_init_netbios_packet(nmbname, bcast, rec_des,
subrec->bcast_ip)) == NULL)
return NULL;
@@ -479,6 +481,7 @@ struct response_record *queue_register_multihomed_name( struct subnet_record *su
struct packet_struct *p;
struct response_record *rrec;
BOOL bcast = False;
+ BOOL rec_des = (subrec == wins_server_subnet) ? True : False;
BOOL ret;
/* Sanity check. */
@@ -492,7 +495,7 @@ unicast subnet. subnet is %s\n.", subrec->subnet_name ));
if(assert_check_subnet(subrec))
return NULL;
- if(( p = create_and_init_netbios_packet(nmbname, bcast,
+ if(( p = create_and_init_netbios_packet(nmbname, bcast, rec_des,
subrec->bcast_ip)) == NULL)
return NULL;
@@ -539,13 +542,14 @@ struct response_record *queue_release_name( struct subnet_record *subrec,
struct in_addr release_ip)
{
BOOL bcast = (subrec == unicast_subnet) ? False : True;
+ BOOL rec_des = (subrec == wins_server_subnet) ? True : False;
struct packet_struct *p;
struct response_record *rrec;
if(assert_check_subnet(subrec))
return NULL;
- if(( p = create_and_init_netbios_packet(nmbname, bcast,
+ if(( p = create_and_init_netbios_packet(nmbname, bcast, rec_des,
subrec->bcast_ip)) == NULL)
return NULL;
@@ -597,13 +601,14 @@ struct response_record *queue_refresh_name( struct subnet_record *subrec,
struct in_addr refresh_ip)
{
BOOL bcast = (subrec == unicast_subnet) ? False : True;
+ BOOL rec_des = (subrec == wins_server_subnet) ? True : False;
struct packet_struct *p;
struct response_record *rrec;
if(assert_check_subnet(subrec))
return NULL;
- if(( p = create_and_init_netbios_packet(&namerec->name, bcast,
+ if(( p = create_and_init_netbios_packet(&namerec->name, bcast,rec_des,
subrec->bcast_ip)) == NULL)
return NULL;
@@ -645,6 +650,7 @@ struct response_record *queue_query_name( struct subnet_record *subrec,
struct packet_struct *p;
struct response_record *rrec;
BOOL bcast = True;
+ BOOL rec_des = (subrec == wins_server_subnet) ? True : False;
if ((subrec == unicast_subnet) || (subrec == wins_server_subnet))
bcast = False;
@@ -652,7 +658,7 @@ struct response_record *queue_query_name( struct subnet_record *subrec,
if(assert_check_subnet(subrec))
return NULL;
- if(( p = create_and_init_netbios_packet(nmbname, bcast,
+ if(( p = create_and_init_netbios_packet(nmbname, bcast,rec_des,
subrec->bcast_ip)) == NULL)
return NULL;
@@ -694,8 +700,10 @@ struct response_record *queue_query_name_from_wins_server( struct in_addr to_ip,
struct packet_struct *p;
struct response_record *rrec;
BOOL bcast = False;
+ BOOL rec_des = True;
- if(( p = create_and_init_netbios_packet(nmbname, bcast, to_ip)) == NULL)
+ if(( p = create_and_init_netbios_packet(nmbname, bcast, rec_des,
+ to_ip)) == NULL)
return NULL;
if(initiate_name_query_packet_from_wins_server( p ) == False)
@@ -737,6 +745,7 @@ struct response_record *queue_node_status( struct subnet_record *subrec,
struct packet_struct *p;
struct response_record *rrec;
BOOL bcast = False;
+ BOOL rec_des = (subrec == wins_server_subnet) ? True : False;
/* Sanity check. */
if(subrec != unicast_subnet)
@@ -749,7 +758,7 @@ unicast subnet. subnet is %s\n.", subrec->subnet_name ));
if(assert_check_subnet(subrec))
return NULL;
- if(( p = create_and_init_netbios_packet(nmbname, bcast,
+ if(( p = create_and_init_netbios_packet(nmbname, bcast,rec_des,
send_ip)) == NULL)
return NULL;