diff options
author | Gordon Ross <gwr@nexenta.com> | 2019-02-07 16:43:45 -0500 |
---|---|---|
committer | Gordon Ross <gwr@nexenta.com> | 2019-06-06 11:13:51 -0400 |
commit | a774f103e3771c7c04da927df024cf184248ad8f (patch) | |
tree | 6dd008922f8c791cb75b2e2c95c7839f49ac3089 | |
parent | fea136a04b3f86ab3ec31e4c157379030fee9ade (diff) | |
download | illumos-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.xml | 4 | ||||
-rw-r--r-- | usr/src/cmd/idmap/idmapd/idmap_config.c | 26 | ||||
-rw-r--r-- | usr/src/lib/smbsrv/libsmb/common/smb_cfg.c | 35 | ||||
-rwxr-xr-x | usr/src/tools/quick/make-idmap | 1 |
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 |