projects
/
gapil.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Modifiche dell'ultimo minuto e messo insieme anche una opzione di chroot
[gapil.git]
/
sources
/
wwwd.c
diff --git
a/sources/wwwd.c
b/sources/wwwd.c
index f9b49fa86fcef631eb9c3c2821cba1841111b3c2..9fceda5330c020cf5635f43f2a36bdb914e56b76 100644
(file)
--- 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 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");