nmbd/nmbd_namelistdb.c

ソースコードを見る。

関数

void set_samba_nb_type (void)
static void upcase_name (struct nmb_name *target, const struct nmb_name *source)
void remove_name_from_namelist (struct subnet_record *subrec, struct name_record *namerec)
name_recordfind_name_on_subnet (struct subnet_record *subrec, const struct nmb_name *nmbname, BOOL self_only)
name_recordfind_name_for_remote_broadcast_subnet (struct nmb_name *nmbname, BOOL self_only)
void update_name_ttl (struct name_record *namerec, int ttl)
BOOL add_name_to_subnet (struct subnet_record *subrec, const char *name, int type, uint16 nb_flags, int ttl, enum name_source source, int num_ips, struct in_addr *iplist)
void standard_success_register (struct subnet_record *subrec, struct userdata_struct *userdata, struct nmb_name *nmbname, uint16 nb_flags, int ttl, struct in_addr registered_ip)
void standard_fail_register (struct subnet_record *subrec, struct nmb_name *nmbname)
static void remove_nth_ip_in_record (struct name_record *namerec, int ind)
BOOL find_ip_in_name_record (struct name_record *namerec, struct in_addr ip)
void add_ip_to_name_record (struct name_record *namerec, struct in_addr new_ip)
void remove_ip_from_name_record (struct name_record *namerec, struct in_addr remove_ip)
void standard_success_release (struct subnet_record *subrec, struct userdata_struct *userdata, struct nmb_name *nmbname, struct in_addr released_ip)
static void expire_names_on_subnet (struct subnet_record *subrec, time_t t)
void expire_names (time_t t)
void add_samba_names_to_subnet (struct subnet_record *subrec)
void dump_name_record (struct name_record *namerec, XFILE *fp)
static void dump_subnet_namelist (struct subnet_record *subrec, XFILE *fp)
void dump_all_namelists (void)

変数

uint16 samba_nb_type = 0


関数

void set_samba_nb_type ( void   ) 

nmbd_namelistdb.c33 行で定義されています。

参照先 samba_nb_typewins_srv_count().

参照元 main().

00034 {
00035         if( lp_wins_support() || wins_srv_count() ) {
00036                 samba_nb_type = NB_HFLAG;               /* samba is a 'hybrid' node type. */
00037         } else {
00038                 samba_nb_type = NB_BFLAG;           /* samba is broadcast-only node type. */
00039         }
00040 }

static void upcase_name ( struct nmb_name target,
const struct nmb_name source 
) [static]

nmbd_namelistdb.c46 行で定義されています。

参照先 nmb_name::namepull_ascii()pull_ascii_nstring()push_ascii()push_ascii_nstring()nmb_name::scopestrupper_m().

参照元 add_name_to_subnet()find_name_on_subnet().

00047 {
00048         int i;
00049         unstring targ;
00050         fstring scope;
00051 
00052         if( NULL != source ) {
00053                 memcpy( target, source, sizeof( struct nmb_name ) );
00054         }
00055 
00056         pull_ascii_nstring(targ, sizeof(targ), target->name);
00057         strupper_m( targ );
00058         push_ascii_nstring( target->name, targ);
00059 
00060         pull_ascii(scope, target->scope, 64, -1, STR_TERMINATE);
00061         strupper_m( scope );
00062         push_ascii(target->scope, scope, 64, STR_TERMINATE);
00063 
00064         /* fudge... We're using a byte-by-byte compare, so we must be sure that
00065          * unused space doesn't have garbage in it.
00066          */
00067 
00068         for( i = strlen( target->name ); i < sizeof( target->name ); i++ ) {
00069                 target->name[i] = '\0';
00070         }
00071         for( i = strlen( target->scope ); i < sizeof( target->scope ); i++ ) {
00072                 target->scope[i] = '\0';
00073         }
00074 }

void remove_name_from_namelist ( struct subnet_record subrec,
struct name_record namerec 
)

