]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
util: add parse_uid_range() helper function
authorYu Watanabe <watanabe.yu+github@gmail.com>
Sun, 26 Jan 2020 12:51:12 +0000 (21:51 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Sun, 2 Feb 2020 13:43:38 +0000 (22:43 +0900)
src/basic/user-util.c
src/basic/user-util.h

index 6d22fe31c3da378373667caa4d9e491069fc5a14..a491f5505e210610825d79f2d6d85d98cdb5a400 100644 (file)
@@ -62,6 +62,29 @@ int parse_uid(const char *s, uid_t *ret) {
         return 0;
 }
 
+int parse_uid_range(const char *s, uid_t *ret_lower, uid_t *ret_upper) {
+        uint32_t u, l;
+        int r;
+
+        assert(s);
+        assert(ret_lower);
+        assert(ret_upper);
+
+        r = parse_range(s, &l, &u);
+        if (r < 0)
+                return r;
+
+        if (l > u)
+                return -EINVAL;
+
+        if (!uid_is_valid(l) || !uid_is_valid(u))
+                return -ENXIO;
+
+        *ret_lower = l;
+        *ret_upper = u;
+        return 0;
+}
+
 char* getlogname_malloc(void) {
         uid_t uid;
         struct stat st;
index 714e83082c9a15ee3b7d43e0ba65e83d9356bcf0..6796ac42c1df445a5cfb8bfa5b0d7ceeceede242 100644 (file)
@@ -19,6 +19,7 @@ static inline bool gid_is_valid(gid_t gid) {
 }
 
 int parse_uid(const char *s, uid_t* ret_uid);
+int parse_uid_range(const char *s, uid_t *ret_lower, uid_t *ret_upper);
 
 static inline int parse_gid(const char *s, gid_t *ret_gid) {
         return parse_uid(s, (uid_t*) ret_gid);