summaryrefslogtreecommitdiff
path: root/src/shared/util.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2014-06-29 22:15:33 +0200
committerLennart Poettering <lennart@poettering.net>2014-06-29 22:27:07 +0200
commit306a55c86360a7ae7b2509771d5ea6ab0d166d85 (patch)
tree08534c7137346c7449f5ac57ef4a22fdfba440f6 /src/shared/util.c
parent21236ab51082668914b933041893a1cf45218a3d (diff)
util: refuse considering UID 0xFFFF and 0xFFFFFFFF valid
Diffstat (limited to 'src/shared/util.c')
-rw-r--r--src/shared/util.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/shared/util.c b/src/shared/util.c
index e7ff0f8840..1709bb70ca 100644
--- a/src/shared/util.c
+++ b/src/shared/util.c
@@ -280,6 +280,14 @@ int parse_uid(const char *s, uid_t* ret_uid) {
if ((unsigned long) uid != ul)
return -ERANGE;
+ /* Some libc APIs use (uid_t) -1 as special placeholder */
+ if (uid == (uid_t) 0xFFFFFFFF)
+ return -EINVAL;
+
+ /* A long time ago UIDs where 16bit, hence explicitly avoid the 32bit -1 too */
+ if (uid == (uid_t) 0xFFFF)
+ return -EINVAL;
+
*ret_uid = uid;
return 0;
}