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