summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan McDonald <danmcd@mnx.io>2022-11-09 13:46:16 -0500
committerDan McDonald <danmcd@mnx.io>2022-11-09 13:46:16 -0500
commit758597efca5a7022fe4ed7c3b6653ed0068e795e (patch)
tree3c71d18df2484d7c9731f482babe67b16331d356
parent992f4d7cf022e01498ab4493736eebf80367e8e1 (diff)
parent814e0daa42b0648d115fbe8c5d2858e4eb099cbd (diff)
downloadillumos-joyent-758597efca5a7022fe4ed7c3b6653ed0068e795e.tar.gz
[illumos-gate merge]
commit 814e0daa42b0648d115fbe8c5d2858e4eb099cbd 15108 SMB option to enable short names commit 0d5d3873da6f8c195c095c01db06e31cedc0aa5a 15101 WPTS FSA QueryDirectory test cases with ShortName errors commit 76c08ae9d10f4e0b653a6ea98c06a7868246164b 15149 pcieadm help messages should include field list 15151 pcieadm show-devs driver is a bit overloaded
-rw-r--r--usr/src/cmd/pcieadm/pcieadm_cfgspace.c6
-rw-r--r--usr/src/cmd/pcieadm/pcieadm_devs.c45
-rw-r--r--usr/src/cmd/smbsrv/smbd/server.xml4
-rw-r--r--usr/src/lib/libshare/smb/libshare_smb.c3
-rw-r--r--usr/src/lib/smbsrv/libsmb/common/libsmb.h3
-rw-r--r--usr/src/lib/smbsrv/libsmb/common/smb_cfg.c3
-rw-r--r--usr/src/lib/smbsrv/libsmb/common/smb_info.c4
-rw-r--r--usr/src/lib/smbsrv/libsmb/common/smb_kmod.c4
-rw-r--r--usr/src/man/man5/smb.517
-rw-r--r--usr/src/test/util-tests/tests/pcieadm/pcieadm-priv.ksh4
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb2_query_dir.c17
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb2_tree_connect.c1
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_init.c2
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_kshare.c11
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_server.c1
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_tree.c21
-rw-r--r--usr/src/uts/common/smbsrv/smb_ioctl.h3
-rw-r--r--usr/src/uts/common/smbsrv/smbinfo.h3
18 files changed, 117 insertions, 35 deletions
diff --git a/usr/src/cmd/pcieadm/pcieadm_cfgspace.c b/usr/src/cmd/pcieadm/pcieadm_cfgspace.c
index 7ee88a6d58..1ea702872b 100644
--- a/usr/src/cmd/pcieadm/pcieadm_cfgspace.c
+++ b/usr/src/cmd/pcieadm/pcieadm_cfgspace.c
@@ -5244,7 +5244,11 @@ pcieadm_show_cfgspace_help(const char *fmt, ...)
"\t-n\t\tshow printable short names\n"
"\t-H\t\tomit the column header (for -L and -p)\n"
"\t-p\t\tparsable output (requires -o)\n"
- "\t-o field\toutput fields to print (required for -p)\n");
+ "\t-o field\toutput fields to print (required for -p)\n\n"
+ "The following fields are supported:\n"
+ "\thuman\t\ta human-readable description of the specific output\n"
+ "\tshort\t\tthe short name of the value used for filters\n"
+ "\tvalue\t\tthe value of a the given capability, register, etc.\n");
}
int
diff --git a/usr/src/cmd/pcieadm/pcieadm_devs.c b/usr/src/cmd/pcieadm/pcieadm_devs.c
index a831d5e8f2..4d41bad9f4 100644
--- a/usr/src/cmd/pcieadm/pcieadm_devs.c
+++ b/usr/src/cmd/pcieadm/pcieadm_devs.c
@@ -40,6 +40,8 @@ typedef enum pcieadm_show_devs_otype {
PCIEADM_SDO_BDF_DEV,
PCIEADM_SDO_BDF_FUNC,
PCIEADM_SDO_DRIVER,
+ PCIEADM_SDO_INSTANCE,
+ PCIEADM_SDO_INSTNUM,
PCIEADM_SDO_TYPE,
PCIEADM_SDO_VENDOR,
PCIEADM_SDO_DEVICE,
@@ -135,7 +137,7 @@ pcieadm_show_devs_ofmt_cb(ofmt_arg_t *ofarg, char *buf, uint_t buflen)
return (B_FALSE);
}
break;
- case PCIEADM_SDO_DRIVER:
+ case PCIEADM_SDO_INSTANCE:
if (psdo->psdo_driver == NULL || psdo->psdo_instance == -1) {
(void) snprintf(buf, buflen, "--");
} else if (snprintf(buf, buflen, "%s%d", psdo->psdo_driver,
@@ -143,6 +145,21 @@ pcieadm_show_devs_ofmt_cb(ofmt_arg_t *ofarg, char *buf, uint_t buflen)
return (B_FALSE);
}
break;
+ case PCIEADM_SDO_DRIVER:
+ if (psdo->psdo_driver == NULL) {
+ (void) snprintf(buf, buflen, "--");
+ } else if (strlcpy(buf, psdo->psdo_driver, buflen) >= buflen) {
+ return (B_FALSE);
+ }
+ break;
+ case PCIEADM_SDO_INSTNUM:
+ if (psdo->psdo_instance == -1) {
+ (void) snprintf(buf, buflen, "--");
+ } else if (snprintf(buf, buflen, "%d", psdo->psdo_instance) >=
+ buflen) {
+ return (B_FALSE);
+ }
+ break;
case PCIEADM_SDO_PATH:
if (strlcat(buf, psdo->psdo_path, buflen) >= buflen) {
return (B_TRUE);
@@ -248,7 +265,7 @@ pcieadm_show_devs_ofmt_cb(ofmt_arg_t *ofarg, char *buf, uint_t buflen)
return (B_TRUE);
}
-static const char *pcieadm_show_dev_fields = "bdf,type,driver,device";
+static const char *pcieadm_show_dev_fields = "bdf,type,instance,device";
static const char *pcieadm_show_dev_speeds =
"bdf,driver,maxspeed,curspeed,maxwidth,curwidth,supspeeds";
static const ofmt_field_t pcieadm_show_dev_ofmt[] = {
@@ -256,6 +273,8 @@ static const ofmt_field_t pcieadm_show_dev_ofmt[] = {
{ "DID", 6, PCIEADM_SDO_DID, pcieadm_show_devs_ofmt_cb },
{ "BDF", 8, PCIEADM_SDO_BDF, pcieadm_show_devs_ofmt_cb },
{ "DRIVER", 15, PCIEADM_SDO_DRIVER, pcieadm_show_devs_ofmt_cb },
+ { "INSTANCE", 15, PCIEADM_SDO_INSTANCE, pcieadm_show_devs_ofmt_cb },
+ { "INSTNUM", 8, PCIEADM_SDO_INSTNUM, pcieadm_show_devs_ofmt_cb },
{ "TYPE", 15, PCIEADM_SDO_TYPE, pcieadm_show_devs_ofmt_cb },
{ "VENDOR", 30, PCIEADM_SDO_VENDOR, pcieadm_show_devs_ofmt_cb },
{ "DEVICE", 30, PCIEADM_SDO_DEVICE, pcieadm_show_devs_ofmt_cb },
@@ -487,8 +506,26 @@ pcieadm_show_devs_help(const char *fmt, ...)
"\t-H\t\tomit the column header\n"
"\t-o field\toutput fields to print\n"
"\t-p\t\tparsable output (requires -o)\n"
- "\t-s\t\tlist speeds and widths\n");
-
+ "\t-s\t\tlist speeds and widths\n\n"
+ "The following fields are supported:\n"
+ "\tvid\t\tthe PCI vendor ID in hex\n"
+ "\tdid\t\tthe PCI device ID in hex\n"
+ "\tvendor\t\tthe name of the PCI vendor\n"
+ "\tdevice\t\tthe name of the PCI device\n"
+ "\tinstance\tthe name of this particular instance, e.g. igb0\n"
+ "\tdriver\t\tthe name of the driver attached to the device\n"
+ "\tinstnum\t\tthe instance number of a device, e.g. 2 for nvme2\n"
+ "\tpath\t\tthe /devices path of the device\n"
+ "\tbdf\t\tthe PCI bus/device/function, with values in hex\n"
+ "\tbus\t\tthe PCI bus number of the device in hex\n"
+ "\tdev\t\tthe PCI device number of the device in hex\n"
+ "\tfunc\t\tthe PCI function number of the device in hex\n"
+ "\ttype\t\ta string describing the PCIe generation and width\n"
+ "\tmaxspeed\tthe maximum supported PCIe speed of the device\n"
+ "\tcurspeed\tthe current PCIe speed of the device\n"
+ "\tmaxwidth\tthe maximum supported PCIe lane count of the device\n"
+ "\tcurwidth\tthe current lane count of the PCIe device\n"
+ "\tsupspeeds\tthe list of speeds the device supports\n");
}
int
diff --git a/usr/src/cmd/smbsrv/smbd/server.xml b/usr/src/cmd/smbsrv/smbd/server.xml
index 44e3666067..dd45594349 100644
--- a/usr/src/cmd/smbsrv/smbd/server.xml
+++ b/usr/src/cmd/smbsrv/smbd/server.xml
@@ -25,7 +25,7 @@ Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
Copyright 2018 Nexenta Systems, Inc. All rights reserved.
Copyright 2016 Hans Rosenfeld <rosenfeld@grumpf.hope-2000.org>
Copyright 2020 Tintri by DDN, Inc. All rights reserved.
-Copyright 2020 RackTop Systems.
+Copyright 2022 RackTop Systems, Inc.
NOTE: This service manifest is not editable; its contents will
be overwritten by package or patch operations, including
@@ -227,6 +227,8 @@ file.
value='0' override='true'/>
<propval name='print_enable' type='boolean'
value='false' override='true'/>
+ <propval name='short_names' type='boolean'
+ value='false' override='true'/>
<propval name='traverse_mounts' type='boolean'
value='true' override='true'/>
<propval name='max_protocol' type='astring'
diff --git a/usr/src/lib/libshare/smb/libshare_smb.c b/usr/src/lib/libshare/smb/libshare_smb.c
index b926637def..4b5d4a4662 100644
--- a/usr/src/lib/libshare/smb/libshare_smb.c
+++ b/usr/src/lib/libshare/smb/libshare_smb.c
@@ -22,6 +22,7 @@
/*
* Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright 2017 Nexenta Systems, Inc. All rights reserved.
+ * Copyright 2022 RackTop Systems.
*/
/*
@@ -900,6 +901,8 @@ struct smb_proto_option_defs {
SMB_REFRESH_REFRESH },
{ SMB_CI_OPLOCK_ENABLE, 0, 0, true_false_validator,
SMB_REFRESH_REFRESH },
+ { SMB_CI_SHORT_NAMES, 0, 0, true_false_validator,
+ SMB_REFRESH_REFRESH },
};
#define SMB_OPT_NUM \
diff --git a/usr/src/lib/smbsrv/libsmb/common/libsmb.h b/usr/src/lib/smbsrv/libsmb/common/libsmb.h
index 388553e03c..bb21e1021a 100644
--- a/usr/src/lib/smbsrv/libsmb/common/libsmb.h
+++ b/usr/src/lib/smbsrv/libsmb/common/libsmb.h
@@ -22,7 +22,7 @@
/*
* Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright 2020 Tintri by DDN, Inc. All rights reserved.
- * Copyright 2020 RackTop Systems, Inc.
+ * Copyright 2022 RackTop Systems, Inc.
*/
#ifndef _LIBSMB_H
@@ -163,6 +163,7 @@ typedef enum {
SMB_CI_BYPASS_TRAVERSE_CHECKING,
SMB_CI_ENCRYPT_CIPHER,
SMB_CI_NETLOGON_FLAGS,
+ SMB_CI_SHORT_NAMES,
SMB_CI_MAX
} smb_cfg_id_t;
diff --git a/usr/src/lib/smbsrv/libsmb/common/smb_cfg.c b/usr/src/lib/smbsrv/libsmb/common/smb_cfg.c
index b295916cb3..2e38586f22 100644
--- a/usr/src/lib/smbsrv/libsmb/common/smb_cfg.c
+++ b/usr/src/lib/smbsrv/libsmb/common/smb_cfg.c
@@ -21,7 +21,7 @@
/*
* Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright 2022 Tintri by DDN, Inc. All rights reserved.
- * Copyright 2021 RackTop Systems, Inc.
+ * Copyright 2022 RackTop Systems, Inc.
*/
/*
@@ -160,6 +160,7 @@ static smb_cfg_param_t smb_cfg_table[] =
"bypass_traverse_checking", SCF_TYPE_BOOLEAN, 0},
{SMB_CI_ENCRYPT_CIPHER, "encrypt_cipher", SCF_TYPE_ASTRING, 0},
{SMB_CI_NETLOGON_FLAGS, "netlogon_flags", SCF_TYPE_INTEGER, 0},
+ {SMB_CI_SHORT_NAMES, "short_names", SCF_TYPE_BOOLEAN, 0},
/* SMB_CI_MAX */
};
diff --git a/usr/src/lib/smbsrv/libsmb/common/smb_info.c b/usr/src/lib/smbsrv/libsmb/common/smb_info.c
index 1cd213cc9a..dac9f8323e 100644
--- a/usr/src/lib/smbsrv/libsmb/common/smb_info.c
+++ b/usr/src/lib/smbsrv/libsmb/common/smb_info.c
@@ -21,7 +21,7 @@
/*
* Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright 2020 Tintri by DDN, Inc. All rights reserved.
- * Copyright 2020 RackTop Systems, Inc.
+ * Copyright 2022 RackTop Systems, Inc.
*/
#include <sys/types.h>
@@ -157,6 +157,8 @@ smb_load_kconfig(smb_kmod_cfg_t *kcfg)
kcfg->skc_oplock_enable = smb_config_getbool(SMB_CI_OPLOCK_ENABLE);
kcfg->skc_sync_enable = smb_config_getbool(SMB_CI_SYNC_ENABLE);
kcfg->skc_traverse_mounts = smb_config_getbool(SMB_CI_TRAVERSE_MOUNTS);
+ kcfg->skc_short_names = smb_config_getbool(SMB_CI_SHORT_NAMES);
+
kcfg->skc_max_protocol = smb_config_get_max_protocol();
kcfg->skc_min_protocol = smb_config_get_min_protocol();
kcfg->skc_secmode = smb_config_get_secmode();
diff --git a/usr/src/lib/smbsrv/libsmb/common/smb_kmod.c b/usr/src/lib/smbsrv/libsmb/common/smb_kmod.c
index 06654400f1..726e9f1600 100644
--- a/usr/src/lib/smbsrv/libsmb/common/smb_kmod.c
+++ b/usr/src/lib/smbsrv/libsmb/common/smb_kmod.c
@@ -22,7 +22,7 @@
* Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright 2017 Nexenta Systems, Inc. All rights reserved.
* Copyright 2017 Joyent, Inc.
- * Copyright 2020 RackTop Systems, Inc.
+ * Copyright 2022 RackTop Systems, Inc.
*/
#include <sys/types.h>
@@ -89,6 +89,8 @@ smb_kmod_setcfg(smb_kmod_cfg_t *cfg)
ioc.ipv6_enable = cfg->skc_ipv6_enable;
ioc.print_enable = cfg->skc_print_enable;
ioc.traverse_mounts = cfg->skc_traverse_mounts;
+ ioc.short_names = cfg->skc_short_names;
+
ioc.max_protocol = cfg->skc_max_protocol;
ioc.min_protocol = cfg->skc_min_protocol;
ioc.exec_flags = cfg->skc_execflags;
diff --git a/usr/src/man/man5/smb.5 b/usr/src/man/man5/smb.5
index 50977b3e1a..024327b05b 100644
--- a/usr/src/man/man5/smb.5
+++ b/usr/src/man/man5/smb.5
@@ -1,7 +1,7 @@
'\" te
.\" Copyright (c) 2009, Sun Microsystems, Inc. All Rights Reserved.
.\" Copyright 2017, Nexenta Systems, Inc. All Rights Reserved.
-.\" Copyright 2021, RackTop Systems, Inc. All Rights Reserved.
+.\" Copyright 2022, RackTop Systems, Inc. All Rights Reserved.
.\" The contents of this file are subject to the terms of the
.\" Common Development and Distribution License (the "License").
.\" You may not use this file except in compliance with the License.
@@ -17,7 +17,7 @@
.\" fields enclosed by brackets "[]" replaced with your own identifying
.\" information: Portions Copyright [yyyy] [name of copyright owner]
.\"
-.TH SMB 5 "December 28, 2020"
+.TH SMB 5 "January 17, 2022"
.SH NAME
smb \- configuration properties for Solaris CIFS server
.SH DESCRIPTION
@@ -501,6 +501,19 @@ enables anonymous access.
.sp
.ne 2
.na
+\fB\fBshort_names\fR\fR
+.ad
+.sp .6
+.RS 4n
+Enables use of "short names" by SMB clients. The default value is
+\fBfalse\fR because modern SMB clients do not need short names, and
+using short names has some performance cost while listing directories
+and opening or renaming files.
+.RE
+
+.sp
+.ne 2
+.na
\fB\fBsigning_enabled\fR\fR
.ad
.sp .6
diff --git a/usr/src/test/util-tests/tests/pcieadm/pcieadm-priv.ksh b/usr/src/test/util-tests/tests/pcieadm/pcieadm-priv.ksh
index 749e4b5e4b..f5a04e51b2 100644
--- a/usr/src/test/util-tests/tests/pcieadm/pcieadm-priv.ksh
+++ b/usr/src/test/util-tests/tests/pcieadm/pcieadm-priv.ksh
@@ -102,9 +102,9 @@ else
fi
#
-# Do the same based on the device name
+# Do the same based on the device instance.
#
-pcieadm_dev=$($pcieadm_prog show-devs -p -o driver | \
+pcieadm_dev=$($pcieadm_prog show-devs -p -o instance | \
awk '{ if ($1 != "--") { print $1; exit 0 } }')
if [[ -z "$pcieadm_dev" ]]; then
warn "failed to obtain driver based filter"
diff --git a/usr/src/uts/common/fs/smbsrv/smb2_query_dir.c b/usr/src/uts/common/fs/smbsrv/smb2_query_dir.c
index 61a42da2be..6558d88980 100644
--- a/usr/src/uts/common/fs/smbsrv/smb2_query_dir.c
+++ b/usr/src/uts/common/fs/smbsrv/smb2_query_dir.c
@@ -23,6 +23,7 @@
* Use is subject to license terms.
*
* Copyright 2017 Nexenta Systems, Inc. All rights reserved.
+ * Copyright 2022 RackTop Systems, Inc.
*/
/*
@@ -441,7 +442,7 @@ smb2_find_mbc_encode(smb_request_t *sr, smb2_find_args_t *args)
int shortlen = 0;
int rc, starting_offset;
uint32_t next_entry_offset;
- uint32_t mb_flags = SMB_MSGBUF_UNICODE;
+ uint32_t mb_flags = SMB_MSGBUF_UNICODE | SMB_MSGBUF_NOTERM;
uint32_t resume_key;
namelen = smb_wcequiv_strlen(fileinfo->fi_name);
@@ -527,8 +528,11 @@ smb2_find_mbc_encode(smb_request_t *sr, smb2_find_args_t *args)
case FileBothDirectoryInformation: /* 3 */
bzero(buf83, sizeof (buf83));
smb_msgbuf_init(&mb, buf83, sizeof (buf83), mb_flags);
- if (!smb_msgbuf_encode(&mb, "U", fileinfo->fi_shortname))
- shortlen = smb_wcequiv_strlen(fileinfo->fi_shortname);
+ shortlen = smb_msgbuf_encode(&mb, "U", fileinfo->fi_shortname);
+ if (shortlen < 0) {
+ shortlen = 0;
+ bzero(buf83, sizeof (buf83));
+ }
rc = smb_mbc_encodef(
&sr->raw_data, "llTTTTqqlllb.24c",
@@ -553,8 +557,11 @@ smb2_find_mbc_encode(smb_request_t *sr, smb2_find_args_t *args)
case FileIdBothDirectoryInformation: /* 37 */
bzero(buf83, sizeof (buf83));
smb_msgbuf_init(&mb, buf83, sizeof (buf83), mb_flags);
- if (!smb_msgbuf_encode(&mb, "U", fileinfo->fi_shortname))
- shortlen = smb_wcequiv_strlen(fileinfo->fi_shortname);
+ shortlen = smb_msgbuf_encode(&mb, "U", fileinfo->fi_shortname);
+ if (shortlen < 0) {
+ shortlen = 0;
+ bzero(buf83, sizeof (buf83));
+ }
rc = smb_mbc_encodef(
&sr->raw_data, "llTTTTqqlllb.24c..q",
diff --git a/usr/src/uts/common/fs/smbsrv/smb2_tree_connect.c b/usr/src/uts/common/fs/smbsrv/smb2_tree_connect.c
index c783d2b19e..a371f90e8d 100644
--- a/usr/src/uts/common/fs/smbsrv/smb2_tree_connect.c
+++ b/usr/src/uts/common/fs/smbsrv/smb2_tree_connect.c
@@ -127,6 +127,7 @@ errout:
/*
* XXX These need work..
+ * See SMB1 flags in tcon->optional_support
*/
if (tree->t_encrypt != SMB_CONFIG_DISABLED)
ShareFlags = SMB2_SHAREFLAG_ENCRYPT_DATA;
diff --git a/usr/src/uts/common/fs/smbsrv/smb_init.c b/usr/src/uts/common/fs/smbsrv/smb_init.c
index f7e1739367..9f8d1130f0 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_init.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_init.c
@@ -22,6 +22,7 @@
* Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright 2014 Nexenta Systems, Inc. All rights reserved.
* Copyright 2019 Joyent, Inc.
+ * Copyright 2022 RackTop Systems, Inc.
*/
#include <sys/types.h>
@@ -67,7 +68,6 @@ int smb_maxbufsize = SMB_NT_MAXBUF;
int smb_flush_required = 1;
int smb_dirsymlink_enable = 1;
int smb_sign_debug = 0;
-int smb_shortnames = 1;
uint_t smb_audit_flags =
#ifdef DEBUG
SMB_AUDIT_NODE;
diff --git a/usr/src/uts/common/fs/smbsrv/smb_kshare.c b/usr/src/uts/common/fs/smbsrv/smb_kshare.c
index 5c5458bca5..056619d90b 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_kshare.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_kshare.c
@@ -23,6 +23,7 @@
* Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright 2017 Nexenta Systems, Inc. All rights reserved.
* Copyright 2017 Joyent, Inc.
+ * Copyright 2022 RackTop Systems.
*/
#include <smbsrv/smb_door.h>
@@ -509,8 +510,14 @@ out:
int
smb_kshare_info(smb_ioc_shareinfo_t *ioc)
{
- ioc->shortnames = smb_shortnames;
- return (0);
+ smb_server_t *sv;
+ int rc;
+
+ if ((rc = smb_server_lookup(&sv)) == 0) {
+ ioc->shortnames = sv->sv_cfg.skc_short_names;
+ smb_server_release(sv);
+ }
+ return (rc);
}
/*
diff --git a/usr/src/uts/common/fs/smbsrv/smb_server.c b/usr/src/uts/common/fs/smbsrv/smb_server.c
index af568986c9..2269adf34f 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_server.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_server.c
@@ -2139,6 +2139,7 @@ smb_server_store_cfg(smb_server_t *sv, smb_ioc_cfg_t *ioc)
sv->sv_cfg.skc_ipv6_enable = ioc->ipv6_enable;
sv->sv_cfg.skc_print_enable = ioc->print_enable;
sv->sv_cfg.skc_traverse_mounts = ioc->traverse_mounts;
+ sv->sv_cfg.skc_short_names = ioc->short_names;
sv->sv_cfg.skc_max_protocol = ioc->max_protocol;
sv->sv_cfg.skc_min_protocol = ioc->min_protocol;
sv->sv_cfg.skc_encrypt = ioc->encrypt;
diff --git a/usr/src/uts/common/fs/smbsrv/smb_tree.c b/usr/src/uts/common/fs/smbsrv/smb_tree.c
index 2aadc3bf38..b0f2d9b222 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_tree.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_tree.c
@@ -22,7 +22,7 @@
/*
* Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2016 by Delphix. All rights reserved.
- * Copyright 2021 Tintri by DDN, Inc. All rights reserved.
+ * Copyright 2022 Tintri by DDN, Inc. All rights reserved.
*/
/*
@@ -743,15 +743,14 @@ smb_tree_connect_disk(smb_request_t *sr, smb_arg_tcon_t *tcon)
if (si->shr_flags & SMB_SHRF_DFSROOT)
tcon->optional_support |= SMB_SHARE_IS_IN_DFS;
- /* if 'smb' zfs property: shortnames=disabled */
- if (!smb_shortnames)
- sr->arg.tcon.optional_support |= SMB_UNIQUE_FILE_NAME;
-
tree = smb_tree_alloc(sr, si, snode, access, sr->sr_cfg->skc_execflags);
if (tree == NULL)
return (NT_STATUS_INSUFF_SERVER_RESOURCES);
+ if (tree->t_flags & SMB_TREE_SHORTNAMES)
+ tcon->optional_support |= SMB_UNIQUE_FILE_NAME;
+
if (tree->t_execflags & SMB_EXEC_MAP) {
smb_tree_set_execinfo(tree, &execinfo, SMB_EXEC_MAP);
@@ -1097,6 +1096,7 @@ smb_tree_get_sharename(char *unc_path)
/*
* Obtain the tree attributes: volume name, typename and flags.
+ * Called only with DISK and PRINTQ shares.
*/
static int
smb_tree_getattr(const smb_kshare_t *si, smb_node_t *node, smb_tree_t *tree)
@@ -1187,6 +1187,9 @@ smb_tree_get_volname(vfs_t *vfsp, smb_tree_t *tree)
}
/*
+ * Get flags from the VFS (and other places) for a new tree.
+ * Called only with DISK and PRINTQ shares.
+ *
* Always set "unicode on disk" because we always use utf8 names locally.
* Always set ACL support because the VFS will fake ACLs for file systems
* that don't support them.
@@ -1238,17 +1241,13 @@ smb_tree_get_flags(const smb_kshare_t *si, vfs_t *vfsp, smb_tree_t *tree)
if (si->shr_flags & SMB_SHRF_FSO)
flags |= SMB_TREE_FORCE_L2_OPLOCK;
- if (ssn->s_cfg.skc_oplock_enable) {
- /* if 'smb' zfs property: oplocks=enabled */
+ if (ssn->s_cfg.skc_oplock_enable)
flags |= SMB_TREE_OPLOCKS;
- }
- /* Global config option for now. Later make per-share. */
if (ssn->s_cfg.skc_traverse_mounts)
flags |= SMB_TREE_TRAVERSE_MOUNTS;
- /* if 'smb' zfs property: shortnames=enabled */
- if (smb_shortnames)
+ if (ssn->s_cfg.skc_short_names)
flags |= SMB_TREE_SHORTNAMES;
if (vfsp->vfs_flag & VFS_RDONLY)
diff --git a/usr/src/uts/common/smbsrv/smb_ioctl.h b/usr/src/uts/common/smbsrv/smb_ioctl.h
index fcd912a744..3144c36d03 100644
--- a/usr/src/uts/common/smbsrv/smb_ioctl.h
+++ b/usr/src/uts/common/smbsrv/smb_ioctl.h
@@ -22,7 +22,7 @@
* Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright 2017 Nexenta Systems, Inc. All rights reserved.
* Copyright 2017 Joyent, Inc.
- * Copyright 2020 RackTop Systems, Inc.
+ * Copyright 2022 RackTop Systems, Inc.
*/
#ifndef _SMB_IOCTL_H_
@@ -172,6 +172,7 @@ typedef struct smb_ioc_cfg {
int32_t ipv6_enable;
int32_t print_enable;
int32_t traverse_mounts;
+ int32_t short_names;
uint32_t max_protocol;
uint32_t min_protocol;
uint32_t encrypt;
diff --git a/usr/src/uts/common/smbsrv/smbinfo.h b/usr/src/uts/common/smbsrv/smbinfo.h
index e83d871bff..bb42925757 100644
--- a/usr/src/uts/common/smbsrv/smbinfo.h
+++ b/usr/src/uts/common/smbsrv/smbinfo.h
@@ -21,7 +21,7 @@
/*
* Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright 2020 Tintri by DDN, Inc. All rights reserved.
- * Copyright 2021 RackTop Systems, Inc.
+ * Copyright 2022 RackTop Systems, Inc.
*/
#ifndef _SMBSRV_SMBINFO_H
@@ -158,6 +158,7 @@ typedef struct smb_kmod_cfg {
int32_t skc_ipv6_enable;
int32_t skc_print_enable;
int32_t skc_traverse_mounts;
+ int32_t skc_short_names;
uint32_t skc_max_protocol; /* SMB_VERS_... */
uint32_t skc_min_protocol; /* SMB_VERS_... */
smb_cfg_val_t skc_encrypt; /* EncryptData and RejectUnencryptedAccess */