Use chroot(2) instead of using prefixes for files.
Previously, the code prefixes the chroot path to actual file paths to simulate the effect. This, however, will not work for tzset(3) which expects the current system have a working set of timezone data files, and that is not always the case. This changeset simplifies the handling of paths and use an actual chroot(2) call to implement the effect. PR: bin/197313 MFC after: 2 weeks
This commit is contained in:
parent
804e50d725
commit
f704bed628
@ -40,6 +40,7 @@ __FBSDID("$FreeBSD$");
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <sysexits.h>
|
||||
#include <time.h>
|
||||
#include <unistd.h>
|
||||
|
||||
@ -944,23 +945,18 @@ main(int argc, char **argv)
|
||||
if (argc - optind > 1)
|
||||
usage();
|
||||
|
||||
if (chrootenv == NULL) {
|
||||
strcpy(path_zonetab, _PATH_ZONETAB);
|
||||
strcpy(path_iso3166, _PATH_ISO3166);
|
||||
strcpy(path_zoneinfo, _PATH_ZONEINFO);
|
||||
strcpy(path_localtime, _PATH_LOCALTIME);
|
||||
strcpy(path_db, _PATH_DB);
|
||||
strcpy(path_wall_cmos_clock, _PATH_WALL_CMOS_CLOCK);
|
||||
} else {
|
||||
sprintf(path_zonetab, "%s/%s", chrootenv, _PATH_ZONETAB);
|
||||
sprintf(path_iso3166, "%s/%s", chrootenv, _PATH_ISO3166);
|
||||
sprintf(path_zoneinfo, "%s/%s", chrootenv, _PATH_ZONEINFO);
|
||||
sprintf(path_localtime, "%s/%s", chrootenv, _PATH_LOCALTIME);
|
||||
sprintf(path_db, "%s/%s", chrootenv, _PATH_DB);
|
||||
sprintf(path_wall_cmos_clock, "%s/%s", chrootenv,
|
||||
_PATH_WALL_CMOS_CLOCK);
|
||||
if (chrootenv != NULL) {
|
||||
rv = chroot(chrootenv);
|
||||
if (rv != 0)
|
||||
err(EX_OSERR, "chroot to %s", chrootenv);
|
||||
}
|
||||
|
||||
strcpy(path_zonetab, _PATH_ZONETAB);
|
||||
strcpy(path_iso3166, _PATH_ISO3166);
|
||||
strcpy(path_zoneinfo, _PATH_ZONEINFO);
|
||||
strcpy(path_localtime, _PATH_LOCALTIME);
|
||||
strcpy(path_db, _PATH_DB);
|
||||
strcpy(path_wall_cmos_clock, _PATH_WALL_CMOS_CLOCK);
|
||||
|
||||
/* Override the user-supplied umask. */
|
||||
(void)umask(S_IWGRP | S_IWOTH);
|
||||
|
Loading…
Reference in New Issue
Block a user