0e66bb97d8
and the kernel instead of adding more syscalls at runtime. As a bonus, you can now restrict access to the kernel NCP interface with chmod.
392 lines
9.2 KiB
C
392 lines
9.2 KiB
C
/*
|
|
* ncp.h
|
|
*
|
|
* Copyright (C) 1995 by Volker Lendecke
|
|
* New version derived from original ncp.h, 1998 Boris Popov
|
|
*
|
|
* $FreeBSD$
|
|
*/
|
|
|
|
#ifndef _NETNCP_NCP_H_
|
|
#define _NETNCP_NCP_H_
|
|
|
|
#define NCP_VERMAJ 1
|
|
#define NCP_VERMIN 3500
|
|
#define NCP_VERSION (NCP_VERMAJ*100000 + NCP_VERMIN)
|
|
|
|
typedef u_int32_t nwdirent;
|
|
|
|
typedef char nstr8;
|
|
typedef nstr8* pnstr8;
|
|
typedef u_int8_t nuint8;
|
|
typedef u_int8_t* pnuint8;
|
|
typedef u_int16_t nuint16;
|
|
typedef nuint16* pnuint16;
|
|
typedef u_int32_t nuint32;
|
|
typedef nuint32* pnuint32;
|
|
|
|
|
|
#define NCP_DEFAULT_BUFSIZE 1024
|
|
#define NCP_MAX_BUFSIZE 1024
|
|
#define NCP_MAX_PACKET_SIZE 4070
|
|
#define NCP_MAXUSERNAMELEN 255
|
|
#define NCP_MAXPASSWORDLEN 255
|
|
#define NCP_MAXPATHLEN 255
|
|
#define NCP_MAX_FILENAME 14
|
|
#define NCP_FILE_ID_LEN 6
|
|
|
|
#define NCP_BINDERY_USER 0x0001
|
|
#define NCP_BINDERY_UGROUP 0x0002
|
|
#define NCP_BINDERY_PQUEUE 0x0003
|
|
#define NCP_BINDERY_FSERVER 0x0004
|
|
#define NCP_BINDERY_PSERVER 0x0007
|
|
#define NCP_BINDERY_NAME_LEN 48
|
|
|
|
/* Handle Flags */
|
|
#define NCP_HF_DIRSHORT 0 /* short directory handle */
|
|
#define NCP_HF_DIRBASE 1 /* directory base */
|
|
#define NCP_HF_NONE 0xff /* no handle or dirbase */
|
|
|
|
/* Options to negotiate */
|
|
#define NCP_IPX_CHECKSUM 1
|
|
#define NCP_SECURITY_LEVEL_SIGN_HEADERS 2
|
|
|
|
#ifndef NWCONN_HANDLE
|
|
#define NWCONN_HANDLE unsigned int
|
|
#define pNWCONN_HANDLE (unsigned int*)
|
|
#define NWCONN_NUM u_int16_t
|
|
#define NWCCODE unsigned int
|
|
#define NWDIR_HANDLE u_int8_t
|
|
#define NWFILE_HANDLE int
|
|
#endif
|
|
|
|
struct ncp_fh_s {
|
|
u_int16_t val1;
|
|
union {
|
|
u_int32_t val32;
|
|
u_int16_t val16;
|
|
} val;
|
|
} __packed;
|
|
|
|
typedef struct ncp_fh_s ncp_fh;
|
|
|
|
typedef struct ncpfid_s {
|
|
nwdirent f_parent;
|
|
nwdirent f_id;
|
|
} ncpfid;
|
|
|
|
/* -- Bindery properties -- */
|
|
struct ncp_bindery_object {
|
|
u_int32_t object_id;
|
|
u_int16_t object_type;
|
|
u_int8_t object_name[NCP_BINDERY_NAME_LEN];
|
|
u_int8_t object_flags;
|
|
u_int8_t object_security;
|
|
u_int8_t object_has_prop;
|
|
};
|
|
|
|
struct nw_property {
|
|
u_int8_t value[128];
|
|
u_int8_t more_flag;
|
|
u_int8_t property_flag;
|
|
};
|
|
|
|
struct ncp_filesearch_info {
|
|
u_int8_t volume_number;
|
|
u_int16_t directory_id;
|
|
u_int16_t sequence_no;
|
|
u_int8_t access_rights;
|
|
};
|
|
|
|
|
|
struct ncp_file_info {
|
|
u_int8_t file_id[NCP_FILE_ID_LEN];
|
|
char file_name[NCP_MAX_FILENAME + 1];
|
|
u_int8_t file_attributes;
|
|
u_int8_t file_mode;
|
|
u_int32_t file_length;
|
|
u_int16_t creation_date;
|
|
u_int16_t access_date;
|
|
u_int16_t update_date;
|
|
u_int16_t update_time;
|
|
};
|
|
|
|
struct nw_queue_job_entry {
|
|
u_int16_t InUse;
|
|
u_int32_t prev;
|
|
u_int32_t next;
|
|
u_int32_t ClientStation;
|
|
u_int32_t ClientTask;
|
|
u_int32_t ClientObjectID;
|
|
u_int32_t TargetServerID;
|
|
u_int8_t TargetExecTime[6];
|
|
u_int8_t JobEntryTime[6];
|
|
u_int32_t JobNumber;
|
|
u_int16_t JobType;
|
|
u_int16_t JobPosition;
|
|
u_int16_t JobControlFlags;
|
|
u_int8_t FileNameLen;
|
|
char JobFileName[13];
|
|
u_int32_t JobFileHandle;
|
|
u_int32_t ServerStation;
|
|
u_int32_t ServerTaskNumber;
|
|
u_int32_t ServerObjectID;
|
|
char JobTextDescription[50];
|
|
char ClientRecordArea[152];
|
|
} __packed;
|
|
|
|
struct queue_job {
|
|
struct nw_queue_job_entry j;
|
|
ncp_fh file_handle;
|
|
};
|
|
|
|
#define QJE_OPER_HOLD 0x80
|
|
#define QJE_USER_HOLD 0x40
|
|
#define QJE_ENTRYOPEN 0x20
|
|
#define QJE_SERV_RESTART 0x10
|
|
#define QJE_SERV_AUTO 0x08
|
|
|
|
/* ClientRecordArea for print jobs */
|
|
|
|
#define KEEP_ON 0x0400
|
|
#define NO_FORM_FEED 0x0800
|
|
#define NOTIFICATION 0x1000
|
|
#define DELETE_FILE 0x2000
|
|
#define EXPAND_TABS 0x4000
|
|
#define PRINT_BANNER 0x8000
|
|
|
|
struct print_job_record {
|
|
u_int8_t Version;
|
|
u_int8_t TabSize;
|
|
u_int16_t Copies;
|
|
u_int16_t CtrlFlags;
|
|
u_int16_t Lines;
|
|
u_int16_t Rows;
|
|
char FormName[16];
|
|
u_int8_t Reserved[6];
|
|
char BannerName[13];
|
|
char FnameBanner[13];
|
|
char FnameHeader[14];
|
|
char Path[80];
|
|
} __packed;
|
|
|
|
struct ncp_station_addr {
|
|
u_int32_t NetWork;
|
|
u_int8_t Node[6];
|
|
u_int16_t Socket;
|
|
} __packed;
|
|
|
|
struct ncp_prop_login_control {
|
|
u_int8_t AccountExpireDate[3];
|
|
u_int8_t Disabled;
|
|
u_int8_t PasswordExpireDate[3];
|
|
u_int8_t GraceLogins;
|
|
u_int16_t PasswordExpireInterval;
|
|
u_int8_t MaxGraceLogins;
|
|
u_int8_t MinPasswordLength;
|
|
u_int16_t MaxConnections;
|
|
u_int8_t ConnectionTimeMask[42];
|
|
u_int8_t LastLogin[6];
|
|
u_int8_t RestrictionMask;
|
|
u_int8_t reserved;
|
|
u_int32_t MaxDiskUsage;
|
|
u_int16_t BadLoginCount;
|
|
u_int32_t BadLoginCountDown;
|
|
struct ncp_station_addr LastIntruder;
|
|
} __packed;
|
|
|
|
#define NCP_VOLNAME_LEN (16)
|
|
#define NCP_NUMBER_OF_VOLUMES (64)
|
|
struct ncp_volume_info {
|
|
u_int32_t total_blocks;
|
|
u_int32_t free_blocks;
|
|
u_int32_t purgeable_blocks;
|
|
u_int32_t not_yet_purgeable_blocks;
|
|
u_int32_t total_dir_entries;
|
|
u_int32_t available_dir_entries;
|
|
u_int8_t sectors_per_block;
|
|
char volume_name[NCP_VOLNAME_LEN + 1];
|
|
};
|
|
/*
|
|
* Name space constants, taken from NDK
|
|
*/
|
|
#define aRONLY (ntohl(0x01000000))
|
|
#define aHIDDEN (ntohl(0x02000000))
|
|
#define aSYSTEM (ntohl(0x04000000))
|
|
#define aEXECUTE (ntohl(0x08000000))
|
|
#define aDIR (ntohl(0x10000000))
|
|
#define aARCH (ntohl(0x20000000))
|
|
|
|
/* Defines for Name Spaces */
|
|
#define NW_NS_DOS 0
|
|
#define NW_NS_MAC 1
|
|
#define NW_NS_NFS 2
|
|
#define NW_NS_FTAM 3
|
|
#define NW_NS_OS2 4
|
|
|
|
/* for _ScanNSEntryInfo */
|
|
#define IM_NAME 0x00000001
|
|
#define IM_SPACE_ALLOCATED 0x00000002
|
|
#define IM_ATTRIBUTES 0x00000004
|
|
#define IM_SIZE 0x00000008
|
|
#define IM_TOTAL_SIZE 0x00000010
|
|
#define IM_EA 0x00000020
|
|
#define IM_ARCHIVE 0x00000040
|
|
#define IM_MODIFY 0x00000080
|
|
#define IM_CREATION 0x00000100
|
|
#define IM_OWNING_NAMESPACE 0x00000200
|
|
#define IM_DIRECTORY 0x00000400
|
|
#define IM_RIGHTS 0x00000800
|
|
#define IM_ALMOST_ALL 0x00000FED
|
|
#define IM_ALL 0x00000FFF
|
|
#define IM_REFERENCE_ID 0x00001000
|
|
#define IM_NS_ATTRIBUTES 0x00002000
|
|
#define IM_COMPRESSED_INFO 0x80000000UL
|
|
|
|
/* open/create modes */
|
|
#define OC_MODE_OPEN 0x01
|
|
#define OC_MODE_TRUNCATE 0x02
|
|
#define OC_MODE_REPLACE 0x02
|
|
#define OC_MODE_CREATE 0x08
|
|
|
|
/* open/create results */
|
|
#define OC_ACTION_NONE 0x00
|
|
#define OC_ACTION_OPEN 0x01
|
|
#define OC_ACTION_CREATE 0x02
|
|
#define OC_ACTION_TRUNCATE 0x04
|
|
#define OC_ACTION_REPLACE 0x04
|
|
|
|
/* renameFlag in NSRename */
|
|
#define NW_TYPE_FILE 0x8000
|
|
#define NW_TYPE_SUBDIR 0x0010
|
|
|
|
#define NW_NAME_CONVERT 0x0003 /* don't report error and set comp mode */
|
|
#define NW_NO_NAME_CONVERT 0x0004 /* only in specified name space */
|
|
|
|
/* search attributes */
|
|
#ifndef SA_HIDDEN
|
|
#define SA_NORMAL 0x0000
|
|
#define SA_HIDDEN 0x0002
|
|
#define SA_SYSTEM 0x0004
|
|
#define SA_SUBDIR_ONLY 0x0010
|
|
#define SA_SUBDIR_FILES 0x8000
|
|
#define SA_ALL 0x8006
|
|
#endif
|
|
|
|
/* access rights attributes */
|
|
#ifndef AR_READ
|
|
#define AR_READ 0x0001
|
|
#define AR_WRITE 0x0002
|
|
#define AR_READ_ONLY 0x0001
|
|
#define AR_WRITE_ONLY 0x0002
|
|
#define AR_DENY_READ 0x0004
|
|
#define AR_DENY_WRITE 0x0008
|
|
#define AR_COMPATIBILITY 0x0010
|
|
#define AR_WRITE_THROUGH 0x0040
|
|
#define AR_OPEN_COMPRESSED 0x0100
|
|
#endif
|
|
|
|
struct nw_entry_info {
|
|
u_int32_t spaceAlloc;
|
|
u_int32_t attributes; /* LH */
|
|
u_int16_t flags; /* internal */
|
|
u_int32_t dataStreamSize;
|
|
u_int32_t totalStreamSize;
|
|
u_int16_t numberOfStreams;
|
|
u_int16_t creationTime; /* LH */
|
|
u_int16_t creationDate; /* LH */
|
|
u_int32_t creatorID; /* HL */
|
|
u_int16_t modifyTime; /* LH */
|
|
u_int16_t modifyDate; /* LH */
|
|
u_int32_t modifierID; /* HL */
|
|
u_int16_t lastAccessDate; /* LH */
|
|
u_int16_t archiveTime; /* LH */
|
|
u_int16_t archiveDate; /* LH */
|
|
u_int32_t archiverID; /* HL */
|
|
u_int16_t inheritedRightsMask; /* LH */
|
|
u_int32_t dirEntNum;
|
|
u_int32_t DosDirNum;
|
|
u_int32_t volNumber;
|
|
u_int32_t EADataSize;
|
|
u_int32_t EAKeyCount;
|
|
u_int32_t EAKeySize;
|
|
u_int32_t NSCreator;
|
|
u_int8_t nameLen;
|
|
u_int8_t entryName[256];
|
|
} __packed;
|
|
|
|
typedef struct nw_entry_info NW_ENTRY_INFO;
|
|
|
|
/* modify mask - use with MODIFY_DOS_INFO structure */
|
|
#define DM_ATTRIBUTES 0x0002L
|
|
#define DM_CREATE_DATE 0x0004L
|
|
#define DM_CREATE_TIME 0x0008L
|
|
#define DM_CREATOR_ID 0x0010L
|
|
#define DM_ARCHIVE_DATE 0x0020L
|
|
#define DM_ARCHIVE_TIME 0x0040L
|
|
#define DM_ARCHIVER_ID 0x0080L
|
|
#define DM_MODIFY_DATE 0x0100L
|
|
#define DM_MODIFY_TIME 0x0200L
|
|
#define DM_MODIFIER_ID 0x0400L
|
|
#define DM_LAST_ACCESS_DATE 0x0800L
|
|
#define DM_INHERITED_RIGHTS_MASK 0x1000L
|
|
#define DM_MAXIMUM_SPACE 0x2000L
|
|
|
|
struct nw_modify_dos_info {
|
|
u_int32_t attributes;
|
|
u_int16_t creationDate;
|
|
u_int16_t creationTime;
|
|
u_int32_t creatorID;
|
|
u_int16_t modifyDate;
|
|
u_int16_t modifyTime;
|
|
u_int32_t modifierID;
|
|
u_int16_t archiveDate;
|
|
u_int16_t archiveTime;
|
|
u_int32_t archiverID;
|
|
u_int16_t lastAccessDate;
|
|
u_int16_t inheritanceGrantMask;
|
|
u_int16_t inheritanceRevokeMask;
|
|
u_int32_t maximumSpace;
|
|
} __packed;
|
|
|
|
struct nw_search_seq {
|
|
u_int8_t volNumber;
|
|
u_int32_t dirNumber;
|
|
u_int32_t searchDirNumber;
|
|
} __packed;
|
|
|
|
typedef struct nw_search_seq SEARCH_SEQUENCE;
|
|
|
|
struct ncp_file_server_info {
|
|
u_int8_t ServerName[48];
|
|
u_int8_t FileServiceVersion;
|
|
u_int8_t FileServiceSubVersion;
|
|
u_int16_t MaximumServiceConnections;
|
|
u_int16_t ConnectionsInUse;
|
|
u_int16_t NumberMountedVolumes;
|
|
u_int8_t Revision;
|
|
u_int8_t SFTLevel;
|
|
u_int8_t TTSLevel;
|
|
u_int16_t MaxConnectionsEverUsed;
|
|
u_int8_t AccountVersion;
|
|
u_int8_t VAPVersion;
|
|
u_int8_t QueueVersion;
|
|
u_int8_t PrintVersion;
|
|
u_int8_t VirtualConsoleVersion;
|
|
u_int8_t RestrictionLevel;
|
|
u_int8_t InternetBridge;
|
|
u_int8_t Reserved[60];
|
|
} __packed;
|
|
|
|
struct nw_time_buffer {
|
|
u_int8_t year;
|
|
u_int8_t month;
|
|
u_int8_t day;
|
|
u_int8_t hour;
|
|
u_int8_t minute;
|
|
u_int8_t second;
|
|
u_int8_t wday;
|
|
} __packed;
|
|
|
|
#endif /*_NCP_H_ */
|