return NULL; /* (1b) */
}
- if (lstat(cfrombstr(cdir->d_fullpath), &st) != 0) {
+ if (ostat(cfrombstr(cdir->d_fullpath), &st, vol_syml_opt(vol)) != 0) {
LOG(log_debug, logtype_afpd, "dircache(cnid:%u): {missing:\"%s\"}",
ntohl(cnid), cfrombstr(cdir->d_fullpath));
(void)dir_remove(vol, cdir);
}
if (cdir) {
- if (lstat(cfrombstr(cdir->d_fullpath), &st) != 0) {
+ if (ostat(cfrombstr(cdir->d_fullpath), &st, vol_syml_opt(vol)) != 0) {
LOG(log_debug, logtype_afpd, "dircache(did:%u,\"%s\"): {missing:\"%s\"}",
ntohl(dir->d_did), name, cfrombstr(cdir->d_fullpath));
(void)dir_remove(vol, cdir);
int dircache_add(const struct vol *vol,
struct dir *dir)
{
- struct dir *cdir = NULL;
struct dir key;
hnode_t *hn;
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;
}