Author: jra
Date: 2005-10-13 19:45:24 +0000 (Thu, 13 Oct 2005)
New Revision: 10974

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=10974

Log:
Get closer to trying to fix #1825 (PcoketPC spnego bug). Ensure we
set keylen to zero if no spnego.
Jeremy.

Modified:
   branches/SAMBA_3_0/source/smbd/negprot.c


Changeset:
Modified: branches/SAMBA_3_0/source/smbd/negprot.c
===================================================================
--- branches/SAMBA_3_0/source/smbd/negprot.c    2005-10-13 18:58:30 UTC (rev 
10973)
+++ branches/SAMBA_3_0/source/smbd/negprot.c    2005-10-13 19:45:24 UTC (rev 
10974)
@@ -167,7 +167,7 @@
  Generate the spnego negprot reply blob. Return the number of bytes used.
 ****************************************************************************/
 
-static int negprot_spnego(char *p)
+static int negprot_spnego(char *p, uint8 *pkeylen)
 {
        DATA_BLOB blob;
        nstring dos_name;
@@ -212,6 +212,7 @@
 
        if (lp_security() != SEC_ADS && !lp_use_kerberos_keytab()) {
                memcpy(p, guid, 16);
+               *pkeylen = 0;
                return 16;
        } else {
                fstring myname;
@@ -224,6 +225,11 @@
        }
        memcpy(p, blob.data, blob.length);
        len = blob.length;
+       if (len > 256) {
+               DEBUG(0,("negprot_spnego: blob length too long (%d)\n", len));
+               len = 255;
+       }
+       *pkeylen = len;
        data_blob_free(&blob);
        return len;
 }
@@ -324,16 +330,17 @@
                        /* note that we do not send a challenge at all if
                           we are using plaintext */
                        get_challenge(p);
-                       SSVALS(outbuf,smb_vwv16+1,8);
+                       SCVAL(outbuf,smb_vwv16+1,8);
                        p += 8;
                }
                p += srvstr_push(outbuf, p, lp_workgroup(), -1, 
                                 STR_UNICODE|STR_TERMINATE|STR_NOALIGN);
                DEBUG(3,("not using SPNEGO\n"));
        } else {
-               int len = negprot_spnego(p);
+               uint8 keylen;
+               int len = negprot_spnego(p, &keylen);
                
-               SSVALS(outbuf,smb_vwv16+1,len);
+               SCVAL(outbuf,smb_vwv16+1,keylen);
                p += len;
                DEBUG(3,("using SPNEGO\n"));
        }

Reply via email to