[SSSD] [PATCH] Create kdcinfo and kpasswdinfo file at startup

Sumit Bose sbose at redhat.com
Fri May 7 13:34:39 UTC 2010


Hi,

this patch should solve #470 by calling be_resolve_server_send() during
startup.

bye,
Sumit
-------------- next part --------------
From 0a61519bcb149b81d932c6f188d8c67be257d658 Mon Sep 17 00:00:00 2001
From: Sumit Bose <sbose at redhat.com>
Date: Fri, 7 May 2010 15:28:21 +0200
Subject: [PATCH] Create kdcinfo and kpasswdinfo file at startup

---
 src/providers/ipa/ipa_common.c   |    9 +++++++++
 src/providers/krb5/krb5_common.c |   25 ++++++++++++++++++++++++-
 src/providers/krb5/krb5_common.h |    2 ++
 3 files changed, 35 insertions(+), 1 deletions(-)

diff --git a/src/providers/ipa/ipa_common.c b/src/providers/ipa/ipa_common.c
index 3a79eb4..25a3d1c 100644
--- a/src/providers/ipa/ipa_common.c
+++ b/src/providers/ipa/ipa_common.c
@@ -485,6 +485,7 @@ int ipa_service_init(TALLOC_CTX *memctx, struct be_ctx *ctx,
     char *realm;
     int ret;
     int i;
+    struct tevent_req *req;
 
     tmp_ctx = talloc_new(memctx);
     if (!tmp_ctx) {
@@ -579,6 +580,14 @@ int ipa_service_init(TALLOC_CTX *memctx, struct be_ctx *ctx,
         goto done;
     }
 
+    req = be_resolve_server_send(memctx, ctx->ev, ctx, "IPA");
+    if (req == NULL) {
+        DEBUG(1, ("be_resolve_server_send failed.\n"));
+        ret = ENOMEM;
+        goto done;
+    }
+    tevent_req_set_callback(req, krb5_init_resolve_done, ctx);
+
     ret = EOK;
 
 done:
diff --git a/src/providers/krb5/krb5_common.c b/src/providers/krb5/krb5_common.c
index 9a2255f..4689481 100644
--- a/src/providers/krb5/krb5_common.c
+++ b/src/providers/krb5/krb5_common.c
@@ -288,7 +288,6 @@ static void krb5_resolve_callback(void *private_data, struct fo_server *server)
     return;
 }
 
-
 int krb5_service_init(TALLOC_CTX *memctx, struct be_ctx *ctx,
                       const char *service_name, const char *servers,
                       const char *realm, struct krb5_service **_service)
@@ -303,6 +302,7 @@ int krb5_service_init(TALLOC_CTX *memctx, struct be_ctx *ctx,
     char *server_spec;
     char *endptr;
     struct servent *servent;
+    struct tevent_req *req;
 
     tmp_ctx = talloc_new(memctx);
     if (!tmp_ctx) {
@@ -425,6 +425,14 @@ int krb5_service_init(TALLOC_CTX *memctx, struct be_ctx *ctx,
         goto done;
     }
 
+    req = be_resolve_server_send(memctx, ctx->ev, ctx, service_name);
+    if (req == NULL) {
+        DEBUG(1, ("be_resolve_server_send failed.\n"));
+        ret = ENOMEM;
+        goto done;
+    }
+    tevent_req_set_callback(req, krb5_init_resolve_done, ctx);
+
     ret = EOK;
 
 done:
@@ -435,3 +443,18 @@ done:
     return ret;
 }
 
+void krb5_init_resolve_done(struct tevent_req *req)
+{
+    int ret;
+    struct fo_server *srv;
+
+    ret = be_resolve_server_recv(req, &srv);
+    talloc_zfree(req);
+    if (ret) {
+        DEBUG(1, ("be_resolve_server request failed [%d][%s].\n", ret,
+                  strerror(ret)));
+    }
+
+    return;
+}
+
diff --git a/src/providers/krb5/krb5_common.h b/src/providers/krb5/krb5_common.h
index 46d7a61..aa585b3 100644
--- a/src/providers/krb5/krb5_common.h
+++ b/src/providers/krb5/krb5_common.h
@@ -76,4 +76,6 @@ errno_t write_krb5info_file(const char *realm, const char *kdc,
 int krb5_service_init(TALLOC_CTX *memctx, struct be_ctx *ctx,
                       const char *service_name, const char *servers,
                       const char *realm, struct krb5_service **_service);
+
+void krb5_init_resolve_done(struct tevent_req *req);
 #endif /* __KRB5_COMMON_H__ */
-- 
1.6.6.1



More information about the sssd-devel mailing list