From 5a29c4a057d9ec4db9f0d1292006e7869c3103f4 Mon Sep 17 00:00:00 2001 From: franklahm Date: Thu, 15 Oct 2009 15:35:05 +0000 Subject: [PATCH] EAs for dirs did not work --- etc/afpd/extattrs.c | 11 ++++++++--- libatalk/vfs/ea.c | 5 +++-- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/etc/afpd/extattrs.c b/etc/afpd/extattrs.c index 429cff00..2e850e50 100644 --- a/etc/afpd/extattrs.c +++ b/etc/afpd/extattrs.c @@ -1,5 +1,5 @@ /* - $Id: extattrs.c,v 1.6 2009-10-15 10:43:13 didg Exp $ + $Id: extattrs.c,v 1.7 2009-10-15 15:35:05 franklahm Exp $ Copyright (c) 2009 Frank Lahm This program is free software; you can redistribute it and/or modify @@ -74,12 +74,13 @@ static void hexdump(void *m, size_t l) { */ int afp_listextattr(AFPObj *obj, char *ibuf, size_t ibuflen _U_, char *rbuf, size_t *rbuflen) { - int count, ret, oflag = 0; + int count, ret, oflag = 0, adflags = 0; uint16_t vid, bitmap; uint32_t did, maxreply, tmpattr; struct vol *vol; struct dir *dir; struct path *s_path; + struct stat st; struct adouble ad, *adp = NULL; struct ofork *of; char *uname, *FinderInfo; @@ -145,7 +146,11 @@ int afp_listextattr(AFPObj *obj, char *ibuf, size_t ibuflen _U_, char *rbuf, siz adp = &ad; } - if ( ad_metadata( uname, 0, adp) < 0 ) { + stat(uname, &st); + if (S_ISDIR(st.st_mode)) + adflags = ADFLAGS_DIR; + + if ( ad_metadata( uname, adflags, adp) < 0 ) { switch (errno) { case EACCES: LOG(log_error, logtype_afpd, "afp_listextattr(%s): %s: check resource fork permission?", diff --git a/libatalk/vfs/ea.c b/libatalk/vfs/ea.c index 304c794f..e6222b98 100644 --- a/libatalk/vfs/ea.c +++ b/libatalk/vfs/ea.c @@ -1,5 +1,5 @@ /* - $Id: ea.c,v 1.5 2009-10-15 15:00:55 franklahm Exp $ + $Id: ea.c,v 1.6 2009-10-15 15:35:05 franklahm Exp $ Copyright (c) 2009 Frank Lahm This program is free software; you can redistribute it and/or modify @@ -591,8 +591,9 @@ static int ea_open(const struct vol * restrict vol, memset(ea, 0, sizeof(struct ea)); ea->vol = vol; /* ea_close needs it */ - ea->ea_flags = eaflags; + /* Dont check for errors, eg when removing the file is already gone */ + stat(uname, &st); if (S_ISDIR(st.st_mode)) ea->ea_flags |= EA_DIR; -- 2.39.2