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