The Samba-Bugzilla – Attachment 3749 Details for
Bug 5904
libnss_wins causes SIGABRT while servicing getaddrinfo() request
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Replacement patch
look (text/plain), 3.37 KB, created by
Jeremy Allison
on 2008-11-19 13:20:55 UTC
(
hide
)
Description:
Replacement patch
Filename:
MIME Type:
Creator:
Jeremy Allison
Created:
2008-11-19 13:20:55 UTC
Size:
3.37 KB
patch
obsolete
>diff --git a/source/nsswitch/wins.c b/source/nsswitch/wins.c >index 7d42381..8a5393a 100644 >--- a/source/nsswitch/wins.c >+++ b/source/nsswitch/wins.c >@@ -25,6 +25,14 @@ > #include <ns_daemon.h> > #endif > >+#if HAVE_PTHREAD_H >+#include <pthread.h> >+#endif >+ >+#if HAVE_PTHREAD >+static pthread_mutex_t wins_nss_mutex = PTHREAD_MUTEX_INITIALIZER; >+#endif >+ > #ifndef INADDRSZ > #define INADDRSZ 4 > #endif >@@ -321,11 +329,16 @@ NSS_STATUS > _nss_wins_gethostbyname_r(const char *hostname, struct hostent *he, > char *buffer, size_t buflen, int *h_errnop) > { >+ NSS_STATUS nss_status = NSS_STATUS_SUCCESS; > struct in_addr *ip_list; > int i, count; > fstring name; > size_t namelen; > >+#if HAVE_PTHREAD >+ pthread_mutex_lock(&wins_nss_mutex); >+#endif >+ > memset(he, '\0', sizeof(*he)); > fstrcpy(name, hostname); > >@@ -333,8 +346,10 @@ _nss_wins_gethostbyname_r(const char *hostname, struct hostent *he, > > ip_list = lookup_byname_backend(name, &count); > >- if (!ip_list) >- return NSS_STATUS_NOTFOUND; >+ if (!ip_list) { >+ nss_status = NSS_STATUS_NOTFOUND; >+ goto out; >+ } > > /* Copy h_name */ > >@@ -342,7 +357,8 @@ _nss_wins_gethostbyname_r(const char *hostname, struct hostent *he, > > if ((he->h_name = get_static(&buffer, &buflen, namelen)) == NULL) { > free(ip_list); >- return NSS_STATUS_TRYAGAIN; >+ nss_status = NSS_STATUS_TRYAGAIN; >+ goto out; > } > > memcpy(he->h_name, name, namelen); >@@ -354,20 +370,23 @@ _nss_wins_gethostbyname_r(const char *hostname, struct hostent *he, > > if (get_static(&buffer, &buflen, i) == NULL) { > free(ip_list); >- return NSS_STATUS_TRYAGAIN; >+ nss_status = NSS_STATUS_TRYAGAIN; >+ goto out; > } > > if ((he->h_addr_list = (char **)get_static( > &buffer, &buflen, (count + 1) * sizeof(char *))) == NULL) { > free(ip_list); >- return NSS_STATUS_TRYAGAIN; >+ nss_status = NSS_STATUS_TRYAGAIN; >+ goto out; > } > > for (i = 0; i < count; i++) { > if ((he->h_addr_list[i] = get_static(&buffer, &buflen, > INADDRSZ)) == NULL) { > free(ip_list); >- return NSS_STATUS_TRYAGAIN; >+ nss_status = NSS_STATUS_TRYAGAIN; >+ goto out; > } > memcpy(he->h_addr_list[i], &ip_list[i], INADDRSZ); > } >@@ -386,16 +405,27 @@ _nss_wins_gethostbyname_r(const char *hostname, struct hostent *he, > if ((i = (unsigned long)(buffer) % sizeof(char*)) != 0) > i = sizeof(char*) - i; > >- if (get_static(&buffer, &buflen, i) == NULL) >- return NSS_STATUS_TRYAGAIN; >+ if (get_static(&buffer, &buflen, i) == NULL) { >+ nss_status = NSS_STATUS_TRYAGAIN; >+ goto out; >+ } > > if ((he->h_aliases = (char **)get_static( >- &buffer, &buflen, sizeof(char *))) == NULL) >- return NSS_STATUS_TRYAGAIN; >+ &buffer, &buflen, sizeof(char *))) == NULL) { >+ nss_status = NSS_STATUS_TRYAGAIN; >+ goto out; >+ } > > he->h_aliases[0] = NULL; > >- return NSS_STATUS_SUCCESS; >+ nss_status = NSS_STATUS_SUCCESS; >+ >+ out: >+ >+#if HAVE_PTHREAD >+ pthread_mutex_unlock(&wins_nss_mutex); >+#endif >+ return nss_status; > } > > >@@ -403,12 +433,15 @@ NSS_STATUS > _nss_wins_gethostbyname2_r(const char *name, int af, struct hostent *he, > char *buffer, size_t buflen, int *h_errnop) > { >+ NSS_STATUS nss_status; >+ > if(af!=AF_INET) { > *h_errnop = NO_DATA; >- return NSS_STATUS_UNAVAIL; >+ nss_status = NSS_STATUS_UNAVAIL; >+ } else { >+ nss_status = _nss_wins_gethostbyname_r( >+ name, he, buffer, buflen, h_errnop); > } >- >- return _nss_wins_gethostbyname_r( >- name, he, buffer, buflen, h_errnop); >+ return nss_status; > } > #endif
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 5904
:
3738
|
3745
| 3749 |
3813