1 /*
2 * This file and its contents are supplied under the terms of the
3 * Common Development and Distribution License ("CDDL"), version 1.0.
4 * You may only use this file in accordance with the terms of version
5 * 1.0 of the CDDL.
6 *
7 * A full copy of the text of the CDDL should have accompanied this
8 * source. A copy of the CDDL is also available via the Internet at
9 * http://www.illumos.org/license/CDDL.
10 */
11
12 /*
13 * Copyright 2017 Nexenta Systems, Inc. All rights reserved.
14 */
15
16 /*
17 * This file implements device open/close/ioctl wrappers that
18 * redirect access from the real "nsmb" device to the in-process
19 * device simulation in libfknsmb.
20 */
21
22 #include <sys/param.h>
23 #include <sys/ioctl.h>
24 #include <sys/time.h>
25 #include <sys/mount.h>
26 #include <sys/types.h>
27 #include <sys/byteorder.h>
28
29 #include <fcntl.h>
30 #include <ctype.h>
31 #include <errno.h>
32 #include <stdio.h>
33 #include <string.h>
34 #include <strings.h>
35 #include <stdlib.h>
36 #include <pwd.h>
37 #include <grp.h>
38 #include <unistd.h>
39 #include <libintl.h>
40 #include <assert.h>
41 #include <nss_dbdefs.h>
42
43 #include <cflib.h>
44 #include <netsmb/smb_lib.h>
45 #include <netsmb/netbios.h>
46 #include <netsmb/nb_lib.h>
47 #include <netsmb/smb_dev.h>
48
49 #include <libfknsmb/common/libfknsmb.h>
50
51 #include "smb/charsets.h"
52 #include "smb/private.h"
53
54 int
smb_open_driver(void)55 smb_open_driver(void)
56 {
57 dev32_t dev;
58 int fd;
59 int rc;
60
61 rc = nsmb_drv_open(&dev, 0, 0);
62 if (rc != 0) {
63 errno = rc;
64 return (-1);
65 }
66
67 assert((dev & 0xFFFF0000) != 0);
68 fd = (int)dev;
69
70 return (fd);
71 }
72
73 int
nsmb_ioctl(int fd,int cmd,void * arg)74 nsmb_ioctl(int fd, int cmd, void *arg)
75 {
76 dev32_t dev;
77 int err;
78
79 dev = (dev32_t)fd;
80 assert((dev & 0xFFFF0000) != 0);
81 err = nsmb_drv_ioctl(dev, cmd, (intptr_t)arg, 0);
82 if (err != 0) {
83 errno = err;
84 return (-1);
85 }
86 return (0);
87 }
88
89 int
nsmb_close(int fd)90 nsmb_close(int fd)
91 {
92 dev32_t dev;
93
94 dev = (dev32_t)fd;
95 assert((dev & 0xFFFF0000) != 0);
96 (void) nsmb_drv_close(dev, 0, 0);
97 return (0);
98 }
99