From d010a8996cd51fdab1adb00f59c08cb152d233b9 Mon Sep 17 00:00:00 2001 From: Karsten Keil Date: Wed, 21 Mar 2012 15:19:45 +0100 Subject: [PATCH] Set mISDNcapi egid to MISDN_GROUP To allow access to the filesystem socket the effective group is changed to the MISDN_GROUP, which is uucp or dialout usually. Signed-off-by: Karsten Keil --- capi20/Makefile.am | 2 +- capi20/Makefile.in | 2 +- capi20/daemon.c | 16 ++++++++++++++++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/capi20/Makefile.am b/capi20/Makefile.am index 1a6c056..c76eb0f 100644 --- a/capi20/Makefile.am +++ b/capi20/Makefile.am @@ -14,7 +14,7 @@ else _USE_SOFTFAX = endif -AM_CPPFLAGS = -I$(top_srcdir)/include -Werror -Wall $(_USE_SOFTFAX) $(_MEMLEAKDEBUG) +AM_CPPFLAGS = -I$(top_srcdir)/include -Werror -Wall $(_USE_SOFTFAX) $(_MEMLEAKDEBUG) -DMISDN_GROUP=\"$(MISDN_GROUP)\" EXTRA_DIST = capi20.conf.sample diff --git a/capi20/Makefile.in b/capi20/Makefile.in index 1025071..2cb1ad3 100644 --- a/capi20/Makefile.in +++ b/capi20/Makefile.in @@ -204,7 +204,7 @@ mISDNcapid_SOURCES = daemon.c application.c lplci.c mplci.c ncci.c m_capi.h m_ca mISDNcapid_LDADD = ../lib/libmisdn.la -lcapi20 mISDNcapid_LDFLAGS = -shared -AM_CPPFLAGS = -I$(top_srcdir)/include -Werror -Wall $(_USE_SOFTFAX) $(_MEMLEAKDEBUG) +AM_CPPFLAGS = -I$(top_srcdir)/include -Werror -Wall $(_USE_SOFTFAX) $(_MEMLEAKDEBUG) -DMISDN_GROUP=\"$(MISDN_GROUP)\" EXTRA_DIST = capi20.conf.sample CLEANFILES = *~ MISDN_SOCKET_DIR = /var/run/mISDNcapid diff --git a/capi20/daemon.c b/capi20/daemon.c index 1a7de12..f76052e 100644 --- a/capi20/daemon.c +++ b/capi20/daemon.c @@ -23,6 +23,8 @@ #include #include #include +#include +#include #include "m_capi.h" #include "mc_buffer.h" #include "m_capi_sock.h" @@ -1478,6 +1480,7 @@ int main(int argc, char *argv[]) int ret, i, j, nb, c, exitcode = 1, ver, libdebug; struct sockaddr_un mcaddr; struct pController *pc; + struct group *grp; KeepTemporaryFiles = 0; config_file = def_config; @@ -1501,6 +1504,19 @@ int main(int argc, char *argv[]) mISDN_set_debug_level(libdebug); iprint("Init mISDN lib version %x, debug = %x (%x)\n", ver, debugmask, libdebug); + grp = getgrnam(MISDN_GROUP); + if (!grp) { + fprintf(stderr, "Cannot get %s group ID - %s\n", MISDN_GROUP, strerror(errno)); + return 1; + } else { + if (setegid(grp->gr_gid) < 0) { + fprintf(stderr, "Cannot set effective group to %s gid:%d - %s\n", + MISDN_GROUP, (int)grp->gr_gid, strerror(errno)); + return 1; + } + iprint("Did set eGID to %s gid:%d\n", MISDN_GROUP, (int)grp->gr_gid); + } + mc_buffer_init(); snprintf(_TempDirectory, 80, "%s/mISDNd_XXXXXX", MISDND_TEMP_DIR);