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