Add the initial DOS namespace alias layer for long Unix filenames. This introduces DOS 8.3 alias generation and path component resolution so DOS clients can address files whose real Unix names are not DOS-compatible.
291 lines
9.8 KiB
C
291 lines
9.8 KiB
C
/* connect.h 04-Apr-00 */
|
|
#ifndef _CONNECT_H_
|
|
#define _CONNECT_H_
|
|
|
|
typedef struct {
|
|
uint8 path[256]; /* directory */
|
|
uint8 fn[256]; /* file */
|
|
int volume; /* Volume Number */
|
|
int has_wild; /* fn has wildcards */
|
|
} NW_PATH;
|
|
|
|
typedef struct {
|
|
uint8 name[14]; /* filename in DOS format */
|
|
uint8 attrib[2]; /* LO-HI attrib, ext_attrib */
|
|
uint8 size[4]; /* size of file */
|
|
uint8 create_date[2];
|
|
uint8 acces_date[2];
|
|
uint8 modify_date[2];
|
|
uint8 modify_time[2];
|
|
} NW_FILE_INFO;
|
|
|
|
typedef struct {
|
|
uint8 name[14]; /* dirname */
|
|
uint8 attrib[2]; /* LO-HI attrib, ext_attrib */
|
|
uint8 create_date[2];
|
|
uint8 create_time[2];
|
|
uint8 owner_id[4];
|
|
uint8 access_right_mask;
|
|
uint8 reserved; /* future use */
|
|
uint8 next_search[2];
|
|
} NW_DIR_INFO;
|
|
|
|
|
|
typedef struct {
|
|
uint8 time[2];
|
|
uint8 date[2];
|
|
uint8 id[4];
|
|
} NW_FILE_DATES_INFO;
|
|
|
|
typedef struct {
|
|
uint8 subdir[4];
|
|
uint8 attributes[4]; /* 0x20,0,0,0 LO-HI */
|
|
uint8 uniqueid; /* 0 */
|
|
uint8 flags; /* 0x18 */
|
|
uint8 namespace; /* 0 */
|
|
uint8 namlen;
|
|
uint8 name[12];
|
|
NW_FILE_DATES_INFO created;
|
|
NW_FILE_DATES_INFO archived;
|
|
NW_FILE_DATES_INFO updated;
|
|
uint8 size[4];
|
|
uint8 reserved_1[44];
|
|
uint8 inherited_rights_mask[2];
|
|
uint8 last_access_date[2];
|
|
uint8 reserved_2[28];
|
|
} NW_DOS_FILE_INFO;
|
|
|
|
typedef struct {
|
|
uint8 subdir[4];
|
|
uint8 attributes[4]; /* 0x10,0,0,0 LO-HI */
|
|
uint8 uniqueid; /* 0 */
|
|
uint8 flags; /* 0x14 or 0x1c */
|
|
uint8 namespace; /* 0 */
|
|
uint8 namlen;
|
|
uint8 name[12];
|
|
NW_FILE_DATES_INFO created;
|
|
NW_FILE_DATES_INFO archived;
|
|
uint8 modify_time[2];
|
|
uint8 modify_date[2];
|
|
uint8 next_trustee[4];
|
|
uint8 reserved_1[48];
|
|
uint8 max_space[4];
|
|
uint8 inherited_rights_mask[2];
|
|
uint8 reserved_2[26];
|
|
} NW_DOS_DIR_INFO;
|
|
|
|
typedef struct {
|
|
uint8 searchsequence[4];
|
|
union {
|
|
NW_DOS_DIR_INFO d;
|
|
NW_DOS_FILE_INFO f;
|
|
} u;
|
|
} NW_SCAN_DIR_INFO;
|
|
|
|
typedef struct {
|
|
uint8 searchsequence[4]; /* same as NW_SCAN_DIR_INFO */
|
|
uint8 change_bits[4]; /* LO-HI, 2=Attributes */
|
|
union {
|
|
NW_DOS_DIR_INFO d;
|
|
NW_DOS_FILE_INFO f;
|
|
} u;
|
|
} NW_SET_DIR_INFO;
|
|
|
|
extern int use_mmap;
|
|
extern int tells_server_version;
|
|
extern int server_version_flags;
|
|
extern int max_burst_send_size;
|
|
extern int max_burst_recv_size;
|
|
extern int default_uid;
|
|
extern int default_gid;
|
|
|
|
extern int nw_init_connect(void);
|
|
extern void nw_exit_connect(void);
|
|
|
|
extern int nw_free_handles(int task);
|
|
|
|
extern int nw_creat_open_file(int dir_handle, uint8 *data, int len,
|
|
NW_FILE_INFO *info, int attrib, int access, int mode, int task);
|
|
|
|
extern int nw_delete_files(int dir_handle, int searchattrib, uint8 *data, int len);
|
|
extern int nw_set_file_information(int dir_handle, uint8 *data, int len,
|
|
int searchattrib, NW_FILE_INFO *f);
|
|
|
|
extern int nw_set_file_attributes(int dir_handle, uint8 *data, int len,
|
|
int attrib, int newattrib);
|
|
|
|
extern int nw_mv_files(int searchattrib,
|
|
int sourcedirhandle, uint8 *sourcedata, int qlen,
|
|
int zdirhandle, uint8 *destdata, int destdatalen);
|
|
|
|
extern int mv_dir(int dir_handle, uint8 *sourcedata, int qlen,
|
|
uint8 *destdata, int destdatalen);
|
|
|
|
extern int nw_unlink_node(int volume, uint8 *unname, struct stat *stb);
|
|
extern int nw_creat_node(int volume, uint8 *unname, int mode);
|
|
|
|
extern int nw_utime_node(int volume, uint8 *unname, struct stat *stb,
|
|
time_t t);
|
|
|
|
extern int nw_mk_rd_dir(int dir_handle, uint8 *data, int len, int mode);
|
|
|
|
extern int nw_search(uint8 *info, uint32 *fileowner,
|
|
int dirhandle, int searchsequence,
|
|
int search_attrib, uint8 *data, int len);
|
|
|
|
extern int nw_dir_get_vol_path(int dirhandle, uint8 *path);
|
|
|
|
extern int nw_dir_search(uint8 *info,
|
|
int dirhandle, int searchsequence,
|
|
int search_attrib, uint8 *data, int len);
|
|
|
|
|
|
extern int nw_find_dir_handle( int dir_handle,
|
|
uint8 *data, /* zus„tzlicher Pfad */
|
|
int len); /* L„nge Pfad */
|
|
|
|
extern int xinsert_new_dir(int volume, uint8 *path,
|
|
int dev, int inode,
|
|
int drive, int is_temp, int task);
|
|
|
|
extern int nw_alloc_dir_handle(
|
|
int dir_handle, /* directory handle */
|
|
uint8 *data, /* extra path */
|
|
int len, /* len of datat */
|
|
int driveletter, /* A .. Z normal */
|
|
int is_temphandle, /* temp Handle 1 */
|
|
/* spez. temp Handle 2 */
|
|
int task, /* Prozess Task */
|
|
int *eff_rights);
|
|
|
|
|
|
extern int nw_open_dir_handle( int dir_handle,
|
|
uint8 *data, /* extra path */
|
|
int len, /* len data */
|
|
int *volume, /* Volume */
|
|
int *dir_id, /* similar to filehandle*/
|
|
int *searchsequence);
|
|
|
|
|
|
extern int nw_free_dir_handle(int dir_handle, int task);
|
|
|
|
extern int alter_dir_handle(int targetdir, int volume, uint8 *path,
|
|
int dev, int inode, int task);
|
|
|
|
extern int nw_set_dir_handle(int targetdir, int dir_handle,
|
|
uint8 *data, int len, int task);
|
|
|
|
extern int nw_get_directory_path(int dir_handle, uint8 *name, int size_name);
|
|
|
|
extern int nw_get_vol_number(int dir_handle);
|
|
|
|
|
|
|
|
extern int nw_get_eff_dir_rights(int dir_handle, uint8 *data, int len,
|
|
int modus);
|
|
|
|
extern int nw_scan_dir_info(int dir_handle, uint8 *data, int len,
|
|
uint8 *subnr, uint8 *subname,
|
|
uint8 *subdatetime, uint8 *owner);
|
|
|
|
|
|
extern void get_dos_file_attrib(NW_DOS_FILE_INFO *f,
|
|
struct stat *stb,
|
|
int volume,
|
|
uint8 *path,
|
|
char *unixname);
|
|
|
|
void get_dos_dir_attrib(NW_DOS_DIR_INFO *f,
|
|
struct stat *stb,
|
|
int volume,
|
|
uint8 *path,
|
|
char *unixname);
|
|
|
|
|
|
#define MAX_NW_DIRS 255
|
|
extern int act_uid;
|
|
extern int act_gid;
|
|
extern int act_obj_id; /* not login == 0 */
|
|
extern int act_id_flags; /* &1 == supervisor equivalence !!! */
|
|
extern int entry8_flags; /* special flags, see examples nw.ini, entry 8 */
|
|
extern int entry31_flags; /* special flags, see examples nw.ini, entry 31 */
|
|
|
|
extern int conn_get_full_path(int dirhandle, uint8 *data, int len,
|
|
uint8 *fullpath, int size_fullpath);
|
|
|
|
extern int conn_get_kpl_unxname(char *unixname,
|
|
int size_unixname,
|
|
int dirhandle,
|
|
uint8 *data, int len);
|
|
|
|
extern void set_default_guid(void);
|
|
extern void set_guid(int gid, int uid);
|
|
extern void reset_guid(void);
|
|
extern void reseteuid(void);
|
|
extern int in_act_groups(gid_t gid);
|
|
extern int get_unix_access_rights(struct stat *stb, uint8 *unixname);
|
|
extern int get_unix_eff_rights(struct stat *stb);
|
|
extern void set_nw_user(int gid, int uid,
|
|
int id_flags,
|
|
uint32 obj_id, uint8 *objname,
|
|
int unxloginlen, uint8 *unxloginname,
|
|
int grpcount, uint32 *grps);
|
|
|
|
extern uint32 get_file_owner(struct stat *stb);
|
|
|
|
extern int nw_scan_a_directory(uint8 *rdata,
|
|
int dirhandle,
|
|
uint8 *data,
|
|
int len,
|
|
int searchattrib,
|
|
uint32 searchbeg); /* 32 bit */
|
|
|
|
extern int nw_scan_a_root_dir(uint8 *rdata,
|
|
int dirhandle);
|
|
|
|
extern int nw_set_a_directory_entry(int dirhandle,
|
|
uint8 *data,
|
|
int len,
|
|
int searchattrib,
|
|
uint32 searchbeg,
|
|
NW_SET_DIR_INFO *f);
|
|
|
|
extern int fn_dos_match(uint8 *s, uint8 *p, int options);
|
|
|
|
extern void un_date_2_nw(time_t time, uint8 *d, int high_low);
|
|
extern time_t nw_2_un_time(uint8 *d, uint8 *t);
|
|
|
|
extern void un_time_2_nw(time_t time, uint8 *d, int high_low);
|
|
|
|
extern void mangle_dos_name(NW_VOL *vol, uint8 *unixname, uint8 *pp, int len);
|
|
|
|
extern int nw_add_trustee(int dir_handle, uint8 *data, int len,
|
|
uint32 id, int trustee, int extended);
|
|
|
|
extern int nw_del_trustee(int dir_handle, uint8 *data, int len,
|
|
uint32 id, int extended);
|
|
|
|
extern int nw_set_dir_info(int dir_handle, uint8 *data, int len,
|
|
uint32 owner_id, int max_rights,
|
|
uint8 *creationdate, uint8 *creationtime);
|
|
|
|
extern int nw_scan_user_trustee(int volume, int *sequence, uint32 id,
|
|
int *access_mask, uint8 *path);
|
|
|
|
extern int nw_scan_for_trustee( int dir_handle,
|
|
int sequence,
|
|
uint8 *path,
|
|
int len,
|
|
int max_entries,
|
|
uint32 *ids,
|
|
int *trustees,
|
|
int extended);
|
|
|
|
extern int nw_log_file(int lock_flag,
|
|
int timeout,
|
|
int dir_handle,
|
|
int len,
|
|
char *data);
|
|
|
|
#endif
|