1/* 2 * Copyright (C) Frank Lahm 2010 3 * All Rights Reserved. See COPYING. 4 */ 5 6#ifdef HAVE_CONFIG_H 7#include "config.h" 8#endif /* HAVE_CONFIG_H */ 9 10#include <string.h> 11#include <errno.h> 12#include <netatalk/endian.h> 13#include <atalk/logger.h> 14#include <atalk/cnid_dbd_private.h> 15 16#include "dbif.h" 17#include "dbd.h" 18#include "pack.h" 19 20int dbd_search(DBD *dbd, struct cnid_dbd_rqst *rqst, struct cnid_dbd_rply *rply) 21{ 22 DBT key; 23 int results; 24 static char resbuf[DBD_MAX_SRCH_RSLTS * sizeof(cnid_t)]; 25 26 LOG(log_debug, logtype_cnid, "dbd_search(\"%s\"):", rqst->name); 27 28 memset(&key, 0, sizeof(key)); 29 rply->name = resbuf; 30 rply->namelen = 0; 31 32 key.data = rqst->name; 33 key.size = rqst->namelen; 34 35 if ((results = dbif_search(dbd, &key, resbuf)) < 0) { 36 LOG(log_error, logtype_cnid, "dbd_search(\"%s\"): db error", rqst->name); 37 rply->result = CNID_DBD_RES_ERR_DB; 38 return -1; 39 } 40 if (results) { 41 LOG(log_debug, logtype_cnid, "dbd_search(\"%s\"): %d matches", rqst->name, results); 42 rply->namelen = results * sizeof(cnid_t); 43 rply->result = CNID_DBD_RES_OK; 44 } else { 45 LOG(log_debug, logtype_cnid, "dbd_search(\"%s\"): no matches", rqst->name); 46 rply->result = CNID_DBD_RES_NOTFOUND; 47 } 48 49 return 1; 50} 51