• 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/etc/cnid_dbd/
1/*
2 * $Id: dbd_get.c,v 1.4 2009-05-06 11:54:24 franklahm Exp $
3 *
4 * Copyright (C) Joerg Lenneis 2003
5 * All Rights Reserved.  See COPYING.
6 */
7
8#ifdef HAVE_CONFIG_H
9#include "config.h"
10#endif /* HAVE_CONFIG_H */
11
12#include <string.h>
13#include <sys/param.h>
14#include <atalk/logger.h>
15#include <errno.h>
16#include <netatalk/endian.h>
17#include <atalk/cnid_dbd_private.h>
18
19
20#include "dbif.h"
21#include "dbd.h"
22#include "pack.h"
23
24
25/* Return CNID for a given did/name. */
26
27int dbd_get(DBD *dbd, struct cnid_dbd_rqst *rqst, struct cnid_dbd_rply *rply)
28{
29    char start[CNID_DID_LEN + MAXPATHLEN + 1], *buf;
30    DBT key, data;
31    int rc;
32
33    memset(&key, 0, sizeof(key));
34    memset(&data, 0, sizeof(data));
35
36    rply->namelen = 0;
37
38    buf = start;
39    memcpy(buf, &rqst->did, sizeof(rqst->did));
40    buf += sizeof(rqst->did);
41    memcpy(buf, rqst->name, rqst->namelen);
42    *(buf + rqst->namelen) = '\0'; /* Make it a C-string. */
43    key.data = start;
44    key.size = CNID_DID_LEN + rqst->namelen + 1;
45
46    if ((rc = dbif_get(dbd, DBIF_IDX_DIDNAME, &key, &data, 0)) < 0) {
47        LOG(log_error, logtype_cnid, "dbd_get: Unable to get CNID %u, name %s", ntohl(rqst->did), rqst->name);
48        rply->result = CNID_DBD_RES_ERR_DB;
49        return -1;
50    }
51
52    if (rc == 0) {
53	LOG(log_debug, logtype_cnid, "cnid_get: CNID not found for did %u name %s",
54	    ntohl(rqst->did), rqst->name);
55    rply->result = CNID_DBD_RES_NOTFOUND;
56    return 1;
57    }
58
59    memcpy(&rply->cnid, data.data, sizeof(rply->cnid));
60
61    LOG(log_debug, logtype_cnid, "cnid_get: Returning CNID did %u name %s as %u",
62        ntohl(rqst->did), rqst->name, ntohl(rply->cnid));
63
64    rply->result = CNID_DBD_RES_OK;
65    return 1;
66}
67