diff options
author | Kay Sievers <kay.sievers@suse.de> | 2006-08-20 18:25:57 +0200 |
---|---|---|
committer | Kay Sievers <kay.sievers@suse.de> | 2006-08-20 18:25:57 +0200 |
commit | 3a020a85da768808a03f1574b001d1d06d55ae07 (patch) | |
tree | e17643bf1097ced6d6630a3e0fee1bfb917da6d0 /udev_sysdeps.c | |
parent | 5c51e31e0e794d8fcdc1225c65985571c9820949 (diff) |
remove built-in /etc/passwd /etc/group parser
Diffstat (limited to 'udev_sysdeps.c')
-rw-r--r-- | udev_sysdeps.c | 139 |
1 files changed, 1 insertions, 138 deletions
diff --git a/udev_sysdeps.c b/udev_sysdeps.c index 9ec5a73ed9..3cd12277cf 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 <sys/types.h> -#include <pwd.h> -#include <grp.h> - -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__ */ |