From 96bc4042779570e6239b2626888ea0ca9be17391 Mon Sep 17 00:00:00 2001 From: "Christopher R. Hertel" Date: Tue, 9 Jun 1998 01:56:18 +0000 Subject: This is a first step toward moving long namelists into a database. I split the name_record structure into pieces. The goal is that the key (the name) be separate from the data associated with the key. Databases such as gdbm store information in [key,content] pairs. There is no functional change in with this update. It's just a step in the direction that Jeremy and I have been discussing. Chris -)----- (This used to be commit e420a4bd7d368a0e910893400fb7b46ab8694a08) --- source3/nmbd/nmbd_winsserver.c | 121 +++++++++++++++++++++++------------------ 1 file changed, 67 insertions(+), 54 deletions(-) (limited to 'source3/nmbd/nmbd_winsserver.c') diff --git a/source3/nmbd/nmbd_winsserver.c b/source3/nmbd/nmbd_winsserver.c index e1f0fbae8f..89e602606b 100644 --- a/source3/nmbd/nmbd_winsserver.c +++ b/source3/nmbd/nmbd_winsserver.c @@ -529,8 +529,9 @@ static void wins_register_query_fail(struct subnet_record *subrec, namerec = find_name_on_subnet(subrec, question_name, FIND_ANY_NAME); - if((namerec != NULL) && (namerec->source == REGISTER_NAME) && - ip_equal(rrec->packet->ip, *namerec->ip) ) + if( (namerec != NULL) + && (namerec->data.source == REGISTER_NAME) + && ip_equal(rrec->packet->ip, *namerec->data.ip) ) { remove_name_from_namelist( subrec, namerec); namerec = NULL; @@ -646,11 +647,13 @@ IP %s\n", registering_group_name ? "Group" : "Unique", namestr(question), inet_n * name. */ - if((namerec != NULL) && ((namerec->source == DNS_NAME) || (namerec->source == DNSFAIL_NAME))) + if( (namerec != NULL) + && ( (namerec->data.source == DNS_NAME) + || (namerec->data.source == DNSFAIL_NAME) ) ) { - DEBUG(5,("wins_process_name_registration_request: Name (%s) in WINS was a dns lookup \ -- removing it.\n", namestr(question) )); - remove_name_from_namelist( subrec, namerec); + DEBUG(5,("wins_process_name_registration_request: Name (%s) in WINS was \ +a dns lookup - removing it.\n", namestr(question) )); + remove_name_from_namelist( subrec, namerec ); namerec = NULL; } @@ -659,10 +662,11 @@ IP %s\n", registering_group_name ? "Group" : "Unique", namestr(question), inet_n * (ie. Don't allow any static names to be overwritten. */ - if((namerec != NULL) && (namerec->source != REGISTER_NAME)) + if((namerec != NULL) && (namerec->data.source != REGISTER_NAME)) { - DEBUG(3,("wins_process_name_registration_request: Attempt to register name %s. Name \ -already exists in WINS with source type %d.\n", namestr(question), namerec->source )); + DEBUG( 3, ( "wins_process_name_registration_request: Attempt \ +to register name %s. Name already exists in WINS with source type %d.\n", + namestr(question), namerec->data.source )); send_wins_name_registration_response(RFS_ERR, 0, p); return; } @@ -768,11 +772,13 @@ is one of our (WINS server) names. Denying registration.\n", namestr(question) ) * is the same as the the (single) already registered IP then just update the ttl. */ - if(!registering_group_name && (namerec != NULL) && (namerec->num_ips == 1) && - ip_equal(namerec->ip[0], from_ip)) + if( !registering_group_name + && (namerec != NULL) + && (namerec->data.num_ips == 1) + && ip_equal( namerec->data.ip[0], from_ip ) ) { - update_name_ttl(namerec, ttl); - send_wins_name_registration_response(0, ttl, p); + update_name_ttl( namerec, ttl ); + send_wins_name_registration_response( 0, ttl, p ); return; } @@ -781,7 +787,7 @@ is one of our (WINS server) names. Denying registration.\n", namestr(question) ) * to see if they still claim to have the name. */ - if(namerec != NULL) + if( namerec != NULL ) { char ud[sizeof(struct userdata_struct) + sizeof(struct packet_struct *)]; struct userdata_struct *userdata = (struct userdata_struct *)ud; @@ -815,10 +821,12 @@ is one of our (WINS server) names. Denying registration.\n", namestr(question) ) * code. JRA. */ - query_name_from_wins_server( *namerec->ip, question->name, question->name_type, - wins_register_query_success, - wins_register_query_fail, - userdata); + query_name_from_wins_server( *namerec->data.ip, + question->name, + question->name_type, + wins_register_query_success, + wins_register_query_fail, + userdata ); return; } @@ -870,7 +878,7 @@ static void wins_multihomed_register_query_success(struct subnet_record *subrec, namerec = find_name_on_subnet(subrec, question_name, FIND_ANY_NAME); - if( (namerec == NULL) || (namerec->source != REGISTER_NAME) ) + if( (namerec == NULL) || (namerec->data.source != REGISTER_NAME) ) { DEBUG(3,("wins_multihomed_register_query_success: name %s is not in the correct state to add \ a subsequent IP addess.\n", namestr(question_name) )); @@ -981,7 +989,9 @@ to register name %s from IP %s.", namestr(question), inet_ntoa(p->ip) )); * name. */ - if((namerec != NULL) && ((namerec->source == DNS_NAME) || (namerec->source == DNSFAIL_NAME))) + if( (namerec != NULL) + && ( (namerec->data.source == DNS_NAME) + || (namerec->data.source == DNSFAIL_NAME) ) ) { DEBUG(5,("wins_process_multihomed_name_registration_request: Name (%s) in WINS was a dns lookup \ - removing it.\n", namestr(question) )); @@ -994,10 +1004,11 @@ to register name %s from IP %s.", namestr(question), inet_ntoa(p->ip) )); * (ie. Don't allow any static names to be overwritten. */ - if((namerec != NULL) && (namerec->source != REGISTER_NAME)) + if( (namerec != NULL) && (namerec->data.source != REGISTER_NAME) ) { - DEBUG(3,("wins_process_multihomed_name_registration_request: Attempt to register name %s. Name \ -already exists in WINS with source type %d.\n", namestr(question), namerec->source )); + DEBUG( 3, ( "wins_process_multihomed_name_registration_request: Attempt \ +to register name %s. Name already exists in WINS with source type %d.\n", + namestr(question), namerec->data.source )); send_wins_name_registration_response(RFS_ERR, 0, p); return; } @@ -1139,7 +1150,7 @@ static void process_wins_dmb_query_request(struct subnet_record *subrec, for(namerec = subrec->namelist; namerec; namerec = namerec->next) { if(namerec->name.name_type == 0x1b) - num_ips += namerec->num_ips; + num_ips += namerec->data.num_ips; } if(num_ips == 0) @@ -1169,10 +1180,10 @@ static void process_wins_dmb_query_request(struct subnet_record *subrec, if(namerec->name.name_type == 0x1b) { int i; - for(i = 0; i < namerec->num_ips; i++) + for(i = 0; i < namerec->data.num_ips; i++) { - set_nb_flags(&prdata[num_ips * 6],namerec->nb_flags); - putip((char *)&prdata[(num_ips * 6) + 2], &namerec->ip[i]); + set_nb_flags(&prdata[num_ips * 6],namerec->data.nb_flags); + putip((char *)&prdata[(num_ips * 6) + 2], &namerec->data.ip[i]); num_ips++; } } @@ -1213,18 +1224,18 @@ void send_wins_name_query_response(int rcode, struct packet_struct *p, { int same_net_index = -1; - ttl = (namerec->death_time != PERMANENT_TTL) ? - namerec->death_time - p->timestamp : lp_max_wins_ttl(); + ttl = (namerec->data.death_time != PERMANENT_TTL) ? + namerec->data.death_time - p->timestamp : lp_max_wins_ttl(); /* Copy all known ip addresses into the return data. */ /* Optimise for the common case of one IP address so we don't need a malloc. */ - if(namerec->num_ips == 1 ) + if( namerec->data.num_ips == 1 ) prdata = rdata; else { - if((prdata = (char *)malloc( namerec->num_ips * 6 )) == NULL) + if((prdata = (char *)malloc( namerec->data.num_ips * 6 )) == NULL) { DEBUG(0,("send_wins_name_query_response: malloc fail !\n")); return; @@ -1244,12 +1255,12 @@ void send_wins_name_query_response(int rcode, struct packet_struct *p, { struct in_addr *n_mask = iface_nmask(p->ip); - for( j = 0; j < namerec->num_ips; j++) + for( j = 0; j < namerec->data.num_ips; j++) { - if(same_net( namerec->ip[j], p->ip, *n_mask)) + if(same_net( namerec->data.ip[j], p->ip, *n_mask)) { - set_nb_flags(&prdata[0],namerec->nb_flags); - putip((char *)&prdata[2], &namerec->ip[j]); + set_nb_flags(&prdata[0],namerec->data.nb_flags); + putip((char *)&prdata[2], &namerec->data.ip[j]); same_net_index = j; i = 1; } @@ -1257,15 +1268,15 @@ void send_wins_name_query_response(int rcode, struct packet_struct *p, } } - for(j = 0; j < namerec->num_ips; j++) + for(j = 0; j < namerec->data.num_ips; j++) { if(j == same_net_index) continue; - set_nb_flags(&prdata[i*6],namerec->nb_flags); - putip((char *)&prdata[2+(i*6)], &namerec->ip[j]); + set_nb_flags(&prdata[i*6],namerec->data.nb_flags); + putip((char *)&prdata[2+(i*6)], &namerec->data.ip[j]); i++; } - reply_data_len = namerec->num_ips * 6; + reply_data_len = namerec->data.num_ips * 6; } @@ -1316,7 +1327,7 @@ void wins_process_name_query_request(struct subnet_record *subrec, * If it's a DNSFAIL_NAME then reply name not found. */ - if(namerec->source == DNSFAIL_NAME) + if( namerec->data.source == DNSFAIL_NAME ) { DEBUG(3,("wins_process_name_query: name query for name %s returning DNS fail.\n", namestr(question) )); @@ -1328,7 +1339,8 @@ void wins_process_name_query_request(struct subnet_record *subrec, * If the name has expired then reply name not found. */ - if((namerec->death_time != PERMANENT_TTL) && (namerec->death_time < p->timestamp)) + if( (namerec->data.death_time != PERMANENT_TTL) + && (namerec->data.death_time < p->timestamp) ) { DEBUG(3,("wins_process_name_query: name query for name %s - name expired. Returning fail.\n", namestr(question) )); @@ -1337,7 +1349,7 @@ void wins_process_name_query_request(struct subnet_record *subrec, } DEBUG(3,("wins_process_name_query: name query for name %s returning first IP %s.\n", - namestr(question), inet_ntoa(namerec->ip[0]) )); + namestr(question), inet_ntoa(namerec->data.ip[0]) )); send_wins_name_query_response(0, p, namerec); return; @@ -1437,7 +1449,8 @@ to release name %s from IP %s.", namestr(question), inet_ntoa(p->ip) )); namerec = find_name_on_subnet(subrec, question, FIND_ANY_NAME); - if((namerec == NULL) || ((namerec != NULL) && (namerec->source != REGISTER_NAME)) ) + if( (namerec == NULL) + || ((namerec != NULL) && (namerec->data.source != REGISTER_NAME)) ) { send_wins_name_release_response(NAM_ERR, p); return; @@ -1479,7 +1492,7 @@ release name %s as IP %s is not one of the known IP's for this name.\n", /* * Remove the name entirely if no IP addresses left. */ - if (namerec->num_ips == 0) + if (namerec->data.num_ips == 0) remove_name_from_namelist(subrec, namerec); } @@ -1544,27 +1557,27 @@ void wins_write_database(void) DEBUG(4,("%-19s ", namestr(&namerec->name) )); - if(namerec->death_time != PERMANENT_TTL) + if( namerec->data.death_time != PERMANENT_TTL ) { - tm = LocalTime(&namerec->death_time); + tm = LocalTime(&namerec->data.death_time); DEBUG(4,("TTL = %s", asctime(tm) )); } else DEBUG(4,("TTL = PERMANENT\t")); - for (i = 0; i < namerec->num_ips; i++) - DEBUG(4,("%15s ", inet_ntoa(namerec->ip[i]) )); - DEBUG(4,("%2x\n", namerec->nb_flags )); + for (i = 0; i < namerec->data.num_ips; i++) + DEBUG(4,("%15s ", inet_ntoa(namerec->data.ip[i]) )); + DEBUG(4,("%2x\n", namerec->data.nb_flags )); - if (namerec->source == REGISTER_NAME) + if( namerec->data.source == REGISTER_NAME ) { fprintf(fp, "\"%s#%02x\" %d ", namerec->name.name,namerec->name.name_type, /* Ignore scope. */ - (int)namerec->death_time); + (int)namerec->data.death_time); - for (i = 0; i < namerec->num_ips; i++) - fprintf(fp, "%s ", inet_ntoa(namerec->ip[i])); - fprintf(fp, "%2xR\n", namerec->nb_flags); + for (i = 0; i < namerec->data.num_ips; i++) + fprintf( fp, "%s ", inet_ntoa( namerec->data.ip[i] ) ); + fprintf( fp, "%2xR\n", namerec->data.nb_flags ); } } -- cgit