* FIX: afpd: Dont use searchdb when doing partial name search
* FIX: afpd: Fix a possible bug handling disconnected sessions,
NetAFP Bug ID #16
+* FIX: dbd: Don't remove BerkeleyDB if it's still in use by eg cnid_dbd, fixes
+ bug introduced in 2.2.2
* FIX: debian initscript: start avahi-daemon (if available) before atalkd
Changes in 2.2.2
int ret;
DBD *dbd;
- LOG(log_debug, logtype_cnid, "Reopening BerkeleyDB environment");
+ LOG(log_debug, logtype_cnid, "Trying to remove BerkeleyDB environment");
+
+ if (get_lock(LOCK_EXCL, path) != LOCK_EXCL) {
+ LOG(log_warning, logtype_cnid, "CNID db \"%s\" in use, can't remove BerkeleyDB environment", path);
+ return 0;
+ }
if (NULL == (dbd = dbif_init(path, "cnid2.db")))
return -1;
#include <db.h>
#include <atalk/cnid_dbd_private.h>
-#define ntoh64(x) (((uint64_t)(x) << 56) | \
- (((uint64_t)(x) << 40) & 0xff000000000000ULL) | \
- (((uint64_t)(x) << 24) & 0xff0000000000ULL) | \
- (((uint64_t)(x) << 8) & 0xff00000000ULL) | \
- (((uint64_t)(x) >> 8) & 0xff000000ULL) | \
- (((uint64_t)(x) >> 24) & 0xff0000ULL) | \
- (((uint64_t)(x) >> 40) & 0xff00ULL) | \
- ((uint64_t)(x) >> 56))
-
extern unsigned char *pack_cnid_data(struct cnid_dbd_rqst *);
extern int didname(DB *dbp, const DBT *pkey, const DBT *pdata, DBT *skey);
extern int devino(DB *dbp, const DBT *pkey, const DBT *pdata, DBT *skey);