# scripts.mit.edu httpd suexec patch # Copyright (C) 2006 Jeff Arnold # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA # # See /COPYRIGHT in this repository for more information. # --- httpd-2.2.2/support/suexec.c.old 2006-04-21 21:53:06.000000000 -0400 +++ httpd-2.2.2/support/suexec.c 2006-08-25 10:04:22.000000000 -0400 @@ -95,6 +95,7 @@ { /* variable name starts with */ "HTTP_", + "HTTPS_", "SSL_", /* variable name is */ @@ -140,6 +141,7 @@ "UNIQUE_ID=", "USER_NAME=", "TZ=", + "PHPRC=", NULL }; @@ -513,6 +515,12 @@ exit(113); } } + char *expected = malloc(strlen(target_homedir)+strlen(AP_USERDIR_SUFFIX)+1); + sprintf(expected, "%s/%s", target_homedir, AP_USERDIR_SUFFIX); + if ((strncmp(cwd, expected, strlen(expected))) != 0) { + log_err("error: file's directory not a subdirectory of user's home directory (%s, %s)\n", cwd, expected); + exit(114); + } if ((strncmp(cwd, dwd, strlen(dwd))) != 0) { log_err("command not in docroot (%s/%s)\n", cwd, cmd); @@ -530,15 +538,17 @@ /* * Error out if cwd is writable by others. */ +#if 0 if ((dir_info.st_mode & S_IWOTH) || (dir_info.st_mode & S_IWGRP)) { log_err("directory is writable by others: (%s)\n", cwd); exit(116); } +#endif /* * Error out if we cannot stat the program. */ - if (((lstat(cmd, &prg_info)) != 0) || (S_ISLNK(prg_info.st_mode))) { + if (((lstat(cmd, &prg_info)) != 0) /*|| (S_ISLNK(prg_info.st_mode))*/) { log_err("cannot stat program: (%s)\n", cmd); exit(117); } @@ -546,10 +556,12 @@ /* * Error out if the program is writable by others. */ +#if 0 if ((prg_info.st_mode & S_IWOTH) || (prg_info.st_mode & S_IWGRP)) { log_err("file is writable by others: (%s/%s)\n", cwd, cmd); exit(118); } +#endif /* * Error out if the file is setuid or setgid. @@ -563,6 +575,7 @@ * Error out if the target name/group is different from * the name/group of the cwd or the program. */ +#if 0 if ((uid != dir_info.st_uid) || (gid != dir_info.st_gid) || (uid != prg_info.st_uid) || @@ -574,6 +587,7 @@ prg_info.st_uid, prg_info.st_gid); exit(120); } +#endif /* * Error out if the program is not executable for the user. * Otherwise, she won't find any error in the logs except for