From: Neil Brown Date: Fri, 20 Apr 2007 02:42:32 +0000 (+1000) Subject: Add -t option for chroot. X-Git-Tag: portmap_6.0~15 X-Git-Url: http://git.neil.brown.name/?a=commitdiff_plain;h=91b840b900414a0c0c2a3985a6e5b5b58c5eac90;p=portmap.git Add -t option for chroot. From debian. --- diff --git a/portmap.c b/portmap.c index f50e85b..c7cca69 100644 --- 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 */ (void)signal(SIGCHLD, SIG_IGN);