diff --git a/lib/kadm5/init_c.c b/lib/kadm5/init_c.c index 64ac58b2c..05ac7c15a 100644 --- a/lib/kadm5/init_c.c +++ b/lib/kadm5/init_c.c @@ -72,24 +72,37 @@ _kadm5_c_init_context(kadm5_client_context **ctx, krb5_add_et_list (context, initialize_kadm5_error_table_r); set_funcs(*ctx); (*ctx)->context = context; - if(params->mask & KADM5_CONFIG_REALM) + if(params->mask & KADM5_CONFIG_REALM) { + ret = 0; (*ctx)->realm = strdup(params->realm); - else - krb5_get_default_realm((*ctx)->context, &(*ctx)->realm); + if ((*ctx)->realm == NULL) + 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) (*ctx)->admin_server = strdup(params->admin_server); else { char **hostlist; ret = krb5_get_krb_admin_hst (context, &(*ctx)->realm, &hostlist); - if (ret) + if (ret) { + free((*ctx)->realm); + free(*ctx); return ret; + } (*ctx)->admin_server = strdup(*hostlist); krb5_free_krbhst (context, hostlist); } - if ((*ctx)->admin_server == NULL) + if ((*ctx)->admin_server == NULL) { return ENOMEM; + free((*ctx)->realm); + free(*ctx); + } colon = strchr ((*ctx)->admin_server, ':'); if (colon != NULL) *colon++ = '\0';