1/* 2 * $Id: cnid_tdb_get.c,v 1.4 2009-11-20 17:37:14 didg Exp $ 3 */ 4 5#ifdef HAVE_CONFIG_H 6#include "config.h" 7#endif 8 9#ifdef CNID_BACKEND_TDB 10 11#include "cnid_tdb.h" 12 13/* Return CNID for a given did/name. */ 14cnid_t cnid_tdb_get(struct _cnid_db *cdb, const cnid_t did, char *name, const size_t len) 15{ 16 char start[CNID_DID_LEN + MAXPATHLEN + 1], *buf; 17 struct _cnid_tdb_private *db; 18 TDB_DATA key, data; 19 cnid_t id; 20 21 if (!cdb || !(db = cdb->_private) || (len > MAXPATHLEN)) { 22 return 0; 23 } 24 25 memset(&key, 0, sizeof(key)); 26 memset(&data, 0, sizeof(data)); 27 28 buf = start; 29 memcpy(buf, &did, sizeof(did)); 30 buf += sizeof(did); 31 memcpy(buf, name, len); 32 *(buf + len) = '\0'; /* Make it a C-string. */ 33 key.dptr = start; 34 key.dsize = CNID_DID_LEN + len + 1; 35 data = tdb_fetch(db->tdb_didname, key); 36 if (!data.dptr) 37 return 0; 38 39 memcpy(&id, data.dptr, sizeof(id)); 40 free(data.dptr); 41 return id; 42} 43 44#endif 45