148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright/*
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright * CDDL HEADER START
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright *
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright * The contents of this file are subject to the terms of the
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright * Common Development and Distribution License (the "License").
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright * You may not use this file except in compliance with the License.
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright *
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright * or http://www.opensolaris.org/os/licensing.
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright * See the License for the specific language governing permissions
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright * and limitations under the License.
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright *
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright * When distributing Covered Code, include this CDDL HEADER in each
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright * If applicable, add the following below this CDDL HEADER, with the
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright * fields enclosed by brackets "[]" replaced with your own identifying
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright * information: Portions Copyright [yyyy] [name of copyright owner]
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright *
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright * CDDL HEADER END
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright */
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright/*
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross * Copyright 2014 Nexenta Systems, Inc. All rights reserved.
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright */
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright/*
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright * LSA lookups
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright */
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright#include <stdio.h>
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright#include <note.h>
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright#include <assert.h>
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright#include "idmapd.h"
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright#include "libsmb.h"
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wrightidmap_retcode
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wrightidmap_lsa_xlate_sid_type(const lsa_account_t *acct, idmap_id_type *ret_type)
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright{
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright switch (acct->a_sidtype) {
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright case SidTypeUser:
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright case SidTypeComputer:
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright case SidTypeDomain:
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright case SidTypeDeletedAccount:
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright case SidTypeUnknown:
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright case SidTypeLabel:
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright *ret_type = IDMAP_USID;
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright return (IDMAP_SUCCESS);
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright case SidTypeGroup:
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright case SidTypeAlias:
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright case SidTypeWellKnownGroup:
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright *ret_type = IDMAP_GSID;
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright return (IDMAP_SUCCESS);
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright case SidTypeNull:
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright case SidTypeInvalid:
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright default:
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright idmapdlog(LOG_WARNING,
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright "LSA lookup: bad type %d for %s@%s",
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright acct->a_sidtype, acct->a_name, acct->a_domain);
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright return (IDMAP_ERR_OTHER);
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright }
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright NOTE(NOTREACHED)
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright}
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright/* Given SID, look up name and type */
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wrightidmap_retcode
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wrightlookup_lsa_by_sid(
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright const char *sidprefix,
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright uint32_t rid,
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright char **ret_name,
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright char **ret_domain,
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright idmap_id_type *ret_type)
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright{
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright lsa_account_t acct;
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright char sid[SMB_SID_STRSZ + 1];
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright idmap_retcode ret;
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright int rc;
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright (void) memset(&acct, 0, sizeof (acct));
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright *ret_name = NULL;
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright *ret_domain = NULL;
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright (void) snprintf(sid, sizeof (sid), "%s-%u", sidprefix, rid);
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright rc = smb_lookup_sid(sid, &acct);
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright if (rc != 0) {
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright idmapdlog(LOG_ERR, "Error: smb_lookup_sid failed.");
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright idmapdlog(LOG_ERR,
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright "Check SMB service (svc:/network/smb/server).");
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright idmapdlog(LOG_ERR,
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright "Check connectivity to Active Directory.");
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright ret = IDMAP_ERR_OTHER;
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright goto out;
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright }
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright if (acct.a_status == NT_STATUS_NONE_MAPPED) {
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright ret = IDMAP_ERR_NOTFOUND;
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright goto out;
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright }
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright if (acct.a_status != NT_STATUS_SUCCESS) {
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright idmapdlog(LOG_WARNING,
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright "Warning: smb_lookup_sid(%s) failed (0x%x)",
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright sid, acct.a_status);
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright /* Fail soft */
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright ret = IDMAP_ERR_NOTFOUND;
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright goto out;
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright }
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright ret = idmap_lsa_xlate_sid_type(&acct, ret_type);
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright if (ret != IDMAP_SUCCESS)
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright goto out;
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright *ret_name = strdup(acct.a_name);
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright if (*ret_name == NULL) {
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright ret = IDMAP_ERR_MEMORY;
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright goto out;
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright }
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright *ret_domain = strdup(acct.a_domain);
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright if (*ret_domain == NULL) {
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright ret = IDMAP_ERR_MEMORY;
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright goto out;
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright }
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright ret = IDMAP_SUCCESS;
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wrightout:
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright if (ret != IDMAP_SUCCESS) {
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright free(*ret_name);
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright *ret_name = NULL;
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright free(*ret_domain);
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright *ret_domain = NULL;
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright }
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright return (ret);
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright}
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright/* Given name and optional domain, look up SID, type, and canonical name */
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wrightidmap_retcode
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wrightlookup_lsa_by_name(
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright const char *name,
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright const char *domain,
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright char **ret_sidprefix,
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright uint32_t *ret_rid,
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright char **ret_name,
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright char **ret_domain,
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright idmap_id_type *ret_type)
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright{
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright lsa_account_t acct;
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright char *namedom = NULL;
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright idmap_retcode ret;
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright int rc;
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright (void) memset(&acct, 0, sizeof (acct));
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright *ret_sidprefix = NULL;
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright if (ret_name != NULL)
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright *ret_name = NULL;
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright if (ret_domain != NULL)
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright *ret_domain = NULL;
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright if (domain != NULL)
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright (void) asprintf(&namedom, "%s@%s", name, domain);
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright else
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright namedom = strdup(name);
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright if (namedom == NULL) {
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright ret = IDMAP_ERR_MEMORY;
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright goto out;
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright }
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright rc = smb_lookup_name(namedom, SidTypeUnknown, &acct);
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright if (rc != 0) {
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright idmapdlog(LOG_ERR, "Error: smb_lookup_name failed.");
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright idmapdlog(LOG_ERR,
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright "Check SMB service (svc:/network/smb/server).");
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright idmapdlog(LOG_ERR,
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright "Check connectivity to Active Directory.");
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright ret = IDMAP_ERR_OTHER;
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright goto out;
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright }
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright if (acct.a_status == NT_STATUS_NONE_MAPPED) {
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright ret = IDMAP_ERR_NOTFOUND;
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright goto out;
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright }
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright if (acct.a_status != NT_STATUS_SUCCESS) {
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright idmapdlog(LOG_WARNING,
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright "Warning: smb_lookup_name(%s) failed (0x%x)",
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright namedom, acct.a_status);
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright /* Fail soft */
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright ret = IDMAP_ERR_NOTFOUND;
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright goto out;
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright }
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright rc = smb_sid_splitstr(acct.a_sid, ret_rid);
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright assert(rc == 0);
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright *ret_sidprefix = strdup(acct.a_sid);
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright if (*ret_sidprefix == NULL) {
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright ret = IDMAP_ERR_MEMORY;
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright goto out;
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright }
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright ret = idmap_lsa_xlate_sid_type(&acct, ret_type);
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright if (ret != IDMAP_SUCCESS)
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright goto out;
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright if (ret_name != NULL) {
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright *ret_name = strdup(acct.a_name);
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright if (*ret_name == NULL) {
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright ret = IDMAP_ERR_MEMORY;
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright goto out;
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright }
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright }
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright if (ret_domain != NULL) {
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright *ret_domain = strdup(acct.a_domain);
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright if (*ret_domain == NULL) {
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright ret = IDMAP_ERR_MEMORY;
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright goto out;
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright }
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright }
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright ret = IDMAP_SUCCESS;
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wrightout:
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright free(namedom);
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright if (ret != IDMAP_SUCCESS) {
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright if (ret_name != NULL) {
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright free(*ret_name);
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright *ret_name = NULL;
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright }
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright if (ret_domain != NULL) {
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright free(*ret_domain);
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright *ret_domain = NULL;
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright }
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright free(*ret_sidprefix);
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright *ret_sidprefix = NULL;
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright }
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright return (ret);
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright}
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross/*
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross * This exists just so we can avoid exposing all of idmapd to libsmb.h.
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross * Like the above functions, it's a door call over to smbd.
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross */
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Rossvoid
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Rossnotify_dc_changed(void)
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross{
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross smb_notify_dc_changed();
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross}