#include #include #include #include #include #include #include int main(int argc, char **argv) { uid_t uid; gid_t gid; if (argc != 3) exit (1); if (setgroups (0, NULL) < 0) fprintf (stderr, "setgroups() failed: %s\n", strerror (errno)); uid = atoi (argv[1]); gid = atoi (argv[2]); if (setgid (gid) < 0) fprintf (stderr, "setgid() failed: %s\n", strerror (errno)); if (setuid (uid) < 0) fprintf (stderr, "setgroups() failed: %s\n", strerror (errno)); execl ("/bin/sh", "/bin/sh", NULL); fprintf (stderr, "exec() failed: %s\n", strerror (errno)); exit (1); }