- if ( seteuid ( (*pair)->uid ) < 0 )
- syslog( LOG_ERR, "restore_uidgid: unable to seteuid '%s': %m",
- (*pair)->uid );
- if ( setegid ( (*pair)->gid ) < 0 )
- syslog( LOG_ERR, "restore_uidgid: unable to setegid '%s': %m",
- (*pair)->gid );
-} /* end function void restore_uidgid ( pair ) */
+ uid_t uid
+ gid_t gid;
+
+ uid = geteuid ();
+ gid = getegid ();
+
+ if (uid == pair->uid && gid == pair->gid)
+ return;
+
+ if (seteuid(0) < 0) {
+ LOG(log_error, logtype_afpd, "set_uidgid: Could not switch back to root: %s",
+ strerror(errno));
+ }
+
+ if ( setegid ( pair->gid ) < 0 )
+ LOG(log_error, logtype_afpd, "restore_uidgid: unable to setegid '%s': %s",
+ pair->gid, strerror(errno) );
+
+ if ( seteuid ( pair->uid ) < 0 )
+ LOG(log_error, logtype_afpd, "restore_uidgid: unable to seteuid '%s': %s",
+ pair->uid, strerror(errno) );
+ else
+ uuid = pair->uid; /* ugly hack for utommode */
+}