nmbd_namelistdb.c80 行で定義されています。

参照先 subnet_record::namelistsubnet_record::namelist_changedremove_name_from_wins_namelist()wins_server_subnet.

参照元 expire_names_on_subnet()process_name_registration_request()release_msbrowse_name_fail()remove_permanent_name_from_unicast()standard_fail_register()standard_success_release()unbecome_local_master_fail()wins_process_multihomed_name_registration_request()wins_process_name_refresh_request()wins_process_name_registration_request()wins_register_query_fail().

00082 {
00083         if (subrec == wins_server_subnet) 
00084                 remove_name_from_wins_namelist(namerec);
00085         else {
00086                 subrec->namelist_changed = True;
00087                 DLIST_REMOVE(subrec->namelist, namerec);
00088         }
00089 
00090         SAFE_FREE(namerec->data.ip);
00091         ZERO_STRUCTP(namerec);
00092         SAFE_FREE(namerec);
00093 }

struct name_record* find_name_on_subnet ( struct subnet_record subrec,
const struct nmb_name nmbname,
BOOL  self_only 
)

nmbd_namelistdb.c99 行で定義されています。

参照先 name_record::datafind_name_on_wins_subnet()name_record::namesubnet_record::namelistname_record::nextnmb_namestr()PERMANENT_NAMESELF_NAMEnmb_data::sourcesubnet_record::subnet_nameupcase_name()wins_server_subnet.

参照元 add_dns_result()add_logon_names()become_domain_master_browser_bcast()become_domain_master_browser_wins()check_elections()find_name_for_remote_broadcast_subnet()find_name_in_lmhosts()insert_permanent_name_into_unicast()insert_refresh_name_into_unicast()listening()nmbd_wins_new_entry()process_name_query_request()process_name_registration_request()process_name_release_request()process_node_status_request()query_local_namelists()release_1d_name()release_msbrowse_name_fail()remove_permanent_name_from_unicast()run_elections()standard_fail_register()standard_success_register()standard_success_release()unbecome_local_master_browser()unbecome_local_master_fail()wins_multihomed_register_query_success()wins_process_multihomed_name_registration_request()wins_process_name_query_request()wins_process_name_refresh_request()wins_process_name_registration_request()wins_process_name_release_request()wins_register_query_fail().

00102 {
00103         struct nmb_name uc_name;
00104         struct name_record *name_ret;
00105 
00106         upcase_name( &uc_name, nmbname );
00107         
00108         if (subrec == wins_server_subnet) {
00109                 return find_name_on_wins_subnet(&uc_name, self_only);
00110         }
00111 
00112         for( name_ret = subrec->namelist; name_ret; name_ret = name_ret->next) {
00113                 if (memcmp(&uc_name, &name_ret->name, sizeof(struct nmb_name)) == 0) {
00114                         break;
00115                 }
00116         }
00117 
00118         if( name_ret ) {
00119                 /* Self names only - these include permanent names. */
00120                 if( self_only && (name_ret->data.source != SELF_NAME) && (name_ret->data.source != PERMANENT_NAME) ) {
00121                         DEBUG( 9, ( "find_name_on_subnet: on subnet %s - self name %s NOT FOUND\n",
00122                                                 subrec->subnet_name, nmb_namestr(nmbname) ) );
00123                         return NULL;
00124                 }
00125 
00126                 DEBUG( 9, ("find_name_on_subnet: on subnet %s - found name %s source=%d\n",
00127                         subrec->subnet_name, nmb_namestr(nmbname), name_ret->data.source) );
00128 
00129                 return name_ret;
00130         }
00131 
00132         DEBUG( 9, ( "find_name_on_subnet: on subnet %s - name %s NOT FOUND\n",
00133                 subrec->subnet_name, nmb_namestr(nmbname) ) );
00134 
00135         return NULL;
00136 }

