changeset 21438:90c979f55037

11005 ads_site broken in sharectl get/set smb Reviewed by: Evan Layton <evan.layton@nexenta.com> Reviewed by: Matt Barden <matt.barden@nexenta.com> Reviewed by: Roman Strashkin <roman.strashkin@nexenta.com> Approved by: Garrett D'Amore <garrett@damore.org>
author Gordon Ross <gwr@nexenta.com>
date Thu, 07 Feb 2019 16:43:45 -0500
parents 624e8530581c
children ee46bbf8eb49
files usr/src/cmd/idmap/idmapd/idmap.xml usr/src/cmd/idmap/idmapd/idmap_config.c usr/src/lib/smbsrv/libsmb/common/smb_cfg.c usr/src/tools/quick/make-idmap
diffstat 4 files changed, 58 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/usr/src/cmd/idmap/idmapd/idmap.xml	Wed Dec 05 16:59:06 2018 -0500
+++ b/usr/src/cmd/idmap/idmapd/idmap.xml	Thu Feb 07 16:43:45 2019 -0500
@@ -118,6 +118,10 @@
 			type='count'
 			value='3600' />
 		<propval
+			name='site_name'
+			type='astring'
+			value='' />
+		<propval
 			name='use_ads'
 			type='boolean'
 			value='true' />
--- a/usr/src/cmd/idmap/idmapd/idmap_config.c	Wed Dec 05 16:59:06 2018 -0500
+++ b/usr/src/cmd/idmap/idmapd/idmap_config.c	Thu Feb 07 16:43:45 2019 -0500
@@ -20,7 +20,7 @@
  */
 /*
  * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright 2018 Nexenta Systems, Inc.  All rights reserved.
+ * Copyright 2019 Nexenta Systems, Inc.  All rights reserved.
  */
 
 
@@ -1487,7 +1487,8 @@
  */
 static
 int
-valid_ldap_attr(const char *attr) {
+valid_ldap_attr(const char *attr)
+{
 	for (; *attr; attr++) {
 		if (!isalnum(*attr) && *attr != '-' &&
 		    *attr != '_' && *attr != '.' && *attr != ';')
@@ -1647,9 +1648,10 @@
 			free(pgcfg->domain_name);
 			pgcfg->domain_name = NULL;
 		}
+		if (pgcfg->domain_name != NULL)
+			pgcfg->domain_name_auto_disc = B_FALSE;
 		(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",
@@ -1742,16 +1744,30 @@
 	if (rc != 0)
 		(*errors)++;
 	else {
+		if (pgcfg->forest_name != NULL &&
+		    pgcfg->forest_name[0] == '\0') {
+			free(pgcfg->forest_name);
+			pgcfg->forest_name = NULL;
+		}
+		if (pgcfg->forest_name != NULL)
+			pgcfg->forest_name_auto_disc = B_FALSE;
 		(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
+	else {
+		if (pgcfg->site_name != NULL &&
+		    pgcfg->site_name[0] == '\0') {
+			free(pgcfg->site_name);
+			pgcfg->site_name = NULL;
+		}
+		if (pgcfg->site_name != NULL)
+			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);
--- a/usr/src/lib/smbsrv/libsmb/common/smb_cfg.c	Wed Dec 05 16:59:06 2018 -0500
+++ b/usr/src/lib/smbsrv/libsmb/common/smb_cfg.c	Thu Feb 07 16:43:45 2019 -0500
@@ -66,10 +66,11 @@
 #define	MACHINE_UUID			"machine_uuid"
 #define	IDMAP_DOMAIN			"domain_name"
 #define	IDMAP_PREF_DC			"preferred_dc"
+#define	IDMAP_SITE_NAME			"site_name"
 #define	IDMAP_PG_NAME			"config"
 
-#define	SMB_SECMODE_WORKGRP_STR 	"workgroup"
-#define	SMB_SECMODE_DOMAIN_STR  	"domain"
+#define	SMB_SECMODE_WORKGRP_STR		"workgroup"
+#define	SMB_SECMODE_DOMAIN_STR		"domain"
 
 #define	SMB_ENC_LEN	1024
 #define	SMB_DEC_LEN	256
@@ -156,6 +157,8 @@
 static char *smb_base64_decode(char *encoded_str);
 static int smb_config_get_idmap_preferred_dc(char *, int);
 static int smb_config_set_idmap_preferred_dc(char *);
+static int smb_config_get_idmap_site_name(char *, int);
+static int smb_config_set_idmap_site_name(char *);
 
 char *
 smb_config_getname(smb_cfg_id_t id)
@@ -377,6 +380,8 @@
 	cfg = smb_config_getent(id);
 	assert(cfg->sc_type == SCF_TYPE_ASTRING);
 
+	if (id == SMB_CI_ADS_SITE)
+		return (smb_config_get_idmap_site_name(cbuf, bufsz));
 	if (id == SMB_CI_DOMAIN_SRV)
 		return (smb_config_get_idmap_preferred_dc(cbuf, bufsz));
 
@@ -583,6 +588,8 @@
 	cfg = smb_config_getent(id);
 	assert(cfg->sc_type == SCF_TYPE_ASTRING);
 
+	if (id == SMB_CI_ADS_SITE)
+		return (smb_config_set_idmap_site_name(value));
 	if (id == SMB_CI_DOMAIN_SRV)
 		return (smb_config_set_idmap_preferred_dc(value));
 
@@ -877,6 +884,30 @@
 	    IDMAP_PREF_DC, value));
 }
 
+static int
+smb_config_get_idmap_site_name(char *cbuf, int bufsz)
+{
+	char *s;
+	int len, rc = -1;
+
+	s = smb_config_getenv_generic(IDMAP_SITE_NAME,
+	    IDMAP_FMRI_PREFIX, IDMAP_PG_NAME);
+	if (s != NULL) {
+		len = strlcpy(cbuf, s, bufsz);
+		if (len < bufsz)
+			rc = 0;
+		free(s);
+	}
+	return (rc);
+}
+
+static int
+smb_config_set_idmap_site_name(char *value)
+{
+	return (smb_config_setenv_generic(IDMAP_FMRI_PREFIX, IDMAP_PG_NAME,
+	    IDMAP_SITE_NAME, value));
+}
+
 /*
  * smb_config_set_idmap_domain
  *
--- a/usr/src/tools/quick/make-idmap	Wed Dec 05 16:59:06 2018 -0500
+++ b/usr/src/tools/quick/make-idmap	Thu Feb 07 16:43:45 2019 -0500
@@ -186,7 +186,6 @@
 do_tar() {
 	git_rev=`git rev-parse --short=8 HEAD`
 	files="
-kernel/misc/idmap
 kernel/misc/amd64/idmap
 lib/svc/manifest/system/idmap.xml
 usr/lib/idmapd