summaryrefslogtreecommitdiffstats
path: root/usr.sbin
diff options
context:
space:
mode:
authordelphij <delphij@FreeBSD.org>2015-10-13 22:55:17 +0000
committerdelphij <delphij@FreeBSD.org>2015-10-13 22:55:17 +0000
commitf704bed62801656e7361875052f75afba0bd97bb (patch)
treee1a6cb970d93df502c5854caea69967a1cdcd9b9 /usr.sbin
parent804e50d7252c0e4ed7c8c534759562fdac9796f9 (diff)
downloadFreeBSD-src-f704bed62801656e7361875052f75afba0bd97bb.zip
FreeBSD-src-f704bed62801656e7361875052f75afba0bd97bb.tar.gz
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
Diffstat (limited to 'usr.sbin')
-rw-r--r--usr.sbin/tzsetup/tzsetup.c26
1 files changed, 11 insertions, 15 deletions
diff --git a/usr.sbin/tzsetup/tzsetup.c b/usr.sbin/tzsetup/tzsetup.c
index fc80364..7d2a936 100644
--- a/usr.sbin/tzsetup/tzsetup.c
+++ b/usr.sbin/tzsetup/tzsetup.c
@@ -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);
OpenPOWER on IntegriCloud