1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* file.c (path_check_0): check if sticky bit is set on parent

directories for executable path.  fixed: [ruby-dev:29415]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@10863 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2006-09-04 20:50:13 +00:00
parent 6b0f7ae2aa
commit 401ff253ef
2 changed files with 11 additions and 8 deletions

View file

@ -1,3 +1,8 @@
Tue Sep 5 05:49:41 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
* file.c (path_check_0): check if sticky bit is set on parent
directories for executable path. fixed: [ruby-dev:29415]
Mon Sep 4 23:15:34 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
* time.c (time_to_s): make it conform to RFC2822 date format.

14
file.c
View file

@ -4099,9 +4099,9 @@ is_absolute_path(path)
#ifndef DOSISH
static int
path_check_0(fpath, loadpath)
path_check_0(fpath, execpath)
VALUE fpath;
int loadpath;
int execpath;
{
struct stat st;
char *p0 = StringValueCStr(fpath);
@ -4116,7 +4116,7 @@ path_check_0(fpath, loadpath)
rb_str_cat2(newpath, "/");
rb_str_cat2(newpath, p0);
return path_check_0(newpath, loadpath);
p0 = RSTRING(fpath = newpath)->ptr;
}
for (;;) {
#ifndef S_IWOTH
@ -4124,10 +4124,11 @@ path_check_0(fpath, loadpath)
#endif
if (stat(p0, &st) == 0 && S_ISDIR(st.st_mode) && (st.st_mode & S_IWOTH)
#ifdef S_ISVTX
&& (loadpath || !(st.st_mode & S_ISVTX))
&& !(p && execpath && (st.st_mode & S_ISVTX))
#endif
) {
rb_warn("Insecure world writable dir %s, mode 0%o", p0, st.st_mode);
rb_warn("Insecure world writable dir %s in %sPATH, mode 0%o",
p0, (execpath ? "" : "LOAD_"), st.st_mode);
if (p) *p = '/';
return 0;
}
@ -4315,9 +4316,6 @@ rb_find_file(path)
}
else {
lpath = RSTRING(tmp)->ptr;
if (rb_safe_level() >= 1 && !rb_path_check(lpath)) {
rb_raise(rb_eSecurityError, "loading from unsafe path %s", lpath);
}
}
}
else {