Commit Graph

3282 Commits

Author SHA1 Message Date
christos 1dd2c2fdec Move the PPID installation to the init() section. 2016-03-08 23:24:51 +00:00
christos 40cc189704 avoid duplicate includes (from kre) 2016-03-08 23:23:31 +00:00
christos 2c7c3a0713 - don't export $PPID (from kre)
- include <stdio.h>
2016-03-08 18:16:11 +00:00
christos ae3fe60ef5 Provide $PPID, kill vvers (unused) 2016-03-08 14:32:34 +00:00
christos 65639a43f1 put back some volatile, gcc complains (x86_64) 2016-03-08 14:11:56 +00:00
christos b506e0ff4c Remove most volatility from readtoken1() restoring execution
speed to approximately where it was before the changes made
in version 1.96 (which assumed this would eventually happen.)
2016-03-08 14:10:04 +00:00
christos dec2ca90b9 PR bin/50834o: fix expansions of (unquoted) ${unset_var-} and ""$@ (from kre) 2016-03-08 14:09:07 +00:00
christos bff14f8dfa PR bin/50896: make shift with more than 1 arg give a usage message, from kre 2016-03-08 14:08:39 +00:00
uwe 0d7369c54b The '-i' flag should work regardless of whether the standard input is
a terminal.  The Open Group notes this historic behavior and correctly
notes that it doesn't make much sense.  Note also, that mv(1) has
always respected its '-i' regardless of whether the standard input is
a terminal.

From Timo Buhrmester.
2016-03-05 19:48:55 +00:00
kamil 6b1cac1128 Correct display of df(1) with the -i parameter
Now the "Mounted on" column should be aligned with /entries.

Patch by Michal Mazurek.
2016-03-05 08:15:01 +00:00
christos fa7bb8d201 PR/50879: David Binderman: remove redundant code. 2016-03-02 19:11:28 +00:00
martin 5902f7d619 Fix wrong condition in previous causing bogus 'Use "exit" to leave
shell.' messages (from kre)
2016-03-01 21:10:40 +00:00
christos 476468ab31 Even more debugging improvements (from kre) 2016-02-29 23:52:04 +00:00
christos a584b40f8d Complete implementation of the noexec option (-n) including
disabling noexec, if the shell is interactive, each time that
a new command is about to be read.  Also correct the -I
(ignoreeof) option so that it only applies to interactive shells,
as required by posix. (from kre)
2016-02-29 23:51:36 +00:00
christos 8cfa226b64 delete clauses 3,4 2016-02-29 23:50:59 +00:00
mrg 9bb33dce89 for display in the (post) SIGINFO handler use off_t not size_t for
file sizes.  fixes incorrect reporting errors on 32 bit platforms
with >4GB file sizes.
2016-02-29 04:22:21 +00:00
christos 0c52b5f165 Bug fixes to handling of unterminated here documents
(they should be, and now are, a syntax error), and
miscellaneous other minor cleanups. (from kre)
2016-02-28 23:12:23 +00:00
mrg 0f6eb69275 add SIGINFO for mv(1), largely based upon the support in cp(1). 2016-02-28 10:59:29 +00:00
christos ed090bddf8 More nodenames fixes. 2016-02-27 23:50:13 +00:00
christos bc8cfb7d77 Improve debugging, from kre (I hooked it to the build). 2016-02-27 18:34:12 +00:00
christos 78204bbf10 remove useless casts 2016-02-27 16:28:50 +00:00
christos d73fcc53c6 CID 1354293: handle EOF 2016-02-27 16:23:22 +00:00
wiz 4cf0de9860 file system police. 2016-02-24 15:28:36 +00:00
christos 8b2383fc90 PR/46327: David Mandelberg: Fix exit codes of background jobs (from kre) 2016-02-24 14:57:12 +00:00
christos 59f04ac937 Simple script to create node names for debugging 2016-02-24 14:51:20 +00:00
christos 750aa9221b If we don't have shared address space vfork fail back to using fork since
we are depending on the shared address space feature (from kre)
2016-02-24 14:38:40 +00:00
christos 57f3725a64 Make sh.1 catch up with reality. Document -h (such as it is...)
and also added doc for some other stuff that was missing.

