refresh coredump limit after setuid
This commit is contained in:
parent
0fc58189d7
commit
0509696bfd
3 changed files with 31 additions and 24 deletions
|
@ -15,6 +15,7 @@
|
|||
#include "sys/signal.h"
|
||||
#include <pwd.h>
|
||||
#include <grp.h>
|
||||
#include <sys/resource.h>
|
||||
#else
|
||||
#include <Windows.h>
|
||||
#include <tchar.h>
|
||||
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -206,8 +206,8 @@ template <typename T>
|
|||
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++;
|
||||
|
|
Loading…
Add table
Reference in a new issue