]> arthur.barton.de Git - netatalk.git/blobdiff - etc/cnid_dbd/dbif.c
It works
[netatalk.git] / etc / cnid_dbd / dbif.c
index 0abfc2e90fec1e4c8a005c8e906d5b3453405181..8ddebc1fe18f66f5de6772c9e030812099dc0564 100644 (file)
@@ -760,6 +760,8 @@ int dbif_search(DBD *dbd, DBT *key, char *resbuf)
     DBT pkey, data;
     char *cnids = resbuf;
     cnid_t cnid;
+    char *namebkp = key->data;
+    int namelenbkp = key->size;
 
     memset(&pkey, 0, sizeof(DBT));
     memset(&data, 0, sizeof(DBT));
@@ -777,10 +779,13 @@ int dbif_search(DBD *dbd, DBT *key, char *resbuf)
 
     ret = cursorp->pget(cursorp, key, &pkey, &data, DB_SET_RANGE);
     while (count < DBD_MAX_SRCH_RSLTS && ret != DB_NOTFOUND) {
-        count++;
-        memcpy(cnids, pkey.data, sizeof(cnid_t));
-        cnids += sizeof(cnid_t);
-        LOG(log_error, logtype_cnid, "match: CNID %" PRIu32, memcpy(&cnid, pkey.data, sizeof(cnid_t)), ntohl(cnid));
+        if (namelenbkp <= key->size && strncmp(namebkp, key->data, namelenbkp) == 0) {
+            count++;
+            memcpy(cnids, pkey.data, sizeof(cnid_t));
+            memcpy(&cnid, pkey.data, sizeof(cnid_t));
+            cnids += sizeof(cnid_t);
+            LOG(log_error, logtype_cnid, "match: CNID %" PRIu32, ntohl(cnid));
+        }
         ret = cursorp->pget(cursorp, key, &pkey, &data, DB_NEXT_DUP);
     }