logo

oasis

Own branch of Oasis Linux (upstream: <https://git.sr.ht/~mcf/oasis/>) git clone https://anongit.hacktivis.me/git/oasis.git
commit: d796a168aea7d81744db30f24f70c4c4ae26e014
parent 82d6f78ee10b5c95fbb9d6eddeeab16fb611c1a0
Author: Michael Forney <mforney@mforney.org>
Date:   Thu,  9 Jul 2020 17:50:01 -0700

oksh: Apply a couple upstream patches

This adds -o pipefail and fixes eval under ||.

Diffstat:

M.gitmodules1+
Apkg/oksh/patch/0001-Fix-the-exit-code-when-eval-uating-a-compound-list-i.patch46++++++++++++++++++++++++++++++++++++++++++++++
Apkg/oksh/patch/0002-Add-support-for-set-o-pipefail.patch160+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mpkg/oksh/ver2+-
4 files changed, 208 insertions(+), 1 deletion(-)

diff --git a/.gitmodules b/.gitmodules @@ -234,6 +234,7 @@ [submodule "pkg/oksh/src"] path = pkg/oksh/src url = https://github.com/ibara/oksh.git + ignore = all [submodule "pkg/openssh/src"] path = pkg/openssh/src url = https://github.com/oasislinux/openssh.git diff --git a/pkg/oksh/patch/0001-Fix-the-exit-code-when-eval-uating-a-compound-list-i.patch b/pkg/oksh/patch/0001-Fix-the-exit-code-when-eval-uating-a-compound-list-i.patch @@ -0,0 +1,46 @@ +From ebcebe2ead4911f9e6d96f867b8736a833b5d1cb Mon Sep 17 00:00:00 2001 +From: benno <benno@openbsd.org> +Date: Fri, 22 May 2020 07:50:07 +0000 +Subject: [PATCH] Fix the exit code when eval()uating a || compound list, it + would terminate the shell when running under -e. See also + https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=269067 and Bug reported + including fix by Leah Neukirchen, Thanks! ok millert@ + +--- + c_sh.c | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +diff --git a/c_sh.c b/c_sh.c +index b051022..98f5e5e 100644 +--- a/c_sh.c ++++ b/c_sh.c +@@ -1,4 +1,4 @@ +-/* $OpenBSD: c_sh.c,v 1.63 2018/04/09 17:53:36 tobias Exp $ */ ++/* $OpenBSD: c_sh.c,v 1.64 2020/05/22 07:50:07 benno Exp $ */ + + /* + * built-in Bourne commands +@@ -424,6 +424,8 @@ int + c_eval(char **wp) + { + struct source *s; ++ struct source *saves = source; ++ int savef; + int rv; + + if (ksh_getopt(wp, &builtin_opt, null) == '?') +@@ -458,7 +460,11 @@ c_eval(char **wp) + exstat = subst_exstat; + } + ++ savef = Flag(FERREXIT); ++ Flag(FERREXIT) = 0; + rv = shell(s, false); ++ Flag(FERREXIT) = savef; ++ source = saves; + afree(s, ATEMP); + return (rv); + } +-- +2.27.0 + diff --git a/pkg/oksh/patch/0002-Add-support-for-set-o-pipefail.patch b/pkg/oksh/patch/0002-Add-support-for-set-o-pipefail.patch @@ -0,0 +1,160 @@ +From 338e2553f39a37b3e2bd1d91cfaa4c336b85c3f0 Mon Sep 17 00:00:00 2001 +From: jca <jca@openbsd.org> +Date: Tue, 7 Jul 2020 10:33:58 +0000 +Subject: [PATCH] Add support for set -o pipefail + +With the pipefail option set, the exit status of a pipeline is 0 if all +commands succeed, or the return status of the rightmost command that +fails. This can help stronger error checking, but is not a silver +bullet. For example, commands will exhibit a non-zero exit status if +they're killed by a SIGPIPE when writing to a pipe. Yet pipefail was +considered useful enough to be included in the next POSIX standard. + +This implementation remembers the value of the pipefail option when +a pipeline is started, as described as option 1) in + + https://www.austingroupbugs.net/view.php?id=789#c4102 + +Requested by ajacoutot@, ok millert@ +--- + jobs.c | 30 ++++++++++++++++++++++++++++-- + ksh.1 | 12 +++++++++--- + misc.c | 3 ++- + sh.h | 3 ++- + 4 files changed, 41 insertions(+), 7 deletions(-) + +diff --git a/jobs.c b/jobs.c +index f99c9eb..121c0cf 100644 +--- a/jobs.c ++++ b/jobs.c +@@ -1,4 +1,4 @@ +-/* $OpenBSD: jobs.c,v 1.61 2019/06/28 13:34:59 deraadt Exp $ */ ++/* $OpenBSD: jobs.c,v 1.62 2020/07/07 10:33:58 jca Exp $ */ + + /* + * Process and job control +@@ -70,6 +70,7 @@ struct proc { + #define JF_REMOVE 0x200 /* flagged for removal (j_jobs()/j_notify()) */ + #define JF_USETTYMODE 0x400 /* tty mode saved if process exits normally */ + #define JF_SAVEDTTYPGRP 0x800 /* j->saved_ttypgrp is valid */ ++#define JF_PIPEFAIL 0x1000 /* pipefail on when job was started */ + + typedef struct job Job; + struct job { +@@ -421,6 +422,8 @@ exchild(struct op *t, int flags, volatile int *xerrok, + */ + j->flags = (flags & XXCOM) ? JF_XXCOM : + ((flags & XBGND) ? 0 : (JF_FG|JF_USETTYMODE)); ++ if (Flag(FPIPEFAIL)) ++ j->flags |= JF_PIPEFAIL; + timerclear(&j->usrtime); + timerclear(&j->systime); + j->state = PRUNNING; +@@ -1084,7 +1087,30 @@ j_waitj(Job *j, + + j_usrtime = j->usrtime; + j_systime = j->systime; +- rv = j->status; ++ ++ if (j->flags & JF_PIPEFAIL) { ++ Proc *p; ++ int status; ++ ++ rv = 0; ++ for (p = j->proc_list; p != NULL; p = p->next) { ++ switch (p->state) { ++ case PEXITED: ++ status = WEXITSTATUS(p->status); ++ break; ++ case PSIGNALLED: ++ status = 128 + WTERMSIG(p->status); ++ break; ++ default: ++ status = 0; ++ break; ++ } ++ if (status) ++ rv = status; ++ } ++ } else ++ rv = j->status; ++ + + if (!(flags & JW_ASYNCNOTIFY) && + (!Flag(FMONITOR) || j->state != PSTOPPED)) { +diff --git a/ksh.1 b/ksh.1 +index 7330e93..a91ab51 100644 +--- a/ksh.1 ++++ b/ksh.1 +@@ -1,8 +1,8 @@ +-.\" $OpenBSD: ksh.1,v 1.208 2019/11/26 22:49:01 jmc Exp $ ++.\" $OpenBSD: ksh.1,v 1.209 2020/07/07 10:33:58 jca Exp $ + .\" + .\" Public Domain + .\" +-.Dd $Mdocdate: November 26 2019 $ ++.Dd $Mdocdate: July 7 2020 $ + .Dt KSH 1 + .Os + .Sh NAME +@@ -361,7 +361,9 @@ token to form pipelines, in which the standard output of each command but the + last is piped (see + .Xr pipe 2 ) + to the standard input of the following command. +-The exit status of a pipeline is that of its last command. ++The exit status of a pipeline is that of its last command, unless the ++.Ic pipefail ++option is set. + A pipeline may be prefixed by the + .Ql \&! + reserved word, which causes the exit status of the pipeline to be logically +@@ -3664,6 +3666,10 @@ See the + and + .Ic pwd + commands above for more details. ++.It Ic pipefail ++The exit status of a pipeline is the exit status of the rightmost ++command in the pipeline that doesn't return 0, or 0 if all commands ++returned a 0 exit status. + .It Ic posix + Enable POSIX mode. + See +diff --git a/misc.c b/misc.c +index 0f8b336..c2ee2fa 100644 +--- a/misc.c ++++ b/misc.c +@@ -1,4 +1,4 @@ +-/* $OpenBSD: misc.c,v 1.73 2019/06/28 13:34:59 deraadt Exp $ */ ++/* $OpenBSD: misc.c,v 1.74 2020/07/07 10:33:58 jca Exp $ */ + + /* + * Miscellaneous functions +@@ -147,6 +147,7 @@ const struct option sh_options[] = { + { "notify", 'b', OF_ANY }, + { "nounset", 'u', OF_ANY }, + { "physical", 0, OF_ANY }, /* non-standard */ ++ { "pipefail", 0, OF_ANY }, /* non-standard */ + { "posix", 0, OF_ANY }, /* non-standard */ + { "privileged", 'p', OF_ANY }, + { "restricted", 'r', OF_CMDLINE }, +diff --git a/sh.h b/sh.h +index f9cdd53..2d65808 100644 +--- a/sh.h ++++ b/sh.h +@@ -1,4 +1,4 @@ +-/* $OpenBSD: sh.h,v 1.75 2019/02/20 23:59:17 schwarze Exp $ */ ++/* $OpenBSD: sh.h,v 1.76 2020/07/07 10:33:58 jca Exp $ */ + + /* + * Public Domain Bourne/Korn shell +@@ -158,6 +158,7 @@ enum sh_flag { + FNOTIFY, /* -b: asynchronous job completion notification */ + FNOUNSET, /* -u: using an unset var is an error */ + FPHYSICAL, /* -o physical: don't do logical cd's/pwd's */ ++ FPIPEFAIL, /* -o pipefail: all commands in pipeline can affect $? */ + FPOSIX, /* -o posix: be posixly correct */ + FPRIVILEGED, /* -p: use suid_profile */ + FRESTRICTED, /* -r: restricted shell */ +-- +2.27.0 + diff --git a/pkg/oksh/ver b/pkg/oksh/ver @@ -1 +1 @@ -6.7-2-gd5dc133 r0 +6.7-2-gd5dc133 r1