struct name_record* find_name_for_remote_broadcast_subnet ( struct nmb_name nmbname,
BOOL  self_only 
)

nmbd_namelistdb.c142 行で定義されています。

参照先 find_name_on_subnet().

参照元 process_name_query_request().

00144 {
00145         struct subnet_record *subrec;
00146         struct name_record *namerec;
00147 
00148         for( subrec = FIRST_SUBNET; subrec; subrec = NEXT_SUBNET_EXCLUDING_UNICAST(subrec) ) {
00149                 namerec = find_name_on_subnet(subrec, nmbname, self_only);
00150                 if (namerec) {
00151                         return namerec;
00152                 }
00153         }
00154 
00155         return NULL;
00156 }

void update_name_ttl ( struct name_record namerec,
int  ttl 
)

nmbd_namelistdb.c162 行で定義されています。

参照先 name_record::datanmb_data::death_timesubnet_record::namelist_changednmb_data::refresh_timename_record::subnetwins_server_subnetwins_store_changed_namerec().

参照元 process_name_registration_request()standard_success_register()wins_multihomed_register_query_success()wins_process_multihomed_name_registration_request()wins_process_name_refresh_request()wins_process_name_registration_request()wins_process_name_release_request().

00163 {
00164         time_t time_now = time(NULL);
00165 
00166         if( namerec->data.death_time != PERMANENT_TTL) {
00167                 namerec->data.death_time = time_now + ttl;
00168         }
00169 
00170         namerec->data.refresh_time = time_now + MIN((ttl/2), MAX_REFRESH_TIME);
00171 
00172         if (namerec->subnet == wins_server_subnet) {
00173                 wins_store_changed_namerec(namerec);
00174         } else {
00175                 namerec->subnet->namelist_changed = True;
00176         }
00177 }

BOOL add_name_to_subnet ( struct subnet_record subrec,
const char *  name,
int  type,
uint16  nb_flags,
int  ttl,
enum name_source  source,
int  num_ips,
struct in_addr *  iplist 
)

nmbd_namelistdb.c183 行で定義されています。

参照先 add_name_to_wins_subnet()make_nmb_name()my_netbios_names()subnet_record::namelistsubnet_record::namelist_changednmb_namestr()strequal()subnet_record::subnet_nameupcase_name()wins_server_subnet.

参照元 add_dns_result()add_samba_names_to_subnet()initialise_wins()insert_permanent_name_into_unicast()insert_refresh_name_into_unicast()load_lmhosts_file()multihomed_register_name()nmbd_wins_new_entry()standard_success_register()wins_process_multihomed_name_registration_request()wins_process_name_registration_request().

