--- valid.cc	2009-12-09 01:08:18.000000000 +1300
+++ valid.cc.MSNT	2009-12-07 17:49:38.000000000 +1300
@@ -16,22 +13,24 @@
 #include <string.h>
 #endif
 
+#include "smblib-priv.h"
+#include "smblib.h"
+#include "valid.h"
+
 int
 Valid_User(char *username, char *password, char *server, char *backup, char *domain)
 {
-    int pass_is_precrypted_p = 0;
-    char const *supportedDialects[] = {
-        /*              "PC NETWORK PROGRAM 1.0", */
-        /*              "MICROSOFT NETWORKS 1.03", */
-        /*              "MICROSOFT NETWORKS 3.0", */
-        "LANMAN1.0",
-        "LM1.2X002",
-        "Samba",
-        /*              "NT LM 0.12", */
-        /*              "NT LANMAN 1.0", */
-        NULL
-    };
-    SMB_Handle_Type con;
+    const char *SMB_Prots[] = {"PC NETWORK PROGRAM 1.0",
+                               "MICROSOFT NETWORKS 1.03",
+                               "MICROSOFT NETWORKS 3.0",
+                               "LANMAN1.0",
+                               "LM1.2X002",
+                               "Samba",
+                               "NT LM 0.12",
+                               "NT LANMAN 1.0",
+                               NULL
+                              };
+    void *con;
 
     SMB_Init();
     con = SMB_Connect_Server(NULL, server, domain);
@@ -41,16 +40,11 @@
             return (NTV_SERVER_ERROR);
         }
     }
-    if (SMB_Negotiate(con, supportedDialects) < 0) {	/* An error */
-        SMB_Discon(con, 0);
-        return (NTV_PROTOCOL_ERROR);
-    }
-    /* Test for a server in share level mode do not authenticate against it */
-    if (con->Security == 0) {
+    if (SMB_Negotiate(con, SMB_Prots) < 0) {	/* An error */
         SMB_Discon(con, 0);
         return (NTV_PROTOCOL_ERROR);
     }
-    if (SMB_Logon_Server(con, username, password, domain, pass_is_precrypted_p) < 0) {
+    if (SMB_Logon_Server(con, username, password) < 0) {
         SMB_Discon(con, 0);
         return (NTV_LOGON_ERROR);
     }
--- smblib.cc	2009-12-07 16:43:51.000000000 +1300
+++ smblib.cc.MSNT	2009-12-07 17:21:00.000000000 +1300
@@ -145,17 +145,7 @@
     strcpy(con->LMType, SMBLIB_DEFAULT_LMTYPE);
     con->first_tree = con->last_tree = NULL;
 
-    /* ugh. This is horribly broken. */
-    /*   SMB_Get_My_Name(con -> myname, sizeof(con -> myname)); */
-    /* hacked by Kinkie */
-    if (-1 == gethostname(con->myname, sizeof(con->myname))) {
-        strcpy(con->myname, "unknown");
-    } else {
-        if (NULL != (address = strchr(con->myname, '.'))) {
-            *address = '\0';	/* truncate at first '.' */
-        }
-    }
-
+    SMB_Get_My_Name(con->myname, sizeof(con->myname));
 
     con->port = 0;		/* No port selected */
 
@@ -324,7 +314,7 @@
 
 int
 SMB_Logon_Server(SMB_Handle_Type Con_Handle, char *UserName,
-                 char *PassWord, char *UserDomain, int precrypted)
+                 char *PassWord)
 {
     struct RFCNB_Pkt *pkt;
     int param_len, pkt_len, pass_len;
@@ -340,24 +330,22 @@
         return (SMBlibE_BAD);
 
     }
-    if (precrypted) {
+    strcpy(pword, PassWord);
+#ifdef PAM_SMB_ENC_PASS
+    if (Con_Handle->encrypt_passwords) {
         pass_len = 24;
-        memcpy(pword, PassWord, 24);
-    } else {
-        strcpy(pword, PassWord);
-        if (Con_Handle->encrypt_passwords) {
-            pass_len = 24;
-            SMBencrypt((uchar *) PassWord, (uchar *) Con_Handle->Encrypt_Key, (uchar *) pword);
-        } else
-            pass_len = strlen(pword);
-    }
+        SMBencrypt((uchar *) PassWord, (uchar *) Con_Handle->Encrypt_Key, (uchar *) pword);
+    } else
+#endif
+        pass_len = strlen(pword);
+
 
     /* Now build the correct structure */
 
     if (Con_Handle->protocol < SMB_P_NT1) {
 
         param_len = strlen(UserName) + 1 + pass_len + 1 +
-                    strlen(UserDomain) + 1 +
+                    strlen(Con_Handle->PDomain) + 1 +
                     strlen(Con_Handle->OSName) + 1;
 
         pkt_len = SMB_ssetpLM_len + param_len;
@@ -405,8 +393,8 @@
 
         p = p + 1;
 
-        strcpy(p, UserDomain);
-        p = p + strlen(UserDomain);
+        strcpy(p, Con_Handle->PDomain);
+        p = p + strlen(Con_Handle->PDomain);
         *p = 0;
         p = p + 1;
 
@@ -419,7 +407,7 @@
         /* We don't admit to UNICODE support ... */
 
         param_len = strlen(UserName) + 1 + pass_len +
-                    strlen(UserDomain) + 1 +
+                    strlen(Con_Handle->PDomain) + 1 +
                     strlen(Con_Handle->OSName) + 1 +
                     strlen(Con_Handle->LMType) + 1;
 
@@ -446,7 +434,7 @@
 
         SSVAL(SMB_Hdr(pkt), SMB_ssetpNTLM_mbs_offset, SMBLIB_MAX_XMIT);
         SSVAL(SMB_Hdr(pkt), SMB_ssetpNTLM_mmc_offset, 0);
-        SSVAL(SMB_Hdr(pkt), SMB_ssetpNTLM_vcn_offset, 1); /* Thanks Tridge! */
+        SSVAL(SMB_Hdr(pkt), SMB_ssetpNTLM_vcn_offset, 0);
         SIVAL(SMB_Hdr(pkt), SMB_ssetpNTLM_snk_offset, 0);
         SSVAL(SMB_Hdr(pkt), SMB_ssetpNTLM_cipl_offset, pass_len);
         SSVAL(SMB_Hdr(pkt), SMB_ssetpNTLM_cspl_offset, 0);
@@ -470,8 +458,8 @@
 
         p = p + 1;
 
-        strcpy(p, UserDomain);
-        p = p + strlen(UserDomain);
+        strcpy(p, Con_Handle->PDomain);
+        p = p + strlen(Con_Handle->PDomain);
         *p = 0;
         p = p + 1;
 
@@ -528,15 +516,6 @@
         return (SMBlibE_BAD);
 
     }
-    /** @@@ mdz: check for guest login { **/
-    if (SVAL(SMB_Hdr(pkt), SMB_ssetpr_act_offset) & 0x1) {
-        /* do we allow guest login? NO! */
-        return (SMBlibE_BAD);
-
-    }
-    /** @@@ mdz: } **/
-
-
 #ifdef DEBUG
     fprintf(stderr, "SessSetupAndX response. Action = %i\n",
             SVAL(SMB_Hdr(pkt), SMB_ssetpr_act_offset));

