From e735ad6710a82604a206ad29f6cbcdd7dc4b024c Mon Sep 17 00:00:00 2001 From: Tyler Murphy Date: Sun, 14 May 2023 21:43:02 -0400 Subject: refactor and add su --- lib/xfuncs.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 lib/xfuncs.c (limited to 'lib/xfuncs.c') diff --git a/lib/xfuncs.c b/lib/xfuncs.c new file mode 100644 index 0000000..43242de --- /dev/null +++ b/lib/xfuncs.c @@ -0,0 +1,49 @@ +#include "lslib.h" + +#include +#include +#include +#include + +void* xalloc(size_t size) { + void *ptr = malloc(size); + if (ptr == NULL && size != 0) die(); + return ptr; +} + +void* xrealloc(void* ptr, size_t size) { + ptr = realloc(ptr, size); + if (ptr == NULL && size != 0) die(); + return ptr; +} + +void* xzalloc(size_t size) { + void* ptr = xalloc(size); + memset(ptr, 0, size); + return ptr; +} + +void xsetenv(const char *name, const char *value) { + if (setenv(name, value, 1)) + error("cannot set env"); +} + +void xsetuid(uid_t uid) { + if (setuid(uid)) + error("cannot set uid"); +} + +void xsetgid(gid_t gid) { + if (setgid(gid)) + error("cannot set gid"); +} + +struct passwd* xgetpwnam(char* name) { + struct passwd* pw; + pw = getpwnam(name); + + if (!pw) + error("cannot get user: '%s'", name); + + return pw; +} -- cgit v1.2.3-freya