/*
- * daemonize and exec
+ * set id
*/
#include <stdlib.h>
#include <pwd.h>
#include "exec.c"
+#include "die.c"
int main(int ac, char *av[]) {
struct passwd *pw;
pw = getpwnam(av[1]);
if (!pw) {
+ errordie("getpwnam");
exit(EXIT_FAILURE);
}
- seteuid(pw->pw_uid);
+ if (seteuid(pw->pw_uid) == -1) {
+ errordie("seteuid");
+ exit(EXIT_FAILURE);
+ };
do_exec(2, ac, av);
static void do_exec(int skip, int ac, char *av[]) {
int i;
+ if (skip >= ac) {
+ fprintf(stderr, "nothing to exec\n");
+ exit(EXIT_FAILURE);
+ }
+
for (i=0;i<ac-skip;i++) {
av[i] = av[i+skip];
}