00191 {
00192         BOOL ret = False;
00193         struct name_record *namerec;
00194         time_t time_now = time(NULL);
00195 
00196         namerec = SMB_MALLOC_P(struct name_record);
00197         if( NULL == namerec ) {
00198                 DEBUG( 0, ( "add_name_to_subnet: malloc fail.\n" ) );
00199                 return False;
00200         }
00201 
00202         memset( (char *)namerec, '\0', sizeof(*namerec) );
00203         namerec->data.ip = SMB_MALLOC_ARRAY( struct in_addr, num_ips );
00204         if( NULL == namerec->data.ip ) {
00205                 DEBUG( 0, ( "add_name_to_subnet: malloc fail when creating ip_flgs.\n" ) );
00206                 ZERO_STRUCTP(namerec);
00207                 SAFE_FREE(namerec);
00208                 return False;
00209         }
00210 
00211         namerec->subnet = subrec;
00212 
00213         make_nmb_name(&namerec->name, name, type);
00214         upcase_name(&namerec->name, NULL );
00215 
00216         /* Enter the name as active. */
00217         namerec->data.nb_flags = nb_flags | NB_ACTIVE;
00218         namerec->data.wins_flags = WINS_ACTIVE;
00219 
00220         /* If it's our primary name, flag it as so. */
00221         if (strequal( my_netbios_names(0), name )) {
00222                 namerec->data.nb_flags |= NB_PERM;
00223         }
00224 
00225         /* Copy the IPs. */
00226         namerec->data.num_ips = num_ips;
00227         memcpy( (namerec->data.ip), iplist, num_ips * sizeof(struct in_addr) );
00228 
00229         /* Data source. */
00230         namerec->data.source = source;
00231 
00232         /* Setup the death_time and refresh_time. */
00233         if (ttl == PERMANENT_TTL) {
00234                 namerec->data.death_time = PERMANENT_TTL;
00235         } else {
00236                 namerec->data.death_time = time_now + ttl;
00237         }
00238 
00239         namerec->data.refresh_time = time_now + MIN((ttl/2), MAX_REFRESH_TIME);
00240 
00241         DEBUG( 3, ( "add_name_to_subnet: Added netbios name %s with first IP %s \
00242 ttl=%d nb_flags=%2x to subnet %s\n",
00243                 nmb_namestr( &namerec->name ),
00244                 inet_ntoa( *iplist ),
00245                 ttl,
00246                 (unsigned int)nb_flags,
00247                 subrec->subnet_name ) );
00248 
00249         /* Now add the record to the name list. */    
00250 
00251         if (subrec == wins_server_subnet) {
00252                 ret = add_name_to_wins_subnet(namerec);
00253                 /* Free namerec - it's stored in the tdb. */
00254                 SAFE_FREE(namerec->data.ip);
00255                 SAFE_FREE(namerec);
00256         } else {
00257                 DLIST_ADD(subrec->namelist, namerec);
00258                 subrec->namelist_changed = True;
00259                 ret = True;
00260         }
00261 
00262         return ret;
00263 }

void standard_success_register ( struct subnet_record subrec,
struct userdata_struct userdata,
struct nmb_name nmbname,
uint16  nb_flags,
int  ttl,
struct in_addr  registered_ip 
)

nmbd_namelistdb.c271 行で定義されています。

参照先 add_name_to_subnet()find_name_on_subnet()nmb_name::namenamenmb_name::name_typepull_ascii_nstring()SELF_NAMEupdate_name_ttl().

参照元 register_name_response()register_name_timeout_response()wins_registration_timeout().

00275 {
00276         struct name_record *namerec;
00277 
00278         namerec = find_name_on_subnet( subrec, nmbname, FIND_SELF_NAME);
00279         if (namerec == NULL) {
00280                 unstring name;
00281                 pull_ascii_nstring(name, sizeof(name), nmbname->name);
00282                 add_name_to_subnet( subrec, name, nmbname->name_type,
00283                         nb_flags, ttl, SELF_NAME, 1, &registered_ip );
00284         } else {
00285                 update_name_ttl( namerec, ttl );
00286         }
00287 }

void standard_fail_register ( struct subnet_record subrec,
struct nmb_name nmbname 
)

nmbd_namelistdb.c296 行で定義されています。

参照先 find_name_on_subnet()nmb_namestr()remove_name_from_namelist()subnet_record::subnet_name.

参照元 register_name_response()register_name_timeout_response().

00298 {
00299         struct name_record *namerec;
00300 
00301         namerec = find_name_on_subnet( subrec, nmbname, FIND_SELF_NAME);
00302 
00303         DEBUG( 0, ( "standard_fail_register: Failed to register/refresh name %s \
00304 on subnet %s\n", nmb_namestr(nmbname), subrec->subnet_name) );
00305 
00306         /* Remove the name from the subnet. */
00307         if( namerec ) {
00308                 remove_name_from_namelist(subrec, namerec);
00309         }
00310 }

static void remove_nth_ip_in_record ( struct name_record namerec,
int  ind 
) [static]

nmbd_namelistdb.c316 行で定義されています。

参照先 name_record::datanmb_data::ipsubnet_record::namelist_changednmb_data::num_ipsname_record::subnetwins_server_subnetwins_store_changed_namerec().