Take the opportunity to clean up the way the flags are set in the
man page, so every new flag doesn't have to be added 6 times!
(Some of the lists were different from others, in ordering, and
content, for no good reason at all.)

Make a few other cleanups ... Add text about AND-OR lists,
This can be also used to justify closing an open PR:
(that "sh -c 'command &&'" is not a syntax error...).

Add doc for -F, which should default to set if the shell somehow
gets compiled without DO_SHAREDVFORK defined, (to be committed
separately)

XXX: Consider disabling DO_SHAREDVFORK if SMALL is defined?

From kre
2016-02-24 14:35:51 +00:00
christos 95b061168f name the long option after the ksh name (trackall) to indicate the intended
posix behavior not the bash one.
2016-02-23 18:30:16 +00:00
christos a9d1a1847c update that -n is implemented and add -h using the long name that bash
uses. (from kre, long name from me)
2016-02-23 16:22:43 +00:00
christos aeba4f7b70 Fix quoting inside heredoc's. (from kre) 2016-02-23 14:51:25 +00:00
christos 9e6b737d5a PR/43255: Make -n apply to the -c string so sh -n -c 'commands' works
as it should. Also, other places where the shell parses strings of
commands are also now controlled by -n (traps, eval, ...)  (from kre)
2016-02-22 20:03:48 +00:00
christos 606614c83d PR bin/43469 - correctly handle quoting of the pattern part of ${var%pat}
type expansions. (from kre)
2016-02-22 20:02:00 +00:00
christos 863fff4621 Fix for PR bin/48631 - allow commands controlled
by case statements to be nothing more than redirects (from kre)
2016-02-22 19:42:46 +00:00
christos b8f416fe8e Finish the fix for PR/48631 - that is, make the parser correctly
handle the token syntax it really should be handling (including
some that posix does not require, but is right anyway.) This is
quite similar to, and to some extent inspired by the way the FreeBSD
sh parser.c works, but the actual implementation is quite different.
(from kre)
2016-02-22 19:38:10 +00:00
christos 87624d803c KNF / whitespace fixes. No changes of substance. (from kre) 2016-02-22 19:25:26 +00:00
christos 2f573a20ed PR/50827: Richard Hansen: Fix default variable assignment with arithmetic,
from kre.
2016-02-19 13:50:37 +00:00
christos ac40619997 PR/50747: David Binderman: check bounds before dereference.
While here add some continues before semicolons.
2016-02-03 05:26:16 +00:00
christos ded9763f6b PR/50734: David Binderman: check bounds before dereferencing. 2016-02-01 17:34:00 +00:00
wiz 29ce88a214 Whitespace. 2016-01-06 00:22:21 +00:00
christos 30042120ad Document close-on-exec redirection behavior. 2016-01-05 18:16:20 +00:00
christos 0a9b959049 PR/50619: Fix reversed test. 2016-01-04 13:57:15 +00:00
christos d18385a5a2 Don't leak redirected rescriptors to exec'ed processes. This is what ksh
does, but bash does not. For example:

    $ cat test1
    #!/bin/sh
    exec 6> out
    echo "test" >&6
    sh ./test2
    exec 6>&-
    $ cat test2
    echo "test2" >&6
    $ ./test1
    ./test2: 6: Bad file descriptor

This fixes by side effect the problem of the rc system leaking file descriptors
7 and 8 to all starting daemons:

    $ fstat -p 1359
    USER     CMD          PID   FD MOUNT       INUM MODE         SZ|DV R/W
    root     powerd      1359   wd /              2 drwxr-xr-x     512 r
    root     powerd      1359    0 /          63029 crw-rw-rw-    null rw
    root     powerd      1359    1 /          63029 crw-rw-rw-    null rw
    root     powerd      1359    2 /          63029 crw-rw-rw-    null rw
    root     powerd      1359    3* kqueue pending 0
    root     powerd      1359    4 /          64463 crw-r-----   power r
    root     powerd      1359    7 flags 0x80034<ISTTY,MPSAFE,LOCKSWORK,CLEAN>
    root     powerd      1359    8 flags 0x80034<ISTTY,MPSAFE,LOCKSWORK,CLEAN>
    root     powerd      1359    9* pipe 0xfffffe815d7bfdc0 -> 0x0 w

