xref: /onnv-gate/usr/src/uts/common/smbsrv/smb_door.h (revision 12508:edb7861a1533)
111963SAfshin.Ardakani@Sun.COM /*
211963SAfshin.Ardakani@Sun.COM  * CDDL HEADER START
311963SAfshin.Ardakani@Sun.COM  *
411963SAfshin.Ardakani@Sun.COM  * The contents of this file are subject to the terms of the
511963SAfshin.Ardakani@Sun.COM  * Common Development and Distribution License (the "License").
611963SAfshin.Ardakani@Sun.COM  * You may not use this file except in compliance with the License.
711963SAfshin.Ardakani@Sun.COM  *
811963SAfshin.Ardakani@Sun.COM  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
911963SAfshin.Ardakani@Sun.COM  * or http://www.opensolaris.org/os/licensing.
1011963SAfshin.Ardakani@Sun.COM  * See the License for the specific language governing permissions
1111963SAfshin.Ardakani@Sun.COM  * and limitations under the License.
1211963SAfshin.Ardakani@Sun.COM  *
1311963SAfshin.Ardakani@Sun.COM  * When distributing Covered Code, include this CDDL HEADER in each
1411963SAfshin.Ardakani@Sun.COM  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
1511963SAfshin.Ardakani@Sun.COM  * If applicable, add the following below this CDDL HEADER, with the
1611963SAfshin.Ardakani@Sun.COM  * fields enclosed by brackets "[]" replaced with your own identifying
1711963SAfshin.Ardakani@Sun.COM  * information: Portions Copyright [yyyy] [name of copyright owner]
1811963SAfshin.Ardakani@Sun.COM  *
1911963SAfshin.Ardakani@Sun.COM  * CDDL HEADER END
2011963SAfshin.Ardakani@Sun.COM  */
2111963SAfshin.Ardakani@Sun.COM /*
22*12508Samw@Sun.COM  * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
2311963SAfshin.Ardakani@Sun.COM  */
2411963SAfshin.Ardakani@Sun.COM 
2511963SAfshin.Ardakani@Sun.COM #ifndef _SMBSRV_SMB_DOOR_H
2611963SAfshin.Ardakani@Sun.COM #define	_SMBSRV_SMB_DOOR_H
2711963SAfshin.Ardakani@Sun.COM 
2811963SAfshin.Ardakani@Sun.COM #include <sys/door.h>
2911963SAfshin.Ardakani@Sun.COM #include <smbsrv/wintypes.h>
3011963SAfshin.Ardakani@Sun.COM #include <smbsrv/smb_xdr.h>
3111963SAfshin.Ardakani@Sun.COM #include <smbsrv/smb_token.h>
3211963SAfshin.Ardakani@Sun.COM 
3311963SAfshin.Ardakani@Sun.COM #ifdef __cplusplus
3411963SAfshin.Ardakani@Sun.COM extern "C" {
3511963SAfshin.Ardakani@Sun.COM #endif
3611963SAfshin.Ardakani@Sun.COM 
3711963SAfshin.Ardakani@Sun.COM #define	SMBD_DOOR_NAME			"/var/run/smbd_door"
3811963SAfshin.Ardakani@Sun.COM 
3911963SAfshin.Ardakani@Sun.COM #define	SMB_DOOR_CALL_RETRIES		3
4011963SAfshin.Ardakani@Sun.COM 
4111963SAfshin.Ardakani@Sun.COM /*
4211963SAfshin.Ardakani@Sun.COM  * Opcodes for smbd door.
4311963SAfshin.Ardakani@Sun.COM  *
4411963SAfshin.Ardakani@Sun.COM  * SMB_DR_NULL is the equivalent of the NULL RPC.  It ensures that an
4511963SAfshin.Ardakani@Sun.COM  * opcode of zero is not misinterpreted as an operational door call
4611963SAfshin.Ardakani@Sun.COM  * and it is available as a test interface.
4711963SAfshin.Ardakani@Sun.COM  *
4811963SAfshin.Ardakani@Sun.COM  * SMB_DR_ASYNC_RESPONSE delivers the response part of an asynchronous
4911963SAfshin.Ardakani@Sun.COM  * request and must be processed as a synchronous request.
5011963SAfshin.Ardakani@Sun.COM  */
5111963SAfshin.Ardakani@Sun.COM typedef enum smb_dopcode {
5211963SAfshin.Ardakani@Sun.COM 	SMB_DR_NULL = 0,
5311963SAfshin.Ardakani@Sun.COM 	SMB_DR_ASYNC_RESPONSE,
5411963SAfshin.Ardakani@Sun.COM 	SMB_DR_USER_AUTH_LOGON,
5511963SAfshin.Ardakani@Sun.COM 	SMB_DR_USER_NONAUTH_LOGON,
5611963SAfshin.Ardakani@Sun.COM 	SMB_DR_USER_AUTH_LOGOFF,
5711963SAfshin.Ardakani@Sun.COM 	SMB_DR_LOOKUP_SID,
5811963SAfshin.Ardakani@Sun.COM 	SMB_DR_LOOKUP_NAME,
5911963SAfshin.Ardakani@Sun.COM 	SMB_DR_JOIN,
6011963SAfshin.Ardakani@Sun.COM 	SMB_DR_GET_DCINFO,
6111963SAfshin.Ardakani@Sun.COM 	SMB_DR_VSS_GET_COUNT,
6211963SAfshin.Ardakani@Sun.COM 	SMB_DR_VSS_GET_SNAPSHOTS,
6311963SAfshin.Ardakani@Sun.COM 	SMB_DR_VSS_MAP_GMTTOKEN,
6411963SAfshin.Ardakani@Sun.COM 	SMB_DR_ADS_FIND_HOST,
6511963SAfshin.Ardakani@Sun.COM 	SMB_DR_QUOTA_QUERY,
6611963SAfshin.Ardakani@Sun.COM 	SMB_DR_QUOTA_SET,
67*12508Samw@Sun.COM 	SMB_DR_DFS_GET_REFERRALS,
68*12508Samw@Sun.COM 	SMB_DR_SHR_HOSTACCESS,
69*12508Samw@Sun.COM 	SMB_DR_SHR_EXEC
7011963SAfshin.Ardakani@Sun.COM } smb_dopcode_t;
7111963SAfshin.Ardakani@Sun.COM 
7211963SAfshin.Ardakani@Sun.COM struct smb_event;
7311963SAfshin.Ardakani@Sun.COM 
7411963SAfshin.Ardakani@Sun.COM typedef struct smb_doorarg {
7511963SAfshin.Ardakani@Sun.COM 	smb_doorhdr_t		da_hdr;
7611963SAfshin.Ardakani@Sun.COM 	door_arg_t		da_arg;
7711963SAfshin.Ardakani@Sun.COM 	xdrproc_t		da_req_xdr;
7811963SAfshin.Ardakani@Sun.COM 	xdrproc_t		da_rsp_xdr;
7911963SAfshin.Ardakani@Sun.COM 	void			*da_req_data;
8011963SAfshin.Ardakani@Sun.COM 	void			*da_rsp_data;
8111963SAfshin.Ardakani@Sun.COM 	smb_dopcode_t		da_opcode;
8211963SAfshin.Ardakani@Sun.COM 	const char		*da_opname;
8311963SAfshin.Ardakani@Sun.COM 	struct smb_event	*da_event;
8411963SAfshin.Ardakani@Sun.COM 	uint32_t		da_flags;
8511963SAfshin.Ardakani@Sun.COM } smb_doorarg_t;
8611963SAfshin.Ardakani@Sun.COM 
8711963SAfshin.Ardakani@Sun.COM /*
8811963SAfshin.Ardakani@Sun.COM  * Door call return codes.
8911963SAfshin.Ardakani@Sun.COM  */
9011963SAfshin.Ardakani@Sun.COM #define	SMB_DOP_SUCCESS			0
9111963SAfshin.Ardakani@Sun.COM #define	SMB_DOP_NOT_CALLED		1
9211963SAfshin.Ardakani@Sun.COM #define	SMB_DOP_DECODE_ERROR		2
9311963SAfshin.Ardakani@Sun.COM #define	SMB_DOP_ENCODE_ERROR		3
9411963SAfshin.Ardakani@Sun.COM #define	SMB_DOP_EMPTYBUF		4
9511963SAfshin.Ardakani@Sun.COM 
9611963SAfshin.Ardakani@Sun.COM #ifndef _KERNEL
9711963SAfshin.Ardakani@Sun.COM char *smb_common_encode(void *, xdrproc_t, size_t *);
9811963SAfshin.Ardakani@Sun.COM int smb_common_decode(char *, size_t, xdrproc_t, void *);
9911963SAfshin.Ardakani@Sun.COM char *smb_string_encode(char *, size_t *);
10011963SAfshin.Ardakani@Sun.COM int smb_string_decode(smb_string_t *, char *, size_t);
10111963SAfshin.Ardakani@Sun.COM #endif /* _KERNEL */
10211963SAfshin.Ardakani@Sun.COM 
103*12508Samw@Sun.COM /*
104*12508Samw@Sun.COM  * Legacy door interface
105*12508Samw@Sun.COM  */
106*12508Samw@Sun.COM #define	SMB_SHARE_DNAME		"/var/run/smb_share_door"
107*12508Samw@Sun.COM #define	SMB_SHARE_DSIZE		(65 * 1024)
108*12508Samw@Sun.COM 
109*12508Samw@Sun.COM /*
110*12508Samw@Sun.COM  * door operations
111*12508Samw@Sun.COM  */
112*12508Samw@Sun.COM #define	SMB_SHROP_NUM_SHARES		1
113*12508Samw@Sun.COM #define	SMB_SHROP_DELETE		2
114*12508Samw@Sun.COM #define	SMB_SHROP_RENAME		3
115*12508Samw@Sun.COM #define	SMB_SHROP_ADD			4
116*12508Samw@Sun.COM #define	SMB_SHROP_MODIFY		5
117*12508Samw@Sun.COM #define	SMB_SHROP_LIST			6
118*12508Samw@Sun.COM 
119*12508Samw@Sun.COM /*
120*12508Samw@Sun.COM  * Door server status
121*12508Samw@Sun.COM  *
122*12508Samw@Sun.COM  * SMB_SHARE_DERROR is returned by the door server if there is problem
123*12508Samw@Sun.COM  * with marshalling/unmarshalling. Otherwise, SMB_SHARE_DSUCCESS is
124*12508Samw@Sun.COM  * returned.
125*12508Samw@Sun.COM  *
126*12508Samw@Sun.COM  */
127*12508Samw@Sun.COM #define	SMB_SHARE_DSUCCESS		0
128*12508Samw@Sun.COM #define	SMB_SHARE_DERROR		-1
129*12508Samw@Sun.COM 
13011963SAfshin.Ardakani@Sun.COM typedef struct smb_dr_ctx {
13111963SAfshin.Ardakani@Sun.COM 	char *ptr;
13211963SAfshin.Ardakani@Sun.COM 	char *start_ptr;
13311963SAfshin.Ardakani@Sun.COM 	char *end_ptr;
13411963SAfshin.Ardakani@Sun.COM 	int status;
13511963SAfshin.Ardakani@Sun.COM } smb_dr_ctx_t;
13611963SAfshin.Ardakani@Sun.COM 
13711963SAfshin.Ardakani@Sun.COM smb_dr_ctx_t *smb_dr_decode_start(char *, int);
13811963SAfshin.Ardakani@Sun.COM int smb_dr_decode_finish(smb_dr_ctx_t *);
13911963SAfshin.Ardakani@Sun.COM 
14011963SAfshin.Ardakani@Sun.COM smb_dr_ctx_t *smb_dr_encode_start(char *, int);
14111963SAfshin.Ardakani@Sun.COM int smb_dr_encode_finish(smb_dr_ctx_t *, unsigned int *);
14211963SAfshin.Ardakani@Sun.COM 
14311963SAfshin.Ardakani@Sun.COM int32_t smb_dr_get_int32(smb_dr_ctx_t *);
14411963SAfshin.Ardakani@Sun.COM DWORD smb_dr_get_dword(smb_dr_ctx_t *);
14511963SAfshin.Ardakani@Sun.COM uint32_t smb_dr_get_uint32(smb_dr_ctx_t *);
14611963SAfshin.Ardakani@Sun.COM int64_t smb_dr_get_int64(smb_dr_ctx_t *);
14711963SAfshin.Ardakani@Sun.COM uint64_t smb_dr_get_uint64(smb_dr_ctx_t *);
14811963SAfshin.Ardakani@Sun.COM unsigned short smb_dr_get_ushort(smb_dr_ctx_t *);
14911963SAfshin.Ardakani@Sun.COM 
15011963SAfshin.Ardakani@Sun.COM void smb_dr_put_int32(smb_dr_ctx_t *, int32_t);
15111963SAfshin.Ardakani@Sun.COM void smb_dr_put_dword(smb_dr_ctx_t *, DWORD);
15211963SAfshin.Ardakani@Sun.COM void smb_dr_put_uint32(smb_dr_ctx_t *, uint32_t);
15311963SAfshin.Ardakani@Sun.COM void smb_dr_put_int64(smb_dr_ctx_t *, int64_t);
15411963SAfshin.Ardakani@Sun.COM void smb_dr_put_uint64(smb_dr_ctx_t *, uint64_t);
15511963SAfshin.Ardakani@Sun.COM void smb_dr_put_ushort(smb_dr_ctx_t *, unsigned short);
15611963SAfshin.Ardakani@Sun.COM 
15711963SAfshin.Ardakani@Sun.COM char *smb_dr_get_string(smb_dr_ctx_t *);
15811963SAfshin.Ardakani@Sun.COM void smb_dr_put_string(smb_dr_ctx_t *, const char *);
15911963SAfshin.Ardakani@Sun.COM void smb_dr_free_string(char *);
16011963SAfshin.Ardakani@Sun.COM 
16111963SAfshin.Ardakani@Sun.COM void smb_dr_put_word(smb_dr_ctx_t *, WORD);
16211963SAfshin.Ardakani@Sun.COM WORD smb_dr_get_word(smb_dr_ctx_t *);
16311963SAfshin.Ardakani@Sun.COM 
16411963SAfshin.Ardakani@Sun.COM void smb_dr_put_BYTE(smb_dr_ctx_t *, BYTE);
16511963SAfshin.Ardakani@Sun.COM BYTE smb_dr_get_BYTE(smb_dr_ctx_t *);
16611963SAfshin.Ardakani@Sun.COM 
16711963SAfshin.Ardakani@Sun.COM void smb_dr_put_buf(smb_dr_ctx_t *, unsigned char *, int);
16811963SAfshin.Ardakani@Sun.COM int smb_dr_get_buf(smb_dr_ctx_t *, unsigned char *, int);
16911963SAfshin.Ardakani@Sun.COM 
170*12508Samw@Sun.COM void smb_dr_get_share(smb_dr_ctx_t *, smb_share_t *);
171*12508Samw@Sun.COM void smb_dr_put_share(smb_dr_ctx_t *, smb_share_t *);
172*12508Samw@Sun.COM 
173*12508Samw@Sun.COM void smb_share_door_clnt_init(void);
174*12508Samw@Sun.COM void smb_share_door_clnt_fini(void);
175*12508Samw@Sun.COM 
17611963SAfshin.Ardakani@Sun.COM #ifdef __cplusplus
17711963SAfshin.Ardakani@Sun.COM }
17811963SAfshin.Ardakani@Sun.COM #endif
17911963SAfshin.Ardakani@Sun.COM 
18011963SAfshin.Ardakani@Sun.COM #endif	/* _SMBSRV_SMB_DOOR_H */
181