diff options
author | Ralf Baechle <ralf@linux-mips.org> | 1997-04-29 21:13:14 +0000 |
---|---|---|
committer | <ralf@linux-mips.org> | 1997-04-29 21:13:14 +0000 |
commit | 19c9bba94152148523ba0f7ef7cffe3d45656b11 (patch) | |
tree | 40b1cb534496a7f1ca0f5c314a523c69f1fee464 /fs/ncpfs/ioctl.c | |
parent | 7206675c40394c78a90e74812bbdbf8cf3cca1be (diff) |
Import of Linux/MIPS 2.1.36
Diffstat (limited to 'fs/ncpfs/ioctl.c')
-rw-r--r-- | fs/ncpfs/ioctl.c | 122 |
1 files changed, 41 insertions, 81 deletions
diff --git a/fs/ncpfs/ioctl.c b/fs/ncpfs/ioctl.c index e7d8aa7db..9b88c3c9f 100644 --- a/fs/ncpfs/ioctl.c +++ b/fs/ncpfs/ioctl.c @@ -14,70 +14,41 @@ #include <linux/mm.h> #include <linux/ncp.h> -int -ncp_ioctl (struct inode * inode, struct file * filp, - unsigned int cmd, unsigned long arg) +int ncp_ioctl(struct inode *inode, struct file *filp, + unsigned int cmd, unsigned long arg) { int result; struct ncp_ioctl_request request; struct ncp_fs_info info; struct ncp_server *server = NCP_SERVER(inode); - /* - * Binary compatible with 1.3.XX releases. - * Take this out in 2.1.0 development series. - * <mec@duracef.shout.net> 12 Mar 1996 - */ - switch(cmd) { - case _IOR('n', 1, unsigned char *): - cmd = NCP_IOC_NCPREQUEST; - break; - case _IOR('u', 1, uid_t): - cmd = NCP_IOC_GETMOUNTUID; - break; - case _IO('l', 1): - cmd = NCP_IOC_CONN_LOGGED_IN; - break; - case _IOWR('i', 1, unsigned char *): - cmd = NCP_IOC_GET_FS_INFO; - break; - } - - switch(cmd) { + switch (cmd) { case NCP_IOC_NCPREQUEST: - if ( (permission(inode, MAY_WRITE) != 0) - && (current->uid != server->m.mounted_uid)) - { + if ((permission(inode, MAY_WRITE) != 0) + && (current->uid != server->m.mounted_uid)) { return -EACCES; } - - if ((result = verify_area(VERIFY_READ, (char *)arg, - sizeof(request))) != 0) - { + if ((result = verify_area(VERIFY_READ, (char *) arg, + sizeof(request))) != 0) { return result; } + copy_from_user(&request, (struct ncp_ioctl_request *) arg, + sizeof(request)); - copy_from_user(&request, (struct ncp_ioctl_request *)arg, - sizeof(request)); - - if ( (request.function > 255) + if ((request.function > 255) || (request.size > - NCP_PACKET_SIZE - sizeof(struct ncp_request_header))) - { + NCP_PACKET_SIZE - sizeof(struct ncp_request_header))) { return -EINVAL; } - - if ((result = verify_area(VERIFY_WRITE, (char *)request.data, - NCP_PACKET_SIZE)) != 0) - { + if ((result = verify_area(VERIFY_WRITE, (char *) request.data, + NCP_PACKET_SIZE)) != 0) { return result; } - ncp_lock_server(server); /* FIXME: We hack around in the server's structures - here to be able to use ncp_request */ + here to be able to use ncp_request */ server->has_subfunction = 0; server->current_size = request.size; @@ -95,66 +66,55 @@ ncp_ioctl (struct inode * inode, struct file * filp, case NCP_IOC_CONN_LOGGED_IN: - if ( (permission(inode, MAY_WRITE) != 0) - && (current->uid != server->m.mounted_uid)) - { + if ((permission(inode, MAY_WRITE) != 0) + && (current->uid != server->m.mounted_uid)) { return -EACCES; } - return ncp_conn_logged_in(server); - + case NCP_IOC_GET_FS_INFO: - if ( (permission(inode, MAY_WRITE) != 0) - && (current->uid != server->m.mounted_uid)) - { + if ((permission(inode, MAY_WRITE) != 0) + && (current->uid != server->m.mounted_uid)) { return -EACCES; } - - if ((result = verify_area(VERIFY_WRITE, (char *)arg, - sizeof(info))) != 0) - { + if ((result = verify_area(VERIFY_WRITE, (char *) arg, + sizeof(info))) != 0) { return result; } + copy_from_user(&info, (struct ncp_fs_info *) arg, + sizeof(info)); - copy_from_user(&info, (struct ncp_fs_info *)arg, - sizeof(info)); - - if (info.version != NCP_GET_FS_INFO_VERSION) - { + if (info.version != NCP_GET_FS_INFO_VERSION) { DPRINTK("info.version invalid: %d\n", info.version); return -EINVAL; } - - info.addr = server->m.serv_addr; - info.mounted_uid = server->m.mounted_uid; - info.connection = server->connection; - info.buffer_size = server->buffer_size; + /* TODO: info.addr = server->m.serv_addr; */ + info.mounted_uid = server->m.mounted_uid; + info.connection = server->connection; + info.buffer_size = server->buffer_size; info.volume_number = NCP_ISTRUCT(inode)->volNumber; - info.directory_id = NCP_ISTRUCT(inode)->DosDirNum; + info.directory_id = NCP_ISTRUCT(inode)->DosDirNum; - copy_to_user((struct ncp_fs_info *)arg, &info, sizeof(info)); - return 0; + copy_to_user((struct ncp_fs_info *) arg, &info, sizeof(info)); + return 0; - case NCP_IOC_GETMOUNTUID: + case NCP_IOC_GETMOUNTUID: - if ( (permission(inode, MAY_READ) != 0) - && (current->uid != server->m.mounted_uid)) - { + if ((permission(inode, MAY_READ) != 0) + && (current->uid != server->m.mounted_uid)) { return -EACCES; } - - if ((result = verify_area(VERIFY_WRITE, (uid_t*) arg, - sizeof(uid_t))) != 0) - { - return result; - } - put_user(server->m.mounted_uid, (uid_t *) arg); - return 0; + if ((result = verify_area(VERIFY_WRITE, (uid_t *) arg, + sizeof(uid_t))) != 0) { + return result; + } + put_user(server->m.mounted_uid, (uid_t *) arg); + return 0; default: return -EINVAL; } - + return -EINVAL; } |