Remove the broken optimization from UnicodeToANSI() that attempted
authorJeffrey Altman <jaltman@secure-endpoints.com>
Mon, 24 Sep 2007 18:49:58 +0000 (18:49 +0000)
committerJeffrey Altman <jaltman@secure-endpoints.com>
Mon, 24 Sep 2007 18:49:58 +0000 (18:49 +0000)
in a stupid way to avoid to WideCharToMultiByte() call by testing
to see if the second byte (not wchar) was NUL.  This test works
for Latin1 but not for anything more interesting.  Always call
WideCharToMultiByte().

I commented out the use of WC_NO_BEST_FIT_CHARS in order to
provide compatibility with Windows.  Windows converts the user
name without that option.

With the current code a principal name consisting of a single
component equivalent to the Greek character Sigma and a realm
name will be converted to S@REALM exactly as the "WhoAmI"
command does.  If WC_NO_BEST_FIT_CHARS was specified, this
string would be converted to "?@REALM".

ticket: 5766

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

src/lib/krb5/ccache/cc_mslsa.c

index c98068c67ba6eb102ee782e8717e0b3fb4a2673e..80c5b4832a3ca5dfc86d55aefd87049621520f72 100644 (file)
@@ -313,25 +313,23 @@ UnicodeToANSI(LPTSTR lpInputString, LPSTR lpszOutputString, int nOutStringLen)
             return FALSE;
         } else {
             if (WideCharToMultiByte(CP_ACP, 
-                                   WC_NO_BEST_FIT_CHARS | WC_COMPOSITECHECK, 
+                                   /* WC_NO_BEST_FIT_CHARS | */ WC_COMPOSITECHECK, 
                                    (LPCWSTR) lpInputString, -1,
                                    lpszOutputString, 
                                    nOutStringLen, NULL, NULL) == 0)
                return FALSE;
         }
     } 
-    else if (((LPBYTE) lpInputString)[1] == '\0')
+    else
     {
         // Looks like unicode, better translate it
         if (WideCharToMultiByte(CP_ACP, 
-                               WC_NO_BEST_FIT_CHARS | WC_COMPOSITECHECK, 
+                               /* WC_NO_BEST_FIT_CHARS | */ WC_COMPOSITECHECK, 
                                (LPCWSTR) lpInputString, -1,
                                lpszOutputString, 
                                nOutStringLen, NULL, NULL) == 0)
            return FALSE;
     }
-    else
-        lstrcpyA(lpszOutputString, (LPSTR) lpInputString);
 
     return TRUE;
 }  // UnicodeToANSI