Author: jra
Date: 2005-09-16 21:12:25 +0000 (Fri, 16 Sep 2005)
New Revision: 10279

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

Log:
Create the first packet in the NTLMSSP spnego client bind.
Jeremy.

Modified:
   trunk/source/rpc_client/cli_pipe.c


Changeset:
Modified: trunk/source/rpc_client/cli_pipe.c
===================================================================
--- trunk/source/rpc_client/cli_pipe.c  2005-09-16 20:59:12 UTC (rev 10278)
+++ trunk/source/rpc_client/cli_pipe.c  2005-09-16 21:12:25 UTC (rev 10279)
@@ -879,8 +879,42 @@
                                                RPC_HDR_AUTH *pauth_out,
                                                prs_struct *auth_data)
 {
-       /* Placeholder for now until I finish this... JRA. */
-       return NT_STATUS_NO_MEMORY;
+       NTSTATUS nt_status;
+       DATA_BLOB null_blob = data_blob(NULL, 0);
+       DATA_BLOB request = data_blob(NULL, 0);
+       DATA_BLOB spnego_msg = data_blob(NULL, 0);
+
+       /* We may change the pad length before marshalling. */
+       init_rpc_hdr_auth(pauth_out, RPC_SPNEGO_AUTH_TYPE, (int)auth_level, 0, 
1);
+
+       DEBUG(5, ("create_spnego_ntlmssp_auth_rpc_bind_req: Processing NTLMSSP 
Negotiate\n"));
+       nt_status = ntlmssp_update(cli->auth.a_u.ntlmssp_state,
+                                       null_blob,
+                                       &request);
+
+       if (!NT_STATUS_EQUAL(nt_status, NT_STATUS_MORE_PROCESSING_REQUIRED)) {
+               data_blob_free(&request);
+               prs_mem_free(auth_data);
+               return nt_status;
+       }
+
+       /* Wrap this in SPNEGO. */
+       spnego_msg = gen_negTokenInit(OID_NTLMSSP, request);
+
+       data_blob_free(&request);
+
+       /* Auth len in the rpc header doesn't include auth_header. */
+       if (!prs_copy_data_in(auth_data, (char *)spnego_msg.data, 
spnego_msg.length)) {
+               data_blob_free(&spnego_msg);
+               prs_mem_free(auth_data);
+               return NT_STATUS_NO_MEMORY;
+       }
+
+       DEBUG(5, ("create_spnego_ntlmssp_auth_rpc_bind_req: NTLMSSP 
Negotiate:\n"));
+       dump_data(5, (const char *)spnego_msg.data, spnego_msg.length);
+
+       data_blob_free(&spnego_msg);
+       return NT_STATUS_OK;
 }
 
 /*******************************************************************

Reply via email to