diff options
author | Greg Hudson <ghudson@mit.edu> | 2014-04-06 18:06:14 -0400 |
---|---|---|
committer | Greg Hudson <ghudson@mit.edu> | 2014-06-02 15:23:10 -0400 |
commit | f4b1a7e7b80ce68e57912edcd48c39ea62c73e43 (patch) | |
tree | a7a250dcd8140bdbedc72a9a4c19932d1bd285f9 /src/lib/krb5/os/sendto_kdc.c | |
parent | 42b3c2ed11c1e62c1691f868a6796983f93c3beb (diff) | |
download | krb5-f4b1a7e7b80ce68e57912edcd48c39ea62c73e43.tar.gz krb5-f4b1a7e7b80ce68e57912edcd48c39ea62c73e43.tar.xz krb5-f4b1a7e7b80ce68e57912edcd48c39ea62c73e43.zip |
Add helper to determine if a KDC is the master
Add a new function k5_kdc_is_master in locate_kdc.c to determine
whether a KDC matches one of the masters, and use it in
krb5_sendto_kdc.
Diffstat (limited to 'src/lib/krb5/os/sendto_kdc.c')
-rw-r--r-- | src/lib/krb5/os/sendto_kdc.c | 31 |
1 files changed, 2 insertions, 29 deletions
diff --git a/src/lib/krb5/os/sendto_kdc.c b/src/lib/krb5/os/sendto_kdc.c index 5f781d351..e3855a30a 100644 --- a/src/lib/krb5/os/sendto_kdc.c +++ b/src/lib/krb5/os/sendto_kdc.c @@ -293,25 +293,6 @@ cm_select_or_poll(const struct select_state *in, time_ms endtime, } static int -in_addrlist(struct server_entry *entry, struct serverlist *list) -{ - size_t i; - struct server_entry *le; - - for (i = 0; i < list->nservers; i++) { - le = &list->servers[i]; - if (entry->hostname != NULL && le->hostname != NULL && - strcmp(entry->hostname, le->hostname) == 0) - return 1; - if (entry->hostname == NULL && le->hostname == NULL && - entry->addrlen == le->addrlen && - memcmp(&entry->addr, &le->addr, entry->addrlen) == 0) - return 1; - } - return 0; -} - -static int check_for_svc_unavailable (krb5_context context, const krb5_data *reply, void *msg_handler_data) @@ -418,17 +399,9 @@ krb5_sendto_kdc(krb5_context context, const krb5_data *message, /* Set use_master to 1 if we ended up talking to a master when we didn't * explicitly request to. */ if (*use_master == 0) { - struct serverlist mservers; - struct server_entry *entry = &servers.servers[server_used]; - retval = k5_locate_kdc(context, realm, &mservers, TRUE, - entry->socktype); - if (retval == 0) { - if (in_addrlist(entry, &mservers)) - *use_master = 1; - k5_free_serverlist(&mservers); - } + *use_master = k5_kdc_is_master(context, realm, + &servers.servers[server_used]); TRACE_SENDTO_KDC_MASTER(context, *use_master); - retval = 0; } cleanup: |