15331Samw /* 25331Samw * CDDL HEADER START 35331Samw * 45331Samw * The contents of this file are subject to the terms of the 55331Samw * Common Development and Distribution License (the "License"). 65331Samw * You may not use this file except in compliance with the License. 75331Samw * 85331Samw * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 95331Samw * or http://www.opensolaris.org/os/licensing. 105331Samw * See the License for the specific language governing permissions 115331Samw * and limitations under the License. 125331Samw * 135331Samw * When distributing Covered Code, include this CDDL HEADER in each 145331Samw * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 155331Samw * If applicable, add the following below this CDDL HEADER, with the 165331Samw * fields enclosed by brackets "[]" replaced with your own identifying 175331Samw * information: Portions Copyright [yyyy] [name of copyright owner] 185331Samw * 195331Samw * CDDL HEADER END 205331Samw */ 215331Samw /* 228474SJose.Borrego@Sun.COM * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 235331Samw * Use is subject to license terms. 245331Samw */ 255331Samw 265331Samw #ifndef _SMBSRV_SMB_XDR_H 275331Samw #define _SMBSRV_SMB_XDR_H 285331Samw 295331Samw #ifdef __cplusplus 305331Samw extern "C" { 315331Samw #endif 325331Samw 335331Samw #include <rpc/xdr.h> 345331Samw #include <sys/param.h> 358670SJose.Borrego@Sun.COM #include <smbsrv/smbinfo.h> 365331Samw 375331Samw typedef struct smb_dr_kshare { 385331Samw int32_t k_op; 395331Samw char *k_path; 405331Samw char *k_sharename; 415331Samw } smb_dr_kshare_t; 425331Samw 435331Samw #ifdef _KERNEL 445331Samw #define xdr_int8_t xdr_char 455331Samw #define xdr_uint8_t xdr_u_char 465331Samw #define xdr_int16_t xdr_short 475331Samw #define xdr_uint16_t xdr_u_short 485331Samw 495331Samw extern bool_t xdr_u_char(XDR *xdrs, uchar_t *cp); 505331Samw extern bool_t xdr_vector(XDR *xdrs, char *basep, uint_t nelem, 515331Samw uint_t elemsize, xdrproc_t xdr_elem); 525331Samw 535331Samw smb_dr_kshare_t *smb_share_mkabsolute(uint8_t *buf, uint32_t len); 545331Samw #else 555331Samw uint8_t *smb_kshare_mkselfrel(smb_dr_kshare_t *kshare, uint32_t *len); 565331Samw #endif /* _KERNEL */ 575331Samw 585331Samw /* null-terminated string buffer */ 595331Samw typedef struct smb_dr_string { 605331Samw char *buf; 615331Samw } smb_dr_string_t; 625331Samw 635331Samw /* byte buffer (non-null terminated) */ 645331Samw typedef struct smb_dr_bytes { 655331Samw uint32_t bytes_len; 665331Samw uint8_t *bytes_val; 675331Samw } smb_dr_bytes_t; 685331Samw 697052Samw #define SMB_OPIPE_HDR_MAGIC 0x4F484452 /* OHDR */ 707052Samw #define SMB_OPIPE_DOOR_BUFSIZE (30 * 1024) 717052Samw 725331Samw /* 737052Samw * Door operations for opipes. 745331Samw */ 757052Samw typedef enum { 767052Samw SMB_OPIPE_NULL = 0, 777052Samw SMB_OPIPE_LOOKUP, 787052Samw SMB_OPIPE_OPEN, 797052Samw SMB_OPIPE_CLOSE, 807052Samw SMB_OPIPE_READ, 817052Samw SMB_OPIPE_WRITE, 827052Samw SMB_OPIPE_STAT 837052Samw } smb_opipe_op_t; 847052Samw 857052Samw typedef struct smb_opipe_hdr { 867052Samw uint32_t oh_magic; 877052Samw uint32_t oh_fid; 887052Samw uint32_t oh_op; 897052Samw uint32_t oh_datalen; 907052Samw uint32_t oh_resid; 917052Samw uint32_t oh_status; 927052Samw } smb_opipe_hdr_t; 937052Samw 947052Samw typedef struct smb_opipe_context { 957052Samw uint64_t oc_session_id; 967052Samw uint16_t oc_uid; 977052Samw uint16_t oc_domain_len; 987052Samw char *oc_domain; 997052Samw uint16_t oc_account_len; 1007052Samw char *oc_account; 1017052Samw uint16_t oc_workstation_len; 1027052Samw char *oc_workstation; 1038670SJose.Borrego@Sun.COM smb_inaddr_t oc_ipaddr; 1047052Samw int32_t oc_native_os; 1057052Samw int64_t oc_logon_time; 1067052Samw uint32_t oc_flags; 1077052Samw } smb_opipe_context_t; 1085331Samw 109*9832Samw@Sun.COM typedef struct smb_ulist { 110*9832Samw@Sun.COM uint32_t ul_cnt; 111*9832Samw@Sun.COM smb_opipe_context_t *ul_users; 112*9832Samw@Sun.COM } smb_ulist_t; 1135331Samw 1145331Samw /* xdr routines for common door arguments/results */ 1155331Samw extern bool_t xdr_smb_dr_string_t(XDR *, smb_dr_string_t *); 1165331Samw extern bool_t xdr_smb_dr_bytes_t(XDR *, smb_dr_bytes_t *); 1175331Samw extern bool_t xdr_smb_dr_kshare_t(XDR *, smb_dr_kshare_t *); 1188670SJose.Borrego@Sun.COM extern bool_t xdr_smb_inaddr_t(XDR *, smb_inaddr_t *); 1195331Samw 1207052Samw int smb_opipe_hdr_encode(smb_opipe_hdr_t *, uint8_t *, uint32_t); 1217052Samw int smb_opipe_hdr_decode(smb_opipe_hdr_t *, uint8_t *, uint32_t); 1227052Samw bool_t smb_opipe_hdr_xdr(XDR *xdrs, smb_opipe_hdr_t *objp); 123*9832Samw@Sun.COM int smb_opipe_context_encode(smb_opipe_context_t *, uint8_t *, uint32_t, 124*9832Samw@Sun.COM uint_t *); 125*9832Samw@Sun.COM int smb_opipe_context_decode(smb_opipe_context_t *, uint8_t *, uint32_t, 126*9832Samw@Sun.COM uint_t *); 1277052Samw bool_t smb_opipe_context_xdr(XDR *, smb_opipe_context_t *); 1288474SJose.Borrego@Sun.COM /* 1298474SJose.Borrego@Sun.COM * VSS Door Structures 1308474SJose.Borrego@Sun.COM */ 1318474SJose.Borrego@Sun.COM #define SMB_VSS_GMT_SIZE sizeof ("@GMT-yyyy.mm.dd-hh.mm.ss") 1328474SJose.Borrego@Sun.COM 1338474SJose.Borrego@Sun.COM typedef struct smb_dr_get_gmttokens { 1348474SJose.Borrego@Sun.COM uint32_t gg_count; 1358474SJose.Borrego@Sun.COM char *gg_path; 1368474SJose.Borrego@Sun.COM } smb_dr_get_gmttokens_t; 1378474SJose.Borrego@Sun.COM 1388474SJose.Borrego@Sun.COM typedef char *gmttoken; 1398474SJose.Borrego@Sun.COM 1408474SJose.Borrego@Sun.COM typedef struct smb_dr_return_gmttokens { 1418474SJose.Borrego@Sun.COM uint32_t rg_count; 1428474SJose.Borrego@Sun.COM struct { 1438474SJose.Borrego@Sun.COM uint_t rg_gmttokens_len; 1448474SJose.Borrego@Sun.COM gmttoken *rg_gmttokens_val; 1458474SJose.Borrego@Sun.COM } rg_gmttokens; 1468474SJose.Borrego@Sun.COM } smb_dr_return_gmttokens_t; 1478474SJose.Borrego@Sun.COM 1488474SJose.Borrego@Sun.COM typedef struct smb_dr_map_gmttoken { 1498474SJose.Borrego@Sun.COM char *mg_path; 1508474SJose.Borrego@Sun.COM char *mg_gmttoken; 1518474SJose.Borrego@Sun.COM } smb_dr_map_gmttoken_t; 1528474SJose.Borrego@Sun.COM 1538474SJose.Borrego@Sun.COM extern bool_t xdr_smb_dr_get_gmttokens_t(XDR *, smb_dr_get_gmttokens_t *); 1548474SJose.Borrego@Sun.COM extern bool_t xdr_gmttoken(XDR *, gmttoken *); 1558474SJose.Borrego@Sun.COM extern bool_t xdr_smb_dr_return_gmttokens_t(XDR *xdrs, 1568474SJose.Borrego@Sun.COM smb_dr_return_gmttokens_t *); 1578474SJose.Borrego@Sun.COM extern bool_t xdr_smb_dr_map_gmttoken_t(XDR *, smb_dr_map_gmttoken_t *); 1587052Samw 1595331Samw #ifdef __cplusplus 1605331Samw } 1615331Samw #endif 1625331Samw 1635331Samw #endif /* _SMBSRV_SMB_XDR_H */ 164