• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /netgear-WNDR4500v2-V1.0.0.60_1.0.38/ap/gpl/timemachine/netatalk-2.2.5/etc/cnid_dbd/
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