]> err.no Git - util-linux/commitdiff
libmount: add utils for work with uid/gid
authorKarel Zak <kzak@redhat.com>
Tue, 21 Sep 2010 19:44:19 +0000 (21:44 +0200)
committerKarel Zak <kzak@redhat.com>
Mon, 3 Jan 2011 11:28:42 +0000 (12:28 +0100)
Signed-off-by: Karel Zak <kzak@redhat.com>
shlibs/mount/src/mountP.h
shlibs/mount/src/utils.c

index f595895775f00a5c9587f447998aefd1bb891ae2..230f51cbe872e0a83ff3ba11afcedc74c020f968 100644 (file)
@@ -107,6 +107,9 @@ extern int endswith(const char *s, const char *sx);
 extern int startswith(const char *s, const char *sx);
 
 extern char *mnt_get_username(const uid_t uid);
+extern int mnt_get_uid(const char *username, uid_t *uid);
+extern int mnt_get_gid(const char *groupname, gid_t *gid);
+
 extern int mnt_has_regular_mtab(void);
 
 extern char *mnt_get_mountpoint(const char *path);
index f48e533d797b9dd7df67f91a0c91c61e38e5cb66..108bb2eb6412d1d75f1203919160bae5f67edc87 100644 (file)
@@ -27,6 +27,7 @@
 #include <sys/types.h>
 #include <fcntl.h>
 #include <pwd.h>
+#include <grp.h>
 
 #include "strutils.h"
 #include "pathnames.h"
@@ -316,6 +317,48 @@ char *mnt_get_username(const uid_t uid)
        return username;
 }
 
+int mnt_get_uid(const char *username, uid_t *uid)
+{
+        struct passwd pwd;
+       struct passwd *pw;
+       size_t sz = sysconf(_SC_GETPW_R_SIZE_MAX);
+       char *buf;
+
+       if (sz <= 0)
+               sz = 16384;        /* Should be more than enough */
+
+       buf = malloc(sz);
+       if (!buf)
+               return -ENOMEM;
+
+       if (!getpwnam_r(username, &pwd, buf, sz, &pw) && pw)
+               *uid= pw->pw_uid;
+
+       free(buf);
+       return 0;
+}
+
+int mnt_get_gid(const char *groupname, gid_t *gid)
+{
+        struct group grp;
+       struct group *gr;
+       size_t sz = sysconf(_SC_GETGR_R_SIZE_MAX);
+       char *buf;
+
+       if (sz <= 0)
+               sz = 16384;        /* Should be more than enough */
+
+       buf = malloc(sz);
+       if (!buf)
+               return -ENOMEM;
+
+       if (!getgrnam_r(groupname, &grp, buf, sz, &gr) && gr)
+               *gid= gr->gr_gid;
+
+       free(buf);
+       return 0;
+}
+
 /*
  * Returns 1 if /etc/mtab is a reqular file.
  */