参照元 remove_ip_from_name_record().

00317 {
00318         if( ind != namerec->data.num_ips ) {
00319                 memmove( (char *)(&namerec->data.ip[ind]),
00320                                 (char *)(&namerec->data.ip[ind+1]), 
00321                                 ( namerec->data.num_ips - ind - 1) * sizeof(struct in_addr) );
00322         }
00323 
00324         namerec->data.num_ips--;
00325         if (namerec->subnet == wins_server_subnet) {
00326                 wins_store_changed_namerec(namerec);
00327         } else {
00328                 namerec->subnet->namelist_changed = True;
00329         }
00330 }

BOOL find_ip_in_name_record ( struct name_record namerec,
struct in_addr  ip 
)

nmbd_namelistdb.c336 行で定義されています。

参照先 name_record::datanmb_data::ipnmb_data::num_ips.

参照元 add_ip_to_name_record()nmbd_wins_new_entry()wins_multihomed_register_query_success()wins_process_multihomed_name_registration_request()wins_process_name_refresh_request()wins_process_name_registration_request()wins_process_name_release_request().

00337 {
00338         int i;
00339 
00340         for(i = 0; i < namerec->data.num_ips; i++) {
00341                 if(ip_equal( namerec->data.ip[i], ip)) {
00342                         return True;
00343                 }
00344         }
00345 
00346         return False;
00347 }

void add_ip_to_name_record ( struct name_record namerec,
struct in_addr  new_ip 
)

nmbd_namelistdb.c353 行で定義されています。

参照先 name_record::datafind_ip_in_name_record()nmb_data::ipsubnet_record::namelist_changednmb_data::num_ipsname_record::subnetwins_server_subnetwins_store_changed_namerec().

参照元 insert_permanent_name_into_unicast()insert_refresh_name_into_unicast()nmbd_wins_new_entry()wins_multihomed_register_query_success()wins_process_multihomed_name_registration_request()wins_process_name_registration_request().

00354 {
00355         struct in_addr *new_list;
00356 
00357         /* Don't add one we already have. */
00358         if( find_ip_in_name_record( namerec, new_ip )) {
00359                 return;
00360         }
00361   
00362         new_list = SMB_MALLOC_ARRAY( struct in_addr, namerec->data.num_ips + 1);
00363         if( NULL == new_list ) {
00364                 DEBUG(0,("add_ip_to_name_record: Malloc fail !\n"));
00365                 return;
00366         }
00367 
00368         memcpy( (char *)new_list, (char *)namerec->data.ip, namerec->data.num_ips * sizeof(struct in_addr) );
00369         new_list[namerec->data.num_ips] = new_ip;
00370 
00371         SAFE_FREE(namerec->data.ip);
00372         namerec->data.ip = new_list;
00373         namerec->data.num_ips += 1;
00374 
00375         if (namerec->subnet == wins_server_subnet) {
00376                 wins_store_changed_namerec(namerec);
00377         } else {
00378                 namerec->subnet->namelist_changed = True;
00379         }
00380 }

void remove_ip_from_name_record ( struct name_record namerec,
struct in_addr  remove_ip 
)

nmbd_namelistdb.c386 行で定義されています。

参照先 name_record::datanmb_data::ipnmb_data::num_ipsremove_nth_ip_in_record().

参照元 remove_permanent_name_from_unicast()standard_success_release()wins_process_name_release_request().

00388 {
00389         /* Try and find the requested ip address - remove it. */
00390         int i;
00391         int orig_num = namerec->data.num_ips;
00392 
00393         for(i = 0; i < orig_num; i++) {
00394                 if( ip_equal( remove_ip, namerec->data.ip[i]) ) {
00395                         remove_nth_ip_in_record( namerec, i);
00396                         break;
00397                 }
00398         }
00399 }

