One thing: the "Handle exceptions of setuid() and setgid()" commit message caught my eye, so I took a look:
if (setuid(uid) < 0) {
fprintf(stderr, "Unable to set process user ID");
}
You probably want to add an exit() here, as well as to the preceeding setgid() call. Also, the earlier initgroups() can fail, too, so its result should also be checked.
There are a number of consumers of namespaces, particularly of late, but they've been around (depending on which type) for years at this point, and many users (or even admins) have little knowledge of their existence or usage unless it comes time to deploy $CONTAINER and their platform does not have them enabled.
One thing: the "Handle exceptions of setuid() and setgid()" commit message caught my eye, so I took a look:
You probably want to add an exit() here, as well as to the preceeding setgid() call. Also, the earlier initgroups() can fail, too, so its result should also be checked.