X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=udev_sysdeps.c;h=3cd12277cf79f605440371b383f603d89fa7de52;hp=9ec5a73ed95d099e76823668a470512798b1c239;hb=a1e6bd93d3d650c2064daafdb253120ae6e89398;hpb=3770f6093f89198151ca872c2115aff0b6079772 diff --git a/udev_sysdeps.c b/udev_sysdeps.c index 9ec5a73ed..3cd12277c 100644 --- a/udev_sysdeps.c +++ b/udev_sysdeps.c @@ -29,19 +29,7 @@ #include "udev.h" -#ifndef __GLIBC__ -#define __OWN_USERDB_PARSER__ -#endif - #ifdef __GLIBC__ -#define __OWN_STRLCPYCAT__ -#endif - -#ifdef USE_STATIC -#define __OWN_USERDB_PARSER__ -#endif - -#ifdef __OWN_STRLCPYCAT__ size_t strlcpy(char *dst, const char *src, size_t size) { size_t bytes = 0; @@ -85,129 +73,4 @@ size_t strlcat(char *dst, const char *src, size_t size) *q = '\0'; return bytes; } -#endif /* __OWN_STRLCPYCAT__ */ - -#ifndef __OWN_USERDB_PARSER__ -#include -#include -#include - -uid_t lookup_user(const char *user) -{ - struct passwd *pw; - uid_t uid = 0; - - pw = getpwnam(user); - if (pw == NULL) { - if (errno == 0 || errno == ENOENT || errno == ESRCH) - err("specified user unknown '%s'", user); - else - err("error resolving user '%s': %s", user, strerror(errno)); - } else - uid = pw->pw_uid; - - return uid; -} - -gid_t lookup_group(const char *group) -{ - struct group *gr; - gid_t gid = 0; - - gr = getgrnam(group); - if (gr == NULL) { - if (errno == 0 || errno == ENOENT || errno == ESRCH) - err("specified group unknown '%s'", group); - else - err("error resolving group '%s': %s", group, strerror(errno)); - } else - gid = gr->gr_gid; - - return gid; -} - -#else /* __OWN_USERDB_PARSER__ */ - -#define PASSWD_FILE "/etc/passwd" -#define GROUP_FILE "/etc/group" - -/* return the id of a passwd style line, selected by the users name */ -static unsigned long get_id_by_name(const char *uname, const char *dbfile) -{ - unsigned long id = 0; - char line[LINE_SIZE]; - char *buf; - char *bufline; - size_t bufsize; - size_t cur; - size_t count; - char *pos; - char *name; - char *idstr; - char *tail; - - if (file_map(dbfile, &buf, &bufsize) != 0) { - err("can't open '%s' as db file: %s", dbfile, strerror(errno)); - return 0; - } - dbg("search '%s' in '%s'", uname, dbfile); - - /* loop through the whole file */ - cur = 0; - while (cur < bufsize) { - count = buf_get_line(buf, bufsize, cur); - bufline = &buf[cur]; - cur += count+1; - - if (count >= sizeof(line)) - continue; - - memcpy(line, bufline, count-1); - line[count-1] = '\0'; - pos = line; - - /* get name */ - name = strsep(&pos, ":"); - if (name == NULL) - continue; - - /* skip pass */ - if (strsep(&pos, ":") == NULL) - continue; - - /* get id */ - idstr = strsep(&pos, ":"); - if (idstr == NULL) - continue; - - if (strcmp(uname, name) == 0) { - id = strtoul(idstr, &tail, 10); - if (tail[0] != '\0') { - id = 0; - dbg("no id found for '%s'", name); - } else - dbg("id for '%s' is '%li'", name, id); - break; - } - } - - file_unmap(buf, bufsize); - return id; -} - -uid_t lookup_user(const char *user) -{ - unsigned long id; - - id = get_id_by_name(user, PASSWD_FILE); - return (uid_t) id; -} - -gid_t lookup_group(const char *group) -{ - unsigned long id; - - id = get_id_by_name(group, GROUP_FILE); - return (gid_t) id; -} -#endif /* __OWN_USERDB_PARSER__ */ +#endif /* __GLIBC__ */