/*
* ngIRCd -- The Next Generation IRC Daemon
- * Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors.
+ * Copyright (c)2001-2019 Alexander Barton (alex@barton.de) and Contributors.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
NGIRCd_SignalRestart = false;
NGIRCd_SignalQuit = false;
- /* Initialize modules, part I */
Log_Init(!NGIRCd_NoDaemon);
Random_Init();
Conf_Init();
Log_ReInit();
- /* Initialize the "main program": chroot environment, user and
- * group ID, ... */
+ /* Initialize the "main program":
+ * chroot environment, user and group ID, ... */
if (!NGIRCd_Init(NGIRCd_NoDaemon)) {
Log(LOG_ALERT, "Fatal: Initialization failed, exiting!");
exit(1);
}
- /* Initialize modules, part II: these functions are eventually
- * called with already dropped privileges ... */
- Channel_Init();
- Client_Init();
- Conn_Init();
- Class_Init();
-
if (!io_library_init(CONNECTION_POOL)) {
Log(LOG_ALERT,
"Fatal: Could not initialize IO routines: %s",
exit(1);
}
+ Channel_Init();
+ Conn_Init();
+ Class_Init();
+ Client_Init();
+
/* Create protocol and server identification. The syntax
* used by ngIRCd in PASS commands and the known "extended
* flags" are described in doc/Protocol.txt. */
Show_Version( void )
{
puts( NGIRCd_Version );
- puts( "Copyright (c)2001-2014 Alexander Barton (<alex@barton.de>) and Contributors." );
+ puts( "Copyright (c)2001-2019 Alexander Barton (<alex@barton.de>) and Contributors." );
puts( "Homepage: <http://ngircd.barton.de/>\n" );
puts( "This is free software; see the source for copying conditions. There is NO" );
puts( "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." );
close(pidfd);
return;
}
-
+
if (write(pidfd, pidbuf, (size_t)len) != (ssize_t)len)
Log(LOG_ERR, "Can't write PID file (%s): %s!", Conf_PidFile,
strerror(errno));
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)
goto out;
}
+#ifdef HAVE_SETGROUPS
if (setgroups(0, NULL) != 0) {
real_errno = errno;
Log(LOG_ERR, "Can't drop supplementary group IDs: %s!",
if (real_errno != EPERM)
goto out;
}
+#else
+ Log(LOG_WARNING,
+ "Can't drop supplementary group IDs: setgroups(3) missing!");
+#endif
}
#endif