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");