| Commit message (Collapse) | Author | Age | Files | Lines |
| ... | |
| |
|
|
|
|
|
|
|
|
|
| |
It is possible for the child to become zombie and then there is nothing
to signal.
Reported and tested by: pho
Reviewed by: markj
Sponsored by: The FreeBSD Foundation
MFC after: 1 week
Differential revision: https://reviews.freebsd.org/D50752
|
| |
|
|
|
|
|
|
|
|
| |
Since the bug we're testing involved path name construction, we don't
need to be root to test it; we can simply check the error message.
Fixes: 537fbf70f12b
Sponsored by: Klara, Inc.
Reviewed by: allanjude
Differential Revision: https://reviews.freebsd.org/D50628
|
| |
|
|
|
|
|
|
|
|
|
| |
The trailing-slash logic would strip the target down to an empty
string, which we would then fail to stat, and subsequently attempt
(and fail) to create.
Fixes: 82fc0d09e862
Sponsored by: Klara, Inc.
Reviewed by: allanjude
Differential Revision: https://reviews.freebsd.org/D50604
|
| |
|
|
|
|
|
|
|
|
|
|
| |
If the current umask is weird, ATF goes to great lengths to tell us that
it can't possibly work in these conditions, instead of just dealing with
it. This makes it unreasonably hard to use ATF to test how our own code
handles unusual umasks.
MFC after: 1 week
Sponsored by: Klara, Inc.
Reviewed by: igoro, kevans, ngie
Differential Revision: https://reviews.freebsd.org/D50267
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* At the end of copy(), we always close to.dir, even though it can be
AT_FDCWD (in the file-to-file case) or even -1 (if we failed to open
or create the destination directory). While closing an invalid file
descriptor is harmless, it's still bad form.
* In the DIR_TO_DNE case, initialize to.dir to -1 to guard against the
case where mkdir() fails so we never assign anything to to.dir and
end up (harmlessly, luckily) closing stdin on our way to the exit.
Coverity ID: 1609954
Fixes: 82fc0d09e862
Sponsored by: Klara, Inc.
Reviewed by: markj
Differential Revision: https://reviews.freebsd.org/D50391
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
If run as
alias ''
uninitialized memory could be referenced.
This is based on a fix from NetBSD. For more information, refer to
https://github.com/NetBSD/src/commit/10cfed82c28 .
Obtained from: NetBSD (Robert Elz <kre@netbsd.org>, 10cfed82c28)
MFC after: 3 days
Reported by: mckusick, Robert Elz <kre@netbsd.org>
Reviewed by: emaste
Differential Revision: https://reviews.freebsd.org/D50364
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Make to.base large enough to hold a trailing separator.
* Remove the separator from warning and error messages.
* In the FILE_TO_FILE case, leave to.base empty.
* In the FILE_TO_DIR and DIR_TO_DNE cases, append a separator to
to.base once we've (optionally created and) opened it.
* Thus, in the file-to-file case, we print an empty string followed by
to.path, while in all other cases, to.base already contains the
necessary separator.
This fixes failures in tests that used cp and expected a specific
error message and were surprised to see "./" pop up.
Fixes: 82fc0d09e862
Sponsored by: Klara, Inc.
Reviewed by: markj
Differential Revision: https://reviews.freebsd.org/D50357
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Ensure that we are able to enter the destination directory after we
create it, even if the current umask would normally prevent it, and
that it has the expected permissions once we are done, even if we had
to tweak them to be able to enter it.
Fixes: 82fc0d09e862
Sponsored by: Klara, Inc.
Reviewed by: markj
Differential Revision: https://reviews.freebsd.org/D50266
|
| |
|
|
|
|
|
|
|
|
|
|
| |
The test case was a) not doing what I intended it to do and b) missing
a third possible configuration. Fix the test case, and fix the code
by not setting the beneath flag (which restricts operations to the
destination tree) unless we are recursing.
Fixes: 82fc0d09e862
Sponsored by: Klara, Inc.
Reviewed by: allanjude, markj
Differential Revision: https://reviews.freebsd.org/D50257
|
| |
|
|
|
|
|
|
|
|
|
| |
* Correctly indent some comment blocks.
* Avoid using strcpy(), even when we know it's safe.
* Drop the (void) casts from fts_set() calls which can never fail.
Fixes: 82fc0d09e862
Sponsored by: Klara, Inc.
Reviewed by: allanjude, markj
Differential Revision: https://reviews.freebsd.org/D50256
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
As stated in the previous commit, option '-J' was introduced by commit
"Add -J to filter by matching jail IDs and names."
(13767130c7147ae7182a, r265229), which unfortunately talked about '-J'
being a filter while actually implementing it as a regular selection
option which adds to the processes to display.
The manual page's formulation hinted more at '-J' being a filter, which
it is not, or could be just considered ambiguous, because of the
presence of the "only" word. Consequently, remove it and reformulate.
Reviewed by: ziaee, dch
MFC after: 1 day
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D50194
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* As a general rule, follow symbolic links in the destination as long
as the target is within the destination hierarchy.
* As a special case, allow the destination itself to be a symbolic
link, and even a dead one (in which case we create the target).
* The file-to-file case remains unrestricted.
Currently, if a symlink we aren't allowed to follow is encountered,
cp will behave just like it would if the file was not writable. We
should consider whether it would be better to replace the offending
link instead.
Fixes: 0729d1e8fd90
MFC after: never
Relnotes: yes
Sponsored by: Klara, Inc.
Reviewed by: markj
Differential Revision: https://reviews.freebsd.org/D50093
|
| |
|
|
|
|
| |
Remove the double word "the the" from the sh(1) manual page.
MFC after: 3 days
|
| |
|
|
|
|
|
| |
Jump from one word to another. Not words to words.
Reviewed by: imp
Pull Request: https://github.com/freebsd/freebsd-src/pull/1565
|
| |
|
|
|
|
| |
Noted by: lwhsu
MFC after: 3 days
Sponsored by: The FreeBSD Foundation
|
| |
|
|
|
|
|
| |
Where appropriate.
MFC after: 3 days
Sponsored by: The FreeBSD Foundation
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This is what POSIX mandates for option '-U' and arguably the behavior
that most users actually need in most cases. Before, '-U' would select
processes by their effective user IDs (which is the behavior mandated by
POSIX for option '-u').
Matching by real user IDs allows to list all processes belonging to the
passed users, including those temporarily having a different effective
user ID, which can happen if launched by a setuid executable or if using
some credentials-changing facility (such as seteuid() for root processes
or mac_do(4)/setcred(2)). Conversely, processes temporarily assuming
the identity of some of the passed users will not be listed anymore
(they do not "belong" to these users).
This change also makes '-U' consistent with '-G', the latter already
matching on real group IDs.
While here, remove the (non-compiled) code for tentative option '-R' as
its proposed behavior was the one established here for '-U'. Also, move
the compiled-out old code for '-U' under '-u' for reference, as this is
what the latter should do according to POSIX, even if it seems unlikely
we will want to change the behavior of '-u'.
Reviewed by: manpages (ziaee)
MFC after: 3 days
Relnotes: yes
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D49622 (code)
Differential Revision: https://reviews.freebsd.org/D49623 (manual page)
|
| |
|
|
|
|
| |
MFC after: 3 days
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D49621
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This puts our ps(1) in conformance with POSIX.
While here, replace ad-hoc initialization of 'uidlist' with a call to
expand_list().
***
Review of the ps(1) implementations in other BSDs, illumos, and Linux's
procps shows they already behave as prescribed by POSIX.
Previously, we would match processes with their effective user ID but
using our real user ID. While the real user ID is meant as the real
identity of a process, and is used, e.g., to perform accounting or be
permitted to send signals to specific targets, selecting processes to
display is arguably more akin to a kind of (advisory) access control.
ps(1) is not installed setuid, so normally the real and effective user
IDs of ps processes are the same. This may however not be the case when
ps(1) is launched by another setuid executable, and the launching
process may then logically expect that ps(1) lists the processes
corresponding to its effective UID.
MFC after: 3 days
Relnotes: yes
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D49619 (code)
Differential Revision: https://reviews.freebsd.org/D49620 (manual page)
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
When combined with other options affecting the selection of processes,
except for '-X' and '-x', option '-a' would have no effect (and '-A'
would reduce to just '-x'). This was in contradiction with the rule
applying to all other selection options stating that one process is
listed as soon as any of these options has been specified and selects
it, which is both mandated by POSIX and arguably a natural expectation.
MFC after: 3 days
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D49617 (code)
Differential Revision: https://reviews.freebsd.org/D49618 (manual page)
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The ps(1) display's list of columns is now first built without taking
into account the '-O' options. In a second step, all columns passed via
'-O' are finally inserted after the built-so-far display's first PID
column (if it exists, else at start), in their order of appearance as
arguments to the '-O' options.
This new two-step procedure suppresses the following undesirable
behaviors:
- '-O' used to insert the columns of the default display even if the
user also passed other options to request specific columns.
- Each occurence of '-O' beyond the first would just insert the passed
keywords after those requested by the previous options, as if by '-o',
inconsistently with the behavior for the first occurence.
These behaviors had more annoying consequences:
- Where the columns of some '-O' occurence appear in the display used to
depend on the actual position of '-O' with respect to other options,
despite the natural expectation that they should go near a single PID
column considered as an anchor regardless of other options adding
columns.
- Columns specified with multiple '-O' options would not be grouped
together.
- It used to be impossible to specify custom headers but for the last
column for columns that are next to each other (i.e., specified by
a single '-O' occurence).
which are now all lifted.
With these changes, '-O' can still be used alone to amend the default
display, but can now be used also in conjunction with any specific
display, and in particular "canned" ones invoked by '-j', '-l', '-u' or
'-v'.
******
This part discusses other ps(1) implementations' behaviors and compares
them to the one established by this change.
NetBSD seems to be the only other BSD having refined the meaning of
ps(1)'s '-O' option. While the behavior there is similar to the new one
here on the surface, it differs on the following points:
1. If no options requesting a specific display are present before the
first '-O' option, the appearance of '-O' triggers the insertion of
the default display, regardless of whether such specific display
options appear *after* it.
2. If options requesting a specific display appear before the first '-O'
and none specify a PID column, columns listed in the first '-O' are
appended to them (as '-o' would do), but columns passed by further
'-O' options are then inserted next to the columns of the first '-O'
options.
Behavior of point 1 seems to have only one advantage: To allow to
customize the default display by first using '-O' and then other options
appending to it, but as the default display finishes with the COMMAND
column, it is unlikely that one wants to use '-o' or other specific
display options after '-O' (NetBSD's ps(1) does not suppress duplicate
columns). A much simpler and easy-to-understand way to reach that
effect in FreeBSD, if it really proves useful, would be to introduce
a new explicit option that inserts the default display.
The column-appending behavior of the first '-O' option in point 2 can be
also achieved by using '-o' instead. As '-O' is used to insert columns
after the PID one, which is located near the left in the default and all
"canned" displays, we found it more consistent and practical to push its
columns completely to the left on the absence of a PID column. The
effect of multiple '-O' options in NetBSD when no PID column has been
requested beforehand is also cumbersome and inconsistent with the
documentation (it is likely a bug).
Both NetBSD-specific behaviors exposed above also have the disadvantage
that the position of '-O' options with respect to other ones is
meaningful in ways that are not obvious and that are arguably not
desirable as '-O' is meant to append columns after an anchor (the PID
column).
Linux's procps-ng's ps(1) is very limited in its handling of '-O', and
more generally when mixing options tweaking the display. '-O' causes
insertion of the default display (like NetBSD does). If '-o' options
are specified, '-O' must come before them. '-O' is not usable with
canned display options. Additionally, only one '-O' option may appear
on the command line, limiting header customization.
The only case in which these implementations and ours behave in the same
way with respect to '-O' is if only a single '-O' option and no other
options changing the display are specified.
MFC after: 3 days
Relnotes: yes
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D49615 (code)
Differential Revision: https://reviews.freebsd.org/D49616 (manual page)
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Now that removal of non-explicitly-requested duplicate columns work with
a O(n) algorithm, remove the ad-hoc optimization of crushing the canned
displays' formats after first use and constify their format strings.
No functional change intended.
This change could also be useful if/when allowing, e.g., to double
letters of canned displays to indicate their columns should not be
subject to automatic removal of duplicates (e.g., 'ps -ll').
MFC after: 3 days
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D49614
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Before this change, when stacking up more columns in the display through
command-line options, if user requested to add some "canned" display
(through options '-j', '-l', '-u' or '-v'), columns in it that were
"duplicates" of already requested ones (meaning that they share the same
keyword, regardless of whether their headers have been customized) were
in the end omitted.
However, this mechanism did not work the other way around, i.e.,
requesting some canned display(s) first and then adding some columns
that are duplicates (through '-o' or '-O') would not remove them from
the canned display. Additionally, it did not take into account keyword
aliases (which also lead to displaying the same information).
This whole mechanism of removing columns from requested canned displays
when there are duplicates is useful in a number of scenarios:
1. When one wants the columns of a canned display, but with some of them
in a different order and at the edges of the bulk. This needs the
change here to move columns after the bulk (previously, only moving
them before the bulk would work).
2. To combine multiple canned displays to get more information without
repeating common columns. This part has been working before and
this behavior is unchanged.
3. In combination with requesting a canned display and additional
columns after it, ensure that a single COMMAND column appears at the
end of the display (to benefit from the fact that a last COMMAND
column can extend further to the right).
Point 2 above implies that, when multiple canned displays are requested,
we should keep the leftmost column with same keyword. However, columns
requested explicitly by '-o' have priority (as the natural extension of
point 1's behavior before this change), and in this case all matching
columns in canned displays must be suppressed.
To this end, when adding requested options to the display's list, we
stop trying to find an earlier matching column (which is incidentally
a O(n²) algorithm). Instead, we do a first pass over all requested
options once they have all been added to the display's list (in
scan_vars()). For each keyword, we note if it was requested at least
once explicitly (through '-o' or '-O'), in addition to setting
'needuser' and 'needcomm' (as before). Then, a second pass decides
whether to keep each column. A column is removed if it should not be
kept absolutely (i.e., it wasn't specified via '-o' or '-O') and there
is either a matching column that must be kept (determined during the
first pass), or we have seen one already (earlier canned displays take
precedence).
Matching columns are in fact not only those that have same keywords, but
also those that have keywords determined to be aliases to each other.
Some previous commits ensured that this determination is O(1) and in
practice just a few assembly instructions.
find_varentry() has been kept although its last caller has been removed
as next commit will reintroduce a call to it.
MFC after: 3 days
Relnotes: yes
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D49612
Differential Revision: https://reviews.freebsd.org/D49613 (manual page)
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
With this change, an alias keyword is resolved once and for all by
merging specifications of the keyword (or chain of keywords) it points
to. This merge in particular determines the final attributes of the
alias keyword, as well as the final keyword it points to, which uniquely
determines which information is printed (all non-alias keywords are
assumed to display different data).
Also, the alias resolving code has been moved into the resolve_alias()
function and helpers (e.g., merge_alias()). Aliases are still resolved
lazily as needed by default. The new top-level resolve_aliases()
function is used to resolve them at once at program startup if ps(1) has
been compiled with PS_CHECK_KEYWORDS defined. Else, it can also be
called directly from a debugger.
This is in preparation for removing columns that actually display the
same information in a subsequent commit, as this requires being able to
(quickly) determine if they are aliases to each other.
***
The merge process is now explicit and more flexible. Previously, all
fields of the resolved keyword were unconditionally used for the alias
(the pointer to an alias keyword structure was replaced by one to the
aliased keyword's one). Now, field 'final_kw' on the alias keyword will
store a pointer to the aliased keyword structure (and not only its name,
as a subsequent commit will need the structure address). Fields
'header', 'field' and 'flag' are taken from the aliased keyword if they
have default values (NULL or 0), else the alias' values prevail. This
allows an alias to override one or more of these fields. All fields
after 'oproc', because they describe the information to display
consistently with each other, are always taken from the aliased keyword.
merge_alias() checks that the values of these fields in the alias
keyword structure are unspecified (NULL, or some neutral value like
0 and UNSPEC).
While here, parsefmt() was reworked to avoid any direct recursion and
the break-up/recombination steps that were used when processing aliases.
The latter was due to the mutual recursion with findvar() and its
odd-for-that-purpose signature. findvar() has been removed in the
process. Simplification of parsefmt() also allows to be more precise
with the errors reported (in particular, the case of an empty keyword
with a specific header would just be reported as a "keyword not found"
message).
While here, introduce the check_keywords() function, performing sanity
checks on the declared keywords, currently only validating that they are
declared in alphabetical order. As for resolve_aliases(), this function
is called at startup on PS_CHECK_KEYWORDS, else it is available to be
called from a debugger.
Ideally, alias resolution should be done at compile time. In practice,
it seems doing so at runtime was never a problem (there are only a few
aliases compared to all available keywords, and there's currently at
most one level of aliasing). With the changes here, it seems very
unlikely to become one even if many more keywords, aliases or aliasing
levels are added.
MFC after: 3 days
Sponsored by: The FreeBSD Foundation
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This is in preparation for a change in how aliases are resolved, itself
in preparation for being able to quickly identify columns displaying the
same information (same final keyword).
Add the new UNSPEC ("unspecified") type, as the keywords' type field is
only used by the kvar() and rvar() output routines, and has no meaning
for alias keywords. In particular, this will allow to check that no
specific type is associated to any alias. An immediate benefit is that
now most keywords have UNSPEC as their "type", which now makes
kvar()/rvar() explicitly fail (instead of trying to print a character,
as the previous CHAR type was requesting). A developer introducing new
keywords via copy-paste will thus be reminded that it also needs to set
'type' meaningfully if using kvar()/rvar() as the output routine.
Rename field 'alias' of keywords ('VAR' type) into 'aliased'. Move it
just after the keyword's name, as it makes it easier to spot aliases in
the list. Make it a union, as a subsequent commit will... alias it with
a pointer to another 'VAR' structure. Turn aliases' header string (""
for all aliases) into NULL. It is currently not used, but will be when
introducing the new "merge" procedure for aliases (where it will mean:
Use the header of the aliased keyword).
While here, rename vars[] into the more descriptive keywords[].
MFC after: 3 days
Sponsored by: The FreeBSD Foundation
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Building on the previous commit that moved the 'width' field from VAR
(structure representing the meaning of a keyword) to VARENT (structure
representing an actual column in a display), it is now possible to
declare the field 'var' of VARENT as a constant reference.
At this point, it could be possible to constify the var[] array
containing all the recognized keywords. However, we do not do it as
a subsequent commit will change the way alias keywords are resolved,
causing their fields to be modified to reflect the final values to use
after alias resolution.
In parsefmt(), forget about allocating a new VAR for the selected
keyword to be pointed by the corresponding column (VARENT), and instead
just keep a pointer to that structure in var[].
MFC after: 3 days
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D49611
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Some column's width depends not only on the information displayed but
also on the its header, which may have been customized. Consequently,
that width is a property of the actual column and should not be attached
to the keyword specifying which information to print.
This change fixes a bug where multiple columns displaying the same
information (same keyword) but with different headers would have the
same width, although they should not if they have long enough headers
that have different lengths (the width computed from the largest header
would be applied to all the corresponding keyword's columns).
Remove sizevars(), as the 'width' field is now initialized directly in
parsefmt(), which creates the VARENT structures.
While here, remove var[]'s sentinel line, and consequently adjust the
upper limit in showkey()'s loop and findvar()'s binary search.
MFC after: 3 days
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D49610
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The only information that find_varentry() needs and uses is
a keyword/var name. The rest of the fields in the passed VAR are
unused.
Changing its signature will ease introducing new calls to
find_varentry() in subsequent commits, as there no VAR object will exist
to be passed but just a name.
Reviewed by: kib
MFC after: 3 days
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D49609
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This is in preparation for changing the behavior of the '-O' option.
While here, reformat the definition of 'struct varent', fix formatting
of that of 'struct var' and expand slightly their herald comments.
More reformatting/commenting in 'ps.h'.
No functional change intended.
Reviewed by: kib
MFC after: 3 days
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D49607
|
| |
|
|
|
|
|
|
|
| |
Now that it is officially documented in the manual page.
Reviewed by: kib
MFC after: 3 days
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D49606
|
| |
|
|
|
|
|
| |
No functional change (intended).
MFC after: 3 days
Sponsored by: The FreeBSD Foundation
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The preamble has been revamped to give a thorough overview of the
different aspects of the ps(1) command in the following separate
paragraphs:
1. What it outputs.
2. Which processes are listed.
3. Which information is displayed by process.
4. How lines are sorted.
5. Considerations about the (mostly broken) output width.
6. Backwards compatibility features.
Fix or expand the description of several options and some keywords to
match their actual behavior.
Expand the STANDARDS section, noting the options conforming to POSIX and
those that do not (but may be changed to), as well as current diverging
behaviors.
Expand the BUGS section with a thorough description of other known
problems.
While here, document the POSIX-specified '-A' option. We have been
supporting it since 2004 (commit "Support more POSIX/SUSv3 options:",
a4c8a745a85b18d7, r127499) and it has been standard for longer. It
seems now highly unlikely we will ever want to use it for any other
purpose, so just stop trying to hide it.
While here, re-order flags according to mdoc(7)'s prescription. Given
the current state, this also requires less changes than, e.g., putting
all uppercase flags first.
While here, move the detailed specifications of keywords from the
DESCRIPTION to the KEYWORDS section.
While here, fix the formatting of some references to keywords.
MFC after: 3 days
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D49605
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
This skips files that only have a trivial ACL, which is useful for
callers that want to examine files with more unique ACLs.
While we're here, don't issue the file name/ownership header if we're
just going to error out on the file; this adds extra noise for little
gain.
Reviewed by: markj, olce
Sponsored by: Klara, Inc.
Differential Revision: https://reviews.freebsd.org/D40603
|
| |
|
|
|
|
|
|
|
|
| |
Only three of our options have compatible looking long options, w.r.t.
the commonly provided getfacl(1) on Linux systems. Of particular
interest is --omit-header, which is -c on !FreeBSD and -q on FreeBSD.
Reviewed by: imp, markj
Sponsored by: Klara, Inc.
Differential Revision: https://reviews.freebsd.org/D40602
|
| | |
|
| |
|
|
|
|
|
|
| |
A number of tests rely on timeout(1) to kill a pwait instance, and with
--preserve-status the corresponding exit status is propagated to
atf_check. Update the checks to reflect this.
MFC after: 2 weeks
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
If timeout(1) runs with the --foreground option, it becomes the reaper
of the command and its descendants and will wait for all of them to
terminate. This behavior is different from the old FreeBSD version and
GNU version.
For example, if there is a descendant running in the background, like:
$ timeout -s INT 2 sh -c 'sleep 4 & sleep 5'
when timeout(1) sends the SIGINT to all descendants, the child 'sh'
process and the foreground 'sleep 5' process will immediately terminate,
but the background 'sleep 4' will be reparented to the timeout(1)
itself. Because a background process ignores SIGINT and SIGQUIT,
the whole command completes until the background 'sleep 4' finishes.
In comparison, the old FreeBSD version and GNU version will just
terminate itself, letting the background 'sleep 4' process be reparented
to an upper reaper like init.
The POSIX.1-2024 standard doesn't specify the required behavior in such
cases, so I decided to keep the current implementation. Nonetheless,
the updated timeout(1) has changed a lot in order to conform to the
standard.
Obtained-from: DragonFly BSD
|
| |
|
|
|
|
|
| |
atf-check cannot check anymore the exit number if the program is
terminated via a signal, it needs to be catched by -s signal
because we cannot pass twice the -s command, we cannot anymore check
for the exit value :(
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
A shell may not set '$?' to '128 + signal_number' when the process was
terminated by a signal. For example, KornShell 93 sets '$?' to
'256 + signal_number' in such cases. In order to avoid any possible
ambiguity, the POSIX.1-2024 standard requires that timeout mimic the
wait status of the child process by terminating itself with the same
signal, while disabling core generation.
Update the man page accordingly.
Obtained-from: DragonFly BSD
Reference: https://pubs.opengroup.org/onlinepubs/9799919799/utilities/timeout.html
|
| |
|
|
|
|
|
|
|
|
|
|
| |
The POSIX.1-2024 standard requires that timeout(1) utility propagate all
signals except SIGALRM, so timeout(1) needs to catch all signals for
this purpose. In addition, we need to separate those signals whose
default action is to terminate the program, because timeout(1) should
start the second timer for the kill signal if those signals are
received.
Obtained-from: DragonFly BSD
Reference: https://pubs.opengroup.org/onlinepubs/9799919799/utilities/timeout.html
|
| |
|
|
|
|
|
|
|
|
|
| |
POSIX.1-2024 requires that the child process inherit the same signal
dispositions as the timeout(1) utility inherited, except for the signal
to be sent upon timeout.
For example, when timeout(1) is run by nohup(1), the command should be
protected from SIGHUP.
Obtained-from: DragonFly BSD
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This actually fixes the following two issues:
* If a terminating signal (e.g., HUP/INT/TERM) was received, timeout
would propagate it to the command and then ignore it. So it was
unable to resend the same terminating signal to the command. This was
different from the GNU's timeout(1), and also contradicted the
POSIX.1-2024 standard.
* Sending two different terminating signals would break timeout(1)'s
--kill-after mechanism. That was because the second signal would
break the for() loop, so the second SIGALRM set by '--kill-after'
would never be caught.
For example, in one shell run:
$ time timeout -f -v -s INT -k 1 2 sh -T -c \
'trap date INT HUP; sleep 5; echo ok; date'
and in another shell run:
$ pkill -INT timeout; pkill -HUP timeout
in the end, the time(1) would report it cost 5 seconds instead of the
expected 3 seconds.
Obtained-from: DragonFly BSD
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The POSIX.1-2024 says:
"If the subsequent wait status of the child process shows that it was
stopped by a signal, a SIGCONT signal shall also be sent in the same
manner as the first signal; otherwise, a SIGCONT signal may be sent in
the same manner."
As it's allowed by the standard, we just always send the SIGCONT signal
to the child process regardless of its stop state, so that timeout could
terminate a stopped child.
Obtained-from: DragonFly BSD
Reference: https://pubs.opengroup.org/onlinepubs/9799919799/utilities/timeout.html
|
| |
|
|
|
|
|
|
|
|
| |
Enhance send_sig() to better encapsulate the signal sending for
both foreground and non-foreground modes. This also fixes the issue
that the latter mode was missing verbose messages.
In addition, improve the verbose logging for signals.
Obtained-from: DragonFly BSD
|
| |
|
|
|
|
|
|
|
|
| |
POSIX.1-2024 first defined the timeout(1) utility and specified the '-f'
and '-p' options, which are the short versions of '--foreground' and
'--preserve-status' options, respectively. Add the short versions to
comply with the Standard.
Obtained-from: DragonFly BSD
Reference: https://pubs.opengroup.org/onlinepubs/9799919799/utilities/timeout.html
|
| |
|
|
|
|
|
| |
Merge the 'sig_alrm' and 'sig_term' conditionals, and thus reduce some
duplicate code.
Obtained-from: DragonFly BSD
|
| | |
|
| |
|
|
| |
Obtained-from: OpenBSD (via DragonFly BSD)
|
| |
|
|
|
|
|
|
|
| |
* The child should _exit(2) instead of calling exit(3) via err(3) if the
execvp() failed.
* execvp(2) does not return except on error, so there is no need to
check if the return value is -1.
Obtained-from: OpenBSD (via DragonFly BSD)
|