Server gets client's CN
authorAdam Chlipala <adamc@hcoop.net>
Sun, 3 Sep 2006 03:36:50 +0000 (03:36 +0000)
committerAdam Chlipala <adamc@hcoop.net>
Sun, 3 Sep 2006 03:36:50 +0000 (03:36 +0000)
src/openssl.sig
src/openssl.sml

index 3179103..ef6403d 100644 (file)
@@ -42,5 +42,6 @@ val shutdown : listener -> unit
 val accept : listener -> bio option
 
 val peerCN : bio -> string
+val acceptPeerCN : bio -> string
 
 end
index 627b405..ea91848 100644 (file)
@@ -169,7 +169,18 @@ fun accept listener =
     if F_OpenSSL_SML_do_accept.f' listener <= 0 then
        NONE
     else
-       SOME (F_OpenSSL_SML_pop.f' listener)
+       let
+           val bio = F_OpenSSL_SML_pop.f' listener
+       in
+           if C.Ptr.isNull' bio then
+               (ssl_err "Null accepted";
+                raise OpenSSL "Null accepted")
+           else if F_OpenSSL_SML_do_handshake.f' bio <= 0 then
+               (ssl_err "Handshake failed";
+                raise OpenSSL "Handshake failed")
+           else
+               SOME bio
+       end
 
 fun peerCN bio =
     let
@@ -186,4 +197,6 @@ fun peerCN bio =
            ZString.toML' subj
     end
 
+fun acceptPeerCN bio = peerCN (F_OpenSSL_SML_next.f' bio)
+
 end