X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fshared%2Fmacro.h;h=58530a398089a1ff16b199111bde046659a3bf40;hp=5fa17ed2085cdc2fe3a7b992468f5917d6cd96b0;hb=ffc442ae487303626321ac0e3a5023d4c4a0944f;hpb=ab76853a4ca68ec371c971dfe2cc68f19fe07659 diff --git a/src/shared/macro.h b/src/shared/macro.h index 5fa17ed20..58530a398 100644 --- a/src/shared/macro.h +++ b/src/shared/macro.h @@ -26,6 +26,7 @@ #include #include #include +#include #define _printf_(a,b) __attribute__ ((format (printf, a, b))) #define _alloc_(...) __attribute__ ((alloc_size(__VA_ARGS__))) @@ -461,6 +462,18 @@ do { \ #define GID_INVALID ((gid_t) -1) #define MODE_INVALID ((mode_t) -1) +static inline bool UID_IS_INVALID(uid_t uid) { + /* We consider both the old 16bit -1 user and the newer 32bit + * -1 user invalid, since they are or used to be incompatible + * with syscalls such as setresuid() or chown(). */ + + return uid == (uid_t) ((uint32_t) -1) || uid == (uid_t) ((uint16_t) -1); +} + +static inline bool GID_IS_INVALID(gid_t gid) { + return gid == (gid_t) ((uint32_t) -1) || gid == (gid_t) ((uint16_t) -1); +} + #define DEFINE_TRIVIAL_CLEANUP_FUNC(type, func) \ static inline void func##p(type *p) { \ if (*p) \