xref: /illumos-gate/usr/src/uts/common/smbsrv/smb_door.h (revision b3700b074e637f8c6991b70754c88a2cfffb246b)
19fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States /*
29fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States  * CDDL HEADER START
39fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States  *
49fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States  * The contents of this file are subject to the terms of the
59fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States  * Common Development and Distribution License (the "License").
69fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States  * You may not use this file except in compliance with the License.
79fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States  *
89fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
99fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States  * or http://www.opensolaris.org/os/licensing.
109fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States  * See the License for the specific language governing permissions
119fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States  * and limitations under the License.
129fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States  *
139fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States  * When distributing Covered Code, include this CDDL HEADER in each
149fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
159fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States  * If applicable, add the following below this CDDL HEADER, with the
169fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States  * fields enclosed by brackets "[]" replaced with your own identifying
179fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States  * information: Portions Copyright [yyyy] [name of copyright owner]
189fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States  *
199fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States  * CDDL HEADER END
209fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States  */
219fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States /*
22148c5f43SAlan Wright  * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
23b819cea2SGordon Ross  * Copyright 2013 Nexenta Systems, Inc.  All rights reserved.
249fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States  */
259fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
269fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #ifndef _SMBSRV_SMB_DOOR_H
279fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #define	_SMBSRV_SMB_DOOR_H
289fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
299fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #include <sys/door.h>
309fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #include <smbsrv/wintypes.h>
319fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #include <smbsrv/smb_xdr.h>
329fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #include <smbsrv/smb_token.h>
339fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
349fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #ifdef __cplusplus
359fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States extern "C" {
369fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #endif
379fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
389fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #define	SMBD_DOOR_NAME			"/var/run/smbd_door"
399fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
409fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #define	SMB_DOOR_CALL_RETRIES		3
419fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
429fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States /*
439fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States  * Opcodes for smbd door.
449fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States  *
459fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States  * SMB_DR_NULL is the equivalent of the NULL RPC.  It ensures that an
469fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States  * opcode of zero is not misinterpreted as an operational door call
479fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States  * and it is available as a test interface.
489fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States  *
499fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States  * SMB_DR_ASYNC_RESPONSE delivers the response part of an asynchronous
509fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States  * request and must be processed as a synchronous request.
519fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States  */
529fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States typedef enum smb_dopcode {
539fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	SMB_DR_NULL = 0,
549fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	SMB_DR_ASYNC_RESPONSE,
559fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	SMB_DR_USER_AUTH_LOGON,
569fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	SMB_DR_USER_NONAUTH_LOGON,
579fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	SMB_DR_USER_AUTH_LOGOFF,
589fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	SMB_DR_LOOKUP_SID,
599fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	SMB_DR_LOOKUP_NAME,
609fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	SMB_DR_JOIN,
619fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	SMB_DR_GET_DCINFO,
629fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	SMB_DR_VSS_GET_COUNT,
639fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	SMB_DR_VSS_GET_SNAPSHOTS,
649fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	SMB_DR_VSS_MAP_GMTTOKEN,
659fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	SMB_DR_ADS_FIND_HOST,
669fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	SMB_DR_QUOTA_QUERY,
679fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	SMB_DR_QUOTA_SET,
68148c5f43SAlan Wright 	SMB_DR_DFS_GET_REFERRALS,
69148c5f43SAlan Wright 	SMB_DR_SHR_HOSTACCESS,
70*b3700b07SGordon Ross 	SMB_DR_SHR_EXEC,
71*b3700b07SGordon Ross 	SMB_DR_NOTIFY_DC_CHANGED
729fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States } smb_dopcode_t;
739fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
749fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States struct smb_event;
759fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
769fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States typedef struct smb_doorarg {
779fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	smb_doorhdr_t		da_hdr;
789fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	door_arg_t		da_arg;
799fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	xdrproc_t		da_req_xdr;
809fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	xdrproc_t		da_rsp_xdr;
819fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	void			*da_req_data;
829fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	void			*da_rsp_data;
839fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	smb_dopcode_t		da_opcode;
849fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	const char		*da_opname;
859fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	struct smb_event	*da_event;
869fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	uint32_t		da_flags;
879fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States } smb_doorarg_t;
889fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
899fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States /*
909fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States  * Door call return codes.
919fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States  */
929fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #define	SMB_DOP_SUCCESS			0
939fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #define	SMB_DOP_NOT_CALLED		1
949fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #define	SMB_DOP_DECODE_ERROR		2
959fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #define	SMB_DOP_ENCODE_ERROR		3
969fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #define	SMB_DOP_EMPTYBUF		4
979fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
98b819cea2SGordon Ross #if !defined(_KERNEL) && !defined(_FAKE_KERNEL)
999fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States char *smb_common_encode(void *, xdrproc_t, size_t *);
1009fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States int smb_common_decode(char *, size_t, xdrproc_t, void *);
1019fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States char *smb_string_encode(char *, size_t *);
1029fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States int smb_string_decode(smb_string_t *, char *, size_t);
103b819cea2SGordon Ross #endif /* !_KERNEL */
104b819cea2SGordon Ross 
105b819cea2SGordon Ross /* libfksmbsrv "kdoor" callback to smbd-d */
106b819cea2SGordon Ross typedef int fksmb_kdoor_disp_func_t(smb_doorarg_t *);
107b819cea2SGordon Ross 
108b819cea2SGordon Ross /* libfksmbsrv "opipe" callback to smbd-d */
109b819cea2SGordon Ross typedef int fksmb_opipe_disp_func_t(door_arg_t *);
1109fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
111148c5f43SAlan Wright /*
112148c5f43SAlan Wright  * Legacy door interface
113148c5f43SAlan Wright  */
114148c5f43SAlan Wright #define	SMB_SHARE_DNAME		"/var/run/smb_share_door"
115148c5f43SAlan Wright #define	SMB_SHARE_DSIZE		(65 * 1024)
116148c5f43SAlan Wright 
117148c5f43SAlan Wright /*
118148c5f43SAlan Wright  * door operations
119148c5f43SAlan Wright  */
120148c5f43SAlan Wright #define	SMB_SHROP_NUM_SHARES		1
121148c5f43SAlan Wright #define	SMB_SHROP_DELETE		2
122148c5f43SAlan Wright #define	SMB_SHROP_RENAME		3
123148c5f43SAlan Wright #define	SMB_SHROP_ADD			4
124148c5f43SAlan Wright #define	SMB_SHROP_MODIFY		5
125148c5f43SAlan Wright #define	SMB_SHROP_LIST			6
126148c5f43SAlan Wright 
127148c5f43SAlan Wright /*
128148c5f43SAlan Wright  * Door server status
129148c5f43SAlan Wright  *
130148c5f43SAlan Wright  * SMB_SHARE_DERROR is returned by the door server if there is problem
131148c5f43SAlan Wright  * with marshalling/unmarshalling. Otherwise, SMB_SHARE_DSUCCESS is
132148c5f43SAlan Wright  * returned.
133148c5f43SAlan Wright  *
134148c5f43SAlan Wright  */
135148c5f43SAlan Wright #define	SMB_SHARE_DSUCCESS		0
136148c5f43SAlan Wright #define	SMB_SHARE_DERROR		-1
137148c5f43SAlan Wright 
1389fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States typedef struct smb_dr_ctx {
1399fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	char *ptr;
1409fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	char *start_ptr;
1419fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	char *end_ptr;
1429fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	int status;
1439fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States } smb_dr_ctx_t;
1449fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
1459fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States smb_dr_ctx_t *smb_dr_decode_start(char *, int);
1469fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States int smb_dr_decode_finish(smb_dr_ctx_t *);
1479fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
1489fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States smb_dr_ctx_t *smb_dr_encode_start(char *, int);
1499fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States int smb_dr_encode_finish(smb_dr_ctx_t *, unsigned int *);
1509fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
1519fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States int32_t smb_dr_get_int32(smb_dr_ctx_t *);
1529fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States DWORD smb_dr_get_dword(smb_dr_ctx_t *);
1539fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States uint32_t smb_dr_get_uint32(smb_dr_ctx_t *);
1549fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States int64_t smb_dr_get_int64(smb_dr_ctx_t *);
1559fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States uint64_t smb_dr_get_uint64(smb_dr_ctx_t *);
1569fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States unsigned short smb_dr_get_ushort(smb_dr_ctx_t *);
1579fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
1589fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States void smb_dr_put_int32(smb_dr_ctx_t *, int32_t);
1599fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States void smb_dr_put_dword(smb_dr_ctx_t *, DWORD);
1609fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States void smb_dr_put_uint32(smb_dr_ctx_t *, uint32_t);
1619fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States void smb_dr_put_int64(smb_dr_ctx_t *, int64_t);
1629fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States void smb_dr_put_uint64(smb_dr_ctx_t *, uint64_t);
1639fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States void smb_dr_put_ushort(smb_dr_ctx_t *, unsigned short);
1649fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
1659fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States char *smb_dr_get_string(smb_dr_ctx_t *);
1669fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States void smb_dr_put_string(smb_dr_ctx_t *, const char *);
1679fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States void smb_dr_free_string(char *);
1689fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
1699fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States void smb_dr_put_word(smb_dr_ctx_t *, WORD);
1709fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States WORD smb_dr_get_word(smb_dr_ctx_t *);
1719fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
1729fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States void smb_dr_put_BYTE(smb_dr_ctx_t *, BYTE);
1739fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States BYTE smb_dr_get_BYTE(smb_dr_ctx_t *);
1749fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
1759fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States void smb_dr_put_buf(smb_dr_ctx_t *, unsigned char *, int);
1769fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States int smb_dr_get_buf(smb_dr_ctx_t *, unsigned char *, int);
1779fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
178148c5f43SAlan Wright void smb_dr_get_share(smb_dr_ctx_t *, smb_share_t *);
179148c5f43SAlan Wright void smb_dr_put_share(smb_dr_ctx_t *, smb_share_t *);
180148c5f43SAlan Wright 
181148c5f43SAlan Wright void smb_share_door_clnt_init(void);
182148c5f43SAlan Wright void smb_share_door_clnt_fini(void);
183148c5f43SAlan Wright 
1849fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #ifdef __cplusplus
1859fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States }
1869fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #endif
1879fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
1889fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #endif	/* _SMBSRV_SMB_DOOR_H */
189