From 0d836cd6ee9d7b29808cbf36582eed71a5b6a32a Mon Sep 17 00:00:00 2001 From: Rob Crittenden Date: Thu, 6 Dec 2012 15:52:05 -0500 Subject: Reorder XML-RPC initialization in ipa-join to avoid segfault. There were a number of code paths where we would try to call xmlrpc_env_clean() without having first called xmlrpc_env_init() Re-order the code so we always initialize the XML-RPC client first. I also noticed a place where the return value of strdup() was not being checked for NULL. https://fedorahosted.org/freeipa/ticket/3275 --- ipa-client/ipa-join.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) (limited to 'ipa-client/ipa-join.c') diff --git a/ipa-client/ipa-join.c b/ipa-client/ipa-join.c index 4c371131..64b4c0ac 100644 --- a/ipa-client/ipa-join.c +++ b/ipa-client/ipa-join.c @@ -735,6 +735,13 @@ unenroll_host(const char *server, const char *hostname, const char *ktname, int char * url = NULL; char * user_agent = NULL; + /* Start up our XML-RPC client library. */ + xmlrpc_client_init(XMLRPC_CLIENT_NO_FLAGS, NAME, VERSION); + + xmlrpc_env_init(&env); + + xmlrpc_client_setup_global_const(&env); + if (server) { ipaserver = strdup(server); } else { @@ -755,6 +762,11 @@ unenroll_host(const char *server, const char *hostname, const char *ktname, int host = strdup(hostname); } + if (NULL == host) { + rval = 3; + goto cleanup; + } + if (NULL == strstr(host, ".")) { if (!quiet) fprintf(stderr, _("The hostname must be fully-qualified: %s\n"), @@ -846,13 +858,6 @@ unenroll_host(const char *server, const char *hostname, const char *ktname, int ccache = NULL; putenv("KRB5CCNAME=MEMORY:ipa-join"); - /* Start up our XML-RPC client library. */ - xmlrpc_client_init(XMLRPC_CLIENT_NO_FLAGS, NAME, VERSION); - - xmlrpc_env_init(&env); - - xmlrpc_client_setup_global_const(&env); - #if 1 ret = asprintf(&url, "https://%s:443/ipa/xml", ipaserver); #else -- cgit