summaryrefslogtreecommitdiff
path: root/source3/winbindd/idmap_adex/domain_util.c
diff options
context:
space:
mode:
Diffstat (limited to 'source3/winbindd/idmap_adex/domain_util.c')
-rw-r--r--source3/winbindd/idmap_adex/domain_util.c288
1 files changed, 0 insertions, 288 deletions
diff --git a/source3/winbindd/idmap_adex/domain_util.c b/source3/winbindd/idmap_adex/domain_util.c
deleted file mode 100644
index 99dc0cca65..0000000000
--- a/source3/winbindd/idmap_adex/domain_util.c
+++ /dev/null
@@ -1,288 +0,0 @@
-/*
- * idmap_adex: Domain search interface
- *
- * Copyright (C) Gerald (Jerry) Carter 2007-2008
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include "includes.h"
-#include "ads.h"
-#include "idmap.h"
-#include "idmap_adex.h"
-
-#undef DBGC_CLASS
-#define DBGC_CLASS DBGC_IDMAP
-
-struct dc_info {
- struct dc_info *prev, *next;
- char *dns_name;
- struct likewise_cell *domain_cell;
-};
-
-static struct dc_info *_dc_server_list = NULL;
-
-
-/**********************************************************************
- *********************************************************************/
-
-static struct dc_info *dc_list_head(void)
-{
- return _dc_server_list;
-}
-
-/**********************************************************************
- *********************************************************************/
-
-static NTSTATUS dc_add_domain(const char *domain)
-{
- NTSTATUS nt_status = NT_STATUS_UNSUCCESSFUL;
- struct dc_info *dc = NULL;
-
- if (!domain) {
- return NT_STATUS_INVALID_PARAMETER;
- }
-
- DEBUG(10,("dc_add_domain: Attempting to add domain %s\n", domain));
-
- /* Check for duplicates */
-
- dc = dc_list_head();
- while (dc) {
- if (strequal (dc->dns_name, domain))
- break;
- dc = dc->next;
- }
-
- if (dc) {
- DEBUG(10,("dc_add_domain: %s already in list\n", domain));
- return NT_STATUS_OK;
- }
-
- dc = talloc_zero(NULL, struct dc_info);
- BAIL_ON_PTR_ERROR(dc, nt_status);
-
- dc->dns_name = talloc_strdup(dc, domain);
- BAIL_ON_PTR_ERROR(dc->dns_name, nt_status);
-
- DLIST_ADD_END(_dc_server_list, dc, struct dc_info*);
-
- nt_status = NT_STATUS_OK;
-
- DEBUG(5,("dc_add_domain: Successfully added %s\n", domain));
-
-done:
- if (!NT_STATUS_IS_OK(nt_status)) {
- talloc_destroy(dc);
- DEBUG(0,("LWI: Failed to add new DC connection for %s (%s)\n",
- domain, nt_errstr(nt_status)));
- }
-
- return nt_status;
-}
-
-/**********************************************************************
- *********************************************************************/
-
-static void dc_server_list_destroy(void)
-{
- struct dc_info *dc = dc_list_head();
-
- while (dc) {
- struct dc_info *p = dc->next;
-
- cell_destroy(dc->domain_cell);
- talloc_destroy(dc);
-
- dc = p;
- }
-
- return;
-}
-
-
-/**********************************************************************
- *********************************************************************/
-
- NTSTATUS domain_init_list(void)
-{
- NTSTATUS nt_status = NT_STATUS_UNSUCCESSFUL;
- struct winbindd_tdc_domain *domains = NULL;
- size_t num_domains = 0;
- int i;
-
- if (_dc_server_list != NULL) {
- dc_server_list_destroy();
- }
-
- /* Add our domain */
-
- nt_status = dc_add_domain(lp_realm());
- BAIL_ON_NTSTATUS_ERROR(nt_status);
-
- if (!wcache_tdc_fetch_list(&domains, &num_domains)) {
- nt_status = NT_STATUS_CANT_ACCESS_DOMAIN_INFO;
- BAIL_ON_NTSTATUS_ERROR(nt_status);
- }
-
- /* Add all domains with an incoming trust path */
-
- for (i=0; i<num_domains; i++) {
- uint32_t flags = (NETR_TRUST_FLAG_INBOUND|NETR_TRUST_FLAG_IN_FOREST);
-
- /* We just require one of the flags to be set here */
-
- if (domains[i].trust_flags & flags) {
- nt_status = dc_add_domain(domains[i].dns_name);
- BAIL_ON_NTSTATUS_ERROR(nt_status);
- }
- }
-
- nt_status = NT_STATUS_OK;
-
-done:
- if (!NT_STATUS_IS_OK(nt_status)) {
- DEBUG(2,("LWI: Failed to initialize DC list (%s)\n",
- nt_errstr(nt_status)));
- }
-
- TALLOC_FREE(domains);
-
- return nt_status;
-}
-
-/********************************************************************
- *******************************************************************/
-
-static NTSTATUS dc_do_search(struct dc_info *dc,
- const char *search_base,
- int scope,
- const char *expr,
- const char **attrs,
- LDAPMessage ** msg)
-{
- ADS_STATUS status = ADS_ERROR_NT(NT_STATUS_UNSUCCESSFUL);
- NTSTATUS nt_status = NT_STATUS_UNSUCCESSFUL;
-
- status = cell_do_search(dc->domain_cell, search_base,
- scope, expr, attrs, msg);
- nt_status = ads_ntstatus(status);
-
- return nt_status;
-}
-
-/**********************************************************************
- *********************************************************************/
-
-static struct dc_info *dc_find_domain(const char *dns_domain)
-{
- struct dc_info *dc = dc_list_head();
-
- if (!dc)
- return NULL;
-
- while (dc) {
- if (strequal(dc->dns_name, dns_domain)) {
- return dc;
- }
-
- dc = dc->next;
- }
-
- return NULL;
-}
-
-/**********************************************************************
- *********************************************************************/
-
- NTSTATUS dc_search_domains(struct likewise_cell **cell,
- LDAPMessage **msg,
- const char *dn,
- const struct dom_sid *sid)
-{
- NTSTATUS nt_status = NT_STATUS_UNSUCCESSFUL;
- TALLOC_CTX *frame = talloc_stackframe();
- char *dns_domain;
- const char *attrs[] = { "*", NULL };
- struct dc_info *dc = NULL;
- const char *base = NULL;
-
- if (!dn || !*dn) {
- nt_status = NT_STATUS_INVALID_PARAMETER;
- BAIL_ON_NTSTATUS_ERROR(nt_status);
- }
-
- dns_domain = cell_dn_to_dns(dn);
- BAIL_ON_PTR_ERROR(dns_domain, nt_status);
-
- if ((dc = dc_find_domain(dns_domain)) == NULL) {
- nt_status = NT_STATUS_TRUSTED_DOMAIN_FAILURE;
- BAIL_ON_NTSTATUS_ERROR(nt_status);
- }
-
- /* Reparse the cell settings for the domain if necessary */
-
- if (!dc->domain_cell) {
- char *base_dn;
-
- base_dn = ads_build_dn(dc->dns_name);
- BAIL_ON_PTR_ERROR(base_dn, nt_status);
-
- nt_status = cell_connect_dn(&dc->domain_cell, base_dn);
- SAFE_FREE(base_dn);
- BAIL_ON_NTSTATUS_ERROR(nt_status);
-
- nt_status = cell_lookup_settings(dc->domain_cell);
- BAIL_ON_NTSTATUS_ERROR(nt_status);
-
- /* By definition this is already part of a larger
- forest-wide search scope */
-
- cell_set_flags(dc->domain_cell, LWCELL_FLAG_SEARCH_FOREST);
- }
-
- /* Check whether we are operating in non-schema or RFC2307
- mode */
-
- if (cell_flags(dc->domain_cell) & LWCELL_FLAG_USE_RFC2307_ATTRS) {
- nt_status = dc_do_search(dc, dn, LDAP_SCOPE_BASE,
- "(objectclass=*)", attrs, msg);
- } else {
- const char *sid_str = NULL;
- char *filter = NULL;
-
- sid_str = sid_string_talloc(frame, sid);
- BAIL_ON_PTR_ERROR(sid_str, nt_status);
-
- filter = talloc_asprintf(frame, "(keywords=backLink=%s)",
- sid_str);
- BAIL_ON_PTR_ERROR(filter, nt_status);
-
- base = cell_search_base(dc->domain_cell);
- BAIL_ON_PTR_ERROR(base, nt_status);
-
- nt_status = dc_do_search(dc, base, LDAP_SCOPE_SUBTREE,
- filter, attrs, msg);
- }
- BAIL_ON_NTSTATUS_ERROR(nt_status);
-
- *cell = dc->domain_cell;
-
-done:
- talloc_destroy(discard_const_p(char, base));
- talloc_destroy(frame);
-
- return nt_status;
-}