|
static int | rewrite_vol_uuid_conf (AFPObj *obj, struct vol *Volumes) |
static char * | get_vol_uuid (const AFPObj *obj, const char *volname) |
static int | do_check_ea_support (const struct vol *vol) |
static void | check_ea_support (struct vol *vol) |
static int | check_vol_acl_support (const struct vol *vol) |
static char * | volxlate (const AFPObj *obj, char *dest, size_t destlen, const char *src, const struct passwd *pwd, const char *path, const char *volname) |
static int | accessvol (const AFPObj *obj, const char *args, const char *name) |
static int | hostaccessvol (const AFPObj *obj, const char *volname _U_, const char *args) |
static const char * | getoption_str (const dictionary *conf, const char *vol, const char *opt, const char *defsec, const char *defval) |
static char * | getoption_strdup (const dictionary *conf, const char *vol, const char *opt, const char *defsec, const char *defval) |
static int | getoption_bool (const dictionary *conf, const char *vol, const char *opt, const char *defsec, int defval) |
static int | getoption_int (const dictionary *conf, const char *vol, const char *opt, const char *defsec, int defval) |
static int | vdgoption_bool (const dictionary *conf, const char *vol, const char *opt, const char *defsec, int defval) |
static struct vol * | creatvol (AFPObj *obj, const struct passwd *pwd, const char *section, const char *name, const char *path_in, const char *preset) |
static int | volfile_changed (AFPObj *obj) |
static int | vol_section (const char *sec) |
static int | readvolfile (AFPObj *obj, const struct passwd *pwent) |
static int | setextmap (char *ext, char *type, char *creator) |
static int | extmap_cmp (const void *map1, const void *map2) |
static void | sortextmap (void) |
static void | free_extmap (void) |
static int | ext_cmp_key (const void *key, const void *obj) |
struct extmap * | getextmap (const char *path) |
struct extmap * | getdefextmap (void) |
static int | readextmap (const char *file) |
void | volume_unlink (struct vol *volume) |
void | volume_free (struct vol *vol) |
int | load_charset (struct vol *vol) |
int | load_volumes (AFPObj *obj, lv_flags_t flags) |
void | unload_volumes (AFPObj *obj) |
struct vol * | getvolumes (void) |
struct vol * | getvolbyvid (const uint16_t vid) |
static char * | getuserbypath (const char *path) |
struct vol * | getvolbypath (AFPObj *obj, const char *path) |
struct vol * | getvolbyname (const char *name) |
int | afp_config_parse (AFPObj *AFPObj, char *processname) |
void | afp_config_free (AFPObj *obj) |
int accessvol |
( |
const AFPObj * | obj, |
|
|
const char * | args, |
|
|
const char * | name ) |
|
static |
check access list
this function wants a string consisting of names seperated by comma or space. Names may be quoted within a pair of quotes. Groups are denoted by a leading @ symbol. Example: user1 user2, user3, "@group1", "@group2", "@group3", "user name1", "@group name1" A NULL argument allows everybody to have access. We return three things: -1: no list 0: list exists, but name isn't in it 1: in list
struct vol * getvolbypath |
( |
AFPObj * | obj, |
|
|
const char * | path ) |
Search volume by path, creating user home vols as necessary
Path may be absolute or relative. Ordinary volume structs are created when the ini config is initially parsed (load_volumes()), but user volumes are as load_volumes() only can create the user volume of the logged in user in an AFP session in afpd, but not when called from e.g. cnid_metad or dbd. Both cnid_metad and dbd thus need a way to lookup and create struct vols for user home by path. This is what this func does as well.
(1) Search "normal" volume list (2) Check if theres a [Homes] section, load_volumes() remembers this for us (3) If there is, match "path" with "basedir regex" to get the user home parent dir (4) Built user home path by appending the basedir matched in (3) and appending the username (5) The next path element then is the username (5b) getvolbypath() assumes that the user home directory has the same name as the username. If that is not true, getuserbypath() is called and tries to retrieve the username from the directory owner, checking its validity (6) Append [Homes]->path subdirectory if defined (7) Create volume
- Parameters
-
obj | (rw) handle |
path | (r) path, may be relative or absolute |
int vdgoption_bool |
( |
const dictionary * | conf, |
|
|
const char * | vol, |
|
|
const char * | opt, |
|
|
const char * | defsec, |
|
|
int | defval ) |
|
static |
Get boolean option from volume, default section or global - use default value if not set
Order of precedence: volume -> default section -> global -> default value
"vdg" means volume, default section or global
- Parameters
-
conf | (r) config handle |
vol | (r) volume name (must be section name i.e. wo vars expanded) |
opt | (r) option |
defsec | (r) if "option" is not found in "vol", try to find it in section "defsec" |
defval | (r) if neither "vol" nor "defsec" contain "opt" return "defval" |
- Returns
- const option string from "vol" or "defsec", or "defval" if not found