(_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:
@@ -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';
|
||||||
|
Reference in New Issue
Block a user