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)

*** 1,7 **** /* - * Copyright 2011 Nexenta Systems, Inc. All rights reserved. * Copyright (c) 2000, Boris Popov * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions --- 1,6 ----
*** 31,40 **** --- 30,43 ---- * SUCH DAMAGE. * * $Id: print.c,v 1.1.1.3 2001/07/06 22:38:43 conrad Exp $ */ + /* + * Copyright 2018 Nexenta Systems, Inc. All rights reserved. + */ + #include <sys/param.h> #include <sys/ioctl.h> #include <sys/time.h> #include <sys/mount.h> #include <fcntl.h>
*** 52,67 **** #include <netsmb/smb.h> #include <netsmb/smb_lib.h> #include "private.h" int smb_open_printer(struct smb_ctx *ctx, const char *title, int setuplen, int mode) { smbioc_printjob_t ioc; ! int err, tlen, new_fd; int32_t from_fd; tlen = strlen(title); if (tlen >= SMBIOC_MAX_NAME) return (EINVAL); --- 55,82 ---- #include <netsmb/smb.h> #include <netsmb/smb_lib.h> #include "private.h" + /* + * Replacing invalid characters in print job titles: + * + * The spec. is unclear about what characters are allowed in a + * print job title (used with NtCreate) so out of caution this + * makes sure the title contains none of the characters that + * are known to be illegal in a file name component. + */ + static const char invalid_chars[] = SMB_FILENAME_INVALID_CHARS; + int smb_open_printer(struct smb_ctx *ctx, const char *title, int setuplen, int mode) { smbioc_printjob_t ioc; ! char *p; ! int err, tlen; ! int new_fd = -1; int32_t from_fd; tlen = strlen(title); if (tlen >= SMBIOC_MAX_NAME) return (EINVAL);
*** 73,83 **** */ new_fd = smb_open_driver(); if (new_fd < 0) return (errno); from_fd = ctx->ct_dev_fd; ! if (ioctl(new_fd, SMBIOC_DUP_DEV, &from_fd) == -1) { err = errno; goto errout; } /* --- 88,98 ---- */ new_fd = smb_open_driver(); if (new_fd < 0) return (errno); from_fd = ctx->ct_dev_fd; ! if (nsmb_ioctl(new_fd, SMBIOC_DUP_DEV, &from_fd) == -1) { err = errno; goto errout; } /*
*** 86,102 **** bzero(&ioc, sizeof (ioc)); ioc.ioc_setuplen = setuplen; ioc.ioc_prmode = mode; strlcpy(ioc.ioc_title, title, SMBIOC_MAX_NAME); ! if (ioctl(new_fd, SMBIOC_PRINTJOB, &ioc) == -1) { err = errno; goto errout; } return (new_fd); errout: ! close(new_fd); errno = err; return (-1); } --- 101,125 ---- bzero(&ioc, sizeof (ioc)); ioc.ioc_setuplen = setuplen; ioc.ioc_prmode = mode; strlcpy(ioc.ioc_title, title, SMBIOC_MAX_NAME); ! /* ! * The title is used in NtCreate so sanitize by ! * replacing any illegal chars with spaces. ! */ ! for (p = ioc.ioc_title; *p != '\0'; p++) ! if (strchr(invalid_chars, *p) != NULL) ! *p = ' '; ! ! if (nsmb_ioctl(new_fd, SMBIOC_PRINTJOB, &ioc) == -1) { err = errno; goto errout; } return (new_fd); errout: ! nsmb_close(new_fd); errno = err; return (-1); }