Blame view

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