1/* 2 * ioctl.c 3 * 4 * Copyright (C) 1995, 1996 by Volker Lendecke 5 * Copyright (C) 1997 by Volker Lendecke 6 * 7 * Please add a note about your changes to smbfs in the ChangeLog file. 8 */ 9 10#include <linux/errno.h> 11#include <linux/fs.h> 12#include <linux/ioctl.h> 13#include <linux/time.h> 14#include <linux/mm.h> 15#include <linux/highuid.h> 16#include <linux/net.h> 17 18#include <linux/smb_fs.h> 19#include <linux/smb_mount.h> 20 21#include <asm/uaccess.h> 22 23#include "proto.h" 24 25int 26smb_ioctl(struct inode *inode, struct file *filp, 27 unsigned int cmd, unsigned long arg) 28{ 29 struct smb_sb_info *server = server_from_inode(inode); 30 struct smb_conn_opt opt; 31 int result = -EINVAL; 32 33 switch (cmd) { 34 uid16_t uid16; 35 uid_t uid32; 36 case SMB_IOC_GETMOUNTUID: 37 SET_UID(uid16, server->mnt->mounted_uid); 38 result = put_user(uid16, (uid16_t __user *) arg); 39 break; 40 case SMB_IOC_GETMOUNTUID32: 41 SET_UID(uid32, server->mnt->mounted_uid); 42 result = put_user(uid32, (uid_t __user *) arg); 43 break; 44 45 case SMB_IOC_NEWCONN: 46 /* arg is smb_conn_opt, or NULL if no connection was made */ 47 if (!arg) { 48 result = 0; 49 smb_lock_server(server); 50 server->state = CONN_RETRIED; 51 printk(KERN_ERR "Connection attempt failed! [%d]\n", 52 server->conn_error); 53 smbiod_flush(server); 54 smb_unlock_server(server); 55 break; 56 } 57 58 result = -EFAULT; 59 if (!copy_from_user(&opt, (void __user *)arg, sizeof(opt))) 60 result = smb_newconn(server, &opt); 61 break; 62 default: 63 break; 64 } 65 66 return result; 67} 68