#include int main (int argc, char *argv[]) { int real_id = getgid (); int eff_id = getegid (); printf ("Startup: Real ID %i, Effective ID %i.\n", getgid (), getegid()); if (argc > 1) { int old_saved_id = atoi (argv[1]); setegid (old_saved_id); printf ("Seteuid: Real ID %i, Effective ID %i.\n", getgid (), getegid()); } else { char *args[] = { 0, 0, 0 }; asprintf (&args[0], "%s-nogid", argv[0]); asprintf (&args[1], "%i", eff_id); setgid (real_id); printf ("Preexec: Real ID %i, Effective ID %i.\n", getgid (), getegid()); execvp (args[0], args); } return 0; }