diff options
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | Src/params.c | 18 | ||||
-rw-r--r-- | Test/D07multibyte.ztst | 30 |
3 files changed, 39 insertions, 17 deletions
diff --git a/ChangeLog b/ChangeLog index 3e9439d63..4f961da3a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,11 @@ 2009-05-08 Peter Stephenson <pws@csr.com> + * 26953: Test/D07multibyte.ztst: print warning but don't fail test + if system apparently can't do simple character set conversion. + + * 26950: Src/params.c: warn on failed attempt to change real or + effective group or user ID. + * 26949: Completion/Unix/Command/_sudo: new options and sudoedit. * 26948: Src/Zle/zle_refresh.c: ensure recorded window sizes @@ -11673,5 +11679,5 @@ ***************************************************** * This is used by the shell to define $ZSH_PATCHLEVEL -* $Revision: 1.4680 $ +* $Revision: 1.4681 $ ***************************************************** diff --git a/Src/params.c b/Src/params.c index 6a7ab0fa6..4767aaa34 100644 --- a/Src/params.c +++ b/Src/params.c @@ -3527,7 +3527,11 @@ usernamesetfn(UNUSED(Param pm), char *x) # ifdef USE_INITGROUPS initgroups(x, pswd->pw_gid); # endif - if(!setgid(pswd->pw_gid) && !setuid(pswd->pw_uid)) { + if (setgid(pswd->pw_gid)) + zwarn("failed to change group ID: %e", errno); + else if (setuid(pswd->pw_uid)) + zwarn("failed to change user ID: %e", errno); + else { zsfree(cached_username); cached_username = ztrdup(pswd->pw_name); cached_uid = pswd->pw_uid; @@ -3553,7 +3557,8 @@ void uidsetfn(UNUSED(Param pm), zlong x) { #ifdef HAVE_SETUID - setuid((uid_t)x); + if (setuid((uid_t)x)) + zwarn("failed to change user ID: %e", errno); #endif } @@ -3573,7 +3578,8 @@ void euidsetfn(UNUSED(Param pm), zlong x) { #ifdef HAVE_SETEUID - seteuid((uid_t)x); + if (seteuid((uid_t)x)) + zwarn("failed to change effective user ID: %e", errno); #endif } @@ -3593,7 +3599,8 @@ void gidsetfn(UNUSED(Param pm), zlong x) { #ifdef HAVE_SETUID - setgid((gid_t)x); + if (setgid((gid_t)x)) + zwarn("failed to change group ID: %e", errno); #endif } @@ -3613,7 +3620,8 @@ void egidsetfn(UNUSED(Param pm), zlong x) { #ifdef HAVE_SETEUID - setegid((gid_t)x); + if (setegid((gid_t)x)) + zwarn("failed to change effective group ID: %e", errno); #endif } diff --git a/Test/D07multibyte.ztst b/Test/D07multibyte.ztst index c7ee5791b..3f4eaf9c0 100644 --- a/Test/D07multibyte.ztst +++ b/Test/D07multibyte.ztst @@ -378,17 +378,25 @@ >X$'\300'Y$'\a'Z$'\177'T # This also isn't strictly multibyte and is here to reduce the -# likelihood of a "can't do character set conversion" error. - testfn() { (LC_ALL=C; print $'\u00e9') } - repeat 4 testfn 2>&1 | while read line; do - if [[ $line = *"character not in range"* ]]; then - print OK - elif [[ $line = "?" ]]; then - print OK - else - print Failed: no error message and no question mark - fi - done +# likelihood of a "cannot do character set conversion" error. + (print $'\u00e9') 2>&1 | read + if [[ $REPLY != é ]]; then + print "warning: your system can't do simple Unicode conversion." >&$ZTST_fd + print "Check you have a correctly installed iconv library." >&$ZTST_fd + # cheat + repeat 4 print OK + else + testfn() { (LC_ALL=C; print $'\u00e9') } + repeat 4 testfn 2>&1 | while read line; do + if [[ $line = *"character not in range"* ]]; then + print OK + elif [[ $line = "?" ]]; then + print OK + else + print Failed: no error message and no question mark + fi + done + fi true 0:error handling in Unicode quoting >OK |