• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src/router/netatalk-3.0.5/libatalk/cnid/cdb/
1/*
2 */
3
4#ifdef HAVE_CONFIG_H
5#include "config.h"
6#endif /* HAVE_CONFIG_H */
7
8#ifdef CNID_BACKEND_CDB
9#include "cnid_cdb_private.h"
10
11/* Return the did/name pair corresponding to a CNID. */
12char *cnid_cdb_resolve(struct _cnid_db *cdb, cnid_t *id, void *buffer, size_t len) {
13    CNID_private *db;
14    DBT key, data;
15    int rc;
16
17    if (!cdb || !(db = cdb->_private) || !id || !(*id)) {
18        return NULL;
19    }
20
21    memset(&key, 0, sizeof(key));
22    memset(&data, 0, sizeof(data));
23
24    data.data = buffer;
25    data.ulen = len;
26    data.flags = DB_DBT_USERMEM;
27
28    key.data = id;
29    key.size = sizeof(cnid_t);
30    while ((rc = db->db_cnid->get(db->db_cnid, NULL, &key, &data, 0))) {
31
32        if (rc != DB_NOTFOUND) {
33            LOG(log_error, logtype_default, "cnid_resolve: Unable to get did/name: %s",
34                db_strerror(rc));
35        }
36
37        *id = 0;
38        return NULL;
39    }
40
41    memcpy(id, (char *)data.data +CNID_DID_OFS, sizeof(cnid_t));
42#ifdef DEBUG
43    LOG(log_debug9, logtype_default, "cnid_resolve: Returning id = %u, did/name = %s",
44        ntohl(*id), (char *)data.data + CNID_NAME_OFS);
45#endif
46    return (char *)data.data +  CNID_NAME_OFS;
47}
48
49#endif
50