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 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 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 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