You are viewing a plain text version of this content. The canonical link for it is here.
Posted to apache-bugdb@apache.org by co...@apache.org on 1999/05/24 19:51:51 UTC
Re: suexec/4111: SSI #exec cmd="..." does not work with suexec enabled
[In order for any reply to be added to the PR database, ]
[you need to include <ap...@Apache.Org> in the Cc line ]
[and leave the subject line UNCHANGED. This is not done]
[automatically because of the potential for mail loops. ]
[If you do not include this Cc, your reply may be ig- ]
[nored unless you are responding to an explicit request ]
[from a developer. ]
[Reply only with text; DO NOT SEND ATTACHMENTS! ]
Synopsis: SSI #exec cmd="..." does not work with suexec enabled
Comment-Added-By: coar
Comment-Added-When: Mon May 24 10:51:49 PDT 1999
Comment-Added:
[Text improperly submitted to the bugdb but destined for
this report.]
This patch to suexec will fix that. See the bottom for a description of
what the option ROOT_OWNS_DIR does. Apply this patch from the directory
suexec.c & .h are in.
- Tom
-------- Cut here --------
diff -C 3 orig/suexec.c ./suexec.c
*** orig/suexec.c Fri May 14 09:48:44 1999
--- ./suexec.c Fri May 14 09:42:15 1999
***************
*** 423,428 ****
--- 423,438 ----
exit(111);
}
+ #ifdef ROOT_OWNS_DIR
+ /*
+ * Stat the cwd and verify it is a directory, or error out.
+ */
+ if (((lstat(cwd, &dir_info)) != 0) || !(S_ISDIR(dir_info.st_mode))) {
+ log_err("cannot stat directory: (%s)\n", cwd);
+ exit(115);
+ }
+ #endif
+
if (userdir) {
if (((chdir(target_homedir)) != 0) ||
((chdir(USERDIR_SUFFIX)) != 0) ||
***************
*** 441,451 ****
}
}
! if ((strncmp(cwd, dwd, strlen(dwd))) != 0) {
log_err("command not in docroot (%s/%s)\n", cwd, cmd);
exit(114);
}
/*
* Stat the cwd and verify it is a directory, or error out.
*/
--- 451,466 ----
}
}
! if (
! #ifdef ROOT_OWNS_DIR
! (dir_info.st_uid!=0 || dir_info.st_gid!=0) &&
! #endif
! (strncmp(cwd, dwd, strlen(dwd))) != 0) {
log_err("command not in docroot (%s/%s)\n", cwd, cmd);
exit(114);
}
+ #ifndef ROOT_OWNS_DIR
/*
* Stat the cwd and verify it is a directory, or error out.
*/
***************
*** 453,458 ****
--- 468,474 ----
log_err("cannot stat directory: (%s)\n", cwd);
exit(115);
}
+ #endif
/*
* Error out if cwd is writable by others.
***************
*** 490,495 ****
--- 506,514 ----
* Error out if the target name/group is different from
* the name/group of the cwd or the program.
*/
+ #ifdef ROOT_OWNS_DIR
+ if (dir_info.st_uid!=0 || dir_info.st_gid!=0) {
+ #endif
if ((uid != dir_info.st_uid) ||
(gid != dir_info.st_gid) ||
(uid != prg_info.st_uid) ||
***************
*** 500,505 ****
--- 519,527 ----
prg_info.st_uid, prg_info.st_gid);
exit(120);
}
+ #ifdef ROOT_OWNS_DIR
+ }
+ #endif
/*
* Error out if the program is not executable for the user.
* Otherwise, she won't find any error in the logs except for
diff -C 3 orig/suexec.h ./suexec.h
*** orig/suexec.h Fri May 14 09:48:47 1999
--- ./suexec.h Fri May 14 09:42:15 1999
***************
*** 139,142 ****
--- 139,152 ----
#define SAFE_PATH "/usr/local/bin:/usr/bin:/bin"
#endif
+ /*
+ * ROOT_OWNS_DIR -- If directory is owned by root.root then any directory/file
+ * ownership is acceptable, as well as any docroot. This
+ * allows running of standard system binaries.
+ *
+ */
+ #ifndef ROOT_OWNS_DIR
+ #define ROOT_OWNS_DIR
+ #endif
+
#endif /* _SUEXEC_H */