Author: delphij
Date: Tue Oct 13 22:55:17 2015
New Revision: 289269
URL: https://svnweb.freebsd.org/changeset/base/289269

Log:
  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

Modified:
  head/usr.sbin/tzsetup/tzsetup.c

Modified: head/usr.sbin/tzsetup/tzsetup.c
==============================================================================
--- head/usr.sbin/tzsetup/tzsetup.c     Tue Oct 13 21:34:54 2015        
(r289268)
+++ head/usr.sbin/tzsetup/tzsetup.c     Tue Oct 13 22:55:17 2015        
(r289269)
@@ -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);
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to