That's nice. But NetBSDs init.c executes /etc/rc before calling chroot(), and that's what i'm looking for, and for a moment tried to implement, but i'm not very familiar with FreeBSD code :)

For example that kenv() came to me as a suprise. I'll have to try to implement the NetBSD way where /etc/rc is executed before chroot(). Ofcourse now that i dont have to use sysctls, it's alot easier.

M. Warner Losh wrote:
BTW, here's a patch to test.  Since FreeBSD has kenv(2), the patch is
actually very small.

Warner



------------------------------------------------------------------------

Index: init.c
===================================================================
RCS file: /cache/ncvs/src/sbin/init/init.c,v
retrieving revision 1.62
diff -u -r1.62 init.c
--- init.c      8 Jun 2006 14:04:36 -0000       1.62
+++ init.c      28 Dec 2006 20:39:33 -0000
@@ -55,6 +55,7 @@
 #include <db.h>
 #include <errno.h>
 #include <fcntl.h>
+#include <kenv.h>
 #include <libutil.h>
 #include <paths.h>
 #include <signal.h>
@@ -187,6 +188,7 @@
 int
 main(int argc, char *argv[])
 {
+       char init_chroot[PATH_MAX];
        int c;
        struct sigaction sa;
        sigset_t mask;
@@ -239,6 +241,12 @@
         */
        openlog("init", LOG_CONS|LOG_ODELAY, LOG_AUTH);
+ *init_chroot = '\0';
+       kenv(KENV_GET, "init_chroot", init_chroot, sizeof(init_chroot));
+       if (*init_chroot)
+               if (chdir(init_chroot) != 0 || chroot(".") != 0)
+                       warning("Can't chroot to %s: %m", init_chroot);
+
        /*
         * Create an initial session.
         */

_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to