]> wimlib.net Git - wimlib/blobdiff - src/ntfs-3g_security.c
NTFS capture updates
[wimlib] / src / ntfs-3g_security.c
index 83b92ed99a247ca762d4804e90adc56e972389c9..de26d28b1a3214d683576a0b9c43c110964fd8dc 100644 (file)
@@ -4681,6 +4681,28 @@ int ntfs_set_file_security(struct SECURITY_API *scapi,
        return (res);
 }
 #endif
+
+int ntfs_inode_get_security(ntfs_inode *ni, u32 selection, char *buf,
+                           u32 buflen, u32 *psize)
+{
+       char *attr;
+       int res = 0;
+
+       attr = getsecurityattr(ni->vol, ni);
+       if (attr) {
+               if (feedsecurityattr(attr,selection,
+                               buf,buflen,psize)) {
+                       if (test_nino_flag(ni, v3_Extensions)
+                           && ni->security_id)
+                               res = le32_to_cpu(
+                                       ni->security_id);
+                       else
+                               res = -1;
+               }
+               free(attr);
+       }
+       return (res);
+}
 /*
  *             Check the validity of the ACEs in a DACL or SACL
  */
@@ -4806,8 +4828,7 @@ static BOOL _ntfs_valid_descr(const char *securattr, unsigned int attrsz)
  *
  * Returns nonzero on success
  */
-int _ntfs_set_file_security(ntfs_volume *vol, ntfs_inode *ni,
-                           u32 selection, const char *attr)
+int ntfs_inode_set_security(ntfs_inode *ni, u32 selection, const char *attr)
 {
        const SECURITY_DESCRIPTOR_RELATIVE *phead;
        int attrsz;
@@ -4828,10 +4849,10 @@ int _ntfs_set_file_security(ntfs_volume *vol, ntfs_inode *ni,
        if (!missing
            && (phead->control & SE_SELF_RELATIVE)
            && _ntfs_valid_descr(attr, attrsz)) {
-               oldattr = getsecurityattr(vol, ni);
+               oldattr = getsecurityattr(ni->vol, ni);
                if (oldattr) {
                        if (mergesecurityattr(
-                               vol,
+                               ni->vol,
                                oldattr, attr,
                                selection, ni)) {
                                if (test_nino_flag(ni,
@@ -4955,12 +4976,26 @@ BOOL ntfs_set_file_attributes(struct SECURITY_API *scapi,
 }
 #endif
 
+int ntfs_inode_get_attributes(ntfs_inode *ni)
+{
+       s32 attrib;
+
+       attrib = le32_to_cpu(ni->flags);
+       if (ni->mrec->flags & MFT_RECORD_IS_DIRECTORY)
+               attrib |= const_le32_to_cpu(FILE_ATTR_DIRECTORY);
+       else
+               attrib &= ~const_le32_to_cpu(FILE_ATTR_DIRECTORY);
+       if (!attrib)
+               attrib |= const_le32_to_cpu(FILE_ATTR_NORMAL);
+       return (attrib);
+}
+
 /* 
  * Set attributes of a NTFS file given an inode
  *
  * Returns nonzero on success
  */
-int _ntfs_set_file_attributes(ntfs_inode *ni, s32 attrib)
+int ntfs_inode_set_attributes(ntfs_inode *ni, s32 attrib)
 {
        le32 settable = FILE_ATTR_SETTABLE;
        ATTR_FLAGS dirflags;