Ignore:
Timestamp:
Aug 5, 2009, 6:34:45 PM (16 years ago)
Author:
Herwig Bauernfeind
Message:

Update 3.0 to final 3.0.36 (source)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/samba-3.0/source/nsswitch/wins.c

    r1 r312  
    2525
    2626#include <ns_daemon.h>
     27#endif
     28
     29#if HAVE_PTHREAD_H
     30#include <pthread.h>
     31#endif
     32
     33#if HAVE_PTHREAD
     34static pthread_mutex_t wins_nss_mutex = PTHREAD_MUTEX_INITIALIZER;
    2735#endif
    2836
     
    298306                          char *buffer, size_t buflen, int *h_errnop)
    299307{
     308        NSS_STATUS nss_status = NSS_STATUS_SUCCESS;
    300309        struct in_addr *ip_list;
    301310        int i, count;
     
    303312        size_t namelen;
    304313               
     314#if HAVE_PTHREAD
     315        pthread_mutex_lock(&wins_nss_mutex);
     316#endif
     317
    305318        memset(he, '\0', sizeof(*he));
    306319        fstrcpy(name, hostname);
     
    310323        ip_list = lookup_byname_backend(name, &count);
    311324
    312         if (!ip_list)
    313                 return NSS_STATUS_NOTFOUND;
     325        if (!ip_list) {
     326                nss_status = NSS_STATUS_NOTFOUND;
     327                goto out;
     328        }
    314329
    315330        /* Copy h_name */
     
    317332        namelen = strlen(name) + 1;
    318333
    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        }
    321338
    322339        memcpy(he->h_name, name, namelen);
     
    327344                i = sizeof(char*) - i;
    328345
    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        }
    331350
    332351        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        }
    335356
    336357        for (i = 0; i < count; i++) {
    337358                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                }
    340363                memcpy(he->h_addr_list[i], &ip_list[i], INADDRSZ);
    341364        }
     
    356379                i = sizeof(char*) - i;
    357380
    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        }
    360385
    361386        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        }
    364391
    365392        he->h_aliases[0] = NULL;
    366393
    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;
    368402}
    369403
     
    373407                           char *buffer, size_t buflen, int *h_errnop)
    374408{
     409        NSS_STATUS nss_status;
     410
     411#if HAVE_PTHREAD
     412        pthread_mutex_lock(&wins_nss_mutex);
     413#endif
     414
    375415        if(af!=AF_INET) {
    376416                *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.