adp = &ad;
}
- if ( ad_metadata( path->u_name, ((isdir)?ADFLAGS_DIR:0), adp) < 0 ) {
+ if ( ad_metadata( path->u_name, vol_noadouble(vol) | ((isdir)?ADFLAGS_DIR:0), adp) < 0 ) {
adp = NULL; /* FIXME without resource fork adl_lkup will be call again */
}
/*
- * $Id: desktop.c,v 1.46 2009-11-09 01:36:18 didg Exp $
+ * $Id: desktop.c,v 1.47 2009-11-27 12:37:24 didg Exp $
*
* See COPYRIGHT.
*
} else
adp = of->of_ad;
- if ( ad_metadata( upath,( isadir) ? ADFLAGS_DIR : 0, adp) < 0 ) {
+ if ( ad_metadata( upath,vol_noadouble(vol) | ((isadir) ? ADFLAGS_DIR : 0), adp) < 0 ) {
return( AFPERR_NOITEM );
}
/*
- * $Id: directory.c,v 1.120 2009-11-26 18:17:12 franklahm Exp $
+ * $Id: directory.c,v 1.121 2009-11-27 12:37:24 didg Exp $
*
* Copyright (c) 1990,1993 Regents of The University of Michigan.
* All Rights Reserved. See COPYRIGHT.
(1 << DIRPBIT_FINFO)))) {
ad_init(&ad, vol->v_adouble, vol->v_ad_options);
- if ( !ad_metadata( upath, ADFLAGS_DIR, &ad) ) {
+ if ( !ad_metadata( upath, vol_noadouble(vol) | ADFLAGS_DIR, &ad) ) {
isad = 1;
}
}
fdir = curdir;
ad_init(&ad, vol->v_adouble, vol->v_ad_options);
- if ( ad_metadata( ".", ADFLAGS_DIR, &ad) == 0 ) {
+ /* we never want to create a resource fork here, we are going to delete it */
+ if ( ad_metadata( ".", ADFLAGS_NOADOUBLE | ADFLAGS_DIR, &ad) == 0 ) {
ad_getattr(&ad, &ashort);
ad_close( &ad, ADFLAGS_HF );
/*
- $Id: extattrs.c,v 1.27 2009-11-17 18:10:48 franklahm Exp $
+ $Id: extattrs.c,v 1.28 2009-11-27 12:37:24 didg Exp $
Copyright (c) 2009 Frank Lahm <franklahm@gmail.com>
This program is free software; you can redistribute it and/or modify
if (S_ISDIR(st->st_mode))
adflags = ADFLAGS_DIR;
- if ( ad_metadata( uname, adflags, adp) < 0 ) {
+ if ( ad_metadata( uname, vol_noadouble(vol) | adflags, adp) < 0 ) {
switch (errno) {
case ENOENT:
adp = NULL;
/*
- * $Id: file.c,v 1.123 2009-11-26 15:02:58 franklahm Exp $
+ * $Id: file.c,v 1.124 2009-11-27 12:37:24 didg Exp $
*
* Copyright (c) 1990,1993 Regents of The University of Michigan.
* All Rights Reserved. See COPYRIGHT.
adp = of_ad(vol, path, &ad);
upath = path->u_name;
- if ( ad_metadata( upath, flags, adp) < 0 ) {
+ if ( ad_metadata( upath, vol_noadouble(vol) | flags, adp) < 0 ) {
switch (errno) {
case EACCES:
LOG(log_error, logtype_afpd, "getfilparams(%s): %s: check resource fork permission?",
if (checkAttrib) {
/* was EACCESS error try to get only metadata */
ad_init(&ad, vol->v_adouble, vol->v_ad_options);
- if ( ad_metadata( file , ADFLAGS_OPENFORKS, &ad) == 0 ) {
+ /* we never want to create a resource fork here, we are going to delete it
+ * moreover sometimes deletefile is called with a no existent file and
+ * ad_open would create a 0 byte resource fork
+ */
+ if ( ad_metadata( file , ADFLAGS_NOADOUBLE | ADFLAGS_OPENFORKS, &ad) == 0 ) {
ad_close( &ad, adflags );
if ((err = check_attrib(&ad))) {
return err;
/*
- * $Id: filedir.c,v 1.64 2009-10-29 13:38:15 didg Exp $
+ * $Id: filedir.c,v 1.65 2009-11-27 12:37:24 didg Exp $
*
* Copyright (c) 1990,1993 Regents of The University of Michigan.
* All Rights Reserved. See COPYRIGHT.
* we are in the dest folder so we need to use p for ad_open
*/
- if (!ad_metadata(p, adflags, adp)) {
+ if (!ad_metadata(p, vol_noadouble(vol) | adflags, adp)) {
u_int16_t bshort;
ad_getattr(adp, &bshort);
/*
- * $Id: ad_open.c,v 1.59 2009-11-12 09:44:59 didg Exp $
+ * $Id: ad_open.c,v 1.60 2009-11-27 12:37:25 didg Exp $
*
* Copyright (c) 1999 Adrian Sun (asun@u.washington.edu)
* Copyright (c) 1990,1991 Regents of The University of Michigan.
uid_t uid;
int ret, err;
int dir = flags & ADFLAGS_DIR;
-
+ int adouble = 0;
+
+ if (!(flags & ADFLAGS_NOADOUBLE)) {
+ adouble = O_CREAT;
+ }
+
/* Open with O_CREAT, thus enumarating a dir will create missing adouble files, see: */
/* http://marc.info/?l=netatalk-devel&m=124039156832408&w=2 */
- if ((ret = ad_open(name, ADFLAGS_HF | dir, O_RDWR | O_CREAT, 0666, adp)) < 0 && errno == EACCES) {
+ if ((ret = ad_open(name, ADFLAGS_HF | dir, O_RDWR | adouble, 0666, adp)) < 0 && errno == EACCES) {
uid = geteuid();
if (seteuid(0)) {
LOG(log_error, logtype_default, "ad_metadata(%s): seteuid failed %s", name, strerror(errno));