X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=src%2Fpasswd%2Fgetspnam_r.c;h=541e85314d56cc36d7b752ec9693563390ca07b2;hb=c87d75f2aa6fde49a99cf3287e535a14f354f781;hp=541206fa14db8dcea55f26dc24e070c88583ac72;hpb=91d34c4533e6bf6eacad7a9f001f28f9e5ebc656;p=musl diff --git a/src/passwd/getspnam_r.c b/src/passwd/getspnam_r.c index 541206fa..541e8531 100644 --- a/src/passwd/getspnam_r.c +++ b/src/passwd/getspnam_r.c @@ -67,6 +67,7 @@ int getspnam_r(const char *name, struct spwd *sp, char *buf, size_t size, struct size_t k, l = strlen(name); int skip = 0; int cs; + int orig_errno = errno; *res = 0; @@ -93,8 +94,14 @@ int getspnam_r(const char *name, struct spwd *sp, char *buf, size_t size, struct return errno; } } else { + if (errno != ENOENT && errno != ENOTDIR) + return errno; f = fopen("/etc/shadow", "rbe"); - if (!f) return errno; + if (!f) { + if (errno != ENOENT && errno != ENOTDIR) + return errno; + return 0; + } } pthread_cleanup_push(cleanup, f); @@ -113,6 +120,6 @@ int getspnam_r(const char *name, struct spwd *sp, char *buf, size_t size, struct break; } pthread_cleanup_pop(1); - if (rv) errno = rv; + errno = rv ? rv : orig_errno; return rv; }