#include <atalk/queue.h>
#include <atalk/bstrlib.h>
#include <atalk/bstradd.h>
+#include <atalk/globals.h>
#include "dircache.h"
#include "directory.h"
#include "hash.h"
-#include "globals.h"
+
/*
* Directory Cache
dircache_stat.expunged++;
return NULL;
}
- if (cdir->dcache_ctime != st.st_ctime) {
+ if ((cdir->dcache_ctime != st.st_ctime) || (cdir->dcache_ino != st.st_ino)) {
LOG(log_debug, logtype_afpd, "dircache(cnid:%u): {modified:\"%s\"}",
ntohl(cnid), cfrombstr(cdir->d_u_name));
(void)dir_remove(vol, cdir);
return NULL;
}
- /* Remove modified directories (precaution, probably not necessary) and file */
- if (
- (!(cdir->d_flags & DIRF_ISFILE) && (cdir->dcache_ctime != st.st_ctime))
- ||
- ((cdir->d_flags & DIRF_ISFILE) && (cdir->dcache_ino != st.st_ino))
- ) {
+ /* Remove modified directories and files */
+ if ((cdir->dcache_ctime != st.st_ctime) || (cdir->dcache_ino != st.st_ino)) {
LOG(log_debug, logtype_afpd, "dircache(did:%u,\"%s\"): {modified}",
ntohl(dir->d_did), name);
(void)dir_remove(vol, cdir);
dircache_stat.expunged++;
}
key.d_vid = vol->v_vid;
- key.d_pdid = dir->d_did;
+ key.d_pdid = dir->d_pdid;
key.d_u_name = dir->d_u_name;
if ((hn = hash_lookup(index_didname, &key))) {
/* Found an entry with the same DID/name, delete it */
* - a DID/name index on the main dircache
* - a queue index on the dircache
*
- * @param size (r) requested maximum size from afpd.conf
+ * @param size (r) requested maximum size from afp.conf
*
* @return 0 on success, -1 on error
*/
rootParent.d_fullpath = bfromcstr("ROOT_PARENT");
rootParent.d_m_name = bfromcstr("ROOT_PARENT");
rootParent.d_u_name = rootParent.d_m_name;
+ rootParent.d_rights_cache = 0xffffffff;
return 0;
}
fprintf(dump, "\n");
fflush(dump);
+ fclose(dump);
return;
}