diff --git a/nsswitch/winbind_nss_solaris.c b/nsswitch/winbind_nss_solaris.c index 6d3c8a9..6276202 100644 --- a/nsswitch/winbind_nss_solaris.c +++ b/nsswitch/winbind_nss_solaris.c @@ -88,6 +88,15 @@ struct nss_groupsbymem { strcpy(dest, src); \ } +static NSS_STATUS +_nss_translate_tryagain(int error, NSS_STATUS current) +{ + if (error == ERANGE && current == NSS_STATUS_TRYAGAIN) + return NSS_STATUS_UNAVAIL; + + return current; +} + static NSS_STATUS _nss_winbind_setpwent_solwrap (nss_backend_t* be, void* args) { NSS_DEBUG("_nss_winbind_setpwent_solwrap"); @@ -259,7 +268,7 @@ _nss_winbind_getgrnam_solwrap(nss_backend_t* be, void* args) if(ret == NSS_STATUS_SUCCESS) NSS_ARGS(args)->returnval = (void*) result; - return ret; + return _nss_translate_tryagain(NSS_ARGS(args)->erange, ret); } static NSS_STATUS @@ -278,7 +287,7 @@ _nss_winbind_getgrgid_solwrap(nss_backend_t* be, void* args) if(ret == NSS_STATUS_SUCCESS) NSS_ARGS(args)->returnval = (void*) result; - return ret; + return _nss_translate_tryagain(NSS_ARGS(args)->erange, ret); } static NSS_STATUS