result |= 1;
crit_check_ret:
if (adp != NULL)
- ad_close(adp, ADFLAGS_HF);
+ ad_close_metadata(adp);
return result;
}
/*
- * $Id: desktop.c,v 1.31 2005-04-28 20:49:41 bfernhomberg Exp $
+ * $Id: desktop.c,v 1.32 2005-05-14 12:54:49 didg Exp $
*
* See COPYRIGHT.
*
} else
adp = of->of_ad;
- if (ad_open( upath , vol_noadouble(vol) |
- (( isadir) ? ADFLAGS_HF|ADFLAGS_DIR : ADFLAGS_HF),
- O_RDWR|O_CREAT, 0666, adp) < 0 ) {
+ if (ad_open_metadata( upath , vol_noadouble(vol) | ( (isadir) ? ADFLAGS_DIR :0),O_CREAT, adp) < 0 ) {
return( AFPERR_ACCESS );
}
}
ad_setentrylen( adp, ADEID_COMMENT, clen );
memcpy( ad_entry( adp, ADEID_COMMENT ), ibuf, clen );
- ad_flush( adp, ADFLAGS_HF );
+ ad_flush_metadata( adp );
}
- ad_close( adp, ADFLAGS_HF );
+ ad_close_metadata( adp);
return( AFP_OK );
}
*/
if ( ad_getentrylen( adp, ADEID_COMMENT ) <= 0 ||
ad_getentrylen( adp, ADEID_COMMENT ) > 199 ) {
- ad_close( adp, ADFLAGS_HF );
+ ad_close_metadata( adp );
return( AFPERR_NOITEM );
}
*rbuf++ = ad_getentrylen( adp, ADEID_COMMENT );
- memcpy( rbuf, ad_entry( adp, ADEID_COMMENT ),
- ad_getentrylen( adp, ADEID_COMMENT ));
+ memcpy( rbuf, ad_entry( adp, ADEID_COMMENT ), ad_getentrylen( adp, ADEID_COMMENT ));
*rbuflen = ad_getentrylen( adp, ADEID_COMMENT ) + 1;
- ad_close( adp, ADFLAGS_HF );
+ ad_close_metadata( adp);
return( AFP_OK );
}
} else
adp = of->of_ad;
- if ( ad_open( upath,
- (isadir) ? ADFLAGS_HF|ADFLAGS_DIR : ADFLAGS_HF,
- O_RDWR, 0, adp) < 0 ) {
+ if ( ad_open_metadata( upath, (isadir) ? ADFLAGS_DIR : 0, 0, adp) < 0 ) {
switch ( errno ) {
case ENOENT :
return( AFPERR_NOITEM );
if (ad_getentryoff(adp, ADEID_COMMENT)) {
ad_setentrylen( adp, ADEID_COMMENT, 0 );
- ad_flush( adp, ADFLAGS_HF );
+ ad_flush_metadata( adp );
}
- ad_close( adp, ADFLAGS_HF );
+ ad_close_metadata( adp);
return( AFP_OK );
}
/*
- * $Id: directory.c,v 1.79 2005-05-09 00:58:27 bfernhomberg Exp $
+ * $Id: directory.c,v 1.80 2005-05-14 12:54:50 didg Exp $
*
* Copyright (c) 1990,1993 Regents of The University of Michigan.
* All Rights Reserved. See COPYRIGHT.
default :
if ( isad ) {
- ad_close( &ad, ADFLAGS_HF );
+ ad_close_metadata( &ad );
}
return( AFPERR_BITMAP );
}
data = set_name(vol, data, pdid, dir->d_m_name, dir->d_did, utf8);
}
if ( isad ) {
- ad_close( &ad, ADFLAGS_HF );
+ ad_close_metadata( &ad );
}
*buflen = data - buf;
return( AFP_OK );
}
ad_init(&ad, vol->v_adouble, vol->v_ad_options);
- if (ad_open( upath, vol_noadouble(vol)|ADFLAGS_HF|ADFLAGS_DIR,
- O_RDWR|O_CREAT, 0666, &ad) < 0) {
+ if (ad_open_metadata( upath, vol_noadouble(vol)|ADFLAGS_DIR, O_CREAT, &ad) < 0) {
/*
* Check to see what we're trying to set. If it's anything
* but ACCESS, UID, or GID, give an error. If it's any of those
ad_setid(&ad, st->st_dev, st->st_ino, dir->d_did, dir->d_parent->d_did, vol->v_stamp);
}
}
- ad_flush( &ad, ADFLAGS_HF );
- ad_close( &ad, ADFLAGS_HF );
+ ad_flush_metadata( &ad);
+ ad_close_metadata( &ad);
}
if (change_parent_mdate && dir->d_did != DIRDID_ROOT
}
ad_init(&ad, vol->v_adouble, vol->v_ad_options);
- if (ad_open( ".", vol_noadouble(vol)|ADFLAGS_HF|ADFLAGS_DIR,
- O_RDWR|O_CREAT, 0666, &ad ) < 0) {
+ if (ad_open_metadata( ".", vol_noadouble(vol)|ADFLAGS_DIR, O_CREAT, &ad ) < 0) {
if (vol_noadouble(vol))
goto createdir_done;
return( AFPERR_ACCESS );
ad_setname(&ad, s_path->m_name);
ad_setid( &ad, s_path->st.st_dev, s_path->st.st_ino, dir->d_did, did, vol->v_stamp);
- ad_flush( &ad, ADFLAGS_HF );
- ad_close( &ad, ADFLAGS_HF );
+ ad_flush_metadata( &ad);
+ ad_close_metadata( &ad);
createdir_done:
memcpy( rbuf, &dir->d_did, sizeof( u_int32_t ));
ad_init(&ad, vol->v_adouble, vol->v_ad_options);
- if (!ad_open( dst, ADFLAGS_HF|ADFLAGS_DIR, O_RDWR, 0, &ad)) {
+ if (!ad_open_metadata( dst, ADFLAGS_DIR, 0, &ad)) {
ad_setname(&ad, newname);
- ad_flush( &ad, ADFLAGS_HF );
- ad_close( &ad, ADFLAGS_HF );
+ ad_flush_metadata( &ad);
+ ad_close_metadata( &ad);
}
dir_hash_del(vol, dir);
/*
- * $Id: file.c,v 1.96 2005-04-28 20:49:41 bfernhomberg Exp $
+ * $Id: file.c,v 1.97 2005-05-14 12:54:52 didg Exp $
*
* Copyright (c) 1990,1993 Regents of The University of Michigan.
* All Rights Reserved. See COPYRIGHT.
}
rc = getmetadata(vol, bitmap, path, dir, buf, buflen, adp, attrbits);
if ( adp ) {
- ad_close( adp, ADFLAGS_HF );
+ ad_close_metadata( adp);
}
#ifdef DEBUG
LOG(log_info, logtype_afpd, "end getfilparams:");
/* second try with adouble open
*/
- if ( ad_open( upath, vol_noadouble(vol) | ADFLAGS_HF,
- O_RDWR|O_CREAT, 0666, adp) < 0) {
+ if ( ad_open_metadata( upath, vol_noadouble(vol), O_CREAT, adp) < 0) {
/* for some things, we don't need an adouble header */
if (f_bitmap & ~(1<<FILPBIT_MDATE)) {
return vol_noadouble(vol) ? AFP_OK : AFPERR_ACCESS;
}
if (isad) {
- ad_flush( adp, ADFLAGS_HF );
- ad_close( adp, ADFLAGS_HF );
+ ad_flush_metadata( adp);
+ ad_close_metadata( adp);
}
continue;
case EACCES:
- adp = NULL; /* maybe it's a file we no rw mode for us */
+ adp = NULL; /* maybe it's a file with no write mode for us */
break; /* was return AFPERR_ACCESS;*/
case EROFS:
return AFPERR_VLOCK;
if (checkAttrib) {
u_int16_t bshort;
- if (adp && (adflags & ADFLAGS_HF)) {
-
+ if ( ad_metadata( file , 0, &ad) == 0 ) {
ad_getattr(&ad, &bshort);
+ ad_close_metadata( &ad);
if ((bshort & htons(ATTRBIT_NODELETE))) {
- ad_close( &ad, adflags );
- return(AFPERR_OLOCK);
- }
- }
- else if (!adp) {
- /* was EACCESS error try to get only metadata */
- ad_init(&ad, vol->v_adouble, vol->v_ad_options); /* OK */
- if ( ad_metadata( file , 0, &ad) == 0 ) {
- ad_getattr(&ad, &bshort);
- ad_close( &ad, ADFLAGS_HF );
- if ((bshort & htons(ATTRBIT_NODELETE))) {
- return AFPERR_OLOCK;
- }
+ return AFPERR_OLOCK;
}
}
}
adp = of_ad(vol, &path, &ad);
- if ( ad_open( de->d_name, ADFLAGS_HF, O_RDWR, 0, adp ) < 0 ) {
+ if ( ad_open_metadata( de->d_name, 0, 0, adp ) < 0 ) {
return 0;
}
if (ad_setid(adp, path.st.st_dev, path.st.st_ino, aint, did, vol->v_stamp)) {
- ad_flush(adp, ADFLAGS_HF);
+ ad_flush_metadata(adp);
}
- ad_close(adp, ADFLAGS_HF);
+ ad_close_metadata(adp);
}
#endif /* AD_VERSION > AD_VERSION1 */
/*
- * $Id: filedir.c,v 1.48 2005-04-28 20:49:42 bfernhomberg Exp $
+ * $Id: filedir.c,v 1.49 2005-05-14 12:54:53 didg Exp $
*
* Copyright (c) 1990,1993 Regents of The University of Michigan.
* All Rights Reserved. See COPYRIGHT.
*/
if (!ad_metadata(p, adflags, adp)) {
- u_int16_t bshort;
+ u_int16_t bshort;
ad_getattr(adp, &bshort);
- ad_close( adp, ADFLAGS_HF );
+ ad_close_metadata( adp);
if ((bshort & htons(ATTRBIT_NORENAME)))
return(AFPERR_OLOCK);
}
/*
- * $Id: volume.c,v 1.59 2005-04-30 21:33:41 didg Exp $
+ * $Id: volume.c,v 1.60 2005-05-14 12:54:53 didg Exp $
*
* Copyright (c) 1990,1993 Regents of The University of Michigan.
* All Rights Reserved. See COPYRIGHT.
* .Parent file here if it doesn't exist. */
ad_init(&ad, vol->v_adouble, vol->v_ad_options);
- if ( ad_open( vol->v_path, vol_noadouble(vol) |
- ADFLAGS_HF|ADFLAGS_DIR, O_RDWR | O_CREAT,
- 0666, &ad) < 0 ) {
+ if ( ad_open_metadata( vol->v_path, vol_noadouble(vol) | ADFLAGS_DIR, O_CREAT, &ad) < 0 ) {
isad = 0;
vol->v_ctime = AD_DATE_FROM_UNIX(st->st_mtime);
ad_getentrylen( &ad, ADEID_NAME ));
}
vol_setdate(vol->v_vid, &ad, st->st_mtime);
- ad_flush(&ad, ADFLAGS_HF);
+ ad_flush_metadata(&ad);
}
else {
if (ad_getdate(&ad, AD_DATE_CREATE, &aint) < 0)
data += aint;
}
if ( isad ) {
- ad_close( &ad, ADFLAGS_HF );
+ ad_close_metadata( &ad);
}
*buflen = data - buf;
return( AFP_OK );
/*
- * $Id: adouble.h,v 1.25 2005-05-03 14:55:12 didg Exp $
+ * $Id: adouble.h,v 1.26 2005-05-14 12:54:55 didg Exp $
* Copyright (c) 1990,1991 Regents of The University of Michigan.
* All Rights Reserved.
*
extern int ad_stat __P((const char *, struct stat *));
extern int ad_metadata __P((const char *, int, struct adouble *));
-#if 0
-#define ad_metadata(name, flags, adp) ad_open(name, ADFLAGS_HF|(flags), O_RDONLY, 0666, adp)
-#endif
+#define ad_open_metadata(name, flags, mode, adp)\
+ ad_open(name, ADFLAGS_HF|(flags), O_RDWR |(mode), 0666, (adp))
+
+#define ad_flush_metadata(adp) ad_flush( (adp), ADFLAGS_HF)
+#define ad_close_metadata(adp) ad_close( (adp), ADFLAGS_HF)
/* extend header to RW if R or W (W if R for locking),
*/
/*
- * $Id: ad_open.c,v 1.33 2005-05-03 14:55:12 didg Exp $
+ * $Id: ad_open.c,v 1.34 2005-05-14 12:54:55 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;
- if ((ret = ad_open(name, ADFLAGS_HF | (flags), O_RDONLY, 0, adp)) < 0 && errno == EACCES) {
+ if ((ret = ad_open(name, ADFLAGS_HF | flags, O_RDONLY, 0, adp)) < 0 && errno == EACCES) {
uid = geteuid();
if (seteuid(0)) {
LOG(log_error, logtype_default, "ad_metadata(%s): seteuid failed %s", name, strerror(errno));
return -1;
}
/* we are root open read only */
- ret = ad_open(name, ADFLAGS_HF|ADFLAGS_RDONLY|(flags), O_RDONLY, 0, adp);
+ ret = ad_open(name, ADFLAGS_HF|ADFLAGS_RDONLY|flags, O_RDONLY, 0, adp);
err = errno;
if ( seteuid(uid) < 0) {
LOG(log_error, logtype_default, "ad_metadata: can't seteuid back");