#include #include #include int main(int argc, char **argv) { int uid; char *dir, **command, *end; if(argc < 3){ fprintf(stderr, "Usage - do-chroot dir uid " "command-line...\n"); exit(1); } dir = argv[1]; uid = strtoul(argv[2], &end, 10); if(*end != '\0'){ fprintf(stderr, "the uid \"%s\" isn't a number\n", \ argv[2]); exit(1); } command = &argv[3]; if(chdir(dir) < 0){ perror("chroot"); exit(1); } if(chroot(".") < 0){ perror("chroot"); exit(1); } if(setuid(uid) < 0){ perror("setuid"); exit(1); } execv(command[0], command); perror("execv"); exit(1); }