Changeset View
Changeset View
Standalone View
Standalone View
usr.sbin/chroot/chroot.c
| Show First 20 Lines • Show All 95 Lines • ▼ Show 20 Lines | while ((ch = getopt(argc, argv, "G:g:u:")) != -1) { | ||||
| } | } | ||||
| } | } | ||||
| argc -= optind; | argc -= optind; | ||||
| argv += optind; | argv += optind; | ||||
| if (argc < 1) | if (argc < 1) | ||||
| usage(); | usage(); | ||||
| if (chdir(argv[0]) == -1 || chroot(".") == -1) | |||||
| err(1, "%s", argv[0]); | |||||
| if (group != NULL) { | if (group != NULL) { | ||||
| if (isdigit((unsigned char)*group)) { | if (isdigit((unsigned char)*group)) { | ||||
| gid = (gid_t)strtoul(group, &endp, 0); | gid = (gid_t)strtoul(group, &endp, 0); | ||||
| if (*endp != '\0') | if (*endp != '\0') | ||||
| goto getgroup; | goto getgroup; | ||||
| } else { | } else { | ||||
| getgroup: | getgroup: | ||||
| if ((gp = getgrnam(group)) != NULL) | if ((gp = getgrnam(group)) != NULL) | ||||
| Show All 35 Lines | if (user != NULL) { | ||||
| } else { | } else { | ||||
| getuser: | getuser: | ||||
| if ((pw = getpwnam(user)) != NULL) | if ((pw = getpwnam(user)) != NULL) | ||||
| uid = pw->pw_uid; | uid = pw->pw_uid; | ||||
| else | else | ||||
| errx(1, "no such user `%s'", user); | errx(1, "no such user `%s'", user); | ||||
| } | } | ||||
| } | } | ||||
| if (chdir(argv[0]) == -1 || chroot(".") == -1) | |||||
| err(1, "%s", argv[0]); | |||||
| if (gids && setgroups(gids, gidlist) == -1) | if (gids && setgroups(gids, gidlist) == -1) | ||||
| err(1, "setgroups"); | err(1, "setgroups"); | ||||
| if (group && setgid(gid) == -1) | if (group && setgid(gid) == -1) | ||||
| err(1, "setgid"); | err(1, "setgid"); | ||||
| if (user && setuid(uid) == -1) | if (user && setuid(uid) == -1) | ||||
| err(1, "setuid"); | err(1, "setuid"); | ||||
| Show All 19 Lines | |||||