1da6c28aaSamw /* 2da6c28aaSamw * CDDL HEADER START 3da6c28aaSamw * 4da6c28aaSamw * The contents of this file are subject to the terms of the 5da6c28aaSamw * Common Development and Distribution License (the "License"). 6da6c28aaSamw * You may not use this file except in compliance with the License. 7da6c28aaSamw * 8da6c28aaSamw * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9da6c28aaSamw * or http://www.opensolaris.org/os/licensing. 10da6c28aaSamw * See the License for the specific language governing permissions 11da6c28aaSamw * and limitations under the License. 12da6c28aaSamw * 13da6c28aaSamw * When distributing Covered Code, include this CDDL HEADER in each 14da6c28aaSamw * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15da6c28aaSamw * If applicable, add the following below this CDDL HEADER, with the 16da6c28aaSamw * fields enclosed by brackets "[]" replaced with your own identifying 17da6c28aaSamw * information: Portions Copyright [yyyy] [name of copyright owner] 18da6c28aaSamw * 19da6c28aaSamw * CDDL HEADER END 20da6c28aaSamw */ 21da6c28aaSamw /* 2289dc44ceSjose borrego * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 23da6c28aaSamw * Use is subject to license terms. 24da6c28aaSamw */ 25da6c28aaSamw 26da6c28aaSamw #ifndef _SMBSRV_SMB_XDR_H 27da6c28aaSamw #define _SMBSRV_SMB_XDR_H 28da6c28aaSamw 29da6c28aaSamw #ifdef __cplusplus 30da6c28aaSamw extern "C" { 31da6c28aaSamw #endif 32da6c28aaSamw 33da6c28aaSamw #include <rpc/xdr.h> 34da6c28aaSamw #include <sys/param.h> 35*fe1c642dSBill Krier #include <smbsrv/wintypes.h> 36*fe1c642dSBill Krier #include <smbsrv/smb_sid.h> 377f667e74Sjose borrego #include <smbsrv/smbinfo.h> 381fcced4cSJordan Brown #include <smbsrv/smb_ioctl.h> 39da6c28aaSamw 40da6c28aaSamw typedef struct smb_dr_kshare { 41da6c28aaSamw int32_t k_op; 42da6c28aaSamw char *k_path; 43da6c28aaSamw char *k_sharename; 44da6c28aaSamw } smb_dr_kshare_t; 45da6c28aaSamw 46da6c28aaSamw #ifdef _KERNEL 47da6c28aaSamw #define xdr_int8_t xdr_char 48da6c28aaSamw #define xdr_uint8_t xdr_u_char 49da6c28aaSamw #define xdr_int16_t xdr_short 50da6c28aaSamw #define xdr_uint16_t xdr_u_short 51da6c28aaSamw 52da6c28aaSamw smb_dr_kshare_t *smb_share_mkabsolute(uint8_t *buf, uint32_t len); 53da6c28aaSamw #else 54da6c28aaSamw uint8_t *smb_kshare_mkselfrel(smb_dr_kshare_t *kshare, uint32_t *len); 55da6c28aaSamw #endif /* _KERNEL */ 56da6c28aaSamw 57da6c28aaSamw /* null-terminated string buffer */ 58da6c28aaSamw typedef struct smb_dr_string { 59da6c28aaSamw char *buf; 60da6c28aaSamw } smb_dr_string_t; 61da6c28aaSamw 62da6c28aaSamw /* byte buffer (non-null terminated) */ 63da6c28aaSamw typedef struct smb_dr_bytes { 64da6c28aaSamw uint32_t bytes_len; 65da6c28aaSamw uint8_t *bytes_val; 66da6c28aaSamw } smb_dr_bytes_t; 67da6c28aaSamw 683db3f65cSamw #define SMB_OPIPE_HDR_MAGIC 0x4F484452 /* OHDR */ 693db3f65cSamw #define SMB_OPIPE_DOOR_BUFSIZE (30 * 1024) 703db3f65cSamw 71da6c28aaSamw /* 723db3f65cSamw * Door operations for opipes. 73da6c28aaSamw */ 743db3f65cSamw typedef enum { 753db3f65cSamw SMB_OPIPE_NULL = 0, 763db3f65cSamw SMB_OPIPE_LOOKUP, 773db3f65cSamw SMB_OPIPE_OPEN, 783db3f65cSamw SMB_OPIPE_CLOSE, 793db3f65cSamw SMB_OPIPE_READ, 803db3f65cSamw SMB_OPIPE_WRITE, 813db3f65cSamw SMB_OPIPE_STAT 823db3f65cSamw } smb_opipe_op_t; 833db3f65cSamw 843db3f65cSamw typedef struct smb_opipe_hdr { 853db3f65cSamw uint32_t oh_magic; 863db3f65cSamw uint32_t oh_fid; 873db3f65cSamw uint32_t oh_op; 883db3f65cSamw uint32_t oh_datalen; 893db3f65cSamw uint32_t oh_resid; 903db3f65cSamw uint32_t oh_status; 913db3f65cSamw } smb_opipe_hdr_t; 923db3f65cSamw 931fcced4cSJordan Brown typedef struct smb_netuserinfo { 941fcced4cSJordan Brown uint64_t ui_session_id; 951fcced4cSJordan Brown uint16_t ui_uid; 961fcced4cSJordan Brown uint16_t ui_domain_len; 971fcced4cSJordan Brown char *ui_domain; 981fcced4cSJordan Brown uint16_t ui_account_len; 991fcced4cSJordan Brown char *ui_account; 1001fcced4cSJordan Brown uint16_t ui_workstation_len; 1011fcced4cSJordan Brown char *ui_workstation; 1021fcced4cSJordan Brown smb_inaddr_t ui_ipaddr; 1031fcced4cSJordan Brown int32_t ui_native_os; 1041fcced4cSJordan Brown int64_t ui_logon_time; 1051fcced4cSJordan Brown uint32_t ui_numopens; 1061fcced4cSJordan Brown uint32_t ui_flags; 1071fcced4cSJordan Brown } smb_netuserinfo_t; 1081fcced4cSJordan Brown 1091fcced4cSJordan Brown typedef struct smb_opennum { 1101fcced4cSJordan Brown uint32_t open_users; 1111fcced4cSJordan Brown uint32_t open_trees; 1121fcced4cSJordan Brown uint32_t open_files; 1131fcced4cSJordan Brown uint32_t qualtype; 1141fcced4cSJordan Brown char qualifier[MAXNAMELEN]; 1151fcced4cSJordan Brown } smb_opennum_t; 1161fcced4cSJordan Brown 1171fcced4cSJordan Brown typedef struct smb_netconnectinfo { 1181fcced4cSJordan Brown uint32_t ci_id; 1191fcced4cSJordan Brown uint32_t ci_type; 1201fcced4cSJordan Brown uint32_t ci_numopens; 1211fcced4cSJordan Brown uint32_t ci_numusers; 1221fcced4cSJordan Brown uint32_t ci_time; 1231fcced4cSJordan Brown uint32_t ci_namelen; 1241fcced4cSJordan Brown uint32_t ci_sharelen; 1251fcced4cSJordan Brown char *ci_username; 1261fcced4cSJordan Brown char *ci_share; 1271fcced4cSJordan Brown } smb_netconnectinfo_t; 1281fcced4cSJordan Brown 1291fcced4cSJordan Brown typedef struct smb_netfileinfo { 1301fcced4cSJordan Brown uint16_t fi_fid; 1311fcced4cSJordan Brown uint32_t fi_uniqid; 1321fcced4cSJordan Brown uint32_t fi_permissions; 1331fcced4cSJordan Brown uint32_t fi_numlocks; 1341fcced4cSJordan Brown uint32_t fi_pathlen; 1351fcced4cSJordan Brown uint32_t fi_namelen; 1361fcced4cSJordan Brown char *fi_path; 1371fcced4cSJordan Brown char *fi_username; 1381fcced4cSJordan Brown } smb_netfileinfo_t; 1391fcced4cSJordan Brown 1401fcced4cSJordan Brown typedef struct smb_netsvcitem { 1411fcced4cSJordan Brown list_node_t nsi_lnd; 1421fcced4cSJordan Brown union { 1431fcced4cSJordan Brown smb_netuserinfo_t nsi_user; 1441fcced4cSJordan Brown smb_netconnectinfo_t nsi_tree; 1451fcced4cSJordan Brown smb_netfileinfo_t nsi_ofile; 1461fcced4cSJordan Brown } nsi_un; 1471fcced4cSJordan Brown } smb_netsvcitem_t; 1481fcced4cSJordan Brown 1491fcced4cSJordan Brown typedef struct smb_netsvc { 1501fcced4cSJordan Brown list_t ns_list; 1511fcced4cSJordan Brown smb_netsvcitem_t *ns_items; 1521fcced4cSJordan Brown smb_ioc_svcenum_t *ns_ioc; 1531fcced4cSJordan Brown uint32_t ns_ioclen; 1541fcced4cSJordan Brown } smb_netsvc_t; 155da6c28aaSamw 156da6c28aaSamw /* xdr routines for common door arguments/results */ 157da6c28aaSamw extern bool_t xdr_smb_dr_string_t(XDR *, smb_dr_string_t *); 158da6c28aaSamw extern bool_t xdr_smb_dr_bytes_t(XDR *, smb_dr_bytes_t *); 159da6c28aaSamw extern bool_t xdr_smb_dr_kshare_t(XDR *, smb_dr_kshare_t *); 1607f667e74Sjose borrego extern bool_t xdr_smb_inaddr_t(XDR *, smb_inaddr_t *); 161da6c28aaSamw 1623db3f65cSamw int smb_opipe_hdr_encode(smb_opipe_hdr_t *, uint8_t *, uint32_t); 1633db3f65cSamw int smb_opipe_hdr_decode(smb_opipe_hdr_t *, uint8_t *, uint32_t); 1643db3f65cSamw bool_t smb_opipe_hdr_xdr(XDR *xdrs, smb_opipe_hdr_t *objp); 1651fcced4cSJordan Brown int smb_netuserinfo_encode(smb_netuserinfo_t *, uint8_t *, uint32_t, uint_t *); 1661fcced4cSJordan Brown int smb_netuserinfo_decode(smb_netuserinfo_t *, uint8_t *, uint32_t, uint_t *); 1671fcced4cSJordan Brown bool_t smb_netuserinfo_xdr(XDR *, smb_netuserinfo_t *); 1681fcced4cSJordan Brown int smb_netconnectinfo_encode(smb_netconnectinfo_t *, uint8_t *, uint32_t, 16929bd2886SAlan Wright uint_t *); 1701fcced4cSJordan Brown int smb_netconnectinfo_decode(smb_netconnectinfo_t *, uint8_t *, uint32_t, 17129bd2886SAlan Wright uint_t *); 1721fcced4cSJordan Brown bool_t smb_netconnectinfo_xdr(XDR *, smb_netconnectinfo_t *); 1731fcced4cSJordan Brown int smb_netfileinfo_encode(smb_netfileinfo_t *, uint8_t *, uint32_t, uint_t *); 1741fcced4cSJordan Brown int smb_netfileinfo_decode(smb_netfileinfo_t *, uint8_t *, uint32_t, uint_t *); 1751fcced4cSJordan Brown bool_t smb_netfileinfo_xdr(XDR *, smb_netfileinfo_t *); 1761fcced4cSJordan Brown 177*fe1c642dSBill Krier typedef uint16_t sid_type_t; 178*fe1c642dSBill Krier 179*fe1c642dSBill Krier typedef struct lsa_account { 180*fe1c642dSBill Krier ntstatus_t a_status; 181*fe1c642dSBill Krier sid_type_t a_sidtype; 182*fe1c642dSBill Krier char a_domain[MAXNAMELEN]; 183*fe1c642dSBill Krier char a_name[MAXNAMELEN]; 184*fe1c642dSBill Krier char a_sid[SMB_SID_STRSZ]; 185*fe1c642dSBill Krier } lsa_account_t; 186*fe1c642dSBill Krier 187*fe1c642dSBill Krier int lsa_account_encode(lsa_account_t *, uint8_t *, uint32_t); 188*fe1c642dSBill Krier int lsa_account_decode(lsa_account_t *, uint8_t *, uint32_t); 189*fe1c642dSBill Krier bool_t lsa_account_xdr(XDR *, lsa_account_t *); 190*fe1c642dSBill Krier 19189dc44ceSjose borrego /* 19289dc44ceSjose borrego * VSS Door Structures 19389dc44ceSjose borrego */ 19489dc44ceSjose borrego #define SMB_VSS_GMT_SIZE sizeof ("@GMT-yyyy.mm.dd-hh.mm.ss") 19589dc44ceSjose borrego 19689dc44ceSjose borrego typedef struct smb_dr_get_gmttokens { 19789dc44ceSjose borrego uint32_t gg_count; 19889dc44ceSjose borrego char *gg_path; 19989dc44ceSjose borrego } smb_dr_get_gmttokens_t; 20089dc44ceSjose borrego 20189dc44ceSjose borrego typedef char *gmttoken; 20289dc44ceSjose borrego 20389dc44ceSjose borrego typedef struct smb_dr_return_gmttokens { 20489dc44ceSjose borrego uint32_t rg_count; 20589dc44ceSjose borrego struct { 20689dc44ceSjose borrego uint_t rg_gmttokens_len; 20789dc44ceSjose borrego gmttoken *rg_gmttokens_val; 20889dc44ceSjose borrego } rg_gmttokens; 20989dc44ceSjose borrego } smb_dr_return_gmttokens_t; 21089dc44ceSjose borrego 21189dc44ceSjose borrego typedef struct smb_dr_map_gmttoken { 21289dc44ceSjose borrego char *mg_path; 21389dc44ceSjose borrego char *mg_gmttoken; 21489dc44ceSjose borrego } smb_dr_map_gmttoken_t; 21589dc44ceSjose borrego 21689dc44ceSjose borrego extern bool_t xdr_smb_dr_get_gmttokens_t(XDR *, smb_dr_get_gmttokens_t *); 21789dc44ceSjose borrego extern bool_t xdr_gmttoken(XDR *, gmttoken *); 21889dc44ceSjose borrego extern bool_t xdr_smb_dr_return_gmttokens_t(XDR *xdrs, 21989dc44ceSjose borrego smb_dr_return_gmttokens_t *); 22089dc44ceSjose borrego extern bool_t xdr_smb_dr_map_gmttoken_t(XDR *, smb_dr_map_gmttoken_t *); 2213db3f65cSamw 222da6c28aaSamw #ifdef __cplusplus 223da6c28aaSamw } 224da6c28aaSamw #endif 225da6c28aaSamw 226da6c28aaSamw #endif /* _SMBSRV_SMB_XDR_H */ 227