Print this page
NEX-16824 SMB client connection setup rework
NEX-17232 SMB client reconnect failures
Reviewed by: Evan Layton <evan.layton@nexenta.com>
Reviewed by: Matt Barden <matt.barden@nexenta.com>
and: (improve debug)

*** 19,28 **** --- 19,29 ---- * CDDL HEADER END */ /* * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright 2018 Nexenta Systems, Inc. All rights reserved. */ /* * Functions to get list of addresses (TCP and/or NetBIOS) */
*** 55,64 **** --- 56,67 ---- #include <netsmb/smb_dev.h> #include "charsets.h" #include "private.h" + static char smb_port[16] = "445"; + void dump_addrinfo(struct addrinfo *ai) { int i;
*** 116,126 **** smb_ctx_getaddr(struct smb_ctx *ctx) { struct nb_ctx *nbc = ctx->ct_nb; struct addrinfo hints, *res; char *srvaddr_str; ! int gaierr, gaierr2; if (ctx->ct_fullserver == NULL || ctx->ct_fullserver[0] == '\0') return (EAI_NONAME); if (ctx->ct_addrinfo != NULL) { --- 119,129 ---- smb_ctx_getaddr(struct smb_ctx *ctx) { struct nb_ctx *nbc = ctx->ct_nb; struct addrinfo hints, *res; char *srvaddr_str; ! int gaierr; if (ctx->ct_fullserver == NULL || ctx->ct_fullserver[0] == '\0') return (EAI_NONAME); if (ctx->ct_addrinfo != NULL) {
*** 152,183 **** */ memset(&hints, 0, sizeof (hints)); hints.ai_flags = AI_CANONNAME; hints.ai_family = PF_UNSPEC; hints.ai_socktype = SOCK_STREAM; ! gaierr = getaddrinfo(srvaddr_str, NULL, &hints, &res); if (gaierr == 0) { ctx->ct_addrinfo = res; return (0); } /* * If regular IP name lookup failed, try NetBIOS, * but only if given a valid NetBIOS name and if * NetBIOS name lookup is enabled. */ if (nbc->nb_flags & NBCF_NS_ENABLE) { ! gaierr2 = nbns_getaddrinfo(ctx->ct_fullserver, nbc, &res); if (gaierr2 == 0) { if (res->ai_canonname) strlcpy(ctx->ct_srvname, res->ai_canonname, sizeof (ctx->ct_srvname)); ctx->ct_addrinfo = res; return (0); } } /* * Return the original error from getaddrinfo */ if (smb_verbose) { --- 155,194 ---- */ memset(&hints, 0, sizeof (hints)); hints.ai_flags = AI_CANONNAME; hints.ai_family = PF_UNSPEC; hints.ai_socktype = SOCK_STREAM; ! gaierr = getaddrinfo(srvaddr_str, smb_port, &hints, &res); if (gaierr == 0) { ctx->ct_addrinfo = res; return (0); } /* + * If we really want to support NetBIOS, we should add + * an AF_NETBIOS entry to the address list here. + * For now, let's just skip NetBIOS. + * (Can we just kill NetBIOS? Please? :) + */ + #if 0 /* XXX Just kill NetBIOS? */ + /* * If regular IP name lookup failed, try NetBIOS, * but only if given a valid NetBIOS name and if * NetBIOS name lookup is enabled. */ if (nbc->nb_flags & NBCF_NS_ENABLE) { ! int gaierr2 = nbns_getaddrinfo(ctx->ct_fullserver, nbc, &res); if (gaierr2 == 0) { if (res->ai_canonname) strlcpy(ctx->ct_srvname, res->ai_canonname, sizeof (ctx->ct_srvname)); ctx->ct_addrinfo = res; return (0); } } + #endif /* * Return the original error from getaddrinfo */ if (smb_verbose) {