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,10 +19,11 @@
  * 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,10 +56,12 @@
 #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,11 +119,11 @@
 smb_ctx_getaddr(struct smb_ctx *ctx)
 {
         struct nb_ctx   *nbc = ctx->ct_nb;
         struct addrinfo hints, *res;
         char *srvaddr_str;
-        int gaierr, gaierr2;
+        int gaierr;
 
         if (ctx->ct_fullserver == NULL || ctx->ct_fullserver[0] == '\0')
                 return (EAI_NONAME);
 
         if (ctx->ct_addrinfo != NULL) {

@@ -152,32 +155,40 @@
          */
         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);
+        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) {
-                gaierr2 = nbns_getaddrinfo(ctx->ct_fullserver, nbc, &res);
+                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) {