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;
*/
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
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();
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");