]> arthur.barton.de Git - ngircd-alex.git/commitdiff
Don't abort startup when setgid/setuid() fails with EINVAL master
authorAlexander Barton <alex@barton.de>
Sat, 13 Apr 2024 17:43:54 +0000 (19:43 +0200)
committerAlexander Barton <alex@barton.de>
Sat, 13 Apr 2024 18:48:54 +0000 (20:48 +0200)
Both setgid(2) as well as setuid(2) can fail with EINVAL in addition to
EPERM, their manual pages state "EINVAL: The user/group ID specified in
uid/gid is not valid in this user namespace ".

So not only treat EPERM as an "acceptable error" and continue with
logging the error, but do the same for EINVAL.

This was triggered by the Void Linux xbps-uunshare(1) tool used for
building "XBPS source packages" and reported by luca in #ngircd. Thanks!

src/ngircd/ngircd.c

index b06103929e44e33e6dc28eb7d8dd68519bdc8ffb..c2169c4377af04b1f2c11884903ed5b26341a56a 100644 (file)
@@ -722,7 +722,7 @@ NGIRCd_Init(bool NGIRCd_NoDaemon)
                        Log(LOG_ERR, "Can't change group ID to %s(%u): %s!",
                            grp ? grp->gr_name : "?", Conf_GID,
                            strerror(real_errno));
-                       if (real_errno != EPERM)
+                       if (real_errno != EPERM && real_errno != EINVAL)
                                goto out;
                }
 #ifdef HAVE_SETGROUPS
@@ -748,7 +748,7 @@ NGIRCd_Init(bool NGIRCd_NoDaemon)
                        Log(LOG_ERR, "Can't change user ID to %s(%u): %s!",
                            pwd ? pwd->pw_name : "?", Conf_UID,
                            strerror(real_errno));
-                       if (real_errno != EPERM)
+                       if (real_errno != EPERM && real_errno != EINVAL)
                                goto out;
                }
        }