]> Pileus Git - ~andy/linux/blobdiff - fs/ncpfs/ioctl.c
Btrfs: pause the space balance when remounting to R/O
[~andy/linux] / fs / ncpfs / ioctl.c
index 6958adfaff084e71fa66a1f7e10a00ad82fd8f60..60426ccb3b6561e25b050f50139df908a6b251fe 100644 (file)
@@ -45,7 +45,7 @@ ncp_get_fs_info(struct ncp_server * server, struct inode *inode,
                return -EINVAL;
        }
        /* TODO: info.addr = server->m.serv_addr; */
-       SET_UID(info.mounted_uid, server->m.mounted_uid);
+       SET_UID(info.mounted_uid, from_kuid_munged(current_user_ns(), server->m.mounted_uid));
        info.connection         = server->connection;
        info.buffer_size        = server->buffer_size;
        info.volume_number      = NCP_FINFO(inode)->volNumber;
@@ -69,7 +69,7 @@ ncp_get_fs_info_v2(struct ncp_server * server, struct inode *inode,
                DPRINTK("info.version invalid: %d\n", info2.version);
                return -EINVAL;
        }
-       info2.mounted_uid   = server->m.mounted_uid;
+       info2.mounted_uid   = from_kuid_munged(current_user_ns(), server->m.mounted_uid);
        info2.connection    = server->connection;
        info2.buffer_size   = server->buffer_size;
        info2.volume_number = NCP_FINFO(inode)->volNumber;
@@ -135,7 +135,7 @@ ncp_get_compat_fs_info_v2(struct ncp_server * server, struct inode *inode,
                DPRINTK("info.version invalid: %d\n", info2.version);
                return -EINVAL;
        }
-       info2.mounted_uid   = server->m.mounted_uid;
+       info2.mounted_uid   = from_kuid_munged(current_user_ns(), server->m.mounted_uid);
        info2.connection    = server->connection;
        info2.buffer_size   = server->buffer_size;
        info2.volume_number = NCP_FINFO(inode)->volNumber;
@@ -348,22 +348,25 @@ static long __ncp_ioctl(struct inode *inode, unsigned int cmd, unsigned long arg
                {
                        u16 uid;
 
-                       SET_UID(uid, server->m.mounted_uid);
+                       SET_UID(uid, from_kuid_munged(current_user_ns(), server->m.mounted_uid));
                        if (put_user(uid, (u16 __user *)argp))
                                return -EFAULT;
                        return 0;
                }
        case NCP_IOC_GETMOUNTUID32:
-               if (put_user(server->m.mounted_uid,
-                            (u32 __user *)argp))
+       {
+               uid_t uid = from_kuid_munged(current_user_ns(), server->m.mounted_uid);
+               if (put_user(uid, (u32 __user *)argp))
                        return -EFAULT;
                return 0;
+       }
        case NCP_IOC_GETMOUNTUID64:
-               if (put_user(server->m.mounted_uid,
-                            (u64 __user *)argp))
+       {
+               uid_t uid = from_kuid_munged(current_user_ns(), server->m.mounted_uid);
+               if (put_user(uid, (u64 __user *)argp))
                        return -EFAULT;
                return 0;
-
+       }
        case NCP_IOC_GETROOT:
                {
                        struct ncp_setroot_ioctl sr;
@@ -808,9 +811,9 @@ outrel:
 
 long ncp_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
 {
-       struct inode *inode = filp->f_dentry->d_inode;
+       struct inode *inode = file_inode(filp);
        struct ncp_server *server = NCP_SERVER(inode);
-       uid_t uid = current_uid();
+       kuid_t uid = current_uid();
        int need_drop_write = 0;
        long ret;
 
@@ -819,12 +822,12 @@ long ncp_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
        case NCP_IOC_CONN_LOGGED_IN:
        case NCP_IOC_SETROOT:
                if (!capable(CAP_SYS_ADMIN)) {
-                       ret = -EACCES;
+                       ret = -EPERM;
                        goto out;
                }
                break;
        }
-       if (server->m.mounted_uid != uid) {
+       if (!uid_eq(server->m.mounted_uid, uid)) {
                switch (cmd) {
                /*
                 * Only mount owner can issue these ioctls.  Information