Age | Commit message (Collapse) | Author |
|
One uncommon but useful way of writing shell scripts is to start off by
disabling field/word splitting (IFS='') and pathname expansion/globbing
(set -f), re-enabling either or both only for the commands that need
them, e.g. within a subshell. This helps avoid a lot of snags with field
splitting and globbing if you forget to quote a variable somewhere,
adding to the general robustness of a script. (In fact it eliminates
much of the need to quote variable/parameter expansions, with empty
removal remaining as the only issue.)
Unfortunately OpenBSD ksh (like all pdksh variants except mksh) has a
POSIX compliance bug that is a show stopper for this approach: "$@" does
not generate words (arguments) if IFS is empty. As a result, the
separate command arguments represented by "$@" become a single argument.
So passing on an intact set of positional parameters to a command or
function is impossible with field splitting disabled.
Of course this is illogical: the quoted special parameter "$@" generates
zero or more words, it doesn't split any words, so the contents of IFS
(or lack thereof) should be neither here nor there. It's old ksh88
behaviour copied by the original pdksh, but it violates POSIX and it has
been fixed many years ago in ksh93 and all other POSIX shells.
From Martijn Dekker (who also wrote the above paragraphs) back in 2016.
Thanks to Avi Halachmi for reminding us of the issue.
ok czarkoff deraadt kn
|
|
ok millert@
|
|
it results in the same, but is incorrect.
ok millert
|
|
OK tb@
|
|
We don't need to be too specific about this in su(1), leave the
details for csh(1). OK jca@
|
|
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@
|
|
Previously, our ls would only print the directory name when listing
more than one directory, which is the correct behavior for non-recursive
ls but not for -R mode. OK deraadt@
|
|
It is not enough to avoid displaying the contents of the directory,
we need to set FTS_SKIP to avoid descending into any subdirs too.
Otherwise, if a ".foo" directory has a subdirectory "bar", ls will
descend into bar and display its contents. OK deraadt@
|
|
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@
|
|
but additionally have a bootblock in the first 8K (since UFS does not use that
space). There are some UEFI direct-from-internet bootloaders that require
the name *.img. So this makes things more convenient for those, while keeping
it consistant in all architectures.
ok kettenis beck kn
|
|
Mixing up function and void pointers isn't defined by POSIX or the
C standard. POSIX only specifies that casting the result of dlsym(3) to
an appropriate function pointer works.
Avoid all this by using a typedef.
from Michael Forney, ok tb@
|
|
show a less confusing track
okay millert@ (with a small tweak to the error message by millert@)
|
|
- Sort includes alphabetically
- Sort prototypes alphabetically
- Sort stack variables by size
- Add missing braces to the getopt(3) loop
- Be explicit: there is *one* argument, so use argv[0], not *argv
- If nanosleep(2) somehow fails, say that "nanosleep" failed when
we err(3)
- Remove extra parentheses from the return statement
- De-(void) the obvious fprintf(3) in usage()
- __progname -> getprogname(3)
- POSIX 1003.2 has long since become POSIX.1
- Remove an ARGUSED linter comment
- stdio(3) flushing is not the only potential issue with an exit(3)
from a signal handler. Just note that exit(3) isn't safe and leave
it at that.
|
|
the environment at shell initialization time. During startup, ksh calls
'eval typeset -i TMOUT="${TMOUT:-0}"'. which allows command injection via
arithmetic expansion, e.g., by setting TMOUT to 'x[`/bin/echo Hi >&2`]'.
Problem noted by Andras Farkas and tj, inspired by a similar issue in
AT&T's ksh. Tested in snaps for two weeks.
"go for it" deraadt
|
|
|
|
and make some wordings more concise.
Parts of a patch from Jan Stary <hans at stare dot cz>, tweaked by me.
Feedback and OK jmc@.
|
|
manual pages that document the corresponding configuration files;
OK jmc@, and general direction discussed with many
|
|
|
|
Fluff noticed by jsg@.
|
|
Change several instances, most of them to the usual -width Ds.
|
|
Adapt substitute test to new ed(1) behavior. Note that substitute
result from sed(1) is still different.
|
|
Adapt ed test.
|
|
Adapt ed test.
|
|
KERN_PROC_SHOW_THREADS and have been rendered superfluous by it.
Similarly, some P_SYSTEM tests can be deleted or pushed to the
kernel by using KERN_PROC_ALL instead of KERN_PROC_KTHREAD.
ok visa@ mpi@
|
|
ok deraadt@
|
|
from chohag
|
|
if not already set. This makes "cpio -Hustar -o" behave the same as
"cpio -o -Hustar". ok guenther@
|
|
|
|
Using alloc.c for the history array brings no value and prevents
easy handling of memory shortage. Switch to plain reallocarray and
keep running if HISTSIZE is too big.
The allocation is still done upfront with no sanity checking, it would
probably be nicer to allocate space as needed.
Issue reported by thomas@habets.se who suggested a different approach.
|
|
This became possible because copies of the original v1 manuals
have shown up on the Internet some time ago.
Reminded by Sevan Janiyan <venture37 at geeklan dot co dot uk>.
|
|
OK millert
|
|
getcap->cgetent. pwcache->user_from_uid. And then repair references.
ok jmc
|
|
Part of the kernel timezone removal effort.
With input from deraadt@ and tedu@.
"burn it!" mpi@, ok tedu@ deraadt@
|
|
Both have the same meaning, but the former is explicitly defined
in this manual page as "the next line" whereas the latter requires
combining various pieces of information for understanding.
Unification suggested and patch OK'ed by martijn@.
|
|
Instead, link to the explanation of octal permission masks in chmod(2)
directly from the description of "umask", and to ksh(1) from SEE ALSO.
Fixing an oddity pointed out by guenther@; OK jmc@ millert@.
|
|
OK guenther@
|
|
OK deraadt@
|
|
fact on the ground in ps everywhere, even on linux, and it is not going
to go away, and denying the existance is pointless. The SYNOPSIS cannot
proscriptively document all the cases without a madness. I also feel
there is very little need to explain the behaviour differences relative
to the sparse POSIX standard for ps, everyone's ps has oodles of
extensions.
|
|
Spotted by maya@netbsd
ok deraadt@
|
|
implementation; it was oversimplified and arguably incorrect.
2. Explicitely compare the behaviour of empty command lists for g,
empty command lists for G, and empty commands because these subtle
differences are quite confusing.
3. Say more precisely what the v and V commands do, avoiding the
fuzzy wording "similar".
All these issues were first pointed out by martijn@.
Feedback and OK martijn@; "diff reads ok" jmc@ on an earlier version.
|
|
the g and G commands, and polish the wording a bit explaining empty
command lists.
Closing a gap in the manual reported by <mazocomp at disroot dot org>.
OK jmc@ martijn@
|
|
* Delete a stray blank from the command line synopsis
and add the missing .Ar markup to it.
* Do not mention the terminating newline for the empty command
since it isn't mentioned for any other command either.
* Make the description of the empty command easier to understand.
Joint work with martijn@ and jmc@.
|
|
thread started by mazocomp; diff from ropers, shortened by me;
ok martijn schwarze
|
|
|
|
- No need for intermediate variables, just build the timespec directly
- Use for-loops so we modify "cp" on a single line in each loop
- Parse subseconds with one loop: less code, easier to read, etc.
- Improve the subsecond parsing comment: make our intent really obvious
ok schwarze@
|
|
|
|
value < 0. errno is only updated in this case. Change all (most?)
callers of syscalls to follow this better, and let's see if this strictness
helps us in the future.
|
|
|
|
ok millert nicm tb, etc
|
|
EOF in case of errors, not any negative number.
EOF corner case spotted while reviewing a much bigger diff by deraadt
OK deraadt, millert
|