diff options
author | Daniel LEVAI <leva@ecentrum.hu> | 2010-05-13 01:01:03 +0200 |
---|---|---|
committer | Michiel van Wessem <michiel@slackbuilds.org> | 2010-05-13 01:01:03 +0200 |
commit | 6ec76a9860188c0e2de54daf61f5a4ff590ad8ef (patch) | |
tree | edd70b526118253bc6ab17c0dcd069325fa5016f /system/pdksh/patches/042_Debian-eaccess.patch | |
parent | 387f1e8f9c14fc5648eee03d43787806c806fe20 (diff) | |
download | slackbuilds-6ec76a9860188c0e2de54daf61f5a4ff590ad8ef.tar.gz slackbuilds-6ec76a9860188c0e2de54daf61f5a4ff590ad8ef.tar.xz |
system/pdksh: Added to 13.0 repository
Diffstat (limited to 'system/pdksh/patches/042_Debian-eaccess.patch')
-rw-r--r-- | system/pdksh/patches/042_Debian-eaccess.patch | 140 |
1 files changed, 140 insertions, 0 deletions
diff --git a/system/pdksh/patches/042_Debian-eaccess.patch b/system/pdksh/patches/042_Debian-eaccess.patch new file mode 100644 index 0000000000..c859dd459a --- /dev/null +++ b/system/pdksh/patches/042_Debian-eaccess.patch @@ -0,0 +1,140 @@ + * Wrote function eaccess (used to be a macro defined as `access'), + which swaps real uid and gid with the effective ones, calls access, + and reverts the uid/gid. This fixes the test builtin command not + working properly when shell is privileged (closes: #245213). +Index: pdksh-5.2.14/c_test.c +=================================================================== +--- pdksh-5.2.14.orig/c_test.c 2008-04-15 20:49:47.000000000 +0200 ++++ pdksh-5.2.14/c_test.c 2008-04-15 20:52:50.000000000 +0200 +@@ -338,7 +338,7 @@ + case TO_FILUID: /* -O */ + return test_stat(opnd1, &b1) == 0 && b1.st_uid == ksheuid; + case TO_FILGID: /* -G */ +- return test_stat(opnd1, &b1) == 0 && b1.st_gid == getegid(); ++ return test_stat(opnd1, &b1) == 0 && b1.st_gid == kshegid; + /* + * Binary Operators + */ +@@ -656,3 +656,36 @@ + else + bi_errorf("%s", msg); + } ++ ++ ++#ifdef DEBIAN ++int eaccess(const char *pathname, int mode) { ++ int need_setreuid, need_setregid; ++ int result; ++ int _errno; ++ ++ ++ ++ if (( need_setregid = ( kshgid != kshegid ) )) { ++ setregid( kshegid, kshgid ); ++ } ++ ++ if (( need_setreuid = ( kshuid != ksheuid ) )) { ++ setreuid( ksheuid, kshuid ); ++ } ++ ++ result = access( pathname, mode ); ++ _errno = errno; ++ ++ if ( need_setregid ) { ++ setregid( kshgid, kshegid ); ++ } ++ ++ if ( need_setreuid ) { ++ setreuid( kshuid, ksheuid ); ++ } ++ ++ errno = _errno; ++ return result; ++} ++#endif +Index: pdksh-5.2.14/main.c +=================================================================== +--- pdksh-5.2.14.orig/main.c 2008-04-15 20:51:49.000000000 +0200 ++++ pdksh-5.2.14/main.c 2008-04-15 20:52:50.000000000 +0200 +@@ -269,6 +269,9 @@ + + + ksheuid = geteuid(); ++ kshuid = getuid(); ++ kshgid = getgid(); ++ kshegid = getegid(); + safe_prompt = ksheuid ? "$ " : "# "; + { + struct tbl *vp = global("PS1"); +@@ -283,7 +286,7 @@ + } + + /* Set this before parsing arguments */ +- Flag(FPRIVILEGED) = getuid() != ksheuid || getgid() != getegid(); ++ Flag(FPRIVILEGED) = kshuid != ksheuid || kshgid != kshegid; + + /* this to note if monitor is set on command line (see below) */ + Flag(FMONITOR) = 127; +Index: pdksh-5.2.14/misc.c +=================================================================== +--- pdksh-5.2.14.orig/misc.c 2008-04-15 20:49:47.000000000 +0200 ++++ pdksh-5.2.14/misc.c 2008-04-15 20:52:50.000000000 +0200 +@@ -19,6 +19,7 @@ + int isfile)); + static const unsigned char *cclass ARGS((const unsigned char *p, int sub)); + ++ + /* + * Fast character classes + */ +@@ -311,13 +312,13 @@ + ; + #else /* OS2 */ + #ifndef DEBIAN +- setuid(ksheuid = getuid()); +- setgid(getgid()); ++ setuid(ksheuid = kshuid = getuid()); ++ setgid(kshegid = kshgid = getgid()); + #else /* patch from OpenBSD */ +- seteuid(ksheuid = getuid()); ++ seteuid(ksheuid = kshuid = getuid()); + setuid(ksheuid); +- setegid(getgid()); +- setgid(getgid()); ++ setegid(kshegid = kshgid = getgid()); ++ setgid(kshegid); + #endif /* DEBIAN */ + #endif /* OS2 */ + } else if (f == FPOSIX && newval) { +@@ -1365,3 +1366,4 @@ + return b; + #endif /* HAVE_GETCWD */ + } ++ +Index: pdksh-5.2.14/sh.h +=================================================================== +--- pdksh-5.2.14.orig/sh.h 2008-04-15 20:49:47.000000000 +0200 ++++ pdksh-5.2.14/sh.h 2008-04-15 20:52:50.000000000 +0200 +@@ -353,8 +353,12 @@ + #define NUFILE 10 /* Number of user-accessible files */ + #define FDBASE 10 /* First file usable by Shell */ + ++#ifndef DEBIAN + /* you're not going to run setuid shell scripts, are you? */ + #define eaccess(path, mode) access(path, mode) ++#else ++EXTERN int eaccess( const char * pathname, int mode ); ++#endif + + /* Make MAGIC a char that might be printed to make bugs more obvious, but + * not a char that is used often. Also, can't use the high bit as it causes +@@ -372,6 +376,9 @@ + EXTERN pid_t kshpid; /* $$, shell pid */ + EXTERN pid_t procpid; /* pid of executing process */ + EXTERN int ksheuid; /* effective uid of shell */ ++EXTERN int kshegid; /* effective gid of shell */ ++EXTERN int kshuid; /* real uid of shell */ ++EXTERN int kshgid; /* real gid of shell */ + EXTERN int exstat; /* exit status */ + EXTERN int subst_exstat; /* exit status of last $(..)/`..` */ + EXTERN const char *safe_prompt; /* safe prompt if PS1 substitution fails */ |