diff options
author | Christoph Hellwig <hch@lst.de> | 2005-11-09 00:35:04 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-11-09 10:55:59 -0500 |
commit | 8c744fb83da0771afa04695028e3550b798dad90 (patch) | |
tree | 670896a1c2594965099853a6c992907abb3a886f /fs/ncpfs/ioctl.c | |
parent | e4543eddfd3bf3e0d625841377fa695a519edfd4 (diff) |
[PATCH] add a file_permission helper
A few more callers of permission() just want to check for a different access
pattern on an already open file. This patch adds a wrapper for permission()
that takes a file in preparation of per-mount read-only support and to clean
up the callers a little. The helper is not intended for new code, everything
without the interface set in stone should use vfs_permission()
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'fs/ncpfs/ioctl.c')
-rw-r--r-- | fs/ncpfs/ioctl.c | 34 |
1 files changed, 19 insertions, 15 deletions
diff --git a/fs/ncpfs/ioctl.c b/fs/ncpfs/ioctl.c index 88df79356a1f..fd3efdca5ae3 100644 --- a/fs/ncpfs/ioctl.c +++ b/fs/ncpfs/ioctl.c | |||
@@ -30,11 +30,13 @@ | |||
30 | #define NCP_PACKET_SIZE_INTERNAL 65536 | 30 | #define NCP_PACKET_SIZE_INTERNAL 65536 |
31 | 31 | ||
32 | static int | 32 | static int |
33 | ncp_get_fs_info(struct ncp_server* server, struct inode* inode, struct ncp_fs_info __user *arg) | 33 | ncp_get_fs_info(struct ncp_server * server, struct file *file, |
34 | struct ncp_fs_info __user *arg) | ||
34 | { | 35 | { |
36 | struct inode *inode = file->f_dentry->d_inode; | ||
35 | struct ncp_fs_info info; | 37 | struct ncp_fs_info info; |
36 | 38 | ||
37 | if ((permission(inode, MAY_WRITE, NULL) != 0) | 39 | if ((file_permission(file, MAY_WRITE) != 0) |
38 | && (current->uid != server->m.mounted_uid)) { | 40 | && (current->uid != server->m.mounted_uid)) { |
39 | return -EACCES; | 41 | return -EACCES; |
40 | } | 42 | } |
@@ -58,11 +60,13 @@ ncp_get_fs_info(struct ncp_server* server, struct inode* inode, struct ncp_fs_in | |||
58 | } | 60 | } |
59 | 61 | ||
60 | static int | 62 | static int |
61 | ncp_get_fs_info_v2(struct ncp_server* server, struct inode* inode, struct ncp_fs_info_v2 __user * arg) | 63 | ncp_get_fs_info_v2(struct ncp_server * server, struct file *file, |
64 | struct ncp_fs_info_v2 __user * arg) | ||
62 | { | 65 | { |
66 | struct inode *inode = file->f_dentry->d_inode; | ||
63 | struct ncp_fs_info_v2 info2; | 67 | struct ncp_fs_info_v2 info2; |
64 | 68 | ||
65 | if ((permission(inode, MAY_WRITE, NULL) != 0) | 69 | if ((file_permission(file, MAY_WRITE) != 0) |
66 | && (current->uid != server->m.mounted_uid)) { | 70 | && (current->uid != server->m.mounted_uid)) { |
67 | return -EACCES; | 71 | return -EACCES; |
68 | } | 72 | } |
@@ -190,7 +194,7 @@ int ncp_ioctl(struct inode *inode, struct file *filp, | |||
190 | switch (cmd) { | 194 | switch (cmd) { |
191 | case NCP_IOC_NCPREQUEST: | 195 | case NCP_IOC_NCPREQUEST: |
192 | 196 | ||
193 | if ((permission(inode, MAY_WRITE, NULL) != 0) | 197 | if ((file_permission(filp, MAY_WRITE) != 0) |
194 | && (current->uid != server->m.mounted_uid)) { | 198 | && (current->uid != server->m.mounted_uid)) { |
195 | return -EACCES; | 199 | return -EACCES; |
196 | } | 200 | } |
@@ -245,16 +249,16 @@ int ncp_ioctl(struct inode *inode, struct file *filp, | |||
245 | return ncp_conn_logged_in(inode->i_sb); | 249 | return ncp_conn_logged_in(inode->i_sb); |
246 | 250 | ||
247 | case NCP_IOC_GET_FS_INFO: | 251 | case NCP_IOC_GET_FS_INFO: |
248 | return ncp_get_fs_info(server, inode, argp); | 252 | return ncp_get_fs_info(server, filp, argp); |
249 | 253 | ||
250 | case NCP_IOC_GET_FS_INFO_V2: | 254 | case NCP_IOC_GET_FS_INFO_V2: |
251 | return ncp_get_fs_info_v2(server, inode, argp); | 255 | return ncp_get_fs_info_v2(server, filp, argp); |
252 | 256 | ||
253 | case NCP_IOC_GETMOUNTUID2: | 257 | case NCP_IOC_GETMOUNTUID2: |
254 | { | 258 | { |
255 | unsigned long tmp = server->m.mounted_uid; | 259 | unsigned long tmp = server->m.mounted_uid; |
256 | 260 | ||
257 | if ( (permission(inode, MAY_READ, NULL) != 0) | 261 | if ((file_permission(filp, MAY_READ) != 0) |
258 | && (current->uid != server->m.mounted_uid)) | 262 | && (current->uid != server->m.mounted_uid)) |
259 | { | 263 | { |
260 | return -EACCES; | 264 | return -EACCES; |
@@ -268,7 +272,7 @@ int ncp_ioctl(struct inode *inode, struct file *filp, | |||
268 | { | 272 | { |
269 | struct ncp_setroot_ioctl sr; | 273 | struct ncp_setroot_ioctl sr; |
270 | 274 | ||
271 | if ( (permission(inode, MAY_READ, NULL) != 0) | 275 | if ((file_permission(filp, MAY_READ) != 0) |
272 | && (current->uid != server->m.mounted_uid)) | 276 | && (current->uid != server->m.mounted_uid)) |
273 | { | 277 | { |
274 | return -EACCES; | 278 | return -EACCES; |
@@ -343,7 +347,7 @@ int ncp_ioctl(struct inode *inode, struct file *filp, | |||
343 | 347 | ||
344 | #ifdef CONFIG_NCPFS_PACKET_SIGNING | 348 | #ifdef CONFIG_NCPFS_PACKET_SIGNING |
345 | case NCP_IOC_SIGN_INIT: | 349 | case NCP_IOC_SIGN_INIT: |
346 | if ((permission(inode, MAY_WRITE, NULL) != 0) | 350 | if ((file_permission(filp, MAY_WRITE) != 0) |
347 | && (current->uid != server->m.mounted_uid)) | 351 | && (current->uid != server->m.mounted_uid)) |
348 | { | 352 | { |
349 | return -EACCES; | 353 | return -EACCES; |
@@ -366,7 +370,7 @@ int ncp_ioctl(struct inode *inode, struct file *filp, | |||
366 | return 0; | 370 | return 0; |
367 | 371 | ||
368 | case NCP_IOC_SIGN_WANTED: | 372 | case NCP_IOC_SIGN_WANTED: |
369 | if ( (permission(inode, MAY_READ, NULL) != 0) | 373 | if ((file_permission(filp, MAY_READ) != 0) |
370 | && (current->uid != server->m.mounted_uid)) | 374 | && (current->uid != server->m.mounted_uid)) |
371 | { | 375 | { |
372 | return -EACCES; | 376 | return -EACCES; |
@@ -379,7 +383,7 @@ int ncp_ioctl(struct inode *inode, struct file *filp, | |||
379 | { | 383 | { |
380 | int newstate; | 384 | int newstate; |
381 | 385 | ||
382 | if ( (permission(inode, MAY_WRITE, NULL) != 0) | 386 | if ((file_permission(filp, MAY_WRITE) != 0) |
383 | && (current->uid != server->m.mounted_uid)) | 387 | && (current->uid != server->m.mounted_uid)) |
384 | { | 388 | { |
385 | return -EACCES; | 389 | return -EACCES; |
@@ -400,7 +404,7 @@ int ncp_ioctl(struct inode *inode, struct file *filp, | |||
400 | 404 | ||
401 | #ifdef CONFIG_NCPFS_IOCTL_LOCKING | 405 | #ifdef CONFIG_NCPFS_IOCTL_LOCKING |
402 | case NCP_IOC_LOCKUNLOCK: | 406 | case NCP_IOC_LOCKUNLOCK: |
403 | if ( (permission(inode, MAY_WRITE, NULL) != 0) | 407 | if ((file_permission(filp, MAY_WRITE) != 0) |
404 | && (current->uid != server->m.mounted_uid)) | 408 | && (current->uid != server->m.mounted_uid)) |
405 | { | 409 | { |
406 | return -EACCES; | 410 | return -EACCES; |
@@ -605,7 +609,7 @@ outrel: | |||
605 | #endif /* CONFIG_NCPFS_NLS */ | 609 | #endif /* CONFIG_NCPFS_NLS */ |
606 | 610 | ||
607 | case NCP_IOC_SETDENTRYTTL: | 611 | case NCP_IOC_SETDENTRYTTL: |
608 | if ((permission(inode, MAY_WRITE, NULL) != 0) && | 612 | if ((file_permission(filp, MAY_WRITE) != 0) && |
609 | (current->uid != server->m.mounted_uid)) | 613 | (current->uid != server->m.mounted_uid)) |
610 | return -EACCES; | 614 | return -EACCES; |
611 | { | 615 | { |
@@ -635,7 +639,7 @@ outrel: | |||
635 | so we have this out of switch */ | 639 | so we have this out of switch */ |
636 | if (cmd == NCP_IOC_GETMOUNTUID) { | 640 | if (cmd == NCP_IOC_GETMOUNTUID) { |
637 | __kernel_uid_t uid = 0; | 641 | __kernel_uid_t uid = 0; |
638 | if ((permission(inode, MAY_READ, NULL) != 0) | 642 | if ((file_permission(filp, MAY_READ) != 0) |
639 | && (current->uid != server->m.mounted_uid)) { | 643 | && (current->uid != server->m.mounted_uid)) { |
640 | return -EACCES; | 644 | return -EACCES; |
641 | } | 645 | } |