summaryrefslogtreecommitdiffstats
path: root/package/busybox/busybox-1.4.0-conf.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/busybox/busybox-1.4.0-conf.patch')
-rw-r--r--package/busybox/busybox-1.4.0-conf.patch37
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);