Skip to content
Snippets Groups Projects
Commit 26558bd1 authored by Timo Teräs's avatar Timo Teräs
Browse files

io: use fget{pw,gr}ent_r only on uclibc and glibc

musl does not have those.
parent 4fad6d9c
No related branches found
No related tags found
No related merge requests found
...@@ -25,6 +25,11 @@ ...@@ -25,6 +25,11 @@
#include "apk_io.h" #include "apk_io.h"
#include "apk_hash.h" #include "apk_hash.h"
#if defined(__GLIBC__) || defined(__UCLIBC__)
#define HAVE_FGETPWENT_R
#define HAVE_FGETGRENT_R
#endif
struct apk_fd_istream { struct apk_fd_istream {
struct apk_istream is; struct apk_istream is;
int fd; int fd;
...@@ -908,9 +913,12 @@ void apk_id_cache_reset(struct apk_id_cache *idc) ...@@ -908,9 +913,12 @@ void apk_id_cache_reset(struct apk_id_cache *idc)
uid_t apk_resolve_uid(struct apk_id_cache *idc, const char *username, uid_t default_uid) uid_t apk_resolve_uid(struct apk_id_cache *idc, const char *username, uid_t default_uid)
{ {
struct cache_item *ci; #ifdef HAVE_FGETPWENT_R
struct passwd pwent, *pwd;
char buf[1024]; char buf[1024];
struct passwd pwent;
#endif
struct cache_item *ci;
struct passwd *pwd;
FILE *in; FILE *in;
ci = resolve_cache_item(&idc->uid_cache, APK_BLOB_STR(username)); ci = resolve_cache_item(&idc->uid_cache, APK_BLOB_STR(username));
...@@ -924,7 +932,11 @@ uid_t apk_resolve_uid(struct apk_id_cache *idc, const char *username, uid_t defa ...@@ -924,7 +932,11 @@ uid_t apk_resolve_uid(struct apk_id_cache *idc, const char *username, uid_t defa
in = fdopen(openat(idc->root_fd, "etc/passwd", O_RDONLY|O_CLOEXEC), "r"); in = fdopen(openat(idc->root_fd, "etc/passwd", O_RDONLY|O_CLOEXEC), "r");
if (in != NULL) { if (in != NULL) {
do { do {
#ifdef HAVE_FGETPWENT_R
fgetpwent_r(in, &pwent, buf, sizeof(buf), &pwd); fgetpwent_r(in, &pwent, buf, sizeof(buf), &pwd);
#else
pwd = fgetpwent(in);
#endif
if (pwd == NULL) if (pwd == NULL)
break; break;
if (strcmp(pwd->pw_name, username) == 0) { if (strcmp(pwd->pw_name, username) == 0) {
...@@ -944,9 +956,12 @@ uid_t apk_resolve_uid(struct apk_id_cache *idc, const char *username, uid_t defa ...@@ -944,9 +956,12 @@ uid_t apk_resolve_uid(struct apk_id_cache *idc, const char *username, uid_t defa
uid_t apk_resolve_gid(struct apk_id_cache *idc, const char *groupname, uid_t default_gid) uid_t apk_resolve_gid(struct apk_id_cache *idc, const char *groupname, uid_t default_gid)
{ {
struct cache_item *ci; #ifdef HAVE_FGETGRENT_R
struct group grent, *grp;
char buf[1024]; char buf[1024];
struct group grent;
#endif
struct cache_item *ci;
struct group *grp;
FILE *in; FILE *in;
ci = resolve_cache_item(&idc->gid_cache, APK_BLOB_STR(groupname)); ci = resolve_cache_item(&idc->gid_cache, APK_BLOB_STR(groupname));
...@@ -960,7 +975,11 @@ uid_t apk_resolve_gid(struct apk_id_cache *idc, const char *groupname, uid_t def ...@@ -960,7 +975,11 @@ uid_t apk_resolve_gid(struct apk_id_cache *idc, const char *groupname, uid_t def
in = fdopen(openat(idc->root_fd, "etc/group", O_RDONLY|O_CLOEXEC), "r"); in = fdopen(openat(idc->root_fd, "etc/group", O_RDONLY|O_CLOEXEC), "r");
if (in != NULL) { if (in != NULL) {
do { do {
#ifdef HAVE_FGETGRENT_R
fgetgrent_r(in, &grent, buf, sizeof(buf), &grp); fgetgrent_r(in, &grent, buf, sizeof(buf), &grp);
#else
grp = fgetgrent(in);
#endif
if (grp == NULL) if (grp == NULL)
break; break;
if (strcmp(grp->gr_name, groupname) == 0) { if (strcmp(grp->gr_name, groupname) == 0) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment