X-Git-Url: https://gapil.gnulinux.it/gitweb/?a=blobdiff_plain;f=sources%2Fwwwd.c;h=f144eb0bcaff90face8eb8a429a2c5ccddc52f3d;hb=e0210adeab0125ab0a799fc4e45dd62283abd03f;hp=f9b49fa86fcef631eb9c3c2821cba1841111b3c2;hpb=43863d64be274fa4adfa5db745120aedb5f421c9;p=gapil.git diff --git a/sources/wwwd.c b/sources/wwwd.c index f9b49fa..f144eb0 100644 --- a/sources/wwwd.c +++ b/sources/wwwd.c @@ -68,8 +68,9 @@ int main(int argc, char *argv[]) * Variables definition */ int list_fd, conn_fd; - int waiting = 0; int compat = 0; + int reroot = 0; + char * rootdir; pid_t pid; struct sockaddr_in cli_add; socklen_t len; @@ -80,7 +81,7 @@ int main(int argc, char *argv[]) */ int i; opterr = 0; /* don't want writing to stderr */ - while ( (i = getopt(argc, argv, "hdicw:")) != -1) { + while ( (i = getopt(argc, argv, "hdicw:r:")) != -1) { switch (i) { /* * Handling options @@ -99,8 +100,9 @@ int main(int argc, char *argv[]) case 'd': debugging = 1; break; - case 'w': - waiting = strtol(optarg, NULL, 10); + case 'r': + reroot = 1; + rootdir = optarg; break; case '?': /* unrecognized options */ printf("Unrecognized options -%c\n",optopt); @@ -126,6 +128,17 @@ int main(int argc, char *argv[]) if ( (list_fd = sockbind2(argv[optind], "www", 6, SOCK_STREAM)) < 0) { return 1; } + /* chroot if requested */ + if (reroot) { + if (chdir(rootdir)) { + perror("Cannot find directory to chroot"); + exit(1); + } + if (chroot(rootdir)) { + perror("Cannot chroot"); + exit(1); + } + } /* release privileges and go daemon */ if (setgid(65534) !=0) { /* first give away group privileges */ perror("cannot give away group privileges"); @@ -147,7 +160,6 @@ int main(int argc, char *argv[]) PrintErr("listen error"); exit(1); } - if (waiting) sleep(waiting); /* handle echo to client */ while (1) { /* accept connection */