3882 Remove xmod & friends
[illumos-gate.git] / usr / src / uts / common / smbsrv / smb_xdr.h
blob34c140fc6b41b777b4c6796036f5e7e7f3c31795
1 /*
2 * CDDL HEADER START
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
19 * CDDL HEADER END
22 * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
25 #ifndef _SMBSRV_SMB_XDR_H
26 #define _SMBSRV_SMB_XDR_H
28 #ifdef __cplusplus
29 extern "C" {
30 #endif
32 #include <rpc/xdr.h>
33 #include <sys/param.h>
34 #include <sys/avl.h>
35 #include <smbsrv/wintypes.h>
36 #include <smbsrv/smb_sid.h>
37 #include <smbsrv/smbinfo.h>
38 #include <smbsrv/smb_ioctl.h>
39 #include <smbsrv/smb_sid.h>
40 #include <smbsrv/smb_share.h>
41 #include <smbsrv/smb_dfs.h>
42 #include <smbsrv/wintypes.h>
44 #ifdef _KERNEL
45 #define xdr_int8_t xdr_char
46 #define xdr_uint8_t xdr_u_char
47 #define xdr_int16_t xdr_short
48 #define xdr_uint16_t xdr_u_short
49 #endif /* _KERNEL */
51 /* null-terminated string */
52 typedef struct smb_string {
53 char *buf;
54 } smb_string_t;
56 /* 32-bit opaque buffer (non-null terminated strings) */
57 typedef struct smb_buf32 {
58 uint32_t len;
59 uint8_t *val;
60 } smb_buf32_t;
62 #define SMB_OPIPE_HDR_MAGIC 0x4F484452 /* OHDR */
63 #define SMB_OPIPE_DOOR_BUFSIZE (30 * 1024)
66 * Door operations for opipes.
68 typedef enum {
69 SMB_OPIPE_NULL = 0,
70 SMB_OPIPE_LOOKUP,
71 SMB_OPIPE_OPEN,
72 SMB_OPIPE_CLOSE,
73 SMB_OPIPE_READ,
74 SMB_OPIPE_WRITE,
75 SMB_OPIPE_EXEC
76 } smb_opipe_op_t;
78 #define SMB_DOOR_HDR_MAGIC 0x444F4F52 /* DOOR */
81 * Door header flags.
83 #define SMB_DF_ASYNC 0x00000001 /* Asynchronous call */
84 #define SMB_DF_SYSSPACE 0x00000002 /* Called from the kernel */
85 #define SMB_DF_USERSPACE 0x00000004 /* Called from user space */
88 * Header for door calls. The op codes and return codes are defined
89 * in smb_door.h. The header is here to make it available to XDR.
91 * fid For opipe: the pipe identifier.
92 * op The door operation being invoked.
93 * txid Unique transaction id for the current door call.
94 * datalen Bytes of data following the header (excludes the header).
95 * resid For opipe: the number of bytes remaining in the server.
96 * door_rc Return code provided by the door server.
97 * status A pass-through status provided by the door operation.
99 typedef struct smb_doorhdr {
100 uint32_t dh_magic;
101 uint32_t dh_flags;
102 uint32_t dh_fid;
103 uint32_t dh_op;
104 uint32_t dh_txid;
105 uint32_t dh_datalen;
106 uint32_t dh_resid;
107 uint32_t dh_door_rc;
108 uint32_t dh_status;
109 } smb_doorhdr_t;
111 typedef struct smb_netuserinfo {
112 uint64_t ui_session_id;
113 uint16_t ui_smb_uid;
114 uint16_t ui_domain_len;
115 char *ui_domain;
116 uint16_t ui_account_len;
117 char *ui_account;
118 uid_t ui_posix_uid;
119 uint16_t ui_workstation_len;
120 char *ui_workstation;
121 smb_inaddr_t ui_ipaddr;
122 int32_t ui_native_os;
123 int64_t ui_logon_time;
124 uint32_t ui_numopens;
125 uint32_t ui_flags;
126 } smb_netuserinfo_t;
128 typedef struct smb_opennum {
129 uint32_t open_users;
130 uint32_t open_trees;
131 uint32_t open_files;
132 uint32_t qualtype;
133 char qualifier[MAXNAMELEN];
134 } smb_opennum_t;
136 typedef struct smb_netconnectinfo {
137 uint32_t ci_id;
138 uint32_t ci_type;
139 uint32_t ci_numopens;
140 uint32_t ci_numusers;
141 uint32_t ci_time;
142 uint32_t ci_namelen;
143 uint32_t ci_sharelen;
144 char *ci_username;
145 char *ci_share;
146 } smb_netconnectinfo_t;
148 typedef struct smb_netfileinfo {
149 uint16_t fi_fid;
150 uint32_t fi_uniqid;
151 uint32_t fi_permissions;
152 uint32_t fi_numlocks;
153 uint32_t fi_pathlen;
154 uint32_t fi_namelen;
155 char *fi_path;
156 char *fi_username;
157 } smb_netfileinfo_t;
159 typedef struct smb_netsvcitem {
160 list_node_t nsi_lnd;
161 union {
162 smb_netuserinfo_t nsi_user;
163 smb_netconnectinfo_t nsi_tree;
164 smb_netfileinfo_t nsi_ofile;
165 } nsi_un;
166 } smb_netsvcitem_t;
168 typedef struct smb_netsvc {
169 list_t ns_list;
170 smb_netsvcitem_t *ns_items;
171 smb_ioc_svcenum_t *ns_ioc;
172 uint32_t ns_ioclen;
173 } smb_netsvc_t;
176 bool_t smb_buf32_xdr(XDR *, smb_buf32_t *);
177 bool_t smb_string_xdr(XDR *, smb_string_t *);
178 bool_t smb_inaddr_xdr(XDR *, smb_inaddr_t *);
180 const char *smb_doorhdr_opname(uint32_t);
181 int smb_doorhdr_encode(smb_doorhdr_t *, uint8_t *, uint32_t);
182 int smb_doorhdr_decode(smb_doorhdr_t *, uint8_t *, uint32_t);
183 bool_t smb_doorhdr_xdr(XDR *xdrs, smb_doorhdr_t *objp);
184 int smb_netuserinfo_encode(smb_netuserinfo_t *, uint8_t *, uint32_t, uint_t *);
185 int smb_netuserinfo_decode(smb_netuserinfo_t *, uint8_t *, uint32_t, uint_t *);
186 bool_t smb_netuserinfo_xdr(XDR *, smb_netuserinfo_t *);
187 int smb_netconnectinfo_encode(smb_netconnectinfo_t *, uint8_t *, uint32_t,
188 uint_t *);
189 int smb_netconnectinfo_decode(smb_netconnectinfo_t *, uint8_t *, uint32_t,
190 uint_t *);
191 bool_t smb_netconnectinfo_xdr(XDR *, smb_netconnectinfo_t *);
192 int smb_netfileinfo_encode(smb_netfileinfo_t *, uint8_t *, uint32_t, uint_t *);
193 int smb_netfileinfo_decode(smb_netfileinfo_t *, uint8_t *, uint32_t, uint_t *);
194 bool_t smb_netfileinfo_xdr(XDR *, smb_netfileinfo_t *);
196 typedef uint16_t sid_type_t;
198 typedef struct lsa_account {
199 ntstatus_t a_status;
200 sid_type_t a_sidtype;
201 char a_domain[MAXNAMELEN];
202 char a_name[MAXNAMELEN];
203 char a_sid[SMB_SID_STRSZ];
204 } lsa_account_t;
206 int lsa_account_encode(lsa_account_t *, uint8_t *, uint32_t);
207 int lsa_account_decode(lsa_account_t *, uint8_t *, uint32_t);
208 bool_t lsa_account_xdr(XDR *, lsa_account_t *);
211 * VSS Door Structures
213 #define SMB_VSS_GMT_SIZE sizeof ("@GMT-yyyy.mm.dd-hh.mm.ss")
215 typedef struct smb_gmttoken_query {
216 uint32_t gtq_count;
217 char *gtq_path;
218 } smb_gmttoken_query_t;
220 typedef char *smb_gmttoken_t;
222 typedef struct smb_gmttoken_response {
223 uint32_t gtr_count;
224 struct {
225 uint_t gtr_gmttokens_len;
226 smb_gmttoken_t *gtr_gmttokens_val;
227 } gtr_gmttokens;
228 } smb_gmttoken_response_t;
230 typedef struct smb_gmttoken_snapname {
231 char *gts_path;
232 char *gts_gmttoken;
233 } smb_gmttoken_snapname_t;
235 bool_t smb_gmttoken_query_xdr(XDR *, smb_gmttoken_query_t *);
236 bool_t smb_gmttoken_response_xdr(XDR *, smb_gmttoken_response_t *);
237 bool_t smb_gmttoken_snapname_xdr(XDR *, smb_gmttoken_snapname_t *);
240 * User and Group Quotas
242 * SMB User and Group quota values of SMB_QUOTA_UNLIMITED mean
243 * No Limit. This maps to 0 (none) on ZFS.
245 #define SMB_QUOTA_UNLIMITED 0xFFFFFFFFFFFFFFFF
247 typedef struct smb_quota {
248 list_node_t q_list_node;
249 char q_sidstr[SMB_SID_STRSZ];
250 uint32_t q_sidtype;
251 uint64_t q_used;
252 uint64_t q_thresh;
253 uint64_t q_limit;
254 avl_node_t q_avl_node;
255 } smb_quota_t;
257 typedef struct smb_quota_sid {
258 list_node_t qs_list_node;
259 char qs_sidstr[SMB_SID_STRSZ];
260 } smb_quota_sid_t;
262 typedef enum {
263 SMB_QUOTA_QUERY_INVALID_OP,
264 SMB_QUOTA_QUERY_SIDLIST,
265 SMB_QUOTA_QUERY_STARTSID,
266 SMB_QUOTA_QUERY_ALL
267 } smb_quota_query_op_t;
269 typedef struct smb_quota_query {
270 char *qq_root_path;
271 uint32_t qq_query_op; /* smb_quota_query_op_t */
272 bool_t qq_single;
273 bool_t qq_restart;
274 uint32_t qq_max_quota;
275 list_t qq_sid_list; /* list of smb_quota_sid_t */
276 } smb_quota_query_t;
278 typedef struct smb_quota_response {
279 uint32_t qr_status;
280 list_t qr_quota_list; /* list of smb_quota_t */
281 } smb_quota_response_t;
283 typedef struct smb_quota_set {
284 char *qs_root_path;
285 list_t qs_quota_list; /* list of smb_quota_t */
286 } smb_quota_set_t;
288 bool_t smb_quota_query_xdr(XDR *, smb_quota_query_t *);
289 bool_t smb_quota_response_xdr(XDR *, smb_quota_response_t *);
290 bool_t smb_quota_set_xdr(XDR *, smb_quota_set_t *);
292 typedef struct dfs_referral_query {
293 dfs_reftype_t rq_type;
294 char *rq_path;
295 } dfs_referral_query_t;
297 typedef struct dfs_referral_response {
298 dfs_info_t rp_referrals;
299 uint32_t rp_status;
300 } dfs_referral_response_t;
302 bool_t dfs_referral_query_xdr(XDR *, dfs_referral_query_t *);
303 bool_t dfs_referral_response_xdr(XDR *, dfs_referral_response_t *);
305 typedef struct smb_shr_hostaccess_query {
306 char *shq_none;
307 char *shq_ro;
308 char *shq_rw;
309 uint32_t shq_flag;
310 smb_inaddr_t shq_ipaddr;
311 } smb_shr_hostaccess_query_t;
313 bool_t smb_shr_hostaccess_query_xdr(XDR *, smb_shr_hostaccess_query_t *);
314 bool_t smb_shr_execinfo_xdr(XDR *, smb_shr_execinfo_t *);
316 #ifdef __cplusplus
318 #endif
320 #endif /* _SMBSRV_SMB_XDR_H */