[26202] in CVS-changelog-for-Kerberos-V5

home help back first fref pref prev next nref lref last post

svn rev #25542: trunk/src/ccapi/lib/win/OldCC/

daemon@ATHENA.MIT.EDU (tlyu@mit.edu)
Mon Dec 12 15:44:43 2011

Date: Mon, 12 Dec 2011 15:44:40 -0500
From: tlyu@mit.edu
Message-Id: <201112122044.pBCKiefI004660@drugstore.mit.edu>
To: cvs-krb5@mit.edu
Reply-To: krbdev@mit.edu
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Errors-To: cvs-krb5-bounces@mit.edu

http://src.mit.edu/fisheye/changelog/krb5/?cs=25542
Commit By: tlyu
Log Message:
ticket: 7050
subject: windows ccapi: use a random challenge to authenticate ccapiserver.

Signed-off-by: Kevin Wasserman <kevin.wasserman@painless-security.com>


Changed Files:
U   trunk/src/ccapi/lib/win/OldCC/client.cxx
Modified: trunk/src/ccapi/lib/win/OldCC/client.cxx
===================================================================
--- trunk/src/ccapi/lib/win/OldCC/client.cxx	2011-12-12 20:44:36 UTC (rev 25541)
+++ trunk/src/ccapi/lib/win/OldCC/client.cxx	2011-12-12 20:44:40 UTC (rev 25542)
@@ -239,9 +239,39 @@
 
 static
 DWORD
+make_random_challenge(DWORD *challenge_out) {
+    HCRYPTPROV provider;
+    DWORD status = 0;
+    *challenge_out = 0;
+    if (!CryptAcquireContext(&provider, NULL, NULL, PROV_RSA_FULL,
+                             CRYPT_VERIFYCONTEXT)) {
+        status = GetLastError();
+        cci_check_error(status);
+        return status;
+        }
+    if (!CryptGenRandom(provider, sizeof(*challenge_out),
+                        (BYTE *)challenge_out)) {
+        status = GetLastError();
+        cci_check_error(status);
+        return status;
+        }
+    if (!CryptReleaseContext(provider, 0)) {
+        /*
+         * Note: even though CryptReleaseContext() failed, we don't really
+         * care since a) we've already successfully obtained our challenge
+         * anyway and b) at least one of the potential errors, "ERROR_BUSY"
+         * does not really seem to be an error at all.  So GetLastError() is
+         * logged for informational purposes only and should not be returned.
+         */
+        cci_check_error(GetLastError());
+        }
+    return status;
+}
+
+static
+DWORD
 authenticate_server(Init::InitInfo& info) {
-    DWORD               challenge       = 17; // XXX - maybe use random number
-    DWORD               desired_response= challenge + 1;
+    DWORD               challenge, desired_response;
     HANDLE              hMap            = 0;
     LPSTR               mem_name        = 0;
     PDWORD              pvalue          = 0;
@@ -255,6 +285,12 @@
     cci_check_error(status);
 
     if (!status) {
+        status = make_random_challenge(&challenge);
+        desired_response = challenge + 1;
+        cci_check_error(status);
+        }
+
+    if (!status) {
         if (isNT()) {
             sa.nLength = sizeof(sa);
             status = alloc_own_security_descriptor_NT(&sa.lpSecurityDescriptor);

_______________________________________________
cvs-krb5 mailing list
cvs-krb5@mit.edu
https://mailman.mit.edu/mailman/listinfo/cvs-krb5

home help back first fref pref prev next nref lref last post