]> git.ipfire.org Git - thirdparty/shadow.git/log
thirdparty/shadow.git
21 months agoAdd keys/ directory with public keys for maintainers 825/head
Serge Hallyn [Thu, 26 Oct 2023 21:40:50 +0000 (16:40 -0500)] 
Add keys/ directory with public keys for maintainers

These can be used to verify releases.

Signed-off-by: Serge Hallyn <serge@hallyn.com>
21 months agoman: document --prefix option in chage, chpasswd and passwd
Michael Vetter [Fri, 20 Oct 2023 13:22:35 +0000 (15:22 +0200)] 
man: document --prefix option in chage, chpasswd and passwd

Support for `--prefix` was added in
https://github.com/shadow-maint/shadow/pull/714 and is available since
shadow 4.14.0.

Close https://github.com/shadow-maint/shadow/issues/822

21 months agolibmisc/copydir: do not forget errors from directory copy
Christian Göttsche [Thu, 26 Jan 2023 20:37:30 +0000 (21:37 +0100)] 
libmisc/copydir: do not forget errors from directory copy

    copydir.c:429:4: warning: Value stored to 'err' is never read [deadcode.DeadStores]

Also reduce indentation by bailing out early.

(cherry picked from commit d89f2fb06d1b81b56299f9d0bfe7a927a2282f19)

21 months agoImprove the login.defs unknown item error message
Serge Hallyn [Wed, 4 Oct 2023 15:38:48 +0000 (10:38 -0500)] 
Improve the login.defs unknown item error message

Closes #746

Only print the 'unknown item' message to syslog if we are
actually parsing a login.defs.  Prefix it with "shadow:" to make
it clear in syslog where it came from.

Also add the source filename to the console message.  I'm not
quite clear on the econf API, so not sure whether in that path we
will end up actually having the path, or printing ''.

Signed-off-by: Serge Hallyn <serge@hallyn.com>
21 months agoautogen.sh: Prepare CFLAGS before ./configure
Alejandro Colomar [Sat, 2 Sep 2023 15:31:15 +0000 (17:31 +0200)] 
autogen.sh: Prepare CFLAGS before ./configure

Reviewed-by: Iker Pedrosa <ipedrosa@redhat.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
21 months agolib/: Add missing #include <config.h>
Alejandro Colomar [Fri, 1 Sep 2023 17:03:05 +0000 (19:03 +0200)] 
lib/: Add missing #include <config.h>

Reviewed-by: Iker Pedrosa <ipedrosa@redhat.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
21 months agoautogen.sh: CFLAGS: Add -Werror=implicit-function-declaration
Alejandro Colomar [Fri, 1 Sep 2023 16:57:41 +0000 (18:57 +0200)] 
autogen.sh: CFLAGS: Add -Werror=implicit-function-declaration

This is not just a style issue.  This should be a hard error, and never
compile.  ISO C89 already had this feature as deprecated.  ISO C99
removed this deprecated feature, for good reasons.  If we compile
ignoring this warning, shadow is not going to behave well.

Cc: Sam James <sam@gentoo.org>
Reviewed-by: Iker Pedrosa <ipedrosa@redhat.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
21 months agolib/, src/: Use xasprintf() instead of its pattern
Alejandro Colomar [Sat, 2 Sep 2023 16:29:26 +0000 (18:29 +0200)] 
lib/, src/: Use xasprintf() instead of its pattern

Reviewed-by: Iker Pedrosa <ipedrosa@redhat.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
21 months agolib/, src/: Use asprintf(3) instead of strlen(3)+malloc(3)+snprintf(3)
Alejandro Colomar [Fri, 25 Aug 2023 19:27:05 +0000 (21:27 +0200)] 
lib/, src/: Use asprintf(3) instead of strlen(3)+malloc(3)+snprintf(3)

asprintf(3) is non-standard, but is provided by GNU, the BSDs, and musl.
That makes it portable enough for us to use.

This function is much simpler than the burdensome code for allocating
the right size.  Being simpler, it's thus safer.

I took the opportunity to fix the style to my preferred one in the
definitions of variables used in these calls, and also in the calls to
free(3) with these pointers.  That isn't gratuituous, but has a reason:
it makes those appear in the diff for this patch, which helps review it.
Oh, well, I had an excuse :)

Reviewed-by: Iker Pedrosa <ipedrosa@redhat.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
21 months agolib/copydir.c: Use goto to reduce a conditional branch
Alejandro Colomar [Wed, 4 Oct 2023 16:46:48 +0000 (18:46 +0200)] 
lib/copydir.c: Use goto to reduce a conditional branch

Reviewed-by: Iker Pedrosa <ipedrosa@redhat.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
21 months agotests/unit/test_xasprintf.c: Test x[v]asprintf()
Alejandro Colomar [Fri, 6 Oct 2023 15:44:21 +0000 (17:44 +0200)] 
tests/unit/test_xasprintf.c: Test x[v]asprintf()

Link: <https://github.com/shadow-maint/shadow/pull/816>
Suggested-by: Iker Pedrosa <ipedrosa@redhat.com>
Acked-by: Andreas Schneider <https://github.com/cryptomilk>
Reviewed-by: Iker Pedrosa <ipedrosa@redhat.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
21 months agolib/sprintf.[ch]: Add x[v]asprintf()
Alejandro Colomar [Fri, 25 Aug 2023 23:27:12 +0000 (01:27 +0200)] 
lib/sprintf.[ch]: Add x[v]asprintf()

As other x...() wrappers around functions that allocate, these wrappers
are like [v]asprintf(3), but exit on failure.

Reviewed-by: Iker Pedrosa <ipedrosa@redhat.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
21 months agolib/copydir.c: Invert conditional to reduce nesting
Alejandro Colomar [Fri, 25 Aug 2023 20:23:24 +0000 (22:23 +0200)] 
lib/copydir.c: Invert conditional to reduce nesting

Reviewed-by: Iker Pedrosa <ipedrosa@redhat.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
21 months agoFix badname option to be singular just like useradd.
Dimitri John Ledkov [Fri, 13 Oct 2023 00:44:11 +0000 (01:44 +0100)] 
Fix badname option to be singular just like useradd.

Badnames still accepted, note that previously usage already stated
singular form, whilst manpage and real one was plural only.

Fixes: 45d6746219 ("src: correct "badname" option")
Signed-off-by: Dimitri John Ledkov <dimitri.ledkov@canonical.com>
21 months agoFix mixed-whitespace
Dimitri John Ledkov [Fri, 13 Oct 2023 00:43:00 +0000 (01:43 +0100)] 
Fix mixed-whitespace

