Modifiche dell'ultimo minuto e messo insieme anche una opzione di chroot
authorSimone Piccardi <piccardi@gnulinux.it>
Tue, 15 Mar 2005 11:51:40 +0000 (11:51 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Tue, 15 Mar 2005 11:51:40 +0000 (11:51 +0000)
sul server web di esempio giusto in tempo per l'incontro del lilik.

process.tex
sources/wwwd.c

index 6cc69700855be5aac19f56d4f3b0b20045166ab9..831183141ca0030505cff2a299815b0830fc6562 100644 (file)
@@ -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.
 
 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
 
 Il C non consente di usare variabili allocate dinamicamente, non è possibile
 cioè definire in fase di programmazione una variabile le cui dimensioni
index f9b49fa86fcef631eb9c3c2821cba1841111b3c2..9fceda5330c020cf5635f43f2a36bdb914e56b76 100644 (file)
@@ -70,6 +70,8 @@ int main(int argc, char *argv[])
     int list_fd, conn_fd;
     int waiting = 0;
     int compat = 0;
     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;
     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 */
      */
     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 
        switch (i) {
        /* 
         * Handling options 
@@ -102,6 +104,11 @@ int main(int argc, char *argv[])
        case 'w':
            waiting = strtol(optarg, NULL, 10);
            break;
        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();
        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;
     }   
     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");
     /* release privileges and go daemon */
     if (setgid(65534) !=0) { /* first give away group privileges */
        perror("cannot give away group privileges");