#include #include #include #include #include #include #include #include main(int argc, char **argv, char **envp) { time_t timer; int error; char *user; struct passwd *pwd; char s[256]; int id; extern int errno; time(&timer); if ( NULL == ( pwd = getpwuid ( id=getuid () ))) { fprintf(stderr, "getpw failed (%s) for %d at %s", strerror(errno), getuid(), ctime(&timer) ); exit(errno); } user = pwd->pw_name; if( (error = setuid((uid_t) 0L)) != 0 ) { fprintf(stderr, "%s: warning: setuid failed for %s (%s) at %s", argv[0], user, strerror(errno), ctime(&timer) ); } puts("I should be root"); gets(s); if( (error = seteuid((uid_t) id)) != 0 ) { fprintf(stderr, "%s: warning: seteuid failed for %s (%s) at %s", argv[0], user, strerror(errno), ctime(&timer) ); } puts("I should e-be user"); gets(s); if( (error = seteuid((uid_t) 0L)) != 0 ) { fprintf(stderr, "%s: warning: seteuid failed for %s (%s) at %s", argv[0], user, strerror(errno), ctime(&timer) ); } puts("I should e-be root"); gets(s); if( (error = setuid((uid_t) id)) != 0 ) { fprintf(stderr, "%s: warning: setuid failed for %s (%s) at %s", argv[0], user, strerror(errno), ctime(&timer) ); } puts("I should be user"); gets(s); }