Print this page
NEX-20549 smb AD join broken if no site name
Reviewed by: Evan Layton <evan.layton@nexenta.com>
Reviewed by: Matt Barden <matt.barden@nexenta.com>
NEX-19665 Several door servers don't properly handle exiting threads
Review by: Gordon Ross <gordon.ross@nexenta.com>
Review by: Evan Layton <evan.layton@nexenta.com>
Merge with illumos-gate 8dcafc606a22eddb15cded4783cf27221c4404b3 (htable whitespace)
NEX-2750 idmapd spams console with "ignoring preferred_dc value"
NEX-2225 Unable to join NexentaStor to 2008 AD
NEX-2302 Need a way to control the idmap rediscovery interval
NEX-1810 extended security Kerberos (inbound)
NEX-1852 re-enable Kerberos-style AD join
NEX-1638 Updated DC Locator
Includes work by: matt.barden@nexenta.com, kevin.crowe@nexenta.com
SMB-56 extended security NTLMSSP, inbound (lint)
SMB-56 extended security NTLMSSP, inbound
OS-7 Add cache timeout settings to idmapd manifest, increase defaults
re #13190 rb4312 idmapd error -9961 (No AD servers)
*** 18,28 ****
*
* CDDL HEADER END
*/
/*
* Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
! * Copyright 2014 Nexenta Systems, Inc. All rights reserved.
*/
/*
* Config routines common to idmap(1M) and idmapd(1M)
--- 18,28 ----
*
* CDDL HEADER END
*/
/*
* Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
! * Copyright 2019 Nexenta Systems, Inc. All rights reserved.
*/
/*
* Config routines common to idmap(1M) and idmapd(1M)
*** 43,52 ****
--- 43,53 ----
#include <sys/u8_textprep.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <note.h>
+ #include <limits.h>
#include "idmapd.h"
#include "addisc.h"
#define MACHINE_SID_LEN (9 + 3 * 11)
#define FMRI_BASE "svc:/system/idmap"
*** 75,84 ****
--- 76,90 ----
* really short TTL (which it never should, but be defensive)
* (not configurable) seconds.
*/
#define MIN_REDISCOVERY_INTERVAL 60
+ /*
+ * Max number of concurrent door calls
+ */
+ #define MAX_THREADS_DEFAULT 40
+
enum event_type {
EVENT_NOTHING, /* Woke up for no good reason */
EVENT_TIMEOUT, /* Timeout expired */
EVENT_ROUTING, /* An interesting routing event happened */
EVENT_POKED, /* Requested from degrade_svc() */
*** 1599,1608 ****
--- 1605,1623 ----
rc = get_val_int(handles, "list_size_limit",
&pgcfg->list_size_limit, SCF_TYPE_COUNT);
if (rc != 0)
(*errors)++;
+ rc = get_val_int(handles, "max_threads",
+ &pgcfg->max_threads, SCF_TYPE_COUNT);
+ if (rc != 0)
+ (*errors)++;
+ if (pgcfg->max_threads == 0)
+ pgcfg->max_threads = MAX_THREADS_DEFAULT;
+ if (pgcfg->max_threads > UINT_MAX)
+ pgcfg->max_threads = UINT_MAX;
+
rc = get_val_int(handles, "id_cache_timeout",
&pgcfg->id_cache_timeout, SCF_TYPE_COUNT);
if (rc != 0)
(*errors)++;
if (pgcfg->id_cache_timeout == 0)
*** 1629,1642 ****
else {
if (pgcfg->domain_name != NULL &&
pgcfg->domain_name[0] == '\0') {
free(pgcfg->domain_name);
pgcfg->domain_name = NULL;
}
(void) ad_disc_set_DomainName(handles->ad_ctx,
pgcfg->domain_name);
- pgcfg->domain_name_auto_disc = B_FALSE;
}
rc = get_val_astring(handles, "default_domain",
&pgcfg->default_domain);
if (rc != 0) {
--- 1644,1658 ----
else {
if (pgcfg->domain_name != NULL &&
pgcfg->domain_name[0] == '\0') {
free(pgcfg->domain_name);
pgcfg->domain_name = NULL;
+ } else {
+ pgcfg->domain_name_auto_disc = B_FALSE;
}
(void) ad_disc_set_DomainName(handles->ad_ctx,
pgcfg->domain_name);
}
rc = get_val_astring(handles, "default_domain",
&pgcfg->default_domain);
if (rc != 0) {
*** 1725,1744 ****
rc = get_val_astring(handles, "forest_name", &pgcfg->forest_name);
if (rc != 0)
(*errors)++;
else {
(void) ad_disc_set_ForestName(handles->ad_ctx,
pgcfg->forest_name);
- pgcfg->forest_name_auto_disc = B_FALSE;
}
rc = get_val_astring(handles, "site_name", &pgcfg->site_name);
if (rc != 0)
(*errors)++;
! else
(void) ad_disc_set_SiteName(handles->ad_ctx, pgcfg->site_name);
rc = get_val_ds(handles, "global_catalog", 3268,
&pgcfg->global_catalog);
if (rc != 0)
(*errors)++;
--- 1741,1774 ----
rc = get_val_astring(handles, "forest_name", &pgcfg->forest_name);
if (rc != 0)
(*errors)++;
else {
+ if (pgcfg->forest_name != NULL &&
+ pgcfg->forest_name[0] == '\0') {
+ free(pgcfg->forest_name);
+ pgcfg->forest_name = NULL;
+ } else {
+ pgcfg->forest_name_auto_disc = B_FALSE;
+ }
(void) ad_disc_set_ForestName(handles->ad_ctx,
pgcfg->forest_name);
}
rc = get_val_astring(handles, "site_name", &pgcfg->site_name);
if (rc != 0)
(*errors)++;
! else {
! if (pgcfg->site_name != NULL &&
! pgcfg->site_name[0] == '\0') {
! free(pgcfg->site_name);
! pgcfg->site_name = NULL;
! } else {
! pgcfg->site_name_auto_disc = B_FALSE;
! }
(void) ad_disc_set_SiteName(handles->ad_ctx, pgcfg->site_name);
+ }
rc = get_val_ds(handles, "global_catalog", 3268,
&pgcfg->global_catalog);
if (rc != 0)
(*errors)++;
*** 2196,2205 ****
--- 2226,2238 ----
/* Non-discoverable props updated here */
changed += update_uint64(&live_pgcfg->list_size_limit,
&new_pgcfg.list_size_limit, "list_size_limit");
+ changed += update_uint64(&live_pgcfg->max_threads,
+ &new_pgcfg.max_threads, "max_threads");
+
changed += update_uint64(&live_pgcfg->id_cache_timeout,
&new_pgcfg.id_cache_timeout, "id_cache_timeout");
changed += update_uint64(&live_pgcfg->name_cache_timeout,
&new_pgcfg.name_cache_timeout, "name_cache_timeout");