diff options
author | Ken Raeburn <raeburn@mit.edu> | 1999-09-02 21:39:46 +0000 |
---|---|---|
committer | Ken Raeburn <raeburn@mit.edu> | 1999-09-02 21:39:46 +0000 |
commit | 1b959a62b436e61749986a520378bba642d1f57b (patch) | |
tree | 4b51ea8039335ad41c4baf5fdd28b6fd73fecb31 /src/lib/krb5/os/get_krbhst.c | |
parent | b8c79298858dcc1b71e7548f6a1d8f6cf22597b9 (diff) | |
download | krb5-1b959a62b436e61749986a520378bba642d1f57b.zip krb5-1b959a62b436e61749986a520378bba642d1f57b.tar.gz krb5-1b959a62b436e61749986a520378bba642d1f57b.tar.bz2 |
from 1.1 branch
1999-09-01 Danilo Almeida <dalmeida@mit.edu>
* kuserok.c (krb5_kuserok): Fix improper negation in
non-Unix localname check. Also fix calling convention
before this function is exported by the Windows DLL.
* localaddr.c (krb5_os_localaddr): Fix memset to clear
right address list. (Thanks to jaltman@columbia.edu).
1999-09-01 Ken Raeburn <raeburn@mit.edu>
* get_krbhst.c (krb5_get_krbhst): Fix double-indirection
confusion. Do actually copy string contents to newly allocated
storage.
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@11780 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/lib/krb5/os/get_krbhst.c')
-rw-r--r-- | src/lib/krb5/os/get_krbhst.c | 23 |
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; } |