* Update version to 1.13.3 * dictd: fix buffer overflow in first/last search strategies Thanks a lot to Matěj Cepl <mcepl@cepl.eu> for the report! * Remove config.{sub,guess} * Update version to 1.13.2 * Rename configure.in to configure.ac * dictP.h: remove #include <sys/time.h> * configure.in: fix obsolete code * Fix compilation issues with gcc-14 * Update configure script and the like (autoconf-2.72)
87 lines
2.6 KiB
Diff
87 lines
2.6 KiB
Diff
---
|
|
dictd.c | 40 ++++++++++++++++++++++++++--------------
|
|
1 file changed, 26 insertions(+), 14 deletions(-)
|
|
|
|
Index: dictd-1.13.3+git.1731775346.2b21553/dictd.c
|
|
===================================================================
|
|
--- dictd-1.13.3+git.1731775346.2b21553.orig/dictd.c 2024-11-16 17:42:26.000000000 +0100
|
|
+++ dictd-1.13.3+git.1731775346.2b21553/dictd.c 2025-03-01 14:27:19.487380130 +0100
|
|
@@ -332,6 +332,7 @@
|
|
}
|
|
}
|
|
|
|
+/*
|
|
static void block_signals (void)
|
|
{
|
|
sigset_t set;
|
|
@@ -353,6 +354,7 @@
|
|
|
|
xsigprocmask (SIG_UNBLOCK, &set, NULL);
|
|
}
|
|
+*/
|
|
|
|
static void handler( int sig )
|
|
{
|
|
@@ -1270,19 +1272,25 @@
|
|
struct passwd *pwd;
|
|
|
|
if ((pwd = getpwnam("dictd"))) {
|
|
- setgid(pwd->pw_gid);
|
|
- initgroups("dictd",pwd->pw_gid);
|
|
- setuid(pwd->pw_uid);
|
|
+ if (setgid(pwd->pw_gid))
|
|
+ err_fatal_errno(NULL, ":E: setgid(%u) failed\n", (unsigned)pwd->pw_gid);
|
|
+ initgroups("dictd",pwd->pw_gid);
|
|
+ if (setuid(pwd->pw_uid))
|
|
+ err_fatal_errno(NULL, ":E: setuid(%u) failed\n", (unsigned)pwd->pw_uid);
|
|
} else if ((pwd = getpwnam("nobody"))) {
|
|
- setgid(pwd->pw_gid);
|
|
- initgroups("nobody",pwd->pw_gid);
|
|
- setuid(pwd->pw_uid);
|
|
+ if (setgid(pwd->pw_gid))
|
|
+ err_fatal_errno(NULL, ":E: setgid(%u) failed\n", (unsigned)pwd->pw_gid);
|
|
+ initgroups("nobody",pwd->pw_gid);
|
|
+ if (setuid(pwd->pw_uid))
|
|
+ err_fatal_errno(NULL, ":E: setuid(%u) failed\n", (unsigned)pwd->pw_uid);
|
|
} else {
|
|
- setgid(GID_NOGROUP);
|
|
- initgroups("nobody", GID_NOGROUP);
|
|
- setuid(UID_NOBODY);
|
|
+ if (setgid(GID_NOGROUP))
|
|
+ err_fatal_errno(NULL, ":E: setgid(%u) failed\n", (unsigned)pwd->pw_gid);
|
|
+ initgroups("nobody", GID_NOGROUP);
|
|
+ if (setuid(UID_NOBODY))
|
|
+ err_fatal_errno(NULL, ":E: setuid(%u) failed\n", (unsigned)pwd->pw_uid);
|
|
}
|
|
- }
|
|
+ }
|
|
}
|
|
|
|
/* Perform sanity checks that are often problems for people trying to
|
|
@@ -1471,9 +1479,12 @@
|
|
close (1);
|
|
close (2);
|
|
|
|
- dup (fd);
|
|
- dup (fd);
|
|
- dup (fd);
|
|
+ if (dup(fd) == -1)
|
|
+ err_fatal_errno(NULL, ":E: dup(2) failed\n");
|
|
+ if (dup(fd) == -1)
|
|
+ err_fatal_errno(NULL, ":E: dup(2) failed\n");
|
|
+ if (dup(fd) == -1)
|
|
+ err_fatal_errno(NULL, ":E: dup(2) failed\n");
|
|
}
|
|
|
|
int main (int argc, char **argv, char **envp)
|
|
@@ -1707,7 +1718,8 @@
|
|
|
|
if (detach){
|
|
/* become a daemon */
|
|
- daemon (0, 1);
|
|
+ if (daemon(0, 1))
|
|
+ err_fatal_errno(NULL, ":E: daemon(3) failed\n");
|
|
reopen_012 ();
|
|
|
|
/* after fork from daemon(3) */
|