Signed-off-by: Dimitri John Ledkov <dimitri.ledkov@canonical.com>
21 months agoRemove TODO
Iker Pedrosa [Tue, 5 Sep 2023 14:13:44 +0000 (16:13 +0200)] 
Remove TODO

Sad to remove this file, but things are going on and it doesn't seem to
be up to date.

Signed-off-by: Iker Pedrosa <ipedrosa@redhat.com>
21 months agoRemove shadow.spec.in
Iker Pedrosa [Tue, 5 Sep 2023 14:11:08 +0000 (16:11 +0200)] 
Remove shadow.spec.in

The file isn't up to date with the latest development, the last change
was made 15 years ago, so I'm removing it.

Signed-off-by: Iker Pedrosa <ipedrosa@redhat.com>
21 months agoRemove .travis.yml
Iker Pedrosa [Mon, 4 Sep 2023 14:44:42 +0000 (16:44 +0200)] 
Remove .travis.yml

It isn't used anywhere so let's remove it.

Signed-off-by: Iker Pedrosa <ipedrosa@redhat.com>
21 months agodoc: remove WISHLIST
Iker Pedrosa [Fri, 1 Sep 2023 14:18:31 +0000 (16:18 +0200)] 
doc: remove WISHLIST

Another file that I remove with sadness. We were unable to complete the
first item but we are working hard on it.

Signed-off-by: Iker Pedrosa <ipedrosa@redhat.com>
21 months agodoc: remove README.platforms
Iker Pedrosa [Fri, 1 Sep 2023 14:11:06 +0000 (16:11 +0200)] 
doc: remove README.platforms

I remove this file with sadness, as it contains data from old times.
Unfortunately, this data is no longer relevant. The source code
management tool will keep it in memory.

Signed-off-by: Iker Pedrosa <ipedrosa@redhat.com>
21 months agodoc: remove cracklib26.diff
Iker Pedrosa [Fri, 1 Sep 2023 14:04:44 +0000 (16:04 +0200)] 
doc: remove cracklib26.diff

Keeping a patch for a file no longer maintained is a bad idea, so I'm
removing it.

Signed-off-by: Iker Pedrosa <ipedrosa@redhat.com>
21 months agodoc: remove console.c.spec.txt
Iker Pedrosa [Fri, 1 Sep 2023 14:01:16 +0000 (16:01 +0200)] 
doc: remove console.c.spec.txt

I guess we are keeping this for historical purposes more than anything
else. If so, anybody can check the git history to recover the
specification.

Signed-off-by: Iker Pedrosa <ipedrosa@redhat.com>
21 months agocontrib: remove udbachk.tgz
Iker Pedrosa [Fri, 1 Sep 2023 13:58:50 +0000 (15:58 +0200)] 
contrib: remove udbachk.tgz

Having source code in a compressed file doesn't seem like a good idea. I
checked several distributions and they don't distribute this binary, so
let's remove it.

Signed-off-by: Iker Pedrosa <ipedrosa@redhat.com>
21 months agocontrib: remove shadow-anonftp.patch
Iker Pedrosa [Fri, 1 Sep 2023 13:47:25 +0000 (15:47 +0200)] 
contrib: remove shadow-anonftp.patch

The patch is never applied upstream. If I were to take a gamble, I would
even say that it throws an error when trying to patch.

Signed-off-by: Iker Pedrosa <ipedrosa@redhat.com>
21 months agocontrib: remove groupmems.shar
Iker Pedrosa [Fri, 1 Sep 2023 13:40:17 +0000 (15:40 +0200)] 
contrib: remove groupmems.shar

Not sure what this file is exactly, but there's already a groupmems.c
that should generate the binary responsible for managing  the members of
a user's primary group.

Signed-off-by: Iker Pedrosa <ipedrosa@redhat.com>
21 months agocontrib: remove atudel
Iker Pedrosa [Thu, 31 Aug 2023 14:30:02 +0000 (16:30 +0200)] 
contrib: remove atudel

AFAIK, it isn't included in any distribution and it isn't used
internally in the project, so let's remove it.

Signed-off-by: Iker Pedrosa <ipedrosa@redhat.com>
21 months agoCI: remove .builds folder
Iker Pedrosa [Thu, 31 Aug 2023 14:20:54 +0000 (16:20 +0200)] 
CI: remove .builds folder

We stopped using the CI relying on this folder and moved to Github's, so
I'm removing these files.

Signed-off-by: Iker Pedrosa <ipedrosa@redhat.com>
22 months agouseradd: Set proper SELinux labels for def_usrtemplate
Johannes Segitz [Tue, 26 Sep 2023 13:14:14 +0000 (15:14 +0200)] 
useradd: Set proper SELinux labels for def_usrtemplate

Fixes: 74c17c716 ("Add support for skeleton files from /usr/etc/skel")
Signed-off-by: Johannes Segitz <jsegitz@suse.com>
22 months agodoc: add unit tests
Iker Pedrosa [Fri, 15 Sep 2023 07:24:41 +0000 (09:24 +0200)] 
doc: add unit tests

Brief description of the unit testing framework and how to create test
cases with it.

Signed-off-by: Iker Pedrosa <ipedrosa@redhat.com>
22 months agoCI: build and run unit tests
Iker Pedrosa [Thu, 14 Sep 2023 12:41:23 +0000 (14:41 +0200)] 
CI: build and run unit tests

Run `make check` after the project is built in every runner.

Signed-off-by: Iker Pedrosa <ipedrosa@redhat.com>
22 months agotests: happy path for active_sessions_count()
Iker Pedrosa [Thu, 14 Sep 2023 10:47:04 +0000 (12:47 +0200)] 
tests: happy path for active_sessions_count()

Simple test to check the recently implemented logind functionality. It
also contains the changes to the build infrastructure, and the
gitignore.

Resolves: https://github.com/shadow-maint/shadow/issues/790

Signed-off-by: Iker Pedrosa <ipedrosa@redhat.com>
22 months agoconfigure: add cmocka for unit tests
Iker Pedrosa [Thu, 14 Sep 2023 10:13:21 +0000 (12:13 +0200)] 
configure: add cmocka for unit tests

Prepare the ground for unit tests.

Signed-off-by: Iker Pedrosa <ipedrosa@redhat.com>
22 months agofaillog: check for overflows
Christian Göttsche [Tue, 28 Feb 2023 16:24:22 +0000 (17:24 +0100)] 
faillog: check for overflows

Check for arithmetic overflows when computing offsets to avoid file
corruptions for huge UIDs.

Refactor the file lookup into a separate function.

22 months agoutmp: call prepare_utmp() even if utent is NULL
Iker Pedrosa [Fri, 15 Sep 2023 07:55:02 +0000 (09:55 +0200)] 
utmp: call prepare_utmp() even if utent is NULL

