>From 19fad2932e90f80c7534e5528196fdd92e4bf166 Mon Sep 17 00:00:00 2001
From: Simo Sorce <simo@redhat.com>
Date: Fri, 30 Aug 2013 20:11:42 -0400
Subject: [PATCH 10/15] krb5: Remove unused ccache backend infrastructure

Remove struct sss_krb5_cc_be and the remaining functions that reference
it as they are all unused now.

Resolves:
https://fedorahosted.org/sssd/ticket/2061
---
 src/providers/krb5/krb5_auth.c   | 26 -----------------
 src/providers/krb5/krb5_auth.h   |  1 -
 src/providers/krb5/krb5_common.c | 54 ++++++++++--------------------------
 src/providers/krb5/krb5_common.h |  2 --
 src/providers/krb5/krb5_utils.c  | 60 ----------------------------------------
 src/providers/krb5/krb5_utils.h  | 17 ------------
 src/tests/krb5_child-test.c      | 23 ---------------
 7 files changed, 15 insertions(+), 168 deletions(-)

diff --git a/src/providers/krb5/krb5_auth.c b/src/providers/krb5/krb5_auth.c
index d2c53f98c04cda01c2a8e0efe038f5cd5fa82839..1585f709655853827f2778010452a58657add5d0 100644
--- a/src/providers/krb5/krb5_auth.c
+++ b/src/providers/krb5/krb5_auth.c
@@ -324,15 +324,6 @@ static errno_t krb5_auth_prepare_ccache_name(struct krb5child_req *kr,
                 return ENOMEM;
             }
 
-            if (kr->cc_be == NULL) {
-                kr->cc_be = get_cc_be_ops_ccache(kr->ccname);
-            }
-            if (kr->cc_be == NULL) {
-                DEBUG(SSSDBG_CRIT_FAILURE,
-                      ("Cannot get operations on new ccache %s\n", kr->ccname));
-                return EINVAL;
-            }
-
             ret = sss_krb5_precreate_ccache(kr->ccname,
                                             kr->krb5_ctx->illegal_path_re,
                                             kr->uid, kr->gid, private_path);
@@ -340,19 +331,6 @@ static errno_t krb5_auth_prepare_ccache_name(struct krb5child_req *kr,
                 DEBUG(SSSDBG_OP_FAILURE, ("ccache creation failed.\n"));
                 return ret;
             }
-    } else {
-        DEBUG(SSSDBG_MINOR_FAILURE,
-              ("Saved ccache %s if of different type than ccache in "
-               "configuration file, reusing the old ccache\n",
-               kr->old_ccname));
-
-        kr->cc_be = get_cc_be_ops_ccache(kr->old_ccname);
-        if (kr->cc_be == NULL) {
-            DEBUG(SSSDBG_CRIT_FAILURE,
-                  ("Cannot get operations on saved ccache %s\n",
-                   kr->old_ccname));
-            return EINVAL;
-        }
     }
 
     return EOK;
@@ -614,10 +592,6 @@ struct tevent_req *krb5_auth_send(TALLOC_CTX *mem_ctx,
             goto done;
         }
 
-        /* The type of the ccache might change during the request if we
-         * end up reusing an old ccache */
-        kr->cc_be = krb5_ctx->cc_be;
-
         ccache_file = ldb_msg_find_attr_as_string(res->msgs[0],
                                                   SYSDB_CCACHE_FILE,
                                                   NULL);
