The branch, v3-devel has been updated
       via  ee26664602445fa7798e2061f6bcbef0756d6528 (commit)
      from  7b4c8a4e39f310eb450918fa841b0ea1b4af19f7 (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-devel


- Log -----------------------------------------------------------------
commit ee26664602445fa7798e2061f6bcbef0756d6528
Author: Gerald (Jerry) Carter <[EMAIL PROTECTED]>
Date:   Wed Aug 20 13:00:40 2008 -0500

    nss_winbind: When returning NSS_UNAVAIL, squash errno to ENOENT
    
    According to the GNU libc nss guide, we should always set
    errno to ENOENT when returning NSS_UNAVAIL.
    
    
http://www.gnu.org/software/libtool/manual/libc/NSS-Modules-Interface.html#NSS-Modules-Interface
    
    At least the MQ Series message queing service that runs
    on WebSphere will fail if you return any other errno in this case.

-----------------------------------------------------------------------

Summary of changes:
 source/nsswitch/wb_common.c |   20 ++++++++++++++++++--
 1 files changed, 18 insertions(+), 2 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/nsswitch/wb_common.c b/source/nsswitch/wb_common.c
index b113fc3..6e6d2bb 100644
--- a/source/nsswitch/wb_common.c
+++ b/source/nsswitch/wb_common.c
@@ -176,11 +176,13 @@ static int winbind_named_pipe_sock(const char *dir)
        /* Check permissions on unix socket directory */
 
        if (lstat(dir, &st) == -1) {
+               errno = ENOENT;
                return -1;
        }
 
        if (!S_ISDIR(st.st_mode) ||
            (st.st_uid != 0 && st.st_uid != geteuid())) {
+               errno = ENOENT;
                return -1;
        }
 
@@ -199,6 +201,7 @@ static int winbind_named_pipe_sock(const char *dir)
           the winbindd daemon is not running. */
 
        if (lstat(path, &st) == -1) {
+               errno = ENOENT;
                SAFE_FREE(path);
                return -1;
        }
@@ -208,6 +211,7 @@ static int winbind_named_pipe_sock(const char *dir)
 
        if (!S_ISSOCK(st.st_mode) ||
            (st.st_uid != 0 && st.st_uid != geteuid())) {
+               errno = ENOENT;
                return -1;
        }
 
@@ -368,6 +372,7 @@ int winbind_write_sock(void *buffer, int count, int 
recursing, int need_priv)
  restart:
        
        if (winbind_open_pipe_sock(recursing, need_priv) == -1) {
+               errno = ENOENT;
                return -1;
        }
        
@@ -564,7 +569,11 @@ NSS_STATUS winbindd_send_request(int req_type, int 
need_priv,
        
        if (winbind_write_sock(request, sizeof(*request),
                               request->wb_flags & WBFLAG_RECURSE,
-                              need_priv) == -1) {
+                              need_priv) == -1) 
+       {
+               /* Set ENOENT for consistency.  Required by some apps */
+               errno = ENOENT;
+               
                return NSS_STATUS_UNAVAIL;
        }
 
@@ -572,7 +581,11 @@ NSS_STATUS winbindd_send_request(int req_type, int 
need_priv,
            (winbind_write_sock(request->extra_data.data,
                                request->extra_len,
                                request->wb_flags & WBFLAG_RECURSE,
-                               need_priv) == -1)) {
+                               need_priv) == -1)) 
+       {
+               /* Set ENOENT for consistency.  Required by some apps */
+               errno = ENOENT;
+
                return NSS_STATUS_UNAVAIL;
        }
        
@@ -596,6 +609,9 @@ NSS_STATUS winbindd_get_response(struct winbindd_response 
*response)
 
        /* Wait for reply */
        if (winbindd_read_reply(response) == -1) {
+               /* Set ENOENT for consistency.  Required by some apps */
+               errno = ENOENT;
+
                return NSS_STATUS_UNAVAIL;
        }
 


-- 
Samba Shared Repository

Reply via email to