Note fd=7,8 pointing to the revoked pty from the parent rc process.
2016-01-04 03:00:24 +00:00
christos b357ba3056 We don't have RLIMIT_SWAP 2015-12-30 22:26:26 +00:00
wiz c78bed405e Remove trailing whitespace. 2015-12-19 18:48:41 +00:00
wiz 2c25669eb0 Use An in AUTHORS section. 2015-12-19 18:48:33 +00:00
christos 015658bfe0 Add the timestamp option to the pax front end. 2015-12-19 18:45:52 +00:00
christos 9158fb657d PR/50119: Thomas Klausner: Add --timestamp option to tar. 2015-12-19 18:28:54 +00:00
christos 3296beefcd PR/50422: Robert Elz: df -G prints the wrong value for fragsize (+FIX)
For df -G, print the block and fragment size instead of the iosize
and the blocksize. If we need to print the iosize, it should be done
in a different field. Nevertheless printing the blocksize in the fragment
size field is just wrong.
XXX: pullup-6, pullup-7
2015-11-12 17:59:21 +00:00
wiz 349f15a5e8 Use An in AUTHORS section. 2015-11-04 09:24:14 +00:00
pgoyette 4a0bba4840 By my count, [[[[[cc]yy]mm]dd]hh]mm[.ss] has seven fields, not six! 2015-11-03 03:01:35 +00:00
joerg 09dfb13f83 Be explicit about what is negated. 2015-08-28 11:29:48 +00:00
christos 19d6b8392c PR/50179: Timo Buhrmester: sh(1) variable expansion bug 2015-08-27 07:46:47 +00:00
christos f95d5940cc report the signal that wait was interrupted by, which is not always SIGINT
anymore.
2015-08-22 12:12:47 +00:00
christos c0195771da Process pending signals while waiting for a job:
$ cat << EOF > hup.sh
    #!/bin/sh
    trap 'echo SIGHUP; exit 1' 1
    sleep 10000 &
    wait
    EOF
    $ chmod +x ./hup.sh
    $ ./hup.sh &
    $ kill -HUP %1
2015-08-22 09:55:23 +00:00
sevan bf748072f6 Drop the case '?' which is defined after case 'default'.
case 'default' statement introduced in the last commit to cat.c in the CSRG archive.
Obtained from OpenBSD bin/cat/cat.c r1.3.
2015-07-25 16:17:01 +00:00
wiz dfb9651eda Add serial comma, use upper case for abbreviation, and remove apostrophe for plural. 2015-06-28 16:22:54 +00:00
christos 7da746ab02 remove \n from error messages 2015-06-16 22:31:08 +00:00
joerg 3eb04a3615 Use an explicit body for a "until not EINTR" loop. 2015-06-06 15:22:58 +00:00
christos ac33f4ea5e Drop privileges when executed set{u,g}id unless -p is specified like other
shells do to avoid system() and popen() abuse.
2015-05-26 21:35:15 +00:00
joerg 66e60a49ac Include printf by default even for SMALL builds. It is used e.g. by
dhcpcd and as such required by most ramdisk images. Allow turning it off
again by TINYPROG.
2015-05-10 20:30:54 +00:00
christos 9c27fd2a44 CID 1225078: check getrlimit return 2015-05-09 13:28:55 +00:00
christos f49d3ada41 CID 1225088: check return of getrlimit 2015-05-09 13:26:06 +00:00
christos 4b6d6c838f CID 1225077: check getrlimit return 2015-05-09 13:22:37 +00:00
christos 78d721faf9 Simplify by splitting the "simple" mode setting and the "special" ones. 2015-05-01 17:01:08 +00:00
jmcneill fa0ed62f53 document ulimit -r 2015-04-12 17:05:03 +00:00
wiz 5fe5275d9f Use An in AUTHORS section. 2015-04-11 16:22:07 +00:00
christos 23c362a5b1 Add -J/--xz to specifically decompress xz compressed files. We don't really
need this because -z autodetects the compression format; this is for syntax
compatibility with other tar implementations. From Joachim Henke
2015-04-11 15:41:33 +00:00
wiz bb4a52d96c New sentence, new line. Fix typos. Bump date for previous. 2015-03-18 13:30:13 +00:00
manu ea3c6ee530 Add iflag and oflag operands to dd(1)
Like GNU dd(1) similar operands, iflag and oflag allow specifying the
O_* flags given to open(2) for the input and the output file. The values
are comma-sepratated, lower-case, O_ prefix-stripped constants documented
in open(2).

