Implemented default ACL patch (set inherit acls = true on a per share basis).
[sfrench/samba-autobuild/.git] / source3 / smbd / posix_acls.c
index 57a4cb1d37a8b6f64ba6413fa4fea1a287a98d94..34f0b77002991aad8c1990a01a438c81377e6e7f 100644 (file)
@@ -1,6 +1,5 @@
 /*
-   Unix SMB/Netbios implementation.
-   Version 1.9.
+   Unix SMB/CIFS implementation.
    SMB NT Security Descriptor / Unix permission conversion.
    Copyright (C) Jeremy Allison 1994-2000
 
@@ -440,7 +439,8 @@ static BOOL unpack_nt_owners(SMB_STRUCT_STAT *psbuf, uid_t *puser, gid_t *pgrp,
        if (security_info_sent & OWNER_SECURITY_INFORMATION) {
                sid_copy(&owner_sid, psd->owner_sid);
                if (!sid_to_uid( &owner_sid, puser, &sid_type)) {
-                       DEBUG(3,("unpack_nt_owners: unable to validate owner sid.\n"));
+                       DEBUG(3,("unpack_nt_owners: unable to validate owner sid for %s\n",
+                                sid_string_static(&owner_sid)));
                        return False;
                }
        }
@@ -2294,3 +2294,16 @@ int fchmod_acl(int fd, mode_t mode)
        sys_acl_free_acl(posix_acl);
        return ret;
 }
+
+BOOL directory_has_default_acl(const char *fname)
+{
+        SMB_ACL_T dir_acl = sys_acl_get_file( fname, SMB_ACL_TYPE_DEFAULT);
+        BOOL has_acl = False;
+        SMB_ACL_ENTRY_T entry;
+
+        if (dir_acl != NULL && (sys_acl_get_entry(dir_acl, SMB_ACL_FIRST_ENTRY, &entry) == 1))
+                has_acl = True;
+
+        sys_acl_free_acl(dir_acl);
+        return has_acl;
+}