(_kadm5_c_init_context): catch errors from strdup and other krb5_ functions

git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@13242 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
Love Hörnquist Åstrand
2003-12-21 22:23:08 +00:00
parent 84b392bfd5
commit 7f88773f69

View File

@@ -72,24 +72,37 @@ _kadm5_c_init_context(kadm5_client_context **ctx,
krb5_add_et_list (context, initialize_kadm5_error_table_r); krb5_add_et_list (context, initialize_kadm5_error_table_r);
set_funcs(*ctx); set_funcs(*ctx);
(*ctx)->context = context; (*ctx)->context = context;
if(params->mask & KADM5_CONFIG_REALM) if(params->mask & KADM5_CONFIG_REALM) {
ret = 0;
(*ctx)->realm = strdup(params->realm); (*ctx)->realm = strdup(params->realm);
else if ((*ctx)->realm == NULL)
krb5_get_default_realm((*ctx)->context, &(*ctx)->realm); ret = ENOMEM;
} else
ret = krb5_get_default_realm((*ctx)->context, &(*ctx)->realm);
if (ret) {
free(*ctx);
return ret;
}
if(params->mask & KADM5_CONFIG_ADMIN_SERVER) if(params->mask & KADM5_CONFIG_ADMIN_SERVER)
(*ctx)->admin_server = strdup(params->admin_server); (*ctx)->admin_server = strdup(params->admin_server);
else { else {
char **hostlist; char **hostlist;
ret = krb5_get_krb_admin_hst (context, &(*ctx)->realm, &hostlist); ret = krb5_get_krb_admin_hst (context, &(*ctx)->realm, &hostlist);
if (ret) if (ret) {
free((*ctx)->realm);
free(*ctx);
return ret; return ret;
}
(*ctx)->admin_server = strdup(*hostlist); (*ctx)->admin_server = strdup(*hostlist);
krb5_free_krbhst (context, hostlist); krb5_free_krbhst (context, hostlist);
} }
if ((*ctx)->admin_server == NULL) if ((*ctx)->admin_server == NULL) {
return ENOMEM; return ENOMEM;
free((*ctx)->realm);
free(*ctx);
}
colon = strchr ((*ctx)->admin_server, ':'); colon = strchr ((*ctx)->admin_server, ':');
if (colon != NULL) if (colon != NULL)
*colon++ = '\0'; *colon++ = '\0';