Print this page
NEX-14666 Need to provide SMB 2.1 Client
NEX-17187 panic in smbfs_acl_store
NEX-17231 smbfs create xattr files finds wrong file
NEX-17224 smbfs lookup EINVAL should be ENOENT
NEX-17260 SMB1 client fails to list directory after NEX-14666
Reviewed by: Evan Layton <evan.layton@nexenta.com>
Reviewed by: Matt Barden <matt.barden@nexenta.com>
Reviewed by: Rick McNeal <rick.mcneal@nexenta.com>
Reviewed by: Saso Kiselkov <saso.kiselkov@nexenta.com>
Reviewed by: Joyce McIntosh <joyce.mcintosh@nexenta.com>
and: (cleanup)
NEX-16818 Add fksmbcl development tool
NEX-17264 SMB client test tp_smbutil_013 fails after NEX-14666
Reviewed by: Evan Layton <evan.layton@nexenta.com>
Reviewed by: Matt Barden <matt.barden@nexenta.com>
and: (fix ref leaks)
| Split |
Close |
| Expand all |
| Collapse all |
--- old/usr/src/lib/libsmbfs/smb/print.c
+++ new/usr/src/lib/libsmbfs/smb/print.c
1 1 /*
2 - * Copyright 2011 Nexenta Systems, Inc. All rights reserved.
3 2 * Copyright (c) 2000, Boris Popov
4 3 * All rights reserved.
5 4 *
6 5 * Redistribution and use in source and binary forms, with or without
7 6 * modification, are permitted provided that the following conditions
8 7 * are met:
9 8 * 1. Redistributions of source code must retain the above copyright
10 9 * notice, this list of conditions and the following disclaimer.
11 10 * 2. Redistributions in binary form must reproduce the above copyright
12 11 * notice, this list of conditions and the following disclaimer in the
13 12 * documentation and/or other materials provided with the distribution.
14 13 * 3. All advertising materials mentioning features or use of this software
15 14 * must display the following acknowledgement:
16 15 * This product includes software developed by Boris Popov.
17 16 * 4. Neither the name of the author nor the names of any co-contributors
18 17 * may be used to endorse or promote products derived from this software
19 18 * without specific prior written permission.
20 19 *
21 20 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
22 21 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 22 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 23 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
25 24 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
↓ open down ↓ |
13 lines elided |
↑ open up ↑ |
26 25 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27 26 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 27 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 28 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 29 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 30 * SUCH DAMAGE.
32 31 *
33 32 * $Id: print.c,v 1.1.1.3 2001/07/06 22:38:43 conrad Exp $
34 33 */
35 34
35 +/*
36 + * Copyright 2018 Nexenta Systems, Inc. All rights reserved.
37 + */
38 +
36 39 #include <sys/param.h>
37 40 #include <sys/ioctl.h>
38 41 #include <sys/time.h>
39 42 #include <sys/mount.h>
40 43 #include <fcntl.h>
41 44 #include <ctype.h>
42 45 #include <errno.h>
43 46 #include <stdio.h>
44 47 #include <string.h>
45 48 #include <strings.h>
46 49 #include <stdlib.h>
|
↓ open down ↓ |
1 lines elided |
↑ open up ↑ |
47 50 #include <pwd.h>
48 51 #include <grp.h>
49 52 #include <unistd.h>
50 53 #include <libintl.h>
51 54
52 55 #include <netsmb/smb.h>
53 56 #include <netsmb/smb_lib.h>
54 57
55 58 #include "private.h"
56 59
60 +/*
61 + * Replacing invalid characters in print job titles:
62 + *
63 + * The spec. is unclear about what characters are allowed in a
64 + * print job title (used with NtCreate) so out of caution this
65 + * makes sure the title contains none of the characters that
66 + * are known to be illegal in a file name component.
67 + */
68 +static const char invalid_chars[] = SMB_FILENAME_INVALID_CHARS;
69 +
57 70 int
58 71 smb_open_printer(struct smb_ctx *ctx, const char *title,
59 72 int setuplen, int mode)
60 73 {
61 74 smbioc_printjob_t ioc;
62 - int err, tlen, new_fd;
75 + char *p;
76 + int err, tlen;
77 + int new_fd = -1;
63 78 int32_t from_fd;
64 79
65 80 tlen = strlen(title);
66 81 if (tlen >= SMBIOC_MAX_NAME)
67 82 return (EINVAL);
68 83
69 84 /*
70 85 * Will represent this SMB-level open as a new
71 86 * open device handle. Get one, then duplicate
72 87 * the driver session and tree bindings.
73 88 */
74 89 new_fd = smb_open_driver();
75 90 if (new_fd < 0)
76 91 return (errno);
77 92 from_fd = ctx->ct_dev_fd;
78 - if (ioctl(new_fd, SMBIOC_DUP_DEV, &from_fd) == -1) {
93 + if (nsmb_ioctl(new_fd, SMBIOC_DUP_DEV, &from_fd) == -1) {
79 94 err = errno;
80 95 goto errout;
81 96 }
82 97
83 98 /*
84 99 * Do the SMB-level open with the new dev handle.
85 100 */
86 101 bzero(&ioc, sizeof (ioc));
87 102 ioc.ioc_setuplen = setuplen;
88 103 ioc.ioc_prmode = mode;
89 104 strlcpy(ioc.ioc_title, title, SMBIOC_MAX_NAME);
90 105
91 - if (ioctl(new_fd, SMBIOC_PRINTJOB, &ioc) == -1) {
106 + /*
107 + * The title is used in NtCreate so sanitize by
108 + * replacing any illegal chars with spaces.
109 + */
110 + for (p = ioc.ioc_title; *p != '\0'; p++)
111 + if (strchr(invalid_chars, *p) != NULL)
112 + *p = ' ';
113 +
114 + if (nsmb_ioctl(new_fd, SMBIOC_PRINTJOB, &ioc) == -1) {
92 115 err = errno;
93 116 goto errout;
94 117 }
95 118
96 119 return (new_fd);
97 120
98 121 errout:
99 - close(new_fd);
122 + nsmb_close(new_fd);
100 123 errno = err;
101 124 return (-1);
102 125 }
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX