]> arthur.barton.de Git - netatalk.git/commitdiff
use macros ad_xxmetada when we only want files' metadata.
authordidg <didg>
Sat, 14 May 2005 12:54:46 +0000 (12:54 +0000)
committerdidg <didg>
Sat, 14 May 2005 12:54:46 +0000 (12:54 +0000)
etc/afpd/catsearch.c
etc/afpd/desktop.c
etc/afpd/directory.c
etc/afpd/file.c
etc/afpd/filedir.c
etc/afpd/volume.c
include/atalk/adouble.h
libatalk/adouble/ad_open.c

index 73dd30a8f0f8ae24e2e955cbd9a015c7d08426c2..d927ad4b36dce74a1d08a1a47ad79d0245f34d6b 100644 (file)
@@ -416,7 +416,7 @@ static int crit_check(struct vol *vol, struct path *path) {
        result |= 1;
 crit_check_ret:
        if (adp != NULL)
-               ad_close(adp, ADFLAGS_HF);
+               ad_close_metadata(adp);
        return result;
 }  
 
index 390909946f4d9be7eca8b1cbdc5229c40cc36836..fcd764fa44b61b06a9ad64d14939e7a00570703a 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * $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.
  *
@@ -740,9 +740,7 @@ static int ad_addcomment(struct vol *vol, struct path *path, char *ibuf)
     } 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 );
     }
 
@@ -757,9 +755,9 @@ static int ad_addcomment(struct vol *vol, struct path *path, char *ibuf)
         }
         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 );
 }
 
@@ -830,15 +828,14 @@ static int ad_getcomment(struct vol *vol, struct path *path, char *rbuf, int *rb
      */
     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 );
 }
@@ -897,9 +894,7 @@ static int ad_rmvcomment(struct vol *vol, struct path *path)
     } 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 );
@@ -912,9 +907,9 @@ static int ad_rmvcomment(struct vol *vol, struct path *path)
 
     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 );
 }
 
index f94e5156a813426f276803dd439ac0de8e5ae426..3211c4b31803e0b1f06f45964a4e70d8fe363589 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * $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.
@@ -1812,7 +1812,7 @@ int getdirparams(const struct vol *vol,
             
         default :
             if ( isad ) {
-                ad_close( &ad, ADFLAGS_HF );
+                ad_close_metadata( &ad );
             }
             return( AFPERR_BITMAP );
         }
@@ -1830,7 +1830,7 @@ int getdirparams(const struct vol *vol,
         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 );
@@ -2069,8 +2069,7 @@ int setdirparams(const struct vol *vol,
     }
     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
@@ -2255,8 +2254,8 @@ setdirparam_done:
                 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
@@ -2338,8 +2337,7 @@ int       ibuflen _U_, *rbuflen;
     }
 
     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 );
@@ -2347,8 +2345,8 @@ int       ibuflen _U_, *rbuflen;
     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 ));
@@ -2409,10 +2407,10 @@ struct dir      *dir, *newparent;
     
     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);
index 96970807805b98ff327650f1ca6ea218d4611f43..ab4abf9a6384ba8fbb10d4d0dc157389d40a4a42 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * $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.
@@ -575,7 +575,7 @@ int getfilparams(struct vol *vol,
     }
     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:");
@@ -910,8 +910,7 @@ int setfilparams(struct vol *vol,
 
     /* 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;
@@ -996,8 +995,8 @@ setfilparam_done:
     }
 
     if (isad) {
-        ad_flush( adp, ADFLAGS_HF );
-        ad_close( adp, ADFLAGS_HF );
+        ad_flush_metadata( adp);
+        ad_close_metadata( adp);
 
     }
 
@@ -1531,7 +1530,7 @@ int         checkAttrib;
                 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;
@@ -1547,23 +1546,11 @@ int         checkAttrib;
     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;
             }
         }
     }
@@ -1720,13 +1707,13 @@ static int reenumerate_loop(struct dirent *de, char *mname _U_, void *data)
             
         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 */
 
index f4e4ba75414d2260d6dc3f29a46e7a4dd08c2330..98e3f2cb612e6581d0072391a1630557dc10e4b1 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * $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.
@@ -384,10 +384,10 @@ int         isdir;
     */
     
     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);
     }
index 1b8b4aaf5cf41557cb0e56bbaef226b607af003f..b5cdd208689162e10c00274872a824a15b38c2df 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * $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.
@@ -1220,9 +1220,7 @@ int               *buflen;
      * .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);
 
@@ -1238,7 +1236,7 @@ int               *buflen;
                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)
@@ -1392,7 +1390,7 @@ int               *buflen;
         data += aint;
     }
     if ( isad ) {
-        ad_close( &ad, ADFLAGS_HF );
+        ad_close_metadata( &ad);
     }
     *buflen = data - buf;
     return( AFP_OK );
index 8e00a31854eab6201350e4a44641d22e41c3ef3b..56d392a117b10f1135838475b2011febc495df32 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * $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.
  *
@@ -411,9 +411,11 @@ extern int ad_refresh     __P((struct adouble *));
 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),
  */ 
index 903ce78a6b04d7a282486c50f972d4cb1585b5a6..6660132a7c72a991d03c5e851f0b2b2aa8caf9cb 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * $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.
@@ -1221,7 +1221,7 @@ int ad_metadata(const char *name, int flags, struct adouble *adp)
     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));
@@ -1229,7 +1229,7 @@ int ad_metadata(const char *name, int flags, struct adouble *adp)
             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");