From 52d6a5e40d980d9d45de01f91544a892790cd863 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 30 Nov 2016 11:05:42 -0700 Subject: [PATCH] Solaris 10 wordexp() returns 127 on execve() failure like popen() does. --- src/regress/noexec/check_noexec.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/regress/noexec/check_noexec.c b/src/regress/noexec/check_noexec.c index c4c22d05b..7d790844e 100644 --- a/src/regress/noexec/check_noexec.c +++ b/src/regress/noexec/check_noexec.c @@ -133,18 +133,18 @@ try_wordexp(void) rc = wordexp("$(/bin/echo foo)", &we, 0); switch (rc) { case -1: + /* sudo's wordexp() wrapper returns -1 if RTLD_NEXT is not supported. */ + case 127: + /* Solaris 10 wordexp() returns 127 for execve() failure. */ #ifdef WRDE_ERRNO case WRDE_ERRNO: - /* - * Solaris returns WRDE_ERRNO for execve() failure and sudo's - * wordexp() wrapper returns -1 if RTLD_NEXT is not supported. - */ - printf("%s: MOSTLY OK (wordexp)\n", getprogname()); + /* Solaris 11 wordexp() returns WRDE_ERRNO for execve() failure. */ +#endif + printf("%s: OK (wordexp) [%d]\n", getprogname(), rc); ret = 0; break; -#endif case WRDE_CMDSUB: - printf("%s: OK (wordexp)\n", getprogname()); + printf("%s: OK (wordexp) [WRDE_CMDSUB]\n", getprogname()); ret = 0; break; case 0: @@ -153,7 +153,8 @@ try_wordexp(void) * but the execve() wrapper prevents the command substitution. */ if (we.we_wordc == 0) { - printf("%s: MOSTLY OK (wordexp)\n", getprogname()); + printf("%s: OK (wordexp) [%d]\n", getprogname(), rc); + wordfree(&we); ret = 0; break; } -- 2.40.0