pull up r19240 from trunk
authorTom Yu <tlyu@mit.edu>
Fri, 30 Mar 2007 03:08:51 +0000 (03:08 +0000)
committerTom Yu <tlyu@mit.edu>
Fri, 30 Mar 2007 03:08:51 +0000 (03:08 +0000)
 r19240@cathode-dark-space:  jaltman | 2007-03-21 00:48:09 -0400
 ticket: 5469

  When using the Vista SDK version of NTSecAPI.h it is necessary
  to ensure the _WIN32_WINNT have a value of 0x0501 or greater.
  Otherwise, required LSA type declarations are undeclared.

  Provide a registry value that can be set to turn on Application
  Event log messages for debugging.

  HKLM\System\CurrentControlSet\Services\MIT Kerberos\Network Provider
  DWORD "Debug"

  Ensure that KFW_obtain_user_temp_directory() returns a value on
  error.

  Correct the declaration of KFW_copy_cache_to_system_file()
  to match the prototype.

ticket: 5469

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

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

index a3b02eeaba508c3a732f9cf8b2c40c0b4ed9f684..b578d943b0ecabac442520454e236c6162ca8d93 100644 (file)
@@ -24,7 +24,7 @@ SOFTWARE.
 */\r
 \r
 #include "kfwlogon.h"\r
-#include <winbase.h>\r
+#include <windows.h>\r
 #include <Aclapi.h>\r
 #include <userenv.h>\r
 #include <Sddl.h>\r
@@ -291,34 +291,54 @@ static HINSTANCE hCCAPI = 0;
 static DWORD TraceOption = 0;\r
 static HANDLE hDLL;\r
 \r
+BOOL IsDebugLogging(void)\r
+{\r
+    DWORD LSPtype, LSPsize;\r
+    HKEY NPKey;\r
+    DWORD dwDebug = FALSE;\r
+\r
+    if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, \r
+                    "System\\CurrentControlSet\\Services\\MIT Kerberos\\Network Provider", \r
+                    0, KEY_QUERY_VALUE, &NPKey) == ERROR_SUCCESS) {\r
+       LSPsize=sizeof(dwDebug);\r
+       if (RegQueryValueEx(NPKey, "Debug", NULL, &LSPtype, (LPBYTE)&dwDebug, &LSPsize) != ERROR_SUCCESS \r
+           || LSPtype != REG_DWORD)\r
+           dwDebug = FALSE;\r
+\r
+       RegCloseKey (NPKey);\r
+    }\r
+\r
+    return(dwDebug ? TRUE : FALSE);\r
+}\r
+\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
+    if (IsDebugLogging()) {\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
+    }\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
-    h = RegisterEventSource(NULL, KFW_LOGON_EVENT_NAME);\r
-    va_start(marker,b);\r
-    StringCbVPrintf(buf, MAXBUF_+1,b,marker);\r
-    buf[MAXBUF_] = '\0';\r
-    ptbuf[0] = buf;\r
-    ReportEvent(h, EVENTLOG_INFORMATION_TYPE, 0, 0, NULL, 1, 0, (const char **)ptbuf, NULL);\r
-    DeregisterEventSource(h);\r
-    va_end(marker);\r
-#endif\r
+    if (IsDebugLogging()) {\r
+       h = RegisterEventSource(NULL, KFW_LOGON_EVENT_NAME);\r
+       va_start(marker,b);\r
+       StringCbVPrintf(buf, MAXBUF_+1,b,marker);\r
+       buf[MAXBUF_] = '\0';\r
+       ptbuf[0] = buf;\r
+       ReportEvent(h, EVENTLOG_INFORMATION_TYPE, 0, 0, NULL, 1, 0, (const char **)ptbuf, NULL);\r
+       DeregisterEventSource(h);\r
+       va_end(marker);\r
+    }\r
 }\r
 \r
 void\r
@@ -978,7 +998,7 @@ int KFW_obtain_user_temp_directory(HANDLE hUserToken, char *newfilename, int siz
     DWORD dwLen  = 0;\r
 \r
     if (!hUserToken || !newfilename || size <= 0)\r
-       return;\r
+       return 1;\r
 \r
     *newfilename = '\0';\r
 \r
@@ -993,7 +1013,7 @@ int KFW_obtain_user_temp_directory(HANDLE hUserToken, char *newfilename, int siz
 }\r
 \r
 void\r
-KFW_copy_cache_to_system_file(char * user, char * filename)\r
+KFW_copy_cache_to_system_file(const char * user, const char * filename)\r
 {\r
     DWORD count;\r
     char cachename[MAX_PATH + 8] = "FILE:";\r
index a542b81c3ddf0008e4cb430fb4b08ae308f06316..d9bf13d06510246df931b2fceb857969fa9b2d8a 100644 (file)
@@ -27,8 +27,16 @@ SOFTWARE.
 /* We only support VC 1200 and above anyway */\r
 #pragma once\r
 \r
+/* _WIN32_WINNT must be 0x0501 or greater to pull in definition of\r
+ * all required LSA data types when the Vista SDK NtSecAPI.h is used. \r
+ */\r
 #ifndef _WIN32_WINNT\r
-#define _WIN32_WINNT 0x0500\r
+#define _WIN32_WINNT 0x0501\r
+#else\r
+#if _WIN32_WINNT < 0x0501\r
+#undef _WIN32_WINNT \r
+#define _WIN32_WINNT 0x0501\r
+#endif\r
 #endif\r
 \r
 #include <windows.h>\r