Since iflag and oflag override default values, specifying oflag means
O_CREATE is not set by default and must be specified explicitely.

Some values do not make sense (e.g.: iflag=directory) but are still used
and will raise a warning. For oflag, values rdonly, rdwr and wronly are
filtered out with a warning (dd(1) attempts open(2) with O_RDWR and
then O_WRONLY on failure).

Specifying oflag=trunc along with (seek, oseek or conv=notrunc) is
contradictory and will raise an error.

iflag and oflag are disabled if building with -DMALLPROG
2015-03-18 13:23:49 +00:00
sevan 7c1a019ea3 From OpenBSD r1.49
Fix comment grammar
2015-03-09 23:38:08 +00:00
enami 80c6af722d Fix the name of failed function in warning message. 2015-03-03 00:20:38 +00:00
enami c1e351a1b2 Don't truncate at microseconds while preserving timestamps.
One of motivation of this change is to make the behavior of test(1)
-nt/ot with preserved copy (like cp -p) closer to the NetBSD 6.
Of course whether full timestamps are kept or not depends also on
underlying file system.

The ifdef added in mv(1) since existing ifdefs was our local change
to compile it on solaris (though I couldn't test it):
http://mail-index.netbsd.org/tech-userlevel/2014/11/28/msg008831.html
2015-03-02 03:17:24 +00:00
joerg 14bd6a1392 Make cast warnings for clang non-fatal. 2015-01-29 20:46:31 +00:00
christos 334f5d77c6 Define an undocumented -F option to only use fork instead of vfork for
debugging purposes.
2015-01-02 19:56:20 +00:00
joerg 0bab8dfecf Use l_wmesg if the string is not empty. Don't bother checking l_name for
nullness.
2014-11-15 01:58:34 +00:00
christos 9e91d16823 simplify and eliminate TOCTOU. 2014-10-23 21:03:25 +00:00
jschauma 8e9bed0cec Remove the confusing reference to 'file sizes' in the short description of
the '-l' flag.  As explained in the Long Format section, the total is of
the blocks used by the files, and only applies to directories.
2014-10-18 01:49:01 +00:00
christos a25724438f PR/48201: Miwa Susumu: Fix set -C (no clobber) for POSIX; from FreeBSD
Can't use O_EXCL because of device nodes; also truncate.
2014-10-15 14:54:25 +00:00
dholland 33586bcc4e Provide real error messages.
Inspired by PR 49169 from David H. Gutteridge, but a much broader patch :-)
2014-09-01 21:42:21 +00:00
christos 5cad352e4f remove unused assignment 2014-08-29 09:35:19 +00:00
christos d03f4b6b66 Eat trailing backslash like bash and pdksh (not zsh). CBACK+CEOF = TEOF 2014-08-29 09:26:39 +00:00
christos 7de48e21c0 PR/49125: Havard Eidnes: /bin/sh does not support redirecting to or from FDs > 9
According to:
http://pubs.opengroup.org/onlinepubs/009604599/utilities/xcu_chap02.html#tag_02_07