update_utmp() should also return 0 when success.

Fixes: 1f368e1c1838de9d476a36897d7c53394569de08 ("utmp: update
`update_utmp()")
Resolves: https://github.com/shadow-maint/shadow/issues/805

Signed-off-by: Iker Pedrosa <ipedrosa@redhat.com>
22 months agogroupadd: Improve error message when opening group file fails.
Vasil Velichkov [Fri, 1 Sep 2023 22:29:07 +0000 (01:29 +0300)] 
groupadd: Improve error message when opening group file fails.

Both gr_open and sgr_open are using commonio_open function and when
there is a failure this function sets errno accordingly.

22 months agolib/mempcpy.[ch]: Remove our definition of mempcpy(3)
Alejandro Colomar [Sat, 2 Sep 2023 16:14:19 +0000 (18:14 +0200)] 
lib/mempcpy.[ch]: Remove our definition of mempcpy(3)

It is provided by glibc, musl, and FreeBSD.

Reported-by: Sam James <sam@gentoo.org>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
22 months agolib/pwauth.c: Replace getpass(3) by agetpass()
Alejandro Colomar [Fri, 1 Sep 2023 23:58:05 +0000 (01:58 +0200)] 
lib/pwauth.c: Replace getpass(3) by agetpass()

Closes: <https://github.com/shadow-maint/shadow/issues/797>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
22 months agolib/agetpass.h: Move prototypes to dedicated header
Alejandro Colomar [Sat, 2 Sep 2023 00:17:26 +0000 (02:17 +0200)] 
lib/agetpass.h: Move prototypes to dedicated header

Signed-off-by: Alejandro Colomar <alx@kernel.org>
22 months agolib/pwauth.c: Simplify empty string
Alejandro Colomar [Fri, 1 Sep 2023 23:49:00 +0000 (01:49 +0200)] 
lib/pwauth.c: Simplify empty string

And do not set 'clear' to point to the empty string.  After this commit,
'clear' only stores the result of getpass(3).  This will be useful to
change the code to use agetpass().

$ grep '\<clear\>' lib/pwauth.c;
char *clear = NULL;
clear = getpass (prompt);
input = (clear == NULL) ? "" : clear;
clear = getpass (prompt);
input = (clear == NULL) ? "" : clear;
if (NULL != clear) {
strzero (clear);

Signed-off-by: Alejandro Colomar <alx@kernel.org>
22 months agolib/pwauth.c: Remove dead code
Alejandro Colomar [Fri, 1 Sep 2023 22:58:15 +0000 (00:58 +0200)] 
lib/pwauth.c: Remove dead code

There are no users of 'clear_pass' and 'wipe_clear_pass'.

$ grep -rn '\<clear_pass\>'
lib/pwauth.c:35:/*@null@*/char *clear_pass = NULL;
lib/pwauth.c:199:  * not wipe it (the caller should wipe clear_pass when it is
lib/pwauth.c:203: clear_pass = clear;

$ grep -rn wipe_clear_pass
lib/pwauth.c:34:bool wipe_clear_pass = true;
lib/pwauth.c:198:  * if the external variable wipe_clear_pass is zero, we will
lib/pwauth.c:204: if (wipe_clear_pass && (NULL != clear) && ('\0' != *clear)) {
ChangeLog:3813: * lib/pwauth.c: Use a boolean for wipe_clear_pass and use_skey.

Remove them.

Signed-off-by: Alejandro Colomar <alx@kernel.org>
22 months agolib/pwauth.c: Remove dead code
Alejandro Colomar [Fri, 1 Sep 2023 22:54:16 +0000 (00:54 +0200)] 
lib/pwauth.c: Remove dead code

If the string is "", then strzero() is a no-op.  We don't need to test
that.

Signed-off-by: Alejandro Colomar <alx@kernel.org>
22 months agoautogen.sh: Support out-of-tree builds
Alejandro Colomar [Sat, 2 Sep 2023 12:01:58 +0000 (14:01 +0200)] 
autogen.sh: Support out-of-tree builds

This allows to do the following:

~/src/shadow/shadow/master$ mkdir .tmp/ && cd .tmp/
~/src/shadow/shadow/master/.tmp$ ../autogen.sh

Link: <https://github.com/shadow-maint/shadow/issues/795>
Reviewed-by: Sam James <sam@gentoo.org>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
23 months agozustr2stp.h: Assert some assumptions about the size
Alejandro Colomar [Thu, 31 Aug 2023 13:36:20 +0000 (15:36 +0200)] 
zustr2stp.h: Assert some assumptions about the size

If the destination buffer is an array, we can check our assumptions.
This adds a readable way to explain that dsize must be strictly > ssize.
The reason is that the destination string is the source + '\0'.

If the destination is not an array, it's up to _FORTIFY_SOURCE or
-fanalyzer to catch newly introduced errors.  There's nothing we can do;
at least not portably.

Suggested-by: Serge Hallyn <serge@hallyn.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
23 months agostrlcpy.[ch]: Add strlcpy_()
Alejandro Colomar [Sat, 26 Aug 2023 13:28:24 +0000 (15:28 +0200)] 
strlcpy.[ch]: Add strlcpy_()

This function is like strlcpy(3), but returns -1 on truncation, which
makes it much easier to test.  strlcpy(3) is useful in two cases:

-  We don't care if the output is truncated.  strlcpy(3) is fine for
   those, and the return value can be ignored.

-  Truncation is bad.  In that case, we just want to signal truncation,
   and the length of the original string is quite useless.  Return the
   length iff no truncation so that we can use it if necessary.

This simplifies the definition of the STRLCPY() macro.

Signed-off-by: Alejandro Colomar <alx@kernel.org>
23 months agoUse bzero(3) instead of its pattern
Alejandro Colomar [Tue, 1 Aug 2023 16:27:50 +0000 (18:27 +0200)] 
Use bzero(3) instead of its pattern

It was blessed by POSIX.1-2001, and GCC says that it won't go away,
possibly ever.

memset(3) is dangerous, as the 2nd and 3rd arguments can be accidentally
swapped --who remembers what's the order of the 2nd and 3rd parameters
to memset(3) without checking the manual page or some code that uses
it?--.  Some recent compilers may be able to catch that via some
warnings, but those are not infalible.  And even if compiler warnings
could always catch that, the time lost in fixing or checking the docs is
lost for no clear gain.  Having a sane API that is unambiguous is the
Right Thing (tm); and that API is bzero(3).

If someone doesn't believe memset(3) is error-prone, please read the
book "Unix Network Programming", Volume 1, 3rd Edition by Stevens, et
al., Section 1.2.  See a stackoverflow reference in the link below[1].

bzero(3) had a bad fame in the bad old days, because some ancient
systems (I'm talking of many decades ago) shipped a broken version of
bzero(3).  We can assume that all systems in which current shadow utils
can be built, have a working version of bzero(3) --if not, please fix
your broken system; don't blame the programmer--.

One reason that some use today to avoid bzero(3) in favor of memset(3)
is that memset(3) is more often used; but that's a circular reasoning.
Even if bzero(3) wasn't supported by the system, it would need to be
invented.  It's the right API.

Another reason that some argue is that POSIX.1-2008 removed the
specification of bzero(3).  That's not a problem, because GCC will
probably support it forever, and even if it didn't, we can redefine it
like we do with memzero().  bzero(3) is just a one-liner wrapper around
memset(3).

Link: [1] <https://stackoverflow.com/a/17097978>
Cc: Christian Göttsche <cgzones@googlemail.com>
Cc: Serge Hallyn <serge@hallyn.com>
Cc: Iker Pedrosa <ipedrosa@redhat.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
23 months agoUse CALLOC() instead of its pattern
Alejandro Colomar [Mon, 31 Jul 2023 15:30:59 +0000 (17:30 +0200)] 
Use CALLOC() instead of its pattern

MALLOC() + memset() is simpler written as CALLOC().

Cc: Christian Göttsche <cgzones@googlemail.com>
Cc: Serge Hallyn <serge@hallyn.com>
Cc: Iker Pedrosa <ipedrosa@redhat.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
23 months agoUse STRLCPY() instead of its pattern
Alejandro Colomar [Sat, 29 Jul 2023 16:22:12 +0000 (18:22 +0200)] 
Use STRLCPY() instead of its pattern

This makes it harder to make mistakes while editing the code.  Since the
sizeof's can be autocalculated, let the machine do that.  It also
reduces the cognitive load while reading the code.

Cc: Christian Göttsche <cgzones@googlemail.com>
Cc: Serge Hallyn <serge@hallyn.com>
Cc: Iker Pedrosa <ipedrosa@redhat.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
23 months agodefines.h: Remove definition of STRFCPY()
Alejandro Colomar [Sat, 29 Jul 2023 16:13:06 +0000 (18:13 +0200)] 
defines.h: Remove definition of STRFCPY()

It's not being used anymore.  We got rid of it in favor of better APIs.

Well, it's still being used in one place: a contrib/ patch, but I
explicitly want to break it, so that someone reviews it.  I don't want
to modify it, since it's not being tested, so it would be very risky for
me to touch it.  Instead, let it bitrot, and if someone cares, they'll
update it correctly.

BTW, the comment that said /* danger -side effects */ was wrong:
sizeof() doesn't evaluate the argument (unless it's a VLA), so there
wasn't really a double-evaluation issue.

Cc: Christian Göttsche <cgzones@googlemail.com>
Cc: Serge Hallyn <serge@hallyn.com>
Cc: Iker Pedrosa <ipedrosa@redhat.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
23 months agopasswd: Replace STRFCPY() by STRLCPY()
Alejandro Colomar [Sat, 29 Jul 2023 16:11:02 +0000 (18:11 +0200)] 
passwd: Replace STRFCPY() by STRLCPY()

The variables are only being read as strings (char *), so data after the
'\0' can't be leaked.

Cc: Christian Göttsche <cgzones@googlemail.com>
Cc: Serge Hallyn <serge@hallyn.com>
Cc: Iker Pedrosa <ipedrosa@redhat.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
23 months agogpasswd: Replace STRFCPY() by STRLCPY()
Alejandro Colomar [Sat, 29 Jul 2023 16:04:30 +0000 (18:04 +0200)] 
gpasswd: Replace STRFCPY() by STRLCPY()

The variable is only being read as a string (char *), so data after the
'\0' can't be leaked.

Cc: Christian Göttsche <cgzones@googlemail.com>
Cc: Serge Hallyn <serge@hallyn.com>
Cc: Iker Pedrosa <ipedrosa@redhat.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
23 months agologin: Replace STRFCPY() by STRLCPY()
Alejandro Colomar [Sat, 29 Jul 2023 15:56:46 +0000 (17:56 +0200)] 
login: Replace STRFCPY() by STRLCPY()

The variable is only being read as a string (char *), so data after the
'\0' can't be leaked.

Cc: Christian Göttsche <cgzones@googlemail.com>
Cc: Serge Hallyn <serge@hallyn.com>
Cc: Iker Pedrosa <ipedrosa@redhat.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
23 months agosu: Replace STRFCPY() by STRLCPY()
Alejandro Colomar [Sat, 29 Jul 2023 15:35:40 +0000 (17:35 +0200)] 
su: Replace STRFCPY() by STRLCPY()

The variables are only being read as strings (char *), so data after the
'\0' can't be leaked.

Cc: Christian Göttsche <cgzones@googlemail.com>
Cc: Serge Hallyn <serge@hallyn.com>
Cc: Iker Pedrosa <ipedrosa@redhat.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
23 months agosulogin: Replace STRFCPY() by STRLCPY()
Alejandro Colomar [Sat, 29 Jul 2023 15:28:23 +0000 (17:28 +0200)] 
sulogin: Replace STRFCPY() by STRLCPY()

The variable is only being read as a string (char *), so data after the
'\0' can't be leaked.

Cc: Christian Göttsche <cgzones@googlemail.com>
Cc: Serge Hallyn <serge@hallyn.com>
Cc: Iker Pedrosa <ipedrosa@redhat.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
23 months agochsh: Replace STRFCPY() by STRLCPY()
Alejandro Colomar [Thu, 8 Jun 2023 18:46:09 +0000 (20:46 +0200)] 
chsh: Replace STRFCPY() by STRLCPY()

The variables are only being read as strings (char *), so data after the
'\0' can't be leaked.

Cc: Christian Göttsche <cgzones@googlemail.com>
Cc: Serge Hallyn <serge@hallyn.com>
Cc: Iker Pedrosa <ipedrosa@redhat.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
23 months agochfn: Replace STRFCPY() by STRLCPY()
Alejandro Colomar [Thu, 8 Jun 2023 18:39:04 +0000 (20:39 +0200)] 
chfn: Replace STRFCPY() by STRLCPY()

The variables are only being read as strings (char *), so data after the
'\0' can't be leaked.

Cc: Christian Göttsche <cgzones@googlemail.com>
Cc: Serge Hallyn <serge@hallyn.com>
Cc: Iker Pedrosa <ipedrosa@redhat.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
23 months agochage: Replace STRFCPY() by STRLCPY()
Alejandro Colomar [Thu, 8 Jun 2023 18:33:13 +0000 (20:33 +0200)] 
chage: Replace STRFCPY() by STRLCPY()

The variables are only being read as strings (char *), so data after the
'\0' can't be leaked.

Cc: Christian Göttsche <cgzones@googlemail.com>
Cc: Serge Hallyn <serge@hallyn.com>
Cc: Iker Pedrosa <ipedrosa@redhat.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
23 months agostrlcpy.h: Add STRLCPY() macro
Alejandro Colomar [Sat, 29 Jul 2023 15:21:24 +0000 (17:21 +0200)] 
strlcpy.h: Add STRLCPY() macro

It wraps strlcpy(3bsd) so that it performs some steps that one might
forget, or might be prone to accidents:

-  It calculates the size of the destination buffer, and makes sure it's
   an array (otherwise, using sizeof(dst) would be very bad).

-  It calculates if there's truncation, returning an easy-to-use value.

BTW, this macro doesn't have any issues of double evaluation, because
sizeof() doesn't evaluate its argument (unless it's a VLA, but then
the static_assert(3) within SIZEOF_ARRAY() makes sure VLAs are not
allowed).

Cc: Christian Göttsche <cgzones@googlemail.com>
Cc: Serge Hallyn <serge@hallyn.com>
Cc: Iker Pedrosa <ipedrosa@redhat.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
23 months agoUse ZUSTR2STP() instead of its pattern
Alejandro Colomar [Sun, 30 Jul 2023 16:48:36 +0000 (18:48 +0200)] 
Use ZUSTR2STP() instead of its pattern

Cc: Christian Göttsche <cgzones@googlemail.com>
Cc: Serge Hallyn <serge@hallyn.com>
Cc: Iker Pedrosa <ipedrosa@redhat.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
23 months agozustr2stp.h: Add ZUSTR2STP() macro
Alejandro Colomar [Sun, 30 Jul 2023 16:45:47 +0000 (18:45 +0200)] 
zustr2stp.h: Add ZUSTR2STP() macro

It's a wrapper around zustr2stp() that calls SIZEOF_ARRAY() internally.
The function call is usually --in our code base, always-- called with an
array as the second argument.  For such an argument, one should call
SIZEOF_ARRAY().  To avoid mistakes, and simplify usage, let's add this
macro that does it internally.

BTW, this macro doesn't have any issues of double evaluation, because
sizeof() doesn't evaluate its argument (unless it's a VLA, but then
the static_assert(3) within SIZEOF_ARRAY() makes sure VLAs are not
allowed).

Cc: Christian Göttsche <cgzones@googlemail.com>
Cc: Serge Hallyn <serge@hallyn.com>
Cc: Iker Pedrosa <ipedrosa@redhat.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
23 months agoCall zustr2stp() where appropriate
Alejandro Colomar [Sun, 30 Jul 2023 16:07:35 +0000 (18:07 +0200)] 
Call zustr2stp() where appropriate

These calls were intending to copy from a NUL-padded (possibly
non-NUL-terminated) character sequences contained in fixed-width arrays,
into a string, where extra padding is superfluous.  Use the appropriate
call, which removes the superfluous work.  That reduces the chance of
confusing maintainers about the intention of the code.

While at it, use the appropriate third parameter, which is the size of
the source buffer, and not the one of the destination buffer.  As a side
effect, this reduces the use of '-1', which itself reduces the chance of
off-by-one bugs.

Also, since using sizeof() on an array is dangerous, use SIZEOF_ARRAY().

Cc: Christian Göttsche <cgzones@googlemail.com>
Cc: Serge Hallyn <serge@hallyn.com>
Cc: Iker Pedrosa <ipedrosa@redhat.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
23 months agozustr2stp.[ch]: Add zustr2stp()
Alejandro Colomar [Sun, 30 Jul 2023 15:39:59 +0000 (17:39 +0200)] 
zustr2stp.[ch]: Add zustr2stp()

There's no standard function that copies from a null-padded character
sequence into a string.

A few standard functions can be workarounded to do that:

-  strncat(3):  This function is designed to catenate from a null-padded
   character sequence into a string.  The catch is that there's no
   *cpy() equivalent of it --strncpy(3) is not at all related to
   strncat(3); don't be fooled by the confusing name--, so one would
   need to zero the first byte before the call to strncat(3).  It also
   has the inconvenient that it returns a useless value.

-  strncpy(3):  This function is designed to copy from a string to a
   null-padded character sequence; the opposite of what we want to do.
   If one passes the size of src instead of the size of dst, and then
   manually zeroes the last byte of the dst buffer, something similar
   to what we want happens.  However, this does more than what we want:
   it also padds with NUL the remaining bytes after the terminating NUL.
   That extra work can confuse maintainers to believe that it's
   necessary.  That is exactly what happens in logout.c.

src/logoutd.c-46- /*
src/logoutd.c-47-  * ut_user may not have the terminating NUL.
src/logoutd.c-48-  */
src/logoutd.c:49: strncpy (user, ut->ut_user, sizeof (ut->ut_user));
src/logoutd.c-50- user[sizeof (ut->ut_user)] = '\0';

   In that logout.c case --and in most invocations of strncpy(3), which
   is usually a wrong tool-- the extra work is not wanted, so it's
   preferrable to use the right tool, a function that does exactly
   what's needed and nothing more than that.  That tool is zustr2stp().

Read string_copying(7) for a more complete comparison of string copying
functions.

Cc: Christian Göttsche <cgzones@googlemail.com>
Cc: Serge Hallyn <serge@hallyn.com>
Cc: Iker Pedrosa <ipedrosa@redhat.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
23 months agolibmisc: Fix wrong #include
Alejandro Colomar [Sun, 30 Jul 2023 15:55:20 +0000 (17:55 +0200)] 
libmisc: Fix wrong #include

Cc: Christian Göttsche <cgzones@googlemail.com>
Cc: Serge Hallyn <serge@hallyn.com>
Cc: Iker Pedrosa <ipedrosa@redhat.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
23 months agoUse MEMZERO() instead of its pattern
Alejandro Colomar [Sun, 30 Jul 2023 12:03:07 +0000 (14:03 +0200)] 
Use MEMZERO() instead of its pattern

This patch implicitly adds the safety of SIZEOF_ARRAY(), since the calls
were using sizeof() instead.

Cc: Christian Göttsche <cgzones@googlemail.com>
Cc: Serge Hallyn <serge@hallyn.com>
Cc: Iker Pedrosa <ipedrosa@redhat.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
23 months agomemzero.h: Add MEMZERO() macro
Alejandro Colomar [Sun, 30 Jul 2023 12:32:39 +0000 (14:32 +0200)] 
memzero.h: Add MEMZERO() macro

It calculates the size of the array safely, via SIZEOF_ARRAY(), instead of
sizeof(), which can be dangerous.

Cc: Christian Göttsche <cgzones@googlemail.com>
Cc: Serge Hallyn <serge@hallyn.com>
Cc: Iker Pedrosa <ipedrosa@redhat.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
23 months agosizeof.h: Add SIZEOF_ARRAY() macro
Alejandro Colomar [Sun, 30 Jul 2023 12:29:45 +0000 (14:29 +0200)] 
sizeof.h: Add SIZEOF_ARRAY() macro

This makes it safe to call sizeof() on an array.  Calling sizeof()
directly on an array is dangerous, because if the array changes to be a
pointer, the behavior will unexpectedly change.  It's the same problem
as with NITEMS().

Link: <https://stackoverflow.com/a/57537491>
Cc: Christian Göttsche <cgzones@googlemail.com>
Cc: Serge Hallyn <serge@hallyn.com>
Cc: Iker Pedrosa <ipedrosa@redhat.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
23 months agosizeof.h: Make NITEMS() and derivative macros safe against pointers
Alejandro Colomar [Sun, 30 Jul 2023 12:26:27 +0000 (14:26 +0200)] 
sizeof.h: Make NITEMS() and derivative macros safe against pointers

By using must_be_array(), code that calls NITEMS() or STRLEN() with
non-arrays will not compile.

Link: <https://stackoverflow.com/a/57537491>
Cc: Christian Göttsche <cgzones@googlemail.com>
Cc: Serge Hallyn <serge@hallyn.com>
Cc: Iker Pedrosa <ipedrosa@redhat.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
23 months agomust_be.h: Add must_be_array() macro
Alejandro Colomar [Fri, 4 Aug 2023 17:49:57 +0000 (19:49 +0200)] 
must_be.h: Add must_be_array() macro

This macro statically asserts that the argument is an array.

Link: <https://stackoverflow.com/a/57537491>
Cc: Christian Göttsche <cgzones@googlemail.com>
Cc: Serge Hallyn <serge@hallyn.com>
Cc: Iker Pedrosa <ipedrosa@redhat.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
23 months agomust_be.h: Add must_be() macro
Alejandro Colomar [Sun, 30 Jul 2023 12:12:45 +0000 (14:12 +0200)] 
must_be.h: Add must_be() macro

It's like static_assert(3), but can be used in more places.  It's
necessary for writing a must_be_array() macro.

Link: <https://stackoverflow.com/a/57537491>
Cc: Christian Göttsche <cgzones@googlemail.com>
Cc: Serge Hallyn <serge@hallyn.com>
Cc: Iker Pedrosa <ipedrosa@redhat.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
23 months agosizeof.h: Move sizeof()-related macros to their own header
Alejandro Colomar [Sun, 30 Jul 2023 12:05:10 +0000 (14:05 +0200)] 
sizeof.h: Move sizeof()-related macros to their own header

Cc: Christian Göttsche <cgzones@googlemail.com>
Cc: Serge Hallyn <serge@hallyn.com>
Cc: Iker Pedrosa <ipedrosa@redhat.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
23 months agomemzero.h: Remove no-op assignment
Alejandro Colomar [Mon, 31 Jul 2023 11:20:19 +0000 (13:20 +0200)] 
memzero.h: Remove no-op assignment

memset(3) returns the input pointer.  The assignment was effectively a
no-op, and just confused the code.

Cc: Christian Göttsche <cgzones@googlemail.com>
Cc: Serge Hallyn <serge@hallyn.com>
Cc: Iker Pedrosa <ipedrosa@redhat.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
23 months agomemzero.[ch]: Define memzero() and strzero() as inline functions
Alejandro Colomar [Sun, 30 Jul 2023 11:30:47 +0000 (13:30 +0200)] 
memzero.[ch]: Define memzero() and strzero() as inline functions

There's no need to have these as macros, so use functions, which are a
lot safer: there's no need to worry about multiple evaluation of args,
and there's also more type safety.  Compiler warnings are also simpler,
as they don't dump all the nested macros.

Cc: Christian Göttsche <cgzones@googlemail.com>
Cc: Serge Hallyn <serge@hallyn.com>
Cc: Iker Pedrosa <ipedrosa@redhat.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
23 months agomemzero.h: Remove outdated comments
Alejandro Colomar [Sun, 30 Jul 2023 11:24:43 +0000 (13:24 +0200)] 
memzero.h: Remove outdated comments

These comments were wrong.  Remove them instead of fixing them, since
now that we have this small header file, it's much easier to follow the
preprocessor conditionals.

Cc: Christian Göttsche <cgzones@googlemail.com>
Cc: Serge Hallyn <serge@hallyn.com>
Cc: Iker Pedrosa <ipedrosa@redhat.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
23 months agomemzero.h: Move memzero() and strzero() to their own header
Alejandro Colomar [Sun, 30 Jul 2023 11:18:03 +0000 (13:18 +0200)] 
memzero.h: Move memzero() and strzero() to their own header

Cc: Christian Göttsche <cgzones@googlemail.com>
Cc: Serge Hallyn <serge@hallyn.com>
Cc: Iker Pedrosa <ipedrosa@redhat.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
23 months agolib: Merge libmisc into libshadow
Alejandro Colomar [Mon, 28 Aug 2023 10:54:22 +0000 (12:54 +0200)] 
lib: Merge libmisc into libshadow

The separation was unnecessary, and caused build problems.  Let's go
wild and obliterate the library.  The files are moved to libshadow.

Scripted change:

$ find libmisc/ -type f \
| grep '\.[chy]$' \
| xargs mv -t lib;

Plus updating the Makefile and other references.  While at it, I've
sorted the sources lists.

Link: <https://github.com/shadow-maint/shadow/pull/792>
Reported-by: David Seifert <soap@gentoo.org>
Cc: Sam James <sam@gentoo.org>
Cc: Christian Bricart <christian@bricart.de>
Cc: Michael Vetter <jubalh@iodoru.org>
Cc: Robert Förster <Dessa@gmake.de>
[ soap tested the Gentoo package ]
Tested-by: David Seifert <soap@gentoo.org>
Acked-by: David Seifert <soap@gentoo.org>
Acked-by: Serge Hallyn <serge@hallyn.com>
Acked-by: Iker Pedrosa <ipedrosa@redhat.com>
Acked-by: <lslebodn@fedoraproject.org>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
23 months agolib, libmisc: Move source files to lib (where their headers were)
Alejandro Colomar [Fri, 25 Aug 2023 09:29:00 +0000 (11:29 +0200)] 
lib, libmisc: Move source files to lib (where their headers were)

Scripted change:

$ find lib/ -type f \
| grep '\.h$' \
| sed 's,lib/,libmisc/,' \
| sed 's,\.h$,.c,' \
| xargs find 2>/dev/null \
| xargs mv -t lib/;

Plus updating the Makefiles.

Closes: <https://github.com/shadow-maint/shadow/issues/791>
Closes: <https://bugs.gentoo.org/912446>
Link: <https://github.com/shadow-maint/shadow/issues/763#issuecomment-1664383425>
Link: <https://github.com/shadow-maint/shadow/pull/776>
Link: <https://github.com/shadow-maint/shadow/commit/d0518cc250afeaceb772a7f50a900cfc9b3ab937>
Reported-by: Christian Bricart <christian@bricart.de>
Reported-by: Robert Marmorstein <robert@marmorstein.org>
Cc: Sam James <sam@gentoo.org>
[ jubalh tested the openSUSE package ]
Tested-by: Michael Vetter <jubalh@iodoru.org>
Acked-by: Michael Vetter <jubalh@iodoru.org>
[ Robert F. tested the Gentoo package ]
Tested-by: Robert Förster <Dessa@gmake.de>
Cc: David Seifert <soap@gentoo.org>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
23 months agoAvoid usage of sprintf
Christian Göttsche [Thu, 26 Jan 2023 19:49:41 +0000 (20:49 +0100)] 
Avoid usage of sprintf

sprintf(3) does not take the destination buffer into account. Although
the destination in these case is large enough, sprintf(3) indicates a
code smell.

Use snprintf(3).

23 months agocommonio: check for path truncations
Christian Göttsche [Thu, 26 Jan 2023 19:58:24 +0000 (20:58 +0100)] 
commonio: check for path truncations

Bail out if the paths generated for the backup and replacement database
are truncated.

23 months agolib/btrfs: avoid NULL-dereference
Christian Göttsche [Thu, 26 Jan 2023 20:03:56 +0000 (21:03 +0100)] 
lib/btrfs: avoid NULL-dereference

    btrfs.c:42:13: warning: use of NULL 'cmd' where non-null expected [CWE-476] [-Wanalyzer-null-argument]

Reviewed-by: Alejandro Colomar <alx@kernel.org>
23 months agolib/commonio: drop dead store
Christian Göttsche [Thu, 26 Jan 2023 20:40:47 +0000 (21:40 +0100)] 
lib/commonio: drop dead store

    commonio.c:522:15: warning: Although the value stored to 'cp' is used in the enclosing expression, the value is never actually read from 'cp' [deadcode.DeadStores]

Reviewed-by: Alejandro Colomar <alx@kernel.org>
23 months agologin: use strlcpy to always NUL terminate
Christian Göttsche [Thu, 26 Jan 2023 19:24:09 +0000 (20:24 +0100)] 
login: use strlcpy to always NUL terminate

    login.c:728:25: warning: ‘strncpy’ specified bound 256 equals destination size [-Wstringop-truncation]

Reviewed-by: Alejandro Colomar <alx@kernel.org>
23 months agolib: avoid dropping const qualifier during cast
Christian Göttsche [Tue, 28 Feb 2023 14:41:20 +0000 (15:41 +0100)] 
lib: avoid dropping const qualifier during cast

    subordinateio.c:360:20: warning: cast discards 'const' qualifier from pointer target type [-Wcast-qual]
      360 |         range1 = (*(struct commonio_entry **) p1)->eptr;
          |                    ^
    subordinateio.c:364:20: warning: cast discards 'const' qualifier from pointer target type [-Wcast-qual]
      364 |         range2 = (*(struct commonio_entry **) p2)->eptr;
          |                    ^

    groupio.c:215:15: warning: cast discards 'const' qualifier from pointer target type [-Wcast-qual]
      215 |         if ((*(struct commonio_entry **) p1)->eptr == NULL) {
          |               ^
    groupio.c:218:15: warning: cast discards 'const' qualifier from pointer target type [-Wcast-qual]
      218 |         if ((*(struct commonio_entry **) p2)->eptr == NULL) {
          |               ^
    groupio.c:222:34: warning: cast discards 'const' qualifier from pointer target type [-Wcast-qual]
      222 |         u1 = ((struct group *) (*(struct commonio_entry **) p1)->eptr)->gr_gid;
          |                                  ^
    groupio.c:223:34: warning: cast discards 'const' qualifier from pointer target type [-Wcast-qual]
      223 |         u2 = ((struct group *) (*(struct commonio_entry **) p2)->eptr)->gr_gid;
          |                                  ^

    pwio.c:187:15: warning: cast discards 'const' qualifier from pointer target type [-Wcast-qual]
      187 |         if ((*(struct commonio_entry **) p1)->eptr == NULL)
          |               ^
    pwio.c:189:15: warning: cast discards 'const' qualifier from pointer target type [-Wcast-qual]
      189 |         if ((*(struct commonio_entry **) p2)->eptr == NULL)
          |               ^
    pwio.c:192:35: warning: cast discards 'const' qualifier from pointer target type [-Wcast-qual]
      192 |         u1 = ((struct passwd *) (*(struct commonio_entry **) p1)->eptr)->pw_uid;
          |                                   ^
    pwio.c:193:35: warning: cast discards 'const' qualifier from pointer target type [-Wcast-qual]
      193 |         u2 = ((struct passwd *) (*(struct commonio_entry **) p2)->eptr)->pw_uid;
          |                                   ^

Reviewed-by: Alejandro Colomar <alx@kernel.org>
23 months agoDrop unnecessary cast to same type
Christian Göttsche [Thu, 26 Jan 2023 21:55:12 +0000 (22:55 +0100)] 
Drop unnecessary cast to same type

23 months agoDeclare usage and failure handler noreturn
Christian Göttsche [Thu, 26 Jan 2023 21:08:43 +0000 (22:08 +0100)] 
Declare usage and failure handler noreturn

Assist static analyzers in understanding final code paths.

23 months agolib/tcbfuncs: operate on file descriptor rather than path
Christian Göttsche [Tue, 28 Feb 2023 15:05:09 +0000 (16:05 +0100)] 
lib/tcbfuncs: operate on file descriptor rather than path

23 months agolibmisc/write_full.c: Improve write_full()
Alejandro Colomar [Fri, 4 Aug 2023 23:04:04 +0000 (01:04 +0200)] 
libmisc/write_full.c: Improve write_full()

Documentation:

-  Correct the comment documenting the function:

   write_full() doesn't write "up to" count bytes (which is write(2)'s
   behavior, and exactly what this function is designed to avoid), but
   rather exactly count bytes (on success).

-  While fixing the documentation, take the time to add a man-page-like
   comment as in other APIs.  Especially, since we'll have to document
   a few other changes from this patch, such as the modified return
   values.

-  Partial writes are still possible on error.  It's the caller's
   responsibility to handle that possibility.

API:

-  In write(2), it's useful to know how many bytes were transferred,
   since it can have short writes.  In this API, since it either writes
   it all or fails, that value is useless, and callers only want to know
   if it succeeded or not.  Thus, just return 0 or -1.

Implementation:

-  Use `== -1` instead of `< 0` to check for write(2) syscall errors.
   This is wisdom from Michael Kerrisk.  This convention is useful
   because it more explicitly tells maintainers that the only value
   which can lead to that path is -1.  Otherwise, a maintainer of the
   code might be confused to think that other negative values are
   possible.  Keep it simple.

-  The path under `if (res == 0)` was unreachable, since the loop
   condition `while (count > 0)` precludes that possibility.  Remove the
   dead code.

-  Use a temporary variable of type `const char *` to avoid a cast.

-  Rename `res`, which just holds the result from write(2), to `w`,
   which more clearly shows that it's just a very-short-lived variable
   (by it's one-letter name), and also relates itself more to write(2).
   I find it more readable.

-  Move the definition of `w` to the top of the function.  Now that the
   function is significantly shorter, the lifetime of the variable is
   clearer, and I find it more readable this way.

Use:

-  Also use `== -1` to check errors.

Cc: Christian Göttsche <cgzones@googlemail.com>
Cc: Serge Hallyn <serge@hallyn.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
23 months agoReplace __{BEGIN,END}_DECLS with #ifdef __cplusplus
Heiko Becker [Fri, 18 Aug 2023 16:23:56 +0000 (18:23 +0200)] 
Replace __{BEGIN,END}_DECLS with #ifdef __cplusplus

Fixes the build with musl libc.

23 months agorelease 4.14.0 4.14.0
Serge Hallyn [Wed, 16 Aug 2023 02:38:30 +0000 (21:38 -0500)] 
release 4.14.0

Signed-off-by: Serge Hallyn <serge@hallyn.com>
23 months agopre-release 4.14.0-rc5 4.14.0-rc5
Serge Hallyn [Mon, 14 Aug 2023 16:51:36 +0000 (11:51 -0500)] 
pre-release 4.14.0-rc5

Signed-off-by: Serge Hallyn <serge@hallyn.com>
23 months agoconfigure.ac: check for strlcpy
Serge Hallyn [Mon, 14 Aug 2023 13:27:30 +0000 (08:27 -0500)] 
configure.ac: check for strlcpy

Signed-off-by: Serge Hallyn <serge@hallyn.com>
23 months agoRemove intree website
Michael Vetter [Mon, 14 Aug 2023 06:57:40 +0000 (08:57 +0200)] 
Remove intree website

AFAIK these files were not used in a while.
On 2023-04-27 we also archived the GitHub pages based repo:
https://github.com/shadow-maint/shadow-www

In https://github.com/shadow-maint/shadow/commit/1654f42194ba7804c99d5ac96346a1a19fb793d7 we mention the regular repo URL as our home page.

Also see:
https://github.com/shadow-maint/shadow/issues/114

23 months ago4.14.0-rc4 pre-release 4.14.0-rc4
Serge Hallyn [Sun, 13 Aug 2023 04:17:52 +0000 (23:17 -0500)] 
4.14.0-rc4 pre-release

Signed-off-by: Serge Hallyn <serge@hallyn.com>
23 months agoReleases: add etc/shadow-maint to distfiles
Serge Hallyn [Fri, 11 Aug 2023 17:47:41 +0000 (12:47 -0500)] 
Releases: add etc/shadow-maint to distfiles

Closes #784

Signed-off-by: Serge Hallyn <serge@hallyn.com>
23 months ago4.14.0-rc3 4.14.0-rc3
Serge Hallyn [Thu, 10 Aug 2023 14:33:07 +0000 (09:33 -0500)] 
4.14.0-rc3

Signed-off-by: Serge Hallyn <serge@hallyn.com>
23 months agolibmisc: include freezero
Iker Pedrosa [Thu, 10 Aug 2023 07:46:38 +0000 (09:46 +0200)] 
libmisc: include freezero

Signed-off-by: Iker Pedrosa <ipedrosa@redhat.com>
23 months agolibmisc: add freezero source code
Iker Pedrosa [Thu, 10 Aug 2023 07:45:32 +0000 (09:45 +0200)] 
libmisc: add freezero source code

If shadow is built without libbsd support, then freezero() needs to be
provided from the project.

Signed-off-by: Iker Pedrosa <ipedrosa@redhat.com>
23 months agolibmisc: add readpassphrase source code
Iker Pedrosa [Tue, 8 Aug 2023 14:01:41 +0000 (16:01 +0200)] 
libmisc: add readpassphrase source code

If shadow is built without libbsd support, then readpassphrase() needs
to be provided from the project.

Signed-off-by: Iker Pedrosa <ipedrosa@redhat.com>
23 months agoconfigure: add `with-libbsd` option
Iker Pedrosa [Thu, 10 Aug 2023 07:15:04 +0000 (09:15 +0200)] 
configure: add `with-libbsd` option

It enables the build with libbsd support. By default it is enabled.

Resolves: https://github.com/shadow-maint/shadow/issues/779

Signed-off-by: Iker Pedrosa <ipedrosa@redhat.com>
23 months agoman: include `shadow-man.xsl` in tarball
Iker Pedrosa [Tue, 8 Aug 2023 10:52:21 +0000 (12:52 +0200)] 
man: include `shadow-man.xsl` in tarball

This will help generate man pages from tarball.

Signed-off-by: Iker Pedrosa <ipedrosa@redhat.com>
23 months agoman: include `its.rules` in tarball
Iker Pedrosa [Tue, 8 Aug 2023 10:50:27 +0000 (12:50 +0200)] 
man: include `its.rules` in tarball

This will help generate the man pages from tarball.

Resolves: https://github.com/shadow-maint/shadow/issues/781

Signed-off-by: Iker Pedrosa <ipedrosa@redhat.com>
23 months agoautogen: enable lastlog build
Iker Pedrosa [Mon, 7 Aug 2023 08:12:04 +0000 (10:12 +0200)] 
autogen: enable lastlog build

Add "--enable-lastlog" to include lastlog man pages in tarball.

Signed-off-by: Iker Pedrosa <ipedrosa@redhat.com>