nwrap: rename nwrap_he.entdata to nwrap_he.entries
[obnox/samba/samba-obnox.git] / nsswitch / winbind_nss_solaris.c
index 4c85bd3621b57275300e7551090348ffac520024..dfb87e3fdcb42c014b7e15cd3ef77b6dcdd1267a 100644 (file)
 
 #undef DEVELOPER
 
+
 #include "winbind_client.h"
 #include <stdlib.h>
 #include <sys/types.h>
 #include <sys/param.h>
 #include <string.h>
 #include <pwd.h>
-#include "includes.h"
 #include <syslog.h>
+
 #if !defined(HPUX)
 #include <sys/syslog.h>
 #endif /*hpux*/
 #define NSS_DEBUG(str) ;
 #endif
 
+#if !defined(SMB_MALLOC_P)
+#define SMB_MALLOC_P(type) (type *)malloc(sizeof(type))
+#endif
+
 #define NSS_ARGS(args) ((nss_XbyY_args_t *)args)
 
 #ifdef HPUX
@@ -254,6 +259,9 @@ _nss_winbind_getgrnam_solwrap(nss_backend_t* be, void* args)
        if(ret == NSS_STATUS_SUCCESS)
                NSS_ARGS(args)->returnval = (void*) result;
 
+       if (NSS_ARGS(args)->erange == ERANGE && ret == NSS_STATUS_TRYAGAIN)
+               return NSS_STATUS_UNAVAIL;
+
        return ret;
 }
 
@@ -273,6 +281,9 @@ _nss_winbind_getgrgid_solwrap(nss_backend_t* be, void* args)
        if(ret == NSS_STATUS_SUCCESS)
                NSS_ARGS(args)->returnval = (void*) result;
 
+       if (NSS_ARGS(args)->erange == ERANGE && ret == NSS_STATUS_TRYAGAIN)
+               return NSS_STATUS_UNAVAIL;
+
        return ret;
 }
 
@@ -281,17 +292,22 @@ _nss_winbind_getgroupsbymember_solwrap(nss_backend_t* be, void* args)
 {
        int errnop;
        struct nss_groupsbymem *gmem = (struct nss_groupsbymem *)args;
+       long int numgids = gmem->numgids;
+       long int maxgids = gmem->maxgids;
 
        NSS_DEBUG("_nss_winbind_getgroupsbymember");
 
        _nss_winbind_initgroups_dyn(gmem->username,
                gmem->gid_array[0], /* Primary Group */
-               &gmem->numgids,
-               &gmem->maxgids,
+               &numgids,
+               &maxgids,
                &gmem->gid_array,
                gmem->maxgids,
                &errnop);
 
+       gmem->numgids = numgids;
+       gmem->maxgids = maxgids;
+
        /*
         * If the maximum number of gids have been found, return
         * SUCCESS so the switch engine will stop searching. Otherwise
@@ -505,7 +521,8 @@ _nss_winbind_ipnodes_getbyname(nss_backend_t* be, void *args)
        strncpy(request.data.winsreq, argp->key.name, sizeof(request.data.winsreq) - 1);
        request.data.winsreq[sizeof(request.data.winsreq) - 1] = '\0';
 
-       if( (ret = winbindd_request_response(WINBINDD_WINS_BYNAME, &request, &response))
+       if( (ret = winbindd_request_response(NULL, WINBINDD_WINS_BYNAME,
+                                            &request, &response))
                == NSS_STATUS_SUCCESS ) {
          ret = parse_response(af, argp, &response);
        }
@@ -528,7 +545,8 @@ _nss_winbind_hosts_getbyname(nss_backend_t* be, void *args)
        strncpy(request.data.winsreq, argp->key.name, sizeof(request.data.winsreq) - 1);
        request.data.winsreq[sizeof(request.data.winsreq) - 1] = '\0';
 
-       if( (ret = winbindd_request_response(WINBINDD_WINS_BYNAME, &request, &response))
+       if( (ret = winbindd_request_response(NULL, WINBINDD_WINS_BYNAME,
+                                            &request, &response))
                == NSS_STATUS_SUCCESS ) {
          ret = parse_response(AF_INET, argp, &response);
        }
@@ -567,7 +585,8 @@ _nss_winbind_hosts_getbyaddr(nss_backend_t* be, void *args)
                 ((unsigned char *)argp->key.hostaddr.addr)[3]);
 #endif
 
-       ret = winbindd_request_response(WINBINDD_WINS_BYIP, &request, &response);
+       ret = winbindd_request_response(NULL, WINBINDD_WINS_BYIP,
+                                       &request, &response);
 
        if( ret == NSS_STATUS_SUCCESS) {
          parse_response(argp->key.hostaddr.type, argp, &response);