aboutsummaryrefslogtreecommitdiff
path: root/src/lib/krb5/os/get_krbhst.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/krb5/os/get_krbhst.c')
-rw-r--r--src/lib/krb5/os/get_krbhst.c23
1 files changed, 14 insertions, 9 deletions
diff --git a/src/lib/krb5/os/get_krbhst.c b/src/lib/krb5/os/get_krbhst.c
index c929bba..be2f3f9 100644
--- a/src/lib/krb5/os/get_krbhst.c
+++ b/src/lib/krb5/os/get_krbhst.c
@@ -64,8 +64,9 @@ krb5_get_krbhst(context, realm, hostlist)
const char *realm_kdc_names[4];
krb5_error_code retval;
int i, count;
+ char **rethosts;
- *hostlist = 0;
+ rethosts = 0;
realm_kdc_names[0] = "realms";
realm_kdc_names[1] = realm->data;
@@ -99,25 +100,29 @@ krb5_get_krbhst(context, realm, hostlist)
*cp = 0;
}
count = cpp - values;
- *hostlist = malloc(sizeof(char *) * (count + 1));
- if (!*hostlist) {
+ rethosts = malloc(sizeof(char *) * (count + 1));
+ if (!rethosts) {
retval = ENOMEM;
goto cleanup;
}
for (i = 0; i < count; i++) {
- *hostlist[i] = malloc(strlen(values[i]) + 1);
- if (!*hostlist[i]) {
+ int len = strlen (values[i]) + 1;
+ rethosts[i] = malloc(len);
+ if (!rethosts[i]) {
retval = ENOMEM;
goto cleanup;
}
+ memcpy (rethosts[i], values[i], len);
}
- *hostlist[count] = 0;
+ rethosts[count] = 0;
cleanup:
- if (retval && *hostlist) {
- for (cpp = *hostlist; *cpp; cpp++)
+ if (retval && rethosts) {
+ for (cpp = rethosts; *cpp; cpp++)
free(*cpp);
- free(*hostlist);
+ free(rethosts);
+ rethosts = 0;
}
profile_free_list(values);
+ *hostlist = rethosts;
return retval;
}