• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /netgear-WNDR4500v2-V1.0.0.60_1.0.38/ap/gpl/timemachine/netatalk-2.2.0/include/atalk/
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