1/* 2 * $Id: dbd_resolve.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 <atalk/logger.h> 14#include <errno.h> 15#include <netatalk/endian.h> 16#include <atalk/cnid_dbd_private.h> 17 18#include "dbif.h" 19#include "dbd.h" 20#include "pack.h" 21 22/* Return the did/name pair corresponding to a CNID. */ 23 24int dbd_resolve(DBD *dbd, struct cnid_dbd_rqst *rqst, struct cnid_dbd_rply *rply) 25{ 26 DBT key, data; 27 int rc; 28 29 memset(&key, 0, sizeof(key)); 30 memset(&data, 0, sizeof(data)); 31 32 rply->namelen = 0; 33 34 key.data = (void *) &rqst->cnid; 35 key.size = sizeof(cnid_t); 36 37 if ((rc = dbif_get(dbd, DBIF_CNID, &key, &data, 0)) < 0) { 38 LOG(log_error, logtype_cnid, "dbd_resolve: DB Error resolving CNID %u", ntohl(rqst->cnid)); 39 rply->result = CNID_DBD_RES_ERR_DB; 40 return -1; 41 } 42 43 if (rc == 0) { 44 45 LOG(log_debug, logtype_cnid, "dbd_resolve: Could not resolve CNID %u", ntohl(rqst->cnid)); 46 47 rply->result = CNID_DBD_RES_NOTFOUND; 48 return 1; 49 } 50 51 memcpy(&rply->did, (char *) data.data + CNID_DID_OFS, sizeof(cnid_t)); 52 53 rply->namelen = data.size; 54 rply->name = (char *)data.data; 55 56 LOG(log_debug, logtype_cnid, "dbd_resolve(CNID: %u): did: %u, name: \"%s\"", 57 ntohl(rqst->cnid), ntohl(rply->did), rply->name + CNID_NAME_OFS); 58 59 rply->result = CNID_DBD_RES_OK; 60 return 1; 61} 62