1 /*
2  *  ncp.h
3  */
4 /*-
5  *  Copyright (C) 1995 by Volker Lendecke
6  *  New version derived from original ncp.h, 1998 Boris Popov
7  *
8  * $FreeBSD: stable/9/sys/netncp/ncp.h 139823 2005-01-07 01:45:51Z imp $
9  */
10 
11 #ifndef _NETNCP_NCP_H_
12 #define _NETNCP_NCP_H_
13 
14 #define NCP_VERMAJ	1
15 #define NCP_VERMIN	3500
16 #define NCP_VERSION	(NCP_VERMAJ*100000 + NCP_VERMIN)
17 
18 typedef u_int32_t	nwdirent;
19 
20 typedef char		nstr8;
21 typedef	nstr8*		pnstr8;
22 typedef u_int8_t	nuint8;
23 typedef u_int8_t*	pnuint8;
24 typedef u_int16_t	nuint16;
25 typedef	nuint16*	pnuint16;
26 typedef u_int32_t	nuint32;
27 typedef	nuint32*	pnuint32;
28 
29 
30 #define NCP_DEFAULT_BUFSIZE 	1024
31 #define NCP_MAX_BUFSIZE		1024
32 #define NCP_MAX_PACKET_SIZE 	4070
33 #define	NCP_MAXUSERNAMELEN	255
34 #define	NCP_MAXPASSWORDLEN	255
35 #define NCP_MAXPATHLEN		255
36 #define NCP_MAX_FILENAME 	14
37 #define NCP_FILE_ID_LEN		6
38 
39 #define NCP_BINDERY_USER	0x0001
40 #define NCP_BINDERY_UGROUP	0x0002
41 #define NCP_BINDERY_PQUEUE	0x0003
42 #define NCP_BINDERY_FSERVER	0x0004
43 #define NCP_BINDERY_PSERVER	0x0007
44 #define NCP_BINDERY_NAME_LEN	48
45 
46 /* Handle Flags */
47 #define	NCP_HF_DIRSHORT		0		/* short directory handle */
48 #define	NCP_HF_DIRBASE		1		/* directory base */
49 #define	NCP_HF_NONE		0xff		/* no handle or dirbase */
50 
51 /* Options to negotiate */
52 #define	NCP_IPX_CHECKSUM		1
53 #define	NCP_SECURITY_LEVEL_SIGN_HEADERS	2
54 
55 #ifndef NWCONN_HANDLE
56 #define NWCONN_HANDLE   unsigned int
57 #define pNWCONN_HANDLE  (unsigned int*)
58 #define NWCONN_NUM      u_int16_t
59 #define NWCCODE         unsigned int
60 #define NWDIR_HANDLE    u_int8_t
61 #define NWFILE_HANDLE   int
62 #endif
63 
64 struct ncp_fh_s {
65 	u_int16_t val1;
66 	union {
67 		u_int32_t val32;
68 		u_int16_t val16;
69 	} val;
70 } __packed;
71 
72 typedef	struct ncp_fh_s ncp_fh;
73 
74 typedef struct ncpfid_s {
75 	nwdirent	f_parent;
76 	nwdirent	f_id;
77 } ncpfid;
78 
79 /* -- Bindery properties -- */
80 struct ncp_bindery_object {
81 	u_int32_t	object_id;
82 	u_int16_t	object_type;
83 	u_int8_t	object_name[NCP_BINDERY_NAME_LEN];
84 	u_int8_t	object_flags;
85 	u_int8_t	object_security;
86 	u_int8_t	object_has_prop;
87 };
88 
89 struct nw_property {
90 	u_int8_t	value[128];
91 	u_int8_t	more_flag;
92 	u_int8_t	property_flag;
93 };
94 
95 struct ncp_filesearch_info {
96 	u_int8_t	volume_number;
97 	u_int16_t	directory_id;
98 	u_int16_t	sequence_no;
99 	u_int8_t	access_rights;
100 };
101 
102 
103 struct ncp_file_info {
104 	u_int8_t	file_id[NCP_FILE_ID_LEN];
105 	char		file_name[NCP_MAX_FILENAME + 1];
106 	u_int8_t	file_attributes;
107 	u_int8_t	file_mode;
108 	u_int32_t	file_length;
109 	u_int16_t	creation_date;
110 	u_int16_t	access_date;
111 	u_int16_t	update_date;
112 	u_int16_t	update_time;
113 };
114 
115 struct nw_queue_job_entry {
116 	u_int16_t	InUse;
117 	u_int32_t	prev;
118 	u_int32_t	next;
119 	u_int32_t	ClientStation;
120 	u_int32_t	ClientTask;
121 	u_int32_t	ClientObjectID;
122 	u_int32_t	TargetServerID;
123 	u_int8_t	TargetExecTime[6];
124 	u_int8_t	JobEntryTime[6];
125 	u_int32_t	JobNumber;
126 	u_int16_t	JobType;
127 	u_int16_t	JobPosition;
128 	u_int16_t	JobControlFlags;
129 	u_int8_t	FileNameLen;
130 	char		JobFileName[13];
131 	u_int32_t	JobFileHandle;
132 	u_int32_t	ServerStation;
133 	u_int32_t	ServerTaskNumber;
134 	u_int32_t	ServerObjectID;
135 	char		JobTextDescription[50];
136 	char		ClientRecordArea[152];
137 } __packed;
138 
139 struct queue_job {
140 	struct nw_queue_job_entry j;
141 	ncp_fh file_handle;
142 };
143 
144 #define QJE_OPER_HOLD	0x80
145 #define QJE_USER_HOLD	0x40
146 #define QJE_ENTRYOPEN	0x20
147 #define QJE_SERV_RESTART    0x10
148 #define QJE_SERV_AUTO	    0x08
149 
150 /* ClientRecordArea for print jobs */
151 
152 #define   KEEP_ON        0x0400
153 #define   NO_FORM_FEED   0x0800
154 #define   NOTIFICATION   0x1000
155 #define   DELETE_FILE    0x2000
156 #define   EXPAND_TABS    0x4000
157 #define   PRINT_BANNER   0x8000
158 
159 struct print_job_record {
160 	u_int8_t	Version;
161 	u_int8_t	TabSize;
162 	u_int16_t	Copies;
163 	u_int16_t	CtrlFlags;
164 	u_int16_t	Lines;
165 	u_int16_t	Rows;
166 	char		FormName[16];
167 	u_int8_t	Reserved[6];
168 	char		BannerName[13];
169 	char		FnameBanner[13];
170 	char		FnameHeader[14];
171 	char		Path[80];
172 } __packed;
173 
174 struct ncp_station_addr {
175 	u_int32_t	NetWork;
176 	u_int8_t	Node[6];
177 	u_int16_t	Socket;
178 } __packed;
179 
180 struct ncp_prop_login_control {
181 	u_int8_t	AccountExpireDate[3];
182 	u_int8_t	Disabled;
183 	u_int8_t	PasswordExpireDate[3];
184 	u_int8_t	GraceLogins;
185 	u_int16_t	PasswordExpireInterval;
186 	u_int8_t	MaxGraceLogins;
187 	u_int8_t	MinPasswordLength;
188 	u_int16_t	MaxConnections;
189 	u_int8_t	ConnectionTimeMask[42];
190 	u_int8_t	LastLogin[6];
191 	u_int8_t	RestrictionMask;
192 	u_int8_t	reserved;
193 	u_int32_t	MaxDiskUsage;
194 	u_int16_t	BadLoginCount;
195 	u_int32_t	BadLoginCountDown;
196 	struct ncp_station_addr LastIntruder;
197 } __packed;
198 
199 #define NCP_VOLNAME_LEN (16)
200 #define NCP_NUMBER_OF_VOLUMES (64)
201 struct ncp_volume_info {
202 	u_int32_t total_blocks;
203 	u_int32_t free_blocks;
204 	u_int32_t purgeable_blocks;
205 	u_int32_t not_yet_purgeable_blocks;
206 	u_int32_t total_dir_entries;
207 	u_int32_t available_dir_entries;
208 	u_int8_t sectors_per_block;
209 	char volume_name[NCP_VOLNAME_LEN + 1];
210 };
211 /*
212  * Name space constants, taken from NDK
213  */
214 #define aRONLY     (ntohl(0x01000000))
215 #define aHIDDEN    (ntohl(0x02000000))
216 #define aSYSTEM    (ntohl(0x04000000))
217 #define aEXECUTE   (ntohl(0x08000000))
218 #define aDIR       (ntohl(0x10000000))
219 #define aARCH      (ntohl(0x20000000))
220 
221 /* Defines for Name Spaces */
222 #define NW_NS_DOS     0
223 #define NW_NS_MAC     1
224 #define NW_NS_NFS     2
225 #define NW_NS_FTAM    3
226 #define NW_NS_OS2     4
227 
228 /* for _ScanNSEntryInfo */
229 #define	IM_NAME			0x00000001
230 #define	IM_SPACE_ALLOCATED	0x00000002
231 #define IM_ATTRIBUTES		0x00000004
232 #define IM_SIZE			0x00000008
233 #define IM_TOTAL_SIZE		0x00000010
234 #define IM_EA			0x00000020
235 #define IM_ARCHIVE		0x00000040
236 #define IM_MODIFY		0x00000080
237 #define IM_CREATION		0x00000100
238 #define IM_OWNING_NAMESPACE	0x00000200
239 #define IM_DIRECTORY		0x00000400
240 #define IM_RIGHTS		0x00000800
241 #define	IM_ALMOST_ALL		0x00000FED
242 #define IM_ALL			0x00000FFF
243 #define	IM_REFERENCE_ID		0x00001000
244 #define	IM_NS_ATTRIBUTES	0x00002000
245 #define IM_COMPRESSED_INFO	0x80000000UL
246 
247 /* open/create modes */
248 #define OC_MODE_OPEN		0x01
249 #define OC_MODE_TRUNCATE	0x02
250 #define OC_MODE_REPLACE		0x02
251 #define OC_MODE_CREATE		0x08
252 
253 /* open/create results */
254 #define OC_ACTION_NONE		0x00
255 #define OC_ACTION_OPEN		0x01
256 #define OC_ACTION_CREATE	0x02
257 #define OC_ACTION_TRUNCATE	0x04
258 #define OC_ACTION_REPLACE	0x04
259 
260 /* renameFlag in NSRename */
261 #define	NW_TYPE_FILE		0x8000
262 #define	NW_TYPE_SUBDIR		0x0010
263 
264 #define	NW_NAME_CONVERT		0x0003	/* don't report error and set comp mode */
265 #define	NW_NO_NAME_CONVERT	0x0004	/* only in specified name space */
266 
267 /* search attributes */
268 #ifndef SA_HIDDEN
269 #define SA_NORMAL         0x0000
270 #define SA_HIDDEN         0x0002
271 #define SA_SYSTEM         0x0004
272 #define SA_SUBDIR_ONLY    0x0010
273 #define SA_SUBDIR_FILES   0x8000
274 #define SA_ALL            0x8006
275 #endif
276 
277 /* access rights attributes */
278 #ifndef AR_READ
279 #define AR_READ			0x0001
280 #define AR_WRITE		0x0002
281 #define AR_READ_ONLY		0x0001
282 #define AR_WRITE_ONLY		0x0002
283 #define AR_DENY_READ		0x0004
284 #define AR_DENY_WRITE		0x0008
285 #define AR_COMPATIBILITY	0x0010
286 #define AR_WRITE_THROUGH	0x0040
287 #define AR_OPEN_COMPRESSED	0x0100
288 #endif
289 
290 struct nw_entry_info {
291 	u_int32_t	spaceAlloc;
292 	u_int32_t	attributes;	/* LH */
293 	u_int16_t	flags;		/* internal */
294 	u_int32_t	dataStreamSize;
295 	u_int32_t	totalStreamSize;
296 	u_int16_t	numberOfStreams;
297 	u_int16_t	creationTime;	/* LH */
298 	u_int16_t	creationDate;	/* LH */
299 	u_int32_t	creatorID;	/* HL */
300 	u_int16_t	modifyTime;	/* LH */
301 	u_int16_t	modifyDate;	/* LH */
302 	u_int32_t	modifierID;	/* HL */
303 	u_int16_t	lastAccessDate;	/* LH */
304 	u_int16_t	archiveTime;	/* LH */
305 	u_int16_t	archiveDate;	/* LH */
306 	u_int32_t	archiverID;	/* HL */
307 	u_int16_t	inheritedRightsMask;	/* LH */
308 	u_int32_t	dirEntNum;
309 	u_int32_t	DosDirNum;
310 	u_int32_t	volNumber;
311 	u_int32_t	EADataSize;
312 	u_int32_t	EAKeyCount;
313 	u_int32_t	EAKeySize;
314 	u_int32_t	NSCreator;
315 	u_int8_t	nameLen;
316 	u_int8_t	entryName[256];
317 } __packed;
318 
319 typedef struct nw_entry_info NW_ENTRY_INFO;
320 
321 /* modify mask - use with MODIFY_DOS_INFO structure */
322 #define DM_ATTRIBUTES		0x0002L
323 #define DM_CREATE_DATE		0x0004L
324 #define DM_CREATE_TIME		0x0008L
325 #define DM_CREATOR_ID		0x0010L
326 #define DM_ARCHIVE_DATE		0x0020L
327 #define DM_ARCHIVE_TIME		0x0040L
328 #define DM_ARCHIVER_ID		0x0080L
329 #define DM_MODIFY_DATE		0x0100L
330 #define DM_MODIFY_TIME		0x0200L
331 #define DM_MODIFIER_ID		0x0400L
332 #define DM_LAST_ACCESS_DATE	0x0800L
333 #define DM_INHERITED_RIGHTS_MASK	0x1000L
334 #define DM_MAXIMUM_SPACE	0x2000L
335 
336 struct nw_modify_dos_info {
337 	u_int32_t attributes;
338 	u_int16_t creationDate;
339 	u_int16_t creationTime;
340 	u_int32_t creatorID;
341 	u_int16_t modifyDate;
342 	u_int16_t modifyTime;
343 	u_int32_t modifierID;
344 	u_int16_t archiveDate;
345 	u_int16_t archiveTime;
346 	u_int32_t archiverID;
347 	u_int16_t lastAccessDate;
348 	u_int16_t inheritanceGrantMask;
349 	u_int16_t inheritanceRevokeMask;
350 	u_int32_t maximumSpace;
351 }  __packed;
352 
353 struct nw_search_seq {
354 	u_int8_t	volNumber;
355 	u_int32_t	dirNumber;
356 	u_int32_t	searchDirNumber;
357 }  __packed;
358 
359 typedef struct nw_search_seq SEARCH_SEQUENCE;
360 
361 struct ncp_file_server_info {
362 	u_int8_t	ServerName[48];
363 	u_int8_t	FileServiceVersion;
364 	u_int8_t	FileServiceSubVersion;
365 	u_int16_t	MaximumServiceConnections;
366 	u_int16_t	ConnectionsInUse;
367 	u_int16_t	NumberMountedVolumes;
368 	u_int8_t	Revision;
369 	u_int8_t	SFTLevel;
370 	u_int8_t	TTSLevel;
371 	u_int16_t	MaxConnectionsEverUsed;
372 	u_int8_t	AccountVersion;
373 	u_int8_t	VAPVersion;
374 	u_int8_t	QueueVersion;
375 	u_int8_t	PrintVersion;
376 	u_int8_t	VirtualConsoleVersion;
377 	u_int8_t	RestrictionLevel;
378 	u_int8_t	InternetBridge;
379 	u_int8_t	Reserved[60];
380 } __packed;
381 
382 struct nw_time_buffer {
383 	u_int8_t	year;
384 	u_int8_t	month;
385 	u_int8_t	day;
386 	u_int8_t	hour;
387 	u_int8_t	minute;
388 	u_int8_t	second;
389 	u_int8_t	wday;
390 } __packed;
391 
392 #endif /*_NCP_H_ */
393