/* ncplib.h Copyright (C) 1995, 1996 by Volker Lendecke Copyright (C) 1997-2001 Petr Vandrovec Copyright (C) 2005 Scott Bentley This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Revision history: 0.00 1995 Volker Lendecke Initial revision. 0.01 1995-1999 Petr Vandrovec Dave Woodhouse Roumen Petrov Arne de Bruijn New APIs Big-endian support Glibc2 support Glibc2.1 support 1.00 1999, November 20 Petr Vandrovec Added license. 1.01 2000, May 17 Bruce Richardson Added ncp_perms_to_str and ncp_str_to_perms. 1.02 2000, May 24 Petr Vandrovec Added NWLogoutFromFileServer. 1.03 2001, September 15 Petr Vandrovec Fixes for SWIG. Unwind nested structs so that names are defined here and not by SWIG. 1.04 2001, November 4 Petr Vandrovec Next set of SWIG fixes. 1.05 2001, December 12 Hans Grobler Added NCP_PERM_ALL, ncp_ns_delete_entry and full NET_ADDRESS_TYPE definition. 1.06 2005, May Scott Bentley Added ncp_ns_scan_salvageable_file2(). Added ncp_ns_salvage_file(). */ #ifndef _NCPLIB_H #define _NCPLIB_H #include #include #include #include #include #include typedef u_int8_t byte; typedef u_int16_t word; typedef u_int32_t dword; typedef int32_t NWCCODE; typedef enum NET_ADDRESS_TYPE { NT_UNKNOWN = -1, NT_IPX = 0, NT_IP = 1, NT_SDLC = 2, NT_TOKENRING_ETHERNET = 3, NT_OSI = 4, NT_APPLETALK = 5, NT_NETBEUI = 6, NT_SOCKADDR = 7, NT_UDP = 8, NT_TCP = 9, NT_UDP6 = 10, NT_TCP6 = 11, NT_INTERNAL = 12, NT_URL = 13, NT_COUNT = 14 } NET_ADDRESS_TYPE; #if !defined(_FILE_OFFSET_BITS) || _FILE_OFFSET_BITS != 64 typedef off_t ncp_off_t; #else /* Maintain unchanged ABI - these functions use 32bit off_t... */ typedef __off_t ncp_off_t; #endif #ifdef SWIG /* ncp_off64_t is defined to double by Perl interface */ #else typedef u_int64_t ncp_off64_t; #endif #define BVAL(buf,pos) (((const u_int8_t *)(buf))[pos]) #define BWVAL(buf,pos) (((u_int8_t*)(buf))[pos]) #define PVAL(buf,pos) ((unsigned int)BVAL(buf,pos)) #define BSET(buf,pos,val) (BWVAL(buf,pos) = (val)) #ifdef __cplusplus extern "C" { #endif /* we know that the 386 can handle misalignment and has the "right" byteorder */ #if defined(__i386__) static inline word WVAL_LH(const void * buf, int pos) { return *((const word *) (((const u_int8_t*)buf) + pos)); } static inline dword DVAL_LH(const void * buf, int pos) { return *((const dword *) (((const u_int8_t*)buf) + pos)); } static inline u_int64_t QVAL_LH(const void * buf, int pos) { return *((const u_int64_t *) (((const u_int8_t*)buf) + pos)); } static inline void WSET_LH(void * buf, int pos, word val) { *((word *) (((u_int8_t*)buf) + pos)) = val; } static inline void DSET_LH(void * buf, int pos, dword val) { *((dword *) (((u_int8_t*)buf) + pos)) = val; } static inline void QSET_LH(void * buf, int pos, u_int64_t val) { *((u_int64_t *) (((u_int8_t*)buf) + pos)) = val; } static inline word WVAL_HL(const void * buf, int pos) { return ntohs(WVAL_LH(buf, pos)); } static inline dword DVAL_HL(const void * buf, int pos) { return ntohl(DVAL_LH(buf, pos)); } static inline void WSET_HL(void * buf, int pos, word val) { WSET_LH(buf, pos, htons(val)); } static inline void DSET_HL(void * buf, int pos, dword val) { DSET_LH(buf, pos, htonl(val)); } static inline void #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 2) __attribute__((always_inline)) #endif QSET_HL(void * buf, int pos, u_int64_t val) { DSET_HL(buf, pos, val >> 32); DSET_HL(buf, pos + 4, val); } #else static inline word WVAL_LH(const void * buf, int pos) { return PVAL(buf, pos) | PVAL(buf, pos + 1) << 8; } static inline dword DVAL_LH(const void * buf, int pos) { return WVAL_LH(buf, pos) | WVAL_LH(buf, pos + 2) << 16; } static inline u_int64_t QVAL_LH(const void * buf, int pos) { return DVAL_LH(buf, pos) | (((u_int64_t)DVAL_LH(buf, pos + 4)) << 32); } static inline void WSET_LH(void * buf, int pos, word val) { BSET(buf, pos, val & 0xff); BSET(buf, pos + 1, val >> 8); } static inline void DSET_LH(void * buf, int pos, dword val) { WSET_LH(buf, pos, val & 0xffff); WSET_LH(buf, pos + 2, val >> 16); } static inline void QSET_LH(void * buf, int pos, u_int64_t val) { DSET_LH(buf, pos, val); DSET_LH(buf, pos + 4, val >> 32); } static inline word WVAL_HL(const void * buf, int pos) { return PVAL(buf, pos) << 8 | PVAL(buf, pos + 1); } static inline dword DVAL_HL(const void * buf, int pos) { return WVAL_HL(buf, pos) << 16 | WVAL_HL(buf, pos + 2); } static inline void WSET_HL(void * buf, int pos, word val) { BSET(buf, pos, val >> 8); BSET(buf, pos + 1, val & 0xff); } static inline void DSET_HL(void * buf, int pos, dword val) { WSET_HL(buf, pos, val >> 16); WSET_HL(buf, pos + 2, val & 0xffff); } static inline void QSET_HL(void * buf, int pos, u_int64_t val) { DSET_HL(buf, pos, val >> 32); DSET_HL(buf, pos + 4, val); } #endif static inline u_int64_t SVAL_LH(const void * buf, int pos) { return DVAL_LH(buf, pos) | (((u_int64_t)WVAL_LH(buf, pos + 4)) << 32); } void str_upper(char *name); enum connect_state { NOT_CONNECTED = 0, CONN_PERMANENT, CONN_TEMPORARY, CONN_KERNELBASED }; #define NCP_CONN_INVALID 0 #define NCP_CONN_PERMANENT 1 #define NCP_CONN_TEMPORARY 2 #define NCP_CONN_KERNELBASED 3 #define NCPFS_MAX_CFG_USERNAME 256 /* This is abstract type now. Use NWCCGetConnInfo instead */ struct ncp_conn; typedef struct ncp_conn * NWCONN_HANDLE; int ncp_get_fid(NWCONN_HANDLE); #ifdef SWIG struct ncp_conn_spec { fixedCharArray server[NCP_BINDERY_NAME_LEN]; fixedCharArray user[NCPFS_MAX_CFG_USERNAME]; int uid; int login_type; fixedCharArray password[NCP_BINDERY_NAME_LEN]; }; #else struct ncp_conn_spec { char server[NCP_BINDERY_NAME_LEN]; char user[NCPFS_MAX_CFG_USERNAME]; uid_t uid; int login_type; /* NCP_BINDERY_USER / NCP_BINDERY_PSERVER */ char password[NCP_BINDERY_NAME_LEN]; }; #endif struct ncp_search_seq { struct nw_search_sequence s; int name_space; /* RYP: namespace is reserved word for new C++ compilers (gcc 2.7x, egcc 2.9x, borland cbuilder) */ }; #ifdef SWIG struct ncp_property_info { fixedCharArray property_name[16]; u_int8_t property_flags; u_int8_t property_security; u_int32_t search_instance; u_int8_t value_available_flag; u_int8_t more_properties_flag; }; #else struct ncp_property_info { u_int8_t property_name[16]; u_int8_t property_flags; u_int8_t property_security; u_int32_t search_instance; u_int8_t value_available_flag; u_int8_t more_properties_flag; }; #endif /* ncp_initialize is the main entry point for user programs which want to connect to a NetWare Server. It looks for -S, -U, -P and -n in the argument list, opens the connection and removes the arguments from the list. It was designed after the X Windows init functions. */ NWCONN_HANDLE ncp_initialize(int *argc, char **argv, int login_necessary, long *err); /* You can login as another object by this procedure. As a first use pserver comes to mind. */ NWCONN_HANDLE ncp_initialize_as(int *argc, char **argv, int login_necessary, int login_type, long *err); /* You can login as another object by this procedure. As a first use pserver comes to mind. If required = 0 and none of -S,-U,-P is specified, NULL is returned regardless of configuration files */ NWCONN_HANDLE ncp_initialize_2(int *argc, char **argv, int login_necessary, int login_type, long *err, int required); NWCCODE ncp_login_conn(NWCONN_HANDLE conn, const char *username, NWObjectType object_type, const char *password); /* Open a connection */ NWCONN_HANDLE ncp_open(const struct ncp_conn_spec *spec, long *err); /* Open a connection on an existing fd - it accepts only ncpfs fd now. In future, it can accept also connected IPX, IP and NCP socket (I'll see) */ int ncp_open_fd(int fd, NWCONN_HANDLE *conn); /* Open a connection on an existing mount point */ int ncp_open_mount(const char *mount_point, NWCONN_HANDLE * conn); /* Find a permanent connection that fits the spec, return NULL if * there is none. */ char * ncp_find_permanent(const struct ncp_conn_spec *spec); /* Find the address of a file server */ long ncp_find_fileserver(const char *server_name, struct sockaddr* addr, socklen_t addrlen); /* Find the address of a server */ long ncp_find_server(const char **server_name, int type, struct sockaddr* addr, socklen_t addrlen); #ifdef MAKE_NCPLIB /* Find the address of a server */ NWCCODE ncp_find_server_addr(const char **server_name, int type, struct sockaddr* addr, socklen_t addrlen, unsigned int transport); #endif /* Detach from a permanent connection or destroy a temporary connection */ long ncp_close(NWCONN_HANDLE conn); /* like getmntent, ncp_get_conn_ent scans /etc/mtab for usable connections */ #ifdef SWIG struct ncp_conn_ent { fixedCharArray server[NCP_BINDERY_NAME_LEN]; char* user; uid_t uid; fixedCharArray mount_point[MAXPATHLEN]; }; #else struct ncp_conn_ent { char server[NCP_BINDERY_NAME_LEN]; char* user; uid_t uid; char mount_point[MAXPATHLEN]; }; #endif struct ncp_conn_ent * ncp_get_conn_ent(FILE * filep); #ifdef SWIG #define NWCLIENT ".nwclient" #define NWC_NOPASSWORD "-" #else #define NWCLIENT (".nwclient") #define NWC_NOPASSWORD ("-") #endif /* find an appropriate connection */ struct ncp_conn_spec * ncp_find_conn_spec(const char *server, const char *user, const char *password, int login_necessary, uid_t uid, long *err); struct ncp_conn_spec * ncp_find_conn_spec2(const char *server, const char *user, const char *password, int login_necessary, uid_t uid, int allow_multiple_conns, long *err); NWCCODE ncp_find_conn_spec3(const char *server, const char *user, const char *password, int login_necessary, uid_t uid, int allow_multiple_conns, struct ncp_conn_spec *spec); long ncp_get_file_server_description_strings(NWCONN_HANDLE conn, char descstring[512]); long ncp_get_file_server_time(NWCONN_HANDLE conn, time_t * target); long ncp_set_file_server_time(NWCONN_HANDLE conn, time_t * source); #ifdef SWIG struct ncp_file_server_info { fixedCharArray ServerName[48]; int FileServiceVersion; int FileServiceSubVersion; int MaximumServiceConnections; int ConnectionsInUse; int NumberMountedVolumes; int Revision; int SFTLevel; int TTSLevel; int MaxConnectionsEverUsed; int AccountVersion; int VAPVersion; int QueueVersion; int PrintVersion; int VirtualConsoleVersion; int RestrictionLevel; int InternetBridge; fixedArray Reserved[60]; }; #else struct ncp_file_server_info { char ServerName[48] __attribute__((packed)); u_int8_t FileServiceVersion __attribute__((packed)); u_int8_t FileServiceSubVersion __attribute__((packed)); u_int16_t MaximumServiceConnections __attribute__((packed)); u_int16_t ConnectionsInUse __attribute__((packed)); u_int16_t NumberMountedVolumes __attribute__((packed)); u_int8_t Revision __attribute__((packed)); u_int8_t SFTLevel __attribute__((packed)); u_int8_t TTSLevel __attribute__((packed)); u_int16_t MaxConnectionsEverUsed __attribute__((packed)); u_int8_t AccountVersion __attribute__((packed)); u_int8_t VAPVersion __attribute__((packed)); u_int8_t QueueVersion __attribute__((packed)); u_int8_t PrintVersion __attribute__((packed)); u_int8_t VirtualConsoleVersion __attribute__((packed)); u_int8_t RestrictionLevel __attribute__((packed)); u_int8_t InternetBridge __attribute__((packed)); u_int8_t Reserved[60] __attribute__((packed)); } __attribute__((packed)); #endif struct ncp_file_server_info_2 { #ifdef SWIG fixedArray ServerName[49]; #else char ServerName[49]; #endif 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 MixedModePathFlag; u_int8_t LocalLoginInfoCcode; u_int16_t ProductMajorVersion; u_int16_t ProductMinorVersion; u_int16_t ProductRevisionVersion; u_int8_t OSLanguageID; u_int8_t _64BitOffsetsSupportedFlag; }; long ncp_get_file_server_information(NWCONN_HANDLE conn, struct ncp_file_server_info *target); NWCCODE ncp_get_file_server_information_2(NWCONN_HANDLE conn, struct ncp_file_server_info_2 *target, size_t tsize); long ncp_get_connlist(NWCONN_HANDLE conn, u_int16_t object_type, const char *object_name, int *returned_no, u_int8_t conn_numbers[256]); long ncp_get_stations_logged_info(NWCONN_HANDLE conn, u_int32_t connection, struct ncp_bindery_object *target, time_t * login_time); long ncp_get_internet_address(NWCONN_HANDLE conn, u_int32_t connection, struct sockaddr *station_addr, u_int8_t * conn_type); long ncp_send_broadcast(NWCONN_HANDLE conn, u_int8_t no_conn, const u_int8_t * connections, const char *message); long ncp_send_broadcast2(NWCONN_HANDLE conn, unsigned int no_conn, const unsigned int* connections, const char* message); long ncp_get_encryption_key(NWCONN_HANDLE conn, unsigned char encryption_key[8]); long ncp_get_bindery_object_id(NWCONN_HANDLE conn, NWObjectType object_type, const char *object_name, struct ncp_bindery_object *target); long ncp_get_bindery_object_name(NWCONN_HANDLE conn, NWObjectID object_id, struct ncp_bindery_object *target); NWCCODE NWScanObject(NWCONN_HANDLE conn, const char *searchName, NWObjectType searchType, NWObjectID *objID, char objName[NCP_BINDERY_NAME_LEN + 1], NWObjectType *objType, u_int8_t *hasPropertiesFlag, u_int8_t *objFlags, u_int8_t *objSecurity); long ncp_scan_bindery_object(NWCONN_HANDLE conn, NWObjectID last_id, NWObjectType object_type, const char *search_string, struct ncp_bindery_object *target); long ncp_create_bindery_object(NWCONN_HANDLE conn, NWObjectType object_type, const char *object_name, u_int8_t object_security, u_int8_t object_status); long ncp_delete_bindery_object(NWCONN_HANDLE conn, NWObjectType object_type, const char *object_name); long ncp_change_object_security(NWCONN_HANDLE conn, u_int16_t object_type, const char *object_name, u_int8_t security); struct ncp_station_addr { u_int32_t NetWork __attribute__((packed)); #ifdef SWIG fixedArray Node[6]; #else u_int8_t Node[6] __attribute__((packed)); #endif u_int16_t Socket __attribute__((packed)); } __attribute__((packed)); struct ncp_prop_login_control { #ifdef SWIG fixedArray AccountExpireDate[3]; #else u_int8_t AccountExpireDate[3] __attribute__((packed)); #endif u_int8_t Disabled __attribute__((packed)); #ifdef SWIG fixedArray PasswordExpireDate[3]; #else u_int8_t PasswordExpireDate[3] __attribute__((packed)); #endif u_int8_t GraceLogins __attribute__((packed)); u_int16_t PasswordExpireInterval __attribute__((packed)); u_int8_t MaxGraceLogins __attribute__((packed)); u_int8_t MinPasswordLength __attribute__((packed)); u_int16_t MaxConnections __attribute__((packed)); #ifdef SWIG fixedArray ConnectionTimeMask[42] __attribute__((packed)); fixedArray LastLogin[6] __attribute__((packed)); #else u_int8_t ConnectionTimeMask[42] __attribute__((packed)); u_int8_t LastLogin[6] __attribute__((packed)); #endif u_int8_t RestrictionMask __attribute__((packed)); u_int8_t reserved __attribute__((packed)); u_int32_t MaxDiskUsage __attribute__((packed)); u_int16_t BadLoginCount __attribute__((packed)); u_int32_t BadLoginCountDown __attribute__((packed)); struct ncp_station_addr LastIntruder __attribute__((packed)); } __attribute__((packed)); NWCCODE NWReadPropertyValue(NWCONN_HANDLE conn, const char *objName, NWObjectType objType, const char *propertyName, unsigned int segmentNum, u_int8_t *segmentData, u_int8_t *moreSegments, u_int8_t *flags); long ncp_read_property_value(NWCONN_HANDLE conn, NWObjectType object_type, const char *object_name, int segment, const char *prop_name, struct nw_property *target); long ncp_scan_property(NWCONN_HANDLE conn, NWObjectType object_type, const char *object_name, NWObjectID last_id, const char *search_string, struct ncp_property_info *target); long ncp_add_object_to_set(NWCONN_HANDLE conn, NWObjectType object_type, const char *object_name, const char *property_name, NWObjectType member_type, const char *member_name); long ncp_change_property_security(NWCONN_HANDLE conn, NWObjectType object_type, const char *object_name, const char *property_name, u_int8_t property_security); long ncp_create_property(NWCONN_HANDLE conn, NWObjectType object_type, const char *object_name, const char *property_name, u_int8_t property_flags, u_int8_t property_security); long ncp_delete_object_from_set(NWCONN_HANDLE conn, NWObjectType object_type, const char *object_name, const char *property_name, NWObjectType member_type, const char *member_name); long ncp_delete_property(NWCONN_HANDLE conn, NWObjectType object_type, const char *object_name, const char *property_name); long ncp_write_property_value(NWCONN_HANDLE conn, NWObjectType object_type, const char *object_name, const char *property_name, u_int8_t segment, const struct nw_property *property_value); /* Bit masks for security flag */ #define NCP_SEC_CHECKSUMMING_REQUESTED (1) #define NCP_SEC_SIGNATURE_REQUESTED (2) #define NCP_SEC_COMPLETE_SIGNATURES_REQUESTED (4) #define NCP_SEC_ENCRYPTION_REQUESTED (8) #define NCP_SEC_LIP_DISABLED (128) long ncp_get_big_ncp_max_packet_size(NWCONN_HANDLE conn, u_int16_t proposed_max_size, u_int8_t proposed_security_flag, u_int16_t * accepted_max_size, u_int16_t * echo_socket, u_int8_t * accepted_security_flag); long ncp_login_encrypted(NWCONN_HANDLE conn, const struct ncp_bindery_object *object, const unsigned char *key, const char *passwd); long ncp_login_unencrypted(NWCONN_HANDLE conn, NWObjectType object_type, const char *object_name, const char *passwd); long ncp_change_login_passwd(NWCONN_HANDLE conn, const struct ncp_bindery_object *object, const unsigned char *key, const char *oldpasswd, const char *newpasswd); #define NCP_GRACE_PERIOD (0xdf) #define NCPLIB_ERROR (0x8700) /* ~/.nwclient is group/world writeable or readable */ #define NCPLIB_INVALID_MODE (NCPLIB_ERROR | 0x01) /* ncp_get_namespace_info_element called with itemid not in nsrim */ #define NCPLIB_INFORMATION_NOT_KNOWN (NCPLIB_ERROR | 0x02) /* neither fixed nor variable bit requested */ #define NCPLIB_NSFORMAT_INVALID (NCPLIB_ERROR | 0x03) /* referrals disabled, but referral is needed ... */ #define NCPLIB_REFERRAL_NEEDED (NCPLIB_ERROR | 0x04) /* ncpd refused to do its work... */ #define NCPLIB_NCPD_DEAD (NCPLIB_ERROR | 0x05) #define NCPLIB_PASSWORD_REQUIRED (NCPLIB_ERROR | 0x06) #define NWE_REQUESTER_ERROR (0x8800) #define NWE_REQ_TOO_MANY_REQ_FRAGS (NWE_REQUESTER_ERROR | 0x0C) #define NWE_BUFFER_OVERFLOW (NWE_REQUESTER_ERROR | 0x0E) #define NWE_SERVER_NO_CONN (NWE_REQUESTER_ERROR | 0x0F) #define NWE_SCAN_COMPLETE (NWE_REQUESTER_ERROR | 0x12) #define NWE_UNSUPPORTED_NAME_FORMAT_TYP (NWE_REQUESTER_ERROR | 0x13) #define NWE_INVALID_NCP_PACKET_LENGTH (NWE_REQUESTER_ERROR | 0x16) #define NWE_BUFFER_INVALID_LEN (NWE_REQUESTER_ERROR | 0x33) /* buffer underflow */ #define NWE_USER_NO_NAME (NWE_REQUESTER_ERROR | 0x34) #define NWE_PARAM_INVALID (NWE_REQUESTER_ERROR | 0x36) #define NWE_SERVER_NOT_FOUND (NWE_REQUESTER_ERROR | 0x47) #define NWE_SIGNATURE_LEVEL_CONFLICT (NWE_REQUESTER_ERROR | 0x61) #define NWE_INVALID_LEVEL (NWE_REQUESTER_ERROR | 0x6B) #define NWE_UNSUPPORTED_TRAN_TYPE (NWE_REQUESTER_ERROR | 0x70) #define NWE_UNSUPPORTED_AUTHENTICATOR (NWE_REQUESTER_ERROR | 0x73) #define NWE_REQUESTER_FAILURE (NWE_REQUESTER_ERROR | 0xFF) #define NWE_SERVER_ERROR (0x8900) #define NWE_VOL_INVALID (NWE_SERVER_ERROR | 0x98) #define NWE_DIRHANDLE_INVALID (NWE_SERVER_ERROR | 0x9B) #define NWE_LOGIN_LOCKOUT (NWE_SERVER_ERROR | 0xC5) #define NWE_Q_NO_RIGHTS (NWE_SERVER_ERROR | 0xD3) #define NWE_Q_NO_JOB (NWE_SERVER_ERROR | 0xD5) #define NWE_Q_NO_JOB_RIGHTS (NWE_SERVER_ERROR | 0xD6) #define NWE_PASSWORD_UNENCRYPTED (NWE_SERVER_ERROR | 0xD6) #define NWE_PASSWORD_NOT_UNIQUE (NWE_SERVER_ERROR | 0xD7) #define NWE_PASSWORD_TOO_SHORT (NWE_SERVER_ERROR | 0xD8) #define NWE_LOGIN_MAX_EXCEEDED (NWE_SERVER_ERROR | 0xD9) #define NWE_LOGIN_UNAUTHORIZED_TIME (NWE_SERVER_ERROR | 0xDA) #define NWE_LOGIN_UNAUTHORIZED_STATION (NWE_SERVER_ERROR | 0xDB) #define NWE_ACCT_DISABLED (NWE_SERVER_ERROR | 0xDC) #define NWE_PASSWORD_INVALID (NWE_SERVER_ERROR | 0xDE) #define NWE_PASSWORD_EXPIRED (NWE_SERVER_ERROR | 0xDF) #define NWE_BIND_MEMBER_ALREADY_EXISTS (NWE_SERVER_ERROR | 0xE9) #define NWE_NCP_NOT_SUPPORTED (NWE_SERVER_ERROR | 0xFB) #define NWE_SERVER_UNKNOWN (NWE_SERVER_ERROR | 0xFC) #define NWE_CONN_NUM_INVALID (NWE_SERVER_ERROR | 0xFD) #define NWE_SERVER_FAILURE (NWE_SERVER_ERROR | 0xFF) const char* strnwerror(int err); long ncp_login_user(NWCONN_HANDLE conn, const char *username, const char *password); long ncp_get_volume_info_with_number(NWCONN_HANDLE conn, int n, struct ncp_volume_info *target); long ncp_get_volume_number(NWCONN_HANDLE conn, const char *name, int *target); long ncp_file_search_init(NWCONN_HANDLE conn, int dir_handle, const char *path, struct ncp_filesearch_info *target); long ncp_file_search_continue(NWCONN_HANDLE conn, struct ncp_filesearch_info *fsinfo, int attributes, const char *path, struct ncp_file_info *target); long ncp_get_finfo(NWCONN_HANDLE conn, int dir_handle, const char *path, const char *name, struct ncp_file_info *target); long ncp_open_file(NWCONN_HANDLE conn, int dir_handle, const char *path, int attr, int accessm, struct ncp_file_info *target); long ncp_close_file(NWCONN_HANDLE conn, const unsigned char fileHandle[6]); long ncp_create_newfile(NWCONN_HANDLE conn, int dir_handle, const char *path, int attr, struct ncp_file_info *target); long ncp_create_file(NWCONN_HANDLE conn, int dir_handle, const char *path, int attr, struct ncp_file_info *target); long ncp_erase_file(NWCONN_HANDLE conn, int dir_handle, const char *path, int attr); long ncp_rename_file(NWCONN_HANDLE conn, int old_handle, const char *old_path, int attr, int new_handle, const char *new_path); long ncp_create_directory(NWCONN_HANDLE conn, int dir_handle, const char *path, int inherit_mask); long ncp_delete_directory(NWCONN_HANDLE conn, int dir_handle, const char *path); long ncp_rename_directory(NWCONN_HANDLE conn, int dir_handle, const char *old_path, const char *new_path); #ifdef SWIG long ncp_get_trustee(NWCONN_HANDLE conn, NWObjectID object_id, u_int8_t vol, fixedCharArray OUTPUT[256], u_int16_t * OUTPUT, u_int16_t * REFERENCE); #else long ncp_get_trustee(NWCONN_HANDLE conn, NWObjectID object_id, u_int8_t vol, char *path, u_int16_t * trustee, u_int16_t * contin); #endif long ncp_add_trustee(NWCONN_HANDLE conn, int dir_handle, const char *path, NWObjectID object_id, u_int8_t rights); long ncp_delete_trustee(NWCONN_HANDLE conn, int dir_handle, const char *path, NWObjectID object_id); #ifdef SWIG long ncp_read(NWCONN_HANDLE conn, const unsigned char fileHandle[6], ncp_off_t offset, size_t count, char *RETBUFFER_LENPREV); long ncp_write(NWCONN_HANDLE conn, const unsigned char fileHandle[6], ncp_off_t offset, size_t IGNORE, const char *STRING_LENPREV); long ncp_copy_file(NWCONN_HANDLE conn, const fixedArray source_file[6], const fixedArray target_file[6], u_int32_t source_offset, u_int32_t target_offset, u_int32_t count, u_int32_t * OUTPUT); #else long ncp_read(NWCONN_HANDLE conn, const unsigned char fileHandle[6], ncp_off_t offset, size_t count, void *target); long ncp_write(NWCONN_HANDLE conn, const unsigned char fileHandle[6], ncp_off_t offset, size_t count, const void *source); NWCCODE ncp_read64(NWCONN_HANDLE conn, const unsigned char fileHandle[6], ncp_off64_t offset, size_t count, void *target, size_t *bytesread); NWCCODE ncp_write64(NWCONN_HANDLE conn, const unsigned char fileHandle[6], ncp_off64_t offset, size_t count, const void *source, size_t *byteswritten); long ncp_copy_file(NWCONN_HANDLE conn, const unsigned char source_file[6], const unsigned char target_file[6], u_int32_t source_offset, u_int32_t target_offset, u_int32_t count, u_int32_t * copied_count); #endif #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 (SA_SUBDIR_FILES | SA_SYSTEM | SA_HIDDEN) #define SA_SUBDIR_ALL (SA_SUBDIR_ONLY | SA_SYSTEM | SA_HIDDEN) #define SA_FILES_ALL (SA_NORMAL | SA_SYSTEM | SA_HIDDEN) #define NCP_DIRSTYLE_HANDLE 0x00 #define NCP_DIRSTYLE_DIRBASE 0x01 #define NCP_DIRSTYLE_NOHANDLE 0xFF #define NCP_PATH_STD -1 long ncp_obtain_file_or_subdir_info(NWCONN_HANDLE conn, u_int8_t source_ns, u_int8_t target_ns, u_int16_t search_attribs, u_int32_t rim, u_int8_t vol, u_int32_t dirent, const char *path, struct nw_info_struct *target); #define NCP_PERM_READ (0x001) #define NCP_PERM_WRITE (0x002) #define NCP_PERM_OPEN (0x004) #define NCP_PERM_CREATE (0x008) #define NCP_PERM_DELETE (0x010) #define NCP_PERM_OWNER (0x020) #define NCP_PERM_SEARCH (0x040) #define NCP_PERM_MODIFY (0x080) #define NCP_PERM_SUPER (0x100) #define NCP_PERM_ALL (0x1fb) long ncp_get_eff_directory_rights(NWCONN_HANDLE conn, u_int8_t source_ns, u_int8_t target_ns, u_int16_t search_attribs, u_int8_t vol, u_int32_t dirent, const char *path, u_int16_t * my_effective_rights); long ncp_do_lookup2(NWCONN_HANDLE conn, u_int8_t _source_ns, const struct nw_info_struct *dir, const char *path, /* may only be one component */ u_int8_t _target_ns, struct nw_info_struct *target); long ncp_do_lookup(NWCONN_HANDLE conn, const struct nw_info_struct *dir, const char *path, /* may only be one component */ struct nw_info_struct *target); long ncp_modify_file_or_subdir_dos_info(NWCONN_HANDLE conn, const struct nw_info_struct *file, u_int32_t info_mask, const struct nw_modify_dos_info *info); long ncp_del_file_or_subdir(NWCONN_HANDLE conn, const struct nw_info_struct *dir, const char *name); long ncp_open_create_file_or_subdir(NWCONN_HANDLE conn, const struct nw_info_struct *dir, const char *name, int open_create_mode, u_int32_t create_attributes, int desired_acc_rights, struct nw_file_info *target); long ncp_initialize_search(NWCONN_HANDLE conn, const struct nw_info_struct *dir, int name_space, struct ncp_search_seq *target); long ncp_initialize_search2(NWCONN_HANDLE conn, const struct nw_info_struct *dir, int name_space, const unsigned char *enc_subpath, int subpathlen, struct ncp_search_seq *target); long ncp_search_for_file_or_subdir2(NWCONN_HANDLE conn, int search_attributes, u_int32_t RIM, struct ncp_search_seq *seq, struct nw_info_struct *target); long ncp_search_for_file_or_subdir(NWCONN_HANDLE conn, struct ncp_search_seq *seq, struct nw_info_struct *target); long ncp_ren_or_mov_file_or_subdir(NWCONN_HANDLE conn, const struct nw_info_struct *old_dir, const char *old_name, const struct nw_info_struct *new_dir, const char *new_name); long ncp_create_queue_job_and_file(NWCONN_HANDLE conn, NWObjectID queue_id, struct queue_job *job); long ncp_get_queue_length(NWCONN_HANDLE conn, NWObjectID queue_id, u_int32_t *queue_length); long ncp_get_queue_job_ids(NWCONN_HANDLE conn, NWObjectID queue_id, u_int32_t queue_section, u_int32_t *length1, u_int32_t *length2, u_int32_t ids[]); long ncp_get_queue_job_info(NWCONN_HANDLE conn, NWObjectID queue_id, u_int32_t job_id, struct nw_queue_job_entry *target); long NWRemoveJobFromQueue2(NWCONN_HANDLE conn, NWObjectID queue_id, u_int32_t job_id); long ncp_close_file_and_start_job(NWCONN_HANDLE conn, NWObjectID queue_id, const struct queue_job *job); long ncp_attach_to_queue(NWCONN_HANDLE conn, NWObjectID queue_id); long ncp_detach_from_queue(NWCONN_HANDLE conn, NWObjectID queue_id); long ncp_service_queue_job(NWCONN_HANDLE conn, NWObjectID queue_id, u_int16_t job_type, struct queue_job *target); long ncp_finish_servicing_job(NWCONN_HANDLE conn, NWObjectID queue_id, u_int32_t job_number, u_int32_t charge_info); long ncp_change_job_position(NWCONN_HANDLE conn, NWObjectID queue_id, u_int32_t job_number, unsigned int position); long ncp_abort_servicing_job(NWCONN_HANDLE conn, NWObjectID queue_id, u_int32_t job_number); NWCCODE NWChangeQueueJobEntry(NWCONN_HANDLE conn, NWObjectID queue_id, const struct nw_queue_job_entry *jobdata); long ncp_get_broadcast_message(NWCONN_HANDLE conn, char message[256]); long ncp_dealloc_dir_handle(NWCONN_HANDLE conn, u_int8_t dir_handle); #define NCP_ALLOC_PERMANENT (0x0000) #define NCP_ALLOC_TEMPORARY (0x0001) #define NCP_ALLOC_SPECIAL (0x0002) long ncp_alloc_short_dir_handle2(NWCONN_HANDLE conn, u_int8_t _namespace, const struct nw_info_struct *dir, u_int16_t alloc_mode, u_int8_t * target); long ncp_alloc_short_dir_handle(NWCONN_HANDLE conn, const struct nw_info_struct *dir, u_int16_t alloc_mode, u_int8_t * target); long ncp_get_effective_dir_rights(NWCONN_HANDLE conn, const struct nw_info_struct *file, u_int16_t * target); struct ncp_trustee_struct { NWObjectID object_id; u_int16_t rights; }; long ncp_add_trustee_set(NWCONN_HANDLE conn, u_int8_t volume_number, u_int32_t dir_entry, u_int16_t rights_mask, int object_count, const struct ncp_trustee_struct *rights); struct ncp_deleted_file { int32_t seq; u_int32_t vol; u_int32_t base; }; long ncp_ns_scan_salvageable_file(NWCONN_HANDLE conn, u_int8_t src_ns, int dirstyle, u_int8_t vol_num, u_int32_t dir_base, const unsigned char* encpath, int pathlen, struct ncp_deleted_file* finfo, char* retname, int retname_maxlen); long ncp_ns_salvage_file(NWCONN_HANDLE conn, u_int8_t src_ns, const struct ncp_deleted_file* finfo, const char* newfname); long ncp_ns_purge_file(NWCONN_HANDLE conn, const struct ncp_deleted_file* finfo); long ncp_ns_get_full_name(NWCONN_HANDLE conn, u_int8_t src_ns, u_int8_t dst_ns, int dirstyle, u_int8_t vol_num, u_int32_t dir_base, const unsigned char* encpath, size_t pathlen, char* retname, size_t retname_maxlen); int ncp_get_conn_type(NWCONN_HANDLE conn); int ncp_get_conn_number(NWCONN_HANDLE conn); NWCCODE ncp_get_dentry_ttl(NWCONN_HANDLE conn, unsigned int* ttl); NWCCODE ncp_set_dentry_ttl(NWCONN_HANDLE conn, unsigned int ttl); /* What to do with them?! Simply do not use them if you compiled libncp without NDS support */ long ncp_send_nds_frag(NWCONN_HANDLE conn, int ndsverb, const void *inbuf, size_t inbuflen, void *outbuf, size_t outbufsize, size_t *outbuflen); long ncp_send_nds(NWCONN_HANDLE conn, int fn, const char *data_in, size_t data_in_len, char *data_out, size_t data_out_max, size_t *data_out_len); long ncp_change_conn_state(NWCONN_HANDLE conn, int new_state); /* end of NDS specific... */ NWCONN_HANDLE ncp_open_addr(const struct sockaddr *target, long *err); int ncp_path_to_NW_format(const char* path, unsigned char* encbuff, int encbuffsize); long ncp_obtain_file_or_subdir_info2(NWCONN_HANDLE conn, u_int8_t source_ns, u_int8_t target_ns, u_int16_t search_attribs, u_int32_t rim, int dir_style, u_int8_t vol, u_int32_t dirent, const unsigned char* encpath, int pathlen, struct nw_info_struct* target); typedef unsigned int NWVOL_NUM; typedef unsigned int NWDIR_HANDLE; typedef u_int32_t NWDIR_ENTRY; struct NSI_Name { #ifdef SWIG %pragma(swig) readonly size_t NameLength; %pragma(swig) readwrite size_tLenPrefixCharArray Name[256]; #else size_t NameLength; char Name[256]; #endif }; struct NSI_Attributes { u_int32_t Attributes; u_int16_t Flags; }; struct NSI_TotalSize { u_int32_t TotalAllocated; size_t Datastreams; }; struct NSI_ExtAttrInfo { u_int32_t DataSize; u_int32_t Count; u_int32_t KeySize; }; struct NSI_Change { u_int16_t Date; u_int16_t Time; NWObjectID ID; }; struct NSI_Directory { NWDIR_ENTRY dirEntNum; NWDIR_ENTRY DosDirNum; NWVOL_NUM volNumber; }; struct NSI_DatastreamFATInfo { u_int32_t Number; u_int32_t FATBlockSize; }; struct NSI_DatastreamSizes { size_t NumberOfDatastreams; struct NSI_DatastreamFATInfo ds[0]; }; struct NSI_DatastreamInfo { u_int32_t Number; ncp_off64_t Size; /* !! was 32bit in ncpfs-2.2.0.18, but this type was not used in API !! */ }; struct NSI_DatastreamLogicals { size_t NumberOfDatastreams; struct NSI_DatastreamInfo ds[0]; }; struct NSI_DOSName { #ifdef SWIG %pragma(swig) readonly size_t NameLength; %pragma(swig) readwrite size_tLenPrefixCharArray Name[16]; #else size_t NameLength; /* 0..14 */ char Name[16]; /* align... why not... */ #endif }; struct NSI_MacTimes { int32_t CreateTime; int32_t BackupTime; }; struct NSI_Modify { struct NSI_Change Modify; struct NSI_Change LastAccess; }; struct NSI_LastAccess { u_int16_t Date; u_int16_t Time; /* NW5.00+ */ }; #ifdef SWIG struct nw_info_struct2 { ncp_off64_t SpaceAllocated; struct NSI_Attributes Attributes; ncp_off64_t DataSize; struct NSI_TotalSize TotalSize; struct NSI_ExtAttrInfo ExtAttrInfo; struct NSI_Change Archive; struct NSI_Change Modify; struct NSI_Change Creation; struct NSI_LastAccess LastAccess; u_int32_t OwningNamespace; struct NSI_Directory Directory; u_int16_t Rights; /* inherited */ u_int16_t ReferenceID; u_int32_t NSAttributes; /* datastream actual cannot be retrieved this way... */ /* datastream logical ... dtto ... */ int32_t UpdateTime; /* seconds, relative to year 2000... */ /* NW4.11 */ struct NSI_DOSName DOSName; /* NW4.11 */ u_int32_t FlushTime; /* NW4.11 */ u_int32_t ParentBaseID; /* NW4.11 */ fixedArray MacFinderInfo[32]; /* NW4.11 */ u_int32_t SiblingCount; /* NW4.11 */ u_int32_t EffectiveRights; /* NW4.11 */ struct NSI_MacTimes MacTimes; /* NW4.11 */ u_int16_t Unknown25; u_int16_t reserved3; u_int32_t reserved1[7]; /* future expansion... */ struct NSI_Name Name; fixedArray reserved2[512]; /* future expansion... (unicode name?) */ }; #else struct nw_info_struct2 { ncp_off64_t SpaceAllocated; struct NSI_Attributes Attributes; ncp_off64_t DataSize; struct NSI_TotalSize TotalSize; struct NSI_ExtAttrInfo ExtAttrInfo; struct NSI_Change Archive; struct NSI_Change Modify; struct NSI_Change Creation; struct NSI_LastAccess LastAccess; u_int32_t OwningNamespace; struct NSI_Directory Directory; u_int16_t Rights; /* inherited */ u_int16_t ReferenceID; u_int32_t NSAttributes; /* datastream actual cannot be retrieved this way... */ /* datastream logical ... dtto ... */ int32_t UpdateTime; /* seconds, relative to year 2000... */ /* NW4.11 */ struct NSI_DOSName DOSName; /* NW4.11 */ u_int32_t FlushTime; /* NW4.11 */ u_int32_t ParentBaseID; /* NW4.11 */ u_int8_t MacFinderInfo[32]; /* NW4.11 */ u_int32_t SiblingCount; /* NW4.11 */ u_int32_t EffectiveRights; /* NW4.11 */ struct NSI_MacTimes MacTimes; /* NW4.11 */ u_int16_t Unknown25; u_int16_t reserved3; u_int32_t reserved1[7]; /* future expansion... */ struct NSI_Name Name; u_int8_t reserved2[512]; /* future expansion... (unicode name?) */ }; #endif struct nw_info_struct3 { size_t len; void* data; }; long ncp_ns_scan_salvageable_file2(NWCONN_HANDLE conn, u_int8_t src_ns, int dirstyle, u_int8_t vol_num, u_int32_t dir_base, const unsigned char* encpath, int pathlen, struct ncp_deleted_file* finfo, struct NSI_Change* dinfo,/* Defined above */ u_int32_t rim, void* target, size_t sizeoftarget); struct ncp_dos_info_rights { u_int16_t Grant; u_int16_t Revoke; }; struct ncp_dos_info { u_int32_t Attributes; struct NSI_Change Creation; struct NSI_Change Modify; struct NSI_Change Archive; struct NSI_LastAccess LastAccess; /* Time field ignored */ struct ncp_dos_info_rights Rights; u_int32_t MaximumSpace; /* 64bit? It is in 4KB blocks... And NSS does not support this... */ }; struct ncp_namespace_format_BitMask { u_int32_t fixed; u_int32_t variable; u_int32_t huge; }; struct ncp_namespace_format_BitsDefined { size_t fixed; size_t variable; size_t huge; }; struct ncp_namespace_format { unsigned int Version; /* used only by library */ struct ncp_namespace_format_BitMask BitMask; struct ncp_namespace_format_BitsDefined BitsDefined; size_t FieldsLength[32]; }; NWCCODE ncp_ns_open_create_entry(NWCONN_HANDLE conn, /* entry info */ unsigned int ns, unsigned int search_attributes, int dirstyle, unsigned int vol, u_int32_t dirent, const unsigned char* encpath, size_t pathlen, /* what to do with entry */ int datastream, int open_create_mode, u_int32_t create_attributes, u_int16_t desired_access_rights, /* what to return */ u_int32_t rim, /* returned */ /* struct nw_info_struct2 */ void* target, size_t sizeoftarget, u_int8_t* oc_action, u_int8_t* oc_callback, unsigned char fileHandle[6] /* ?? u_int32_t* or NW_FILE_HANDLE* ?? */ ); NWCCODE ncp_ns_obtain_entry_info(NWCONN_HANDLE conn, /* entry info */ unsigned int source_ns, unsigned int search_attributes, int dirstyle, unsigned int vol, u_int32_t dirent, const unsigned char* encpath, size_t pathlen, /* what to do with entry */ unsigned int target_ns, /* what to return */ u_int32_t rim, /* returned */ /* struct nw_info_struct2 */ void* target, size_t sizeoftarget); NWCCODE ncp_ns_modify_entry_dos_info(NWCONN_HANDLE conn, /* entry info */ unsigned int ns, unsigned int search_attributes, int dirstyle, unsigned int vol, u_int32_t dirent, const unsigned char* encpath, size_t pathlen, /* what to do with entry */ u_int32_t mim, const struct ncp_dos_info* info /* nothing to return */ /* nothing returned */ ); NWCCODE ncp_ns_obtain_namespace_info_format(NWCONN_HANDLE conn, /* entry info */ unsigned int vol, /* what to do with entry */ unsigned int target_ns, /* returned */ struct ncp_namespace_format* format, size_t sizeofformat); NWCCODE ncp_ns_obtain_entry_namespace_info(NWCONN_HANDLE conn, /* entry info */ unsigned int source_ns, unsigned int vol, u_int32_t dirent, /* what to do with entry */ unsigned int target_ns, /* rim */ u_int32_t nsrim, /* returned */ void* nsibuf, size_t* nsibuflen, size_t nsimaxbuflen); NWCCODE ncp_ns_modify_entry_namespace_info(NWCONN_HANDLE conn, /* entry info */ unsigned int source_ns, unsigned int vol, u_int32_t dirent, /* what to do with entry */ unsigned int target_ns, /* rim */ u_int32_t nsrim, /* info */ const void* mnsbuf, size_t mnsbuflen); NWCCODE ncp_ns_get_namespace_info_element(const struct ncp_namespace_format* nsformat, u_int32_t nsrim, const void* nsibuf, size_t nsibuflen, unsigned int itemid, void* itembuf, size_t* itembuflen, size_t itemmaxbuflen); NWCCODE ncp_ns_alloc_short_dir_handle(NWCONN_HANDLE conn, /* input */ unsigned int ns, int dirstyle, unsigned int vol, u_int32_t dirent, const unsigned char* encpath, size_t pathlen, /* alloc short dir handle specific */ unsigned int allocate_mode, /* output */ NWDIR_HANDLE* dirhandle, NWVOL_NUM* ovol); #define NSIF_NAME 0x0000 /* NSI_Name */ #define NSIF_SPACE_ALLOCATED 0x0001 /* ncp_off64_t */ #define NSIF_ATTRIBUTES 0x0002 /* NSI_Attributes */ #define NSIF_DATA_SIZE 0x0003 /* ncp_off64_t */ #define NSIF_TOTAL_SIZE 0x0004 /* NSI_TotalSize */ #define NSIF_EXT_ATTR_INFO 0x0005 /* NSI_ExtAttrInfo */ #define NSIF_ARCHIVE 0x0006 /* NSI_Change */ #define NSIF_MODIFY 0x0007 /* NSI_Modify */ #define NSIF_CREATION 0x0008 /* NSI_Change */ #define NSIF_OWNING_NAMESPACE 0x0009 /* u_int32_t */ #define NSIF_DIRECTORY 0x000A /* NSI_Directory */ #define NSIF_RIGHTS 0x000B /* u_int16_t */ #define NSIF_REFERENCE_ID 0x000C /* u_int16_t */ #define NSIF_NS_ATTRIBUTES 0x000D /* u_int32_t */ #define NSIF_DATASTREAM_SIZES 0x000E /* NSI_DatastreamSizes */ #define NSIF_DATASTREAM_LOGICALS 0x000F /* NSI_DatastreamLogicals */ #define NSIF_UPDATE_TIME 0x0010 /* int32_t */ #define NSIF_DOS_NAME 0x0011 /* NSI_Name */ #define NSIF_FLUSH_TIME 0x0012 /* u_int32_t */ #define NSIF_PARENT_BASE_ID 0x0013 /* u_int32_t */ #define NSIF_MAC_FINDER_INFO 0x0014 /* 32 bytes */ #define NSIF_SIBLING_COUNT 0x0015 /* u_int32_t */ #define NSIF_EFFECTIVE_RIGHTS 0x0016 /* u_int32_t */ #define NSIF_MAC_TIMES 0x0017 /* NSI_MacTimes */ #define NSIF_LAST_ACCESS_TIME 0x0018 /* NSI_Modify (alias to NSIF_MODIFY) */ #ifdef MAKE_NCPLIB #define NSIF_UNKNOWN25 0x0019 #endif #define NSIF_SIZE64 0x001A /* ncp_off64_t */ NWCCODE ncp_ns_extract_info_field_size( const struct nw_info_struct3* rq, u_int32_t field, size_t* destlen); NWCCODE ncp_ns_extract_info_field( const struct nw_info_struct3* rq, u_int32_t field, void* dest, size_t destlen); typedef struct ncp_directory_list_handle * NWDIRLIST_HANDLE; NWCCODE ncp_ns_search_init(NWCONN_HANDLE conn, /* input */ unsigned int ns, unsigned int search_attributes, unsigned int dirstyle, unsigned int vol, NWDIR_ENTRY dirent, const unsigned char* encpath, size_t enclen, /* search specific */ int datastream, const unsigned char* pattern, size_t patlen, u_int32_t rim, /* handle */ NWDIRLIST_HANDLE* handle); NWCCODE ncp_ns_search_next(NWDIRLIST_HANDLE handle, /* struct nw_info_struct2 */ void* target, size_t sizeoftarget); NWCCODE ncp_ns_search_end(NWDIRLIST_HANDLE handle); typedef struct { NWObjectID objectID; u_int16_t objectRights; } TRUSTEE_INFO; NWCCODE ncp_ns_trustee_add(NWCONN_HANDLE conn, /* input */ unsigned int ns, unsigned int search_attributes, int dirstyle, unsigned int vol, u_int32_t dirent, const unsigned char* encpath, size_t pathlen, /* trustee add specific */ const TRUSTEE_INFO* trustees, unsigned int object_count, u_int16_t rights_mask); NWCCODE ncp_ns_trustee_del(NWCONN_HANDLE conn, /* input */ unsigned int ns, int dirstyle, unsigned int vol, u_int32_t dirent, const unsigned char* encpath, size_t pathlen, /* trustee del specific */ const TRUSTEE_INFO* trustees, unsigned int object_count); NWCCODE ncp_ns_trustee_scan(NWCONN_HANDLE conn, /* input */ unsigned int ns, unsigned int search_attributes, int dirstyle, unsigned int vol, u_int32_t dirent, const unsigned char* encpath, size_t pathlen, /* trustee scan specific */ u_int32_t* iter, TRUSTEE_INFO* trustees, unsigned int* object_count); NWCCODE ncp_ns_delete_entry(NWCONN_HANDLE conn, /* input */ unsigned int ns, unsigned int search_attributes, int dirstyle, unsigned int vol, u_int32_t dirent, const unsigned char* encpath, size_t pathlen); typedef struct ncp_volume_list_handle * NWVOL_HANDLE; NWCCODE ncp_volume_list_init(NWCONN_HANDLE conn, /* input */ unsigned int ns, unsigned int reqflags, /* output */ NWVOL_HANDLE* handle); NWCCODE ncp_volume_list_next(NWVOL_HANDLE handle, unsigned int *volnum, char* retname, size_t retname_maxlen); NWCCODE ncp_volume_list_end(NWVOL_HANDLE handle); //NWCCODE ncp_extract_file_info2(u_int32_t rim, const u_int8_t*, size_t, // struct nw_info_struct2*); NWCCODE ncp_get_file_size(NWCONN_HANDLE conn, /* input */ const unsigned char fileHandle[6], /* output */ ncp_off64_t* fileSize); int ncp_get_mount_uid(int fid, uid_t* uid); #ifndef SWIG void com_err(const char* program, int error, const char* msg, ...); #endif NWCCODE ncp_renegotiate_siglevel(NWCONN_HANDLE conn, size_t buffsize, int siglevel); char* ncp_perms_to_str(char r[11], const u_int16_t rights); int ncp_str_to_perms(const char *r, u_int16_t *rights); const char* ncp_namespace_to_str(char r[5], unsigned int ns); #define NCP_PHYSREC_LOG 0x00 #define NCP_PHYSREC_EX 0x01 #define NCP_PHYSREC_SH 0x03 NWCCODE ncp_log_physical_record(NWCONN_HANDLE conn, const unsigned char fileHandle[6], ncp_off64_t startOffset, u_int64_t length, unsigned int flags, unsigned int timeout); NWCCODE ncp_clear_physical_record(NWCONN_HANDLE conn, const unsigned char fileHandle[6], ncp_off64_t startOffset, u_int64_t length); NWCCODE ncp_release_physical_record(NWCONN_HANDLE conn, const unsigned char fileHandle[6], ncp_off64_t startOffset, u_int64_t length); #ifdef __cplusplus } #endif #ifdef NCP_OBSOLETE #include #endif #endif /* _NCPLIB_H */