* cc_mslsa.c: Fix thread safety
authorJeffrey Altman <jaltman@secure-endpoints.com>
Thu, 8 Jul 2004 05:25:16 +0000 (05:25 +0000)
committerJeffrey Altman <jaltman@secure-endpoints.com>
Thu, 8 Jul 2004 05:25:16 +0000 (05:25 +0000)
ticket: new

git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@16562 dc483132-0cff-0310-8789-dd5450dbe970

src/lib/krb5/ccache/ChangeLog
src/lib/krb5/ccache/cc_mslsa.c

index a239e0b4abf5be37a013163847d72c44f5976ebc..c303df8ff92e0949c494ad0f0038a124929590d6 100644 (file)
@@ -1,3 +1,7 @@
+2004-07-07  Jeffrey Altman <jaltman@mit.edu>
+
+    * cc_mslsa.c:  Fix thread safety
+
 2004-07-07  Jeffrey Altman <jaltman@mit.edu>
 
     * cc_mslsa.c:  When obtaining a TGT from MSLSA, do not ignore 
index 8fd278ec1afe2d5a01fe4212d31c40d9de1af5d7..0a8b7d33b0f2fbfdecd5590115b09f826c1310ed 100644 (file)
 #define MAX_MSG_SIZE 256
 #define MAX_MSPRINC_SIZE 1024
 
+/* THREAD SAFETY 
+ * The functions is_windows_2000(), is_windows_xp(), and does_retrieve_ticket_cache_ticket()
+ * contain static variables to cache the responses of the tests being performed.  There is
+ * no harm in the test being performed more than once since the result will always be the 
+ * same.
+ */
+
 static BOOL 
 is_windows_2000 (void)
 {
@@ -77,7 +84,6 @@ is_windows_2000 (void)
    if (!fChecked)
    {
        OSVERSIONINFO Version;
-       fChecked = TRUE;
 
        memset (&Version, 0x00, sizeof(Version));
        Version.dwOSVersionInfoSize = sizeof(Version);
@@ -88,6 +94,7 @@ is_windows_2000 (void)
                 Version.dwMajorVersion >= 5)
                fIsWin2K = TRUE;
        }
+       fChecked = TRUE;
    }
 
    return fIsWin2K;
@@ -102,7 +109,6 @@ is_windows_xp (void)
    if (!fChecked)
    {
        OSVERSIONINFO Version;
-       fChecked = TRUE;
 
        memset (&Version, 0x00, sizeof(Version));
        Version.dwOSVersionInfoSize = sizeof(Version);
@@ -114,6 +120,7 @@ is_windows_xp (void)
                  Version.dwMajorVersion == 5 && Version.dwMinorVersion >= 1) )
                fIsWinXP = TRUE;
        }
+       fChecked = TRUE;
    }
 
    return fIsWinXP;
@@ -437,7 +444,6 @@ does_retrieve_ticket_cache_ticket (void)
        PKERB_RETRIEVE_TKT_RESPONSE pTicketResponse = NULL;
        ULONG ResponseSize;
 
-       fChecked = TRUE;
        RequestSize = sizeof(*pTicketRequest) + 1;
 
        if (!PackageConnectLookup(&LogonHandle, &PackageId))
@@ -476,6 +482,7 @@ does_retrieve_ticket_cache_ticket (void)
            if ( SubStatus == STATUS_NOT_SUPPORTED )
                fCachesTicket = TRUE;
        }
+       fChecked = TRUE;
    }
 
    return fCachesTicket;