summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGordon Ross <gwr@nexenta.com>2019-02-07 16:43:45 -0500
committerGordon Ross <gwr@nexenta.com>2019-06-06 11:13:51 -0400
commita774f103e3771c7c04da927df024cf184248ad8f (patch)
tree6dd008922f8c791cb75b2e2c95c7839f49ac3089
parentfea136a04b3f86ab3ec31e4c157379030fee9ade (diff)
downloadillumos-joyent-a774f103e3771c7c04da927df024cf184248ad8f.tar.gz
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>
-rw-r--r--usr/src/cmd/idmap/idmapd/idmap.xml4
-rw-r--r--usr/src/cmd/idmap/idmapd/idmap_config.c26
-rw-r--r--usr/src/lib/smbsrv/libsmb/common/smb_cfg.c35
-rwxr-xr-xusr/src/tools/quick/make-idmap1
4 files changed, 58 insertions, 8 deletions
diff --git a/usr/src/cmd/idmap/idmapd/idmap.xml b/usr/src/cmd/idmap/idmapd/idmap.xml
index 487953d746..2b6f7b7ad5 100644
--- a/usr/src/cmd/idmap/idmapd/idmap.xml
+++ b/usr/src/cmd/idmap/idmapd/idmap.xml
@@ -118,6 +118,10 @@
type='count'
value='3600' />
<propval
+ name='site_name'
+ type='astring'
+ value='' />
+ <propval
name='use_ads'
type='boolean'
value='true' />
diff --git a/usr/src/cmd/idmap/idmapd/idmap_config.c b/usr/src/cmd/idmap/idmapd/idmap_config.c
index ccc4ce313c..5d92d12503 100644
--- a/usr/src/cmd/idmap/idmapd/idmap_config.c
+++ b/usr/src/cmd/idmap/idmapd/idmap_config.c
@@ -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 @@ idmap_cfg_start_updates(void)
*/
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 @@ idmap_cfg_load_smf(idmap_cfg_handles_t *handles, idmap_pg_config_t *pgcfg,
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 @@ idmap_cfg_load_smf(idmap_cfg_handles_t *handles, idmap_pg_config_t *pgcfg,
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);
diff --git a/usr/src/lib/smbsrv/libsmb/common/smb_cfg.c b/usr/src/lib/smbsrv/libsmb/common/smb_cfg.c
index a82e55f5ff..0bc13e4a3c 100644
--- a/usr/src/lib/smbsrv/libsmb/common/smb_cfg.c
+++ b/usr/src/lib/smbsrv/libsmb/common/smb_cfg.c
@@ -66,10 +66,11 @@ struct str_val {
#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_encode(char *str_to_encode);
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 @@ smb_config_getstr(smb_cfg_id_t id, char *cbuf, int bufsz)
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 @@ smb_config_setstr(smb_cfg_id_t id, char *value)
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 @@ smb_config_set_idmap_preferred_dc(char *value)
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
*
diff --git a/usr/src/tools/quick/make-idmap b/usr/src/tools/quick/make-idmap
index 13c52089aa..61b4fa4d2c 100755
--- a/usr/src/tools/quick/make-idmap
+++ b/usr/src/tools/quick/make-idmap
@@ -186,7 +186,6 @@ do_tags() {
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