#include #include #include #include #include void dump() { struct stat s; printf("uid: %d, euid: %d, gid: %d, egid: %d\n" "getting file status...\n", getuid(), geteuid(), getgid(), getegid()); if (lstat("/etc", &s) == -1) { perror("lstat"); exit(2); } printf("dev: %x, ino: %lld, mode: %04o\n" "nlink: %d, uid: %d, gid: %d\n" "rdev: %x, size: %ld, blksize: %d, blocks: %d\n" "atime: %ld, mtime: %ld, ctime: %ld\n", s.st_dev, s.st_ino, s.st_mode, s.st_nlink, s.st_uid, s.st_gid, s.st_rdev, s.st_size, s.st_blksize, s.st_blocks, s.st_atime, s.st_mtime, s.st_ctime); } int main() { dump(); printf("changing effective user id...\n"); if (seteuid(2113) == -1) { perror("seteuid"); exit(2); } dump(); return 0; }