diff options
| author | Ingo Molnar <mingo@elte.hu> | 2008-08-14 06:19:59 -0400 |
|---|---|---|
| committer | Ingo Molnar <mingo@elte.hu> | 2008-08-14 06:19:59 -0400 |
| commit | 8d7ccaa545490cdffdfaff0842436a8dd85cf47b (patch) | |
| tree | 8129b5907161bc6ae26deb3645ce1e280c5e1f51 /fs/ext4/acl.c | |
| parent | b2139aa0eec330c711c5a279db361e5ef1178e78 (diff) | |
| parent | 30a2f3c60a84092c8084dfe788b710f8d0768cd4 (diff) | |
Merge commit 'v2.6.27-rc3' into x86/prototypes
Conflicts:
include/asm-x86/dma-mapping.h
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'fs/ext4/acl.c')
| -rw-r--r-- | fs/ext4/acl.c | 190 |
1 files changed, 95 insertions, 95 deletions
diff --git a/fs/ext4/acl.c b/fs/ext4/acl.c index 3c8dab880d91..694ed6fadcc8 100644 --- a/fs/ext4/acl.c +++ b/fs/ext4/acl.c | |||
| @@ -40,34 +40,35 @@ ext4_acl_from_disk(const void *value, size_t size) | |||
| 40 | acl = posix_acl_alloc(count, GFP_NOFS); | 40 | acl = posix_acl_alloc(count, GFP_NOFS); |
| 41 | if (!acl) | 41 | if (!acl) |
| 42 | return ERR_PTR(-ENOMEM); | 42 | return ERR_PTR(-ENOMEM); |
| 43 | for (n=0; n < count; n++) { | 43 | for (n = 0; n < count; n++) { |
| 44 | ext4_acl_entry *entry = | 44 | ext4_acl_entry *entry = |
| 45 | (ext4_acl_entry *)value; | 45 | (ext4_acl_entry *)value; |
| 46 | if ((char *)value + sizeof(ext4_acl_entry_short) > end) | 46 | if ((char *)value + sizeof(ext4_acl_entry_short) > end) |
| 47 | goto fail; | 47 | goto fail; |
| 48 | acl->a_entries[n].e_tag = le16_to_cpu(entry->e_tag); | 48 | acl->a_entries[n].e_tag = le16_to_cpu(entry->e_tag); |
| 49 | acl->a_entries[n].e_perm = le16_to_cpu(entry->e_perm); | 49 | acl->a_entries[n].e_perm = le16_to_cpu(entry->e_perm); |
| 50 | switch(acl->a_entries[n].e_tag) { | 50 | |
| 51 | case ACL_USER_OBJ: | 51 | switch (acl->a_entries[n].e_tag) { |
| 52 | case ACL_GROUP_OBJ: | 52 | case ACL_USER_OBJ: |
| 53 | case ACL_MASK: | 53 | case ACL_GROUP_OBJ: |
| 54 | case ACL_OTHER: | 54 | case ACL_MASK: |
| 55 | value = (char *)value + | 55 | case ACL_OTHER: |
| 56 | sizeof(ext4_acl_entry_short); | 56 | value = (char *)value + |
| 57 | acl->a_entries[n].e_id = ACL_UNDEFINED_ID; | 57 | sizeof(ext4_acl_entry_short); |
| 58 | break; | 58 | acl->a_entries[n].e_id = ACL_UNDEFINED_ID; |
| 59 | 59 | break; | |
| 60 | case ACL_USER: | 60 | |
| 61 | case ACL_GROUP: | 61 | case ACL_USER: |
| 62 | value = (char *)value + sizeof(ext4_acl_entry); | 62 | case ACL_GROUP: |
| 63 | if ((char *)value > end) | 63 | value = (char *)value + sizeof(ext4_acl_entry); |
| 64 | goto fail; | 64 | if ((char *)value > end) |
| 65 | acl->a_entries[n].e_id = | ||
| 66 | le32_to_cpu(entry->e_id); | ||
| 67 | break; | ||
| 68 | |||
| 69 | default: | ||
| 70 | goto fail; | 65 | goto fail; |
| 66 | acl->a_entries[n].e_id = | ||
| 67 | le32_to_cpu(entry->e_id); | ||
| 68 | break; | ||
| 69 | |||
| 70 | default: | ||
| 71 | goto fail; | ||
| 71 | } | 72 | } |
| 72 | } | 73 | } |
| 73 | if (value != end) | 74 | if (value != end) |
| @@ -96,27 +97,26 @@ ext4_acl_to_disk(const struct posix_acl *acl, size_t *size) | |||
| 96 | return ERR_PTR(-ENOMEM); | 97 | return ERR_PTR(-ENOMEM); |
| 97 | ext_acl->a_version = cpu_to_le32(EXT4_ACL_VERSION); | 98 | ext_acl->a_version = cpu_to_le32(EXT4_ACL_VERSION); |
| 98 | e = (char *)ext_acl + sizeof(ext4_acl_header); | 99 | e = (char *)ext_acl + sizeof(ext4_acl_header); |
| 99 | for (n=0; n < acl->a_count; n++) { | 100 | for (n = 0; n < acl->a_count; n++) { |
| 100 | ext4_acl_entry *entry = (ext4_acl_entry *)e; | 101 | ext4_acl_entry *entry = (ext4_acl_entry *)e; |
| 101 | entry->e_tag = cpu_to_le16(acl->a_entries[n].e_tag); | 102 | entry->e_tag = cpu_to_le16(acl->a_entries[n].e_tag); |
| 102 | entry->e_perm = cpu_to_le16(acl->a_entries[n].e_perm); | 103 | entry->e_perm = cpu_to_le16(acl->a_entries[n].e_perm); |
| 103 | switch(acl->a_entries[n].e_tag) { | 104 | switch (acl->a_entries[n].e_tag) { |
| 104 | case ACL_USER: | 105 | case ACL_USER: |
| 105 | case ACL_GROUP: | 106 | case ACL_GROUP: |
| 106 | entry->e_id = | 107 | entry->e_id = cpu_to_le32(acl->a_entries[n].e_id); |
| 107 | cpu_to_le32(acl->a_entries[n].e_id); | 108 | e += sizeof(ext4_acl_entry); |
| 108 | e += sizeof(ext4_acl_entry); | 109 | break; |
| 109 | break; | 110 | |
| 110 | 111 | case ACL_USER_OBJ: | |
| 111 | case ACL_USER_OBJ: | 112 | case ACL_GROUP_OBJ: |
| 112 | case ACL_GROUP_OBJ: | 113 | case ACL_MASK: |
| 113 | case ACL_MASK: | 114 | case ACL_OTHER: |
| 114 | case ACL_OTHER: | 115 | e += sizeof(ext4_acl_entry_short); |
| 115 | e += sizeof(ext4_acl_entry_short); | 116 | break; |
| 116 | break; | 117 | |
| 117 | 118 | default: | |
| 118 | default: | 119 | goto fail; |
| 119 | goto fail; | ||
| 120 | } | 120 | } |
| 121 | } | 121 | } |
| 122 | return (char *)ext_acl; | 122 | return (char *)ext_acl; |
| @@ -167,23 +167,23 @@ ext4_get_acl(struct inode *inode, int type) | |||
| 167 | if (!test_opt(inode->i_sb, POSIX_ACL)) | 167 | if (!test_opt(inode->i_sb, POSIX_ACL)) |
| 168 | return NULL; | 168 | return NULL; |
| 169 | 169 | ||
| 170 | switch(type) { | 170 | switch (type) { |
| 171 | case ACL_TYPE_ACCESS: | 171 | case ACL_TYPE_ACCESS: |
| 172 | acl = ext4_iget_acl(inode, &ei->i_acl); | 172 | acl = ext4_iget_acl(inode, &ei->i_acl); |
| 173 | if (acl != EXT4_ACL_NOT_CACHED) | 173 | if (acl != EXT4_ACL_NOT_CACHED) |
| 174 | return acl; | 174 | return acl; |
| 175 | name_index = EXT4_XATTR_INDEX_POSIX_ACL_ACCESS; | 175 | name_index = EXT4_XATTR_INDEX_POSIX_ACL_ACCESS; |
| 176 | break; | 176 | break; |
| 177 | 177 | ||
| 178 | case ACL_TYPE_DEFAULT: | 178 | case ACL_TYPE_DEFAULT: |
| 179 | acl = ext4_iget_acl(inode, &ei->i_default_acl); | 179 | acl = ext4_iget_acl(inode, &ei->i_default_acl); |
| 180 | if (acl != EXT4_ACL_NOT_CACHED) | 180 | if (acl != EXT4_ACL_NOT_CACHED) |
| 181 | return acl; | 181 | return acl; |
| 182 | name_index = EXT4_XATTR_INDEX_POSIX_ACL_DEFAULT; | 182 | name_index = EXT4_XATTR_INDEX_POSIX_ACL_DEFAULT; |
| 183 | break; | 183 | break; |
| 184 | 184 | ||
| 185 | default: | 185 | default: |
| 186 | return ERR_PTR(-EINVAL); | 186 | return ERR_PTR(-EINVAL); |
| 187 | } | 187 | } |
| 188 | retval = ext4_xattr_get(inode, name_index, "", NULL, 0); | 188 | retval = ext4_xattr_get(inode, name_index, "", NULL, 0); |
| 189 | if (retval > 0) { | 189 | if (retval > 0) { |
| @@ -201,14 +201,14 @@ ext4_get_acl(struct inode *inode, int type) | |||
| 201 | kfree(value); | 201 | kfree(value); |
| 202 | 202 | ||
| 203 | if (!IS_ERR(acl)) { | 203 | if (!IS_ERR(acl)) { |
| 204 | switch(type) { | 204 | switch (type) { |
| 205 | case ACL_TYPE_ACCESS: | 205 | case ACL_TYPE_ACCESS: |
| 206 | ext4_iset_acl(inode, &ei->i_acl, acl); | 206 | ext4_iset_acl(inode, &ei->i_acl, acl); |
| 207 | break; | 207 | break; |
| 208 | 208 | ||
| 209 | case ACL_TYPE_DEFAULT: | 209 | case ACL_TYPE_DEFAULT: |
| 210 | ext4_iset_acl(inode, &ei->i_default_acl, acl); | 210 | ext4_iset_acl(inode, &ei->i_default_acl, acl); |
| 211 | break; | 211 | break; |
| 212 | } | 212 | } |
| 213 | } | 213 | } |
| 214 | return acl; | 214 | return acl; |
| @@ -232,31 +232,31 @@ ext4_set_acl(handle_t *handle, struct inode *inode, int type, | |||
| 232 | if (S_ISLNK(inode->i_mode)) | 232 | if (S_ISLNK(inode->i_mode)) |
| 233 | return -EOPNOTSUPP; | 233 | return -EOPNOTSUPP; |
| 234 | 234 | ||
| 235 | switch(type) { | 235 | switch (type) { |
| 236 | case ACL_TYPE_ACCESS: | 236 | case ACL_TYPE_ACCESS: |
| 237 | name_index = EXT4_XATTR_INDEX_POSIX_ACL_ACCESS; | 237 | name_index = EXT4_XATTR_INDEX_POSIX_ACL_ACCESS; |
| 238 | if (acl) { | 238 | if (acl) { |
| 239 | mode_t mode = inode->i_mode; | 239 | mode_t mode = inode->i_mode; |
| 240 | error = posix_acl_equiv_mode(acl, &mode); | 240 | error = posix_acl_equiv_mode(acl, &mode); |
| 241 | if (error < 0) | 241 | if (error < 0) |
| 242 | return error; | 242 | return error; |
| 243 | else { | 243 | else { |
| 244 | inode->i_mode = mode; | 244 | inode->i_mode = mode; |
| 245 | ext4_mark_inode_dirty(handle, inode); | 245 | ext4_mark_inode_dirty(handle, inode); |
| 246 | if (error == 0) | 246 | if (error == 0) |
| 247 | acl = NULL; | 247 | acl = NULL; |
| 248 | } | ||
| 249 | } | 248 | } |
| 250 | break; | 249 | } |
| 250 | break; | ||
| 251 | 251 | ||
| 252 | case ACL_TYPE_DEFAULT: | 252 | case ACL_TYPE_DEFAULT: |
| 253 | name_index = EXT4_XATTR_INDEX_POSIX_ACL_DEFAULT; | 253 | name_index = EXT4_XATTR_INDEX_POSIX_ACL_DEFAULT; |
| 254 | if (!S_ISDIR(inode->i_mode)) | 254 | if (!S_ISDIR(inode->i_mode)) |
| 255 | return acl ? -EACCES : 0; | 255 | return acl ? -EACCES : 0; |
| 256 | break; | 256 | break; |
| 257 | 257 | ||
| 258 | default: | 258 | default: |
| 259 | return -EINVAL; | 259 | return -EINVAL; |
| 260 | } | 260 | } |
| 261 | if (acl) { | 261 | if (acl) { |
| 262 | value = ext4_acl_to_disk(acl, &size); | 262 | value = ext4_acl_to_disk(acl, &size); |
| @@ -269,14 +269,14 @@ ext4_set_acl(handle_t *handle, struct inode *inode, int type, | |||
| 269 | 269 | ||
| 270 | kfree(value); | 270 | kfree(value); |
| 271 | if (!error) { | 271 | if (!error) { |
| 272 | switch(type) { | 272 | switch (type) { |
| 273 | case ACL_TYPE_ACCESS: | 273 | case ACL_TYPE_ACCESS: |
| 274 | ext4_iset_acl(inode, &ei->i_acl, acl); | 274 | ext4_iset_acl(inode, &ei->i_acl, acl); |
| 275 | break; | 275 | break; |
| 276 | 276 | ||
| 277 | case ACL_TYPE_DEFAULT: | 277 | case ACL_TYPE_DEFAULT: |
| 278 | ext4_iset_acl(inode, &ei->i_default_acl, acl); | 278 | ext4_iset_acl(inode, &ei->i_default_acl, acl); |
| 279 | break; | 279 | break; |
| 280 | } | 280 | } |
| 281 | } | 281 | } |
| 282 | return error; | 282 | return error; |
| @@ -299,7 +299,7 @@ ext4_check_acl(struct inode *inode, int mask) | |||
| 299 | } | 299 | } |
| 300 | 300 | ||
| 301 | int | 301 | int |
| 302 | ext4_permission(struct inode *inode, int mask, struct nameidata *nd) | 302 | ext4_permission(struct inode *inode, int mask) |
| 303 | { | 303 | { |
| 304 | return generic_permission(inode, mask, ext4_check_acl); | 304 | return generic_permission(inode, mask, ext4_check_acl); |
| 305 | } | 305 | } |
