summaryrefslogtreecommitdiffstats
path: root/src/providers/krb5/krb5_common.c
diff options
context:
space:
mode:
authorSumit Bose <sbose@redhat.com>2010-05-17 13:23:32 +0200
committerStephen Gallagher <sgallagh@redhat.com>2010-05-27 14:44:13 -0400
commiteaf3dcc15e9eb093ecf8b934f6c3a82d01236a92 (patch)
tree173a2ab4dcb91f45c84e0b2ab49bf9dbea4e8da5 /src/providers/krb5/krb5_common.c
parent717bab5b52c755c950eb451d95a805d474d0ef07 (diff)
downloadsssd-eaf3dcc15e9eb093ecf8b934f6c3a82d01236a92.tar.gz
sssd-eaf3dcc15e9eb093ecf8b934f6c3a82d01236a92.tar.xz
sssd-eaf3dcc15e9eb093ecf8b934f6c3a82d01236a92.zip
Refactor krb5 SIGTERM handler installation
Diffstat (limited to 'src/providers/krb5/krb5_common.c')
-rw-r--r--src/providers/krb5/krb5_common.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/providers/krb5/krb5_common.c b/src/providers/krb5/krb5_common.c
index f63f51641..c78f0e60c 100644
--- a/src/providers/krb5/krb5_common.c
+++ b/src/providers/krb5/krb5_common.c
@@ -587,3 +587,36 @@ done:
return ret;
}
+
+errno_t krb5_install_sigterm_handler(struct tevent_context *ev,
+ struct krb5_ctx *krb5_ctx)
+{
+ const char *krb5_realm;
+ char *sig_realm;
+ struct tevent_signal *sige;
+
+ BlockSignals(false, SIGTERM);
+
+ krb5_realm = dp_opt_get_cstring(krb5_ctx->opts, KRB5_REALM);
+ if (krb5_realm == NULL) {
+ DEBUG(1, ("Missing krb5_realm option!\n"));
+ return EINVAL;
+ }
+
+ sig_realm = talloc_strdup(krb5_ctx, krb5_realm);
+ if (sig_realm == NULL) {
+ DEBUG(1, ("talloc_strdup failed!\n"));
+ return ENOMEM;
+ }
+
+ sige = tevent_add_signal(ev, krb5_ctx, SIGTERM, SA_SIGINFO, krb5_finalize,
+ sig_realm);
+ if (sige == NULL) {
+ DEBUG(1, ("tevent_add_signal failed.\n"));
+ talloc_free(sig_realm);
+ return ENOMEM;
+ }
+ talloc_steal(sige, sig_realm);
+
+ return EOK;
+}