nss_wrapper: hopefully a better fix for the solaris get*ent_r functions
authormetze <metze@0c0555d6-39d7-0310-84fc-f1cc0bd64818>
Tue, 6 Nov 2007 12:34:50 +0000 (12:34 +0000)
committerStefan Metzmacher <metze@samba.org>
Fri, 9 Nov 2007 08:53:01 +0000 (09:53 +0100)
metze

git-svn-id: svn+ssh://svn.samba.org/data/svn/samba/branches/SAMBA_4_0@25873 0c0555d6-39d7-0310-84fc-f1cc0bd64818

source/lib/nss_wrapper/nss_wrapper.c

index f4ea9bb6de17b65c79f84a286176a4c2532b0b50..5bf7ebda4fe057c700a6840e22d56a393e653731 100644 (file)
@@ -906,7 +906,21 @@ _PUBLIC_ int nwrap_getpwent_r(struct passwd *pwdst, char *buf,
        struct passwd *pw;
 
        if (!nwrap_enabled()) {
+#ifdef SOLARIS_GETPWENT_R
+               pw = real_getpwent_r(pwdst, buf, buflen);
+               if (!pw) {
+                       if (errno == 0) {
+                               return ENOENT;
+                       }
+                       return errno;
+               }
+               if (pwdstp) {
+                       *pwdstp = pw;
+               }
+               return 0;
+#else
                return real_getpwent_r(pwdst, buf, buflen, pwdstp);
+#endif
        }
 
        pw = nwrap_getpwent();
@@ -1078,7 +1092,21 @@ _PUBLIC_ int nwrap_getgrent_r(struct group *grdst, char *buf,
        struct group *gr;
 
        if (!nwrap_enabled()) {
+#ifdef SOLARIS_GETGRENT_R
+               gr = real_getgrent_r(grdst, buf, buflen);
+               if (!gr) {
+                       if (errno == 0) {
+                               return ENOENT;
+                       }
+                       return errno;
+               }
+               if (grdstp) {
+                       *grdstp = gr;
+               }
+               return 0;
+#else
                return real_getgrent_r(grdst, buf, buflen, grdstp);
+#endif
        }
 
        gr = nwrap_getgrent();