2 * $Id: dbd_get.c,v 1.4 2009-05-06 11:54:24 franklahm Exp $
4 * Copyright (C) Joerg Lenneis 2003
5 * All Rights Reserved. See COPYING.
10 #endif /* HAVE_CONFIG_H */
13 #include <sys/param.h>
14 #include <atalk/logger.h>
16 #include <netatalk/endian.h>
17 #include <atalk/cnid_dbd_private.h>
25 /* Return CNID for a given did/name. */
27 int dbd_get(DBD *dbd, struct cnid_dbd_rqst *rqst, struct cnid_dbd_rply *rply)
29 char start[CNID_DID_LEN + MAXPATHLEN + 1], *buf;
33 memset(&key, 0, sizeof(key));
34 memset(&data, 0, sizeof(data));
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. */
44 key.size = CNID_DID_LEN + rqst->namelen + 1;
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;
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;
59 memcpy(&rply->cnid, data.data, sizeof(rply->cnid));
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));
64 rply->result = CNID_DBD_RES_OK;