diff options
Diffstat (limited to 'package/busybox/busybox-1.4.0-conf.patch')
-rw-r--r-- | package/busybox/busybox-1.4.0-conf.patch | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/package/busybox/busybox-1.4.0-conf.patch b/package/busybox/busybox-1.4.0-conf.patch new file mode 100644 index 000000000..e265a7a22 --- /dev/null +++ b/package/busybox/busybox-1.4.0-conf.patch @@ -0,0 +1,37 @@ +--- busybox-1.4.0/applets/applets.c Fri Jan 19 22:23:11 2007 ++++ busybox-1.4.0-conf/applets/applets.c Wed Jan 24 10:15:49 2007 +@@ -340,20 +340,26 @@ + if (sct) { + mode_t m = sct->m_mode; + +- if (sct->m_uid == ruid) /* same uid */ ++ if (sct->m_uid == ruid) ++ /* same uid */ + m >>= 6; +- else if ((sct->m_gid == rgid) || ingroup(ruid, sct->m_gid)) /* same group / in group */ ++ else if ((sct->m_gid == rgid) || ingroup(ruid, sct->m_gid)) ++ /* same group / in group */ + m >>= 3; + + if (!(m & S_IXOTH)) /* is x bit not set ? */ + bb_error_msg_and_die("you have no permission to run this applet!"); + +- if ((sct->m_mode & (S_ISGID | S_IXGRP)) == (S_ISGID | S_IXGRP)) { /* *both* have to be set for sgid */ +- xsetgid(sct->m_gid); +- } else xsetgid(rgid); /* no sgid -> drop */ +- +- if (sct->m_mode & S_ISUID) xsetuid(sct->m_uid); +- else xsetuid(ruid); /* no suid -> drop */ ++ if (sct->m_gid != 0) { ++ /* _both_ have to be set for sgid */ ++ if ((sct->m_mode & (S_ISGID | S_IXGRP)) == (S_ISGID | S_IXGRP)) { ++ xsetgid(sct->m_gid); ++ } else xsetgid(rgid); /* no sgid -> drop */ ++ } ++ if (sct->m_uid != 0) { ++ if (sct->m_mode & S_ISUID) xsetuid(sct->m_uid); ++ else xsetuid(ruid); /* no suid -> drop */ ++ } + } else { + /* default: drop all privileges */ + xsetgid(rgid); |