void standard_success_release ( struct subnet_record subrec,
struct userdata_struct userdata,
struct nmb_name nmbname,
struct in_addr  released_ip 
)

nmbd_namelistdb.c407 行で定義されています。

参照先 name_record::datafind_name_on_subnet()nmb_namestr()nmb_data::num_ipsremove_ip_from_name_record()remove_name_from_namelist()subnet_record::subnet_name.

参照元 release_name_response()release_name_timeout_response()release_wins_names().

00411 {
00412         struct name_record *namerec;
00413 
00414         namerec = find_name_on_subnet( subrec, nmbname, FIND_ANY_NAME );
00415         if( namerec == NULL ) {
00416                 DEBUG( 0, ( "standard_success_release: Name release for name %s IP %s \
00417 on subnet %s. Name was not found on subnet.\n", nmb_namestr(nmbname), inet_ntoa(released_ip),
00418                                 subrec->subnet_name) );
00419                 return;
00420         } else {
00421                 int orig_num = namerec->data.num_ips;
00422 
00423                 remove_ip_from_name_record( namerec, released_ip );
00424 
00425                 if( namerec->data.num_ips == orig_num ) {
00426                         DEBUG( 0, ( "standard_success_release: Name release for name %s IP %s \
00427 on subnet %s. This ip is not known for this name.\n", nmb_namestr(nmbname), inet_ntoa(released_ip), subrec->subnet_name ) );
00428                 }
00429         }
00430 
00431         if( namerec->data.num_ips == 0 ) {
00432                 remove_name_from_namelist( subrec, namerec );
00433         }
00434 }

static void expire_names_on_subnet ( struct subnet_record subrec,
time_t  t 
) [static]

nmbd_namelistdb.c441 行で定義されています。

参照先 name_record::datanmb_data::death_timename_record::namesubnet_record::namelistsubnet_record::namelist_changedname_record::nextnmb_namestr()remove_name_from_namelist()SELF_NAMEnmb_data::sourcename_record::subnetsubnet_record::subnet_name.

参照元 expire_names().

00442 {
00443         struct name_record *namerec;
00444         struct name_record *next_namerec;
00445 
00446         for( namerec = subrec->namelist; namerec; namerec = next_namerec ) {
00447                 next_namerec = namerec->next;
00448                 if( (namerec->data.death_time != PERMANENT_TTL) && (namerec->data.death_time < t) ) {
00449                         if( namerec->data.source == SELF_NAME ) {
00450                                 DEBUG( 3, ( "expire_names_on_subnet: Subnet %s not expiring SELF \
00451 name %s\n", subrec->subnet_name, nmb_namestr(&namerec->name) ) );
00452                                 namerec->data.death_time += 300;
00453                                 namerec->subnet->namelist_changed = True;
00454                                 continue;
00455                         }
00456 
00457                         DEBUG(3,("expire_names_on_subnet: Subnet %s - removing expired name %s\n",
00458                                 subrec->subnet_name, nmb_namestr(&namerec->name)));
00459   
00460                         remove_name_from_namelist(subrec, namerec );
00461                 }
00462         }
00463 }

void expire_names ( time_t  t  ) 

nmbd_namelistdb.c470 行で定義されています。

参照先 expire_names_on_subnet().

参照元 expire_names_and_servers().

00471 {
00472         struct subnet_record *subrec;
00473 
00474         for( subrec = FIRST_SUBNET; subrec; subrec = NEXT_SUBNET_INCLUDING_UNICAST(subrec) ) {
00475                 expire_names_on_subnet( subrec, t );
00476         }
00477 }

void add_samba_names_to_subnet ( struct subnet_record subrec  ) 

nmbd_namelistdb.c487 行で定義されています。

参照先 add_name_to_subnet()iface_count()subnet_record::myipPERMANENT_NAMEremote_broadcast_subnetsamba_nb_typeunicast_subnetwins_server_subnet.

