From d5df702be171519375f3e260cffb7ee93ab656f4 Mon Sep 17 00:00:00 2001 From: Simone Piccardi Date: Tue, 15 Mar 2005 11:51:40 +0000 Subject: [PATCH] Modifiche dell'ultimo minuto e messo insieme anche una opzione di chroot sul server web di esempio giusto in tempo per l'incontro del lilik. --- process.tex | 8 ++++---- sources/wwwd.c | 21 ++++++++++++++++++++- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/process.tex b/process.tex index 6cc6970..8311831 100644 --- a/process.tex +++ b/process.tex @@ -435,10 +435,10 @@ una funzione e per le sue variabili locali (le cosiddette \textsl{variabili per queste variabili viene allocato nello stack quando viene eseguita la funzione e liberato quando si esce dalla medesima. -Esiste però un terzo tipo di allocazione, l'\textsl{allocazione dinamica della - memoria}, che non è prevista direttamente all'interno del linguaggio C, ma -che è necessaria quando il quantitativo di memoria che serve è determinabile -solo durante il corso dell'esecuzione del programma. +Esiste però un terzo tipo di allocazione, l'\textsl{allocazione dinamica} +della memoria, che non è prevista direttamente all'interno del linguaggio C, +ma che è necessaria quando il quantitativo di memoria che serve è +determinabile solo durante il corso dell'esecuzione del programma. Il C non consente di usare variabili allocate dinamicamente, non è possibile cioè definire in fase di programmazione una variabile le cui dimensioni diff --git a/sources/wwwd.c b/sources/wwwd.c index f9b49fa..9fceda5 100644 --- a/sources/wwwd.c +++ b/sources/wwwd.c @@ -70,6 +70,8 @@ int main(int argc, char *argv[]) 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 +82,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 @@ -102,6 +104,11 @@ int main(int argc, char *argv[]) case 'w': waiting = strtol(optarg, NULL, 10); break; + case 'r': + printf("chroot\n"); + reroot = 1; + rootdir = optarg; + break; case '?': /* unrecognized options */ printf("Unrecognized options -%c\n",optopt); usage(); @@ -126,6 +133,18 @@ int main(int argc, char *argv[]) if ( (list_fd = sockbind2(argv[optind], "www", 6, SOCK_STREAM)) < 0) { return 1; } + /* chroot if requested */ + if (reroot) { + printf("chroot to %s\n", rootdir); + 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"); -- 2.30.2