Author: metze
Date: 2004-08-12 03:23:19 +0000 (Thu, 12 Aug 2004)
New Revision: 1747
WebSVN: http://websvn.samba.org/websvn/changeset.php?rep=samba&path=/&rev=1747&nolog=1
Log:
don't segfault when the spnego mech only use one call from the client to finish

metze

Modified:
   branches/SAMBA_4_0/source/smb_server/sesssetup.c

Changeset:
Modified: branches/SAMBA_4_0/source/smb_server/sesssetup.c
===================================================================
--- branches/SAMBA_4_0/source/smb_server/sesssetup.c    2004-08-12 00:37:01 UTC (rev 
1746)
+++ branches/SAMBA_4_0/source/smb_server/sesssetup.c    2004-08-12 03:23:19 UTC (rev 
1747)
@@ -212,25 +212,35 @@
 
        }
 
+       if (!smb_sess) {
+               vuid = smbsrv_register_session(req->smb_conn, session_info, 
gensec_ctx);
+               if (vuid == UID_FIELD_INVALID) {
+                       return NT_STATUS_ACCESS_DENIED;
+               }
+               smb_sess = smbsrv_session_find(req->smb_conn, vuid);
+               if (!smb_sess) {
+                       return NT_STATUS_FOOBAR;
+               }
+       }
+
        if (NT_STATUS_IS_OK(status)) {
                DATA_BLOB session_key;
                DATA_BLOB null_data_blob = data_blob(NULL, 0);
+               
                status = gensec_session_info(smb_sess->gensec_ctx, 
&smb_sess->session_info);
-               if (NT_STATUS_IS_OK(gensec_session_key(smb_sess->gensec_ctx, 
-                                                      &session_key))) {
+               if (!NT_STATUS_IS_OK(status)) {
+                       return status;
+               }
+               
+               status = gensec_session_key(smb_sess->gensec_ctx, 
+                                                      &session_key);
+               if (NT_STATUS_IS_OK(status)) {
                        srv_setup_signing(req->smb_conn, &session_key, 
&null_data_blob);
                        req->seq_num = 0;
                        req->smb_conn->signing.next_seq_num = 2;
                }
        }
 
-       if (!smb_sess) {
-               vuid = smbsrv_register_session(req->smb_conn, session_info, 
gensec_ctx);
-               if (vuid == UID_FIELD_INVALID) {
-                       return NT_STATUS_ACCESS_DENIED;
-               }
-       }
-
        sess->spnego.out.action = 0;
        sess->spnego.out.vuid = vuid;
        sesssetup_common_strings(req, 

Reply via email to