1 /*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21 /*
22 * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
23 * Copyright 2018 Nexenta Systems, Inc. All rights reserved.
24 * Copyright 2020 RackTop Systems, Inc.
25 */
26
27 #ifndef _SMBSRV_SMBINFO_H
28 #define _SMBSRV_SMBINFO_H
29
30 #include <sys/types.h>
31 #include <sys/uuid.h>
32 #include <smbsrv/netbios.h>
33 #include <netinet/in.h>
34 #include <smbsrv/smb_inet.h>
35
36 #ifdef __cplusplus
37 extern "C" {
38 #endif
39
40 /*
41 * Native OS types used in SmbSessionSetupX.
42 */
43 #ifndef NATIVE_OS_DEFINED
44 #define NATIVE_OS_DEFINED
45
46 #define NATIVE_OS_UNKNOWN 0x00000000
47 #define NATIVE_OS_WINNT 0x00000001
48 #define NATIVE_OS_WIN95 0x00000002
49 #define NATIVE_OS_MACOS 0x00000003
50 #define NATIVE_OS_WIN2000 0x00000004
51
52 #endif /* NATIVE_OS_DEFINED */
53
54
55 /*
56 * Native lanman types in SmbSessionSetupX. Note that these values
57 * are not directly related to the negotiated protocol dialect.
58 */
59 #ifndef NATIVE_LANMAN_DEFINED
60 #define NATIVE_LANMAN_DEFINED
61
62 #define NATIVE_LM_NONE 0x00000000
63 #define NATIVE_LM_NT 0x00000001
64 #define NATIVE_LM_WIN2000 0x00000002
65
66 #endif /* NATIVE_LANMAN_DEFINED */
67
68
69 /* PDC types to be used in user authentication process */
70
71 #define PDC_UNKNOWN 0
72 #define PDC_WINNT 1
73 #define PDC_WIN2000 2
74 #define PDC_WINXP 3
75 #define PDC_SAMBA 4
76
77 /*
78 * Please replace the use of MAX_NETWORKS with SMB_PI_MAX_NETWORKS if
79 * you find it used in conjunction with smbparm_info and maybe one day
80 * there will be just a single definition (here) throughout the code.
81 */
82 #ifndef MAX_NETWORKS
83 #define MAX_NETWORKS 36
84 #endif /* MAX_NETWORKS */
85
86 #define SMB_PI_MAX_NETWORKS 36
87 #define SMB_PI_MAX_WINS 2
88
89 #define SMB_SECMODE_WORKGRP 1
90 #define SMB_SECMODE_DOMAIN 2
91
92 #define SMB_PI_MAX_HOST 48
93 #define SMB_PI_MAX_DOMAIN 256
94 #define SMB_PI_MAX_SCOPE 16
95 #define SMB_PI_MAX_COMMENT 58
96 #define SMB_PI_MAX_NATIVE_OS 32
97 #define SMB_PI_MAX_LANMAN 32
98 #define SMB_PI_MAX_NEGTOK 256 /* GUID and SMB negotiate token */
99
100 #define SMB_PI_KEEP_ALIVE_MIN (90 * 60)
101 /*
102 * Some older clients (Windows 98) only handle the low byte
103 * of the max workers value. If the low byte is less than
104 * SMB_PI_MAX_WORKERS_MIN we set it to SMB_PI_MAX_WORKERS_MIN.
105 * SMB_PI_MAX_WORKERS_MIN must therefore be < 256
106 */
107 #define SMB_PI_MAX_WORKERS_MIN 64
108 #define SMB_PI_MAX_WORKERS_DEF 1024
109 #define SMB_PI_MAX_WORKERS_MAX 16384
110
111 /*
112 * Min/max initial credit grant and credit limit we allow to be
113 * configured via SMB_CI_INITIAL_CREDITS, SMB_CI_MAXIMUM_CREDITS
114 */
115 #define SMB_PI_INITIAL_CREDITS_MIN 16
116 #define SMB_PI_INITIAL_CREDITS_DEF 20
117 #define SMB_PI_INITIAL_CREDITS_MAX 256
118
119 #define SMB_PI_MAXIMUM_CREDITS_MIN 64
120 #define SMB_PI_MAXIMUM_CREDITS_DEF 1000
121 #define SMB_PI_MAXIMUM_CREDITS_MAX 1024
122
123 /*
124 * sv_size is used by the RPC services and should be set to
125 * sizeof (smb_version_t).
126 */
127 typedef struct smb_version {
128 uint32_t sv_size;
129 uint32_t sv_major;
130 uint32_t sv_minor;
131 uint32_t sv_build_number;
132 uint32_t sv_platform_id;
133 } smb_version_t;
134
135 typedef enum smb_cfg_val {
136 SMB_CONFIG_DISABLED = 0,
137 SMB_CONFIG_ENABLED = 1,
138 SMB_CONFIG_REQUIRED = 2
139 } smb_cfg_val_t;
140
141 void smb_cfg_set_require(const char *, smb_cfg_val_t *);
142
143 /* See also: smb_ioc_cfg_t */
144 typedef struct smb_kmod_cfg {
145 uint32_t skc_maxworkers;
146 uint32_t skc_maxconnections;
147 uint32_t skc_keepalive;
148 int32_t skc_restrict_anon;
149 int32_t skc_signing_enable;
150 int32_t skc_signing_required;
151 int32_t skc_oplock_enable;
152 int32_t skc_sync_enable;
153 int32_t skc_secmode;
154 int32_t skc_netbios_enable;
155 int32_t skc_ipv6_enable;
156 int32_t skc_print_enable;
157 int32_t skc_traverse_mounts;
158 uint32_t skc_max_protocol; /* SMB_VERS_... */
159 uint32_t skc_min_protocol; /* SMB_VERS_... */
160 smb_cfg_val_t skc_encrypt; /* EncryptData and RejectUnencryptedAccess */
161 uint16_t skc_encrypt_cipher; /* 3.1.1 encryption cipher */
162 uint32_t skc_execflags;
163 uint32_t skc_negtok_len;
164 smb_version_t skc_version;
165 uint16_t skc_initial_credits;
166 uint16_t skc_maximum_credits;
167 uuid_t skc_machine_uuid;
168 uchar_t skc_negtok[SMB_PI_MAX_NEGTOK];
169 char skc_native_os[SMB_PI_MAX_NATIVE_OS];
170 char skc_native_lm[SMB_PI_MAX_LANMAN];
171 char skc_nbdomain[NETBIOS_NAME_SZ];
172 char skc_fqdn[SMB_PI_MAX_DOMAIN];
173 char skc_hostname[SMB_PI_MAX_HOST];
174 char skc_system_comment[SMB_PI_MAX_COMMENT];
175 } smb_kmod_cfg_t;
176
177 #define SMB_EXEC_MAP 0x01
178 #define SMB_EXEC_UNMAP 0x02
179 #define SMB_EXEC_TERM 0x04
180
181 #define SMB_EXEC_DISP_CONTINUE "continue"
182 #define SMB_EXEC_DISP_TERMINATE "terminate"
183
184 /*
185 * Major version numbers
186 */
187 #define SMB_MAJOR_NT 4 /* Windows 95/98/Me, Windows NT4.0 */
188 #define SMB_MAJOR_2000 5
189 #define SMB_MAJOR_XP 5
190 #define SMB_MAJOR_2003 5
191 #define SMB_MAJOR_VISTA 6
192 #define SMB_MAJOR_2008 6
193 #define SMB_MAJOR_2008R2 6
194 #define SMB_MAJOR_7 6
195
196 /*
197 * Minor version numbers
198 */
199 #define SMB_MINOR_NT 0
200 #define SMB_MINOR_2000 0
201 #define SMB_MINOR_XP 1
202 #define SMB_MINOR_2003 2
203 #define SMB_MINOR_VISTA 0
204 #define SMB_MINOR_2008 0
205 #define SMB_MINOR_2008R2 1
206 #define SMB_MINOR_7 1
207
208 /*
209 * Max version length in string format
210 */
211 #define SMB_VERSTR_LEN 8
212
213 int smbnative_os_value(const char *);
214 int smbnative_lm_value(const char *);
215 int smbnative_pdc_value(const char *);
216 const char *smbnative_os_str(smb_version_t *);
217 const char *smbnative_lm_str(smb_version_t *);
218
219 /*
220 * Support for passthrough authentication.
221 */
222 #define AUTH_USER_GRANT 0x00000000
223 #define AUTH_GUEST_GRANT 0x00000001
224 #define AUTH_IPC_ONLY_GRANT 0x00000002
225
226 /*
227 * Defined SMB1, SMB2(+) protocol versions, as returned by
228 * smb_config_get_max_protocol()
229 */
230 #define SMB_VERS_1 1 /* arbitrary value < 0x200 */
231 #define SMB_VERS_2_BASE 0x200 /* for (SMB2 or higher?) tests */
232 #define SMB_VERS_2_002 0x202 /* "2.002" */
233 #define SMB_VERS_2_1 0x210 /* "2.1" */
234 #define SMB_VERS_3_0 0x300 /* "3.0" */
235 #define SMB_VERS_3_02 0x302 /* "3.02" */
236 #define SMB_VERS_3_11 0x311 /* "3.11" */
237
238 #define SMB3_HASH_SHA512 1
239
240 #define SMB3_CIPHER_NONE 0
241 #define SMB3_CIPHER_AES128_CCM 1
242 #define SMB3_CIPHER_AES128_GCM 2
243
244 #ifdef __cplusplus
245 }
246 #endif
247
248 #endif /* _SMBSRV_SMBINFO_H */