Redirection support for fds > 9 is optional but allowed.
2014-08-19 12:36:58 +00:00
joerg 694cb36aee Fix RCS ID. 2014-08-08 14:48:55 +00:00
dholland d54dab14a9 remove .if make(install) 2014-07-05 23:13:41 +00:00
dholland 076d336118 remove .if make(install)
these are seriously bad juju
2014-07-05 23:12:33 +00:00
dholland dcc711d503 Reorg docs, part 2:
Rename the following reference documents to match their programs:
   shell -> sh
   viref -> vi

and rename the following to match their topic better:
   ipctut -> sockets
   ipc -> sockets-advanced

Also, the old "timed" and "timedop" docs are now ref5/timed and
ref8/timed respectively, as the first of these documented the
protocol.
2014-07-05 19:23:00 +00:00
dholland b7b7574d3b Reorg docs, part 1:
Move all the reference manuals to subdirs of /usr/share/doc/reference.
We have subdirs ref1-ref9, corresponding to man page sections 1-9.

Everything that's the reference manual for a program (sections 1, 6,
8), C interface (sections 2, 3), driver or file system (section 4),
format or configuration (section 5), or kernel internal interface
(section 9) belongs in here.

Section 7 is a little less clear: some things that might go in section
7 if they were a man page aren't really reference manuals. So I'm only
putting things in reference section 7 that are (to me) clearly
reference material, rather than e.g. tutorials, guides, FAQs, etc.
This obviously leaves some room for debate, especially without first
editing the docs with this distinction in mind, but if people hate
what I've done things can always be moved again.

Note also that while roff macro man pages traditionally go in section
7, I have put all the roff documentation (macros, tools, etc.) in one
place in reference/ref1/roff. This will make it easier to find and
also easier to edit it into some kind of coherent form.
2014-07-05 19:22:41 +00:00
dholland c3ab26950f Rework /usr/share/doc.
Update the <bsd.doc.mk> infrastructure, and update the docs to match
the new infrastructure.

- Build and install text, ps, pdf, and/or html, not roff sources.

- Don't wire the chapter numbers into the build system, or use them in
the installed pathnames. This didn't matter much when the docs were a
museum, but now that we're theoretically going to start maintaining
them again, we're going to add and remove documents periodically and
having the chapter numbers baked in creates a lot of thrashing for no
purpose.

- Specify the document name explicitly, rather than implicitly in a
path. Use this name (instead of other random strings) as the name
of the installed files.

- Specify the document section, which is the subdirectory of
/usr/share/doc to install into.

- Allow multiple subdocuments. (That is, multiple documents in one
output directory.)

- Enumerate the .png files groff emits along with html so they can be
installed.

- Remove assorted hand-rolled rules for running roff and roff widgetry
and add enough variable settings to make these unnecessary. This
includes support for
   - explicit use of soelim
   - refer
   - tbl
   - pic
   - eqn

- Forcibly apply at least minimal amounts of sanity to certain
autogenerated roff files.

- Don't exclude USD.doc, SMM.doc, and PSD.doc directories from the
build, as they now actually do stuff.

Note: currently we can't generate pdf. This turns out to be a
nontrivial problem with no immediate solution forthcoming. So for now,
as a workaround, install compressed .ps as the printable form.
2014-07-05 19:22:02 +00:00
dholland f86ebf3938 Don't print junk errnos. Avoids:
% ps -tfoo
  ps: /dev/ttyfoo: Undefined error: 0
  Exit 1
2014-06-28 17:32:27 +00:00
christos f032129312 Adjust to the new alias text libedit API. 2014-06-18 18:17:30 +00:00
wiz a5aae24aeb Bump date for previous. 2014-06-15 07:27:22 +00:00
dbj 2b213458d4 update list of flags which are extensions to the specification 2014-06-15 07:00:24 +00:00
mrg 26f35dd6b6 remove the build support for GCC 4.1, and any hacks i found for it.
there could still be more -- i only looked for lines matching
both "HAVE_GCC" and "4" as words (grep -w.)
2014-06-13 01:17:45 +00:00
christos 2e317a68f7 PR/48843: Jarmo Jaakkola: Soften the language in the manual page,
making less promises about behavior not explicitly stated in the standard.
2014-06-01 17:46:06 +00:00
christos 01f35fcceb PR/48843: Jarmo Jaakkola: dot commands mess up scope nesting tracking
Evaluation of commands goes completely haywire if a file containing
a break/continue/return command outside its "intended" scope is sourced
using a dot command inside its "intended" scope.  The main symptom is
not exiting from the sourced file when supposed to, leading to evaluation
of commands that were not supposed to be evaluated.  A secondary symptom
is that these extra commands are not evaluated correctly, as some of them
are skipped.  Some examples are listed in the How-To-Repeat section.

