Forums.ATC.no

Teknisk => Generelt teknisk => Emne startet av: ATC på 27. ſeptember 2008, 18:24 pm

Tittel: setuid works but setgid fails with EPERM
Skrevet av: ATC27. ſeptember 2008, 18:24 pm
The following code always fails saying
"Error 1 setting group ID to nn" (where nn is the GID)

  if ( setuid((*user).pw_uid) == -1) {
    printf("Error %d setting user ID to %d\n", errno, (*user).pw_uid);
    return 1;
  }
  if ( setgid((*user).pw_gid) == -1) {
    printf("Error %d setting group ID to %d\n", errno, (*user).pw_gid);
    return 1;
  }  
Tittel: [Solved] setuid works but setgid fails with EPERM
Skrevet av: ATC27. ſeptember 2008, 18:24 pm
After the process has changed user id, it is no longer permitted to change group id. Simply swap the two, like this:

  if ( setgid((*user).pw_gid) == -1) {
    printf("Error %d setting group ID to %d\n", errno, (*user).pw_gid);
    return 1;
  }  
  if ( setuid((*user).pw_uid) == -1) {
    printf("Error %d setting user ID to %d\n", errno, (*user).pw_uid);
    return 1;
  }