]> arthur.barton.de Git - netatalk.git/commitdiff
ad_open with sharemode support
authorFrank Lahm <franklahm@googlemail.com>
Fri, 27 Jan 2012 10:09:02 +0000 (11:09 +0100)
committerFrank Lahm <franklahm@googlemail.com>
Fri, 27 Jan 2012 10:09:02 +0000 (11:09 +0100)
etc/afpd/file.c
include/atalk/adouble.h
libatalk/adouble/ad_lock.c

index a283a684cbcd5fff0062bd134d77c430deaba572..b7d199ca8d4af9b235b6292b803e0c790621d637 100644 (file)
@@ -1267,7 +1267,7 @@ int afp_copyfile(AFPObj *obj, char *ibuf, size_t ibuflen _U_, char *rbuf _U_, si
 
     adp = of_ad(s_vol, s_path, &ad);
 
-    if (ad_open(adp, s_path->u_name, ADFLAGS_DF | ADFLAGS_HF | ADFLAGS_NOHF | ADFLAGS_RDONLY) < 0) {
+    if (ad_open(adp, s_path->u_name, ADFLAGS_DF | ADFLAGS_HF | ADFLAGS_NOHF | ADFLAGS_RDONLY | ADFLAGS_SETSHRMD) < 0) {
         return AFPERR_DENYCONF;
     }
     denyreadset = (ad_testlock(adp, ADEID_DFORK, AD_FILELOCK_DENY_RD) != 0 || 
index e85470242bac887220583a7f08a02b41ce29eba5..78b6fa6f8301b245d46bc15e94d71adaca570eeb 100644 (file)
@@ -276,7 +276,6 @@ struct adouble {
 #define AD_FILELOCK_RSRC_DENY_WR   (AD_FILELOCK_BASE + 6)
 #define AD_FILELOCK_RSRC_DENY_RD   (AD_FILELOCK_BASE + 7)
 
-
 #define AD_FILELOCK_OPEN_NONE      (AD_FILELOCK_BASE + 8)
 #define AD_FILELOCK_RSRC_OPEN_NONE (AD_FILELOCK_BASE + 9)
 
index 714f76359d7a492cc04b1c3419a0b6bed537388a..447cd2ee083d98de88f3657fadf88b4f9b542728 100644 (file)
@@ -493,6 +493,34 @@ static const char *locktypetostr(int type)
     return buf;
 }
 
+static const char *shmdstrfromoff(off_t off)
+{
+    switch (off) {
+    case AD_FILELOCK_OPEN_WR:
+        return "OPEN_WR_DATA";
+    case AD_FILELOCK_OPEN_RD:
+        return "OPEN_RD_DATA";
+    case AD_FILELOCK_RSRC_OPEN_WR:
+        return "OPEN_WR_RSRC";
+    case AD_FILELOCK_RSRC_OPEN_RD:
+        return "OPEN_RD_RSRC";
+    case AD_FILELOCK_DENY_WR:
+        return "DENY_WR_DATA";
+    case AD_FILELOCK_DENY_RD:
+        return "DENY_RD_DATA";
+    case AD_FILELOCK_RSRC_DENY_WR:
+        return "DENY_WR_RSRC";
+    case AD_FILELOCK_RSRC_DENY_RD:
+        return "DENY_RD_RSRC";
+    case AD_FILELOCK_OPEN_NONE:
+        return "OPEN_NONE_DATA";
+    case AD_FILELOCK_RSRC_OPEN_NONE:
+        return "OPEN_NONE_RSRC";
+    default:
+        return "-";
+    }
+}
+
 /******************************************************************************
  * Public functions
  ******************************************************************************/
@@ -506,10 +534,13 @@ int ad_lock(struct adouble *ad, uint32_t eid, int locktype, off_t off, off_t len
     int i;
     int type;  
 
-    LOG(log_debug, logtype_default, "ad_lock(\"%s\", %s, %s, off: %jd, len: %jd): BEGIN",
+    LOG(log_debug, logtype_default, "ad_lock(\"%s\", %s, %s, off: %jd (%s), len: %jd): BEGIN",
         ad->ad_m_name ? ad->ad_m_name : "???",
         eid == ADEID_DFORK ? "data" : "reso",
-        locktypetostr(locktype), (intmax_t)off, (intmax_t)len);
+        locktypetostr(locktype),
+        (intmax_t)off,
+        shmdstrfromoff(off),
+        (intmax_t)len);
 
     if ((locktype & ADLOCK_FILELOCK) && (len != 1))
         /* safety check */