Allow starting by root (set user context to _ircd-hybrid in that case).

reviewed by simon@ and ajacoutot@
ok bernd@
This commit is contained in:
form 2009-02-09 15:14:22 +00:00
parent aa99206c3d
commit faeca641e3
5 changed files with 62 additions and 8 deletions

View File

@ -1,10 +1,10 @@
# $OpenBSD: Makefile,v 1.3 2009/02/07 09:58:42 simon Exp $
# $OpenBSD: Makefile,v 1.4 2009/02/09 15:14:22 form Exp $
SHARED_ONLY = Yes
COMMENT = Internet Relay Chat server
DISTNAME = ircd-hybrid-7.2.3
PKGNAME = ${DISTNAME}p1
PKGNAME = ${DISTNAME}p2
CATEGORIES = net
HOMEPAGE = http://ircd-hybrid.com/

View File

@ -1,7 +1,15 @@
$OpenBSD: patch-include_defaults_h,v 1.1.1.1 2009/01/28 23:35:07 bernd Exp $
--- include/defaults.h.orig Wed Feb 28 05:17:43 2007
+++ include/defaults.h Tue Jan 27 21:23:01 2009
@@ -50,11 +50,11 @@
$OpenBSD: patch-include_defaults_h,v 1.2 2009/02/09 15:14:22 form Exp $
--- include/defaults.h.orig Wed Feb 28 10:17:43 2007
+++ include/defaults.h Sun Feb 8 14:28:26 2009
@@ -47,14 +47,19 @@
* AUTOMODPATH = directory for autoloaded modules
*/
+/* users */
+#ifndef IRCD_USER
+#define IRCD_USER "_ircd-hybrid"
+#endif
+
/* dirs */
#define DPATH IRCD_PREFIX
#define BINPATH IRCD_PREFIX "/bin/"
@ -18,7 +26,7 @@ $OpenBSD: patch-include_defaults_h,v 1.1.1.1 2009/01/28 23:35:07 bernd Exp $
/* files */
#define SPATH BINPATH "/ircd" /* ircd executable */
@@ -70,7 +70,7 @@
@@ -70,7 +75,7 @@
#define RKPATH ETCPATH "/rkline.conf"
#define MPATH ETCPATH "/ircd.motd" /* MOTD file */
#define LPATH LOGPATH "/ircd.log" /* ircd logfile */

View File

@ -0,0 +1,12 @@
$OpenBSD: patch-include_stdinc_h,v 1.1 2009/02/09 15:14:22 form Exp $
--- include/stdinc.h.orig Wed Feb 28 10:17:43 2007
+++ include/stdinc.h Sun Feb 8 14:33:40 2009
@@ -94,6 +94,8 @@
#include <stdarg.h>
#include <signal.h>
#include <ctype.h>
+#include <login_cap.h>
+#include <pwd.h>
#ifdef _WIN32
#define PATH_MAX (MAX_PATH - 1)

View File

@ -0,0 +1,33 @@
$OpenBSD: patch-src_ircd_c,v 1.1 2009/02/09 15:14:22 form Exp $
--- src/ircd.c.orig Wed Feb 28 10:17:46 2007
+++ src/ircd.c Sun Feb 8 14:30:08 2009
@@ -168,7 +168,6 @@ make_daemon(void)
}
else if (pid > 0)
{
- print_startup(pid);
exit(EXIT_SUCCESS);
}
@@ -544,8 +543,19 @@ main(int argc, char *argv[])
#ifndef _WIN32
if (geteuid() == 0)
{
- fprintf(stderr, "Don't run ircd as root!!!\n");
- return(-1);
+ struct passwd *pw;
+
+ if ((pw = getpwnam(IRCD_USER)) == NULL)
+ {
+ fprintf(stderr, "Don't run ircd as root!!!\n");
+ return(-1);
+ }
+
+ if (setusercontext(NULL, pw, pw->pw_uid, LOGIN_SETALL) < 0)
+ {
+ fprintf(stderr, "Can's set user context to %s!\n", IRCD_USER);
+ return (-1);
+ }
}
/* Setup corefile size immediately after boot -kre */

View File

@ -2,6 +2,7 @@ To start ircd-hybrid at boot time, edit ${SYSCONFDIR}/ircd-hybrid/ircd.conf
as required and insert the following into /etc/rc.local.
if [ -x ${TRUEPREFIX}/bin/ircd ]; then
echo -n ' ircd'
install -d -o _ircd-hybrid /var/run/ircd
sudo -u _ircd-hybrid ${TRUEPREFIX}/bin/ircd >/dev/null
${TRUEPREFIX}/bin/ircd
fi