diff options
Diffstat (limited to 'usr/src/lib')
-rw-r--r-- | usr/src/lib/smbsrv/libsmb/common/smb_cfg.c | 35 |
1 files changed, 33 insertions, 2 deletions
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 * |