diff --git a/src/providers/krb5/krb5_auth.h b/src/providers/krb5/krb5_auth.h
index d31925dae6187b3c839e32502fd349e4d64deb32..022dc9b7645f18d01a8a334371e178aa470d92a1 100644
--- a/src/providers/krb5/krb5_auth.h
+++ b/src/providers/krb5/krb5_auth.h
@@ -41,7 +41,6 @@ struct krb5child_req {
     struct pam_data *pd;
     struct krb5_ctx *krb5_ctx;
 
-    struct sss_krb5_cc_be *cc_be;
     const char *ccname;
     const char *old_ccname;
     const char *homedir;
diff --git a/src/providers/krb5/krb5_common.c b/src/providers/krb5/krb5_common.c
index de7ae0a8fe345c38f9458fb9642a5c1b83c906f5..dedb734fc397d3df3eb7717b19c56051fb2243bb 100644
--- a/src/providers/krb5/krb5_common.c
+++ b/src/providers/krb5/krb5_common.c
@@ -167,7 +167,6 @@ errno_t check_and_export_options(struct dp_option *opts,
     const char *dummy;
     char *use_fast_str;
     char *fast_principal;
-    enum sss_krb5_cc_type cc_be;
     char *ccname;
 
     tmp_ctx = talloc_new(NULL);
@@ -291,53 +290,30 @@ errno_t check_and_export_options(struct dp_option *opts,
         }
     }
 
-    cc_be = sss_krb5_get_type(ccname);
-    switch (cc_be) {
-    case SSS_KRB5_TYPE_FILE:
+    if ((ccname[0] == '/') || (strncmp(ccname, "FILE:", 5) == 0)) {
         DEBUG(SSSDBG_CONF_SETTINGS, ("ccache is of type FILE\n"));
         /* warn if the file type (which is usally created in a sticky bit
          * laden directory) does not have randomizing chracters */
         sss_check_cc_template(ccname);
 
-        krb5_ctx->cc_be = &file_cc;
-        if (ccname[0] != '/') {
-            /* FILE:/path/to/cc */
-            break;
-        }
-
-        DEBUG(SSSDBG_CONF_SETTINGS, ("The ccname template was "
+        if (ccname[0] == '/') {
+            /* /path/to/cc  prepend FILE: */
+            DEBUG(SSSDBG_CONF_SETTINGS, ("The ccname template was "
               "missing an explicit type, but is an absolute "
               "path specifier. Assuming FILE:\n"));
 
-        ccname = talloc_asprintf(tmp_ctx, "FILE:%s", ccname);
-        if (!ccname) {
-            ret = ENOMEM;
-            goto done;
+            ccname = talloc_asprintf(tmp_ctx, "FILE:%s", ccname);
+            if (!ccname) {
+                ret = ENOMEM;
+                goto done;
+            }
+
+            ret = dp_opt_set_string(opts, KRB5_CCNAME_TMPL, ccname);
+            if (ret != EOK) {
+                DEBUG(SSSDBG_CRIT_FAILURE, ("dp_opt_set_string failed.\n"));
+                goto done;
+            }
         }
-
-        ret = dp_opt_set_string(opts, KRB5_CCNAME_TMPL, ccname);
-        if (ret != EOK) {
-            DEBUG(SSSDBG_CRIT_FAILURE, ("dp_opt_set_string failed.\n"));
-            goto done;
-        }
-        break;
-
-#ifdef HAVE_KRB5_CC_COLLECTION
-    case SSS_KRB5_TYPE_DIR:
-        DEBUG(SSSDBG_CONF_SETTINGS, ("ccache is of type DIR\n"));
-        krb5_ctx->cc_be = &dir_cc;
-        break;
-
-    case SSS_KRB5_TYPE_KEYRING:
-        DEBUG(SSSDBG_CONF_SETTINGS, ("ccache is of type KEYRING\n"));
-        krb5_ctx->cc_be = &keyring_cc;
-        break;
-#endif /* HAVE_KRB5_CC_COLLECTION */
-
-    default:
-        DEBUG(SSSDBG_OP_FAILURE, ("Unknown ccname database\n"));
-        ret = EINVAL;
-        goto done;
     }
 
     ret = EOK;
diff --git a/src/providers/krb5/krb5_common.h b/src/providers/krb5/krb5_common.h
index e56bd496e04a7a5c8776a34648aabe0f2d73a3b9..eac0d6b1f0c0fec4a107a7b830d8b0c927f4fe42 100644
--- a/src/providers/krb5/krb5_common.h
+++ b/src/providers/krb5/krb5_common.h
@@ -89,7 +89,6 @@ struct krb5_service {
 struct fo_service;
 struct deferred_auth_ctx;
 struct renew_tgt_ctx;
-struct sss_krb5_cc_be;
 
 enum krb5_config_type {
     K5C_GENERIC,
@@ -127,7 +126,6 @@ struct krb5_ctx {
     struct krb5_service *kpasswd_service;
     int child_debug_fd;
 
-    struct sss_krb5_cc_be *cc_be;
     pcre *illegal_path_re;
 
     struct deferred_auth_ctx *deferred_auth_ctx;
diff --git a/src/providers/krb5/krb5_utils.c b/src/providers/krb5/krb5_utils.c
index a806f28a21cdcc7826f917b5fd8d5e4cea0c26fd..ce657d284810a1fbe8516718b01cbed75d452e75 100644
--- a/src/providers/krb5/krb5_utils.c
+++ b/src/providers/krb5/krb5_utils.c
@@ -1054,66 +1054,6 @@ done:
 }
 
 
-/*======== ccache back end utilities ========*/
-struct sss_krb5_cc_be *
-get_cc_be_ops(enum sss_krb5_cc_type type)
-{
-    struct sss_krb5_cc_be *be = NULL;
-
-    switch (type) {
-        case SSS_KRB5_TYPE_FILE:
-            be = &file_cc;
-            break;
-
-#ifdef HAVE_KRB5_CC_COLLECTION
-        case SSS_KRB5_TYPE_DIR:
-            be = &dir_cc;
-            break;
-
-        case SSS_KRB5_TYPE_KEYRING:
-            be = &keyring_cc;
-            break;
-#endif /* HAVE_KRB5_CC_COLLECTION */
-
-        case SSS_KRB5_TYPE_UNKNOWN:
-            be = NULL;
-            break;
-    }
-
-    return be;
-}
-
-struct sss_krb5_cc_be *
-get_cc_be_ops_ccache(const char *ccache)
-{
-    enum sss_krb5_cc_type type;
-
-    type = sss_krb5_get_type(ccache);
-    return get_cc_be_ops(type);
-}
-
-/*======== Operations on the FILE: back end ========*/
-
-struct sss_krb5_cc_be file_cc = {
-    .type               = SSS_KRB5_TYPE_FILE,
-};
-
-#ifdef HAVE_KRB5_CC_COLLECTION
-/*======== Operations on the DIR: back end ========*/
-
-struct sss_krb5_cc_be dir_cc = {
-    .type               = SSS_KRB5_TYPE_DIR,
-};
-
-
-/*======== Operations on the KEYRING: back end ========*/
-
-struct sss_krb5_cc_be keyring_cc = {
-    .type               = SSS_KRB5_TYPE_KEYRING,
-};
-
-#endif /* HAVE_KRB5_CC_COLLECTION */
-
 errno_t get_domain_or_subdomain(TALLOC_CTX *mem_ctx, struct be_ctx *be_ctx,
                                 char *domain_name,
                                 struct sss_domain_info **dom)
diff --git a/src/providers/krb5/krb5_utils.h b/src/providers/krb5/krb5_utils.h
index 5f720335aab1ac6e493843ac197c5af881a9b998..e41309e765b58f7cd2567f1d13fea30d093fd344 100644
--- a/src/providers/krb5/krb5_utils.h
+++ b/src/providers/krb5/krb5_utils.h
@@ -42,19 +42,9 @@ errno_t check_if_cached_upn_needs_update(struct sysdb_ctx *sysdb,
                                          const char *user,
                                          const char *upn);
 
-/* A ccache back end */
-struct sss_krb5_cc_be {
-    enum sss_krb5_cc_type type;
-};
-
-extern struct sss_krb5_cc_be file_cc;
-
 errno_t create_ccache_dir(const char *dirname, pcre *illegal_re,
                           uid_t uid, gid_t gid, bool private_path);
 
-struct sss_krb5_cc_be *get_cc_be_ops(enum sss_krb5_cc_type type);
-struct sss_krb5_cc_be *get_cc_be_ops_ccache(const char *ccache);
-
 char *expand_ccname_template(TALLOC_CTX *mem_ctx, struct krb5child_req *kr,
                              const char *template, bool file_mode,
                              bool case_sensitive, bool *private_path);
@@ -78,13 +68,6 @@ errno_t sss_krb5_cc_verify_ccache(const char *ccname, uid_t uid, gid_t gid,
 errno_t get_ccache_file_data(const char *ccache_file, const char *client_name,
                              struct tgt_times *tgtt);
 
-#ifdef HAVE_KRB5_CC_COLLECTION
-
-extern struct sss_krb5_cc_be dir_cc;
-extern struct sss_krb5_cc_be keyring_cc;
-
-#endif /* HAVE_KRB5_CC_COLLECTION */
-
 
 errno_t get_domain_or_subdomain(TALLOC_CTX *mem_ctx, struct be_ctx *be_ctx,
                                 char *domain_name,
diff --git a/src/tests/krb5_child-test.c b/src/tests/krb5_child-test.c
index 5ea30014f9c8f748e85506627b7f40d72b913b1b..c32ccc318e9826d598bb29a766ed1839fd9bf066 100644
--- a/src/tests/krb5_child-test.c
+++ b/src/tests/krb5_child-test.c
@@ -196,7 +196,6 @@ create_dummy_req(TALLOC_CTX *mem_ctx, const char *user,
                  const char *ccname, const char *ccname_template,
                  int timeout)
 {
-    enum sss_krb5_cc_type cc_be;
     struct krb5child_req *kr;
     struct passwd *pwd;
     bool private = false;
@@ -262,28 +261,6 @@ create_dummy_req(TALLOC_CTX *mem_ctx, const char *user,
     }
     if (!kr->ccname) goto fail;
 
-    cc_be = sss_krb5_get_type(kr->ccname);
-    switch (cc_be) {
-    case SSS_KRB5_TYPE_FILE:
-        kr->krb5_ctx->cc_be = &file_cc;
-        break;
-#ifdef HAVE_KRB5_CC_COLLECTION
-    case SSS_KRB5_TYPE_DIR:
-        kr->krb5_ctx->cc_be = &dir_cc;
-        break;
-#endif /* HAVE_KRB5_CC_COLLECTION */
-    default:
-        if (tmpl[0] != '/') {
-            DEBUG(SSSDBG_OP_FAILURE, ("Unkown ccname database\n"));
-            ret = EINVAL;
-            goto fail;
-        }
-        DEBUG(SSSDBG_CONF_SETTINGS, ("The ccname template was "
-              "missing an explicit type, but looks like an absolute "
-              "path specifier. Assuming FILE:\n"));
-        kr->krb5_ctx->cc_be = &file_cc;
-        break;
-    }
     DEBUG(SSSDBG_FUNC_DATA, ("ccname [%s] uid [%llu] gid [%llu]\n",
             kr->ccname, kr->uid, kr->gid));
 
-- 
1.8.3.1