According to the POSIX standard, this is how it should work:
    dot:
        The shell shall execute commands from the file in the current
        environment.
    break:
        The break utility shall exit from the smallest enclosing for, while,
        or until loop, [...]
    continue:
        The continue utility shall return to the top of the smallest
        enclosing for, while, or until loop, [...]
    return:
        The return utility shall cause the shell to stop executing
        the current function or dot script.  If the shell is not currently
        executing a function or dot script, the results are unspecified.

It is clear that return should return from a sourced file, which
it does not do.  Whether break and continue should work from the sourced
file might be debatable.  Because the dot command says "in the current
environment", I'd say yes.  In any case, it should not fail in weird
ways like it does now!

The problems occur with return (a) and break/continue (b) because:
    1)  dotcmd() does not record the function nesting level prior to
        sourcing the file nor does it touch the loopnest variable,
        leading to either
    2   a) returncmd() being unable to detect that it should not set
           evalskip to SKIPFUNC but SKIPFILE, or
        b) breakcmd() setting evalskip to SKIPCONT or SKIPBREAK,
        leading to
    3)  cmdloop() not detecting that it should skip the rest of
        the file, due to only checking for SKIPFILE.
The result is that cmdloop() keeps executing lines from the file
whilst evalskip is set, which is the main symptom.  Because
evalskip is checked in multiple places in eval.c, the secondary
symptom appears.
>How-To-Repeat:
Run the following script:

    printf "break\necho break1; echo break2" >break
    printf "continue\necho continue1; echo continue2" >continue
    printf "return\necho return1; echo return2" >return

    while true; do . ./break; done

    for i in 1 2; do . ./continue; done

    func() {
        . ./return
    }
    func

No output should be produced, but instead this is the result:
    break1
    continue1
    continue1
    return1

The main symptom is evident from the unexpected output and the secondary
one from the fact that there are no lines with '2' in them.
>Fix:
Here is patch to src/bin/sh to fix the above problems.  It keeps
track of the function nesting level at the beginning of a dot command
to enable the return command to work properly.

I also changed the undefined-by-standard functionality of the return
command when it's not in a dot command or function from (indirectly)
exiting the shell to being silently ignored.  This was done because
the previous way has at least one bug: the shell exits without asking
for confirmation when there are stopped jobs.

Because I read the standard to mean that break and continue should have
an effect outside the sourced file, that's how I implemented it.  For what
it's worth, this also seems to be what bash does.  Also laziness, because
this way required no changes to loopnesting tracking.  If this is not
wanted, it might make sense to move the nesting tracking to the inputfile
stack.

The patch also does some clean-up to reduce the amount of global
variables by moving the dotcmd() and the find_dot_file() functions from
main.c to eval.c and making in_function() a proper function.
2014-05-31 14:42:18 +00:00
martin 062900c4c2 PR bin/48798: fix format for ino_t.
Slightly modifed variant of the patch provided by Thomas Schmitt.
2014-05-10 09:39:18 +00:00
dholland a468ec4988 Don't bother using variables whose value is never changed from the
initialization value.
2014-04-20 23:31:40 +00:00
dholland 4e3b1a0bd4 Use an enum type for PRINTMODE vs. WIDTHMODE. Compiler output diffs have
been checked.
2014-04-20 22:48:59 +00:00
christos 318c2b5cda PR/48729: Torbjörn Granlund: Avoid negative index in array ref. 2014-04-11 01:49:45 +00:00
wiz b0b52b7f33 Wording improvement for previous.
From jmc@OpenBSD via Igor Sobrado.
2014-04-02 19:54:30 +00:00