netatalk  4.5.0
Free and Open Source Apple Filing Protocol (AFP) Server
Loading...
Searching...
No Matches
cnid.c File Reference
#include <errno.h>
#include <signal.h>
#include <stdlib.h>
#include <string.h>
#include <sys/param.h>
#include <sys/stat.h>
#include <sys/time.h>
#include <sys/types.h>
#include <time.h>
#include <unistd.h>
#include <atalk/cnid.h>
#include <atalk/compat.h>
#include <atalk/list.h>
#include <atalk/logger.h>
#include <atalk/util.h>
#include <atalk/volume.h>

Macros

#define USE_LIST

Functions

void cnid_register (struct _cnid_module *module)
static int cnid_dir (const char *dir, mode_t mask)
struct _cnid_dbcnid_open (struct vol *vol, char *type, int flags)
static void block_signal (uint32_t flags)
static void unblock_signal (uint32_t flags)
static cnid_t valide (cnid_t id)
void cnid_close (struct _cnid_db *db)
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)
int cnid_delete (struct _cnid_db *cdb, cnid_t id)
cnid_t cnid_get (struct _cnid_db *cdb, const cnid_t did, char *name, const size_t len)
int cnid_getstamp (struct _cnid_db *cdb, void *buffer, const size_t len)
cnid_t cnid_lookup (struct _cnid_db *cdb, const struct stat *st, const cnid_t did, char *name, const size_t len)
int cnid_find (struct _cnid_db *cdb, const char *name, size_t namelen, void *buffer, size_t buflen, bool *more_available)
 Search the CNID database for entries whose name contains a substring.
char * cnid_resolve (struct _cnid_db *cdb, cnid_t *id, void *buffer, size_t len)
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)
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)
int cnid_wipe (struct _cnid_db *cdb)

Variables

static struct list_head modules = ATALK_LIST_HEAD_INIT(modules)
static sigset_t sigblockset

Macro Definition Documentation

◆ USE_LIST

#define USE_LIST

Function Documentation

◆ block_signal()

void block_signal ( uint32_t flags)
static

◆ cnid_add()

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 )

◆ cnid_close()

void cnid_close ( struct _cnid_db * db)

Closes CNID database. Currently it's just a wrapper around db->cnid_close().

◆ cnid_delete()

int cnid_delete ( struct _cnid_db * cdb,
cnid_t id )

◆ cnid_dir()

int cnid_dir ( const char * dir,
mode_t mask )
static

◆ cnid_find()

int cnid_find ( struct _cnid_db * cdb,
const char * name,
size_t namelen,
void * buffer,
size_t buflen,
bool * more_available )

Search the CNID database for entries whose name contains a substring.

Centralises parameter validation so all three CNID backends (dbd, sqlite, mysql) behave identically against bad input. The 4-byte upper-bound shrink on namelen leaves room for the DBD backend's pagination offset prefix in the wire payload; the constraint is applied uniformly here so callers see consistent behaviour regardless of the configured backend.

The optional more_available out-parameter, when non-NULL, is written unconditionally on entry to false and again by the backend: false on error, true iff the result set was truncated on success (more matches exist than fit in buffer, or were collected within the daemon's wall-clock budget).

Parameters
[in]cdbCNID database handle
[in]nameUTF-8 substring to search for, not necessarily NUL-terminated
[in]namelenbytes in name, range 1..MAXPATHLEN-sizeof(uint32_t)
[out]buffercaller-provided buffer for matching CNIDs in network byte order
[in]buflencapacity of buffer in bytes, must be >= CNID_FIND_MIN_BUFLEN
[out]more_availableset to true iff result set was truncated, NULL to opt out
Returns
number of CNIDs written to buffer on success, -1 on failure (errno = CNID_ERR_PARAM or CNID_ERR_DB)

◆ cnid_get()

cnid_t cnid_get ( struct _cnid_db * cdb,
const cnid_t did,
char * name,
const size_t len )

◆ cnid_getstamp()

int cnid_getstamp ( struct _cnid_db * cdb,
void * buffer,
const size_t len )

◆ cnid_lookup()

cnid_t cnid_lookup ( struct _cnid_db * cdb,
const struct stat * st,
const cnid_t did,
char * name,
const size_t len )

◆ cnid_open()

struct _cnid_db * cnid_open ( struct vol * vol,
char * type,
int flags )

Opens CNID database using particular back-end

◆ cnid_rebuild_add()

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 )

◆ cnid_register()

void cnid_register ( struct _cnid_module * module)

Once module has been registered, it cannot be unregistered.

◆ cnid_resolve()

char * cnid_resolve ( struct _cnid_db * cdb,
cnid_t * id,
void * buffer,
size_t len )

◆ cnid_update()

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 )

◆ cnid_wipe()

int cnid_wipe ( struct _cnid_db * cdb)

◆ unblock_signal()

void unblock_signal ( uint32_t flags)
static

◆ valide()

cnid_t valide ( cnid_t id)
static

protect against bogus value from the DB. adddir really doesn't like 2

Variable Documentation

◆ modules

struct list_head modules = ATALK_LIST_HEAD_INIT(modules)
static

List of all registered modules.

◆ sigblockset

sigset_t sigblockset
static