static void testQuerySecurityPackageInfo(void) { SECURITY_STATUS sec_status; PSecPkgInfo pkg_info; static SEC_CHAR ntlm[] = "NTLM", winetest[] = "Winetest"; trace("Running testQuerySecurityPackageInfo\n"); /* Test with an existing package. Test should pass */ pkg_info = (void *)0xdeadbeef; sec_status = setupPackageA(ntlm, &pkg_info); ok((sec_status == SEC_E_OK) || (sec_status == SEC_E_SECPKG_NOT_FOUND), "Return value of QuerySecurityPackageInfo() shouldn't be %s\n", getSecError(sec_status) ); if (sec_status == SEC_E_OK) { ok(pkg_info != (void *)0xdeadbeef, "wrong pkg_info address %p\n", pkg_info); ok(pkg_info->wVersion == 1, "wVersion always should be 1, but is %d\n", pkg_info->wVersion); /* there is no point in testing pkg_info->cbMaxToken since it varies * between implementations. */ } sec_status = pFreeContextBuffer(pkg_info); ok( sec_status == SEC_E_OK, "Return value of FreeContextBuffer() shouldn't be %s\n", getSecError(sec_status) ); /* Test with a nonexistent package, test should fail */ pkg_info = (void *)0xdeadbeef; sec_status = pQuerySecurityPackageInfoA(winetest, &pkg_info); ok( sec_status != SEC_E_OK, "Return value of QuerySecurityPackageInfo() should not be %s for a nonexistent package\n", getSecError(SEC_E_OK)); ok(pkg_info == (void *)0xdeadbeef, "wrong pkg_info address %p\n", pkg_info); sec_status = pFreeContextBuffer(pkg_info); ok( sec_status == SEC_E_OK, "Return value of FreeContextBuffer() shouldn't be %s\n", getSecError(sec_status) ); }
static void testEnumerateSecurityPackages(void) { SECURITY_STATUS sec_status; ULONG num_packages, i; PSecPkgInfo pkg_info = NULL; trace("Running testEnumerateSecurityPackages\n"); sec_status = pEnumerateSecurityPackagesA(&num_packages, &pkg_info); ok(sec_status == SEC_E_OK, "EnumerateSecurityPackages() should return %ld, not %08lx\n", (LONG)SEC_E_OK, (LONG)sec_status); ok(num_packages > 0, "Number of sec packages should be > 0 ,but is %ld\n", num_packages); ok(pkg_info != NULL, "pkg_info should not be NULL after EnumerateSecurityPackages\n"); trace("Number of packages: %ld\n", num_packages); for(i = 0; i < num_packages; ++i){ trace("%ld: Package \"%s\"\n", i, pkg_info[i].Name); trace("Supported flags:\n"); if(pkg_info[i].fCapabilities & SECPKG_FLAG_INTEGRITY) trace("\tSECPKG_FLAG_INTEGRITY\n"); if(pkg_info[i].fCapabilities & SECPKG_FLAG_PRIVACY) trace("\tSECPKG_FLAG_PRIVACY\n"); if(pkg_info[i].fCapabilities & SECPKG_FLAG_TOKEN_ONLY) trace("\tSECPKG_FLAG_TOKEN_ONLY\n"); if(pkg_info[i].fCapabilities & SECPKG_FLAG_DATAGRAM) trace("\tSECPKG_FLAG_DATAGRAM\n"); if(pkg_info[i].fCapabilities & SECPKG_FLAG_CONNECTION) trace("\tSECPKG_FLAG_CONNECTION\n"); if(pkg_info[i].fCapabilities & SECPKG_FLAG_MULTI_REQUIRED) trace("\tSECPKG_FLAG_MULTI_REQUIRED\n"); if(pkg_info[i].fCapabilities & SECPKG_FLAG_CLIENT_ONLY) trace("\tSECPKG_FLAG_CLIENT_ONLY\n"); if(pkg_info[i].fCapabilities & SECPKG_FLAG_EXTENDED_ERROR) trace("\tSECPKG_FLAG_EXTENDED_ERROR\n"); if(pkg_info[i].fCapabilities & SECPKG_FLAG_IMPERSONATION) trace("\tSECPKG_FLAG_IMPERSONATION\n"); if(pkg_info[i].fCapabilities & SECPKG_FLAG_ACCEPT_WIN32_NAME) trace("\tSECPKG_FLAG_ACCEPT_WIN32_NAME\n"); if(pkg_info[i].fCapabilities & SECPKG_FLAG_STREAM) trace("\tSECPKG_FLAG_STREAM\n"); if(pkg_info[i].fCapabilities & SECPKG_FLAG_READONLY_WITH_CHECKSUM) trace("\tSECPKG_FLAG_READONLY_WITH_CHECKSUM\n"); trace("Comment: %s\n", pkg_info[i].Comment); trace("\n"); } pFreeContextBuffer(pkg_info); }
static SECURITY_STATUS setup_server( struct sspi_data *data, SEC_CHAR *provider ) { SECURITY_STATUS ret; SecPkgInfoA *info; TimeStamp ttl; trace( "setting up server\n" ); ret = pQuerySecurityPackageInfoA( provider, &info ); ok( ret == SEC_E_OK, "QuerySecurityPackageInfo returned %08x\n", ret ); setup_buffers( data, info ); pFreeContextBuffer( info ); ret = pAcquireCredentialsHandleA( NULL, provider, SECPKG_CRED_INBOUND, NULL, NULL, NULL, NULL, &data->cred, &ttl ); ok( ret == SEC_E_OK, "AcquireCredentialsHandleA returned %08x\n", ret ); return ret; }