libwinpr-credentials: stubbed credentials management API
authorMarc-André Moreau <marcandre.moreau@gmail.com>
Thu, 11 Oct 2012 14:55:17 +0000 (10:55 -0400)
committerMarc-André Moreau <marcandre.moreau@gmail.com>
Thu, 11 Oct 2012 14:55:17 +0000 (10:55 -0400)
winpr/include/winpr/credentials.h [new file with mode: 0644]
winpr/libwinpr/credentials/CMakeLists.txt [new file with mode: 0644]
winpr/libwinpr/credentials/ModuleOptions.cmake [new file with mode: 0644]
winpr/libwinpr/credentials/credentials.c [new file with mode: 0644]
winpr/libwinpr/credentials/module.def [new file with mode: 0644]

diff --git a/winpr/include/winpr/credentials.h b/winpr/include/winpr/credentials.h
new file mode 100644 (file)
index 0000000..8be262b
--- /dev/null
@@ -0,0 +1,208 @@
+/**
+ * WinPR: Windows Portable Runtime
+ * Credentials Management
+ *
+ * Copyright 2012 Marc-Andre Moreau <marcandre.moreau@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef WINPR_CREDENTIALS_H
+#define WINPR_CREDENTIALS_H
+
+#include <winpr/winpr.h>
+#include <winpr/wtypes.h>
+
+#ifndef _WIN32
+
+#define CRED_SESSION_WILDCARD_NAME_W                   L"*Session"
+#define CRED_SESSION_WILDCARD_NAME_A                   "*Session"
+#define CRED_SESSION_WILDCARD_NAME_LENGTH              (sizeof(CRED_SESSION_WILDCARD_NAME_A) - 1)
+
+#define CRED_MAX_STRING_LENGTH                         256
+#define CRED_MAX_USERNAME_LENGTH                       (256 + 1 + 256)
+#define CRED_MAX_GENERIC_TARGET_NAME_LENGTH            32767
+#define CRED_MAX_DOMAIN_TARGET_NAME_LENGTH             (256 + 1 + 80)
+#define CRED_MAX_VALUE_SIZE                            256
+#define CRED_MAX_ATTRIBUTES                            64
+
+#define CRED_FLAGS_PASSWORD_FOR_CERT                   0x0001
+#define CRED_FLAGS_PROMPT_NOW                          0x0002
+#define CRED_FLAGS_USERNAME_TARGET                     0x0004
+#define CRED_FLAGS_OWF_CRED_BLOB                       0x0008
+#define CRED_FLAGS_VALID_FLAGS                         0x000F
+
+#define CRED_TYPE_GENERIC                              1
+#define CRED_TYPE_DOMAIN_PASSWORD                      2
+#define CRED_TYPE_DOMAIN_CERTIFICATE                   3
+#define CRED_TYPE_DOMAIN_VISIBLE_PASSWORD              4
+#define CRED_TYPE_MAXIMUM                              5
+#define CRED_TYPE_MAXIMUM_EX                           (CRED_TYPE_MAXIMUM + 1000)
+
+#define CRED_MAX_CREDENTIAL_BLOB_SIZE                  512
+
+#define CRED_PERSIST_NONE                              0
+#define CRED_PERSIST_SESSION                           1
+#define CRED_PERSIST_LOCAL_MACHINE                     2
+#define CRED_PERSIST_ENTERPRISE                                3
+
+#define CRED_PRESERVE_CREDENTIAL_BLOB                  0x1
+#define CRED_CACHE_TARGET_INFORMATION                  0x1
+#define CRED_ALLOW_NAME_RESOLUTION                     0x1
+
+typedef struct _CREDENTIAL_ATTRIBUTEA
+{
+       LPSTR Keyword;
+       DWORD Flags;
+       DWORD ValueSize;
+       LPBYTE Value;
+} CREDENTIAL_ATTRIBUTEA, *PCREDENTIAL_ATTRIBUTEA;
+
+typedef struct _CREDENTIAL_ATTRIBUTEW
+{
+       LPWSTR Keyword;
+       DWORD Flags;
+       DWORD ValueSize;
+       LPBYTE Value;
+} CREDENTIAL_ATTRIBUTEW, *PCREDENTIAL_ATTRIBUTEW;
+
+typedef struct _CREDENTIALA
+{
+       DWORD Flags;
+       DWORD Type;
+       LPSTR TargetName;
+       LPSTR Comment;
+       FILETIME LastWritten;
+       DWORD CredentialBlobSize;
+       LPBYTE CredentialBlob;
+       DWORD Persist;
+       DWORD AttributeCount;
+       PCREDENTIAL_ATTRIBUTEA Attributes;
+       LPSTR TargetAlias;
+       LPSTR UserName;
+} CREDENTIALA, *PCREDENTIALA;
+
+typedef struct _CREDENTIALW
+{
+       DWORD Flags;
+       DWORD Type;
+       LPWSTR TargetName;
+       LPWSTR Comment;
+       FILETIME LastWritten;
+       DWORD CredentialBlobSize;
+       LPBYTE CredentialBlob;
+       DWORD Persist;
+       DWORD AttributeCount;
+       PCREDENTIAL_ATTRIBUTEW Attributes;
+       LPWSTR TargetAlias;
+       LPWSTR UserName;
+} CREDENTIALW, *PCREDENTIALW;
+
+typedef struct _CREDENTIAL_TARGET_INFORMATIONA
+{
+       LPSTR TargetName;
+       LPSTR NetbiosServerName;
+       LPSTR DnsServerName;
+       LPSTR NetbiosDomainName;
+       LPSTR DnsDomainName;
+       LPSTR DnsTreeName;
+       LPSTR PackageName;
+       ULONG Flags;
+       DWORD CredTypeCount;
+       LPDWORD CredTypes;
+} CREDENTIAL_TARGET_INFORMATIONA, *PCREDENTIAL_TARGET_INFORMATIONA;
+
+typedef struct _CREDENTIAL_TARGET_INFORMATIONW
+{
+       LPWSTR TargetName;
+       LPWSTR NetbiosServerName;
+       LPWSTR DnsServerName;
+       LPWSTR NetbiosDomainName;
+       LPWSTR DnsDomainName;
+       LPWSTR DnsTreeName;
+       LPWSTR PackageName;
+       ULONG Flags;
+       DWORD CredTypeCount;
+       LPDWORD CredTypes;
+} CREDENTIAL_TARGET_INFORMATIONW, *PCREDENTIAL_TARGET_INFORMATIONW;
+
+typedef enum _CRED_MARSHAL_TYPE
+{
+       CertCredential = 1,
+       UsernameTargetCredential
+} CRED_MARSHAL_TYPE, *PCRED_MARSHAL_TYPE;
+
+typedef enum _CRED_PROTECTION_TYPE
+{
+       CredUnprotected = 0,
+       CredUserProtection = 1,
+       CredTrustedProtection = 2
+} CRED_PROTECTION_TYPE, *PCRED_PROTECTION_TYPE;
+
+WINPR_API BOOL CredWriteW(PCREDENTIALW Credential, DWORD Flags);
+WINPR_API BOOL CredWriteA(PCREDENTIALA Credential, DWORD Flags);
+
+WINPR_API BOOL CredReadW(LPCWSTR TargetName, DWORD Type, DWORD Flags, PCREDENTIALW* Credential);
+WINPR_API BOOL CredReadA(LPCSTR TargetName, DWORD Type, DWORD Flags, PCREDENTIALA* Credential);
+
+WINPR_API BOOL CredEnumerateW(LPCWSTR Filter, DWORD Flags, DWORD* Count, PCREDENTIALW** Credential);
+WINPR_API BOOL CredEnumerateA(LPCSTR Filter, DWORD Flags, DWORD* Count, PCREDENTIALA** Credential);
+
+WINPR_API BOOL CredWriteDomainCredentialsW(PCREDENTIAL_TARGET_INFORMATIONW TargetInfo, PCREDENTIALW Credential, DWORD Flags);
+WINPR_API BOOL CredWriteDomainCredentialsA(PCREDENTIAL_TARGET_INFORMATIONA TargetInfo, PCREDENTIALA Credential, DWORD Flags);
+
+WINPR_API BOOL CredReadDomainCredentialsW(PCREDENTIAL_TARGET_INFORMATIONW TargetInfo, DWORD Flags, DWORD* Count, PCREDENTIALW** Credential);
+WINPR_API BOOL CredReadDomainCredentialsA(PCREDENTIAL_TARGET_INFORMATIONA TargetInfo, DWORD Flags, DWORD* Count, PCREDENTIALA** Credential);
+
+WINPR_API BOOL CredDeleteW(LPCWSTR TargetName, DWORD Type, DWORD Flags);
+WINPR_API BOOL CredDeleteA(LPCSTR TargetName, DWORD Type, DWORD Flags);
+
+WINPR_API BOOL CredRenameW(LPCWSTR OldTargetName, LPCWSTR NewTargetName, DWORD Type, DWORD Flags);
+WINPR_API BOOL CredRenameA(LPCSTR OldTargetName, LPCSTR NewTargetName, DWORD Type, DWORD Flags);
+
+WINPR_API BOOL CredGetTargetInfoW(LPCWSTR TargetName, DWORD Flags, PCREDENTIAL_TARGET_INFORMATIONW* TargetInfo);
+WINPR_API BOOL CredGetTargetInfoA(LPCSTR TargetName, DWORD Flags, PCREDENTIAL_TARGET_INFORMATIONA* TargetInfo);
+
+WINPR_API BOOL CredMarshalCredentialW(CRED_MARSHAL_TYPE CredType, PVOID Credential, LPWSTR* MarshaledCredential);
+WINPR_API BOOL CredMarshalCredentialA(CRED_MARSHAL_TYPE CredType, PVOID Credential, LPSTR* MarshaledCredential);
+
+WINPR_API BOOL CredUnmarshalCredentialW(LPCWSTR MarshaledCredential, PCRED_MARSHAL_TYPE CredType, PVOID* Credential);
+WINPR_API BOOL CredUnmarshalCredentialA(LPCSTR MarshaledCredential, PCRED_MARSHAL_TYPE CredType, PVOID* Credential);
+
+WINPR_API BOOL CredIsMarshaledCredentialW(LPCWSTR MarshaledCredential);
+WINPR_API BOOL CredIsMarshaledCredentialA(LPCSTR MarshaledCredential);
+
+WINPR_API BOOL CredProtectW(BOOL fAsSelf, LPWSTR pszCredentials, DWORD cchCredentials,
+               LPWSTR pszProtectedCredentials, DWORD* pcchMaxChars, CRED_PROTECTION_TYPE* ProtectionType);
+WINPR_API BOOL CredProtectA(BOOL fAsSelf, LPSTR pszCredentials, DWORD cchCredentials,
+               LPSTR pszProtectedCredentials, DWORD* pcchMaxChars, CRED_PROTECTION_TYPE* ProtectionType);
+
+WINPR_API BOOL CredUnprotectW(BOOL fAsSelf, LPWSTR pszProtectedCredentials,
+               DWORD cchCredentials, LPWSTR pszCredentials, DWORD* pcchMaxChars);
+WINPR_API BOOL CredUnprotectA(BOOL fAsSelf, LPSTR pszProtectedCredentials,
+               DWORD cchCredentials, LPSTR pszCredentials, DWORD* pcchMaxChars);
+
+WINPR_API BOOL CredIsProtectedW(LPWSTR pszProtectedCredentials, CRED_PROTECTION_TYPE* pProtectionType);
+WINPR_API BOOL CredIsProtectedA(LPSTR pszProtectedCredentials, CRED_PROTECTION_TYPE* pProtectionType);
+
+WINPR_API BOOL CredFindBestCredentialW(LPCWSTR TargetName, DWORD Type, DWORD Flags, PCREDENTIALW* Credential);
+WINPR_API BOOL CredFindBestCredentialA(LPCSTR TargetName, DWORD Type, DWORD Flags, PCREDENTIALA* Credential);
+
+WINPR_API BOOL CredGetSessionTypes(DWORD MaximumPersistCount, LPDWORD MaximumPersist);
+
+WINPR_API VOID CredFree(PVOID Buffer);
+
+#endif
+
+#endif /* WINPR_CREDENTIALS_H */
+
diff --git a/winpr/libwinpr/credentials/CMakeLists.txt b/winpr/libwinpr/credentials/CMakeLists.txt
new file mode 100644 (file)
index 0000000..91b04bd
--- /dev/null
@@ -0,0 +1,43 @@
+# WinPR: Windows Portable Runtime
+# libwinpr-credentials cmake build script
+#
+# Copyright 2012 Marc-Andre Moreau <marcandre.moreau@gmail.com>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+set(MODULE_NAME "winpr-credentials")
+set(MODULE_PREFIX "WINPR_CREDENTIALS")
+
+set(${MODULE_PREFIX}_SRCS
+       credentials.c)
+
+if(MSVC AND (NOT MONOLITHIC_BUILD))
+       set(${MODULE_PREFIX}_SRCS ${${MODULE_PREFIX}_SRCS} module.def)
+endif()
+
+if(MONOLITHIC_BUILD)
+       add_library(${MODULE_NAME} OBJECT ${${MODULE_PREFIX}_SRCS})
+else()
+       add_library(${MODULE_NAME} ${${MODULE_PREFIX}_SRCS})
+endif()
+
+set_target_properties(${MODULE_NAME} PROPERTIES VERSION ${WINPR_VERSION_FULL} SOVERSION ${WINPR_VERSION} PREFIX "lib")
+
+if(MONOLITHIC_BUILD)
+
+else()
+       install(TARGETS ${MODULE_NAME} DESTINATION ${CMAKE_INSTALL_LIBDIR})
+endif()
+
+set_property(TARGET ${MODULE_NAME} PROPERTY FOLDER "WinPR")
+
diff --git a/winpr/libwinpr/credentials/ModuleOptions.cmake b/winpr/libwinpr/credentials/ModuleOptions.cmake
new file mode 100644 (file)
index 0000000..0b901d7
--- /dev/null
@@ -0,0 +1,9 @@
+
+set(MINWIN_LAYER "1")
+set(MINWIN_GROUP "security")
+set(MINWIN_MAJOR_VERSION "1")
+set(MINWIN_MINOR_VERSION "0")
+set(MINWIN_SHORT_NAME "credentials")
+set(MINWIN_LONG_NAME "Credentials Management Functions")
+set(MODULE_LIBRARY_NAME "api-ms-win-${MINWIN_GROUP}-${MINWIN_SHORT_NAME}-l${MINWIN_LAYER}-${MINWIN_MAJOR_VERSION}-${MINWIN_MINOR_VERSION}")
+
diff --git a/winpr/libwinpr/credentials/credentials.c b/winpr/libwinpr/credentials/credentials.c
new file mode 100644 (file)
index 0000000..bb0ad7b
--- /dev/null
@@ -0,0 +1,199 @@
+/**
+ * WinPR: Windows Portable Runtime
+ * Credentials Management
+ *
+ * Copyright 2012 Marc-Andre Moreau <marcandre.moreau@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <winpr/crt.h>
+
+#include <winpr/credentials.h>
+
+/*
+ * Low-Level Credentials Management Functions:
+ * http://msdn.microsoft.com/en-us/library/windows/desktop/aa374731(v=vs.85).aspx#low_level_credentials_management_functions
+ */
+
+#ifndef _WIN32
+
+BOOL CredWriteW(PCREDENTIALW Credential, DWORD Flags)
+{
+       return TRUE;
+}
+
+BOOL CredWriteA(PCREDENTIALA Credential, DWORD Flags)
+{
+       return TRUE;
+}
+
+BOOL CredReadW(LPCWSTR TargetName, DWORD Type, DWORD Flags, PCREDENTIALW* Credential)
+{
+       return TRUE;
+}
+
+BOOL CredReadA(LPCSTR TargetName, DWORD Type, DWORD Flags, PCREDENTIALA* Credential)
+{
+       return TRUE;
+}
+
+BOOL CredEnumerateW(LPCWSTR Filter, DWORD Flags, DWORD* Count, PCREDENTIALW** Credential)
+{
+       return TRUE;
+}
+
+BOOL CredEnumerateA(LPCSTR Filter, DWORD Flags, DWORD* Count, PCREDENTIALA** Credential)
+{
+       return TRUE;
+}
+
+BOOL CredWriteDomainCredentialsW(PCREDENTIAL_TARGET_INFORMATIONW TargetInfo, PCREDENTIALW Credential, DWORD Flags)
+{
+       return TRUE;
+}
+
+BOOL CredWriteDomainCredentialsA(PCREDENTIAL_TARGET_INFORMATIONA TargetInfo, PCREDENTIALA Credential, DWORD Flags)
+{
+       return TRUE;
+}
+
+BOOL CredReadDomainCredentialsW(PCREDENTIAL_TARGET_INFORMATIONW TargetInfo, DWORD Flags, DWORD* Count, PCREDENTIALW** Credential)
+{
+       return TRUE;
+}
+
+BOOL CredReadDomainCredentialsA(PCREDENTIAL_TARGET_INFORMATIONA TargetInfo, DWORD Flags, DWORD* Count, PCREDENTIALA** Credential)
+{
+       return TRUE;
+}
+
+BOOL CredDeleteW(LPCWSTR TargetName, DWORD Type, DWORD Flags)
+{
+       return TRUE;
+}
+
+BOOL CredDeleteA(LPCSTR TargetName, DWORD Type, DWORD Flags)
+{
+       return TRUE;
+}
+
+BOOL CredRenameW(LPCWSTR OldTargetName, LPCWSTR NewTargetName, DWORD Type, DWORD Flags)
+{
+       return TRUE;
+}
+
+BOOL CredRenameA(LPCSTR OldTargetName, LPCSTR NewTargetName, DWORD Type, DWORD Flags)
+{
+       return TRUE;
+}
+
+BOOL CredGetTargetInfoW(LPCWSTR TargetName, DWORD Flags, PCREDENTIAL_TARGET_INFORMATIONW* TargetInfo)
+{
+       return TRUE;
+}
+
+BOOL CredGetTargetInfoA(LPCSTR TargetName, DWORD Flags, PCREDENTIAL_TARGET_INFORMATIONA* TargetInfo)
+{
+       return TRUE;
+}
+
+BOOL CredMarshalCredentialW(CRED_MARSHAL_TYPE CredType, PVOID Credential, LPWSTR* MarshaledCredential)
+{
+       return TRUE;
+}
+
+BOOL CredMarshalCredentialA(CRED_MARSHAL_TYPE CredType, PVOID Credential, LPSTR* MarshaledCredential)
+{
+       return TRUE;
+}
+
+BOOL CredUnmarshalCredentialW(LPCWSTR MarshaledCredential, PCRED_MARSHAL_TYPE CredType, PVOID* Credential)
+{
+       return TRUE;
+}
+
+BOOL CredUnmarshalCredentialA(LPCSTR MarshaledCredential, PCRED_MARSHAL_TYPE CredType, PVOID* Credential)
+{
+       return TRUE;
+}
+
+BOOL CredIsMarshaledCredentialW(LPCWSTR MarshaledCredential)
+{
+       return TRUE;
+}
+
+BOOL CredIsMarshaledCredentialA(LPCSTR MarshaledCredential)
+{
+       return TRUE;
+}
+
+BOOL CredProtectW(BOOL fAsSelf, LPWSTR pszCredentials, DWORD cchCredentials,
+               LPWSTR pszProtectedCredentials, DWORD* pcchMaxChars, CRED_PROTECTION_TYPE* ProtectionType)
+{
+       return TRUE;
+}
+
+BOOL CredProtectA(BOOL fAsSelf, LPSTR pszCredentials, DWORD cchCredentials,
+               LPSTR pszProtectedCredentials, DWORD* pcchMaxChars, CRED_PROTECTION_TYPE* ProtectionType)
+{
+       return TRUE;
+}
+
+BOOL CredUnprotectW(BOOL fAsSelf, LPWSTR pszProtectedCredentials,
+               DWORD cchCredentials, LPWSTR pszCredentials, DWORD* pcchMaxChars)
+{
+       return TRUE;
+}
+
+BOOL CredUnprotectA(BOOL fAsSelf, LPSTR pszProtectedCredentials,
+               DWORD cchCredentials, LPSTR pszCredentials, DWORD* pcchMaxChars)
+{
+       return TRUE;
+}
+
+BOOL CredIsProtectedW(LPWSTR pszProtectedCredentials, CRED_PROTECTION_TYPE* pProtectionType)
+{
+       return TRUE;
+}
+
+BOOL CredIsProtectedA(LPSTR pszProtectedCredentials, CRED_PROTECTION_TYPE* pProtectionType)
+{
+       return TRUE;
+}
+
+BOOL CredFindBestCredentialW(LPCWSTR TargetName, DWORD Type, DWORD Flags, PCREDENTIALW* Credential)
+{
+       return TRUE;
+}
+
+BOOL CredFindBestCredentialA(LPCSTR TargetName, DWORD Type, DWORD Flags, PCREDENTIALA* Credential)
+{
+       return TRUE;
+}
+
+BOOL CredGetSessionTypes(DWORD MaximumPersistCount, LPDWORD MaximumPersist)
+{
+       return TRUE;
+}
+
+VOID CredFree(PVOID Buffer)
+{
+
+}
+
+#endif
diff --git a/winpr/libwinpr/credentials/module.def b/winpr/libwinpr/credentials/module.def
new file mode 100644 (file)
index 0000000..1d5bc0e
--- /dev/null
@@ -0,0 +1,2 @@
+LIBRARY                "libwinpr-credentials"
+EXPORTS