Pull up r17534 from trunk
authorTom Yu <tlyu@mit.edu>
Fri, 2 Dec 2005 21:55:20 +0000 (21:55 +0000)
committerTom Yu <tlyu@mit.edu>
Fri, 2 Dec 2005 21:55:20 +0000 (21:55 +0000)
ticket: 3262
version_fixed: 1.4.4

git-svn-id: svn://anonsvn.mit.edu/krb5/branches/krb5-1-4@17541 dc483132-0cff-0310-8789-dd5450dbe970

src/windows/kfwlogon/kfwcommon.c
src/windows/kfwlogon/kfwlogon.c

index 4074d0da92bc4c7d1a920159cd83ceae0a3ab0c5..251e1436b7033d8ab72756403c0093ed642cd72e 100644 (file)
@@ -289,17 +289,20 @@ static HANDLE hDLL;
 \r
 void DebugEvent0(char *a) \r
 {\r
+#ifdef DEBUG\r
     HANDLE h; char *ptbuf[1];\r
     \r
     h = RegisterEventSource(NULL, KFW_LOGON_EVENT_NAME);\r
     ptbuf[0] = a;\r
     ReportEvent(h, EVENTLOG_INFORMATION_TYPE, 0, 0, NULL, 1, 0, (const char **)ptbuf, NULL);\r
     DeregisterEventSource(h);\r
+#endif\r
 }\r
 \r
 #define MAXBUF_ 512\r
 void DebugEvent(char *b,...) \r
 {\r
+#ifdef DEBUG\r
     HANDLE h; char *ptbuf[1],buf[MAXBUF_+1];\r
     va_list marker;\r
 \r
@@ -311,6 +314,7 @@ void DebugEvent(char *b,...)
     ReportEvent(h, EVENTLOG_INFORMATION_TYPE, 0, 0, NULL, 1, 0, (const char **)ptbuf, NULL);\r
     DeregisterEventSource(h);\r
     va_end(marker);\r
+#endif\r
 }\r
 \r
 void\r
@@ -482,7 +486,8 @@ KFW_get_ccache(krb5_context alt_ctx, krb5_principal principal, krb5_ccache * cc)
 \r
        ccname = (char *)malloc(strlen(pname) + 5);\r
        sprintf(ccname,"API:%s",pname);\r
