diff -Naur afpfs-ng-0.8.1/cmdline/cmdline_afp.c afpfs-ng-0.8.1.patch/cmdline/cmdline_afp.c --- afpfs-ng-0.8.1/cmdline/cmdline_afp.c 2008-02-19 02:54:19.000000000 +0100 +++ afpfs-ng-0.8.1.patch/cmdline/cmdline_afp.c 2011-09-10 12:13:50.102124369 +0200 @@ -3,9 +3,9 @@ */ -#include "afp.h" -#include "midlevel.h" -#include "map_def.h" +#include "afpfs-ng/afp.h" +#include "afpfs-ng/midlevel.h" +#include "afpfs-ng/map_def.h" #include #include diff -Naur afpfs-ng-0.8.1/cmdline/cmdline_testafp.c afpfs-ng-0.8.1.patch/cmdline/cmdline_testafp.c --- afpfs-ng-0.8.1/cmdline/cmdline_testafp.c 2008-03-04 21:16:50.000000000 +0100 +++ afpfs-ng-0.8.1.patch/cmdline/cmdline_testafp.c 2011-09-10 12:13:50.102124369 +0200 @@ -3,8 +3,8 @@ */ -#include "afp.h" -#include "midlevel.h" +#include "afpfs-ng/afp.h" +#include "afpfs-ng/midlevel.h" #include "cmdline_main.h" diff -Naur afpfs-ng-0.8.1/cmdline/getstatus.c afpfs-ng-0.8.1.patch/cmdline/getstatus.c --- afpfs-ng-0.8.1/cmdline/getstatus.c 2008-02-18 04:28:09.000000000 +0100 +++ afpfs-ng-0.8.1.patch/cmdline/getstatus.c 2011-09-10 12:13:50.109124463 +0200 @@ -2,7 +2,7 @@ #include #include -#include "afp.h" +#include "afpfs-ng/afp.h" static int getstatus(char * address_string, unsigned int port) { diff -Naur afpfs-ng-0.8.1/configure.ac afpfs-ng-0.8.1.patch/configure.ac --- afpfs-ng-0.8.1/configure.ac 2008-03-08 17:23:12.000000000 +0100 +++ afpfs-ng-0.8.1.patch/configure.ac 2011-09-10 12:13:50.109124463 +0200 @@ -11,6 +11,7 @@ AC_PROG_CC AC_PROG_INSTALL AC_PROG_LIBTOOL +AM_PROG_CC_C_O # Checks for libraries. # FIXME: Replace `main' with a function in `-lncurses': @@ -105,7 +106,7 @@ -AC_CONFIG_FILES([lib/Makefile fuse/Makefile cmdline/Makefile Makefile docs/Makefile]) +AC_CONFIG_FILES([lib/Makefile fuse/Makefile cmdline/Makefile Makefile include/Makefile include/afpfs-ng/Makefile docs/Makefile]) AC_OUTPUT diff -Naur afpfs-ng-0.8.1/fuse/client.c afpfs-ng-0.8.1.patch/fuse/client.c --- afpfs-ng-0.8.1/fuse/client.c 2008-03-08 03:44:16.000000000 +0100 +++ afpfs-ng-0.8.1.patch/fuse/client.c 2011-09-10 12:13:50.110124477 +0200 @@ -12,11 +12,11 @@ #include #include "config.h" -#include +#include #include "afp_server.h" -#include "uams_def.h" -#include "map_def.h" -#include "libafpclient.h" +#include "afpfs-ng/uams_def.h" +#include "afpfs-ng/map_def.h" +#include "afpfs-ng/libafpclient.h" #define default_uam "Cleartxt Passwrd" diff -Naur afpfs-ng-0.8.1/fuse/commands.c afpfs-ng-0.8.1.patch/fuse/commands.c --- afpfs-ng-0.8.1/fuse/commands.c 2008-03-08 17:06:25.000000000 +0100 +++ afpfs-ng-0.8.1.patch/fuse/commands.c 2011-09-10 12:13:50.110124477 +0200 @@ -19,15 +19,15 @@ #include #include -#include "afp.h" -#include "dsi.h" +#include "afpfs-ng/afp.h" +#include "afpfs-ng/dsi.h" #include "afp_server.h" -#include "utils.h" +#include "afpfs-ng/utils.h" #include "daemon.h" -#include "uams_def.h" -#include "codepage.h" -#include "libafpclient.h" -#include "map_def.h" +#include "afpfs-ng/uams_def.h" +#include "afpfs-ng/codepage.h" +#include "afpfs-ng/libafpclient.h" +#include "afpfs-ng/map_def.h" #include "fuse_int.h" #include "fuse_error.h" #include "fuse_internal.h" diff -Naur afpfs-ng-0.8.1/fuse/daemon.c afpfs-ng-0.8.1.patch/fuse/daemon.c --- afpfs-ng-0.8.1/fuse/daemon.c 2008-03-04 18:26:05.000000000 +0100 +++ afpfs-ng-0.8.1.patch/fuse/daemon.c 2011-09-10 12:13:50.110124477 +0200 @@ -23,11 +23,11 @@ #include #include -#include "afp.h" +#include "afpfs-ng/afp.h" -#include "dsi.h" +#include "afpfs-ng/dsi.h" #include "afp_server.h" -#include "utils.h" +#include "afpfs-ng/utils.h" #include "daemon.h" #include "commands.h" diff -Naur afpfs-ng-0.8.1/fuse/fuse_error.c afpfs-ng-0.8.1.patch/fuse/fuse_error.c --- afpfs-ng-0.8.1/fuse/fuse_error.c 2008-01-18 05:40:10.000000000 +0100 +++ afpfs-ng-0.8.1.patch/fuse/fuse_error.c 2011-09-10 12:13:50.111124491 +0200 @@ -4,7 +4,7 @@ #include #include #include -#include "libafpclient.h" +#include "afpfs-ng/libafpclient.h" #include "fuse_internal.h" #define TMP_FILE "/tmp/fuse_stderr" diff -Naur afpfs-ng-0.8.1/fuse/fuse_int.c afpfs-ng-0.8.1.patch/fuse/fuse_int.c --- afpfs-ng-0.8.1/fuse/fuse_int.c 2008-03-02 06:06:24.000000000 +0100 +++ afpfs-ng-0.8.1.patch/fuse/fuse_int.c 2011-09-10 12:13:50.111124491 +0200 @@ -18,7 +18,7 @@ #define FUSE_USE_VERSION 25 -#include "afp.h" +#include "afpfs-ng/afp.h" #include #include @@ -39,10 +39,10 @@ #include #include -#include "dsi.h" -#include "afp_protocol.h" -#include "codepage.h" -#include "midlevel.h" +#include "afpfs-ng/dsi.h" +#include "afpfs-ng/afp_protocol.h" +#include "afpfs-ng/codepage.h" +#include "afpfs-ng/midlevel.h" #include "fuse_error.h" /* Uncomment the following line to enable full debugging: */ diff -Naur afpfs-ng-0.8.1/include/afpfs-ng/afp.h afpfs-ng-0.8.1.patch/include/afpfs-ng/afp.h --- afpfs-ng-0.8.1/include/afpfs-ng/afp.h 1970-01-01 01:00:00.000000000 +0100 +++ afpfs-ng-0.8.1.patch/include/afpfs-ng/afp.h 2011-09-10 12:13:50.112124505 +0200 @@ -0,0 +1,533 @@ + +#ifndef _AFP_H_ +#define _AFP_H_ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#define AFPFS_VERSION "0.8.1" + +/* This is the maximum AFP version this library supports */ +#define AFP_MAX_SUPPORTED_VERSION 32 + +/* afp_url is used to pass locations around */ +struct afp_url { + enum {TCPIP,AT} protocol; + char username[AFP_MAX_USERNAME_LEN]; + char uamname[50]; + char password[AFP_MAX_PASSWORD_LEN]; + char servername[AFP_SERVER_NAME_UTF8_LEN]; + int port; + char volumename[AFP_VOLUME_NAME_UTF8_LEN]; + char path[AFP_MAX_PATH]; + + int requested_version; + char zone[AFP_ZONE_LEN]; /* Only used for Appletalk */ + char volpassword[9];; +}; + +struct afp_token { + unsigned int length; + char data[AFP_TOKEN_MAX_LEN]; +}; + +#define SERVER_MAX_VERSIONS 10 +#define SERVER_MAX_UAMS 10 + +struct afp_rx_buffer { + unsigned int size; + unsigned int maxsize; + char * data; + int errorcode; +}; + + +struct afp_file_info { + unsigned short attributes; + unsigned int did; + unsigned int creation_date; + unsigned int modification_date; + unsigned int backup_date; + unsigned int fileid; + unsigned short offspring; + char sync; + char finderinfo[32]; + char name[AFP_MAX_PATH]; + char basename[AFP_MAX_PATH]; + char translated_name[AFP_MAX_PATH]; + struct afp_unixprivs unixprivs; + unsigned int accessrights; + struct afp_file_info * next; + struct afp_file_info * largelist_next; + unsigned char isdir; + unsigned long long size; + unsigned short resourcesize; + unsigned int resource; + unsigned short forkid; + struct afp_icon * icon; + int eof; +}; + + +#define VOLUME_EXTRA_FLAGS_VOL_CHMOD_KNOWN 0x1 +#define VOLUME_EXTRA_FLAGS_VOL_CHMOD_BROKEN 0x2 +#define VOLUME_EXTRA_FLAGS_SHOW_APPLEDOUBLE 0x4 +#define VOLUME_EXTRA_FLAGS_VOL_SUPPORTS_UNIX 0x8 +#define VOLUME_EXTRA_FLAGS_NO_LOCKING 0x10 +#define VOLUME_EXTRA_FLAGS_IGNORE_UNIXPRIVS 0x20 +#define VOLUME_EXTRA_FLAGS_READONLY 0x40 + +#define AFP_VOLUME_UNMOUNTED 0 +#define AFP_VOLUME_MOUNTED 1 +#define AFP_VOLUME_UNMOUNTING 2 + +struct afp_volume { + unsigned short volid; + char flags; /* This is from afpGetSrvrParms */ + unsigned short attributes; /* This is from VolOpen */ + unsigned short signature; /* This is fixed or variable */ + unsigned int creation_date; + unsigned int modification_date; + unsigned int backup_date; + struct statvfs stat; + unsigned char mounted; + char mountpoint[255]; + struct afp_server * server; + char volume_name[AFP_VOLUME_NAME_LEN]; + char volume_name_printable[AFP_VOLUME_NAME_UTF8_LEN]; + unsigned short dtrefnum; + char volpassword[AFP_VOLPASS_LEN]; + unsigned int extra_flags; /* This is an afpfs-ng specific field */ + + /* Our directory ID cache */ + struct did_cache_entry * did_cache_base; + pthread_mutex_t did_cache_mutex; + + /* Our journal of open forks */ + struct afp_file_info * open_forks; + pthread_mutex_t open_forks_mutex; + + /* Used to trigger startup */ + pthread_cond_t startup_condition_cond; + + struct { + uint64_t hits; + uint64_t misses; + uint64_t expired; + uint64_t force_removed; + } did_cache_stats; + + void * priv; /* This is a private structure for fuse/cmdline, etc */ + pthread_t thread; /* This is the per-volume thread */ + + int mapping; + +}; + +#define SERVER_STATE_CONNECTED 1 +#define SERVER_STATE_DISCONNECTED 2 + +enum server_type{ + AFPFS_SERVER_TYPE_UNKNOWN, + AFPFS_SERVER_TYPE_NETATALK, + AFPFS_SERVER_TYPE_AIRPORT, + AFPFS_SERVER_TYPE_MACINTOSH, +}; + +#define is_netatalk(x) ( (x)->machine_type == AFPFS_SERVER_TYPE_NETATALK ) +#define is_airport(x) ( (x)->machine_type == AFPFS_SERVER_TYPE_AIRPORT ) +#define is_macintosh(x) ( (x)->machine_type == AFPFS_SERVER_TYPE_MACINTOSH ) + + + +struct afp_versions { + char *av_name; + int av_number; +}; +extern struct afp_versions afp_versions[]; + +struct afp_server { + + /* Our buffer sizes */ + unsigned int tx_quantum; + unsigned int rx_quantum; + + unsigned int tx_delay; + + /* Connection information */ + struct sockaddr_in address; + int fd; + + /* Some stats, for information only */ + struct { + uint64_t runt_packets; + uint64_t incoming_dsi; + uint64_t rx_bytes; + uint64_t tx_bytes; + uint64_t requests_pending; + } stats; + + /* General information */ + char server_name[AFP_SERVER_NAME_LEN]; + char server_name_utf8[AFP_SERVER_NAME_UTF8_LEN]; + char server_name_printable[AFP_SERVER_NAME_UTF8_LEN]; + + char machine_type[17]; + char icon[256]; + char signature[16]; + unsigned short flags; + int connect_state; + enum server_type server_type; + + /* This is the time we connected */ + time_t connect_time; + + /* UAMs */ + unsigned int supported_uams; + unsigned int using_uam; + + /* Authentication */ + char username[AFP_MAX_USERNAME_LEN]; + char password[AFP_MAX_PASSWORD_LEN]; + + /* Session */ + struct afp_token token; + char need_resume; + + /* Versions */ + unsigned char requested_version; + unsigned char versions[SERVER_MAX_VERSIONS]; + struct afp_versions *using_version; + + /* Volumes */ + unsigned char num_volumes; + struct afp_volume * volumes; + + void * dsi; + unsigned int exit_flag; + + /* Our DSI request queue */ + pthread_mutex_t requestid_mutex; + pthread_mutex_t request_queue_mutex; + unsigned short lastrequestid; + unsigned short expectedrequestid; + struct dsi_request * command_requests; + + + char loginmesg[200]; + char servermesg[200]; + char path_encoding; + + /* This is the data for the incoming buffer */ + char * incoming_buffer; + int data_read; + int bufsize; + + /* And this is for the outgoing queue */ + pthread_mutex_t send_mutex; + + /* This is for user mapping */ + struct passwd passwd; + unsigned int server_uid, server_gid; + int server_gid_valid; + + struct afp_server *next; + + /* These are for DSI attention packets */ + unsigned int attention_quantum; + unsigned int attention_len; + char * attention_buffer; + +}; + +struct afp_extattr_info { + unsigned int maxsize; + unsigned int size; + char data[1024]; +}; +struct afp_comment { + unsigned int maxsize; + unsigned int size; + char *data; +}; + +struct afp_icon { + unsigned int maxsize; + unsigned int size; + char *data; +}; + +#define AFP_DEFAULT_ATTENTION_QUANTUM 1024 + +void afp_unixpriv_to_stat(struct afp_file_info *fp, + struct stat *stat); + +int init_uams(void) ; + +unsigned int find_uam_by_name(const char * name); +char * uam_bitmap_to_string(unsigned int bitmap); + + +char * get_uam_names_list(void); + +unsigned int default_uams_mask(void); + +struct afp_volume * find_volume_by_name(struct afp_server * server, + const char * volname); + +struct afp_connection_request { + unsigned int uam_mask; + struct afp_url url; +}; + +void afp_default_url(struct afp_url *url); +int afp_parse_url(struct afp_url * url, const char * toparse, int verbose); +void afp_print_url(struct afp_url * url); +int afp_url_validate(char * url_string, struct afp_url * valid_url); + +int afp_list_volnames(struct afp_server * server, char * names, int max); + +/* User mapping */ +int afp_detect_mapping(struct afp_volume * volume); + +/* These are some functions that help with simple status text generation */ + +int afp_status_header(char * text, int * len); +int afp_status_server(struct afp_server * s,char * text, int * len); + + +struct afp_server * afp_server_full_connect(void * priv, struct afp_connection_request * req); + +void * just_end_it_now(void *other); +void add_fd_and_signal(int fd); +void loop_disconnect(struct afp_server *s); +void afp_wait_for_started_loop(void); + + +struct afp_versions * pick_version(unsigned char *versions, + unsigned char requested) ; +int pick_uam(unsigned int u1, unsigned int u2); + +int afp_server_login(struct afp_server *server, + char * mesg, unsigned int *l, unsigned int max); + + +int afp_dologin(struct afp_server *server, + unsigned int uam, char * username, char * passwd); + +void afp_free_server(struct afp_server **server); + +struct afp_server * afp_server_init(struct sockaddr_in * address); +int afp_get_address(void * priv, const char * hostname, unsigned int port, + struct sockaddr_in * address); + + +int afp_main_loop(int command_fd); +int afp_main_quick_startup(pthread_t * thread); + +int afp_server_destroy(struct afp_server *s) ; +int afp_server_reconnect(struct afp_server * s, char * mesg, + unsigned int *l, unsigned int max); +int afp_server_connect(struct afp_server *s, int full); + +struct afp_server * afp_server_complete_connection( + void * priv, + struct afp_server * server, + struct sockaddr_in * address, unsigned char * versions, + unsigned int uams, char * username, char * password, + unsigned int requested_version, unsigned int uam_mask); + +int afp_connect_volume(struct afp_volume * volume, struct afp_server * server, + char * mesg, unsigned int * l, unsigned int max); +int something_is_mounted(struct afp_server * server); + +int add_cache_entry(struct afp_file_info * file) ; +struct afp_file_info * get_cache_by_name(char * name); +struct afp_server * find_server_by_address(struct sockaddr_in * address); +struct afp_server * find_server_by_signature(char * signature); +struct afp_server * find_server_by_name(char * name); +int server_still_valid(struct afp_server * server); + + +struct afp_server * get_server_base(void); +int afp_server_remove(struct afp_server * server); + +int afp_unmount_volume(struct afp_volume * volume); +int afp_unmount_all_volumes(struct afp_server * server); + +#define volume_is_readonly(x) (((x)->attributes&kReadOnly) || \ + ((x)->extra_flags & VOLUME_EXTRA_FLAGS_READONLY)) + +int afp_opendt(struct afp_volume *volume, unsigned short * refnum); + +int afp_closedt(struct afp_server * server, unsigned short * refnum); + +int afp_getcomment(struct afp_volume *volume, unsigned int did, + const char * pathname, struct afp_comment * comment); + +int afp_addcomment(struct afp_volume *volume, unsigned int did, + const char * pathname, char * comment,uint64_t *size); + +int afp_geticon(struct afp_volume * volume, unsigned int filecreator, + unsigned int filetype, unsigned char icontype, + unsigned short length, struct afp_icon * icon); + +/* Things you want to do to a server */ + +int afp_getsrvrmsg(struct afp_server *server, unsigned short messagetype,unsigned char utf8, unsigned char block, char * mesg); + +int afp_login(struct afp_server *server, char * uaname, + char * userauthinfo, unsigned int userauthinfo_len, + struct afp_rx_buffer *rx); + +int afp_changepassword(struct afp_server *server, char * uaname, + char * userauthinfo, unsigned int userauthinfo_len, + struct afp_rx_buffer *rx); + +int afp_logincont(struct afp_server *server, unsigned short id, + char * userauthinfo, unsigned int userauthinfo_len, + struct afp_rx_buffer *rx); + +int afp_getsessiontoken(struct afp_server * server, int type, + unsigned int timestamp, struct afp_token *outgoing_token, + struct afp_token * incoming_token); + +int afp_getsrvrparms(struct afp_server *server); + +int afp_logout(struct afp_server *server,unsigned char wait); + +int afp_mapname(struct afp_server * server, unsigned char subfunction, + char * name, unsigned int * id); + +int afp_mapid(struct afp_server * server, unsigned char subfunction, + unsigned int id, char *name); + +int afp_getuserinfo(struct afp_server * server, int thisuser, + unsigned int userid, unsigned short bitmap, + unsigned int *newuid, unsigned int *newgid); + +int afp_zzzzz(struct afp_server *server); + +int afp_volopen(struct afp_volume * volume, + unsigned short bitmap, char * password); + +int afp_flush(struct afp_volume * volume); + +int afp_getfiledirparms(struct afp_volume *volume, unsigned int did, + unsigned int filebitmap, unsigned int dirbitmap, const char * pathname, + struct afp_file_info *fp); + +int afp_enumerate(struct afp_volume * volume, + unsigned int dirid, + unsigned int filebitmap, unsigned int dirbitmap, + unsigned short reqcount, + unsigned short startindex, + char * path, + struct afp_file_info ** file_p); + +int afp_enumerateext2(struct afp_volume * volume, + unsigned int dirid, + unsigned int filebitmap, unsigned int dirbitmap, + unsigned short reqcount, + unsigned long startindex, + char * path, + struct afp_file_info ** file_p); + +int afp_openfork(struct afp_volume * volume, + unsigned char forktype, + unsigned int dirid, + unsigned short accessmode, + char * filename, + struct afp_file_info *fp); + +int afp_read(struct afp_volume * volume, unsigned short forkid, + uint32_t offset, + uint32_t count, struct afp_rx_buffer * rx); + +int afp_readext(struct afp_volume * volume, unsigned short forkid, + uint64_t offset, + uint64_t count, struct afp_rx_buffer * rx); + +int afp_getvolparms(struct afp_volume * volume, unsigned short bitmap); + + +int afp_createdir(struct afp_volume * volume, unsigned int dirid, const char * pathname, unsigned int *did_p); + +int afp_delete(struct afp_volume * volume, + unsigned int dirid, char * pathname); + + +int afp_createfile(struct afp_volume * volume, unsigned char flag, + unsigned int did, char * pathname); + +int afp_write(struct afp_volume * volume, unsigned short forkid, + uint32_t offset, uint32_t reqcount, + char * data, uint32_t * written); + +int afp_writeext(struct afp_volume * volume, unsigned short forkid, + uint64_t offset, uint64_t reqcount, + char * data, uint64_t * written); + +int afp_flushfork(struct afp_volume * volume, unsigned short forkid); + +int afp_closefork(struct afp_volume * volume, unsigned short forkid); +int afp_setfileparms(struct afp_volume * volume, + unsigned int dirid, const char * pathname, unsigned short bitmap, + struct afp_file_info *fp); +int afp_setfiledirparms(struct afp_volume * volume, + unsigned int dirid, const char * pathname, unsigned short bitmap, + struct afp_file_info *fp); + +int afp_setdirparms(struct afp_volume * volume, + unsigned int dirid, const char * pathname, unsigned short bitmap, + struct afp_file_info *fp); + +int afp_volclose(struct afp_volume * volume); + + +int afp_setforkparms(struct afp_volume *volume, + unsigned short forkid, unsigned short bitmap, unsigned long len); + +int afp_byterangelock(struct afp_volume * volume, + unsigned char flag, + unsigned short forkid, + uint32_t offset, + uint32_t len, uint32_t *generated_offset); + +int afp_byterangelockext(struct afp_volume * volume, + unsigned char flag, + unsigned short forkid, + uint64_t offset, + uint64_t len, uint64_t *generated_offset); + +int afp_moveandrename(struct afp_volume *volume, + unsigned int src_did, + unsigned int dst_did, + char * src_path, char * dst_path, char *new_name); + +int afp_rename(struct afp_volume * volume, + unsigned int dirid, + char * path_from, char * path_to); + +int afp_listextattr(struct afp_volume * volume, + unsigned int dirid, unsigned short bitmap, + char * pathname, struct afp_extattr_info * info); + +/* This is a currently undocumented command */ +int afp_newcommand76(struct afp_volume * volume, unsigned int dlen, char * data); + +/* For debugging */ +char * afp_get_command_name(char code); + + +#endif diff -Naur afpfs-ng-0.8.1/include/afpfs-ng/afp_protocol.h afpfs-ng-0.8.1.patch/include/afpfs-ng/afp_protocol.h --- afpfs-ng-0.8.1/include/afpfs-ng/afp_protocol.h 1970-01-01 01:00:00.000000000 +0100 +++ afpfs-ng-0.8.1.patch/include/afpfs-ng/afp_protocol.h 2011-09-10 12:13:50.112124505 +0200 @@ -0,0 +1,361 @@ + +#ifndef _AFP_PROTOCOL_H_ +#define _AFP_PROTOCOL_H_ + +#include +#include +#include +#include + +/* This file defines constants for the Apple File Protocol. + All page references are from "Apple Filing Protocol Programming" version 3.2. + except where noted. +*/ + +#define AFP_SERVER_NAME_LEN 33 +#define AFP_SERVER_NAME_UTF8_LEN 255 +#define AFP_VOLUME_NAME_LEN 33 +#define AFP_VOLUME_NAME_UTF8_LEN 33 +#define AFP_SIGNATURE_LEN 16 +#define AFP_MACHINETYPE_LEN 33 +#define AFP_LOGINMESG_LEN 200 +#define AFP_VOLPASS_LEN 8 +#define AFP_HOSTNAME_LEN 255 +/* This is actually just a guess, and only used for appletalk */ +#define AFP_ZONE_LEN 255 + +#define AFP_SERVER_ICON_LEN 256 + + +#define AFP_MAX_USERNAME_LEN 127 +#define AFP_MAX_PASSWORD_LEN 127 + + +/* This is the maximum length of any UAM string */ +#define AFP_UAM_LENGTH 24 + +/* This is the maximum length of any path description */ +#define AFP_MAX_PATH 768 + +#define AFP_VOL_FLAT 1 +#define AFP_VOL_FIXED 2 +#define AFP_VOL_VARIABLE 3 + +/* The root directory ID, p.26 */ + +#define AFP_ROOT_DID 2 + +/* Path type constants, p.249 */ + +enum { +kFPShortName = 1, +kFPLongName = 2, +kFPUTF8Name = 3 +}; + +/* fork types */ + +#define AFP_FORKTYPE_DATA 0x0 +#define AFP_FORKTYPE_RESOURCE 0x80 + +/* openfork access modes, from p.196 */ + +#define AFP_OPENFORK_ALLOWREAD 1 +#define AFP_OPENFORK_ALLOWWRITE 2 +#define AFP_OPENFORK_DENYREAD 0x10 +#define AFP_OPENFORK_DENYWRITE 0x20 + +/* Message type for getsrvmesg, p. 169*/ + +typedef enum { + AFPMESG_LOGIN = 0, + AFPMESG_SERVER = 1 +} afpmessage_t; + +/* Message bitmap for getsrvrmsg */ + +#define AFP_GETSRVRMSG_UTF8 0x2 +#define AFP_GETSRVRMSG_GETMSG 0x1 + + +/* Maximum Version length, p.17 */ +#define AFP_MAX_VERSION_LENGTH 16 + +/* Maximum length of a token, this is undocumented */ +#define AFP_TOKEN_MAX_LEN 256 + +/* The maximum size of a file for AFP 2 */ +#define AFP_MAX_AFP2_FILESIZE (4294967296) + +/* Unix privs, p.240 */ + +struct afp_unixprivs { + uint32_t uid __attribute__((__packed__)); + uint32_t gid __attribute__((__packed__)); + uint32_t permissions __attribute__((__packed__)); + uint32_t ua_permissions __attribute__((__packed__)); + +}; + + +/* AFP Volume attributes bitmap, p.241 */ + +enum { + kReadOnly = 0x01, + kHasVolumePassword = 0x02, + kSupportsFileIDs = 0x04, + kSupportsCatSearch = 0x08, + kSupportsBlankAccessPrivs = 0x10, + kSupportsUnixPrivs = 0x20, + kSupportsUTF8Names = 0x40, + kNoNetworkUserIDs = 0x80, + kDefaultPrivsFromParent = 0x100, + kNoExchangeFiles = 0x200, + kSupportsExtAttrs = 0x400, + kSupportsACLs=0x800 +}; + +/* AFP file creation constantes, p.250 */ +enum { +kFPSoftCreate = 0, +kFPHardCreate = 0x80 +}; + +/* AFP Directory attributes, taken from the protocol guide p.236 */ + +enum { + kFPAttributeBit = 0x1, + kFPParentDirIDBit = 0x2, + kFPCreateDateBit = 0x4, + kFPModDateBit = 0x8, + kFPBackupDateBit = 0x10, + kFPFinderInfoBit = 0x20, + kFPLongNameBit = 0x40, + kFPShortNameBit = 0x80, + kFPNodeIDBit = 0x100, + kFPOffspringCountBit = 0x0200, + kFPOwnerIDBit = 0x0400, + kFPGroupIDBit = 0x0800, + kFPAccessRightsBit = 0x1000, + kFPProDOSInfoBit = 0x2000, // AFP version 2.2 and earlier + kFPUTF8NameBit = 0x2000, // AFP version 3.0 and later + kFPUnixPrivsBit = 0x8000 // AFP version 3.0 and later +}; + +/* AFP File bitmap, p.238. These are the ones not in the AFP Directory + attributes map. */ + +enum { + kFPDataForkLenBit = 0x0200, + kFPRsrcForkLenBit = 0x0400, + kFPExtDataForkLenBit = 0x0800, // AFP version 3.0 and later + kFPLaunchLimitBit = 0x1000, + kFPExtRsrcForkLenBit = 0x4000, // AFP version 3.0 and later +}; + +/* AFP Extended Attributes Bitmap, p.238 */ + +enum { + kXAttrNoFollow = 0x1, + kXAttrCreate = 0x2, + kXAttrREplace=0x4 +}; + + +/* AFP function codes */ +enum AFPFunction +{ + afpByteRangeLock = 1, afpCloseVol, afpCloseDir, afpCloseFork, + afpCopyFile, afpCreateDir, afpCreateFile, + afpDelete, afpEnumerate, afpFlush, afpFlushFork, + afpGetForkParms = 14, afpGetSrvrInfo, afpGetSrvrParms, + afpGetVolParms, afpLogin, afpLoginCont, afpLogout, afpMapID, + afpMapName, afpMoveAndRename, afpOpenVol, afpOpenDir, afpOpenFork, + afpRead, afpRename, afpSetDirParms, afpSetFileParms, + afpSetForkParms, afpSetVolParms, afpWrite, afpGetFileDirParms, + afpSetFileDirParms, afpChangePassword, + afpGetUserInfo=37,afpGetSrvrMsg = 38, + afpOpenDT=48, + afpCloseDT=49, + afpGetIcon=51, afpGetIconInfo=52, + afpAddComment=56, afpRemoveComment=57, afpGetComment=58, + afpByteRangeLockExt=59, afpReadExt, afpWriteExt, + afpGetAuthMethods=62, + afp_LoginExt=63, + afpGetSessionToken=64, + afpDisconnectOldSession=65, + afpEnumerateExt=66, + afpCatSearchExt = 67, + afpEnumerateExt2 = 68, afpGetExtAttr, afpSetExtAttr, + afpRemoveExtAttr , afpListExtAttrs, + afpZzzzz = 122, + afpAddIcon=192, +}; + +/* AFP Volume bitmap. Take from 242 of the protocol guide. */ +enum { + kFPBadVolPre222Bitmap = 0xFe00, + kFPBadVolBitmap = 0xF000, + kFPVolAttributeBit = 0x1, + kFPVolSignatureBit = 0x2, + kFPVolCreateDateBit = 0x4, + kFPVolModDateBit = 0x8, + kFPVolBackupDateBit = 0x10, + kFPVolIDBit = 0x20, + kFPVolBytesFreeBit = 0x40, + kFPVolBytesTotalBit = 0x80, + kFPVolNameBit = 0x100, + kFPVolExtBytesFreeBit = 0x200, + kFPVolExtBytesTotalBit = 0x400, + kFPVolBlockSizeBit = 0x800 +}; + +/* AFP Attention Codes -- 4 bits */ +#define AFPATTN_SHUTDOWN (1 << 15) /* shutdown/disconnect */ +#define AFPATTN_CRASH (1 << 14) /* server crashed */ +#define AFPATTN_MESG (1 << 13) /* server has message */ +#define AFPATTN_NORECONNECT (1 << 12) /* don't reconnect */ +/* server notification */ +#define AFPATTN_NOTIFY (AFPATTN_MESG | AFPATTN_NORECONNECT) + +/* extended bitmap -- 12 bits. volchanged is only useful w/ a server + * notification, and time is only useful for shutdown. */ +#define AFPATTN_VOLCHANGED (1 << 0) /* volume has changed */ +#define AFPATTN_TIME(x) ((x) & 0xfff) /* time in minutes */ + +#define kFPNoErr 0 + +/* AFP result codes, p252 */ +#define kASPSessClosed -1072 +#define kFPAccessDenied -5000 +#define kFPAuthContinue -5001 +#define kFPBadUAM -5002 +#define kFPBadVersNum -5003 +#define kFPBitmapErr -5004 +#define kFPCantMove -5005 +#define kFPDenyConflict -5006 +#define kFPDirNotEmpty -5007 +#define kFPDiskFull -5008 +#define kFPEOFErr -5009 +#define kFPFileBusy -5010 +#define kFPFlatVol -5011 +#define kFPItemNotFound -5012 +#define kFPLockErr -5013 +#define kFPMiscErr -5014 +#define kFPNoMoreLocks -5015 +#define kFPNoServer -5016 +#define kFPObjectExists -5017 +#define kFPObjectNotFound -5018 +#define kFPParamErr -5019 +#define kFPRangeNotLocked -5020 +#define kFPRangeOverlap -5021 +#define kFPSessClosed -5022 +#define kFPUserNotAuth -5023 +#define kFPCallNotSupported -5024 +#define kFPObjectTypeErr -5025 +#define kFPTooManyFilesOpen -5026 +#define kFPServerGoingDown -5027 +#define kFPCantRename -5028 +#define kFPDirNotFound -5029 +#define kFPIconTypeError -5030 +#define kFPVolLocked -5031 +#define kFPObjectLocked -5032 +#define kFPContainsSharedErr -5033 +#define kFPIDNotFound -5034 +#define kFPIDExists -5035 +#define kFPDiffVolErr -5036 +#define kFPCatalogChanged -5037 +#define kFPSameObjectErr -5038 +#define kFPBadIDErr -5039 +#define kFPPwdSameErr -5040 +#define kFPPwdTooShortErr -5041 +#define kFPPwdExpiredErr -5042 +#define kFPInsideSharedErr -5043 +#define kFPInsideTrashErr -5044 +#define kFPPwdNeedsChangeErr -5045 +#define kFPPwdPolicyErr -5046 +#define kFPDiskQuotaExceeded –5047 + + + +/* These flags determine to lock or unlock in ByteRangeLock(Ext) */ + +enum { +ByteRangeLock_Lock = 0, +ByteRangeLock_Unlock = 1 +}; + +/* These flags are used in volopen and getsrvrparm replies, p.171 */ + +#define HasConfigInfo 0x1 +#define HasPassword 0x80 + +/* These are the subfunction for kFPMapID, as per p.248 */ + +enum { +kUserIDToName = 1, +kGroupIDToName = 2, +kUserIDToUTF8Name = 3, +kGroupIDToUTF8Name = 4, +kUserUUIDToUTF8Name = 5, +kGroupUUIDToUTF8Name = 6 +}; + + +/* These are the subfunction flags described in the FPMapName command, p.286. + Note that this is different than what's described on p. 186. */ + +enum { +kNameToUserID = 1, +kNameToGroupID = 2, +kUTF8NameToUserID = 3, +kUTF8NameToGroupID = 4, +kUTF8NameToUserUUID = 5, +kUTF8NameToGroupUUID = 6 +}; + +/* These are bits for FPGetUserInfo, p.173. */ +#define kFPGetUserInfo_USER_ID 1 +#define kFPGetUserInfo_PRI_GROUPID 2 + +/* Flags for the replies of GetSrvrInfo and DSI GetStatus, p.240 */ + +enum { + kSupportsCopyfile = 0x01, + kSupportsChgPwd = 0x02, + kDontAllowSavePwd = 0x04, + kSupportsSrvrMsg = 0x08, + kSrvrSig = 0x10, + kSupportsTCP = 0x20, + kSupportsSrvrNotify = 0x40, + kSupportsReconnect = 0x80, + kSupportsDirServices = 0x100, + kSupportsUTF8SrvrName = 0x200, + kSupportsUUIDs = 0x400, + kSupportsSuperClient = 0x8000 +}; + + +/* p.247 */ + +enum { + kLoginWithoutID = 0, + kLoginWithID = 1, + kReconnWithID = 2, + kLoginWithTimeAndID = 3, + kReconnWithTimeAndID = 4, + kRecon1Login = 5, + kRecon1ReconnectLogin = 6, + kRecon1Refresh = 7, kGetKerberosSessionKey = 8 +}; + + +#define AFP_CHMOD_ALLOWED_BITS_22 \ + (S_IRUSR |S_IWUSR | S_IRGRP | S_IWGRP |S_IROTH | S_IWOTH | S_IFREG ) + + +#endif + + + + diff -Naur afpfs-ng-0.8.1/include/afpfs-ng/codepage.h afpfs-ng-0.8.1.patch/include/afpfs-ng/codepage.h --- afpfs-ng-0.8.1/include/afpfs-ng/codepage.h 1970-01-01 01:00:00.000000000 +0100 +++ afpfs-ng-0.8.1.patch/include/afpfs-ng/codepage.h 2011-09-10 12:13:50.113124518 +0200 @@ -0,0 +1,11 @@ +#ifndef __CODE_PAGE_H_ +#define __CODE_PAGE_H_ +int convert_utf8dec_to_utf8pre(const char *src, int src_len, + char * dest, int dest_len); +int convert_utf8pre_to_utf8dec(const char * src, int src_len, + char * dest, int dest_len); +int convert_path_to_unix(char encoding, char * dest, + char * src, int dest_len); +int convert_path_to_afp(char encoding, char * dest, + char * src, int dest_len); +#endif diff -Naur afpfs-ng-0.8.1/include/afpfs-ng/dsi.h afpfs-ng-0.8.1.patch/include/afpfs-ng/dsi.h --- afpfs-ng-0.8.1/include/afpfs-ng/dsi.h 1970-01-01 01:00:00.000000000 +0100 +++ afpfs-ng-0.8.1.patch/include/afpfs-ng/dsi.h 2011-09-10 12:13:50.115124544 +0200 @@ -0,0 +1,33 @@ + +#ifndef __DSI_H_ +#define __DSI_H_ + +#include "afpfs-ng/afp.h" + +struct dsi_request +{ + unsigned short requestid; + unsigned char subcommand; + void * other; + unsigned char wait; + pthread_cond_t condition_cond; + struct dsi_request * next; + int return_code; +}; + +int dsi_receive(struct afp_server * server, void * data, int size); +int dsi_getstatus(struct afp_server * server); + +int dsi_opensession(struct afp_server *server); + +int dsi_send(struct afp_server *server, char * msg, int size,int wait,unsigned char subcommand, void ** other); +struct dsi_session * dsi_create(struct afp_server *server); +int dsi_restart(struct afp_server *server); +int dsi_recv(struct afp_server * server); + +#define DSI_BLOCK_TIMEOUT -1 +#define DSI_DONT_WAIT 0 +#define DSI_DEFAULT_TIMEOUT 5 + + +#endif diff -Naur afpfs-ng-0.8.1/include/afpfs-ng/libafpclient.h afpfs-ng-0.8.1.patch/include/afpfs-ng/libafpclient.h --- afpfs-ng-0.8.1/include/afpfs-ng/libafpclient.h 1970-01-01 01:00:00.000000000 +0100 +++ afpfs-ng-0.8.1.patch/include/afpfs-ng/libafpclient.h 2011-09-10 12:13:50.115124544 +0200 @@ -0,0 +1,50 @@ + +#ifndef __CLIENT_H_ +#define __CLIENT_H_ + +#include +#include + +#define MAX_CLIENT_RESPONSE 2048 + + +enum loglevels { + AFPFSD, +}; + +struct afp_server; +struct afp_volume; + +struct libafpclient { + int (*unmount_volume) (struct afp_volume * volume); + void (*log_for_client)(void * priv, + enum loglevels loglevel, int logtype, const char *message); + void (*forced_ending_hook)(void); + int (*scan_extra_fds)(int command_fd,fd_set *set, int * max_fd); + void (*loop_started)(void); +} ; + +extern struct libafpclient * libafpclient; + +void libafpclient_register(struct libafpclient * tmpclient); + + +void signal_main_thread(void); + +/* These are logging functions */ + +#define MAXLOGSIZE 2048 + +#define LOG_METHOD_SYSLOG 1 +#define LOG_METHOD_STDOUT 2 + +void set_log_method(int m); + + +void log_for_client(void * priv, + enum loglevels loglevel, int logtype, char * message,...); + +void stdout_log_for_client(void * priv, + enum loglevels loglevel, int logtype, const char *message); + +#endif diff -Naur afpfs-ng-0.8.1/include/afpfs-ng/Makefile.am afpfs-ng-0.8.1.patch/include/afpfs-ng/Makefile.am --- afpfs-ng-0.8.1/include/afpfs-ng/Makefile.am 1970-01-01 01:00:00.000000000 +0100 +++ afpfs-ng-0.8.1.patch/include/afpfs-ng/Makefile.am 2011-09-10 12:13:50.115124544 +0200 @@ -0,0 +1,6 @@ +## Process this file with automake to produce Makefile.in + +afpfsincludedir = $(includedir)/afpfs-ng + +afpfsinclude_HEADERS = afp.h afp_protocol.h libafpclient.h +nodist_afpfsinclude_HEADERS = codepage.h dsi.h map_def.h midlevel.h uams_def.h utils.h diff -Naur afpfs-ng-0.8.1/include/afpfs-ng/map_def.h afpfs-ng-0.8.1.patch/include/afpfs-ng/map_def.h --- afpfs-ng-0.8.1/include/afpfs-ng/map_def.h 1970-01-01 01:00:00.000000000 +0100 +++ afpfs-ng-0.8.1.patch/include/afpfs-ng/map_def.h 2011-09-10 12:13:50.116124557 +0200 @@ -0,0 +1,15 @@ +#ifndef __MAP_H_ +#define __MAP_H_ + +#include "afpfs-ng/afp.h" + +#define AFP_MAPPING_UNKNOWN 0 +#define AFP_MAPPING_COMMON 1 +#define AFP_MAPPING_LOGINIDS 2 +#define AFP_MAPPING_NAME 3 + +unsigned int map_string_to_num(char * name); +char * get_mapping_name(struct afp_volume * volume); + + +#endif diff -Naur afpfs-ng-0.8.1/include/afpfs-ng/midlevel.h afpfs-ng-0.8.1.patch/include/afpfs-ng/midlevel.h --- afpfs-ng-0.8.1/include/afpfs-ng/midlevel.h 1970-01-01 01:00:00.000000000 +0100 +++ afpfs-ng-0.8.1.patch/include/afpfs-ng/midlevel.h 2011-09-10 12:13:50.116124557 +0200 @@ -0,0 +1,64 @@ +#ifndef __MIDLEVEL_H_ +#define __MIDLEVEL_H_ + +#include +#include "afpfs-ng/afp.h" + +int ml_open(struct afp_volume * volume, const char *path, int flags, + struct afp_file_info **newfp); + +int ml_creat(struct afp_volume * volume, const char *path,mode_t mode); + +int ml_readdir(struct afp_volume * volume, + const char *path, + struct afp_file_info **base); + +int ml_read(struct afp_volume * volume, const char *path, + char *buf, size_t size, off_t offset, + struct afp_file_info *fp, int * eof); + +int ml_chmod(struct afp_volume * vol, const char * path, mode_t mode); + +int ml_unlink(struct afp_volume * vol, const char *path); + +int ml_mkdir(struct afp_volume * vol, const char * path, mode_t mode); + +int ml_close(struct afp_volume * volume, const char * path, + struct afp_file_info * fp); + +int ml_getattr(struct afp_volume * volume, const char *path, + struct stat *stbuf); + +int ml_write(struct afp_volume * volume, const char * path, + const char *data, size_t size, off_t offset, + struct afp_file_info * fp, uid_t uid, + gid_t gid); + +int ml_readlink(struct afp_volume * vol, const char * path, + char *buf, size_t size); + +int ml_rmdir(struct afp_volume * vol, const char *path); + +int ml_chown(struct afp_volume * vol, const char * path, + uid_t uid, gid_t gid); + +int ml_truncate(struct afp_volume * vol, const char * path, off_t offset); + +int ml_utime(struct afp_volume * vol, const char * path, + struct utimbuf * timebuf); + +int ml_symlink(struct afp_volume *vol, const char * path1, const char * path2); + +int ml_rename(struct afp_volume * vol, + const char * path_from, const char * path_to); + +int ml_statfs(struct afp_volume * vol, const char *path, struct statvfs *stat); + +void afp_ml_filebase_free(struct afp_file_info **filebase); + +int ml_passwd(struct afp_server *server, + char * username, char * oldpasswd, char * newpasswd); + + + +#endif diff -Naur afpfs-ng-0.8.1/include/afpfs-ng/uams_def.h afpfs-ng-0.8.1.patch/include/afpfs-ng/uams_def.h --- afpfs-ng-0.8.1/include/afpfs-ng/uams_def.h 1970-01-01 01:00:00.000000000 +0100 +++ afpfs-ng-0.8.1.patch/include/afpfs-ng/uams_def.h 2011-09-10 12:13:50.116124557 +0200 @@ -0,0 +1,16 @@ +#ifndef __UAM_DEFS_H_ +#define __UAM_DEFS_H_ + +#define UAM_NOUSERAUTHENT 0x1 +#define UAM_CLEARTXTPASSWRD 0x2 +#define UAM_RANDNUMEXCHANGE 0x4 +#define UAM_2WAYRANDNUM 0x8 +#define UAM_DHCAST128 0x10 +#define UAM_CLIENTKRB 0x20 +#define UAM_DHX2 0x40 +#define UAM_RECON1 0x80 + +int uam_string_to_bitmap(char * name); +char * uam_bitmap_to_string(unsigned int bitmap); + +#endif diff -Naur afpfs-ng-0.8.1/include/afpfs-ng/utils.h afpfs-ng-0.8.1.patch/include/afpfs-ng/utils.h --- afpfs-ng-0.8.1/include/afpfs-ng/utils.h 1970-01-01 01:00:00.000000000 +0100 +++ afpfs-ng-0.8.1.patch/include/afpfs-ng/utils.h 2011-09-10 12:13:50.116124557 +0200 @@ -0,0 +1,43 @@ +#ifndef __UTILS_H_ +#define __UTILS_H_ +#include + +#include "afpfs-ng/afp.h" + +#if BYTE_ORDER == BIG_ENDIAN +#define hton64(x) (x) +#define ntoh64(x) (x) +#else /* BYTE_ORDER == BIG_ENDIAN */ +#define hton64(x) ((u_int64_t) (htonl(((x) >> 32) & 0xffffffffLL)) | \ + (u_int64_t) ((htonl(x) & 0xffffffffLL) << 32)) +#define ntoh64(x) (hton64(x)) +#endif /* BYTE_ORDER == BIG_ENDIAN */ + +#define min(a,b) (((a)<(b)) ? (a) : (b)) +#define max(a,b) (((a)>(b)) ? (a) : (b)) + + + +unsigned char unixpath_to_afppath( + struct afp_server * server, + char * buf); + +unsigned char sizeof_path_header(struct afp_server * server); + + + +unsigned char copy_from_pascal(char *dest, char *pascal,unsigned int max_len) ; +unsigned short copy_from_pascal_two(char *dest, char *pascal,unsigned int max_len); + +unsigned char copy_to_pascal(char *dest, const char *src); +unsigned short copy_to_pascal_two(char *dest, const char *src); + +void copy_path(struct afp_server * server, char * dest, const char * pathname, unsigned char len); + + +char * create_path(struct afp_server * server, char * pathname, unsigned short * len); + + +int invalid_filename(struct afp_server * server, const char * filename); + +#endif diff -Naur afpfs-ng-0.8.1/include/afp.h afpfs-ng-0.8.1.patch/include/afp.h --- afpfs-ng-0.8.1/include/afp.h 2008-03-08 17:08:18.000000000 +0100 +++ afpfs-ng-0.8.1.patch/include/afp.h 1970-01-01 01:00:00.000000000 +0100 @@ -1,533 +0,0 @@ - -#ifndef _AFP_H_ -#define _AFP_H_ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -#define AFPFS_VERSION "0.8.1" - -/* This is the maximum AFP version this library supports */ -#define AFP_MAX_SUPPORTED_VERSION 32 - -/* afp_url is used to pass locations around */ -struct afp_url { - enum {TCPIP,AT} protocol; - char username[AFP_MAX_USERNAME_LEN]; - char uamname[50]; - char password[AFP_MAX_PASSWORD_LEN]; - char servername[AFP_SERVER_NAME_UTF8_LEN]; - int port; - char volumename[AFP_VOLUME_NAME_UTF8_LEN]; - char path[AFP_MAX_PATH]; - - int requested_version; - char zone[AFP_ZONE_LEN]; /* Only used for Appletalk */ - char volpassword[9];; -}; - -struct afp_token { - unsigned int length; - char data[AFP_TOKEN_MAX_LEN]; -}; - -#define SERVER_MAX_VERSIONS 10 -#define SERVER_MAX_UAMS 10 - -struct afp_rx_buffer { - unsigned int size; - unsigned int maxsize; - char * data; - int errorcode; -}; - - -struct afp_file_info { - unsigned short attributes; - unsigned int did; - unsigned int creation_date; - unsigned int modification_date; - unsigned int backup_date; - unsigned int fileid; - unsigned short offspring; - char sync; - char finderinfo[32]; - char name[AFP_MAX_PATH]; - char basename[AFP_MAX_PATH]; - char translated_name[AFP_MAX_PATH]; - struct afp_unixprivs unixprivs; - unsigned int accessrights; - struct afp_file_info * next; - struct afp_file_info * largelist_next; - unsigned char isdir; - unsigned long long size; - unsigned short resourcesize; - unsigned int resource; - unsigned short forkid; - struct afp_icon * icon; - int eof; -}; - - -#define VOLUME_EXTRA_FLAGS_VOL_CHMOD_KNOWN 0x1 -#define VOLUME_EXTRA_FLAGS_VOL_CHMOD_BROKEN 0x2 -#define VOLUME_EXTRA_FLAGS_SHOW_APPLEDOUBLE 0x4 -#define VOLUME_EXTRA_FLAGS_VOL_SUPPORTS_UNIX 0x8 -#define VOLUME_EXTRA_FLAGS_NO_LOCKING 0x10 -#define VOLUME_EXTRA_FLAGS_IGNORE_UNIXPRIVS 0x20 -#define VOLUME_EXTRA_FLAGS_READONLY 0x40 - -#define AFP_VOLUME_UNMOUNTED 0 -#define AFP_VOLUME_MOUNTED 1 -#define AFP_VOLUME_UNMOUNTING 2 - -struct afp_volume { - unsigned short volid; - char flags; /* This is from afpGetSrvrParms */ - unsigned short attributes; /* This is from VolOpen */ - unsigned short signature; /* This is fixed or variable */ - unsigned int creation_date; - unsigned int modification_date; - unsigned int backup_date; - struct statvfs stat; - unsigned char mounted; - char mountpoint[255]; - struct afp_server * server; - char volume_name[AFP_VOLUME_NAME_LEN]; - char volume_name_printable[AFP_VOLUME_NAME_UTF8_LEN]; - unsigned short dtrefnum; - char volpassword[AFP_VOLPASS_LEN]; - unsigned int extra_flags; /* This is an afpfs-ng specific field */ - - /* Our directory ID cache */ - struct did_cache_entry * did_cache_base; - pthread_mutex_t did_cache_mutex; - - /* Our journal of open forks */ - struct afp_file_info * open_forks; - pthread_mutex_t open_forks_mutex; - - /* Used to trigger startup */ - pthread_cond_t startup_condition_cond; - - struct { - uint64_t hits; - uint64_t misses; - uint64_t expired; - uint64_t force_removed; - } did_cache_stats; - - void * priv; /* This is a private structure for fuse/cmdline, etc */ - pthread_t thread; /* This is the per-volume thread */ - - int mapping; - -}; - -#define SERVER_STATE_CONNECTED 1 -#define SERVER_STATE_DISCONNECTED 2 - -enum server_type{ - AFPFS_SERVER_TYPE_UNKNOWN, - AFPFS_SERVER_TYPE_NETATALK, - AFPFS_SERVER_TYPE_AIRPORT, - AFPFS_SERVER_TYPE_MACINTOSH, -}; - -#define is_netatalk(x) ( (x)->machine_type == AFPFS_SERVER_TYPE_NETATALK ) -#define is_airport(x) ( (x)->machine_type == AFPFS_SERVER_TYPE_AIRPORT ) -#define is_macintosh(x) ( (x)->machine_type == AFPFS_SERVER_TYPE_MACINTOSH ) - - - -struct afp_versions { - char *av_name; - int av_number; -}; -extern struct afp_versions afp_versions[]; - -struct afp_server { - - /* Our buffer sizes */ - unsigned int tx_quantum; - unsigned int rx_quantum; - - unsigned int tx_delay; - - /* Connection information */ - struct sockaddr_in address; - int fd; - - /* Some stats, for information only */ - struct { - uint64_t runt_packets; - uint64_t incoming_dsi; - uint64_t rx_bytes; - uint64_t tx_bytes; - uint64_t requests_pending; - } stats; - - /* General information */ - char server_name[AFP_SERVER_NAME_LEN]; - char server_name_utf8[AFP_SERVER_NAME_UTF8_LEN]; - char server_name_printable[AFP_SERVER_NAME_UTF8_LEN]; - - char machine_type[17]; - char icon[256]; - char signature[16]; - unsigned short flags; - int connect_state; - enum server_type server_type; - - /* This is the time we connected */ - time_t connect_time; - - /* UAMs */ - unsigned int supported_uams; - unsigned int using_uam; - - /* Authentication */ - char username[AFP_MAX_USERNAME_LEN]; - char password[AFP_MAX_PASSWORD_LEN]; - - /* Session */ - struct afp_token token; - char need_resume; - - /* Versions */ - unsigned char requested_version; - unsigned char versions[SERVER_MAX_VERSIONS]; - struct afp_versions *using_version; - - /* Volumes */ - unsigned char num_volumes; - struct afp_volume * volumes; - - void * dsi; - unsigned int exit_flag; - - /* Our DSI request queue */ - pthread_mutex_t requestid_mutex; - pthread_mutex_t request_queue_mutex; - unsigned short lastrequestid; - unsigned short expectedrequestid; - struct dsi_request * command_requests; - - - char loginmesg[200]; - char servermesg[200]; - char path_encoding; - - /* This is the data for the incoming buffer */ - char * incoming_buffer; - int data_read; - int bufsize; - - /* And this is for the outgoing queue */ - pthread_mutex_t send_mutex; - - /* This is for user mapping */ - struct passwd passwd; - unsigned int server_uid, server_gid; - int server_gid_valid; - - struct afp_server *next; - - /* These are for DSI attention packets */ - unsigned int attention_quantum; - unsigned int attention_len; - char * attention_buffer; - -}; - -struct afp_extattr_info { - unsigned int maxsize; - unsigned int size; - char data[1024]; -}; -struct afp_comment { - unsigned int maxsize; - unsigned int size; - char *data; -}; - -struct afp_icon { - unsigned int maxsize; - unsigned int size; - char *data; -}; - -#define AFP_DEFAULT_ATTENTION_QUANTUM 1024 - -void afp_unixpriv_to_stat(struct afp_file_info *fp, - struct stat *stat); - -int init_uams(void) ; - -unsigned int find_uam_by_name(const char * name); -char * uam_bitmap_to_string(unsigned int bitmap); - - -char * get_uam_names_list(void); - -unsigned int default_uams_mask(void); - -struct afp_volume * find_volume_by_name(struct afp_server * server, - const char * volname); - -struct afp_connection_request { - unsigned int uam_mask; - struct afp_url url; -}; - -void afp_default_url(struct afp_url *url); -int afp_parse_url(struct afp_url * url, const char * toparse, int verbose); -void afp_print_url(struct afp_url * url); -int afp_url_validate(char * url_string, struct afp_url * valid_url); - -int afp_list_volnames(struct afp_server * server, char * names, int max); - -/* User mapping */ -int afp_detect_mapping(struct afp_volume * volume); - -/* These are some functions that help with simple status text generation */ - -int afp_status_header(char * text, int * len); -int afp_status_server(struct afp_server * s,char * text, int * len); - - -struct afp_server * afp_server_full_connect(void * priv, struct afp_connection_request * req); - -void * just_end_it_now(void *other); -void add_fd_and_signal(int fd); -void loop_disconnect(struct afp_server *s); -void afp_wait_for_started_loop(void); - - -struct afp_versions * pick_version(unsigned char *versions, - unsigned char requested) ; -int pick_uam(unsigned int u1, unsigned int u2); - -int afp_server_login(struct afp_server *server, - char * mesg, unsigned int *l, unsigned int max); - - -int afp_dologin(struct afp_server *server, - unsigned int uam, char * username, char * passwd); - -void afp_free_server(struct afp_server **server); - -struct afp_server * afp_server_init(struct sockaddr_in * address); -int afp_get_address(void * priv, const char * hostname, unsigned int port, - struct sockaddr_in * address); - - -int afp_main_loop(int command_fd); -int afp_main_quick_startup(pthread_t * thread); - -int afp_server_destroy(struct afp_server *s) ; -int afp_server_reconnect(struct afp_server * s, char * mesg, - unsigned int *l, unsigned int max); -int afp_server_connect(struct afp_server *s, int full); - -struct afp_server * afp_server_complete_connection( - void * priv, - struct afp_server * server, - struct sockaddr_in * address, unsigned char * versions, - unsigned int uams, char * username, char * password, - unsigned int requested_version, unsigned int uam_mask); - -int afp_connect_volume(struct afp_volume * volume, struct afp_server * server, - char * mesg, unsigned int * l, unsigned int max); -int something_is_mounted(struct afp_server * server); - -int add_cache_entry(struct afp_file_info * file) ; -struct afp_file_info * get_cache_by_name(char * name); -struct afp_server * find_server_by_address(struct sockaddr_in * address); -struct afp_server * find_server_by_signature(char * signature); -struct afp_server * find_server_by_name(char * name); -int server_still_valid(struct afp_server * server); - - -struct afp_server * get_server_base(void); -int afp_server_remove(struct afp_server * server); - -int afp_unmount_volume(struct afp_volume * volume); -int afp_unmount_all_volumes(struct afp_server * server); - -#define volume_is_readonly(x) (((x)->attributes&kReadOnly) || \ - ((x)->extra_flags & VOLUME_EXTRA_FLAGS_READONLY)) - -int afp_opendt(struct afp_volume *volume, unsigned short * refnum); - -int afp_closedt(struct afp_server * server, unsigned short * refnum); - -int afp_getcomment(struct afp_volume *volume, unsigned int did, - const char * pathname, struct afp_comment * comment); - -int afp_addcomment(struct afp_volume *volume, unsigned int did, - const char * pathname, char * comment,uint64_t *size); - -int afp_geticon(struct afp_volume * volume, unsigned int filecreator, - unsigned int filetype, unsigned char icontype, - unsigned short length, struct afp_icon * icon); - -/* Things you want to do to a server */ - -int afp_getsrvrmsg(struct afp_server *server, unsigned short messagetype,unsigned char utf8, unsigned char block, char * mesg); - -int afp_login(struct afp_server *server, char * uaname, - char * userauthinfo, unsigned int userauthinfo_len, - struct afp_rx_buffer *rx); - -int afp_changepassword(struct afp_server *server, char * uaname, - char * userauthinfo, unsigned int userauthinfo_len, - struct afp_rx_buffer *rx); - -int afp_logincont(struct afp_server *server, unsigned short id, - char * userauthinfo, unsigned int userauthinfo_len, - struct afp_rx_buffer *rx); - -int afp_getsessiontoken(struct afp_server * server, int type, - unsigned int timestamp, struct afp_token *outgoing_token, - struct afp_token * incoming_token); - -int afp_getsrvrparms(struct afp_server *server); - -int afp_logout(struct afp_server *server,unsigned char wait); - -int afp_mapname(struct afp_server * server, unsigned char subfunction, - char * name, unsigned int * id); - -int afp_mapid(struct afp_server * server, unsigned char subfunction, - unsigned int id, char *name); - -int afp_getuserinfo(struct afp_server * server, int thisuser, - unsigned int userid, unsigned short bitmap, - unsigned int *newuid, unsigned int *newgid); - -int afp_zzzzz(struct afp_server *server); - -int afp_volopen(struct afp_volume * volume, - unsigned short bitmap, char * password); - -int afp_flush(struct afp_volume * volume); - -int afp_getfiledirparms(struct afp_volume *volume, unsigned int did, - unsigned int filebitmap, unsigned int dirbitmap, const char * pathname, - struct afp_file_info *fp); - -int afp_enumerate(struct afp_volume * volume, - unsigned int dirid, - unsigned int filebitmap, unsigned int dirbitmap, - unsigned short reqcount, - unsigned short startindex, - char * path, - struct afp_file_info ** file_p); - -int afp_enumerateext2(struct afp_volume * volume, - unsigned int dirid, - unsigned int filebitmap, unsigned int dirbitmap, - unsigned short reqcount, - unsigned long startindex, - char * path, - struct afp_file_info ** file_p); - -int afp_openfork(struct afp_volume * volume, - unsigned char forktype, - unsigned int dirid, - unsigned short accessmode, - char * filename, - struct afp_file_info *fp); - -int afp_read(struct afp_volume * volume, unsigned short forkid, - uint32_t offset, - uint32_t count, struct afp_rx_buffer * rx); - -int afp_readext(struct afp_volume * volume, unsigned short forkid, - uint64_t offset, - uint64_t count, struct afp_rx_buffer * rx); - -int afp_getvolparms(struct afp_volume * volume, unsigned short bitmap); - - -int afp_createdir(struct afp_volume * volume, unsigned int dirid, const char * pathname, unsigned int *did_p); - -int afp_delete(struct afp_volume * volume, - unsigned int dirid, char * pathname); - - -int afp_createfile(struct afp_volume * volume, unsigned char flag, - unsigned int did, char * pathname); - -int afp_write(struct afp_volume * volume, unsigned short forkid, - uint32_t offset, uint32_t reqcount, - char * data, uint32_t * written); - -int afp_writeext(struct afp_volume * volume, unsigned short forkid, - uint64_t offset, uint64_t reqcount, - char * data, uint64_t * written); - -int afp_flushfork(struct afp_volume * volume, unsigned short forkid); - -int afp_closefork(struct afp_volume * volume, unsigned short forkid); -int afp_setfileparms(struct afp_volume * volume, - unsigned int dirid, const char * pathname, unsigned short bitmap, - struct afp_file_info *fp); -int afp_setfiledirparms(struct afp_volume * volume, - unsigned int dirid, const char * pathname, unsigned short bitmap, - struct afp_file_info *fp); - -int afp_setdirparms(struct afp_volume * volume, - unsigned int dirid, const char * pathname, unsigned short bitmap, - struct afp_file_info *fp); - -int afp_volclose(struct afp_volume * volume); - - -int afp_setforkparms(struct afp_volume *volume, - unsigned short forkid, unsigned short bitmap, unsigned long len); - -int afp_byterangelock(struct afp_volume * volume, - unsigned char flag, - unsigned short forkid, - uint32_t offset, - uint32_t len, uint32_t *generated_offset); - -int afp_byterangelockext(struct afp_volume * volume, - unsigned char flag, - unsigned short forkid, - uint64_t offset, - uint64_t len, uint64_t *generated_offset); - -int afp_moveandrename(struct afp_volume *volume, - unsigned int src_did, - unsigned int dst_did, - char * src_path, char * dst_path, char *new_name); - -int afp_rename(struct afp_volume * volume, - unsigned int dirid, - char * path_from, char * path_to); - -int afp_listextattr(struct afp_volume * volume, - unsigned int dirid, unsigned short bitmap, - char * pathname, struct afp_extattr_info * info); - -/* This is a currently undocumented command */ -int afp_newcommand76(struct afp_volume * volume, unsigned int dlen, char * data); - -/* For debugging */ -char * afp_get_command_name(char code); - - -#endif diff -Naur afpfs-ng-0.8.1/include/afp_protocol.h afpfs-ng-0.8.1.patch/include/afp_protocol.h --- afpfs-ng-0.8.1/include/afp_protocol.h 2008-02-18 04:33:43.000000000 +0100 +++ afpfs-ng-0.8.1.patch/include/afp_protocol.h 1970-01-01 01:00:00.000000000 +0100 @@ -1,361 +0,0 @@ - -#ifndef _AFP_PROTOCOL_H_ -#define _AFP_PROTOCOL_H_ - -#include -#include -#include -#include - -/* This file defines constants for the Apple File Protocol. - All page references are from "Apple Filing Protocol Programming" version 3.2. - except where noted. -*/ - -#define AFP_SERVER_NAME_LEN 33 -#define AFP_SERVER_NAME_UTF8_LEN 255 -#define AFP_VOLUME_NAME_LEN 33 -#define AFP_VOLUME_NAME_UTF8_LEN 33 -#define AFP_SIGNATURE_LEN 16 -#define AFP_MACHINETYPE_LEN 33 -#define AFP_LOGINMESG_LEN 200 -#define AFP_VOLPASS_LEN 8 -#define AFP_HOSTNAME_LEN 255 -/* This is actually just a guess, and only used for appletalk */ -#define AFP_ZONE_LEN 255 - -#define AFP_SERVER_ICON_LEN 256 - - -#define AFP_MAX_USERNAME_LEN 127 -#define AFP_MAX_PASSWORD_LEN 127 - - -/* This is the maximum length of any UAM string */ -#define AFP_UAM_LENGTH 24 - -/* This is the maximum length of any path description */ -#define AFP_MAX_PATH 768 - -#define AFP_VOL_FLAT 1 -#define AFP_VOL_FIXED 2 -#define AFP_VOL_VARIABLE 3 - -/* The root directory ID, p.26 */ - -#define AFP_ROOT_DID 2 - -/* Path type constants, p.249 */ - -enum { -kFPShortName = 1, -kFPLongName = 2, -kFPUTF8Name = 3 -}; - -/* fork types */ - -#define AFP_FORKTYPE_DATA 0x0 -#define AFP_FORKTYPE_RESOURCE 0x80 - -/* openfork access modes, from p.196 */ - -#define AFP_OPENFORK_ALLOWREAD 1 -#define AFP_OPENFORK_ALLOWWRITE 2 -#define AFP_OPENFORK_DENYREAD 0x10 -#define AFP_OPENFORK_DENYWRITE 0x20 - -/* Message type for getsrvmesg, p. 169*/ - -typedef enum { - AFPMESG_LOGIN = 0, - AFPMESG_SERVER = 1 -} afpmessage_t; - -/* Message bitmap for getsrvrmsg */ - -#define AFP_GETSRVRMSG_UTF8 0x2 -#define AFP_GETSRVRMSG_GETMSG 0x1 - - -/* Maximum Version length, p.17 */ -#define AFP_MAX_VERSION_LENGTH 16 - -/* Maximum length of a token, this is undocumented */ -#define AFP_TOKEN_MAX_LEN 256 - -/* The maximum size of a file for AFP 2 */ -#define AFP_MAX_AFP2_FILESIZE (4294967296) - -/* Unix privs, p.240 */ - -struct afp_unixprivs { - uint32_t uid __attribute__((__packed__)); - uint32_t gid __attribute__((__packed__)); - uint32_t permissions __attribute__((__packed__)); - uint32_t ua_permissions __attribute__((__packed__)); - -}; - - -/* AFP Volume attributes bitmap, p.241 */ - -enum { - kReadOnly = 0x01, - kHasVolumePassword = 0x02, - kSupportsFileIDs = 0x04, - kSupportsCatSearch = 0x08, - kSupportsBlankAccessPrivs = 0x10, - kSupportsUnixPrivs = 0x20, - kSupportsUTF8Names = 0x40, - kNoNetworkUserIDs = 0x80, - kDefaultPrivsFromParent = 0x100, - kNoExchangeFiles = 0x200, - kSupportsExtAttrs = 0x400, - kSupportsACLs=0x800 -}; - -/* AFP file creation constantes, p.250 */ -enum { -kFPSoftCreate = 0, -kFPHardCreate = 0x80 -}; - -/* AFP Directory attributes, taken from the protocol guide p.236 */ - -enum { - kFPAttributeBit = 0x1, - kFPParentDirIDBit = 0x2, - kFPCreateDateBit = 0x4, - kFPModDateBit = 0x8, - kFPBackupDateBit = 0x10, - kFPFinderInfoBit = 0x20, - kFPLongNameBit = 0x40, - kFPShortNameBit = 0x80, - kFPNodeIDBit = 0x100, - kFPOffspringCountBit = 0x0200, - kFPOwnerIDBit = 0x0400, - kFPGroupIDBit = 0x0800, - kFPAccessRightsBit = 0x1000, - kFPProDOSInfoBit = 0x2000, // AFP version 2.2 and earlier - kFPUTF8NameBit = 0x2000, // AFP version 3.0 and later - kFPUnixPrivsBit = 0x8000 // AFP version 3.0 and later -}; - -/* AFP File bitmap, p.238. These are the ones not in the AFP Directory - attributes map. */ - -enum { - kFPDataForkLenBit = 0x0200, - kFPRsrcForkLenBit = 0x0400, - kFPExtDataForkLenBit = 0x0800, // AFP version 3.0 and later - kFPLaunchLimitBit = 0x1000, - kFPExtRsrcForkLenBit = 0x4000, // AFP version 3.0 and later -}; - -/* AFP Extended Attributes Bitmap, p.238 */ - -enum { - kXAttrNoFollow = 0x1, - kXAttrCreate = 0x2, - kXAttrREplace=0x4 -}; - - -/* AFP function codes */ -enum AFPFunction -{ - afpByteRangeLock = 1, afpCloseVol, afpCloseDir, afpCloseFork, - afpCopyFile, afpCreateDir, afpCreateFile, - afpDelete, afpEnumerate, afpFlush, afpFlushFork, - afpGetForkParms = 14, afpGetSrvrInfo, afpGetSrvrParms, - afpGetVolParms, afpLogin, afpLoginCont, afpLogout, afpMapID, - afpMapName, afpMoveAndRename, afpOpenVol, afpOpenDir, afpOpenFork, - afpRead, afpRename, afpSetDirParms, afpSetFileParms, - afpSetForkParms, afpSetVolParms, afpWrite, afpGetFileDirParms, - afpSetFileDirParms, afpChangePassword, - afpGetUserInfo=37,afpGetSrvrMsg = 38, - afpOpenDT=48, - afpCloseDT=49, - afpGetIcon=51, afpGetIconInfo=52, - afpAddComment=56, afpRemoveComment=57, afpGetComment=58, - afpByteRangeLockExt=59, afpReadExt, afpWriteExt, - afpGetAuthMethods=62, - afp_LoginExt=63, - afpGetSessionToken=64, - afpDisconnectOldSession=65, - afpEnumerateExt=66, - afpCatSearchExt = 67, - afpEnumerateExt2 = 68, afpGetExtAttr, afpSetExtAttr, - afpRemoveExtAttr , afpListExtAttrs, - afpZzzzz = 122, - afpAddIcon=192, -}; - -/* AFP Volume bitmap. Take from 242 of the protocol guide. */ -enum { - kFPBadVolPre222Bitmap = 0xFe00, - kFPBadVolBitmap = 0xF000, - kFPVolAttributeBit = 0x1, - kFPVolSignatureBit = 0x2, - kFPVolCreateDateBit = 0x4, - kFPVolModDateBit = 0x8, - kFPVolBackupDateBit = 0x10, - kFPVolIDBit = 0x20, - kFPVolBytesFreeBit = 0x40, - kFPVolBytesTotalBit = 0x80, - kFPVolNameBit = 0x100, - kFPVolExtBytesFreeBit = 0x200, - kFPVolExtBytesTotalBit = 0x400, - kFPVolBlockSizeBit = 0x800 -}; - -/* AFP Attention Codes -- 4 bits */ -#define AFPATTN_SHUTDOWN (1 << 15) /* shutdown/disconnect */ -#define AFPATTN_CRASH (1 << 14) /* server crashed */ -#define AFPATTN_MESG (1 << 13) /* server has message */ -#define AFPATTN_NORECONNECT (1 << 12) /* don't reconnect */ -/* server notification */ -#define AFPATTN_NOTIFY (AFPATTN_MESG | AFPATTN_NORECONNECT) - -/* extended bitmap -- 12 bits. volchanged is only useful w/ a server - * notification, and time is only useful for shutdown. */ -#define AFPATTN_VOLCHANGED (1 << 0) /* volume has changed */ -#define AFPATTN_TIME(x) ((x) & 0xfff) /* time in minutes */ - -#define kFPNoErr 0 - -/* AFP result codes, p252 */ -#define kASPSessClosed -1072 -#define kFPAccessDenied -5000 -#define kFPAuthContinue -5001 -#define kFPBadUAM -5002 -#define kFPBadVersNum -5003 -#define kFPBitmapErr -5004 -#define kFPCantMove -5005 -#define kFPDenyConflict -5006 -#define kFPDirNotEmpty -5007 -#define kFPDiskFull -5008 -#define kFPEOFErr -5009 -#define kFPFileBusy -5010 -#define kFPFlatVol -5011 -#define kFPItemNotFound -5012 -#define kFPLockErr -5013 -#define kFPMiscErr -5014 -#define kFPNoMoreLocks -5015 -#define kFPNoServer -5016 -#define kFPObjectExists -5017 -#define kFPObjectNotFound -5018 -#define kFPParamErr -5019 -#define kFPRangeNotLocked -5020 -#define kFPRangeOverlap -5021 -#define kFPSessClosed -5022 -#define kFPUserNotAuth -5023 -#define kFPCallNotSupported -5024 -#define kFPObjectTypeErr -5025 -#define kFPTooManyFilesOpen -5026 -#define kFPServerGoingDown -5027 -#define kFPCantRename -5028 -#define kFPDirNotFound -5029 -#define kFPIconTypeError -5030 -#define kFPVolLocked -5031 -#define kFPObjectLocked -5032 -#define kFPContainsSharedErr -5033 -#define kFPIDNotFound -5034 -#define kFPIDExists -5035 -#define kFPDiffVolErr -5036 -#define kFPCatalogChanged -5037 -#define kFPSameObjectErr -5038 -#define kFPBadIDErr -5039 -#define kFPPwdSameErr -5040 -#define kFPPwdTooShortErr -5041 -#define kFPPwdExpiredErr -5042 -#define kFPInsideSharedErr -5043 -#define kFPInsideTrashErr -5044 -#define kFPPwdNeedsChangeErr -5045 -#define kFPPwdPolicyErr -5046 -#define kFPDiskQuotaExceeded –5047 - - - -/* These flags determine to lock or unlock in ByteRangeLock(Ext) */ - -enum { -ByteRangeLock_Lock = 0, -ByteRangeLock_Unlock = 1 -}; - -/* These flags are used in volopen and getsrvrparm replies, p.171 */ - -#define HasConfigInfo 0x1 -#define HasPassword 0x80 - -/* These are the subfunction for kFPMapID, as per p.248 */ - -enum { -kUserIDToName = 1, -kGroupIDToName = 2, -kUserIDToUTF8Name = 3, -kGroupIDToUTF8Name = 4, -kUserUUIDToUTF8Name = 5, -kGroupUUIDToUTF8Name = 6 -}; - - -/* These are the subfunction flags described in the FPMapName command, p.286. - Note that this is different than what's described on p. 186. */ - -enum { -kNameToUserID = 1, -kNameToGroupID = 2, -kUTF8NameToUserID = 3, -kUTF8NameToGroupID = 4, -kUTF8NameToUserUUID = 5, -kUTF8NameToGroupUUID = 6 -}; - -/* These are bits for FPGetUserInfo, p.173. */ -#define kFPGetUserInfo_USER_ID 1 -#define kFPGetUserInfo_PRI_GROUPID 2 - -/* Flags for the replies of GetSrvrInfo and DSI GetStatus, p.240 */ - -enum { - kSupportsCopyfile = 0x01, - kSupportsChgPwd = 0x02, - kDontAllowSavePwd = 0x04, - kSupportsSrvrMsg = 0x08, - kSrvrSig = 0x10, - kSupportsTCP = 0x20, - kSupportsSrvrNotify = 0x40, - kSupportsReconnect = 0x80, - kSupportsDirServices = 0x100, - kSupportsUTF8SrvrName = 0x200, - kSupportsUUIDs = 0x400, - kSupportsSuperClient = 0x8000 -}; - - -/* p.247 */ - -enum { - kLoginWithoutID = 0, - kLoginWithID = 1, - kReconnWithID = 2, - kLoginWithTimeAndID = 3, - kReconnWithTimeAndID = 4, - kRecon1Login = 5, - kRecon1ReconnectLogin = 6, - kRecon1Refresh = 7, kGetKerberosSessionKey = 8 -}; - - -#define AFP_CHMOD_ALLOWED_BITS_22 \ - (S_IRUSR |S_IWUSR | S_IRGRP | S_IWGRP |S_IROTH | S_IWOTH | S_IFREG ) - - -#endif - - - - diff -Naur afpfs-ng-0.8.1/include/codepage.h afpfs-ng-0.8.1.patch/include/codepage.h --- afpfs-ng-0.8.1/include/codepage.h 2007-09-23 16:21:30.000000000 +0200 +++ afpfs-ng-0.8.1.patch/include/codepage.h 1970-01-01 01:00:00.000000000 +0100 @@ -1,11 +0,0 @@ -#ifndef __CODE_PAGE_H_ -#define __CODE_PAGE_H_ -int convert_utf8dec_to_utf8pre(const char *src, int src_len, - char * dest, int dest_len); -int convert_utf8pre_to_utf8dec(const char * src, int src_len, - char * dest, int dest_len); -int convert_path_to_unix(char encoding, char * dest, - char * src, int dest_len); -int convert_path_to_afp(char encoding, char * dest, - char * src, int dest_len); -#endif diff -Naur afpfs-ng-0.8.1/include/dsi.h afpfs-ng-0.8.1.patch/include/dsi.h --- afpfs-ng-0.8.1/include/dsi.h 2008-02-18 04:33:24.000000000 +0100 +++ afpfs-ng-0.8.1.patch/include/dsi.h 1970-01-01 01:00:00.000000000 +0100 @@ -1,33 +0,0 @@ - -#ifndef __DSI_H_ -#define __DSI_H_ - -#include "afp.h" - -struct dsi_request -{ - unsigned short requestid; - unsigned char subcommand; - void * other; - unsigned char wait; - pthread_cond_t condition_cond; - struct dsi_request * next; - int return_code; -}; - -int dsi_receive(struct afp_server * server, void * data, int size); -int dsi_getstatus(struct afp_server * server); - -int dsi_opensession(struct afp_server *server); - -int dsi_send(struct afp_server *server, char * msg, int size,int wait,unsigned char subcommand, void ** other); -struct dsi_session * dsi_create(struct afp_server *server); -int dsi_restart(struct afp_server *server); -int dsi_recv(struct afp_server * server); - -#define DSI_BLOCK_TIMEOUT -1 -#define DSI_DONT_WAIT 0 -#define DSI_DEFAULT_TIMEOUT 5 - - -#endif diff -Naur afpfs-ng-0.8.1/include/libafpclient.h afpfs-ng-0.8.1.patch/include/libafpclient.h --- afpfs-ng-0.8.1/include/libafpclient.h 2008-01-30 05:37:59.000000000 +0100 +++ afpfs-ng-0.8.1.patch/include/libafpclient.h 1970-01-01 01:00:00.000000000 +0100 @@ -1,50 +0,0 @@ - -#ifndef __CLIENT_H_ -#define __CLIENT_H_ - -#include -#include - -#define MAX_CLIENT_RESPONSE 2048 - - -enum loglevels { - AFPFSD, -}; - -struct afp_server; -struct afp_volume; - -struct libafpclient { - int (*unmount_volume) (struct afp_volume * volume); - void (*log_for_client)(void * priv, - enum loglevels loglevel, int logtype, const char *message); - void (*forced_ending_hook)(void); - int (*scan_extra_fds)(int command_fd,fd_set *set, int * max_fd); - void (*loop_started)(void); -} ; - -extern struct libafpclient * libafpclient; - -void libafpclient_register(struct libafpclient * tmpclient); - - -void signal_main_thread(void); - -/* These are logging functions */ - -#define MAXLOGSIZE 2048 - -#define LOG_METHOD_SYSLOG 1 -#define LOG_METHOD_STDOUT 2 - -void set_log_method(int m); - - -void log_for_client(void * priv, - enum loglevels loglevel, int logtype, char * message,...); - -void stdout_log_for_client(void * priv, - enum loglevels loglevel, int logtype, const char *message); - -#endif diff -Naur afpfs-ng-0.8.1/include/Makefile.am afpfs-ng-0.8.1.patch/include/Makefile.am --- afpfs-ng-0.8.1/include/Makefile.am 1970-01-01 01:00:00.000000000 +0100 +++ afpfs-ng-0.8.1.patch/include/Makefile.am 2011-09-10 12:13:50.126124692 +0200 @@ -0,0 +1,3 @@ +## Process this file with automake to produce Makefile.in + +SUBDIRS = afpfs-ng diff -Naur afpfs-ng-0.8.1/include/map_def.h afpfs-ng-0.8.1.patch/include/map_def.h --- afpfs-ng-0.8.1/include/map_def.h 2008-01-17 05:55:46.000000000 +0100 +++ afpfs-ng-0.8.1.patch/include/map_def.h 1970-01-01 01:00:00.000000000 +0100 @@ -1,15 +0,0 @@ -#ifndef __MAP_H_ -#define __MAP_H_ - -#include "afp.h" - -#define AFP_MAPPING_UNKNOWN 0 -#define AFP_MAPPING_COMMON 1 -#define AFP_MAPPING_LOGINIDS 2 -#define AFP_MAPPING_NAME 3 - -unsigned int map_string_to_num(char * name); -char * get_mapping_name(struct afp_volume * volume); - - -#endif diff -Naur afpfs-ng-0.8.1/include/midlevel.h afpfs-ng-0.8.1.patch/include/midlevel.h --- afpfs-ng-0.8.1/include/midlevel.h 2007-12-24 20:39:25.000000000 +0100 +++ afpfs-ng-0.8.1.patch/include/midlevel.h 1970-01-01 01:00:00.000000000 +0100 @@ -1,64 +0,0 @@ -#ifndef __MIDLEVEL_H_ -#define __MIDLEVEL_H_ - -#include -#include "afp.h" - -int ml_open(struct afp_volume * volume, const char *path, int flags, - struct afp_file_info **newfp); - -int ml_creat(struct afp_volume * volume, const char *path,mode_t mode); - -int ml_readdir(struct afp_volume * volume, - const char *path, - struct afp_file_info **base); - -int ml_read(struct afp_volume * volume, const char *path, - char *buf, size_t size, off_t offset, - struct afp_file_info *fp, int * eof); - -int ml_chmod(struct afp_volume * vol, const char * path, mode_t mode); - -int ml_unlink(struct afp_volume * vol, const char *path); - -int ml_mkdir(struct afp_volume * vol, const char * path, mode_t mode); - -int ml_close(struct afp_volume * volume, const char * path, - struct afp_file_info * fp); - -int ml_getattr(struct afp_volume * volume, const char *path, - struct stat *stbuf); - -int ml_write(struct afp_volume * volume, const char * path, - const char *data, size_t size, off_t offset, - struct afp_file_info * fp, uid_t uid, - gid_t gid); - -int ml_readlink(struct afp_volume * vol, const char * path, - char *buf, size_t size); - -int ml_rmdir(struct afp_volume * vol, const char *path); - -int ml_chown(struct afp_volume * vol, const char * path, - uid_t uid, gid_t gid); - -int ml_truncate(struct afp_volume * vol, const char * path, off_t offset); - -int ml_utime(struct afp_volume * vol, const char * path, - struct utimbuf * timebuf); - -int ml_symlink(struct afp_volume *vol, const char * path1, const char * path2); - -int ml_rename(struct afp_volume * vol, - const char * path_from, const char * path_to); - -int ml_statfs(struct afp_volume * vol, const char *path, struct statvfs *stat); - -void afp_ml_filebase_free(struct afp_file_info **filebase); - -int ml_passwd(struct afp_server *server, - char * username, char * oldpasswd, char * newpasswd); - - - -#endif diff -Naur afpfs-ng-0.8.1/include/uams_def.h afpfs-ng-0.8.1.patch/include/uams_def.h --- afpfs-ng-0.8.1/include/uams_def.h 2007-09-07 15:10:51.000000000 +0200 +++ afpfs-ng-0.8.1.patch/include/uams_def.h 1970-01-01 01:00:00.000000000 +0100 @@ -1,16 +0,0 @@ -#ifndef __UAM_DEFS_H_ -#define __UAM_DEFS_H_ - -#define UAM_NOUSERAUTHENT 0x1 -#define UAM_CLEARTXTPASSWRD 0x2 -#define UAM_RANDNUMEXCHANGE 0x4 -#define UAM_2WAYRANDNUM 0x8 -#define UAM_DHCAST128 0x10 -#define UAM_CLIENTKRB 0x20 -#define UAM_DHX2 0x40 -#define UAM_RECON1 0x80 - -int uam_string_to_bitmap(char * name); -char * uam_bitmap_to_string(unsigned int bitmap); - -#endif diff -Naur afpfs-ng-0.8.1/include/utils.h afpfs-ng-0.8.1.patch/include/utils.h --- afpfs-ng-0.8.1/include/utils.h 2008-02-18 04:33:58.000000000 +0100 +++ afpfs-ng-0.8.1.patch/include/utils.h 1970-01-01 01:00:00.000000000 +0100 @@ -1,43 +0,0 @@ -#ifndef __UTILS_H_ -#define __UTILS_H_ -#include - -#include "afp.h" - -#if BYTE_ORDER == BIG_ENDIAN -#define hton64(x) (x) -#define ntoh64(x) (x) -#else /* BYTE_ORDER == BIG_ENDIAN */ -#define hton64(x) ((u_int64_t) (htonl(((x) >> 32) & 0xffffffffLL)) | \ - (u_int64_t) ((htonl(x) & 0xffffffffLL) << 32)) -#define ntoh64(x) (hton64(x)) -#endif /* BYTE_ORDER == BIG_ENDIAN */ - -#define min(a,b) (((a)<(b)) ? (a) : (b)) -#define max(a,b) (((a)>(b)) ? (a) : (b)) - - - -unsigned char unixpath_to_afppath( - struct afp_server * server, - char * buf); - -unsigned char sizeof_path_header(struct afp_server * server); - - - -unsigned char copy_from_pascal(char *dest, char *pascal,unsigned int max_len) ; -unsigned short copy_from_pascal_two(char *dest, char *pascal,unsigned int max_len); - -unsigned char copy_to_pascal(char *dest, const char *src); -unsigned short copy_to_pascal_two(char *dest, const char *src); - -void copy_path(struct afp_server * server, char * dest, const char * pathname, unsigned char len); - - -char * create_path(struct afp_server * server, char * pathname, unsigned short * len); - - -int invalid_filename(struct afp_server * server, const char * filename); - -#endif diff -Naur afpfs-ng-0.8.1/lib/afp.c afpfs-ng-0.8.1.patch/lib/afp.c --- afpfs-ng-0.8.1/lib/afp.c 2008-03-08 03:44:16.000000000 +0100 +++ afpfs-ng-0.8.1.patch/lib/afp.c 2011-09-10 12:13:50.131124759 +0200 @@ -9,7 +9,7 @@ -#include "afp.h" +#include "afpfs-ng/afp.h" #include #include @@ -21,17 +21,17 @@ #include #include -#include "afp_protocol.h" -#include "libafpclient.h" +#include "afpfs-ng/afp_protocol.h" +#include "afpfs-ng/libafpclient.h" #include "server.h" -#include "dsi.h" +#include "afpfs-ng/dsi.h" #include "dsi_protocol.h" -#include "utils.h" +#include "afpfs-ng/utils.h" #include "afp_replies.h" #include "afp_internal.h" #include "did.h" #include "forklist.h" -#include "codepage.h" +#include "afpfs-ng/codepage.h" struct afp_versions afp_versions[] = { { "AFPVersion 1.1", 11 }, diff -Naur afpfs-ng-0.8.1/lib/afp_internal.h afpfs-ng-0.8.1.patch/lib/afp_internal.h --- afpfs-ng-0.8.1/lib/afp_internal.h 2007-11-09 05:27:20.000000000 +0100 +++ afpfs-ng-0.8.1.patch/lib/afp_internal.h 2011-09-10 12:13:50.132124772 +0200 @@ -1,7 +1,7 @@ #ifndef _AFP_INTERNAL_H_ #define _AFP_INTERNAL_H_ -#include "afp.h" +#include "afpfs-ng/afp.h" extern struct afp_versions afp_versions[]; diff -Naur afpfs-ng-0.8.1/lib/afp_url.c afpfs-ng-0.8.1.patch/lib/afp_url.c --- afpfs-ng-0.8.1/lib/afp_url.c 2008-03-04 21:16:49.000000000 +0100 +++ afpfs-ng-0.8.1.patch/lib/afp_url.c 2011-09-10 12:13:50.132124772 +0200 @@ -3,7 +3,7 @@ #include #include #include -#include "afp.h" +#include "afpfs-ng/afp.h" void afp_default_url(struct afp_url *url) { diff -Naur afpfs-ng-0.8.1/lib/client.c afpfs-ng-0.8.1.patch/lib/client.c --- afpfs-ng-0.8.1/lib/client.c 2008-02-18 04:36:30.000000000 +0100 +++ afpfs-ng-0.8.1.patch/lib/client.c 2011-09-10 12:13:50.132124772 +0200 @@ -1,5 +1,5 @@ -#include -#include +#include +#include struct libafpclient * libafpclient = NULL; diff -Naur afpfs-ng-0.8.1/lib/codepage.c afpfs-ng-0.8.1.patch/lib/codepage.c --- afpfs-ng-0.8.1/lib/codepage.c 2008-02-18 04:36:54.000000000 +0100 +++ afpfs-ng-0.8.1.patch/lib/codepage.c 2011-09-10 12:13:50.133124786 +0200 @@ -14,8 +14,8 @@ #include #include -#include "afp_protocol.h" -#include "utils.h" +#include "afpfs-ng/afp_protocol.h" +#include "afpfs-ng/utils.h" #include "unicode.h" int convert_utf8dec_to_utf8pre(const char *src, int src_len, diff -Naur afpfs-ng-0.8.1/lib/connect.c afpfs-ng-0.8.1.patch/lib/connect.c --- afpfs-ng-0.8.1/lib/connect.c 2008-02-18 04:38:59.000000000 +0100 +++ afpfs-ng-0.8.1.patch/lib/connect.c 2011-09-10 12:13:50.133124786 +0200 @@ -10,13 +10,13 @@ #include #include -#include "afp.h" -#include "dsi.h" -#include "utils.h" -#include "uams_def.h" -#include "codepage.h" +#include "afpfs-ng/afp.h" +#include "afpfs-ng/dsi.h" +#include "afpfs-ng/utils.h" +#include "afpfs-ng/uams_def.h" +#include "afpfs-ng/codepage.h" #include "users.h" -#include "libafpclient.h" +#include "afpfs-ng/libafpclient.h" #include "server.h" diff -Naur afpfs-ng-0.8.1/lib/did.c afpfs-ng-0.8.1.patch/lib/did.c --- afpfs-ng-0.8.1/lib/did.c 2008-02-18 04:39:17.000000000 +0100 +++ afpfs-ng-0.8.1.patch/lib/did.c 2011-09-10 12:13:50.133124786 +0200 @@ -9,8 +9,8 @@ #include #include -#include "afp.h" -#include "afp_protocol.h" +#include "afpfs-ng/afp.h" +#include "afpfs-ng/afp_protocol.h" #undef DID_CACHE_DISABLE diff -Naur afpfs-ng-0.8.1/lib/dsi.c afpfs-ng-0.8.1.patch/lib/dsi.c --- afpfs-ng-0.8.1/lib/dsi.c 2008-02-18 04:53:03.000000000 +0100 +++ afpfs-ng-0.8.1.patch/lib/dsi.c 2011-09-10 12:13:50.134124800 +0200 @@ -19,12 +19,12 @@ #include #include -#include "utils.h" -#include "dsi.h" -#include "afp.h" -#include "uams_def.h" +#include "afpfs-ng/utils.h" +#include "afpfs-ng/dsi.h" +#include "afpfs-ng/afp.h" +#include "afpfs-ng/uams_def.h" #include "dsi_protocol.h" -#include "libafpclient.h" +#include "afpfs-ng/libafpclient.h" #include "afp_internal.h" #include "afp_replies.h" diff -Naur afpfs-ng-0.8.1/lib/forklist.c afpfs-ng-0.8.1.patch/lib/forklist.c --- afpfs-ng-0.8.1/lib/forklist.c 2008-01-17 05:49:16.000000000 +0100 +++ afpfs-ng-0.8.1.patch/lib/forklist.c 2011-09-10 12:13:50.135124814 +0200 @@ -10,7 +10,7 @@ */ -#include "afp.h" +#include "afpfs-ng/afp.h" #include #include diff -Naur afpfs-ng-0.8.1/lib/log.c afpfs-ng-0.8.1.patch/lib/log.c --- afpfs-ng-0.8.1/lib/log.c 2008-01-30 05:37:58.000000000 +0100 +++ afpfs-ng-0.8.1.patch/lib/log.c 2011-09-10 12:13:50.135124814 +0200 @@ -3,7 +3,7 @@ #include #include #include -#include "libafpclient.h" +#include "afpfs-ng/libafpclient.h" void log_for_client(void * priv, enum loglevels loglevel, int logtype, char *format, ...) { diff -Naur afpfs-ng-0.8.1/lib/loop.c afpfs-ng-0.8.1.patch/lib/loop.c --- afpfs-ng-0.8.1/lib/loop.c 2008-02-18 04:40:11.000000000 +0100 +++ afpfs-ng-0.8.1.patch/lib/loop.c 2011-09-10 12:13:50.135124814 +0200 @@ -16,9 +16,9 @@ #include #include -#include "afp.h" -#include "dsi.h" -#include "utils.h" +#include "afpfs-ng/afp.h" +#include "afpfs-ng/dsi.h" +#include "afpfs-ng/utils.h" #define SIGNAL_TO_USE SIGUSR2 diff -Naur afpfs-ng-0.8.1/lib/lowlevel.c afpfs-ng-0.8.1.patch/lib/lowlevel.c --- afpfs-ng-0.8.1/lib/lowlevel.c 2008-02-20 02:33:17.000000000 +0100 +++ afpfs-ng-0.8.1.patch/lib/lowlevel.c 2011-09-10 12:13:50.136124828 +0200 @@ -19,10 +19,10 @@ #else #include #endif -#include "afp.h" -#include "afp_protocol.h" -#include "codepage.h" -#include "utils.h" +#include "afpfs-ng/afp.h" +#include "afpfs-ng/afp_protocol.h" +#include "afpfs-ng/codepage.h" +#include "afpfs-ng/utils.h" #include "did.h" #include "users.h" diff -Naur afpfs-ng-0.8.1/lib/map_def.c afpfs-ng-0.8.1.patch/lib/map_def.c --- afpfs-ng-0.8.1/lib/map_def.c 2007-09-07 15:10:59.000000000 +0200 +++ afpfs-ng-0.8.1.patch/lib/map_def.c 2011-09-10 12:13:50.136124828 +0200 @@ -1,6 +1,6 @@ #include -#include "afp.h" -#include "map_def.h" +#include "afpfs-ng/afp.h" +#include "afpfs-ng/map_def.h" static char *afp_map_strings[] = { "Unknown", diff -Naur afpfs-ng-0.8.1/lib/meta.c afpfs-ng-0.8.1.patch/lib/meta.c --- afpfs-ng-0.8.1/lib/meta.c 2008-01-04 04:52:44.000000000 +0100 +++ afpfs-ng-0.8.1.patch/lib/meta.c 2011-09-10 12:13:50.137124841 +0200 @@ -17,10 +17,10 @@ #include #include -#include "afp.h" -#include "dsi.h" -#include "afp_protocol.h" -#include "utils.h" +#include "afpfs-ng/afp.h" +#include "afpfs-ng/dsi.h" +#include "afpfs-ng/afp_protocol.h" +#include "afpfs-ng/utils.h" int afp_meta_getattr(const char *path, struct stat *stbuf) diff -Naur afpfs-ng-0.8.1/lib/midlevel.c afpfs-ng-0.8.1.patch/lib/midlevel.c --- afpfs-ng-0.8.1/lib/midlevel.c 2008-03-08 17:08:18.000000000 +0100 +++ afpfs-ng-0.8.1.patch/lib/midlevel.c 2011-09-10 12:13:50.160125150 +0200 @@ -10,7 +10,7 @@ */ -#include "afp.h" +#include "afpfs-ng/afp.h" #include #include @@ -28,9 +28,9 @@ #include "users.h" #include "did.h" #include "resource.h" -#include "utils.h" -#include "codepage.h" -#include "midlevel.h" +#include "afpfs-ng/utils.h" +#include "afpfs-ng/codepage.h" +#include "afpfs-ng/midlevel.h" #include "afp_internal.h" #include "forklist.h" #include "uams.h" diff -Naur afpfs-ng-0.8.1/lib/proto_attr.c afpfs-ng-0.8.1.patch/lib/proto_attr.c --- afpfs-ng-0.8.1/lib/proto_attr.c 2008-01-30 05:37:58.000000000 +0100 +++ afpfs-ng-0.8.1.patch/lib/proto_attr.c 2011-09-10 12:13:50.168125257 +0200 @@ -7,10 +7,10 @@ #include #include -#include "dsi.h" -#include "afp.h" -#include "utils.h" -#include "afp_protocol.h" +#include "afpfs-ng/dsi.h" +#include "afpfs-ng/afp.h" +#include "afpfs-ng/utils.h" +#include "afpfs-ng/afp_protocol.h" #include "dsi_protocol.h" /* This is a new command, function 76. There are currently no docs, so this diff -Naur afpfs-ng-0.8.1/lib/proto_desktop.c afpfs-ng-0.8.1.patch/lib/proto_desktop.c --- afpfs-ng-0.8.1/lib/proto_desktop.c 2008-02-18 04:44:11.000000000 +0100 +++ afpfs-ng-0.8.1.patch/lib/proto_desktop.c 2011-09-10 12:13:50.168125257 +0200 @@ -9,10 +9,10 @@ #include #include -#include "dsi.h" -#include "afp.h" -#include "utils.h" -#include "afp_protocol.h" +#include "afpfs-ng/dsi.h" +#include "afpfs-ng/afp.h" +#include "afpfs-ng/utils.h" +#include "afpfs-ng/afp_protocol.h" #include "dsi_protocol.h" /* closedt, addicon, geticoninfo, addappl, removeappl */ diff -Naur afpfs-ng-0.8.1/lib/proto_directory.c afpfs-ng-0.8.1.patch/lib/proto_directory.c --- afpfs-ng-0.8.1/lib/proto_directory.c 2008-02-19 03:39:29.000000000 +0100 +++ afpfs-ng-0.8.1.patch/lib/proto_directory.c 2011-09-10 12:13:50.168125257 +0200 @@ -9,10 +9,10 @@ #include #include -#include "dsi.h" -#include "afp.h" -#include "utils.h" -#include "afp_protocol.h" +#include "afpfs-ng/dsi.h" +#include "afpfs-ng/afp.h" +#include "afpfs-ng/utils.h" +#include "afpfs-ng/afp_protocol.h" #include "dsi_protocol.h" #include "afp_replies.h" diff -Naur afpfs-ng-0.8.1/lib/proto_files.c afpfs-ng-0.8.1.patch/lib/proto_files.c --- afpfs-ng-0.8.1/lib/proto_files.c 2008-02-18 04:46:18.000000000 +0100 +++ afpfs-ng-0.8.1.patch/lib/proto_files.c 2011-09-10 12:13:50.169125270 +0200 @@ -8,11 +8,11 @@ #include #include -#include "dsi.h" -#include "afp.h" -#include "utils.h" +#include "afpfs-ng/dsi.h" +#include "afpfs-ng/afp.h" +#include "afpfs-ng/utils.h" #include "dsi_protocol.h" -#include "afp_protocol.h" +#include "afpfs-ng/afp_protocol.h" #include "afp_internal.h" /* afp_setfileparms, afp_setdirparms and afpsetfiledirparms are all remarkably diff -Naur afpfs-ng-0.8.1/lib/proto_fork.c afpfs-ng-0.8.1.patch/lib/proto_fork.c --- afpfs-ng-0.8.1/lib/proto_fork.c 2008-01-30 05:37:58.000000000 +0100 +++ afpfs-ng-0.8.1.patch/lib/proto_fork.c 2011-09-10 12:13:50.169125270 +0200 @@ -9,11 +9,11 @@ #include #include -#include "dsi.h" -#include "afp.h" -#include "utils.h" +#include "afpfs-ng/dsi.h" +#include "afpfs-ng/afp.h" +#include "afpfs-ng/utils.h" #include "dsi_protocol.h" -#include "afp_protocol.h" +#include "afpfs-ng/afp_protocol.h" int afp_setforkparms(struct afp_volume * volume, unsigned short forkid, unsigned short bitmap, unsigned long len) diff -Naur afpfs-ng-0.8.1/lib/proto_login.c afpfs-ng-0.8.1.patch/lib/proto_login.c --- afpfs-ng-0.8.1/lib/proto_login.c 2008-01-30 05:37:59.000000000 +0100 +++ afpfs-ng-0.8.1.patch/lib/proto_login.c 2011-09-10 12:13:50.169125270 +0200 @@ -10,10 +10,10 @@ #include #include -#include "dsi.h" +#include "afpfs-ng/dsi.h" #include "dsi_protocol.h" -#include "afp.h" -#include "utils.h" +#include "afpfs-ng/afp.h" +#include "afpfs-ng/utils.h" #include "afp_internal.h" diff -Naur afpfs-ng-0.8.1/lib/proto_map.c afpfs-ng-0.8.1.patch/lib/proto_map.c --- afpfs-ng-0.8.1/lib/proto_map.c 2008-01-30 05:37:59.000000000 +0100 +++ afpfs-ng-0.8.1.patch/lib/proto_map.c 2011-09-10 12:13:50.170125283 +0200 @@ -9,11 +9,11 @@ #include #include -#include "dsi.h" -#include "afp.h" -#include "utils.h" +#include "afpfs-ng/dsi.h" +#include "afpfs-ng/afp.h" +#include "afpfs-ng/utils.h" #include "dsi_protocol.h" -#include "afp_protocol.h" +#include "afpfs-ng/afp_protocol.h" /* This is used to pass the return values back from afp_getuserinfo_reply() */ struct uidgid { diff -Naur afpfs-ng-0.8.1/lib/proto_replyblock.c afpfs-ng-0.8.1.patch/lib/proto_replyblock.c --- afpfs-ng-0.8.1/lib/proto_replyblock.c 2008-02-18 04:46:19.000000000 +0100 +++ afpfs-ng-0.8.1.patch/lib/proto_replyblock.c 2011-09-10 12:13:50.170125283 +0200 @@ -6,9 +6,9 @@ */ #include -#include "dsi.h" -#include "afp.h" -#include "utils.h" +#include "afpfs-ng/dsi.h" +#include "afpfs-ng/afp.h" +#include "afpfs-ng/utils.h" #include "afp_internal.h" diff -Naur afpfs-ng-0.8.1/lib/proto_server.c afpfs-ng-0.8.1.patch/lib/proto_server.c --- afpfs-ng-0.8.1/lib/proto_server.c 2008-02-19 02:56:21.000000000 +0100 +++ afpfs-ng-0.8.1.patch/lib/proto_server.c 2011-09-10 12:13:50.170125283 +0200 @@ -7,12 +7,12 @@ */ #include #include -#include "dsi.h" -#include "afp.h" -#include "utils.h" +#include "afpfs-ng/dsi.h" +#include "afpfs-ng/afp.h" +#include "afpfs-ng/utils.h" #include "dsi_protocol.h" -#include "afp_protocol.h" -#include "codepage.h" +#include "afpfs-ng/afp_protocol.h" +#include "afpfs-ng/codepage.h" #include "afp_internal.h" int afp_getsrvrparms(struct afp_server *server) diff -Naur afpfs-ng-0.8.1/lib/proto_session.c afpfs-ng-0.8.1.patch/lib/proto_session.c --- afpfs-ng-0.8.1/lib/proto_session.c 2008-02-18 04:46:19.000000000 +0100 +++ afpfs-ng-0.8.1.patch/lib/proto_session.c 2011-09-10 12:13:50.170125283 +0200 @@ -8,10 +8,10 @@ */ #include #include -#include "dsi.h" +#include "afpfs-ng/dsi.h" #include "dsi_protocol.h" -#include "afp.h" -#include "utils.h" +#include "afpfs-ng/afp.h" +#include "afpfs-ng/utils.h" int afp_getsessiontoken(struct afp_server * server, int type, unsigned int timestamp, struct afp_token *outgoing_token, diff -Naur afpfs-ng-0.8.1/lib/proto_volume.c afpfs-ng-0.8.1.patch/lib/proto_volume.c --- afpfs-ng-0.8.1/lib/proto_volume.c 2008-02-18 04:47:48.000000000 +0100 +++ afpfs-ng-0.8.1.patch/lib/proto_volume.c 2011-09-10 12:13:50.171125296 +0200 @@ -8,13 +8,13 @@ #include #include -#include "dsi.h" -#include "afp.h" -#include "utils.h" +#include "afpfs-ng/dsi.h" +#include "afpfs-ng/afp.h" +#include "afpfs-ng/utils.h" #include "dsi_protocol.h" -#include "afp_protocol.h" +#include "afpfs-ng/afp_protocol.h" #include "afp_internal.h" -#include "codepage.h" +#include "afpfs-ng/codepage.h" static int parse_volbitmap_reply(struct afp_server * server, struct afp_volume * tmpvol, diff -Naur afpfs-ng-0.8.1/lib/resource.c afpfs-ng-0.8.1.patch/lib/resource.c --- afpfs-ng-0.8.1/lib/resource.c 2008-02-18 04:46:56.000000000 +0100 +++ afpfs-ng-0.8.1.patch/lib/resource.c 2011-09-10 12:13:50.171125296 +0200 @@ -3,11 +3,11 @@ #include #include #include -#include "afp.h" +#include "afpfs-ng/afp.h" #include "resource.h" #include "lowlevel.h" #include "did.h" -#include "midlevel.h" +#include "afpfs-ng/midlevel.h" #define appledouble ".AppleDouble" #define finderinfo_string ".finderinfo" diff -Naur afpfs-ng-0.8.1/lib/server.c afpfs-ng-0.8.1.patch/lib/server.c --- afpfs-ng-0.8.1/lib/server.c 2008-02-19 02:56:21.000000000 +0100 +++ afpfs-ng-0.8.1.patch/lib/server.c 2011-09-10 12:13:50.172125310 +0200 @@ -8,15 +8,15 @@ #include #include -#include "afp.h" -#include "dsi.h" -#include "utils.h" -#include "uams_def.h" -#include "codepage.h" +#include "afpfs-ng/afp.h" +#include "afpfs-ng/dsi.h" +#include "afpfs-ng/utils.h" +#include "afpfs-ng/uams_def.h" +#include "afpfs-ng/codepage.h" #include "users.h" -#include "libafpclient.h" +#include "afpfs-ng/libafpclient.h" #include "afp_internal.h" -#include "dsi.h" +#include "afpfs-ng/dsi.h" struct afp_server * afp_server_complete_connection( diff -Naur afpfs-ng-0.8.1/lib/status.c afpfs-ng-0.8.1.patch/lib/status.c --- afpfs-ng-0.8.1/lib/status.c 2008-03-08 17:08:38.000000000 +0100 +++ afpfs-ng-0.8.1.patch/lib/status.c 2011-09-10 12:13:50.172125310 +0200 @@ -1,8 +1,8 @@ #include #include -#include "map_def.h" -#include "dsi.h" -#include "afp.h" +#include "afpfs-ng/map_def.h" +#include "afpfs-ng/dsi.h" +#include "afpfs-ng/afp.h" int afp_status_header(char * text, int * len) { diff -Naur afpfs-ng-0.8.1/lib/uams.c afpfs-ng-0.8.1.patch/lib/uams.c --- afpfs-ng-0.8.1/lib/uams.c 2008-01-04 04:52:44.000000000 +0100 +++ afpfs-ng-0.8.1.patch/lib/uams.c 2011-09-10 12:13:50.173125324 +0200 @@ -8,10 +8,10 @@ #include #include -#include "dsi.h" -#include "afp.h" -#include "utils.h" -#include "uams_def.h" +#include "afpfs-ng/dsi.h" +#include "afpfs-ng/afp.h" +#include "afpfs-ng/utils.h" +#include "afpfs-ng/uams_def.h" #include "config.h" #ifdef HAVE_LIBGCRYPT diff -Naur afpfs-ng-0.8.1/lib/users.c afpfs-ng-0.8.1.patch/lib/users.c --- afpfs-ng-0.8.1/lib/users.c 2008-02-18 04:48:56.000000000 +0100 +++ afpfs-ng-0.8.1.patch/lib/users.c 2011-09-10 12:13:50.174125338 +0200 @@ -3,8 +3,8 @@ #include #include -#include "afp.h" -#include "map_def.h" +#include "afpfs-ng/afp.h" +#include "afpfs-ng/map_def.h" /* How mapping works * diff -Naur afpfs-ng-0.8.1/lib/utils.c afpfs-ng-0.8.1.patch/lib/utils.c --- afpfs-ng-0.8.1/lib/utils.c 2008-02-18 04:53:37.000000000 +0100 +++ afpfs-ng-0.8.1.patch/lib/utils.c 2011-09-10 12:13:50.174125338 +0200 @@ -8,10 +8,10 @@ #include #include #include -#include "afp.h" -#include "utils.h" +#include "afpfs-ng/afp.h" +#include "afpfs-ng/utils.h" #include "afp_internal.h" -#include "afp_protocol.h" +#include "afpfs-ng/afp_protocol.h" struct afp_path_header_long { unsigned char type; diff -Naur afpfs-ng-0.8.1/Makefile.am afpfs-ng-0.8.1.patch/Makefile.am --- afpfs-ng-0.8.1/Makefile.am 2008-02-18 04:24:14.000000000 +0100 +++ afpfs-ng-0.8.1.patch/Makefile.am 2011-09-10 12:13:50.176125365 +0200 @@ -1,5 +1,5 @@ if HAVE_LIBFUSE -SUBDIRS = lib fuse cmdline docs +SUBDIRS = lib fuse cmdline include docs else -SUBDIRS = lib cmdline docs +SUBDIRS = lib cmdline include docs endif