From 0509696bfda3241b3573749ea57bfee583f67a21 Mon Sep 17 00:00:00 2001 From: HanzZ Date: Sun, 9 Oct 2011 22:01:02 +0200 Subject: [PATCH] refresh coredump limit after setuid --- spectrum/src/main.cpp | 47 +++++++++++++++++++++++------------------ spectrum/src/sample.cfg | 4 ++-- src/mysqlbackend.cpp | 4 ++-- 3 files changed, 31 insertions(+), 24 deletions(-) diff --git a/spectrum/src/main.cpp b/spectrum/src/main.cpp index bc1b4213..409a4f18 100644 --- a/spectrum/src/main.cpp +++ b/spectrum/src/main.cpp @@ -15,6 +15,7 @@ #include "sys/signal.h" #include #include +#include #else #include #include @@ -230,30 +231,36 @@ int main(int argc, char **argv) } #ifndef WIN32 - if (!CONFIG_STRING(&config, "service.group").empty()) { - struct group *gr; - if ((gr = getgrnam(CONFIG_STRING(&config, "service.group").c_str())) == NULL) { - LOG4CXX_ERROR(logger, "Invalid service.group name " << CONFIG_STRING(&config, "service.group")); - return 1; + if (!CONFIG_STRING(&config, "service.group").empty() ||!CONFIG_STRING(&config, "service.user").empty() ) { + struct rlimit limit; + getrlimit(RLIMIT_CORE, &limit); + + if (!CONFIG_STRING(&config, "service.group").empty()) { + struct group *gr; + if ((gr = getgrnam(CONFIG_STRING(&config, "service.group").c_str())) == NULL) { + LOG4CXX_ERROR(logger, "Invalid service.group name " << CONFIG_STRING(&config, "service.group")); + return 1; + } + + if (((setgid(gr->gr_gid)) != 0) || (initgroups(CONFIG_STRING(&config, "service.user").c_str(), gr->gr_gid) != 0)) { + LOG4CXX_ERROR(logger, "Failed to set service.group name " << CONFIG_STRING(&config, "service.group") << " - " << gr->gr_gid << ":" << strerror(errno)); + return 1; + } } - if (((setgid(gr->gr_gid)) != 0) || (initgroups(CONFIG_STRING(&config, "service.user").c_str(), gr->gr_gid) != 0)) { - LOG4CXX_ERROR(logger, "Failed to set service.group name " << CONFIG_STRING(&config, "service.group") << " - " << gr->gr_gid << ":" << strerror(errno)); - return 1; - } - } + if (!CONFIG_STRING(&config, "service.user").empty()) { + struct passwd *pw; + if ((pw = getpwnam(CONFIG_STRING(&config, "service.user").c_str())) == NULL) { + LOG4CXX_ERROR(logger, "Invalid service.user name " << CONFIG_STRING(&config, "service.user")); + return 1; + } - if (!CONFIG_STRING(&config, "service.user").empty()) { - struct passwd *pw; - if ((pw = getpwnam(CONFIG_STRING(&config, "service.user").c_str())) == NULL) { - LOG4CXX_ERROR(logger, "Invalid service.user name " << CONFIG_STRING(&config, "service.user")); - return 1; - } - - if ((setuid(pw->pw_uid)) != 0) { - LOG4CXX_ERROR(logger, "Failed to set service.user name " << CONFIG_STRING(&config, "service.user") << " - " << pw->pw_uid << ":" << strerror(errno)); - return 1; + if ((setuid(pw->pw_uid)) != 0) { + LOG4CXX_ERROR(logger, "Failed to set service.user name " << CONFIG_STRING(&config, "service.user") << " - " << pw->pw_uid << ":" << strerror(errno)); + return 1; + } } + setrlimit(RLIMIT_CORE, &limit); } #endif diff --git a/spectrum/src/sample.cfg b/spectrum/src/sample.cfg index a23a46a7..6efc9561 100644 --- a/spectrum/src/sample.cfg +++ b/spectrum/src/sample.cfg @@ -11,8 +11,8 @@ admin_password=test #cert=server.pfx #patch to PKCS#12 certificate #cert_password=test #password to that certificate if any users_per_backend=10 -#backend=/home/hanzz/code/libtransport/backends/libpurple/spectrum2_libpurple_backend -backend=/usr/bin/mono /home/hanzz/code/networkplugin-csharp/msnp-sharp-backend/bin/Debug/msnp-sharp-backend.exe +backend=/home/hanzz/code/libtransport/backends/libpurple/spectrum2_libpurple_backend +#backend=/usr/bin/mono /home/hanzz/code/networkplugin-csharp/msnp-sharp-backend/bin/Debug/msnp-sharp-backend.exe #backend=/home/hanzz/code/libtransport/backends/frotz/spectrum2_frotz_backend #backend=../../backends/libircclient-qt/spectrum2_libircclient-qt_backend #protocol=prpl-msn diff --git a/src/mysqlbackend.cpp b/src/mysqlbackend.cpp index 3945cac9..8a6dcc73 100644 --- a/src/mysqlbackend.cpp +++ b/src/mysqlbackend.cpp @@ -206,8 +206,8 @@ template MySQLBackend::Statement& MySQLBackend::Statement::operator << (const T& t) { if (m_offset >= m_params.size()) return *this; - int *data = (int *) m_params[m_offset].buffer; - *data = (int) t; + T *data = (T *) m_params[m_offset].buffer; + *data = (T) t; // LOG4CXX_INFO(logger, "adding " << m_offset << ":" << (int) t); m_offset++;