[SSSD] [PATCH] Only call krb5_set_trace_callback on platforms that support it

Jakub Hrozek jhrozek at redhat.com
Fri Oct 12 17:51:30 UTC 2012


On Fri, Oct 12, 2012 at 06:50:07PM +0200, Jakub Hrozek wrote:
> Hi,
> 
> the krb5 tracing patch broke SSSD builds on RHEL5 and similar systems
> that don't support the tracing API. Attached is a patch that #ifdefs the
> tracing if the API is not available.

Simo nacked the original patch on IRC. A new patch is attached that
keeps the #ifdefs at one place.
-------------- next part --------------
>From 71a57b9f40f82c8072c980a77c75ed7b93c2adc4 Mon Sep 17 00:00:00 2001
From: Jakub Hrozek <jhrozek at redhat.com>
Date: Fri, 12 Oct 2012 18:19:06 +0200
Subject: [PATCH] Only call krb5_set_trace_callback on platforms that support
 it

---
 src/external/krb5.m4            |  1 +
 src/providers/krb5/krb5_child.c |  2 +-
 src/providers/ldap/ldap_child.c |  2 +-
 src/util/sss_krb5.c             | 17 ++++++++++++++++-
 src/util/sss_krb5.h             |  5 ++---
 5 files changed, 21 insertions(+), 6 deletions(-)

diff --git a/src/external/krb5.m4 b/src/external/krb5.m4
index 474cb37cb44cd75fc606ed54833fe0a57b5acc6b..cb420aaed1b64ec19160c6700c664ec57e1efa8d 100644
--- a/src/external/krb5.m4
+++ b/src/external/krb5.m4
@@ -59,6 +59,7 @@ AC_CHECK_FUNCS([krb5_get_init_creds_opt_alloc krb5_get_error_message \
                 krb5_principal_get_realm \
                 krb5_cc_cache_match \
                 krb5_timestamp_to_sfstring \
+                krb5_set_trace_callback \
                 krb5_cc_get_full_name])
 CFLAGS=$SAVE_CFLAGS
 LIBS=$SAVE_LIBS
diff --git a/src/providers/krb5/krb5_child.c b/src/providers/krb5/krb5_child.c
index cd826add0c34fc798541798bd3e544a317658729..a92ba57bf3219cd6899a6b29e2f2555aae6bb323 100644
--- a/src/providers/krb5/krb5_child.c
+++ b/src/providers/krb5/krb5_child.c
@@ -1625,7 +1625,7 @@ set_child_debugging(krb5_context ctx)
     krb5_error_ctx = ctx;
 
     if (debug_level & SSSDBG_TRACE_ALL) {
-        kerr = krb5_set_trace_callback(ctx, sss_child_krb5_trace_cb, NULL);
+        kerr = sss_child_set_krb5_tracing(ctx);
         if (kerr) {
             KRB5_CHILD_DEBUG(SSSDBG_MINOR_FAILURE, kerr);
             return EIO;
diff --git a/src/providers/ldap/ldap_child.c b/src/providers/ldap/ldap_child.c
index de25fc073a674df02435987d50681b38db79ca20..e0529dbc4cdcc8ef92f6a8a390dace72df225d03 100644
--- a/src/providers/ldap/ldap_child.c
+++ b/src/providers/ldap/ldap_child.c
@@ -150,7 +150,7 @@ set_child_debugging(krb5_context ctx)
     krb5_error_ctx = ctx;
 
     if (debug_level & SSSDBG_TRACE_ALL) {
-        kerr = krb5_set_trace_callback(ctx, sss_child_krb5_trace_cb, NULL);
+        kerr = sss_child_set_krb5_tracing(ctx);
         if (kerr) {
             LDAP_CHILD_DEBUG(SSSDBG_MINOR_FAILURE, kerr);
             return EIO;
diff --git a/src/util/sss_krb5.c b/src/util/sss_krb5.c
index 0a80f23a8017a0aed245ca6a376a3d1fe6c8ca87..c36a13748518b18f47108d87d1dcc6e93125794d 100644
--- a/src/util/sss_krb5.c
+++ b/src/util/sss_krb5.c
@@ -964,7 +964,8 @@ sss_krb5_residual_check_type(const char *full_location,
     return sss_krb5_residual_by_type(full_location, type);
 }
 
-void
+#ifdef HAVE_KRB5_SET_TRACE_CALLBACK
+static void
 sss_child_krb5_trace_cb(krb5_context context,
                         const struct krb5_trace_info *info, void *data)
 {
@@ -975,3 +976,17 @@ sss_child_krb5_trace_cb(krb5_context context,
 
     DEBUG(SSSDBG_TRACE_ALL, ("%s\n", info->message));
 }
+
+errno_t
+sss_child_set_krb5_tracing(krb5_context ctx)
+{
+    return krb5_set_trace_callback(ctx, sss_child_krb5_trace_cb, NULL);
+}
+#else /* HAVE_KRB5_SET_TRACE_CALLBACK */
+errno_t
+sss_child_set_krb5_tracing(krb5_context ctx)
+{
+    DEBUG(SSSDBG_CONF_SETTINGS, ("krb5 tracing is not available\n"));
+    return 0;
+}
+#endif /* HAVE_KRB5_SET_TRACE_CALLBACK */
diff --git a/src/util/sss_krb5.h b/src/util/sss_krb5.h
index 708914c6c532ea9865b59e5eca1d224bc09d622e..c16dab59a59868b27ac5f06ae942f1ddfe227895 100644
--- a/src/util/sss_krb5.h
+++ b/src/util/sss_krb5.h
@@ -167,8 +167,7 @@ typedef krb5_ticket_times sss_krb5_ticket_times;
 typedef krb5_times sss_krb5_ticket_times;
 #endif
 
-void
-sss_child_krb5_trace_cb(krb5_context context,
-                        const struct krb5_trace_info *info, void *data);
+/* Redirect libkrb5 tracing towards our DEBUG statements */
+errno_t sss_child_set_krb5_tracing(krb5_context ctx);
 
 #endif /* __SSS_KRB5_H__ */
-- 
1.7.11.4



More information about the sssd-devel mailing list