-        \r
+\r
+       DebugEvent0(ccname);\r
        code = pkrb5_cc_resolve(ctx, ccname, cc);\r
     } else {\r
         code = pkrb5_cc_default(ctx, cc);\r
@@ -685,56 +690,47 @@ KFW_get_cred( char * username,
 {\r
     krb5_context ctx = 0;\r
     krb5_ccache cc = 0;\r
-    char * realm = 0, * userrealm = 0;\r
-    int free_realm = 0;\r
+    char * realm = 0;\r
     krb5_principal principal = 0;\r
     char * pname = 0;\r
     krb5_error_code code;\r
 \r
-    if (!pkrb5_init_context)\r
+    if (!pkrb5_init_context || !username || !password)\r
         return 0;\r
 \r
-    if ( IsDebuggerPresent() ) {\r
-        OutputDebugString("KFW_get_cred for token ");\r
-        OutputDebugString(username);\r
-        OutputDebugString("\n");\r
-    }\r
+    DebugEvent0(username);\r
 \r
     code = pkrb5_init_context(&ctx);\r
     if ( code ) goto cleanup;\r
 \r
     code = pkrb5_get_default_realm(ctx, &realm);\r
 \r
-    userrealm = strchr(username,'@');\r
     if (realm) {\r
-       free_realm = 1;\r
         pname = malloc(strlen(username) + strlen(realm) + 2);\r
-        userrealm = strchr(pname, '@');\r
-        userrealm++;\r
-       strcat(userrealm, realm);\r
+       if (!pname)\r
+           goto cleanup;\r
+       strcpy(pname, username);\r
+       strcat(pname, "@");\r
+       strcat(pname, realm);\r
     } else {\r
-        pname = strdup(username);\r
-        userrealm = strchr(pname, '@');\r
-        userrealm++;\r
-       realm = userrealm;\r
+       goto cleanup;\r
     }\r
     \r
-    if ( IsDebuggerPresent() ) {\r
-        OutputDebugString("Realm: ");\r
-        OutputDebugString(realm);\r
-        OutputDebugString("\n");\r
-    }\r
+    DebugEvent0(realm);\r
+    DebugEvent0(pname);\r
 \r
     code = pkrb5_parse_name(ctx, pname, &principal);\r
     if ( code ) goto cleanup;\r
 \r
+    DebugEvent0("parsed name");\r
     code = KFW_get_ccache(ctx, principal, &cc);\r
     if ( code ) goto cleanup;\r
 \r
+    DebugEvent0("got ccache");\r
     if ( lifetime == 0 )\r
         lifetime = pLeash_get_default_lifetime();\r
 \r
-    if ( password && password[0] ) {\r
+    if ( password[0] ) {\r
         code = KFW_kinit( ctx, cc, HWND_DESKTOP, \r
                           pname, \r
                           password,\r
@@ -744,17 +740,15 @@ KFW_get_cred( char * username,
                           pLeash_get_default_renewable() ? pLeash_get_default_renew_till() : 0,\r
                           pLeash_get_default_noaddresses(),\r
                           pLeash_get_default_publicip());\r
-        if ( IsDebuggerPresent() ) {\r
-            char message[256];\r
-            sprintf(message,"KFW_kinit() returns: %d\n",code);\r
-            OutputDebugString(message);\r
-        }\r
+       DebugEvent0("kinit returned");\r
         if ( code ) goto cleanup;\r
     }\r
 \r
   cleanup:\r
     if ( pname )\r
         free(pname);\r
+    if ( realm )\r
+       pkrb5_free_default_realm(ctx, realm);\r
     if ( cc )\r
         pkrb5_cc_close(ctx, cc);\r
 \r
@@ -784,8 +778,11 @@ KFW_copy_cache_to_system_file(char * user, char * szLogonId)
         GetWindowsDirectory(filename, sizeof(filename));\r
     }\r
 \r
-    if ( strlen(filename) + strlen(szLogonId) + 2 > sizeof(filename) )\r
+    DebugEvent0(filename);\r
+    if ( strlen(filename) + strlen(szLogonId) + 2 > sizeof(filename) ) {\r
+       DebugEvent0("filename buffer too small");\r
         return;\r
+    }\r
 \r
     strcat(filename, "\\");\r
     strcat(filename, szLogonId);    \r
@@ -795,7 +792,7 @@ KFW_copy_cache_to_system_file(char * user, char * szLogonId)
     DeleteFile(filename);\r
 \r
     code = pkrb5_init_context(&ctx);\r
-    if (code) ctx = 0;\r
+    if (code) goto cleanup;\r
 \r
     code = pkrb5_parse_name(ctx, user, &princ);\r
     if (code) goto cleanup;\r
@@ -902,12 +899,6 @@ KFW_destroy_tickets_for_principal(char * user)
     if (!pkrb5_init_context)\r
         return 0;\r
 \r
-    if ( IsDebuggerPresent() ) {\r
-        OutputDebugString("KFW_destroy_tickets_for_user: ");\r
-        OutputDebugString(user);\r
-        OutputDebugString("\n");\r
-    }\r
-\r
     code = pkrb5_init_context(&ctx);\r
     if (code) ctx = 0;\r
 \r
index 70b6234830284f7edf9cc41207a4c47cf7082b3a..eddf273412baf29128e2f4d943f70ec15f9a1f24 100644 (file)
@@ -147,8 +147,11 @@ DWORD APIENTRY NPLogonNotify(
     if ( wcscmp(lpAuthentInfoType,L"MSV1_0:Interactive") && \r
          wcscmp(lpAuthentInfoType,L"Kerberos:Interactive") )\r
     {\r
-        DebugEvent("Unsupported Authentication Info Type: %S",\r
-                   lpAuthentInfoType);\r
+       char msg[64];\r
+       WideCharToMultiByte(CP_ACP, 0, lpAuthentInfoType, 0, \r
+                           msg, sizeof(msg), NULL, NULL);\r
+       msg[sizeof(msg)-1]='\0';\r
+        DebugEvent("NPLogonNotify - Unsupported Authentication Info Type: %s", msg);\r
         return 0;\r
     }\r
 \r
@@ -164,7 +167,7 @@ DWORD APIENTRY NPLogonNotify(
     UnicodeStringToANSI(IL->Password, password, MAX_PASSWORD_LENGTH);\r
     UnicodeStringToANSI(IL->LogonDomainName, logonDomain, MAX_DOMAIN_LENGTH);\r
 \r
-    /* Make sure AD-DOMANS sent from login that is sent to us is stripped */\r
+    /* Make sure AD-DOMAINS sent from login that is sent to us is stripped */\r
     ctemp = strchr(uname, '@');\r
     if (ctemp) *ctemp = 0;\r
 \r
@@ -177,13 +180,15 @@ DWORD APIENTRY NPLogonNotify(
     }\r
 \r
     code = KFW_get_cred(uname, password, 0, &reason);\r
-    DebugEvent("KFW_get_cred  uname=[%s] code=[%d]",uname, code);\r
+    DebugEvent("NPLogonNotify - KFW_get_cred  uname=[%s] code=[%d]",uname, code);\r
     \r
     /* remove any kerberos 5 tickets currently held by the SYSTEM account\r
      * for this user \r
      */\r
-    sprintf(szLogonId,"kfwlogon-%d.%d",lpLogonId->HighPart, lpLogonId->LowPart);\r
-    KFW_copy_cache_to_system_file(uname, szLogonId);\r
+    if (!code) {\r
+       sprintf(szLogonId,"kfwlogon-%d.%d",lpLogonId->HighPart, lpLogonId->LowPart);\r
+       KFW_copy_cache_to_system_file(uname, szLogonId);\r
+    }\r
 \r
     KFW_destroy_tickets_for_principal(uname);\r
 \r
@@ -202,6 +207,11 @@ DWORD APIENTRY NPLogonNotify(
         SetLastError(code);\r
     }\r
 \r
+    if (code)\r
+       DebugEvent0("NPLogonNotify failure");\r
+    else\r
+       DebugEvent0("NPLogonNotify success");\r
+\r
     return code;\r
 }       \r
 \r