1/* 2 * Copyright (c) 1990,1994 Regents of The University of Michigan. 3 * All Rights Reserved. See COPYRIGHT. 4 */ 5 6#ifndef ATALK_VOLUME_H 7#define ATALK_VOLUME_H 1 8 9#include <stdint.h> 10#include <sys/cdefs.h> 11#include <sys/types.h> 12// #include <netatalk/endian.h> 13 14#include <atalk/unicode.h> 15#include <atalk/cnid.h> 16#include <atalk/hash.h> 17#include <atalk/vfs.h> 18 19#define AFPVOL_U8MNAMELEN 255 /* AFP3 sepc */ 20#define AFPVOL_MACNAMELEN 27 /* AFP2 spec */ 21 22typedef uint64_t VolSpace; 23 24struct vol { 25 struct vol *v_next; 26 u_int16_t v_vid; 27 int v_flags; 28 char *v_path; 29 struct dir *v_root; 30 time_t v_mtime; 31 32 charset_t v_volcharset; 33 charset_t v_maccharset; 34 u_int16_t v_mtou_flags; /* flags for convert_charset in mtoupath */ 35 u_int16_t v_utom_flags; 36 long v_kTextEncoding; /* mac charset encoding in network order 37 * FIXME: should be a u_int32_t ? */ 38 size_t max_filename; 39 char *v_veto; 40 int v_adouble; /* adouble format: v1, v2, sfm ... */ 41 int v_ad_options; /* adouble option NODEV, NOCACHE, etc.. */ 42 char *(*ad_path)(const char *, int); 43 struct _cnid_db *v_cdb; 44 char v_stamp[ADEDLEN_PRIVSYN]; 45 VolSpace v_limitsize; /* Size limit, if any, in MiB */ 46 mode_t v_umask; 47 mode_t v_perm; /* default permission value OR with requested perm*/ 48 mode_t v_dperm; /* default directories permission value OR with requested perm*/ 49 mode_t v_fperm; /* default files permission value OR with requested perm*/ 50 ucs2_t *v_u8mname; /* converted to utf8-mac in ucs2 */ 51 ucs2_t *v_macname; /* mangled to legacy longname in ucs2 */ 52 ucs2_t *v_name; /* either v_u8mname or v_macname */ 53 54 /* get/set volparams */ 55 time_t v_ctime; /* volume creation date, not unix ctime */ 56 dev_t v_dev; /* Unix volume device, Set but not used */ 57 58 /* adouble VFS indirection */ 59 struct vfs_ops *vfs; /* pointer to vfs_master_funcs for chaining */ 60 const struct vfs_ops *vfs_modules[4]; 61 int v_vfs_ea; /* The AFPVOL_EA_xx flag */ 62 63 /* misc */ 64 char *v_gvs; 65 void *v_nfsclient; 66 int v_nfs; 67 VolSpace v_tm_used; /* used bytes on a TM volume */ 68 time_t v_tm_cachetime; /* time at which v_tm_used was calculated last */ 69 VolSpace v_appended; /* amount of data appended to files */ 70 71 /* only when opening/closing volumes or in error */ 72 int v_casefold; 73 char *v_localname; /* as defined in AppleVolumes.default */ 74 char *v_volcodepage; 75 char *v_maccodepage; 76 char *v_password; 77 char *v_cnidscheme; 78 char *v_dbpath; 79 char *v_cnidserver; 80 char *v_cnidport; 81 int v_hide; /* new volume wait until old volume is closed */ 82 int v_new; /* volume deleted but there's a new one with the same name */ 83 int v_deleted; /* volume open but deleted in new config file */ 84 char *v_root_preexec; 85 char *v_preexec; 86 char *v_root_postexec; 87 char *v_postexec; 88 int v_root_preexec_close; 89 int v_preexec_close; 90 char *v_uuid; /* For TimeMachine zeroconf record */ 91#ifdef FORCE_UIDGID 92 char *v_forceuid; 93 char *v_forcegid; 94#endif 95#ifdef __svr4__ 96 int v_qfd; 97#endif /*__svr4__*/ 98}; 99 100#define AFPVOL_OPEN (1<<0) 101 102/* flags for AFS and quota 0xxx0 */ 103#define AFPVOL_GVSMASK (7<<2) 104#define AFPVOL_NONE (0<<2) 105#define AFPVOL_AFSGVS (1<<2) 106#define AFPVOL_USTATFS (2<<2) 107#define AFPVOL_UQUOTA (4<<2) 108 109/* 110 Flags that alter volume behaviour. 111 Keep in sync with libatalk/util/volinfo.c 112*/ 113#define AFPVOL_A2VOL (1 << 5) /* prodos volume */ 114#define AFPVOL_CRLF (1 << 6) /* cr/lf translation */ 115#define AFPVOL_NOADOUBLE (1 << 7) /* don't create .AppleDouble by default */ 116#define AFPVOL_RO (1 << 8) /* read-only volume */ 117#define AFPVOL_MSWINDOWS (1 << 9) /* deal with ms-windows yuckiness. 118 this is going away. */ 119#define AFPVOL_NOHEX (1 << 10) /* don't do :hex translation */ 120#define AFPVOL_USEDOTS (1 << 11) /* use real dots */ 121#define AFPVOL_LIMITSIZE (1 << 12) /* limit size for older macs */ 122#define AFPVOL_MAPASCII (1 << 13) /* map the ascii range as well */ 123#define AFPVOL_DROPBOX (1 << 14) /* dropkludge dropbox support */ 124#define AFPVOL_NOFILEID (1 << 15) /* don't advertise createid resolveid and deleteid calls */ 125#define AFPVOL_NOSTAT (1 << 16) /* advertise the volume even if we can't stat() it 126 * maybe because it will be mounted later in preexec */ 127#define AFPVOL_UNIX_PRIV (1 << 17) /* support unix privileges */ 128#define AFPVOL_NODEV (1 << 18) /* always use 0 for device number in cnid calls 129 * help if device number is notconsistent across reboot 130 * NOTE symlink to a different device will return an ACCESS error 131 */ 132#define AFPVOL_CASEINSEN (1 << 19) /* volume is case insensitive */ 133#define AFPVOL_EILSEQ (1 << 20) /* encode illegal sequence 'asis' UCS2, ex "\217-", which is not 134 a valid SHIFT-JIS char, is encoded as U\217 -*/ 135 136#define AFPVOL_CACHE (1 << 21) /* Use adouble v2 CNID caching. Default: yes */ 137#define AFPVOL_INV_DOTS (1 << 22) /* dots files are invisible */ 138#define AFPVOL_TM (1 << 23) /* Supports TimeMachine */ 139#define AFPVOL_ACLS (1 << 24) /* Volume supports ACLS */ 140#define AFPVOL_SEARCHDB (1 << 25) /* Use fast CNID db search instead of filesystem */ 141#define AFPVOL_NONETIDS (1 << 26) /* signal the client it shall do privelege mapping */ 142#define AFPVOL_FOLLOWSYM (1 << 27) /* follow symlinks on the server, default is not to */ 143 144/* Extended Attributes vfs indirection */ 145#define AFPVOL_EA_NONE 0 /* No EAs */ 146#define AFPVOL_EA_AUTO 1 /* try sys, fallback to ad (default) */ 147#define AFPVOL_EA_SYS 2 /* Store them in native EAs */ 148#define AFPVOL_EA_AD 3 /* Store them in adouble files */ 149 150/* FPGetSrvrParms options */ 151#define AFPSRVR_CONFIGINFO (1 << 0) 152#define AFPSRVR_PASSWD (1 << 7) 153 154/* handle casefolding */ 155#define AFPVOL_MTOUUPPER (1 << 0) 156#define AFPVOL_MTOULOWER (1 << 1) 157#define AFPVOL_UTOMUPPER (1 << 2) 158#define AFPVOL_UTOMLOWER (1 << 3) 159#define AFPVOL_UMLOWER (AFPVOL_MTOULOWER | AFPVOL_UTOMLOWER) 160#define AFPVOL_UMUPPER (AFPVOL_MTOUUPPER | AFPVOL_UTOMUPPER) 161#define AFPVOL_UUPPERMLOWER (AFPVOL_MTOUUPPER | AFPVOL_UTOMLOWER) 162#define AFPVOL_ULOWERMUPPER (AFPVOL_MTOULOWER | AFPVOL_UTOMUPPER) 163 164#define MSWINDOWS_BADCHARS ":\t\\/<>*?|\"" 165 166int wincheck(const struct vol *vol, const char *path); 167 168#define AFPVOLSIG_FLAT 0x0001 /* flat fs */ 169#define AFPVOLSIG_FIX 0x0002 /* fixed ids */ 170#define AFPVOLSIG_VAR 0x0003 /* variable ids */ 171#define AFPVOLSIG_DEFAULT AFPVOLSIG_FIX 172 173/* volume attributes */ 174#define VOLPBIT_ATTR_RO (1 << 0) 175#define VOLPBIT_ATTR_PASSWD (1 << 1) 176#define VOLPBIT_ATTR_FILEID (1 << 2) 177#define VOLPBIT_ATTR_CATSEARCH (1 << 3) 178#define VOLPBIT_ATTR_BLANKACCESS (1 << 4) 179#define VOLPBIT_ATTR_UNIXPRIV (1 << 5) 180#define VOLPBIT_ATTR_UTF8 (1 << 6) 181#define VOLPBIT_ATTR_NONETIDS (1 << 7) 182#define VOLPBIT_ATTR_EXT_ATTRS (1 << 10) 183#define VOLPBIT_ATTR_ACLS (1 << 11) 184#define VOLPBIT_ATTR_TM (1 << 13) 185 186#define VOLPBIT_ATTR 0 187#define VOLPBIT_SIG 1 188#define VOLPBIT_CDATE 2 189#define VOLPBIT_MDATE 3 190#define VOLPBIT_BDATE 4 191#define VOLPBIT_VID 5 192#define VOLPBIT_BFREE 6 193#define VOLPBIT_BTOTAL 7 194#define VOLPBIT_NAME 8 195/* handle > 4GB volumes */ 196#define VOLPBIT_XBFREE 9 197#define VOLPBIT_XBTOTAL 10 198#define VOLPBIT_BSIZE 11 /* block size */ 199 200#define utf8_encoding() (afp_version >= 30) 201 202#define vol_noadouble(vol) (((vol)->v_flags & AFPVOL_NOADOUBLE) ? 1 : 0) 203#define vol_nodev(vol) (((vol)->v_flags & AFPVOL_NODEV) ? 1 : 0) 204#define vol_unix_priv(vol) (afp_version >= 30 && ((vol)->v_flags & AFPVOL_UNIX_PRIV)) 205#define vol_inv_dots(vol) (((vol)->v_flags & AFPVOL_INV_DOTS) ? 1 : 0) 206#define vol_syml_opt(vol) (((vol)->v_flags & AFPVOL_FOLLOWSYM) ? 0 : O_NOFOLLOW) 207 208#endif 209