diff options
Diffstat (limited to 'src/lib/krb5/os/changepw.c')
-rw-r--r-- | src/lib/krb5/os/changepw.c | 61 |
1 files changed, 30 insertions, 31 deletions
diff --git a/src/lib/krb5/os/changepw.c b/src/lib/krb5/os/changepw.c index 6ed95bc..44161d6 100644 --- a/src/lib/krb5/os/changepw.c +++ b/src/lib/krb5/os/changepw.c @@ -52,45 +52,50 @@ * Wrapper function for the two backends */ +static void +fixup_ports (struct sockaddr *addr_p, int naddrs, int port) +{ + /* Ick: In this version of krb5_locate_foo, we have a pointer to a + pointer to an array of sockaddr_in structures -- NOT an array + of pointers like we should have. */ + int i; + port = htons (port); + if (addr_p->sa_family != AF_INET) + abort (); + for (i = 0; i < naddrs; i++) { + struct sockaddr_in *sinp = (struct sockaddr_in *) &addr_p[i]; + sinp->sin_port = port; + } +} + static krb5_error_code -krb5_locate_kpasswd(context, realm, addr_pp, naddrs, master_index, nmasters) +krb5_locate_kpasswd(context, realm, addr_pp, naddrs) krb5_context context; const krb5_data *realm; struct sockaddr **addr_pp; int *naddrs; - int *master_index; - int *nmasters; { krb5_error_code code; - int i; -#ifdef KRB5_DNS_LOOKUP - struct sockaddr *admin_addr_p, *kdc_addr_p; - int nadmin_addrs, nkdc_addrs; - int j; -#endif /* KRB5_DNS_LOOKUP */ /* * We always try the local file first */ - code = krb5_locate_srv_conf(context, realm, "kpasswd_server", addr_pp, naddrs, - master_index, nmasters); + code = krb5_locate_srv_conf(context, realm, "kpasswd_server", + addr_pp, naddrs, 0); if (code) { - code = krb5_locate_srv_conf(context, realm, "admin_server", addr_pp, naddrs, - master_index, nmasters); + code = krb5_locate_srv_conf(context, realm, "admin_server", + addr_pp, naddrs, 0); if ( !code ) { - /* success with admin_server but now we need to change the port */ - /* number to use DEFAULT_KPASSWD_PORT. */ - for ( i=0;i<*naddrs;i++ ) { - struct sockaddr_in *sin = (struct sockaddr_in *) addr_pp[i]; - sin->sin_port = htons(DEFAULT_KPASSWD_PORT); - } + /* Success with admin_server but now we need to change the + port number to use DEFAULT_KPASSWD_PORT. */ + fixup_ports (*addr_pp, *naddrs, DEFAULT_KPASSWD_PORT); } } #ifdef KRB5_DNS_LOOKUP if (code) { - int use_dns = _krb5_use_dns(context); + int use_dns = _krb5_use_dns_kdc(context); if ( use_dns ) { code = krb5_locate_srv_dns(realm, "_kpasswd", "_udp", addr_pp, naddrs); @@ -100,18 +105,12 @@ krb5_locate_kpasswd(context, realm, addr_pp, naddrs, master_index, nmasters) "_tcp", addr_pp, naddrs); if ( !code ) { - /* success with admin_server but now we need to change the port */ - /* number to use DEFAULT_KPASSWD_PORT. */ - for ( i=0;i<*naddrs;i++ ) { - struct sockaddr_in *sin = (struct sockaddr_in *) addr_pp[i]; - sin->sin_port = htons(DEFAULT_KPASSWD_PORT); - } + /* Success with admin_server but now we need to + change the port number to use + DEFAULT_KPASSWD_PORT. */ + fixup_ports (*addr_pp, *naddrs, DEFAULT_KPASSWD_PORT); } } - if ( !code && master_index && nmasters ) { - *master_index = 1; - *nmasters = *naddrs; - } } } #endif /* KRB5_DNS_LOOKUP */ @@ -158,7 +157,7 @@ krb5_change_password(context, creds, newpw, result_code, if (code = krb5_locate_kpasswd(context, krb5_princ_realm(context, creds->client), - &addr_p, &naddr_p,NULL,NULL)) + &addr_p, &naddr_p)) goto cleanup; /* this is really obscure. s1 is used for all communications. it |