参照元 initialise_wins()register_my_workgroup_and_names()register_my_workgroup_one_subnet().

00488 {
00489         struct in_addr *iplist = &subrec->myip;
00490         int num_ips = 1;
00491 
00492         /* These names are added permanently (ttl of zero) and will NOT be refreshed.  */
00493 
00494         if( (subrec == unicast_subnet) || (subrec == wins_server_subnet) || (subrec == remote_broadcast_subnet) ) {
00495                 struct subnet_record *bcast_subrecs;
00496                 int i;
00497 
00498                 /* Create an IP list containing all our known subnets. */
00499 
00500                 num_ips = iface_count();
00501                 iplist = SMB_MALLOC_ARRAY( struct in_addr, num_ips);
00502                 if( NULL == iplist ) {
00503                         DEBUG(0,("add_samba_names_to_subnet: Malloc fail !\n"));
00504                         return;
00505                 }
00506 
00507                 for( bcast_subrecs = FIRST_SUBNET, i = 0; bcast_subrecs &&
00508                                 i < num_ips;
00509                                 bcast_subrecs = NEXT_SUBNET_EXCLUDING_UNICAST(bcast_subrecs), i++ ) {
00510                         iplist[i] = bcast_subrecs->myip;
00511                 }
00512                 num_ips = i;
00513         }
00514 
00515         add_name_to_subnet(subrec,"*",0x0,samba_nb_type, PERMANENT_TTL,
00516                                 PERMANENT_NAME, num_ips, iplist);
00517         add_name_to_subnet(subrec,"*",0x20,samba_nb_type,PERMANENT_TTL,
00518                                 PERMANENT_NAME, num_ips, iplist);
00519         add_name_to_subnet(subrec,"__SAMBA__",0x20,samba_nb_type,PERMANENT_TTL,
00520                                 PERMANENT_NAME, num_ips, iplist);
00521         add_name_to_subnet(subrec,"__SAMBA__",0x00,samba_nb_type,PERMANENT_TTL,
00522                                 PERMANENT_NAME, num_ips, iplist);
00523 
00524         if(iplist != &subrec->myip) {
00525                 SAFE_FREE(iplist);
00526         }
00527 }

void dump_name_record ( struct name_record namerec,
XFILE fp 
)

nmbd_namelistdb.c533 行で定義されています。

参照先 name_record::datanmb_data::death_timeDNS_NAMEDNSFAIL_NAMEfpnmb_data::ipLMHOSTS_NAMElocaltime()name_record::namenmb_data::nb_flagsnmb_namestr()nmb_data::num_ipsPERMANENT_NAMEnmb_data::refresh_timeREGISTER_NAMESELF_NAMEnmb_data::sourceWINS_PROXY_NAMEx_fprintf().

参照元 dump_subnet_namelist()traverse_fn().

