[PATCH 1/9] kerberos: Implement SpQueryContextAttributes.
Dmitry Timoshkov
dmitry at baikal.ru
Wed Jan 24 21:32:52 CST 2018
From: Hans Leidekker <hans at codeweavers.com>
Signed-off-by: Dmitry Timoshkov <dmitry at baikal.ru>
---
dlls/kerberos/krb5_ap.c | 72 ++++++++++++++++++++++++++++++++++++++++---------
1 file changed, 59 insertions(+), 13 deletions(-)
diff --git a/dlls/kerberos/krb5_ap.c b/dlls/kerberos/krb5_ap.c
index b467119363..ca4bf0a236 100644
--- a/dlls/kerberos/krb5_ap.c
+++ b/dlls/kerberos/krb5_ap.c
@@ -67,6 +67,18 @@ WINE_DEFAULT_DEBUG_CHANNEL(kerberos);
| SECPKG_FLAG_RESTRICTED_TOKENS \
| SECPKG_FLAG_APPCONTAINER_CHECKS)
+static WCHAR kerberos_name_W[] = {'K','e','r','b','e','r','o','s',0};
+static WCHAR kerberos_comment_W[] = {'M','i','c','r','o','s','o','f','t',' ','K','e','r','b','e','r','o','s',' ','V','1','.','0',0};
+static const SecPkgInfoW infoW =
+{
+ KERBEROS_CAPS,
+ 1,
+ RPC_C_AUTHN_GSS_KERBEROS,
+ KERBEROS_MAX_BUF,
+ kerberos_name_W,
+ kerberos_comment_W
+};
+
static ULONG kerberos_package_id;
static LSA_DISPATCH_TABLE lsa_dispatch;
@@ -158,18 +170,6 @@ static NTSTATUS NTAPI kerberos_LsaApCallPackageUntrusted(PLSA_CLIENT_REQUEST req
static NTSTATUS NTAPI kerberos_SpGetInfo(SecPkgInfoW *info)
{
- static WCHAR kerberos_name_W[] = {'K','e','r','b','e','r','o','s',0};
- static WCHAR kerberos_comment_W[] = {'M','i','c','r','o','s','o','f','t',' ','K','e','r','b','e','r','o','s',' ','V','1','.','0',0};
- static const SecPkgInfoW infoW =
- {
- KERBEROS_CAPS,
- 1,
- RPC_C_AUTHN_GSS_KERBEROS,
- KERBEROS_MAX_BUF,
- kerberos_name_W,
- kerberos_comment_W
- };
-
TRACE("%p\n", info);
/* LSA will make a copy before forwarding the structure, so
@@ -608,6 +608,52 @@ static NTSTATUS NTAPI kerberos_SpDeleteContext( LSA_SEC_HANDLE context )
#endif
}
+static NTSTATUS NTAPI kerberos_SpQueryContextAttributes( LSA_SEC_HANDLE context, ULONG attribute, void *buffer )
+{
+ TRACE( "(%lx %u %p)\n", context, attribute, buffer );
+
+ if (!context) return SEC_E_INVALID_HANDLE;
+
+ switch (attribute)
+ {
+#define X(x) case (x) : FIXME(#x" stub\n"); break
+ X(SECPKG_ATTR_ACCESS_TOKEN);
+ X(SECPKG_ATTR_AUTHORITY);
+ X(SECPKG_ATTR_DCE_INFO);
+ X(SECPKG_ATTR_KEY_INFO);
+ X(SECPKG_ATTR_LIFESPAN);
+ X(SECPKG_ATTR_NAMES);
+ X(SECPKG_ATTR_NATIVE_NAMES);
+ X(SECPKG_ATTR_PACKAGE_INFO);
+ X(SECPKG_ATTR_PASSWORD_EXPIRY);
+ X(SECPKG_ATTR_SESSION_KEY);
+ X(SECPKG_ATTR_STREAM_SIZES);
+ X(SECPKG_ATTR_TARGET_INFORMATION);
+ case SECPKG_ATTR_SIZES:
+ {
+ SecPkgContext_Sizes *sizes = (SecPkgContext_Sizes *)buffer;
+ sizes->cbMaxToken = KERBEROS_MAX_BUF;
+ sizes->cbMaxSignature = 37;
+ sizes->cbBlockSize = 1;
+ sizes->cbSecurityTrailer = 49;
+ return SEC_E_OK;
+ }
+ case SECPKG_ATTR_NEGOTIATION_INFO:
+ {
+ SecPkgContext_NegotiationInfoW *info = (SecPkgContext_NegotiationInfoW *)buffer;
+ info->PackageInfo = (SecPkgInfoW *)&infoW;
+ info->NegotiationState = SECPKG_NEGOTIATION_COMPLETE;
+ return SEC_E_OK;
+ }
+#undef X
+ default:
+ FIXME( "unknown attribute %u\n", attribute );
+ break;
+ }
+
+ return SEC_E_UNSUPPORTED_FUNCTION;
+}
+
static NTSTATUS NTAPI kerberos_SpInitialize(ULONG_PTR package_id, SECPKG_PARAMETERS *params,
LSA_SECPKG_FUNCTION_TABLE *lsa_function_table)
{
@@ -657,7 +703,7 @@ static SECPKG_FUNCTION_TABLE kerberos_table =
NULL, /* ApplyControlToken */
NULL, /* GetUserInfo */
NULL, /* GetExtendedInformation */
- NULL, /* SpQueryContextAttributes */
+ kerberos_SpQueryContextAttributes,
NULL, /* SpAddCredentials */
NULL, /* SetExtendedInformation */
NULL, /* SetContextAttributes */
--
2.15.1
More information about the wine-devel
mailing list