Changeset 312 for branches/samba-3.0/source/nsswitch/wins.c
- Timestamp:
- Aug 5, 2009, 6:34:45 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/samba-3.0/source/nsswitch/wins.c
r1 r312 25 25 26 26 #include <ns_daemon.h> 27 #endif 28 29 #if HAVE_PTHREAD_H 30 #include <pthread.h> 31 #endif 32 33 #if HAVE_PTHREAD 34 static pthread_mutex_t wins_nss_mutex = PTHREAD_MUTEX_INITIALIZER; 27 35 #endif 28 36 … … 298 306 char *buffer, size_t buflen, int *h_errnop) 299 307 { 308 NSS_STATUS nss_status = NSS_STATUS_SUCCESS; 300 309 struct in_addr *ip_list; 301 310 int i, count; … … 303 312 size_t namelen; 304 313 314 #if HAVE_PTHREAD 315 pthread_mutex_lock(&wins_nss_mutex); 316 #endif 317 305 318 memset(he, '\0', sizeof(*he)); 306 319 fstrcpy(name, hostname); … … 310 323 ip_list = lookup_byname_backend(name, &count); 311 324 312 if (!ip_list) 313 return NSS_STATUS_NOTFOUND; 325 if (!ip_list) { 326 nss_status = NSS_STATUS_NOTFOUND; 327 goto out; 328 } 314 329 315 330 /* Copy h_name */ … … 317 332 namelen = strlen(name) + 1; 318 333 319 if ((he->h_name = get_static(&buffer, &buflen, namelen)) == NULL) 320 return NSS_STATUS_TRYAGAIN; 334 if ((he->h_name = get_static(&buffer, &buflen, namelen)) == NULL) { 335 nss_status = NSS_STATUS_TRYAGAIN; 336 goto out; 337 } 321 338 322 339 memcpy(he->h_name, name, namelen); … … 327 344 i = sizeof(char*) - i; 328 345 329 if (get_static(&buffer, &buflen, i) == NULL) 330 return NSS_STATUS_TRYAGAIN; 346 if (get_static(&buffer, &buflen, i) == NULL) { 347 nss_status = NSS_STATUS_TRYAGAIN; 348 goto out; 349 } 331 350 332 351 if ((he->h_addr_list = (char **)get_static( 333 &buffer, &buflen, (count + 1) * sizeof(char *))) == NULL) 334 return NSS_STATUS_TRYAGAIN; 352 &buffer, &buflen, (count + 1) * sizeof(char *))) == NULL) { 353 nss_status = NSS_STATUS_TRYAGAIN; 354 goto out; 355 } 335 356 336 357 for (i = 0; i < count; i++) { 337 358 if ((he->h_addr_list[i] = get_static(&buffer, &buflen, 338 INADDRSZ)) == NULL) 339 return NSS_STATUS_TRYAGAIN; 359 INADDRSZ)) == NULL) { 360 nss_status = NSS_STATUS_TRYAGAIN; 361 goto out; 362 } 340 363 memcpy(he->h_addr_list[i], &ip_list[i], INADDRSZ); 341 364 } … … 356 379 i = sizeof(char*) - i; 357 380 358 if (get_static(&buffer, &buflen, i) == NULL) 359 return NSS_STATUS_TRYAGAIN; 381 if (get_static(&buffer, &buflen, i) == NULL) { 382 nss_status = NSS_STATUS_TRYAGAIN; 383 goto out; 384 } 360 385 361 386 if ((he->h_aliases = (char **)get_static( 362 &buffer, &buflen, sizeof(char *))) == NULL) 363 return NSS_STATUS_TRYAGAIN; 387 &buffer, &buflen, sizeof(char *))) == NULL) { 388 nss_status = NSS_STATUS_TRYAGAIN; 389 goto out; 390 } 364 391 365 392 he->h_aliases[0] = NULL; 366 393 367 return NSS_STATUS_SUCCESS; 394 nss_status = NSS_STATUS_SUCCESS; 395 396 out: 397 398 #if HAVE_PTHREAD 399 pthread_mutex_unlock(&wins_nss_mutex); 400 #endif 401 return nss_status; 368 402 } 369 403 … … 373 407 char *buffer, size_t buflen, int *h_errnop) 374 408 { 409 NSS_STATUS nss_status; 410 411 #if HAVE_PTHREAD 412 pthread_mutex_lock(&wins_nss_mutex); 413 #endif 414 375 415 if(af!=AF_INET) { 376 416 *h_errnop = NO_DATA; 377 return NSS_STATUS_UNAVAIL; 378 } 379 380 return _nss_wins_gethostbyname_r( 381 name, he, buffer, buflen, h_errnop); 382 } 383 #endif 417 nss_status = NSS_STATUS_UNAVAIL; 418 } else { 419 nss_status = _nss_wins_gethostbyname_r( 420 name, he, buffer, buflen, h_errnop); 421 } 422 #if HAVE_PTHREAD 423 pthread_mutex_unlock(&wins_nss_mutex); 424 #endif 425 return nss_status; 426 } 427 #endif
Note:
See TracChangeset
for help on using the changeset viewer.