00534 {
00535         const char *src_type;
00536         struct tm *tm;
00537         int i;
00538 
00539         x_fprintf(fp,"\tName = %s\t", nmb_namestr(&namerec->name));
00540         switch(namerec->data.source) {
00541                 case LMHOSTS_NAME:
00542                         src_type = "LMHOSTS_NAME";
00543                         break;
00544                 case WINS_PROXY_NAME:
00545                         src_type = "WINS_PROXY_NAME";
00546                         break;
00547                 case REGISTER_NAME:
00548                         src_type = "REGISTER_NAME";
00549                         break;
00550                 case SELF_NAME:
00551                         src_type = "SELF_NAME";
00552                         break;
00553                 case DNS_NAME:
00554                         src_type = "DNS_NAME";
00555                         break;
00556                 case DNSFAIL_NAME:
00557                         src_type = "DNSFAIL_NAME";
00558                         break;
00559                 case PERMANENT_NAME:
00560                         src_type = "PERMANENT_NAME";
00561                         break;
00562                 default:
00563                         src_type = "unknown!";
00564                         break;
00565         }
00566 
00567         x_fprintf(fp,"Source = %s\nb_flags = %x\t", src_type, namerec->data.nb_flags);
00568 
00569         if(namerec->data.death_time != PERMANENT_TTL) {
00570                 const char *asct;
00571                 tm = localtime(&namerec->data.death_time);
00572                 if (!tm) {
00573                         return;
00574                 }
00575                 asct = asctime(tm);
00576                 if (!asct) {
00577                         return;
00578                 }
00579                 x_fprintf(fp, "death_time = %s\t", asct);
00580         } else {
00581                 x_fprintf(fp, "death_time = PERMANENT\t");
00582         }
00583 
00584         if(namerec->data.refresh_time != PERMANENT_TTL) {
00585                 const char *asct;
00586                 tm = localtime(&namerec->data.refresh_time);
00587                 if (!tm) {
00588                         return;
00589                 }
00590                 asct = asctime(tm);
00591                 if (!asct) {
00592                         return;
00593                 }
00594                 x_fprintf(fp, "refresh_time = %s\n", asct);
00595         } else {
00596                 x_fprintf(fp, "refresh_time = PERMANENT\n");
00597         }
00598 
00599         x_fprintf(fp, "\t\tnumber of IPS = %d", namerec->data.num_ips);
00600         for(i = 0; i < namerec->data.num_ips; i++) {
00601                 x_fprintf(fp, "\t%s", inet_ntoa(namerec->data.ip[i]));
00602         }
00603 
00604         x_fprintf(fp, "\n\n");
00605         
00606 }

static void dump_subnet_namelist ( struct subnet_record subrec,
XFILE fp 
) [static]

nmbd_namelistdb.c613 行で定義されています。

参照先 dump_name_record()fpsubnet_record::namelistname_record::nextsubnet_record::subnet_namex_fprintf().

参照元 dump_all_namelists().

00614 {
00615         struct name_record *namerec;
00616         x_fprintf(fp, "Subnet %s\n----------------------\n", subrec->subnet_name);
00617         for( namerec = subrec->namelist; namerec; namerec = namerec->next) {
00618                 dump_name_record(namerec, fp);
00619         }
00620 }

void dump_all_namelists ( void   ) 

nmbd_namelistdb.c627 行で定義されています。

参照先 dump_subnet_namelist()dump_wins_subnet_namelist()errnofplock_path()subnet_record::namelistremote_broadcast_subnetstrerror()unicast_subnetwe_are_a_wins_client()wins_server_subnetx_fclose()x_fopen().

参照元 msg_reload_nmbd_services().

00628 {
00629         XFILE *fp; 
00630         struct subnet_record *subrec;
00631 
00632         fp = x_fopen(lock_path("namelist.debug"),O_WRONLY|O_CREAT|O_TRUNC, 0644);
00633      
00634         if (!fp) { 
00635                 DEBUG(0,("dump_all_namelists: Can't open file %s. Error was %s\n",
00636                         "namelist.debug",strerror(errno)));
00637                 return;
00638         }
00639       
00640         for (subrec = FIRST_SUBNET; subrec; subrec = NEXT_SUBNET_INCLUDING_UNICAST(subrec)) {
00641                 dump_subnet_namelist( subrec, fp );
00642         }
00643 
00644         if (!we_are_a_wins_client()) {
00645                 dump_subnet_namelist( unicast_subnet, fp );
00646         }
00647 
00648         if (remote_broadcast_subnet->namelist != NULL) {
00649                 dump_subnet_namelist( remote_broadcast_subnet, fp );
00650         }
00651 
00652         if (wins_server_subnet != NULL) {
00653                 dump_wins_subnet_namelist(fp );
00654         }
00655 
00656         x_fclose( fp );
00657 }


変数

uint16 samba_nb_type = 0

nmbd_namelistdb.c26 行で定義されています。


Sambaに対してSat Aug 29 21:23:53 2009に生成されました。  doxygen 1.4.7