]>
git.ipfire.org Git - thirdparty/shadow.git/log
Serge Hallyn [Fri, 5 Dec 2025 05:00:56 +0000 (23:00 -0600)]
Update po and potfiles
I just did a 'make dist', then committed the updates to the po and
shadow.pot files.
Closes #1359
Signed-off-by: Serge Hallyn <serge@hallyn.com>
CC: Chris Hofstaedtler <zeha@debian.org>
Iker Pedrosa [Tue, 25 Nov 2025 08:52:03 +0000 (09:52 +0100)]
useradd: fix uninitialized flags causing aarch64 failure
Initialize option_flags structure to prevent garbage memory values in
`flags.chroot` and `flags.prefix` fields. Uninitialized memory caused
architecture-specific failures where process_selinux evaluation
differed between x86_64 and aarch64, leading to `pw_close()` failures
when SELinux contexts weren't properly managed.
Fixes: c0c9485d (2025-04-25; "src/useradd.c: chroot or prefix SELinux file context")
Link: <https://bodhi.fedoraproject.org/updates/FEDORA-2025-
3d835cfb15 >
Signed-off-by: Iker Pedrosa <ipedrosa@redhat.com>
Alejandro Colomar [Thu, 20 Feb 2025 16:16:13 +0000 (17:16 +0100)]
autogen.sh: CFLAGS: Promote -Wdiscarded-qualifiers to an error
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Wed, 19 Feb 2025 17:52:45 +0000 (18:52 +0100)]
lib/string/strspn/: Add missing const
Closes: <https://github.com/shadow-maint/shadow/issues/1218>
Reported-by: Chris Hofstaedtler <zeha@debian.org>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Mon, 13 Oct 2025 13:36:32 +0000 (15:36 +0200)]
src/usermod.c: $user_newhome: Remove all trailing '/'s
FTR: I'm not entirely sure if an empty string can arrive here. It might
be that the streq() check is dead code, but I'm not sure, so I put it.
It also makes the code more robust.
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Sat, 2 Aug 2025 10:35:41 +0000 (12:35 +0200)]
configure.ac, Makefile.am: Propagate ./configure flags to 'distcheck'
'make distcheck' runs ./configure (among other things). That command
should inherit the flags passed on the command line, as they are the
flags necessary to build in the current system.
This also allows testing different configurations in the same system.
Until now, we only tested the default automagic configuration. With
this change, one can test the same default automagic configuration, by
not passing any flags to ./configure, or they can test more specific
configurations, by passing flags.
This allows removing the hardcoded AM_DISTCHECK_CONFIGURE_FLAGS in the
"Makefile.am".
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Wed, 16 Jul 2025 22:55:23 +0000 (00:55 +0200)]
lib/: Use simple assignment instead of memcpy(3)
memcpy(3) is overkill, and much more dangerous than simple assignment.
Simple assignment adds type safety, and removes any possibility of
buffer overflow due to accidentally specifying a wrong size.
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Sun, 24 Aug 2025 07:48:23 +0000 (09:48 +0200)]
lib/subordinateio.c: append_range(): Use reallocf(3)-like calling conventions
By returning the new pointer, we can simplify the implementation,
and we avoid a return-by-parameter.
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Sun, 24 Aug 2025 07:44:40 +0000 (09:44 +0200)]
lib/subordinateio.c: Use REALLOCF() instead of its pattern
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Fri, 21 Feb 2025 05:25:15 +0000 (06:25 +0100)]
tests/unit/: Unname unused parameters in callbacks
This silences diagnostics about unused parameters.
Tested-by: Silvan Mosberger <github@infinisil.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Tue, 4 Nov 2025 12:39:26 +0000 (13:39 +0100)]
tests/unit/test_xaprintf.c: Use assert_string_equal()
This produces more useful test results.
With assert_true(streq(...)), we only see the line of code that
triggered the failure, while assert_string_equal() shows the contents
of the strings. See the following example:
alx@devuan:~/tmp$ cat cmocka.c
#include <string.h>
#include <stdarg.h>
#include <stddef.h>
#include <setjmp.h>
#include <stdint.h>
#include <cmocka.h>
#define streq(a,b) (!strcmp(a,b))
static void a(void **)
{
const char *s = "foo";
assert_true(streq(s, "bar"));
}
static void b(void **)
{
const char *s = "foo";
assert_string_equal(s, "bar");
}
int
main(void)
{
const struct CMUnitTest tests[] = {
cmocka_unit_test(a),
cmocka_unit_test(b),
};
return cmocka_run_group_tests(tests, NULL, NULL);
}
alx@devuan:~/tmp$ gcc cmocka.c -lcmocka
alx@devuan:~/tmp$ ./a.out
[==========] tests: Running 2 test(s).
[ RUN ] a
[ ERROR ] --- streq(s, "bar")
[ LINE ] --- cmocka.c:15: error: Failure!
[ FAILED ] a
[ RUN ] b
[ ERROR ] --- "foo" != "bar"
[ LINE ] --- cmocka.c:22: error: Failure!
[ FAILED ] b
[==========] tests: 2 test(s) run.
[ PASSED ] 0 test(s).
[ FAILED ] tests: 2 test(s), listed below:
[ FAILED ] a
[ FAILED ] b
2 FAILED TEST(S)
Tested-by: Silvan Mosberger <github@infinisil.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Sun, 21 Jul 2024 16:21:02 +0000 (18:21 +0200)]
lib/, src/: Consistently use NULL with fgets(3)
fgets(3) returns either NULL or the input pointer. Checking for NULL is
more explicit, and simpler.
<stddef.h> is the header that provides NULL; add it where appropriate.
The meat of this patch can be approximated with the following semantic
patch:
$ cat ~/tmp/spatch/fgets_null.sp
@@
expression a, b, c;
@@
- fgets(a, b, c) == a
+ fgets(a, b, c) != NULL
@@
expression a, b, c;
@@
- fgetsx(a, b, c) == a
+ fgetsx(a, b, c) != NULL
@@
expression a, b, c, p;
@@
- p->cio_fgets(a, b, c) == a
+ p->cio_fgets(a, b, c) != NULL
@@
expression a, b, c;
@@
- fgets(a, b, c) != a
+ fgets(a, b, c) == NULL
@@
expression a, b, c;
@@
- fgetsx(a, b, c) != a
+ fgetsx(a, b, c) == NULL
@@
expression a, b, c, p;
@@
- p->cio_fgets(a, b, c) != a
+ p->cio_fgets(a, b, c) == NUL
Applied as
$ find contrib/ lib* src/ -type f \
| xargs spatch --sp-file ~/tmp/spatch/fgets_null.sp --in-place;
The differences between the actual patch and the approximation via the
semantic patch from above are includes, whitespace, braces, and a case
where there was an implicit pointer-to-bool comparison which I made
explicit. When reviewing, it'll be useful to use git-diff(1) with '-w'
and '--color-words=.'.
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Sun, 21 Jul 2024 16:40:25 +0000 (18:40 +0200)]
lib/, src/: Remove useless casts in fgets(3)
This patch can be replicated with the following semantic patch:
$ cat fgets_cast.sp
@@
expression a, b, c;
@@
- fgets(a, (int) (b), c)
+ fgets(a, b, c)
@@
expression a, b, c;
@@
- fgets(a, (int) b, c)
+ fgets(a, b, c)
@@
expression a, b, c;
@@
- fgetsx(a, (int) (b), c)
+ fgetsx(a, b, c)
@@
expression a, b, c;
@@
- fgetsx(a, (int) b, c)
+ fgetsx(a, b, c)
@@
expression a, b, c, p;
@@
- p->cio_fgets(a, (int) (b), c)
+ p->cio_fgets(a, b, c)
@@
expression a, b, c, p;
@@
- p->cio_fgets(a, (int) b, c)
+ p->cio_fgets(a, b, c)
which is applied as:
$ find lib* src/ -type f \
| xargs spatch --sp-file ~/tmp/spatch/fgets_cast.sp --in-place;
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Tue, 23 Jul 2024 20:42:54 +0000 (22:42 +0200)]
lib/, src/: Consistently use sizeof() as if it were a function
sizeof(foo)
- No spaces.
Not: sizeof (foo)
- Parentheses.
Not: sizeof foo
- No parentheses wrapping sizeof itself
Not: (sizeof foo)
This patch can be approximated with the following semantic patch:
$ cat ~/tmp/spatch/sizeof.sp
@@
identifier a, b;
@@
- sizeof a->b
+ sizeof(a->b)
@@
identifier a, b;
@@
- sizeof a.b
+ sizeof(a.b)
@@
identifier x;
@@
- sizeof x
+ sizeof(x)
@@
identifier x;
@@
- sizeof *x
+ sizeof(*x)
@@
identifier x;
@@
- (sizeof(x))
+ sizeof(x)
@@
identifier x;
@@
- (sizeof(*x))
+ sizeof(*x)
Applied as
$ find contrib/ lib* src/ -type f \
| xargs spatch --sp-file ~/tmp/spatch/sizeof.sp --in-place;
The differences between the actual patch and the approximation via the
semantic patch from above are whitespace only. When reviewing, it'll
be useful to diff with '-w'.
Link: <https://lkml.org/lkml/2012/7/11/103>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Iker Pedrosa [Tue, 26 Aug 2025 11:00:52 +0000 (13:00 +0200)]
doc/contributions/coding_style.md: Python code
Document coding style for Python code used in system tests.
Signed-off-by: Iker Pedrosa <ipedrosa@redhat.com>
Iker Pedrosa [Tue, 26 Aug 2025 11:00:11 +0000 (13:00 +0200)]
doc/contributions/ci.md: document system tests
Extend the system tests section.
Signed-off-by: Iker Pedrosa <ipedrosa@redhat.com>
Iker Pedrosa [Tue, 26 Aug 2025 10:35:06 +0000 (12:35 +0200)]
doc/contributions/build_install.md: container troubleshooting
Extend the container section to document the container troubleshooting.
Signed-off-by: Iker Pedrosa <ipedrosa@redhat.com>
Iker Pedrosa [Tue, 26 Aug 2025 08:48:15 +0000 (10:48 +0200)]
doc/contributions/tests.md: add Python system tests
Document the new Python system tests:
- Benefits
- Contribution guidance
- How to setup the testing environment
- Test configuration and execution
- Advanced testing features
- Development patterns
- Debugging information
- Troubleshooting & FAQs
Signed-off-by: Iker Pedrosa <ipedrosa@redhat.com>
Alejandro Colomar [Tue, 25 Nov 2025 21:51:28 +0000 (22:51 +0100)]
lib/string/: strerrno(): Use statement expression to perform lvalue conversion
Compound literals are lvalues. This means it's possible to take their
address. That is, it would be possible (albeit nonsensical) to do
&strerrno();
It is also possible to assign to them (albeit also nonsensical):
strerrno() = NULL;
The statement expression performs lvalue conversion, which turns the
lvalue into an "rvalue", as expected, and disallows all those issues.
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Fri, 31 Oct 2025 10:07:32 +0000 (11:07 +0100)]
lib/string/README: Document *_a() macros
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Fri, 31 Oct 2025 10:05:37 +0000 (11:05 +0100)]
*/: s/STRNEQ/strneq_a/
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Fri, 31 Oct 2025 10:01:53 +0000 (11:01 +0100)]
*/: s/DAY_TO_STR/day_to_str_a/
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Tue, 14 Oct 2025 11:16:31 +0000 (13:16 +0200)]
*/: s/STRSEP2ARR/strsep2arr_a/
This name better reflects that it handles arrays, and doesn't shout.
This case is slightly different, as this macro does a little bit more
than just enforcing arrays. It changes the return value too. However,
that is related-enough to the handling of arrays that I'm inclined to
accept it as a minor inconsistency.
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Tue, 14 Oct 2025 11:05:59 +0000 (13:05 +0200)]
*/: s/STRSEP2LS/strsep2ls_a/
This name better reflects that it handles arrays, and doesn't shout.
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Tue, 14 Oct 2025 11:03:24 +0000 (13:03 +0200)]
*/: s/STRFTIME/strftime_a/
This name better reflects that it handles arrays, and doesn't shout.
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Tue, 14 Oct 2025 11:01:54 +0000 (13:01 +0200)]
*/: s/MEMZERO/memzero_a/
This name better reflects that it handles arrays, and doesn't shout.
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Tue, 14 Oct 2025 10:58:00 +0000 (12:58 +0200)]
*/: s/STRTCPY/strtcpy_a/
This name better reflects that it handles arrays, and doesn't shout.
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Tue, 14 Oct 2025 10:54:04 +0000 (12:54 +0200)]
*/: s/STRNCPY/strncpy_a/
This name better reflects that it handles arrays, and doesn't shout.
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Tue, 14 Oct 2025 10:50:42 +0000 (12:50 +0200)]
*/: s/STRNCAT/strncat_a/
This name better reflects that it handles arrays, and doesn't shout.
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Tue, 14 Oct 2025 10:49:08 +0000 (12:49 +0200)]
*/: s/SNPRINTF/stprintf_a/
This name better reflects that it handles arrays, and doesn't shout.
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Tue, 14 Oct 2025 10:40:46 +0000 (12:40 +0200)]
*/: s/STRNDUP/strndup_a/ s/XSTRNDUP/xstrndup_a/
This name better reflects that it handles arrays, and doesn't shout.
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Tue, 14 Oct 2025 10:37:25 +0000 (12:37 +0200)]
*/: s/STRNDUPA/strndupa_a/
This name better reflects that it handles arrays, and doesn't shout.
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Tue, 14 Oct 2025 10:35:31 +0000 (12:35 +0200)]
*/: s/SIZEOF_ARRAY/sizeof_a/
This name better reflects that it handles arrays, and doesn't shout.
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Tue, 14 Oct 2025 10:32:35 +0000 (12:32 +0200)]
*/: s/READLINKNUL/readlinknul_a/
This name better reflects that it handles arrays, and doesn't shout.
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Thu, 7 Aug 2025 12:39:28 +0000 (14:39 +0200)]
src/: usage(): Use [[noreturn]]
This silences false-positive diagnostics in Clang.
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Thu, 7 Aug 2025 12:35:01 +0000 (14:35 +0200)]
lib/attr.h: ATTR_STRING(): Use it also with Clang
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Thu, 7 Aug 2025 12:34:14 +0000 (14:34 +0200)]
lib/attr.h: ATTR_ALLOC_SIZE(): Use it also with Clang
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Thu, 7 Aug 2025 12:33:40 +0000 (14:33 +0200)]
lib/attr.h: ATTR_ACCESS(): Use it also with Clang
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Thu, 7 Aug 2025 12:32:11 +0000 (14:32 +0200)]
lib/attr.h: format_attr(): Use it also with Clang
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Thu, 7 Aug 2025 12:29:43 +0000 (14:29 +0200)]
lib/attr.h: NORETURN: Implement with [[noreturn]]
This is a C23 standard attribute with the same semantics.
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Thu, 7 Aug 2025 12:28:22 +0000 (14:28 +0200)]
lib/attr.h: MAYBE_UNUSED: Implement with [[maybe_unused]]
This is a C23 standard attribute with the same semantics.
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Fri, 17 Oct 2025 00:02:56 +0000 (02:02 +0200)]
lib/atoi/, */: Move all str2i() macros together with a2i()
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Thu, 16 Oct 2025 23:48:58 +0000 (01:48 +0200)]
lib/atoi/, */: Move all a2i() macros to the same file
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Thu, 16 Oct 2025 23:36:03 +0000 (01:36 +0200)]
lib/atoi/: a2i(): Re-implement with a statement expression
Synopsis
int a2i(typename T, T *restrict n, QChar *s,
QChar **_Nullable restrict endp, int base,
T min, T max);
Description
This macro converts the initial portion of the string pointed to
by 's' to an integer of base 'base', ensure that the number is
in the range [min, max], and store it in *n.
It is similar to NetBSD's strtoi(3) and strtou(3), which
themselves are similar to strtol(3) and strtoul(3).
Arguments
T
The integer type used for the number.
n
A pointer to an integer. The parsed number will be
stored there.
s
See strtol(3).
endp
See strtol(3). A difference with strtol(3) is that this
macro is const-correct. If 's' has type 'const char *',
then 'endp' must have type 'const char **', whereas if
's' has type 'char *', 'endp' must have type 'char **'.
base
See strtol(3).
min
max
See strtoi(3) and strtou(3).
An important difference with NetBSD's strtou(3) is that
a2i() (with an unsigned type T) doesn't intepret any
negative numbers as if they were large positive numbers.
a2i() respects the limits [min, max] as one would
intuitively expect.
Return value
On success, 0 is returned.
On error, -1 is returned and errno is set to indicate the error.
Errors
See strtoi(3) and strtou(3).
Examples
if (a2i(pid_t, &pid, s, &s, 10, 1, _Maxof(pid_t)) == -1)
goto err;
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Sun, 19 Oct 2025 08:10:37 +0000 (10:10 +0200)]
lib/typetraits.h: QChar_of(): Add macro
This macro is useful to implement QChar versions of functions.
See ISO C23 for a description of what QChar is.
Signed-off-by: Alejandro Colomar <alx@kernel.org>
sgakerru [Tue, 11 Nov 2025 20:22:41 +0000 (00:22 +0400)]
useradd: tests for supplements groups
For regular and system user cases
sgakerru [Tue, 11 Nov 2025 20:22:06 +0000 (00:22 +0400)]
useradd: fix test `69_useradd_default_GROUPS_name`
Missing files have been added for the test to work: `gshadow`, `passwd`, `shadow`.
Without them, the foo user was created with a different UID and thus the test failed.
And other minor improvements, such as removing extra spaces and adding empty lines.
sgakerru [Tue, 11 Nov 2025 15:52:11 +0000 (19:52 +0400)]
src/useradd.c: Do not automatically add supplements groups for system users
sgakerru [Tue, 17 Dec 2024 15:18:38 +0000 (19:18 +0400)]
src/useradd.c: Use free_list() to free user groups list
sgakerru [Tue, 17 Dec 2024 15:10:13 +0000 (19:10 +0400)]
lib/list.c: free_list(): Add function
akshay [Mon, 17 Nov 2025 16:04:53 +0000 (21:34 +0530)]
groupadd: clarify -U option help text
Align wording with groupmod to reduce ambiguity in -U option description.
Alejandro Colomar [Tue, 4 Nov 2025 12:37:26 +0000 (13:37 +0100)]
tests/unit/test_exit_if_null.c: Test through XMALLOC() instead of xaprintf()
Both are indirect tests for exit_if_null(), but through XMALLOC() we
can test it more robustly, as we don't need to wrap vasprintf(3) to
make it fail. It's trivial to make MALLOC(3) fail: pass a huge size.
The tests with xaprintf() were failing on Nix. I suspect the compiler
was inlining aggressively, and as a result, the interposition of
vasprintf(3) in cmocka wasn't actually working. The approach with
XMALLOC() seems to work on Nix, as we don't need to interpose malloc(3).
We still need to interpose exit(3), but for some reason that works fine.
Closes: <https://github.com/shadow-maint/shadow/issues/1382>
Reported-by: Silvan Mosberger <github@infinisil.com>
Tested-by: Silvan Mosberger <github@infinisil.com>
Reviewed-by: Iker Pedrosa <ipedrosa@redhat.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Tue, 4 Nov 2025 12:46:01 +0000 (13:46 +0100)]
tests/unit/: Use more generic strings and names for testing exit_if_null()
This test is actually for exit_if_null(), not xaprintf(). Rename the
test file and functions, and make strings more generic.
Tested-by: Silvan Mosberger <github@infinisil.com>
Reviewed-by: Iker Pedrosa <ipedrosa@redhat.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Fri, 21 Feb 2025 05:37:24 +0000 (06:37 +0100)]
lib/, src/: Remove unused parameter $2 of audit_logger()
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Mon, 6 Oct 2025 08:57:34 +0000 (10:57 +0200)]
lib/defines.h: LOG_NOWAIT: Remove unused macro
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Mon, 6 Oct 2025 08:53:19 +0000 (10:53 +0200)]
lib/defines.h: NGROUPS_MAX: Remove unused macro
BTW, it's already defined in <limits.h>, so even if we used it,
we shouldn't define it here.
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Fri, 21 Feb 2025 06:45:33 +0000 (07:45 +0100)]
lib/, src/: Remove unused parameter $3 of passwd_check()
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Fri, 21 Feb 2025 06:39:15 +0000 (07:39 +0100)]
lib/obscure.c: Remove unused parameter $1 of palindrome()
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Fri, 21 Feb 2025 06:36:53 +0000 (07:36 +0100)]
lib/: Remove unused parameter $3 of password_check() and propagate
Propagate the removal of dead code to its callers, which were only
passing the parameter to this function.
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Fri, 21 Feb 2025 05:41:48 +0000 (06:41 +0100)]
lib/copydir.c: Remove unused parameter $2 of copy_hardlink()
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Fri, 21 Feb 2025 05:40:22 +0000 (06:40 +0100)]
lib/copydir.c: Remove unused parameter $3 of copy_symlink()
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Thu, 20 Feb 2025 16:46:23 +0000 (17:46 +0100)]
src/gpasswd.c: Remove unused parameter $1 of check_perms()
Fixes: 53e1eb404541 (2024-07-01; "src/: Remove dead code")
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Thu, 20 Feb 2025 16:37:56 +0000 (17:37 +0100)]
src/useradd.c: Remove unused variable
Fixes: d91b22cc2f6d (2024-07-08; "lib/, src/: Use stpsep() instead of its pattern")
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Tue, 22 Jul 2025 21:18:48 +0000 (23:18 +0200)]
lib/, src/: Use strerrno() instead of its pattern
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Tue, 22 Jul 2025 20:14:08 +0000 (22:14 +0200)]
lib/string/: strerrno(): Add macro
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Wed, 23 Jul 2025 20:50:51 +0000 (22:50 +0200)]
lib/getdef.h: Add missing includes
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Fri, 24 Oct 2025 10:09:55 +0000 (12:09 +0200)]
lib/utmp.c: ttyname_ra(): Add macro
And use it instead of its pattern.
This macro enforces correct use of ttyname_r(3) with arrays.
Reviewed-by: Serge Hallyn <serge@hallyn.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Fri, 24 Oct 2025 09:55:06 +0000 (11:55 +0200)]
lib/utmp.c: is_my_tty(): Use ttyname_r(3) to make it re-entrant
Reviewed-by: Serge Hallyn <serge@hallyn.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Fri, 24 Oct 2025 10:03:41 +0000 (12:03 +0200)]
lib/utmp.c: is_my_tty(): Rename local variable
This name makes the function definition more readable.
Reviewed-by: Serge Hallyn <serge@hallyn.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Fri, 24 Oct 2025 10:22:24 +0000 (12:22 +0200)]
lib/utmp.c: is_my_tty(): Don't cache ttyname(3).
The method for checking for truncation was quite weird. By not caching
ttyname(3), we use it directly, without needing a temporary copy, which
removes opportunities for bugs.
Reviewed-by: Serge Hallyn <serge@hallyn.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Wed, 1 Jan 2025 23:12:51 +0000 (00:12 +0100)]
lib/, src/, tests/: Move x*() definitions to non-x* header files
Now that all of these are one-liners, they don't need a separate header
file. Compact stuff.
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Sat, 7 Jun 2025 17:29:10 +0000 (19:29 +0200)]
lib/string/strtok/: xastrsep2ls() Reimplement in terms of exit_if_null()
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Tue, 27 May 2025 08:48:28 +0000 (10:48 +0200)]
lib/string/strdup/xstrndup.h: Add STRNDUP()
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Wed, 1 Jan 2025 22:24:57 +0000 (23:24 +0100)]
lib/string/strdup/: XSTRNDUP(): Reimplement in terms of exit_if_null()
This is much simpler.
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Sun, 8 Dec 2024 11:21:06 +0000 (12:21 +0100)]
lib/string/sprintf/, tests/: xaprintf(): Reimplement in terms of exit_if_null()
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Sun, 8 Dec 2024 11:09:15 +0000 (12:09 +0100)]
lib/alloc/x/: X*ALLOC(): Reimplement in terms of exit_if_null()
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Sun, 8 Dec 2024 11:04:11 +0000 (12:04 +0100)]
lib/string/strdup/: xstrdup(): Reimplement xstrdup() in terms of exit_if_null()
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Tue, 5 Dec 2023 12:46:23 +0000 (13:46 +0100)]
lib/: exit_if_null(): Add macro to exit(3) on error
Writing an x*() variant function of several functions is unnecessary.
It's simpler to write a generic exit_if_null() macro that can be chained
with any other calls. With such a macro, the x*() variants can be
implemented as one-liner macros that are much easier to read:
For example:
#define xmalloc(size) exit_if_null(malloc(size))
If an error is detected, log an error, and exit(13). About why 13, I
don't really know. It's just what was used previously in xmalloc().
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Sun, 20 Jul 2025 15:02:17 +0000 (17:02 +0200)]
lib/, src/: Use STRNEQ() instead of their pattern
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Sun, 20 Jul 2025 14:51:30 +0000 (16:51 +0200)]
lib/string/strcmp/: strneq(), STRNEQ(): Add APIs
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Sun, 5 Oct 2025 08:09:04 +0000 (10:09 +0200)]
lib/attr.h: ATTR_NONSTRING: Add attribute [[gnu::nonstring]]
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Thu, 7 Aug 2025 12:24:13 +0000 (14:24 +0200)]
lib/attr.h: __has_c_attribute(): Define fallback
This allows using __has_c_attribute() in compilers that don't have it.
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Thu, 4 Jul 2024 16:47:58 +0000 (18:47 +0200)]
lib/, src/: Use strncmp(3) instead of explicit byte comparisons
This is simpler to read, IMO.
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Sat, 9 Aug 2025 18:38:24 +0000 (20:38 +0200)]
lib/commonio.[ch]: struct commonio_ops: Add prefix 'cio_' to structure members
This structure has members that are named like libc APIs.
libc is allowed to provide any functions as macros (7.1.4p1 in C23).
This means that libc is allowed to provide a free(3) macro, which could
look like
#define free(p) __free(p)
And that would be expanded by the preprocessor in our code, turning our
structure members into some code that won't work (or even worse, it
might misbehave).
So, fix this undefined behavior.
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Serge Hallyn [Sat, 18 Oct 2025 16:48:09 +0000 (11:48 -0500)]
Merge pull request #1258 from ikerexxe/useradd-chroot
src/useradd.c: chroot or prefix SELinux file context
Alejandro Colomar [Wed, 15 Oct 2025 16:01:14 +0000 (18:01 +0200)]
src/usermod.c: Remove optimizations
These optimizations checked if the old value is the same as the new
value, and skip such changes. This was unnecessary, and added
complexity to the source code.
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Alejandro Colomar [Wed, 15 Oct 2025 16:01:14 +0000 (18:01 +0200)]
src/usermod.c: Remove 'no changes' informative output
No news is good news.
Debian needs to parse this message to ignore it, or alternatively check
if the call will be a no-op (which we already do) and skip the call.
If we remove this output, we're allowing Debian to remove that
complexity in their wrapper.
We don't expect this output to be very useful for interactive use
either.
Also, this message was changed from stderr to stdout recently, so we
don't need to worry about old scripts that might break due to this
change. If there were scripts relying on that, they would have been
broken already in the previous change.
Closes: <https://github.com/shadow-maint/shadow/issues/1361>
Reported-by: Marc Haber <githubvisible@zugschlus.de>
Cc: <https://github.com/cachius>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Iker Pedrosa [Fri, 4 Jul 2025 08:03:42 +0000 (10:03 +0200)]
man/: update `--root` flag with no SELinux support
Signed-off-by: Iker Pedrosa <ipedrosa@redhat.com>
Iker Pedrosa [Thu, 3 Jul 2025 12:29:55 +0000 (14:29 +0200)]
src/gpasswd.c: chroot or prefix SELinux file context
Do not process SELinux file context during file closure when chroot or
prefix options are selected.
Signed-off-by: Iker Pedrosa <ipedrosa@redhat.com>
Iker Pedrosa [Thu, 3 Jul 2025 11:09:12 +0000 (13:09 +0200)]
src/pwunconv.c: SELinux file context for fail_exit()
Do not process SELinux file context when running fail_exit() when chroot
or prefix options are selected.
Signed-off-by: Iker Pedrosa <ipedrosa@redhat.com>
Iker Pedrosa [Thu, 3 Jul 2025 11:08:10 +0000 (13:08 +0200)]
src/pwunconv.c: chroot or prefix SELinux file context
Do not process SELinux file context during file closure when chroot or
prefix options are selected.
Signed-off-by: Iker Pedrosa <ipedrosa@redhat.com>
Iker Pedrosa [Thu, 3 Jul 2025 11:05:52 +0000 (13:05 +0200)]
src/pwconv.c: SELinux file context for fail_exit()
Do not process SELinux file context when running fail_exit() when chroot
or prefix options are selected.
Signed-off-by: Iker Pedrosa <ipedrosa@redhat.com>
Iker Pedrosa [Thu, 3 Jul 2025 11:04:26 +0000 (13:04 +0200)]
src/pwconv.c: chroot or prefix SELinux file context
Do not process SELinux file context during file closure when chroot or
prefix options are selected.
Signed-off-by: Iker Pedrosa <ipedrosa@redhat.com>
Iker Pedrosa [Thu, 3 Jul 2025 10:58:58 +0000 (12:58 +0200)]
src/pwck.c: SELinux file context for fail_exit()
Do not process SELinux file context when running fail_exit() when chroot
or prefix options are selected.
Signed-off-by: Iker Pedrosa <ipedrosa@redhat.com>
Iker Pedrosa [Thu, 3 Jul 2025 10:55:35 +0000 (12:55 +0200)]
src/pwck.c: chroot or prefix SELinux file context
Do not process SELinux file context during file closure when chroot or
prefix options are selected.
Signed-off-by: Iker Pedrosa <ipedrosa@redhat.com>
Iker Pedrosa [Thu, 3 Jul 2025 10:48:18 +0000 (12:48 +0200)]
src/passwd.c: SELinux file context for fail_exit()
Do not process SELinux file context when running fail_exit() when chroot
or prefix options are selected.
Signed-off-by: Iker Pedrosa <ipedrosa@redhat.com>
Iker Pedrosa [Thu, 3 Jul 2025 10:35:44 +0000 (12:35 +0200)]
src/passwd.c: chroot or prefix SELinux file context
Do not process SELinux file context during file closure when chroot or
prefix options are selected.
Signed-off-by: Iker Pedrosa <ipedrosa@redhat.com>
Iker Pedrosa [Thu, 3 Jul 2025 10:03:30 +0000 (12:03 +0200)]
src/chsh.c: SELinux file context for fail_exit()
Do not process SELinux file context when running fail_exit() when chroot
or prefix options are selected.
Signed-off-by: Iker Pedrosa <ipedrosa@redhat.com>
Iker Pedrosa [Thu, 3 Jul 2025 09:59:32 +0000 (11:59 +0200)]
src/chsh.c: chroot or prefix SELinux file context
Do not process SELinux file context during file closure when chroot or
prefix options are selected.
Signed-off-by: Iker Pedrosa <ipedrosa@redhat.com>
Iker Pedrosa [Thu, 3 Jul 2025 09:56:13 +0000 (11:56 +0200)]
src/chpasswd.c: SELinux file context for fail_exit()
Do not process SELinux file context when running fail_exit() when chroot
or prefix options are selected.
Signed-off-by: Iker Pedrosa <ipedrosa@redhat.com>