diff options
-rw-r--r-- | source4/libads/config.m4 | 1 | ||||
-rw-r--r-- | source4/libcli/auth/clikrb5.c | 12 |
2 files changed, 12 insertions, 1 deletions
diff --git a/source4/libads/config.m4 b/source4/libads/config.m4 index a98ac3189b..8c0cc5c121 100644 --- a/source4/libads/config.m4 +++ b/source4/libads/config.m4 @@ -289,6 +289,7 @@ if test x"$with_ads_support" != x"no"; then AC_CHECK_FUNC_EXT(krb5_verify_checksum, $KRB5_LIBS) AC_CHECK_FUNC_EXT(krb5_c_verify_checksum, $KRB5_LIBS) AC_CHECK_FUNC_EXT(krb5_ticket_get_authorization_data_type, $KRB5_LIBS) + AC_CHECK_FUNC_EXT(krb5_krbhst_get_addrinfo, $KRB5_LIBS) LIBS="$LIBS $KRB5_LIBS" diff --git a/source4/libcli/auth/clikrb5.c b/source4/libcli/auth/clikrb5.c index 0e4ec1f438..f6f8520b3c 100644 --- a/source4/libcli/auth/clikrb5.c +++ b/source4/libcli/auth/clikrb5.c @@ -181,6 +181,7 @@ krb5_error_code rc; int num_kdcs, i; struct sockaddr *sa; + struct addrinfo **ai; *addr_pp = NULL; *naddrs = 0; @@ -210,10 +211,19 @@ return -1; } + *addr_pp = malloc(sizeof(struct sockaddr) * num_kdcs); memset(*addr_pp, '\0', sizeof(struct sockaddr) * num_kdcs ); for (i = 0; i < num_kdcs && (rc = krb5_krbhst_next(ctx, hnd, &hinfo) == 0); i++) { - if (hinfo->ai->ai_family == AF_INET) + +#if defined(HAVE_KRB5_KRBHST_GET_ADDRINFO) + rc = krb5_krbhst_get_addrinfo(ctx, hinfo, ai); + if (rc) { + DEBUG(0,("krb5_krbhst_get_addrinfo failed: %s\n", error_message(rc))); + return rc; + } +#endif + if (hinfo->ai && hinfo->ai->ai_family == AF_INET) memcpy(&sa[i], hinfo->ai->ai_addr, sizeof(struct sockaddr)); } |