summaryrefslogtreecommitdiffstats
path: root/src/windows/kfwlogon/kfwlogon.c
diff options
context:
space:
mode:
authorJeffrey Altman <jaltman@secure-endpoints.com>2006-07-24 20:39:31 +0000
committerJeffrey Altman <jaltman@secure-endpoints.com>2006-07-24 20:39:31 +0000
commit71cd4b378a8f310cc336231d8c4a1782c64d9e15 (patch)
treeb976438e02c3a8e2be7fb1b6d155e1ff1761f168 /src/windows/kfwlogon/kfwlogon.c
parentb22afa7d6b255ec294c6ff98fcd336a92bdc118c (diff)
downloadkrb5-71cd4b378a8f310cc336231d8c4a1782c64d9e15.tar.gz
krb5-71cd4b378a8f310cc336231d8c4a1782c64d9e15.tar.xz
krb5-71cd4b378a8f310cc336231d8c4a1782c64d9e15.zip
commit again without using patch to apply the diff
ticket: 4048 git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@18382 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/windows/kfwlogon/kfwlogon.c')
-rw-r--r--src/windows/kfwlogon/kfwlogon.c50
1 files changed, 38 insertions, 12 deletions
diff --git a/src/windows/kfwlogon/kfwlogon.c b/src/windows/kfwlogon/kfwlogon.c
index eddf273412..e815f73e00 100644
--- a/src/windows/kfwlogon/kfwlogon.c
+++ b/src/windows/kfwlogon/kfwlogon.c
@@ -1,5 +1,5 @@
/*
-Copyright 2005 by the Massachusetts Institute of Technology
+Copyright 2005,2006 by the Massachusetts Institute of Technology
All rights reserved.
@@ -292,6 +292,7 @@ VOID KFW_Logon_Event( PWLX_NOTIFICATION_INFO pInfo )
char szLogonId[128] = "";
DWORD count;
char filename[256];
+ char newfilename[256];
char commandline[512];
STARTUPINFO startupinfo;
PROCESS_INFORMATION procinfo;
@@ -321,14 +322,36 @@ VOID KFW_Logon_Event( PWLX_NOTIFICATION_INFO pInfo )
GetWindowsDirectory(filename, sizeof(filename));
}
- if ( strlen(filename) + strlen(szLogonId) + 2 <= sizeof(filename) ) {
- strcat(filename, "\\");
- strcat(filename, szLogonId);
+ if ( strlen(filename) + strlen(szLogonId) + 2 > sizeof(filename) ) {
+ DebugEvent0("KFW_Logon_Event - filename too long");
+ return;
+ }
+
+ strcat(filename, "\\");
+ strcat(filename, szLogonId);
- sprintf(commandline, "kfwcpcc.exe \"%s\"", filename);
+ KFW_set_ccache_dacl(filename, pInfo->hToken);
- GetStartupInfo(&startupinfo);
- if (CreateProcessAsUser( pInfo->hToken,
+ KFW_obtain_user_temp_directory(pInfo->hToken, newfilename, sizeof(newfilename));
+
+ if ( strlen(newfilename) + strlen(szLogonId) + 2 > sizeof(newfilename) ) {
+ DebugEvent0("KFW_Logon_Event - new filename too long");
+ return;
+ }
+
+ strcat(newfilename, "\\");
+ strcat(newfilename, szLogonId);
+
+ if (!MoveFileEx(filename, newfilename,
+ MOVEFILE_COPY_ALLOWED | MOVEFILE_REPLACE_EXISTING | MOVEFILE_WRITE_THROUGH)) {
+ DebugEvent("KFW_Logon_Event - MoveFileEx failed GLE = 0x%x", GetLastError());
+ return;
+ }
+
+ sprintf(commandline, "kfwcpcc.exe \"%s\"", newfilename);
+
+ GetStartupInfo(&startupinfo);
+ if (CreateProcessAsUser( pInfo->hToken,
"kfwcpcc.exe",
commandline,
NULL,
@@ -339,12 +362,15 @@ VOID KFW_Logon_Event( PWLX_NOTIFICATION_INFO pInfo )
NULL,
&startupinfo,
&procinfo))
- {
- WaitForSingleObject(procinfo.hProcess, 30000);
+ {
+ DebugEvent("KFW_Logon_Event - CommandLine %s", commandline);
- CloseHandle(procinfo.hThread);
- CloseHandle(procinfo.hProcess);
- }
+ WaitForSingleObject(procinfo.hProcess, 30000);
+
+ CloseHandle(procinfo.hThread);
+ CloseHandle(procinfo.hProcess);
+ } else {
+ DebugEvent0("KFW_Logon_Event - CreateProcessFailed");
}
DeleteFile(filename);