#include #include #include #include #include #include "setonlygid.h" int main(int argc, char *const argv[]) { const char *username = argv[1]; const struct passwd *pwd; char *const *new_argv = argv + 2; if (argc < 3) { fprintf(stderr, "Usage: %s username command...\n", argv[0]); exit(100); } pwd = getpwnam(username); if (pwd == NULL) { fprintf(stderr, "User %s not found\n", argv[1]); exit(111); } if (setonlygid(pwd->pw_gid) != 0) { perror("setonlygid"); exit(111); } if (setuid(pwd->pw_uid) != 0) { perror("setuid"); exit(111); } execvp(*new_argv, new_argv); perror("execvp"); exit(111); }