Print this page
NEX-14666 Need to provide SMB 2.1 Client
NEX-17187 panic in smbfs_acl_store
NEX-17231 smbfs create xattr files finds wrong file
NEX-17224 smbfs lookup EINVAL should be ENOENT
NEX-17260 SMB1 client fails to list directory after NEX-14666
Reviewed by: Evan Layton <evan.layton@nexenta.com>
Reviewed by: Matt Barden <matt.barden@nexenta.com>
Reviewed by: Rick McNeal <rick.mcneal@nexenta.com>
Reviewed by: Saso Kiselkov <saso.kiselkov@nexenta.com>
Reviewed by: Joyce McIntosh <joyce.mcintosh@nexenta.com>
and: (cleanup)
NEX-16824 SMB client connection setup rework
NEX-17232 SMB client reconnect failures
Reviewed by: Evan Layton <evan.layton@nexenta.com>
Reviewed by: Matt Barden <matt.barden@nexenta.com>
and: (improve debug)
| Split |
Close |
| Expand all |
| Collapse all |
--- old/usr/src/uts/common/netsmb/smb_dev.h
+++ new/usr/src/uts/common/netsmb/smb_dev.h
1 1 /*
2 2 * Copyright (c) 2000-2001 Boris Popov
3 3 * All rights reserved.
4 4 *
5 5 * Redistribution and use in source and binary forms, with or without
6 6 * modification, are permitted provided that the following conditions
7 7 * are met:
8 8 * 1. Redistributions of source code must retain the above copyright
9 9 * notice, this list of conditions and the following disclaimer.
10 10 * 2. Redistributions in binary form must reproduce the above copyright
11 11 * notice, this list of conditions and the following disclaimer in the
12 12 * documentation and/or other materials provided with the distribution.
13 13 * 3. All advertising materials mentioning features or use of this software
14 14 * must display the following acknowledgement:
15 15 * This product includes software developed by Boris Popov.
16 16 * 4. Neither the name of the author nor the names of any co-contributors
17 17 * may be used to endorse or promote products derived from this software
18 18 * without specific prior written permission.
19 19 *
20 20 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
21 21 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 22 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23 23 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
24 24 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25 25 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
↓ open down ↓ |
25 lines elided |
↑ open up ↑ |
26 26 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27 27 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28 28 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29 29 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30 30 * SUCH DAMAGE.
31 31 *
32 32 * $Id: smb_dev.h,v 1.10.178.1 2005/05/27 02:35:29 lindak Exp $
33 33 */
34 34
35 35 /*
36 - * Copyright 2011 Nexenta Systems, Inc. All rights reserved.
37 36 * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
38 37 * Use is subject to license terms.
38 + *
39 + * Copyright 2018 Nexenta Systems, Inc. All rights reserved.
39 40 */
40 41
41 42 #ifndef _NETSMB_DEV_H_
42 43 #define _NETSMB_DEV_H_
43 44
44 45 /*
45 46 * This file defines an internal ABI for the "nsmb" driver,
46 47 * particularly the various data structures passed to ioctl.
47 48 * In order to avoid some messy 32-bit to 64-bit conversions
48 49 * in the driver, we take pains to define all data structures
49 50 * that pass across the user/kernel boundary in a way that
50 51 * makes them invariant across 32-bit and 64-bit ABIs.
51 52 * This invariance is checked during the driver build
52 53 * using a mechanism similar to genassym.h builds.
53 54 *
54 55 * If you change any of the ioctl data structures in
55 56 * this file, YOU MUST ALSO edit this file:
56 57 * uts/common/fs/smbclnt/netsmb/offsets.in
57 58 * and then verify the invariance describe above.
58 59 *
59 60 * Also, remember to "bump" NSMB_VER below when
60 61 * any part of this user/kernel I/F changes.
61 62 */
62 63
63 64 #include <sys/types.h>
|
↓ open down ↓ |
15 lines elided |
↑ open up ↑ |
64 65 #include <sys/socket_impl.h>
65 66 #include <netinet/in.h>
66 67
67 68 #define NSMB_NAME "nsmb"
68 69
69 70 /*
70 71 * Update NSMB_VER* if any of the ioctl codes and/or
71 72 * associated structures change in ways that would
72 73 * make them incompatible with an old driver.
73 74 */
74 -#define NSMB_VERMAJ 1
75 -#define NSMB_VERMIN 4000
76 -#define NSMB_VERSION (NSMB_VERMAJ * 100000 + NSMB_VERMIN)
75 +#define NSMB_VERMAJ 2
76 +#define NSMB_VERMIN 0x100
77 +#define NSMB_VERSION ((NSMB_VERMAJ << 16) | NSMB_VERMIN)
77 78
78 79 /*
79 80 * Some errno values we need to expose to the library.
80 81 * NB: these are also defined in the library smbfs_api.h
81 82 * to avoid exposing all of this stuff in that API.
82 83 *
83 84 * EBADRPC is used for message decoding errors.
84 85 * EAUTH is used for CIFS authentication errors.
85 86 */
86 87 #ifndef EBADRPC
87 88 #define EBADRPC 113
88 89 #endif
89 90 #ifndef EAUTH
90 91 #define EAUTH 114
91 92 #endif
92 93
93 94 /*
94 95 * Upper/lower case options
95 96 */
96 97 #define SMB_CS_NONE 0x0000
97 98 #define SMB_CS_UPPER 0x0001 /* convert passed string to upper case */
98 99 #define SMB_CS_LOWER 0x0002 /* convert passed string to lower case */
99 100
100 101 /*
101 102 * access mode stuff (see also smb_lib.h)
102 103 */
103 104 #define SMBM_ANY_OWNER ((uid_t)-1)
|
↓ open down ↓ |
17 lines elided |
↑ open up ↑ |
104 105 #define SMBM_ANY_GROUP ((gid_t)-1)
105 106
106 107 /*
107 108 * Option flags in smbioc_ossn.ioc_opt
108 109 * and vcspec.optflags
109 110 */
110 111 #define SMBVOPT_CREATE 0x0001 /* create object if necessary */
111 112 #define SMBVOPT_PRIVATE 0x0002 /* connection should be private */
112 113 #define SMBVOPT_SINGLESHARE 0x0004 /* keep only one share at this VC */
113 114 #define SMBVOPT_PERMANENT 0x0010 /* object will keep last reference */
114 -#define SMBVOPT_EXT_SEC 0x0020 /* extended security negotiation */
115 -#define SMBVOPT_USE_KEYCHAIN 0x0040 /* get p/w from keychain */
116 -#define SMBVOPT_KC_DOMAIN 0x0080 /* keychain lookup uses domain */
115 +#define SMBVOPT_ANONYMOUS 0x0020 /* using a NULL session */
117 116
118 -#define SMBVOPT_SIGNING_ENABLED 0x0100 /* sign if server agrees */
119 -#define SMBVOPT_SIGNING_REQUIRED 0x0200 /* signing required */
120 -#define SMBVOPT_SIGNING_MASK 0x0300 /* all signing bits */
117 +#define SMBVOPT_SIGNING_ENABLED 0x10000 /* sign if server agrees */
118 +#define SMBVOPT_SIGNING_REQUIRED 0x20000 /* signing required */
119 +#define SMBVOPT_SIGNING_MASK 0x30000 /* all signing bits */
121 120
121 +#define SMB2_DIALECT_BASE 0x0200
122 +#define SMB2_DIALECT_0202 0x0202
123 +#define SMB2_DIALECT_02ff 0x02ff
124 +#define SMB2_DIALECT_0210 0x0210
125 +#define SMB2_DIALECT_0300 0x0300
126 +#define SMB2_DIALECT_0302 0x0302
127 +
128 +/* Maximum supported dialect (for ssn_maxver) */
129 +#define SMB2_DIALECT_MAX SMB2_DIALECT_0210
130 +
122 131 /*
123 132 * Option flags in smbioc_oshare.ioc_opt
124 133 * and sharespec.optflags
125 134 */
126 135 #define SMBSOPT_CREATE SMBVOPT_CREATE
127 136 #define SMBSOPT_PERMANENT SMBVOPT_PERMANENT
128 137
129 138 /* All user and machine names. */
130 139 #define SMBIOC_MAX_NAME 256
131 140
132 141 /*
133 142 * Size of storage for p/w hashes.
134 143 * Also for SMBIOC_GETSSNKEY.
135 144 */
136 145 #define SMBIOC_HASH_SZ 16
137 146
138 147 /*
139 148 * network IO daemon states
140 - * really connection states.
141 149 */
142 150 enum smbiod_state {
143 - SMBIOD_ST_IDLE = 0, /* no user requests enqueued yet */
144 - SMBIOD_ST_RECONNECT, /* a [re]connect attempt is in progress */
151 + SMBIOD_ST_UNINIT = 0, /* uninitialized */
152 + SMBIOD_ST_RECONNECT, /* a [re]connect attempt requested */
145 153 SMBIOD_ST_RCFAILED, /* a reconnect attempt has failed */
146 - SMBIOD_ST_VCACTIVE, /* session established */
154 + SMBIOD_ST_CONNECTED, /* Transport (TCP) connected */
155 + SMBIOD_ST_NEGOTIATED, /* Negotiated SMB/SMB2+ */
156 + SMBIOD_ST_AUTHCONT, /* Session setup continuing */
157 + SMBIOD_ST_AUTHFAIL, /* Session setup failed */
158 + SMBIOD_ST_AUTHOK, /* Session setup success */
159 + SMBIOD_ST_VCACTIVE, /* iod_work running */
160 + SMBIOD_ST_IDLE, /* no trees, will go DEAD */
147 161 SMBIOD_ST_DEAD /* connection gone, no IOD */
148 162 };
149 163
150 164
151 165 /*
152 166 * We're now using structures that are invariant
153 167 * across 32-bit vs 64-bit compilers for all
154 168 * member sizes and offsets. Scalar members
155 169 * simply have to use fixed-size types.
156 170 * Pointers are a little harder...
157 171 * We use this union for all pointers that
158 172 * must pass between user and kernel.
159 173 */
160 174 typedef union lptr {
161 175 uint64_t lp_ll;
162 176 #ifdef _LP64
163 177 void *lp_ptr;
164 178 #endif
165 179 #ifdef _ILP32
166 180 void *_lp_p2[2];
167 181 #ifdef _LITTLE_ENDIAN
168 182 #define lp_ptr _lp_p2[0]
169 183 #define lp_pad _lp_p2[1]
170 184 #else /* _ENDIAN */
171 185 #define lp_pad _lp_p2[0]
172 186 #define lp_ptr _lp_p2[1]
173 187 #endif /* _ENDIAN */
174 188 #endif /* _ILP32 */
175 189 } lptr_t;
176 190
177 191 /*
178 192 * Handy union of sockaddr types we use.
179 193 * Type discriminator is sa_family
180 194 */
181 195 union smbioc_sockaddr {
182 196 struct sockaddr sa; /* generic */
183 197 struct sockaddr_in sin;
184 198 struct sockaddr_in6 sin6;
185 199 };
186 200 typedef union smbioc_sockaddr smbioc_sockaddr_t;
187 201
188 202 /*
189 203 * This is what identifies a session.
190 204 */
191 205 struct smbioc_ssn_ident {
192 206 smbioc_sockaddr_t id_srvaddr;
193 207 char id_domain[SMBIOC_MAX_NAME];
194 208 char id_user[SMBIOC_MAX_NAME];
195 209 };
196 210 typedef struct smbioc_ssn_ident smbioc_ssn_ident_t;
|
↓ open down ↓ |
40 lines elided |
↑ open up ↑ |
197 211
198 212 /*
199 213 * Flags for smbioc_ossn.ssn_opt
200 214 */
201 215 #define SMBLK_CREATE SMBVOPT_CREATE
202 216
203 217 /*
204 218 * Structure used with SMBIOC_SSN_FIND, _CREATE
205 219 */
206 220 struct smbioc_ossn {
207 - uint32_t ssn_vopt; /* i.e. SMBVOPT_CREATE */
208 221 uint32_t ssn_owner; /* Unix owner (UID) */
222 + uint32_t ssn_vopt; /* i.e. SMBVOPT_CREATE */
223 + uint16_t ssn_minver; /* Min SMB version. */
224 + uint16_t ssn_maxver; /* Max SMB version. */
209 225 smbioc_ssn_ident_t ssn_id;
210 226 char ssn_srvname[SMBIOC_MAX_NAME];
211 227 };
212 228 typedef struct smbioc_ossn smbioc_ossn_t;
213 229 /* Convenience names for members under ssn_id */
214 230 #define ssn_srvaddr ssn_id.id_srvaddr
215 231 #define ssn_domain ssn_id.id_domain
216 232 #define ssn_user ssn_id.id_user
217 233
218 234 /*
219 235 * Structure used with SMBIOC_TREE_FIND, _CONNECT
220 236 */
221 237 struct smbioc_oshare {
222 238 uint32_t sh_use; /* requested */
223 239 uint32_t sh_type; /* returned */
224 240 char sh_name[SMBIOC_MAX_NAME];
|
↓ open down ↓ |
6 lines elided |
↑ open up ↑ |
225 241 char sh_pass[SMBIOC_MAX_NAME];
226 242 };
227 243 typedef struct smbioc_oshare smbioc_oshare_t;
228 244
229 245 typedef struct smbioc_tcon {
230 246 int32_t tc_flags;
231 247 int32_t tc_opt;
232 248 smbioc_oshare_t tc_sh;
233 249 } smbioc_tcon_t;
234 250
235 -
236 251 /*
237 - * Negotiated protocol parameters
238 - */
239 -struct smb_sopt {
240 - int16_t sv_proto; /* protocol dialect */
241 - uchar_t sv_sm; /* security mode */
242 - int16_t sv_tz; /* offset in min relative to UTC */
243 - uint16_t sv_maxmux; /* max number of outstanding rq's */
244 - uint16_t sv_maxvcs; /* max number of VCs */
245 - uint16_t sv_rawmode;
246 - uint32_t sv_maxtx; /* maximum transmit buf size */
247 - uint32_t sv_maxraw; /* maximum raw-buffer size */
248 - uint32_t sv_skey; /* session key */
249 - uint32_t sv_caps; /* capabilites SMB_CAP_ */
250 -};
251 -typedef struct smb_sopt smb_sopt_t;
252 -
253 -/*
254 - * State carried in/out of the driver by the IOD thread.
255 - * Inside the driver, these are members of the "VC" object.
256 - */
257 -struct smb_iods {
258 - int32_t is_tran_fd; /* transport FD */
259 - uint32_t is_vcflags; /* SMBV_... */
260 - uint8_t is_hflags; /* SMB header flags */
261 - uint16_t is_hflags2; /* SMB header flags2 */
262 - uint16_t is_smbuid; /* SMB header UID */
263 - uint16_t is_next_mid; /* SMB header MID */
264 - uint32_t is_txmax; /* max tx/rx packet size */
265 - uint32_t is_rwmax; /* max read/write data size */
266 - uint32_t is_rxmax; /* max readx data size */
267 - uint32_t is_wxmax; /* max writex data size */
268 - uint8_t is_ssn_key[SMBIOC_HASH_SZ]; /* session key */
269 - /* Signing state */
270 - uint32_t is_next_seq; /* my next sequence number */
271 - uint32_t is_u_maclen; /* MAC key length */
272 - lptr_t is_u_mackey; /* user-space ptr! */
273 -};
274 -typedef struct smb_iods smb_iods_t;
275 -
276 -/*
277 252 * This is the operational state information passed
278 253 * in and out of the driver for SMBIOC_SSN_WORK
279 254 */
280 255 struct smbioc_ssn_work {
281 - smb_iods_t wk_iods;
282 - smb_sopt_t wk_sopt;
283 - int wk_out_state;
256 + uint32_t wk_out_state; /* out-only */
257 + uint32_t wk_u_ssnkey_len; /* ssn key length */
258 + lptr_t wk_u_ssnkey_buf; /* user-space ptr! */
259 + uint32_t wk_u_auth_rlen; /* recv auth tok len */
260 + uint32_t wk_u_auth_wlen; /* send auth tok len */
261 + lptr_t wk_u_auth_rbuf; /* recv auth tok buf */
262 + lptr_t wk_u_auth_wbuf; /* send auth tok buf */
263 + uint8_t wk_cl_guid[16]; /* client GUID */
284 264 };
285 265 typedef struct smbioc_ssn_work smbioc_ssn_work_t;
286 266
287 267 /*
288 268 * User-level SMB requests
289 269 */
290 270
291 -/*
292 - * SMBIOC_REQUEST (simple SMB request)
293 - */
294 -typedef struct smbioc_rq {
295 - uchar_t ioc_cmd;
296 - uint8_t ioc_errclass;
297 - uint16_t ioc_serror;
298 - uint32_t ioc_error;
299 - uint32_t ioc_tbufsz; /* transmit */
300 - uint32_t ioc_rbufsz; /* receive */
301 - lptr_t _ioc_tbuf;
302 - lptr_t _ioc_rbuf;
303 -} smbioc_rq_t;
304 -#define ioc_tbuf _ioc_tbuf.lp_ptr
305 -#define ioc_rbuf _ioc_rbuf.lp_ptr
306 -
307 -
308 -#define SMBIOC_T2RQ_MAXSETUP 4
309 -#define SMBIOC_T2RQ_MAXNAME 128
310 -
311 -typedef struct smbioc_t2rq {
312 - uint16_t ioc_setup[SMBIOC_T2RQ_MAXSETUP];
313 - int32_t ioc_setupcnt;
314 - char ioc_name[SMBIOC_T2RQ_MAXNAME];
315 - ushort_t ioc_tparamcnt;
316 - ushort_t ioc_tdatacnt;
317 - ushort_t ioc_rparamcnt;
318 - ushort_t ioc_rdatacnt;
319 - uint8_t ioc__pad1;
320 - uint8_t ioc_errclass;
321 - uint16_t ioc_serror;
322 - uint32_t ioc_error;
323 - uint16_t ioc_rpflags2;
324 - uint16_t ioc__pad2;
325 - lptr_t _ioc_tparam;
326 - lptr_t _ioc_tdata;
327 - lptr_t _ioc_rparam;
328 - lptr_t _ioc_rdata;
329 -} smbioc_t2rq_t;
330 -#define ioc_tparam _ioc_tparam.lp_ptr
331 -#define ioc_tdata _ioc_tdata.lp_ptr
332 -#define ioc_rparam _ioc_rparam.lp_ptr
333 -#define ioc_rdata _ioc_rdata.lp_ptr
334 -
335 -
336 -typedef struct smbioc_flags {
337 - int32_t ioc_level; /* 0 - session, 1 - share */
338 - int32_t ioc_flags;
339 - int32_t ioc_mask;
340 -} smbioc_flags_t;
341 -
342 271 typedef struct smbioc_rw {
343 - int32_t ioc_fh;
344 272 uint32_t ioc_cnt;
273 + uint32_t ioc_flags;
345 274 lloff_t _ioc_offset;
346 275 lptr_t _ioc_base;
347 276 } smbioc_rw_t;
348 277 #define ioc_offset _ioc_offset._f
349 278 #define ioc_base _ioc_base.lp_ptr
350 279
280 +/* Transact on named pipe (send/recv) */
281 +typedef struct smbioc_xnp {
282 + uint32_t ioc_tdlen; /* transmit len */
283 + uint32_t ioc_rdlen; /* recv maxlen */
284 + uint32_t ioc_more; /* more data to read */
285 + uint32_t ioc_pad1;
286 + lptr_t _ioc_tdata;
287 + lptr_t _ioc_rdata;
288 +} smbioc_xnp_t;
289 +#define ioc_tdata _ioc_tdata.lp_ptr
290 +#define ioc_rdata _ioc_rdata.lp_ptr
291 +
351 292 typedef struct smbioc_ntcreate {
352 293 uint32_t ioc_req_acc;
353 294 uint32_t ioc_efattr;
354 295 uint32_t ioc_share_acc;
355 296 uint32_t ioc_open_disp;
356 297 uint32_t ioc_creat_opts;
357 298 char ioc_name[SMBIOC_MAX_NAME];
358 299 } smbioc_ntcreate_t;
359 300
360 301 typedef struct smbioc_printjob {
361 302 uint16_t ioc_setuplen;
362 303 uint16_t ioc_prmode;
363 304 char ioc_title[SMBIOC_MAX_NAME];
364 305 } smbioc_printjob_t;
365 306
366 307 /* Password Keychain (PK) support. */
367 308 typedef struct smbioc_pk {
368 309 uid_t pk_uid; /* UID for PAM use */
369 310 char pk_dom[SMBIOC_MAX_NAME]; /* CIFS domain name */
370 311 char pk_usr[SMBIOC_MAX_NAME]; /* CIFS user name */
371 312 uchar_t pk_lmhash[SMBIOC_HASH_SZ]; /* LanMan p/w hash */
372 313 uchar_t pk_nthash[SMBIOC_HASH_SZ]; /* NTLM p/w hash */
373 314 } smbioc_pk_t;
374 315
375 316
376 317 /*
377 318 * Device IOCTLs
378 319 *
|
↓ open down ↓ |
18 lines elided |
↑ open up ↑ |
379 320 * Define ioctl codes the way ZFS does.
380 321 * The "base" value is arbitrary, and can
381 322 * occupy the high word if we like, because
382 323 * our driver does its own copyin/copyout.
383 324 * Keep GETVERS first and use it to verify
384 325 * driver compatibility with the library.
385 326 */
386 327 #define SMBIOC_BASE ((('n' << 8) | 's') << 8)
387 328 typedef enum nsmb_ioc {
388 329 SMBIOC_GETVERS = SMBIOC_BASE, /* keep first */
389 - SMBIOC_FLAGS2, /* get hflags2 */
330 + SMBIOC_FLAGS2, /* obsolete */
390 331 SMBIOC_GETSSNKEY, /* get SMB session key */
391 332 SMBIOC_DUP_DEV, /* duplicate dev handle */
392 333
393 - SMBIOC_REQUEST, /* simple request */
394 - SMBIOC_T2RQ, /* trans2 request */
395 -
396 334 SMBIOC_READ, /* read (pipe) */
397 335 SMBIOC_WRITE, /* write (pipe) */
336 + SMBIOC_XACTNP, /* "transact" (pipe) */
398 337 SMBIOC_NTCREATE, /* open or create */
399 338 SMBIOC_PRINTJOB, /* open print job */
400 339 SMBIOC_CLOSEFH, /* from ntcreate or printjob */
401 340
402 341 SMBIOC_SSN_CREATE,
403 342 SMBIOC_SSN_FIND,
404 343 SMBIOC_SSN_KILL, /* force disconnect */
405 344 SMBIOC_SSN_RELE, /* drop our reference */
406 345
407 346 SMBIOC_TREE_CONNECT, /* create and connect */
408 347 SMBIOC_TREE_FIND,
409 348 SMBIOC_TREE_KILL,
410 349 SMBIOC_TREE_RELE,
411 350
351 + SMBIOC_IOD_CONNECT, /* Setup connection */
352 + SMBIOC_IOD_NEGOTIATE, /* SMB/SMB2 negotiate */
353 + SMBIOC_IOD_SSNSETUP, /* SMB/SMB2 session setup */
412 354 SMBIOC_IOD_WORK, /* work on session requests */
413 355 SMBIOC_IOD_IDLE, /* wait for requests on this session */
414 - SMBIOC_IOD_RCFAIL, /* notify that reconnect failed */
356 + SMBIOC_IOD_RCFAIL, /* tell driver reconnect failed */
415 357
416 358 /* Password Keychain (PK) support. */
417 359 SMBIOC_PK_ADD, /* Add/Modify a password entry */
418 360 SMBIOC_PK_CHK, /* Check for a password entry */
419 361 SMBIOC_PK_DEL, /* Delete specified password entry */
420 362 SMBIOC_PK_DEL_OWNER, /* all owned by the caller */
421 363 SMBIOC_PK_DEL_EVERYONE /* all owned by everyone */
422 364 } nsmb_ioc_t;
423 365
424 366 #endif /* _NETSMB_DEV_H_ */
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX