b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross * This file and its contents are supplied under the terms of the
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross * Common Development and Distribution License ("CDDL"), version 1.0.
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross * You may only use this file in accordance with the terms of version
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross * 1.0 of the CDDL.
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross * A full copy of the text of the CDDL should have accompanied this
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross * source. A copy of the CDDL is also available via the Internet at
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross * Copyright 2014 Nexenta Systems, Inc. All rights reserved.
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross * This is an "override plugin" used by libkrb5. See:
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross * The interface is based on:
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross * http://web.mit.edu/~kerberos/krb5-1.12/doc/plugindev/locate.html
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross * Called by krb5int_locate_server / override_locate_server
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross const char *realm,
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross * Is this a service we want to override?
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross * What's my domain? Note: have to get this in a way
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross * that works while join domain is underway.
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross "failed getting domain info");
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross * Is this a realm we want to override?
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross if (0 != strcasecmp(realm, dxi.d_primary.di_fqname)) {
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross syslog(LOG_DEBUG, "_krb5_override_service_locator, "
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross "realm=%s, fqdn=%s", realm, dxi.d_primary.di_fqname);
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross * Yes, this is our domain. Have a DC?
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross break; /* OK */
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross break; /* OK */
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross /* else fallthrough */
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross * Provide the service address we have.
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross (void) memcpy(&sin.sin_addr, &dxi.d_dci.dc_addr.a_ipv4,
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross rc = cbfunc(cbdata, socktype, (struct sockaddr *)&sin);
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross /* rc from cbfunc is special. */
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross (void) memcpy(&sin6.sin6_addr, &dxi.d_dci.dc_addr.a_ipv6,
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross rc = cbfunc(cbdata, socktype, (struct sockaddr *)&sin6);
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross /* rc from cbfunc is special. */