]> git.neil.brown.name Git - portmap.git/commitdiff
Add -t option for chroot.
authorNeil Brown <neilb@notabene.brown>
Fri, 20 Apr 2007 02:42:32 +0000 (12:42 +1000)
committerNeil Brown <neilb@notabene.brown>
Fri, 20 Apr 2007 02:42:32 +0000 (12:42 +1000)
From debian.

portmap.c

index f50e85b7e441c21e99c9f21b7a255575eed99dac..c7cca6917195c6df37e3c9d56db61a7c674c8694 100644 (file)
--- a/portmap.c
+++ b/portmap.c
@@ -160,21 +160,28 @@ main(int argc, char **argv)
        struct sockaddr_in addr;
        int len = sizeof(struct sockaddr_in);
        register struct pmaplist *pml;
+       char *chroot_path = NULL;
 
-       while ((c = getopt(argc, argv, "dv")) != EOF) {
+       while ((c = getopt(argc, argv, "dt:v")) != EOF) {
                switch (c) {
 
                case 'd':
                        debugging = 1;
                        break;
 
+               case 't':
+                       chroot_path = optarg;
+                       break;
+
                case 'v':
                        verboselog = 1;
                        break;
 
                default:
-                       (void) fprintf(stderr, "usage: %s [-dv]\n", argv[0]);
+                       (void) fprintf(stderr, "usage: %s [-dv] [-t dir]\n",
+                                      argv[0]);
                        (void) fprintf(stderr, "-d: debugging mode\n");
+                       (void) fprintf(stderr, "-t dir: chroot into dir\n");
                        (void) fprintf(stderr, "-v: verbose logging\n");
                        exit(1);
                }
@@ -283,6 +290,12 @@ main(int argc, char **argv)
        (void)svc_register(xprt, PMAPPROG, PMAPVERS, reg_service, FALSE);
 
        /* additional initializations */
+       if (chroot_path) {
+               if (chroot(chroot_path) < 0) {
+                       syslog(LOG_ERR, "couldn't do chroot");
+                       exit(1);
+               }
+       }
        check_startup();
 #ifdef IGNORE_SIGCHLD                  /* Lionel Cons <cons@dxcern.cern.ch> */
        (void)signal(SIGCHLD, SIG_IGN);