The Samba-Bugzilla – Attachment 12497 Details for
Bug 12269
nss_wins has incorrect function definitions for gethostbyname*
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
patch for 4.4
segfault_nss_wins-v4-4.patch (text/plain), 4.63 KB, created by
Andreas Schneider
on 2016-09-20 08:28:15 UTC
(
hide
)
Description:
patch for 4.4
Filename:
MIME Type:
Creator:
Andreas Schneider
Created:
2016-09-20 08:28:15 UTC
Size:
4.63 KB
patch
obsolete
>From 33bc85d9060340e4ce3d2edecb3fb76dd85a5195 Mon Sep 17 00:00:00 2001 >From: Andreas Schneider <asn@samba.org> >Date: Mon, 19 Sep 2016 16:17:11 +0200 >Subject: [PATCH] nsswitch: Add missing arguments to wins gethostbyname* > >The errno pointer argument is missing. > >BUG: https://bugzilla.samba.org/show_bug.cgi?id=12269 > >Signed-off-by: Andreas Schneider <asn@samba.org> >Reviewed-by: Jeremy Allison <jra@samba.org> >Reviewed-by: Jim McDonough <jmcd@samba.org> >(cherry picked from commit 124ae4e861f048fe015bff32ace4abff4d3e6c62) >--- > nsswitch/wins.c | 51 +++++++++++++++++++++++++++++++++++++++++---------- > 1 file changed, 41 insertions(+), 10 deletions(-) > >diff --git a/nsswitch/wins.c b/nsswitch/wins.c >index fc65c03..be84f2e 100644 >--- a/nsswitch/wins.c >+++ b/nsswitch/wins.c >@@ -39,10 +39,19 @@ static pthread_mutex_t wins_nss_mutex = PTHREAD_MUTEX_INITIALIZER; > #define INADDRSZ 4 > #endif > >-NSS_STATUS _nss_wins_gethostbyname_r(const char *hostname, struct hostent *he, >- char *buffer, size_t buflen, int *h_errnop); >-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_wins_gethostbyname_r(const char *hostname, >+ struct hostent *he, >+ char *buffer, >+ size_t buflen, >+ int *errnop, >+ int *h_errnop); >+NSS_STATUS _nss_wins_gethostbyname2_r(const char *name, >+ int af, >+ struct hostent *he, >+ char *buffer, >+ size_t buflen, >+ int *errnop, >+ int *h_errnop); > > static char *lookup_byname_backend(const char *name) > { >@@ -225,8 +234,12 @@ gethostbyname() - we ignore any domain portion of the name and only > handle names that are at most 15 characters long > **************************************************************************/ > NSS_STATUS >-_nss_wins_gethostbyname_r(const char *hostname, struct hostent *he, >- char *buffer, size_t buflen, int *h_errnop) >+_nss_wins_gethostbyname_r(const char *hostname, >+ struct hostent *he, >+ char *buffer, >+ size_t buflen, >+ int *errnop, >+ int *h_errnop) > { > NSS_STATUS nss_status = NSS_STATUS_SUCCESS; > char *ip; >@@ -247,6 +260,7 @@ _nss_wins_gethostbyname_r(const char *hostname, struct hostent *he, > > ip = lookup_byname_backend(name); > if (ip == NULL) { >+ *errnop = EINVAL; > nss_status = NSS_STATUS_NOTFOUND; > goto out; > } >@@ -254,6 +268,7 @@ _nss_wins_gethostbyname_r(const char *hostname, struct hostent *he, > rc = inet_pton(AF_INET, ip, &in); > wbcFreeMemory(ip); > if (rc == 0) { >+ *errnop = errno; > nss_status = NSS_STATUS_TRYAGAIN; > goto out; > } >@@ -263,6 +278,7 @@ _nss_wins_gethostbyname_r(const char *hostname, struct hostent *he, > namelen = strlen(name) + 1; > > if ((he->h_name = get_static(&buffer, &buflen, namelen)) == NULL) { >+ *errnop = EAGAIN; > nss_status = NSS_STATUS_TRYAGAIN; > goto out; > } >@@ -275,18 +291,21 @@ _nss_wins_gethostbyname_r(const char *hostname, struct hostent *he, > i = sizeof(char*) - i; > > if (get_static(&buffer, &buflen, i) == NULL) { >+ *errnop = EAGAIN; > nss_status = NSS_STATUS_TRYAGAIN; > goto out; > } > > if ((he->h_addr_list = (char **)get_static( > &buffer, &buflen, 2 * sizeof(char *))) == NULL) { >+ *errnop = EAGAIN; > nss_status = NSS_STATUS_TRYAGAIN; > goto out; > } > > if ((he->h_addr_list[0] = get_static(&buffer, &buflen, > INADDRSZ)) == NULL) { >+ *errnop = EAGAIN; > nss_status = NSS_STATUS_TRYAGAIN; > goto out; > } >@@ -306,12 +325,14 @@ _nss_wins_gethostbyname_r(const char *hostname, struct hostent *he, > i = sizeof(char*) - i; > > if (get_static(&buffer, &buflen, i) == NULL) { >+ *errnop = EAGAIN; > nss_status = NSS_STATUS_TRYAGAIN; > goto out; > } > > if ((he->h_aliases = (char **)get_static( > &buffer, &buflen, sizeof(char *))) == NULL) { >+ *errnop = EAGAIN; > nss_status = NSS_STATUS_TRYAGAIN; > goto out; > } >@@ -330,17 +351,27 @@ _nss_wins_gethostbyname_r(const char *hostname, struct hostent *he, > > > NSS_STATUS >-_nss_wins_gethostbyname2_r(const char *name, int af, struct hostent *he, >- char *buffer, size_t buflen, int *h_errnop) >+_nss_wins_gethostbyname2_r(const char *name, >+ int af, >+ struct hostent *he, >+ char *buffer, >+ size_t buflen, >+ int *errnop, >+ int *h_errnop) > { > NSS_STATUS nss_status; > > if(af!=AF_INET) { >+ *errnop = EAFNOSUPPORT; > *h_errnop = NO_DATA; > nss_status = NSS_STATUS_UNAVAIL; > } else { >- nss_status = _nss_wins_gethostbyname_r( >- name, he, buffer, buflen, h_errnop); >+ nss_status = _nss_wins_gethostbyname_r(name, >+ he, >+ buffer, >+ buflen, >+ errnop, >+ h_errnop); > } > return nss_status; > } >-- >2.10.0 >
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
Flags:
jmcd
:
review-
Actions:
View
Attachments on
bug 12269
:
12495
|
12497
|
12503
|
12504
|
12657
|
12683
|
12684