2018-05-06 02:08:01 +02:00
|
|
|
--TEST--
|
2018-05-18 21:24:37 +02:00
|
|
|
Test connection keywords for Azure Key Vault for Always Encrypted.
|
2018-05-06 02:08:01 +02:00
|
|
|
--SKIPIF--
|
2018-12-08 00:03:48 +01:00
|
|
|
<?php require('skipif_azure.inc');
|
|
|
|
require('skipif_versions_old.inc'); ?>
|
2018-05-06 02:08:01 +02:00
|
|
|
--FILE--
|
|
|
|
<?php
|
2018-05-25 22:08:35 +02:00
|
|
|
require_once('sqlsrv_ae_azure_key_vault_common.php');
|
2018-05-06 02:08:01 +02:00
|
|
|
|
2018-05-29 23:40:45 +02:00
|
|
|
// This test only applies to Azure Key Vault, or to no encryption at all
|
|
|
|
if ($keystore != 'none' and $keystore != 'akv') {
|
|
|
|
echo "Done.\n";
|
|
|
|
exit();
|
|
|
|
}
|
|
|
|
|
2018-05-06 02:08:01 +02:00
|
|
|
// We will test the direct product (set of all possible combinations) of the following
|
|
|
|
$columnEncryption = ['enabled', 'disabled', 'notvalid', ''];
|
|
|
|
$keyStoreAuthentication = ['KeyVaultPassword', 'KeyVaultClientSecret', 'KeyVaultNothing', ''];
|
2018-05-09 01:16:27 +02:00
|
|
|
$keyStorePrincipalId = [$AKVPrincipalName, $AKVClientID, 'notaname', ''];
|
2018-05-06 02:08:01 +02:00
|
|
|
$keyStoreSecret = [$AKVPassword, $AKVSecret, 'notasecret', ''];
|
|
|
|
|
|
|
|
function checkErrors($errors, ...$codes)
|
2018-05-18 21:24:37 +02:00
|
|
|
{
|
2018-05-17 00:14:47 +02:00
|
|
|
$codeFound = false;
|
2018-05-18 23:05:18 +02:00
|
|
|
|
2018-05-18 21:24:37 +02:00
|
|
|
foreach ($codes as $code) {
|
|
|
|
if ($code[0]==$errors[0][0] and $code[1]==$errors[0][1]) {
|
2018-05-17 00:14:47 +02:00
|
|
|
$codeFound = true;
|
2018-05-18 21:24:37 +02:00
|
|
|
}
|
2018-05-17 00:14:47 +02:00
|
|
|
}
|
2018-05-18 23:05:18 +02:00
|
|
|
|
2018-05-18 21:24:37 +02:00
|
|
|
if ($codeFound == false) {
|
2018-05-17 00:14:47 +02:00
|
|
|
echo "Error: ";
|
|
|
|
print_r($errors);
|
|
|
|
echo "\nExpected: ";
|
|
|
|
print_r($codes);
|
|
|
|
echo "\n";
|
|
|
|
fatalError("Error code not found.\n");
|
2018-05-06 02:08:01 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-05-25 23:42:32 +02:00
|
|
|
// The array of data types corresponding to $small_values in values.php.
|
|
|
|
// SHORT_STRSIZE is defined in values.php as well.
|
|
|
|
$dataTypes = array("char(".SHORT_STRSIZE.")", "varchar(".SHORT_STRSIZE.")", "nvarchar(".SHORT_STRSIZE.")",
|
2018-05-06 02:08:01 +02:00
|
|
|
"decimal", "float", "real", "bigint", "int", "bit"
|
|
|
|
);
|
|
|
|
|
2018-05-09 01:16:27 +02:00
|
|
|
$tableName = "akv_comparison_table";
|
|
|
|
|
2019-12-03 22:28:29 +01:00
|
|
|
// First determine if the server is AE v2 enabled
|
|
|
|
$isEnclaveEnabled = false;
|
|
|
|
$connectionOptions = array("CharacterSet"=>"UTF-8",
|
|
|
|
"database"=>$databaseName,
|
|
|
|
"uid"=>$uid,
|
|
|
|
"pwd"=>$pwd,
|
|
|
|
"ConnectionPooling"=>0);
|
|
|
|
|
|
|
|
$conn = sqlsrv_connect($server, $connectionOptions);
|
|
|
|
if (!$conn) {
|
|
|
|
fatalError("Initial connection failed\n");
|
|
|
|
} else {
|
|
|
|
$query = "SELECT [name], [value], [value_in_use] FROM sys.configurations WHERE [name] = 'column encryption enclave type';";
|
|
|
|
$stmt = sqlsrv_query($conn, $query);
|
|
|
|
$info = sqlsrv_fetch_array($stmt);
|
5.8.0 RTW dev to master (#1087)
* Fixed the potential error reported by Prefast code analysis
* Use SQLSRV_ASSERT for checking NULL ptrs
* For these AKV tests check env despite not AE connected
* Added the driver option to run functional tests
* Fixed connection pooling tests for more than one ODBC drivers
* added driver option to pdo isPooled.php
* Removed win32 ifdefs re connection resiliency (#802)
* Set the driver argument for getDSN to null by default (#798)
* Added the driver argument to getDSN
* Dropped the driver argument but set to null as default
* Removed the AE condition in locale support
* Modified the AE condition for locale support
* Changed int to SQLLEN to avoid infinite loop (#806)
* Version 5.3.0 (#803)
* Version 5.3.0
* Fixed the wrong replacements
* Added comments block to m4 files
* Use dnl for comments
* Modified AE fetch phptypes test to insert only one row at a time and loop through php types (#801)
* Modified AE fetch phptypes test to insert only one row at a time and loop through php types
* Fixed formatting
* Streamlined two very similar large column name tests (#807)
* Streamlined two very similar large column name tests
* Changed the EOL
* Updates to change log and readme (#811)
* Updates to change log and readme
* Dropped support for Ubuntu 17
* Modified as per review comments
* Fixed connection resiliency tests for Unix, updated AppVeyor for ODBC 17.2
* Fixed expected output
* Fixed output and skipifs
* Fixed skipifs and output
* Fixed driver name
* Updated installation instructions and sample script (#813)
* Updated instructions and sample test for 5.3.0 RTW
* Fixed sample code to adhere to php coding standard
* Fixed cases and spaces
* Modified NOTE for UB 18.04 based on review comments
* Added 'exit'
* Modified change log and readme based on review to PR 811
* Applied review comments
* build output to debug appveyor failure
* removed debug output
* Streamlined two very similar large column name tests (#815)
* Streamlined two very similar large column name tests
* Added random number of test table names to avoid operand clash issues
* Replaced to with for based on review
* Changelog updated
* changelog updated, test skipif changed to run on unix platforms
* Fixed skipif typo
* Fixed typo in skipif for pdo
* Fixed some output for Travis
* Moved error checking inside pdo connres tests
* Added links back to changelog
* Fixed output for sqlsrv connres tests
* Fixed output
* Fixed output again
* Fixed skipifs for connres
* Tweaked per review comments
* Changes made to source and tests to support PHP 7.3 (#822)
* Changes made to support php 7.3
* Correct use of the smart pointer
* Fixed the tests for 7.3
* Some clean up for array_init()
* Fixed formattings and clean up
* One more fix
* Initialising strings with nulls
* Removed some spaces
* Made array index spacing consistent
* Fix for compilation problem
* Fix for compilation problem again
* Before freeing stmt in destructor check if dbh driver data is NULL (#829)
* Issue 434 - set dbh driver data to NULL as well in destructor
* Reverted the last change but instead check if dbh driver_data is already freed
* Modified the comment
* Added driver to the skipif conditions (#831)
* Used git clone instead to download source from a branch of a tag (#832)
* Modified the error handling to make it more flexible (#833)
* Made error handling more flexible
* Fixed a minor issue with a test
* Enabled Spectre Mitigations (#836)
* Incorporated changes in PR 634 to pdo_sqlsrv (#834)
* Incorporated changes in PR 634 to pdo_sqlsrv
* Reverted the changes because the array is for internal use only
* Modified README re user's suggestion (#841)
* Modified README re user's suggestion
* Moved the if condition to the end as per review
* Adding supporting for Azure AD access token (#837)
* Adding supporting for Azure AD access token
* Added more comments for the AD access token skipif files
* Save the pointer to access token struct until after connecting
* Clear the access token data before freeing the memory
* Added a reference as per review
* Feature request - new PDO_STMT_OPTION_FETCHES_DATETIME_TYPE flag for pdo_sqlsrv to return datetime as objects (#842)
* Feature request - issue 648
* Fixed constructor for field_cache and added another test
* Added tests for FETCH_BOUND
* Added a new test for output param
* Modified output param test to set attributes differently
* Removed a useless helped function in a test
* Combined two new tests into one as per review
* Uncommented dropTable
* Feature request - add ReturnDatesAsStrings option to statement level for sqlsrv (#844)
* Added ReturnDatesAsStrings option to the statement level
* Added new tests for ReturnDatesAsStrings at statement level
* Added more datetime types as per review
* Updated version 5.4.0-preview (#846)
* Updated version 5.4.0-preview
* Replaced 5.3 with 5.4
* Fixed sqlsrv datetime tests to connect with ColumnEncryption variables (#849)
* Change log for 5.4.0-preview (#850)
* Updated change log for 5.4.0-preview
* Updated 5.4.0 preview to add two new feature requests
* Modified change log as per review
* Modified the wordings
* Updated readme, changelog, and install instructions
* Clear AKV data after setting the connection attribute or when exception is thrown (#854)
* Dev (#820)
* Fixed the potential error reported by Prefast code analysis
* Use SQLSRV_ASSERT for checking NULL ptrs
* For these AKV tests check env despite not AE connected
* Added the driver option to run functional tests
* Fixed connection pooling tests for more than one ODBC drivers
* added driver option to pdo isPooled.php
* Removed win32 ifdefs re connection resiliency (#802)
* Set the driver argument for getDSN to null by default (#798)
* Added the driver argument to getDSN
* Dropped the driver argument but set to null as default
* Removed the AE condition in locale support
* Modified the AE condition for locale support
* Changed int to SQLLEN to avoid infinite loop (#806)
* Version 5.3.0 (#803)
* Version 5.3.0
* Fixed the wrong replacements
* Added comments block to m4 files
* Use dnl for comments
* Modified AE fetch phptypes test to insert only one row at a time and loop through php types (#801)
* Modified AE fetch phptypes test to insert only one row at a time and loop through php types
* Fixed formatting
* Streamlined two very similar large column name tests (#807)
* Streamlined two very similar large column name tests
* Changed the EOL
* Updates to change log and readme (#811)
* Updates to change log and readme
* Dropped support for Ubuntu 17
* Modified as per review comments
* Fixed connection resiliency tests for Unix, updated AppVeyor for ODBC 17.2
* Fixed expected output
* Fixed output and skipifs
* Fixed skipifs and output
* Fixed driver name
* Updated installation instructions and sample script (#813)
* Updated instructions and sample test for 5.3.0 RTW
* Fixed sample code to adhere to php coding standard
* Fixed cases and spaces
* Modified NOTE for UB 18.04 based on review comments
* Added 'exit'
* Modified change log and readme based on review to PR 811
* Applied review comments
* build output to debug appveyor failure
* removed debug output
* Streamlined two very similar large column name tests (#815)
* Streamlined two very similar large column name tests
* Added random number of test table names to avoid operand clash issues
* Replaced to with for based on review
* Changelog updated
* changelog updated, test skipif changed to run on unix platforms
* Fixed skipif typo
* Fixed typo in skipif for pdo
* Fixed some output for Travis
* Moved error checking inside pdo connres tests
* Added links back to changelog
* Fixed output for sqlsrv connres tests
* Fixed output
* Fixed output again
* Clear AKV data after connection or when exception is thrown
* Modified tests too to skip some AKV tests without real credentials
* Used assignment operator also free the existing memory
* Change readme links to https
* Change readme links to https
Merging this commit to dev
* Save meta data for the fetched result set (#855)
* Save meta data on fetched result sets
* Fixed a compilation error
* Optimized some more -- metadata should be available when fetching
* Skip conversion for strings of numeric values, integers, floats, decimals etc
* Set encoding char for numeric data
* Apply review
* Added Mojave to macOS instructions (#862)
Added Mojave to macOS instructions
* Fixed the broken links of Appveyor status badge (#863)
* Feature request 415 for sqlsrv (#861)
* Modified how to send stream data using SQLPutData and SQLParamData (#865)
* Updated instructions to include Ubuntu 18.10 (#869)
* Feature request 415 for pdo_sqlsrv (#873)
* Skipped some tests when running against Azure (#874)
* Modified config files to add the compiler flag, /Qspectre (#878)
* Merge the commit from master re survey image link (#880)
* Fixed the flaws of decimal tests and added more debugging (#879)
* Changed sample code to adhere to PSR standard (#887)
* Decimal places for money types only (#886)
* Version update for 5.5.0-preview (#889)
* Fixed the error in the pdo decimal test (#890)
* Removed warning messages while compiling extensions (#892)
* Improve performance of Unicode conversions (#891)
* Update sqlsrv_statement_format_money_scales.phpt
Do not encrypt money / smallmoney fields in the test table
* Change log 5.5.0-preview (#895)
* updated docs for php 7.3
* Fixed broken links
* Added back Ubuntu 18.10 ODBC instruction
* Drop tests related to fake passwords (#905)
* Initialize output param buffer when allocating extra space (#907)
* Enable compiling extensions statically into PHP (#904)
* Dropped dbname variable and set QUOTED_IDENTIFIER to ON (#911)
* Skipped the non-applicables tests against Azure Data Warehouse (#913)
* Support for Managed Identity for Azure resources (#875)
* Changed version 5.6.0 (#918)
* Initialize hasLoss before passing into Convert function (#919)
* Added new tests for setting client buffer size related to issue 228 (#920)
* Fixed load order issue in sqlsrv
* Added source indexing for symbols (#922)
* Modified linux and mac instructions for 5.6.0 RTW (#926)
* Change log 5.6.0 (#921)
* add Language option on connect
* Updated AppVeyor to download ODBC driver 17.3 (#941)
* Issue 937 - fixed ASSERT and added new tests (#940)
* Changed travis to pull mcr.microsoft.com/mssql/server:2017-latest instead (#943)
* Modified money tests to test the accuracies of floats (#944)
* Fixed the returned values for PDOStatement::getColumnMeta (#946)
* Onboarding to Azure Pipelines (#949)
* Fixed the error in Issue 570 (#952)
* Added a new status badge on readme (#953)
* Added new tests for issue 569 (#951)
* Fix issue 955 - errors building sqlsrv alone (#956)
* Modified test_largeData for Linux CI (#954)
* Issue 937 - fixed ASSERT and added new tests (#940)
(cherry picked from commit 12d01c918966f5ff908adb25d5586944949b88be)
* Fixed the returned values for PDOStatement::getColumnMeta (#946)
(cherry picked from commit 7309fb90b18cd93940f28c6928f152404accb675)
* Fix issue 955 - errors building sqlsrv alone (#956)
(cherry picked from commit 15f61bd0b4e095978cddb2de9671f3d324fc17c3)
* 5.6.1 hotfix
* Updated change log
* Tests modified for language option for SQL Azure (#963)
* Update azure-pipelines.yml for Azure Pipelines [skip ci] (#964)
* Added more checks for error conditions (#965)
* Removed forward cursor condition
* Added row and column count checks
* Revert "Update azure-pipelines.yml for Azure Pipelines [skip ci] (#964)" (#969)
This reverts commit 7d389e0cffa6840a95ea720673380f9ae0b2b477.
* Add new pdo_sqlsrv tests for utf8 encoding errors (#966)
* Modified to check if qualified for AE connections (#967)
* Fixed test and error message
* Minor fixes
* Test fixes
* Addressed review comments
* Fixed test failure
* Made Azure AD tests more robust (#973)
* Addressed review comments
* Issue 970: use quotes for variables (#971)
* Added batch query test
* Fixed 32 bit test failure
* Addressed review comments
* Formatting changes
* Used different skipif conditions for these two tests that require AE connections (#977)
* Simplified insert logic
* Modified get column meta method to reference saved metadata (#978)
* Revert "Used different skipif conditions for these two tests that require AE connections (#977)" (#980)
This reverts commit ee3c85afa863eaff81512ad6399de572ffb943d9.
* Fixed failing tests (#981)
* Data Classification sensitivity metadata retrieval (#979)
* Added more pdo tests to verify different error conditions (#984)
* Fixed memory issues with data classification (#985)
* Added connection string flag
* Removed unix skipif
* Fixed test output
* Fixed pdo test
* Changed flag name
* Fixed test output
* Updated links and versions (#987) (#988)
* Fixed test output (again)
* Fixed test output (again)
* Fixed test output (again)
* Replaced expected test output altogether
* Fixed locale issue
* Corrected formatting
* Replaced EXPECTF with EXPECT
* Fixed two failing tests (#991)
* Redesigned some tests based on recent test results (#992)
* Modified pipelines to connect using sqlcmd inside of the container instead (#995)
* Added batch query
* Added batch query test for pdo (#997)
* Added a new test and modify a non LOB sqlsrv test (#1000)
* Two index zval functions are macros in php 7.4 (#1001)
* Replaced uint with size_t (#1004)
* Check compiler version for php 74 (#1005)
* Fixed tests that failed in php 7.4 (#1006)
* Improve data caching with datetime objects (#1008)
* Fixed for issues found by Semmle (#1011)
* Removed unneeded constants
* Fixed sqlsrv_free_stmt argument info
* Fixed brace escape to avoid buffer overflow
* Fixed brace escape and added test
* Debugging test failure on Bamboo
* Removed debugging output
* Debugging test failure on Bamboo
* Removed debugging output
* Added more test cases
* Changed range check to use strchr
* Added pdo test
* Fixed test and formatting
* Addressed various issues with PHP 7.4 beta1 (#1015)
* Updated dockerfile to use UB 18.04 and PHP 73 (#1016)
* Added survey results (#1017)
* Updated ODBC driver 17.4 (#1019)
* Modified output.py to take a new argument and travis yml to use include for coveralls (#1020)
* Used constants in memory stress tests for easier configuration (#1022)
* Removed KSP related scripts and files (#1030)
* Updated version to 5.7.0 preview (#1029)
* Change log for 5.7.0 (#1028)
* Modified how drivers handle query timeout settings (#1037)
* Feature request: support extended string types (#1043)
* Added the required file to ansi tests (#1047)
* Always Encrypted v2 support (#1045)
* Change to support ae-v2
* Add support for AE V2
* Added some descriptions and comments
* Fixed PDO pattern matching
* Updated key generation scripts
* Fixed key script
* Fixed char/nchar results, fixed formatting issues
* Addressed review comments
* Updated key scripts
* Debugging aev2 keyword failure
* Debugging aev2 keyword failure
* Debugging aev2 keyword failure
* Debugging aev2 keyword failure
* Added skipif to ae v2 keyword test
* Addressed review comments
* Fixed braces and camel caps
* Updated test descriptions
* Added detail to test descriptions
* Tiny change
* Modified pdo tests to work with column encryption (#1051)
* Saved php types with metadata when fetching (#1049)
* Updated survey charts for Nov 2019 (#1057)
* Updated all CIs (#1058)
* Change log 5.7.1 preview (#1060)
* Fix AKV keyword test for AE v2 behaviour (#1061)
* Master (#936)
5.6.0 RTW
* 5.6.1 hotfix (#959)
* Updated links and versions (#987)
* Fixed AKV keyword tests for AE v2
* Added comment
* Free proc cache before starting test
* Fixed comment
* Update linux mac instructions for php 7.4 (#1062)
* Updated appveyor yml to build 7.3 and 7.4 (#1065)
* Fixes suggested by Semmle (#1068)
* Fixes suggested by Semmle
* Updated azure-pipelines
* Added configurable options for setting locales (#1069)
#1063
* Fixed the skipif wordings and styles (#1070)
* Modified locale tests to work in both linux and mac (#1074)
* Include sql_variant type for buffered queries (#1080)
* Updated versions and year (#1082)
* Change log for version 5.8.0 (#1083)
* 5.8.0 rtw docs (#1086)
* updated install instructions and changelog
* removed md extensions
* Addressed review comments
* added path
* Fixed link
Co-authored-by: Jenny Tam <v-yitam@microsoft.com>
Co-authored-by: Gert de Pagter <BackEndTea@users.noreply.github.com>
Co-authored-by: Jannes Jeising <jannes@jeising.net>
Co-authored-by: Guillaume Degoulet <34232764+gdegoulet@users.noreply.github.com>
2020-01-31 23:02:45 +01:00
|
|
|
if (!empty($info) and $info['value'] == 1 and $info['value_in_use'] == 1) {
|
2019-12-03 22:28:29 +01:00
|
|
|
$isEnclaveEnabled = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
sqlsrv_query($conn, "DBCC FREEPROCCACHE");
|
|
|
|
}
|
|
|
|
|
|
|
|
unset($conn);
|
|
|
|
|
2018-05-09 01:16:27 +02:00
|
|
|
// Test every combination of the keywords above.
|
2018-05-18 21:24:37 +02:00
|
|
|
// Leave out good credentials to ensure that caching does not influence the
|
2018-05-09 01:16:27 +02:00
|
|
|
// results. The cache timeout can only be changed with SQLSetConnectAttr, so
|
|
|
|
// we can't run a PHP test without caching, and if we started with good
|
|
|
|
// credentials then subsequent calls with bad credentials can work, which
|
|
|
|
// would muddle the results of this test. Good credentials are tested in a
|
|
|
|
// separate test.
|
2018-05-18 23:05:18 +02:00
|
|
|
for ($i = 0; $i < sizeof($columnEncryption); ++$i) {
|
|
|
|
for ($j = 0; $j < sizeof($keyStoreAuthentication); ++$j) {
|
|
|
|
for ($k = 0; $k < sizeof($keyStorePrincipalId); ++$k) {
|
|
|
|
for ($m = 0; $m < sizeof($keyStoreSecret); ++$m) {
|
2018-05-18 21:24:37 +02:00
|
|
|
$connectionOptions = array("CharacterSet"=>"UTF-8",
|
|
|
|
"database"=>$databaseName,
|
|
|
|
"uid"=>$uid,
|
2018-05-06 02:08:01 +02:00
|
|
|
"pwd"=>$pwd,
|
|
|
|
"ConnectionPooling"=>0);
|
2018-05-18 23:05:18 +02:00
|
|
|
|
2018-05-18 21:24:37 +02:00
|
|
|
if (!empty($columnEncryption[$i])) {
|
2018-05-06 02:08:01 +02:00
|
|
|
$connectionOptions['ColumnEncryption'] = $columnEncryption[$i];
|
2018-05-18 21:24:37 +02:00
|
|
|
}
|
|
|
|
if (!empty($keyStoreAuthentication[$j])) {
|
2018-05-06 02:08:01 +02:00
|
|
|
$connectionOptions['KeyStoreAuthentication'] = $keyStoreAuthentication[$j];
|
2018-05-18 21:24:37 +02:00
|
|
|
}
|
|
|
|
if (!empty($keyStorePrincipalId[$k])) {
|
|
|
|
$connectionOptions['KeyStorePrincipalId'] = $keyStorePrincipalId[$k];
|
|
|
|
}
|
|
|
|
if (!empty($keyStoreSecret[$m])) {
|
2018-05-06 02:08:01 +02:00
|
|
|
$connectionOptions['KeyStoreSecret'] = $keyStoreSecret[$m];
|
2018-05-18 21:24:37 +02:00
|
|
|
}
|
2018-05-17 00:14:47 +02:00
|
|
|
|
2018-05-06 02:08:01 +02:00
|
|
|
// Valid credentials getting skipped
|
2018-05-18 23:05:18 +02:00
|
|
|
if (($i == 0 and $j == 0 and $k == 0 and $m == 0) or
|
|
|
|
($i == 0 and $j == 1 and $k == 1 and $m == 1)) {
|
2018-05-06 02:08:01 +02:00
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Connect to the AE-enabled database
|
|
|
|
// Failure is expected when the keyword combination is wrong
|
|
|
|
$conn = sqlsrv_connect($server, $connectionOptions);
|
2018-05-18 21:24:37 +02:00
|
|
|
if (!$conn) {
|
2018-05-06 02:08:01 +02:00
|
|
|
$errors = sqlsrv_errors();
|
2018-05-18 23:05:18 +02:00
|
|
|
|
2018-05-18 21:24:37 +02:00
|
|
|
checkErrors(
|
|
|
|
$errors,
|
|
|
|
array('08001','0'),
|
2018-05-25 22:08:35 +02:00
|
|
|
array('08001','-1'), // SSL error on some Linuxes
|
2018-05-18 21:24:37 +02:00
|
|
|
array('IMSSP','-110'),
|
|
|
|
array('IMSSP','-111'),
|
|
|
|
array('IMSSP','-112'),
|
2019-12-03 22:28:29 +01:00
|
|
|
array('IMSSP','-113'),
|
|
|
|
array('CE400','0')
|
2018-05-18 21:24:37 +02:00
|
|
|
);
|
|
|
|
} else {
|
2018-05-06 02:08:01 +02:00
|
|
|
$columns = array();
|
|
|
|
$insertQuery = "";
|
|
|
|
|
|
|
|
// Generate the INSERT query
|
2018-05-18 23:05:18 +02:00
|
|
|
formulateSetupQuery($tableName, $dataTypes, $columns, $insertQuery);
|
2018-05-06 02:08:01 +02:00
|
|
|
|
|
|
|
$stmt = AE\createTable($conn, $tableName, $columns);
|
|
|
|
if (!$stmt) {
|
|
|
|
fatalError("Failed to create table $tableName.\n");
|
|
|
|
}
|
|
|
|
|
|
|
|
// Duplicate all values for insertion - one is encrypted, one is not
|
|
|
|
$testValues = array();
|
2018-05-18 23:05:18 +02:00
|
|
|
for ($n = 0; $n < sizeof($small_values); ++$n) {
|
2018-05-06 02:08:01 +02:00
|
|
|
$testValues[] = $small_values[$n];
|
|
|
|
$testValues[] = $small_values[$n];
|
|
|
|
}
|
|
|
|
|
|
|
|
// Prepare the INSERT query
|
|
|
|
// This is never expected to fail
|
|
|
|
$stmt = sqlsrv_prepare($conn, $insertQuery, $testValues);
|
|
|
|
if ($stmt == false) {
|
|
|
|
print_r(sqlsrv_errors());
|
|
|
|
fatalError("sqlsrv_prepare failed.\n");
|
|
|
|
}
|
|
|
|
|
|
|
|
// Execute the INSERT query
|
|
|
|
// This is where we expect failure if the credentials are incorrect
|
|
|
|
if (sqlsrv_execute($stmt) == false) {
|
|
|
|
$errors = sqlsrv_errors();
|
2018-05-18 23:05:18 +02:00
|
|
|
|
2018-05-30 01:22:26 +02:00
|
|
|
if (!AE\isDataEncrypted()) {
|
2018-05-18 21:24:37 +02:00
|
|
|
checkErrors(
|
|
|
|
$errors,
|
|
|
|
array('CE258', '0'),
|
|
|
|
array('CE275', '0')
|
|
|
|
);
|
|
|
|
} else {
|
|
|
|
checkErrors(
|
|
|
|
$errors,
|
|
|
|
array('CE258', '0'),
|
|
|
|
array('CE275', '0'),
|
|
|
|
array('22018', '206')
|
|
|
|
);
|
2018-05-17 00:14:47 +02:00
|
|
|
}
|
2018-05-18 23:05:18 +02:00
|
|
|
|
2018-05-06 02:08:01 +02:00
|
|
|
sqlsrv_free_stmt($stmt);
|
2018-05-18 21:24:37 +02:00
|
|
|
} else {
|
2018-05-10 00:21:40 +02:00
|
|
|
// The INSERT query succeeded with bad credentials, which
|
2019-12-03 22:28:29 +01:00
|
|
|
// should only happen when 1. encryption is not enabled or
|
|
|
|
// 2. when ColumnEncryption is set to something other than
|
|
|
|
// enabled or disabled (i.e. $i == 2), and the server is
|
|
|
|
// not enclave-enabled
|
|
|
|
if (!(!AE\isDataEncrypted() or ($i == 2 and !$isEnclaveEnabled))) {
|
2018-05-18 21:24:37 +02:00
|
|
|
fatalError("Successful insertion with bad credentials\n");
|
|
|
|
}
|
2018-05-06 02:08:01 +02:00
|
|
|
}
|
2018-05-18 23:05:18 +02:00
|
|
|
|
2018-05-26 00:19:20 +02:00
|
|
|
// Drop the table and close the connection
|
|
|
|
dropTable($conn, $tableName);
|
2018-05-06 02:08:01 +02:00
|
|
|
sqlsrv_close($conn);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-05-09 01:16:27 +02:00
|
|
|
echo "Done.\n";
|
2018-05-06 02:08:01 +02:00
|
|
|
?>
|
|
|
|
--EXPECT--
|
2018-05-09 01:16:27 +02:00
|
|
|
Done.
|