1/* 2 * $Id: volume.h,v 1.16 2010/03/31 09:47:32 franklahm Exp $ 3 * 4 * Copyright (c) 1990,1994 Regents of The University of Michigan. 5 * All Rights Reserved. See COPYRIGHT. 6 */ 7 8#ifndef ATALK_VOLUME_H 9#define ATALK_VOLUME_H 1 10 11#include <sys/cdefs.h> 12#include <sys/types.h> 13#include <netatalk/endian.h> 14 15#include <atalk/unicode.h> 16#include <atalk/cnid.h> 17#include <atalk/hash.h> 18#include <atalk/vfs.h> 19 20#define AFPVOL_U8MNAMELEN 255 /* AFP3 sepc */ 21#define AFPVOL_MACNAMELEN 27 /* AFP2 spec */ 22 23typedef u_int64_t VolSpace; 24 25struct vol { 26 struct vol *v_next; 27 u_int16_t v_vid; 28 int v_flags; 29 char *v_path; 30 struct dir *v_root; 31 time_t v_mtime; 32 33 charset_t v_volcharset; 34 charset_t v_maccharset; 35 u_int16_t v_mtou_flags; /* flags for convert_charset in mtoupath */ 36 u_int16_t v_utom_flags; 37 long v_kTextEncoding; /* mac charset encoding in network order 38 * FIXME: should be a u_int32_t ? */ 39 size_t max_filename; 40 char *v_veto; 41 int v_adouble; /* adouble format: v1, v2, sfm ... */ 42 int v_ad_options; /* adouble option NODEV, NOCACHE, etc.. */ 43 char *(*ad_path)(const char *, int); 44 struct _cnid_db *v_cdb; 45 char v_stamp[ADEDLEN_PRIVSYN]; 46 VolSpace v_limitsize; /* Size limit, if any, in MiB */ 47 mode_t v_umask; 48 mode_t v_perm; /* default permission value OR with requested perm*/ 49 mode_t v_dperm; /* default directories permission value OR with requested perm*/ 50 mode_t v_fperm; /* default files permission value OR with requested perm*/ 51 ucs2_t *v_u8mname; /* converted to utf8-mac in ucs2 */ 52 ucs2_t *v_macname; /* mangled to legacy longname in ucs2 */ 53 ucs2_t *v_name; /* either v_u8mname or v_macname */ 54 55 /* get/set volparams */ 56 time_t v_ctime; /* volume creation date, not unix ctime */ 57 dev_t v_dev; /* Unix volume device, Set but not used */ 58 59 /* adouble VFS indirection */ 60 struct vfs_ops *vfs; /* pointer to vfs_master_funcs for chaining */ 61 const struct vfs_ops *vfs_modules[4]; 62 int v_vfs_ea; /* The AFPVOL_EA_xx flag */ 63 64 /* misc */ 65 char *v_gvs; 66 void *v_nfsclient; 67 int v_nfs; 68 uintmax_t v_tm_used; /* used bytes on a TM volume */ 69 uintmax_t v_written; /* amount of data written in afp_write, reset every time a FCE_TM_SIZE event is sent */ 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 143/* Extended Attributes vfs indirection */ 144#define AFPVOL_EA_NONE 0 /* No EAs */ 145#define AFPVOL_EA_AUTO 1 /* try sys, fallback to ad (default) */ 146#define AFPVOL_EA_SYS 2 /* Store them in native EAs */ 147#define AFPVOL_EA_AD 3 /* Store them in adouble files */ 148 149/* FPGetSrvrParms options */ 150#define AFPSRVR_CONFIGINFO (1 << 0) 151#define AFPSRVR_PASSWD (1 << 7) 152 153/* handle casefolding */ 154#define AFPVOL_MTOUUPPER (1 << 0) 155#define AFPVOL_MTOULOWER (1 << 1) 156#define AFPVOL_UTOMUPPER (1 << 2) 157#define AFPVOL_UTOMLOWER (1 << 3) 158#define AFPVOL_UMLOWER (AFPVOL_MTOULOWER | AFPVOL_UTOMLOWER) 159#define AFPVOL_UMUPPER (AFPVOL_MTOUUPPER | AFPVOL_UTOMUPPER) 160#define AFPVOL_UUPPERMLOWER (AFPVOL_MTOUUPPER | AFPVOL_UTOMLOWER) 161#define AFPVOL_ULOWERMUPPER (AFPVOL_MTOULOWER | AFPVOL_UTOMUPPER) 162 163#define MSWINDOWS_BADCHARS ":\t\\/<>*?|\"" 164 165int wincheck(const struct vol *vol, const char *path); 166 167#define AFPVOLSIG_FLAT 0x0001 /* flat fs */ 168#define AFPVOLSIG_FIX 0x0002 /* fixed ids */ 169#define AFPVOLSIG_VAR 0x0003 /* variable ids */ 170#define AFPVOLSIG_DEFAULT AFPVOLSIG_FIX 171 172/* volume attributes */ 173#define VOLPBIT_ATTR_RO (1 << 0) 174#define VOLPBIT_ATTR_PASSWD (1 << 1) 175#define VOLPBIT_ATTR_FILEID (1 << 2) 176#define VOLPBIT_ATTR_CATSEARCH (1 << 3) 177#define VOLPBIT_ATTR_BLANKACCESS (1 << 4) 178#define VOLPBIT_ATTR_UNIXPRIV (1 << 5) 179#define VOLPBIT_ATTR_UTF8 (1 << 6) 180#define VOLPBIT_ATTR_NONETIDS (1 << 7) 181#define VOLPBIT_ATTR_EXT_ATTRS (1 << 10) 182#define VOLPBIT_ATTR_ACLS (1 << 11) 183#define VOLPBIT_ATTR_TM (1 << 13) 184 185#define VOLPBIT_ATTR 0 186#define VOLPBIT_SIG 1 187#define VOLPBIT_CDATE 2 188#define VOLPBIT_MDATE 3 189#define VOLPBIT_BDATE 4 190#define VOLPBIT_VID 5 191#define VOLPBIT_BFREE 6 192#define VOLPBIT_BTOTAL 7 193#define VOLPBIT_NAME 8 194/* handle > 4GB volumes */ 195#define VOLPBIT_XBFREE 9 196#define VOLPBIT_XBTOTAL 10 197#define VOLPBIT_BSIZE 11 /* block size */ 198 199#define utf8_encoding() (afp_version >= 30) 200 201#define vol_noadouble(vol) (((vol)->v_flags & AFPVOL_NOADOUBLE) ? 1 : 0) 202#define vol_nodev(vol) (((vol)->v_flags & AFPVOL_NODEV) ? 1 : 0) 203#define vol_unix_priv(vol) (afp_version >= 30 && ((vol)->v_flags & AFPVOL_UNIX_PRIV)) 204#define vol_inv_dots(vol) (((vol)->v_flags & AFPVOL_INV_DOTS) ? 1 : 0) 205 206 207#endif 208