]> arthur.barton.de Git - netatalk.git/blobdiff - etc/afpd/unix.c
Changes made by Michel Jouvin - jouvin@lal.in2p3.fr - 23/11/2000
[netatalk.git] / etc / afpd / unix.c
index 2874abd6ed81f23ecb8fbfd91125c8393dd15037..b64b9b51d416155a6cddee704e685120648ddcb2 100644 (file)
@@ -129,6 +129,40 @@ void utommode( stat, ma )
 }
 
 
+/*
+ * Calculate the mode for a directory using Posix access() calls to
+ * estimate permission, a la mdw.
+ */
+accessmode( path, ma, dir )
+    char               *path;
+    struct maccess     *ma;
+    struct dir         *dir;
+{
+    if ( access( path, R_OK|W_OK|X_OK ) == 0 ) {
+       ma->ma_user = AR_UREAD|AR_UWRITE|AR_USEARCH|AR_UOWN;
+       ma->ma_owner = AR_UREAD|AR_UWRITE|AR_USEARCH;
+    } else if ( access( path, R_OK|X_OK ) == 0 ) {
+       ma->ma_user = AR_UREAD|AR_USEARCH;
+       ma->ma_owner = AR_UREAD|AR_USEARCH;
+    } else {
+       ma->ma_user = ma->ma_owner = 0;
+       if ( access( path, R_OK ) == 0 ) {
+           ma->ma_user |= AR_UREAD;
+           ma->ma_owner |= AR_UREAD;
+       }
+       if ( access( path, X_OK ) == 0 ) {
+           ma->ma_user |= AR_USEARCH;
+           ma->ma_owner |= AR_USEARCH;
+       }
+       if ( access( path, W_OK ) == 0 ) {
+           ma->ma_user |= AR_UWRITE|AR_UOWN;
+           ma->ma_owner |= AR_UWRITE;
+       }
+    }
+
+    return;
+}
+
 int gmem( gid )
     const gid_t        gid;
 {