#include <dirent.h>
#include <errno.h>
#include <fcntl.h>
+#include <grp.h>
#include <libgen.h>
#include <stddef.h>
#include <stdio.h>
*converted = sli;
return 0;
}
+
+int lxc_switch_uid_gid(uid_t uid, gid_t gid)
+{
+ if (setgid(gid) < 0) {
+ SYSERROR("Failed to switch to gid %d.", gid);
+ return -errno;
+ }
+ NOTICE("Switched to gid %d.", gid);
+
+ if (setuid(uid) < 0) {
+ SYSERROR("Failed to switch to uid %d.", uid);
+ return -errno;
+ }
+ NOTICE("Switched to uid %d.", uid);
+
+ return 0;
+}
+
+/* Simple covenience function which enables uniform logging. */
+int lxc_setgroups(int size, gid_t list[])
+{
+ if (setgroups(size, list) < 0) {
+ SYSERROR("Failed to setgroups().");
+ return -errno;
+ }
+ NOTICE("Dropped additional groups.");
+
+ return 0;
+}
int lxc_safe_int(const char *numstr, int *converted);
int lxc_safe_long(const char *numstr, long int *converted);
+/* Switch to a new uid and gid. */
+int lxc_switch_uid_gid(uid_t uid, gid_t gid);
+int lxc_setgroups(int size, gid_t list[]);
+
#endif /* __LXC_UTILS_H */