Removed obsolete daemon kill

This commit is contained in:
Martin Willi
2010-02-26 11:44:34 +01:00
parent d6a27ec64e
commit 40706b6027
2 changed files with 29 additions and 54 deletions
+29 -47
View File
@@ -65,11 +65,6 @@ struct private_daemon_t {
*/ */
sigset_t signal_set; sigset_t signal_set;
/**
* Reference to main thread.
*/
thread_t *main_thread;
#ifdef CAPABILITIES #ifdef CAPABILITIES
/** /**
* capabilities to keep * capabilities to keep
@@ -219,39 +214,10 @@ static void destroy(private_daemon_t *this)
free(this); free(this);
} }
/**
* Enforce daemon shutdown, with a given reason to do so.
*/
static void kill_daemon(private_daemon_t *this, char *reason)
{
/* we send SIGTERM, so the daemon can cleanly shut down */
if (this->public.bus)
{
DBG1(DBG_DMN, "killing daemon: %s", reason);
}
else
{
fprintf(stderr, "killing daemon: %s\n", reason);
}
if (this->main_thread == thread_current())
{
/* initialization failed, terminate daemon */
unlink(PID_FILE);
exit(-1);
}
else
{
DBG1(DBG_DMN, "sending SIGTERM to ourself");
this->main_thread->kill(this->main_thread, SIGTERM);
/* thread must die, since he produced a ciritcal failure and can't continue */
thread_exit(NULL);
}
}
/** /**
* drop daemon capabilities * drop daemon capabilities
*/ */
static void drop_capabilities(private_daemon_t *this) static bool drop_capabilities(private_daemon_t *this)
{ {
#ifdef HAVE_PRCTL #ifdef HAVE_PRCTL
prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0); prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0);
@@ -259,19 +225,23 @@ static void drop_capabilities(private_daemon_t *this)
if (setgid(charon->gid) != 0) if (setgid(charon->gid) != 0)
{ {
kill_daemon(this, "change to unprivileged group failed"); DBG1(DBG_DMN, "change to unprivileged group failed");
return FALSE;
} }
if (setuid(charon->uid) != 0) if (setuid(charon->uid) != 0)
{ {
kill_daemon(this, "change to unprivileged user failed"); DBG1(DBG_DMN, "change to unprivileged user failed");
return FALSE;
} }
#ifdef CAPABILITIES #ifdef CAPABILITIES
if (cap_set_proc(this->caps) != 0) if (cap_set_proc(this->caps) != 0)
{ {
kill_daemon(this, "unable to drop daemon capabilities"); DBG1(DBG_DMN, "unable to drop daemon capabilities");
return FALSE;
} }
#endif /* CAPABILITIES */ #endif /* CAPABILITIES */
return TRUE;
} }
/** /**
@@ -289,7 +259,7 @@ static void keep_cap(private_daemon_t *this, u_int cap)
/** /**
* lookup UID and GID * lookup UID and GID
*/ */
static void lookup_uid_gid(private_daemon_t *this) static bool lookup_uid_gid(private_daemon_t *this)
{ {
#ifdef IPSEC_USER #ifdef IPSEC_USER
{ {
@@ -299,7 +269,8 @@ static void lookup_uid_gid(private_daemon_t *this)
if (getpwnam_r(IPSEC_USER, &passwd, buf, sizeof(buf), &pwp) != 0 || if (getpwnam_r(IPSEC_USER, &passwd, buf, sizeof(buf), &pwp) != 0 ||
pwp == NULL) pwp == NULL)
{ {
kill_daemon(this, "resolving user '"IPSEC_USER"' failed"); DBG1(DBG_DMN, "resolving user '"IPSEC_USER"' failed");
return FALSE;
} }
charon->uid = pwp->pw_uid; charon->uid = pwp->pw_uid;
} }
@@ -312,11 +283,13 @@ static void lookup_uid_gid(private_daemon_t *this)
if (getgrnam_r(IPSEC_GROUP, &group, buf, sizeof(buf), &grp) != 0 || if (getgrnam_r(IPSEC_GROUP, &group, buf, sizeof(buf), &grp) != 0 ||
grp == NULL) grp == NULL)
{ {
kill_daemon(this, "resolving group '"IPSEC_GROUP"' failed"); DBG1(DBG_DMN, "resolving group '"IPSEC_GROUP"' failed");
return FALSE;
} }
charon->gid = grp->gr_gid; charon->gid = grp->gr_gid;
} }
#endif #endif
return TRUE;
} }
/** /**
@@ -555,7 +528,6 @@ private_daemon_t *daemon_create(void)
private_daemon_t *this = malloc_thing(private_daemon_t); private_daemon_t *this = malloc_thing(private_daemon_t);
/* assign methods */ /* assign methods */
this->public.kill = (void (*) (daemon_t*,char*))kill_daemon;
this->public.keep_cap = (void(*)(daemon_t*, u_int cap))keep_cap; this->public.keep_cap = (void(*)(daemon_t*, u_int cap))keep_cap;
/* NULL members for clean destruction */ /* NULL members for clean destruction */
@@ -582,7 +554,6 @@ private_daemon_t *daemon_create(void)
this->public.uid = 0; this->public.uid = 0;
this->public.gid = 0; this->public.gid = 0;
this->main_thread = thread_current();
#ifdef CAPABILITIES #ifdef CAPABILITIES
this->caps = cap_init(); this->caps = cap_init();
keep_cap(this, CAP_NET_ADMIN); keep_cap(this, CAP_NET_ADMIN);
@@ -714,8 +685,6 @@ int main(int argc, char *argv[])
private_charon = daemon_create(); private_charon = daemon_create();
charon = (daemon_t*)private_charon; charon = (daemon_t*)private_charon;
lookup_uid_gid(private_charon);
/* use CTRL loglevel for default */ /* use CTRL loglevel for default */
for (group = 0; group < DBG_MAX; group++) for (group = 0; group < DBG_MAX; group++)
{ {
@@ -768,6 +737,14 @@ int main(int argc, char *argv[])
break; break;
} }
if (!lookup_uid_gid(private_charon))
{
DBG1(DBG_DMN, "invalid uid/gid - aborting charon");
destroy(private_charon);
library_deinit();
exit(SS_RC_INITIALIZATION_FAILED);
}
/* initialize daemon */ /* initialize daemon */
if (!initialize(private_charon, use_syslog, levels)) if (!initialize(private_charon, use_syslog, levels))
{ {
@@ -785,8 +762,13 @@ int main(int argc, char *argv[])
exit(-1); exit(-1);
} }
/* drop the capabilities we won't need */ if (!drop_capabilities(private_charon))
drop_capabilities(private_charon); {
DBG1(DBG_DMN, "capability dropping failed - aborting charon");
destroy(private_charon);
library_deinit();
exit(SS_RC_INITIALIZATION_FAILED);
}
/* start the engine, go multithreaded */ /* start the engine, go multithreaded */
charon->processor->set_threads(charon->processor, charon->processor->set_threads(charon->processor,
-7
View File
@@ -309,13 +309,6 @@ struct daemon_t {
* drop these. * drop these.
*/ */
void (*keep_cap)(daemon_t *this, u_int cap); void (*keep_cap)(daemon_t *this, u_int cap);
/**
* Shut down the daemon.
*
* @param reason describtion why it will be killed
*/
void (*kill) (daemon_t *this, char *reason);
}; };
/** /**