diff options
author | Lennart Poettering <lennart@poettering.net> | 2014-06-29 22:15:33 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2014-06-29 22:27:07 +0200 |
commit | 306a55c86360a7ae7b2509771d5ea6ab0d166d85 (patch) | |
tree | 08534c7137346c7449f5ac57ef4a22fdfba440f6 | |
parent | 21236ab51082668914b933041893a1cf45218a3d (diff) |
util: refuse considering UID 0xFFFF and 0xFFFFFFFF valid
-rw-r--r-- | src/shared/util.c | 8 |
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; } |