X-Git-Url: https://wimlib.net/git/?a=blobdiff_plain;f=src%2Fntfs-3g_security.c;h=de26d28b1a3214d683576a0b9c43c110964fd8dc;hb=1dde5fb0d809f2f5e032e4d5241d1cb15ff3eb65;hp=83b92ed99a247ca762d4804e90adc56e972389c9;hpb=902a8bb8de242de08b29b995b69ae3e2a3495f6f;p=wimlib diff --git a/src/ntfs-3g_security.c b/src/ntfs-3g_security.c index 83b92ed9..de26d28b 100644 --- a/src/ntfs-3g_security.c +++ b/src/ntfs-3g_security.c @@ -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;