[PATCH 2/3] credui: Implement CredUIParseUserName.
Robert Shearman
rob at codeweavers.com
Fri Jan 26 13:54:19 CST 2007
---
dlls/credui/credui.spec | 2 +-
dlls/credui/credui_main.c | 55
+++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 56 insertions(+), 1 deletions(-)
-------------- next part --------------
diff --git a/dlls/credui/credui.spec b/dlls/credui/credui.spec
index ce54235..20146c7 100644
--- a/dlls/credui/credui.spec
+++ b/dlls/credui/credui.spec
@@ -4,7 +4,7 @@
@ stdcall CredUIConfirmCredentialsW(wstr long)
@ stub CredUIInitControls
@ stub CredUIParseUserNameA
-@ stub CredUIParseUserNameW
+@ stdcall CredUIParseUserNameW(wstr ptr long ptr long)
@ stub CredUIPromptForCredentialsA
@ stdcall CredUIPromptForCredentialsW(ptr wstr ptr long ptr long ptr long ptr long)
@ stub CredUIReadSSOCredA
diff --git a/dlls/credui/credui_main.c b/dlls/credui/credui_main.c
index 6bd6330..5294b21 100644
--- a/dlls/credui/credui_main.c
+++ b/dlls/credui/credui_main.c
@@ -29,6 +29,7 @@ #include "wincred.h"
#include "credui_resources.h"
#include "wine/debug.h"
+#include "wine/unicode.h"
WINE_DEFAULT_DEBUG_CHANNEL(credui);
@@ -177,3 +178,57 @@ DWORD WINAPI CredUIConfirmCredentialsW(P
bConfirm ? "TRUE" : "FALSE");
return ERROR_SUCCESS;
}
+
+/******************************************************************************
+ * CredUIParseUserNameW [CREDUI.@]
+ */
+DWORD WINAPI CredUIParseUserNameW(PCWSTR pszUserName, PWSTR pszUser,
+ ULONG ulMaxUserChars, PWSTR pszDomain,
+ ULONG ulMaxDomainChars)
+{
+ PWSTR p;
+
+ TRACE("(%s, %p, %d, %p, %d)\n", debugstr_w(pszUserName), pszUser,
+ ulMaxUserChars, pszDomain, ulMaxDomainChars);
+
+ if (!pszUserName || !pszUser || !ulMaxUserChars || !pszDomain ||
+ !ulMaxDomainChars)
+ return ERROR_INVALID_PARAMETER;
+
+ /* FIXME: handle marshaled credentials */
+
+ p = strchrW(pszUserName, '\\');
+ if (p)
+ {
+ if (p - pszUserName > ulMaxDomainChars - 1)
+ return ERROR_INSUFFICIENT_BUFFER;
+ if (strlenW(p + 1) > ulMaxUserChars - 1)
+ return ERROR_INSUFFICIENT_BUFFER;
+ strcpyW(pszUser, p + 1);
+ memcpy(pszDomain, pszUserName, (p - pszUserName)*sizeof(WCHAR));
+ pszDomain[p - pszUserName] = '\0';
+
+ return ERROR_SUCCESS;
+ }
+
+ p = strrchrW(pszUserName, '@');
+ if (p)
+ {
+ if (p + 1 - pszUserName > ulMaxUserChars - 1)
+ return ERROR_INSUFFICIENT_BUFFER;
+ if (strlenW(p + 1) > ulMaxDomainChars - 1)
+ return ERROR_INSUFFICIENT_BUFFER;
+ strcpyW(pszDomain, p + 1);
+ memcpy(pszUser, pszUserName, (p - pszUserName)*sizeof(WCHAR));
+ pszUser[p - pszUserName] = '\0';
+
+ return ERROR_SUCCESS;
+ }
+
+ if (strlenW(pszUserName) > ulMaxUserChars - 1)
+ return ERROR_INSUFFICIENT_BUFFER;
+ strcpyW(pszUser, pszUserName);
+ pszDomain[0] = '\0';
+
+ return ERROR_SUCCESS;
+}
More information about the wine-patches
mailing list