netatalk  4.4.0dev
Free and Open Source Apple Filing Protocol (AFP) Server
Loading...
Searching...
No Matches
cnid.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2003 the Netatalk Team
3 * Copyright (c) 2003 Rafal Lewczuk <[email protected]>
4 * Copyright (c) 2010 Frank Lahm
5 *
6 * This program is free software; you can redistribute and/or modify
7 * it under the terms of the GNU General Public License as published
8 * by the Free Software Foundation version 2 of the License or later
9 * version if explicitly stated by any of above copyright holders.
10 *
11 * 2024/07/05: Rafal Lewczuk gave permission to change the license
12 * to a later verion of the GNU GPL in
13 * https://github.com/Netatalk/netatalk/issues/1193
14 *
15 */
16
17/*
18 * This file contains all generic CNID related stuff
19 * declarations. Included:
20 * - CNID factory, which retrieves (eventually instantiates)
21 * CNID objects on demand
22 * - selection of CNID backends (default, detected by volume)
23 * - full set of CNID operations needed by server core.
24 */
25
26#ifndef _ATALK_CNID__H
27#define _ATALK_CNID__H 1
28
29#include <atalk/adouble.h>
30#include <atalk/list.h>
31#include <atalk/uuid.h>
32
33/* CNID object flags */
34#define CNID_FLAG_PERSISTENT 0x01 /* This backend implements DID persistence */
35#define CNID_FLAG_MANGLING 0x02 /* This backend has name mangling feature. */
36#define CNID_FLAG_SETUID 0x04 /* Set db owner to parent folder owner. */
37#define CNID_FLAG_BLOCK 0x08 /* block signals in update. */
38#define CNID_FLAG_NODEV 0x10 /* don't use device number only inode */
39#define CNID_FLAG_LAZY_INIT 0x20 /* */
40#define CNID_FLAG_INODE 0x80 /* in cnid_add the inode is authoritative */
41
42#define CNID_INVALID 0
43/* first valid ID */
44#define CNID_START 17
45
46#define CNID_ERR_PARAM 0x80000001
47#define CNID_ERR_PATH 0x80000002
48#define CNID_ERR_DB 0x80000003
49#define CNID_ERR_CLOSE 0x80000004 /* the db was not open */
50#define CNID_ERR_MAX 0x80000005
51
52/*
53 * This is instance of CNID database object.
54 */
55typedef struct _cnid_db {
56 /* Flags describing some CNID backend aspects. */
57 uint32_t cnid_db_flags;
59 /* back-end speficic data */
61
62 cnid_t (*cnid_add)(struct _cnid_db *cdb, const struct stat *st, cnid_t did,
63 const char *name, size_t, cnid_t hint);
64 int (*cnid_delete)(struct _cnid_db *cdb, cnid_t id);
65 cnid_t (*cnid_get)(struct _cnid_db *cdb, cnid_t did, const char *name,
66 size_t);
67 cnid_t (*cnid_lookup)(struct _cnid_db *cdb, const struct stat *st,
68 cnid_t did, const char *name, size_t);
69 cnid_t (*cnid_nextid)(struct _cnid_db *cdb);
70 char *(*cnid_resolve)(struct _cnid_db *cdb, cnid_t *id, void *buffer,
71 size_t len);
72 int (*cnid_update)(struct _cnid_db *cdb, cnid_t id, const struct stat *st,
73 cnid_t did, const char *name, size_t len);
74 void (*cnid_close)(struct _cnid_db *cdb);
75 int (*cnid_getstamp)(struct _cnid_db *cdb, void *buffer, const size_t len);
76 cnid_t (*cnid_rebuild_add)(struct _cnid_db *, const struct stat *, cnid_t,
77 const char *, size_t, cnid_t);
78 int (*cnid_find)(struct _cnid_db *cdb, const char *name, size_t namelen,
79 void *buffer, size_t buflen);
80 int (*cnid_wipe)(struct _cnid_db *cdb);
82
83/*
84 * Consolidation of args passedn from main cnid_open to modules cnid_XXX_open, so
85 * that it's easier to add aditional args as required.
86 */
90};
91
92/*
93 * CNID module - represents particular CNID implementation
94 */
96 char *name;
97 /* CNID modules are also stored on a bidirectional list. */
99 struct _cnid_db *(*cnid_open)(struct cnid_open_args *args);
100 /* Flags describing some CNID backend aspects. */
101 uint32_t flags;
102};
103
105
106/* Inititalize the CNID backends */
107void cnid_init(void);
108
109/* Registers new CNID backend module */
110void cnid_register(struct _cnid_module *module);
111
112/* This function opens a CNID database for selected volume. */
113struct _cnid_db *cnid_open(struct vol *vol, char *type, int flags);
114cnid_t cnid_add(struct _cnid_db *cdb, const struct stat *st, const cnid_t did,
115 const char *name, const size_t len, cnid_t hint);
116int cnid_delete(struct _cnid_db *cdb, cnid_t id);
117cnid_t cnid_get(struct _cnid_db *cdb, const cnid_t did, char *name,
118 const size_t len);
119int cnid_getstamp(struct _cnid_db *cdb, void *buffer, const size_t len);
120cnid_t cnid_lookup(struct _cnid_db *cdb, const struct stat *st,
121 const cnid_t did, char *name, const size_t len);
122char *cnid_resolve(struct _cnid_db *cdb, cnid_t *id, void *buffer,
123 size_t len);
124int cnid_update(struct _cnid_db *cdb, const cnid_t id,
125 const struct stat *st, const cnid_t did, char *name,
126 const size_t len);
127cnid_t cnid_rebuild_add(struct _cnid_db *cdb, const struct stat *st,
128 const cnid_t did, char *name, const size_t len,
129 cnid_t hint);
130int cnid_find(struct _cnid_db *cdb, const char *name, size_t namelen,
131 void *buffer, size_t buflen);
132int cnid_wipe(struct _cnid_db *cdb);
133void cnid_close(struct _cnid_db *db);
134
135#endif
Part of Netatalk's AppleDouble implementatation.
uint32_t cnid_t
Definition adouble.h:156
static dbd_flags_t flags
Definition cmd_dbd.c:45
struct _cnid_db cnid_db
int cnid_update(struct _cnid_db *cdb, const cnid_t id, const struct stat *st, const cnid_t did, char *name, const size_t len)
Definition cnid/cnid.c:359
cnid_t cnid_add(struct _cnid_db *cdb, const struct stat *st, const cnid_t did, const char *name, const size_t len, cnid_t hint)
Definition cnid/cnid.c:251
cnid_t cnid_lookup(struct _cnid_db *cdb, const struct stat *st, const cnid_t did, char *name, const size_t len)
Definition cnid/cnid.c:314
cnid_t cnid_get(struct _cnid_db *cdb, const cnid_t did, char *name, const size_t len)
Definition cnid/cnid.c:278
void cnid_init(void)
Definition cnid_init.c:51
void cnid_register(struct _cnid_module *module)
Definition cnid/cnid.c:47
int cnid_wipe(struct _cnid_db *cdb)
Definition cnid/cnid.c:382
struct _cnid_module cnid_module
Definition cnid.h:104
int cnid_delete(struct _cnid_db *cdb, cnid_t id)
Definition cnid/cnid.c:267
cnid_t cnid_rebuild_add(struct _cnid_db *cdb, const struct stat *st, const cnid_t did, char *name, const size_t len, cnid_t hint)
Definition cnid/cnid.c:370
void cnid_close(struct _cnid_db *db)
Definition cnid/cnid.c:234
int cnid_getstamp(struct _cnid_db *cdb, void *buffer, const size_t len)
Definition cnid/cnid.c:289
int cnid_find(struct _cnid_db *cdb, const char *name, size_t namelen, void *buffer, size_t buflen)
Definition cnid/cnid.c:326
struct _cnid_db * cnid_open(struct vol *vol, char *type, int flags)
Definition cnid/cnid.c:104
char * cnid_resolve(struct _cnid_db *cdb, cnid_t *id, void *buffer, size_t len)
Definition cnid/cnid.c:343
cnid_t did
Definition nad_cp.c:92
static enum op type
Definition nad_cp.c:95
char buffer[MAXPATHLEN+2]
Definition netacnv.c:35
Definition cnid.h:55
int(* cnid_getstamp)(struct _cnid_db *cdb, void *buffer, const size_t len)
Definition cnid.h:75
int(* cnid_find)(struct _cnid_db *cdb, const char *name, size_t namelen, void *buffer, size_t buflen)
Definition cnid.h:78
uint32_t cnid_db_flags
Definition cnid.h:57
cnid_t(* cnid_add)(struct _cnid_db *cdb, const struct stat *st, cnid_t did, const char *name, size_t, cnid_t hint)
Definition cnid.h:62
void(* cnid_close)(struct _cnid_db *cdb)
Definition cnid.h:74
cnid_t(* cnid_rebuild_add)(struct _cnid_db *, const struct stat *, cnid_t, const char *, size_t, cnid_t)
Definition cnid.h:76
struct vol * cnid_db_vol
Definition cnid.h:58
int(* cnid_delete)(struct _cnid_db *cdb, cnid_t id)
Definition cnid.h:64
cnid_t(* cnid_get)(struct _cnid_db *cdb, cnid_t did, const char *name, size_t)
Definition cnid.h:65
int(* cnid_update)(struct _cnid_db *cdb, cnid_t id, const struct stat *st, cnid_t did, const char *name, size_t len)
Definition cnid.h:72
int(* cnid_wipe)(struct _cnid_db *cdb)
Definition cnid.h:80
cnid_t(* cnid_lookup)(struct _cnid_db *cdb, const struct stat *st, cnid_t did, const char *name, size_t)
Definition cnid.h:67
cnid_t(* cnid_nextid)(struct _cnid_db *cdb)
Definition cnid.h:69
void * cnid_db_private
Definition cnid.h:60
Definition cnid.h:95
struct list_head db_list
Definition cnid.h:98
uint32_t flags
Definition cnid.h:101
char * name
Definition cnid.h:96
Definition cnid.h:87
uint32_t cnid_args_flags
Definition cnid.h:88
struct vol * cnid_args_vol
Definition cnid.h:89
Definition include/atalk/list.h:17
Definition include/atalk/volume.h:32
static char * args[]
Definition test.c:48