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