diff options
author | George Wang <gwang@php.net> | 2015-06-22 23:40:34 -0400 |
---|---|---|
committer | George Wang <gwang@php.net> | 2015-06-22 23:40:34 -0400 |
commit | 9e15ce9a382be49755af55ce33856fd5d4207cd2 (patch) | |
tree | 0987b39b4de83cd77c9e7556ac7719bbcf727435 | |
parent | 3a169f6c0df328f605fceab03da78ff8f56617a7 (diff) | |
parent | e09d3155a172bdded3cfcff921f676be57ae8d5b (diff) | |
download | php-git-9e15ce9a382be49755af55ce33856fd5d4207cd2.tar.gz |
Merge branch 'PHP-5.6' of git.php.net:php-src into PHP-5.6
91 files changed, 2425 insertions, 1520 deletions
@@ -1,10 +1,43 @@ -PHP NEWS +PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ?? Jul 2015, PHP 5.6.11 - Core: - . Fixed #69642 (Windows 10 reported as Windows 8). + . Fixed bug #69703 (Use __builtin_clzl on PowerPC). + (dja at axtens dot net, Kalle) + . Fixed bug #69732 (can induce segmentation fault with basic php code). + (Dmitry) + . Fixed bug #69642 (Windows 10 reported as Windows 8). (Christian Wenz, Anatol Belski) + . Fixed bug #69551 (parse_ini_file() and parse_ini_string() segmentation + fault). (Christoph M. Becker) + . Fixed bug #69781 (phpinfo() reports Professional Editions of Windows + 7/8/8.1/10 as "Business"). (Christian Wenz) + . Fixed bug #69740 (finally in generator (yield) swallows exception in + iteration). (Nikita) + . Fixed bug #69835 (phpinfo() does not report many Windows SKUs). + (Christian Wenz) + . Fixed bug #69892 (Different arrays compare indentical due to integer key + truncation). (Nikita) + +- GD: + . Fixed bug #61221 (imagegammacorrect function loses alpha channel). (cmb) + +- GMP: + . Fixed bug #69803 (gmp_random_range() modifies second parameter if GMP + number). (Nikita) + +- PDO_pgsql: + . Fixed bug #69752 (PDOStatement::execute() leaks memory with DML + Statements when closeCuror() is u). (Philip Hofstetter) + . Fixed bug #69362 (PDO-pgsql fails to connect if password contains a + leading single quote). (Matteo) + . Fixed bug #69344 (PDO PgSQL Incorrect binding numeric array with gaps). + (Matteo) + +- SimpleXML: + . Refactored the fix for bug #66084 (simplexml_load_string() mangles empty + node name). (Christoph Michael Becker) - SPL: . Fixed bug #69737 (Segfault when SplMinHeap::compare produces fatal error). @@ -23,10 +56,13 @@ (Christoph M. Becker) . Fixed POST data processing slowdown due to small input buffer size on Windows. (Jorge Oliveira, Anatol) - . Fixed bug #69703 (Use __builtin_clzl on PowerPC). - (dja at axtens dot net, Kalle) - . Fixed bug #69732 (can induce segmentation fault with basic php code). - (Dmitry) + . Fixed bug #69646 (OS command injection vulnerability in escapeshellarg). + (CVE-2015-4642) (Anatol Belski) + . Fixed bug #69719 (Incorrect handling of paths with NULs). (Stas) + +- FTP + . Improved fix for bug #69545 (Integer overflow in ftp_genlist() resulting in + heap overflow). (CVE-2015-4643) (Max Spelsberg) - GD: . Fixed bug #69479 (GD fails to build with newer libvpx). (Remi) @@ -34,19 +70,29 @@ - Iconv: . Fixed bug #48147 (iconv with //IGNORE cuts the string). (Stas) +- Litespeed SAPI: + . Fixed bug #68812 (Unchecked return value). (George Wang) + +- Mail: + . Fixed bug #68776 (mail() does not have mail header injection prevention for + additional headers). (Yasuo) + - MCrypt: . Added file descriptor caching to mcrypt_create_iv() (Leigh) +- Opcache + . Fixed bug #69549 (Memory leak with opcache.optimization_level=0xFFFFFFFF). + (Laruence, Dmitry) + +- PCRE + . Upgraded pcrelib to 8.37. (CVE-2015-2325, CVE-2015-2326) + - Phar: . Fixed bug #69680 (phar symlink in binary directory broken). (Matteo Bernardini, Remi) - Postgres: - . Fixed bug #69667 (segfault in php_pgsql_meta_data). (Remi) - -- SimpleXML: - . Refactored the fix for bug #66084 (simplexml_load_string() mangles empty - node name). (Christoph Michael Becker) + . Fixed bug #69667 (segfault in php_pgsql_meta_data). (CVE-2015-4644) (Remi) - Sqlite3: . Upgrade bundled sqlite to 3.8.10.2. (CVE-2015-3414, CVE-2015-3415, @@ -95,9 +141,6 @@ . Fixed bug #68598 (pcntl_exec() should not allow null char). (CVE-2015-4026) (Stas) -- PCRE - . Upgraded pcrelib to 8.37. (CVE-2015-2325, CVE-2015-2326) - - Phar: . Fixed bug #69453 (Memory Corruption in phar_parse_tarfile when entry filename starts with null). (CVE-2015-4021) (Stas) diff --git a/Zend/tests/bug69551.phpt b/Zend/tests/bug69551.phpt new file mode 100644 index 0000000000..096852a2fa --- /dev/null +++ b/Zend/tests/bug69551.phpt @@ -0,0 +1,16 @@ +--TEST-- +Bug #69551 - parse_ini_file() and parse_ini_string() segmentation fault +--FILE-- +<?php +$ini = <<<INI +[Network.eth0] +SubnetMask = " +" +INI; +$settings = parse_ini_string($ini, false, INI_SCANNER_RAW); +var_dump($settings); +?> +--EXPECTF-- +Warning: syntax error, unexpected '"' in Unknown on line %d + in %s on line %d +bool(false) diff --git a/Zend/tests/bug69740.phpt b/Zend/tests/bug69740.phpt new file mode 100644 index 0000000000..30a2a49099 --- /dev/null +++ b/Zend/tests/bug69740.phpt @@ -0,0 +1,28 @@ +--TEST-- +Bug #69740: finally in generator (yield) swallows exception in iteration +--FILE-- +<?php + +function generate() { + try { + yield 1; + yield 2; + } finally { + echo "finally\n"; + } +} + +foreach (generate() as $i) { + echo $i, "\n"; + throw new Exception(); +} + +?> +--EXPECTF-- +1 +finally + +Fatal error: Uncaught exception 'Exception' in %s:%d +Stack trace: +#0 {main} + thrown in %s on line %d diff --git a/Zend/tests/bug69892.phpt b/Zend/tests/bug69892.phpt new file mode 100644 index 0000000000..d14f85fa52 --- /dev/null +++ b/Zend/tests/bug69892.phpt @@ -0,0 +1,10 @@ +--TEST-- +Bug #69892: Different arrays compare indentical due to integer key truncation +--SKIPIF-- +<?php if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platforms only"); ?> +--FILE-- +<?php +var_dump([0 => 0] === [0x100000000 => 0]); +?> +--EXPECT-- +bool(false) diff --git a/Zend/zend_generators.c b/Zend/zend_generators.c index 4b18f4221d..1cf9566ea5 100644 --- a/Zend/zend_generators.c +++ b/Zend/zend_generators.c @@ -198,6 +198,9 @@ static void zend_generator_dtor_storage(zend_generator *generator, zend_object_h if (finally_op_num) { ex->opline = &ex->op_array->opcodes[finally_op_num]; ex->fast_ret = NULL; + ex->delayed_exception = EG(exception); + EG(exception) = NULL; + generator->flags |= ZEND_GENERATOR_FORCED_CLOSE; zend_generator_resume(generator TSRMLS_CC); } diff --git a/Zend/zend_hash.c b/Zend/zend_hash.c index c00012c0a4..448824ea1d 100644 --- a/Zend/zend_hash.c +++ b/Zend/zend_hash.c @@ -1446,11 +1446,10 @@ ZEND_API int zend_hash_compare(HashTable *ht1, HashTable *ht2, compare_func_t co } if (ordered) { if (p1->nKeyLength==0 && p2->nKeyLength==0) { /* numeric indices */ - result = p1->h - p2->h; - if (result!=0) { + if (p1->h != p2->h) { HASH_UNPROTECT_RECURSION(ht1); HASH_UNPROTECT_RECURSION(ht2); - return result; + return p1->h > p2->h ? 1 : -1; } } else { /* string indices */ result = p1->nKeyLength - p2->nKeyLength; diff --git a/Zend/zend_ini_scanner.c b/Zend/zend_ini_scanner.c index c4727d33e4..dbebb2ce68 100644 --- a/Zend/zend_ini_scanner.c +++ b/Zend/zend_ini_scanner.c @@ -2029,7 +2029,7 @@ end_raw_value_chars: } /* Eat leading and trailing double quotes */ - if (yytext[0] == '"' && yytext[yyleng - 1] == '"') { + if (yyleng > 1 && yytext[0] == '"' && yytext[yyleng - 1] == '"') { SCNG(yy_text)++; yyleng = yyleng - 2; } else if (sc) { diff --git a/Zend/zend_ini_scanner.l b/Zend/zend_ini_scanner.l index fa586575f4..9cf8b4fe0a 100644 --- a/Zend/zend_ini_scanner.l +++ b/Zend/zend_ini_scanner.l @@ -523,7 +523,7 @@ end_raw_value_chars: } /* Eat leading and trailing double quotes */ - if (yytext[0] == '"' && yytext[yyleng - 1] == '"') { + if (yyleng > 1 && yytext[0] == '"' && yytext[yyleng - 1] == '"') { SCNG(yy_text)++; yyleng = yyleng - 2; } else if (sc) { diff --git a/ext/date/lib/timezonedb.h b/ext/date/lib/timezonedb.h index ff6c1724c0..b8d61e052b 100644 --- a/ext/date/lib/timezonedb.h +++ b/ext/date/lib/timezonedb.h @@ -14,577 +14,577 @@ const timelib_tzdb_index_entry timezonedb_idx_builtin[583] = { { "Africa/Bujumbura" , 0x000EF0 }, { "Africa/Cairo" , 0x000FA7 }, { "Africa/Casablanca" , 0x001767 }, - { "Africa/Ceuta" , 0x001DEC }, - { "Africa/Conakry" , 0x002622 }, - { "Africa/Dakar" , 0x0026D8 }, - { "Africa/Dar_es_Salaam" , 0x00278E }, - { "Africa/Djibouti" , 0x0028B5 }, - { "Africa/Douala" , 0x0029DC }, - { "Africa/El_Aaiun" , 0x002A93 }, - { "Africa/Freetown" , 0x00306E }, - { "Africa/Gaborone" , 0x003124 }, - { "Africa/Harare" , 0x0031DB }, - { "Africa/Johannesburg" , 0x003292 }, - { "Africa/Juba" , 0x0033AD }, - { "Africa/Kampala" , 0x003664 }, - { "Africa/Khartoum" , 0x00378B }, - { "Africa/Kigali" , 0x003A42 }, - { "Africa/Kinshasa" , 0x003AF9 }, - { "Africa/Lagos" , 0x003BC7 }, - { "Africa/Libreville" , 0x003C7E }, - { "Africa/Lome" , 0x003D35 }, - { "Africa/Luanda" , 0x003DEB }, - { "Africa/Lubumbashi" , 0x003EA2 }, - { "Africa/Lusaka" , 0x003F70 }, - { "Africa/Malabo" , 0x004027 }, - { "Africa/Maputo" , 0x0040DE }, - { "Africa/Maseru" , 0x004195 }, - { "Africa/Mbabane" , 0x0042B0 }, - { "Africa/Mogadishu" , 0x0043CB }, - { "Africa/Monrovia" , 0x0044F2 }, - { "Africa/Nairobi" , 0x0045EF }, - { "Africa/Ndjamena" , 0x004716 }, - { "Africa/Niamey" , 0x004803 }, - { "Africa/Nouakchott" , 0x0048BA }, - { "Africa/Ouagadougou" , 0x004970 }, - { "Africa/Porto-Novo" , 0x004A26 }, - { "Africa/Sao_Tome" , 0x004ADD }, - { "Africa/Timbuktu" , 0x004B93 }, - { "Africa/Tripoli" , 0x004C49 }, - { "Africa/Tunis" , 0x004EE4 }, - { "Africa/Windhoek" , 0x0051B6 }, - { "America/Adak" , 0x0057F0 }, - { "America/Anchorage" , 0x006149 }, - { "America/Anguilla" , 0x006AB0 }, - { "America/Antigua" , 0x006B66 }, - { "America/Araguaina" , 0x006C1C }, - { "America/Argentina/Buenos_Aires" , 0x006FB1 }, - { "America/Argentina/Catamarca" , 0x007411 }, - { "America/Argentina/ComodRivadavia" , 0x0078A1 }, - { "America/Argentina/Cordoba" , 0x007D16 }, - { "America/Argentina/Jujuy" , 0x0081BA }, - { "America/Argentina/La_Rioja" , 0x008649 }, - { "America/Argentina/Mendoza" , 0x008AD9 }, - { "America/Argentina/Rio_Gallegos" , 0x008F86 }, - { "America/Argentina/Salta" , 0x00940A }, - { "America/Argentina/San_Juan" , 0x009873 }, - { "America/Argentina/San_Luis" , 0x009D03 }, - { "America/Argentina/Tucuman" , 0x00A1AF }, - { "America/Argentina/Ushuaia" , 0x00A64C }, - { "America/Aruba" , 0x00AAD6 }, - { "America/Asuncion" , 0x00ABB2 }, - { "America/Atikokan" , 0x00B3CC }, - { "America/Atka" , 0x00B575 }, - { "America/Bahia" , 0x00BEBE }, - { "America/Bahia_Banderas" , 0x00C2DB }, - { "America/Barbados" , 0x00C943 }, - { "America/Belem" , 0x00CAA7 }, - { "America/Belize" , 0x00CD0C }, - { "America/Blanc-Sablon" , 0x00D0E8 }, - { "America/Boa_Vista" , 0x00D25A }, - { "America/Bogota" , 0x00D4F1 }, - { "America/Boise" , 0x00D5FE }, - { "America/Buenos_Aires" , 0x00DF96 }, - { "America/Cambridge_Bay" , 0x00E3E1 }, - { "America/Campo_Grande" , 0x00EC3B }, - { "America/Cancun" , 0x00F438 }, - { "America/Caracas" , 0x00F798 }, - { "America/Catamarca" , 0x00F8AE }, - { "America/Cayenne" , 0x00FD23 }, - { "America/Cayman" , 0x00FDF7 }, - { "America/Chicago" , 0x00FECE }, - { "America/Chihuahua" , 0x010CE7 }, - { "America/Coral_Harbour" , 0x01131A }, - { "America/Cordoba" , 0x01147F }, - { "America/Costa_Rica" , 0x0118F4 }, - { "America/Creston" , 0x011A55 }, - { "America/Cuiaba" , 0x011B7C }, - { "America/Curacao" , 0x012356 }, - { "America/Danmarkshavn" , 0x012432 }, - { "America/Dawson" , 0x012729 }, - { "America/Dawson_Creek" , 0x012F7C }, - { "America/Denver" , 0x0133F4 }, - { "America/Detroit" , 0x013DA2 }, - { "America/Dominica" , 0x01467E }, - { "America/Edmonton" , 0x014734 }, - { "America/Eirunepe" , 0x0150E4 }, - { "America/El_Salvador" , 0x0153A6 }, - { "America/Ensenada" , 0x0154AC }, - { "America/Fort_Wayne" , 0x0160EE }, - { "America/Fortaleza" , 0x015DEC }, - { "America/Glace_Bay" , 0x016785 }, - { "America/Godthab" , 0x017076 }, - { "America/Goose_Bay" , 0x0177E5 }, - { "America/Grand_Turk" , 0x0184AD }, - { "America/Grenada" , 0x0189C0 }, - { "America/Guadeloupe" , 0x018A76 }, - { "America/Guatemala" , 0x018B2C }, - { "America/Guayaquil" , 0x018C6A }, - { "America/Guyana" , 0x018D49 }, - { "America/Halifax" , 0x018E63 }, - { "America/Havana" , 0x019C0B }, - { "America/Hermosillo" , 0x01A59C }, - { "America/Indiana/Indianapolis" , 0x01A78D }, - { "America/Indiana/Knox" , 0x01AE4B }, - { "America/Indiana/Marengo" , 0x01B802 }, - { "America/Indiana/Petersburg" , 0x01BEF9 }, - { "America/Indiana/Tell_City" , 0x01CD39 }, - { "America/Indiana/Vevay" , 0x01D431 }, - { "America/Indiana/Vincennes" , 0x01D9F7 }, - { "America/Indiana/Winamac" , 0x01E0EA }, - { "America/Indianapolis" , 0x01C6A2 }, - { "America/Inuvik" , 0x01E818 }, - { "America/Iqaluit" , 0x01EFD6 }, - { "America/Jamaica" , 0x01F80C }, - { "America/Jujuy" , 0x01FA13 }, - { "America/Juneau" , 0x01FE98 }, - { "America/Kentucky/Louisville" , 0x0207FC }, - { "America/Kentucky/Monticello" , 0x02130E }, - { "America/Knox_IN" , 0x021C79 }, - { "America/Kralendijk" , 0x02260A }, - { "America/La_Paz" , 0x0226E6 }, - { "America/Lima" , 0x0227E5 }, - { "America/Los_Angeles" , 0x022992 }, - { "America/Louisville" , 0x0234C7 }, - { "America/Lower_Princes" , 0x023FB0 }, - { "America/Maceio" , 0x02408C }, - { "America/Managua" , 0x02439C }, - { "America/Manaus" , 0x024577 }, - { "America/Marigot" , 0x0247F5 }, - { "America/Martinique" , 0x0248AB }, - { "America/Matamoros" , 0x0249B8 }, - { "America/Mazatlan" , 0x024F96 }, - { "America/Mendoza" , 0x0255E6 }, - { "America/Menominee" , 0x025A87 }, - { "America/Merida" , 0x0263C5 }, - { "America/Metlakatla" , 0x0269A1 }, - { "America/Mexico_City" , 0x026CA7 }, - { "America/Miquelon" , 0x027322 }, - { "America/Moncton" , 0x0279C2 }, - { "America/Monterrey" , 0x028646 }, - { "America/Montevideo" , 0x028C2E }, - { "America/Montreal" , 0x0294AA }, - { "America/Montserrat" , 0x02A265 }, - { "America/Nassau" , 0x02A31B }, - { "America/New_York" , 0x02AC13 }, - { "America/Nipigon" , 0x02BA04 }, - { "America/Nome" , 0x02C2AE }, - { "America/Noronha" , 0x02CC1B }, - { "America/North_Dakota/Beulah" , 0x02CF0F }, - { "America/North_Dakota/Center" , 0x02D89B }, - { "America/North_Dakota/New_Salem" , 0x02E227 }, - { "America/Ojinaga" , 0x02EBC8 }, - { "America/Panama" , 0x02F1F1 }, - { "America/Pangnirtung" , 0x02F2C8 }, - { "America/Paramaribo" , 0x02FB33 }, - { "America/Phoenix" , 0x02FC73 }, - { "America/Port-au-Prince" , 0x02FE10 }, - { "America/Port_of_Spain" , 0x030683 }, - { "America/Porto_Acre" , 0x0303E7 }, - { "America/Porto_Velho" , 0x030739 }, - { "America/Puerto_Rico" , 0x030999 }, - { "America/Rainy_River" , 0x030AA4 }, - { "America/Rankin_Inlet" , 0x031335 }, - { "America/Recife" , 0x031AE9 }, - { "America/Regina" , 0x031DD7 }, - { "America/Resolute" , 0x0321FA }, - { "America/Rio_Branco" , 0x0329B0 }, - { "America/Rosario" , 0x032C50 }, - { "America/Santa_Isabel" , 0x0330C5 }, - { "America/Santarem" , 0x033A3F }, - { "America/Santiago" , 0x033CC3 }, - { "America/Santo_Domingo" , 0x03444E }, - { "America/Sao_Paulo" , 0x034643 }, - { "America/Scoresbysund" , 0x034E60 }, - { "America/Shiprock" , 0x035610 }, - { "America/Sitka" , 0x035FB1 }, - { "America/St_Barthelemy" , 0x036913 }, - { "America/St_Johns" , 0x0369C9 }, - { "America/St_Kitts" , 0x03784D }, - { "America/St_Lucia" , 0x037903 }, - { "America/St_Thomas" , 0x0379B9 }, - { "America/St_Vincent" , 0x037A6F }, - { "America/Swift_Current" , 0x037B25 }, - { "America/Tegucigalpa" , 0x037D9D }, - { "America/Thule" , 0x037EBF }, - { "America/Thunder_Bay" , 0x0384D3 }, - { "America/Tijuana" , 0x038DA5 }, - { "America/Toronto" , 0x039715 }, - { "America/Tortola" , 0x03A500 }, - { "America/Vancouver" , 0x03A5B6 }, - { "America/Virgin" , 0x03B13B }, - { "America/Whitehorse" , 0x03B1F1 }, - { "America/Winnipeg" , 0x03BA44 }, - { "America/Yakutat" , 0x03C5C1 }, - { "America/Yellowknife" , 0x03CEFA }, - { "Antarctica/Casey" , 0x03D6EF }, - { "Antarctica/Davis" , 0x03D82A }, - { "Antarctica/DumontDUrville" , 0x03D975 }, - { "Antarctica/Macquarie" , 0x03DA89 }, - { "Antarctica/Mawson" , 0x03E09F }, - { "Antarctica/McMurdo" , 0x03E190 }, - { "Antarctica/Palmer" , 0x03EB65 }, - { "Antarctica/Rothera" , 0x03F116 }, - { "Antarctica/South_Pole" , 0x03F1EF }, - { "Antarctica/Syowa" , 0x03FB97 }, - { "Antarctica/Troll" , 0x03FC69 }, - { "Antarctica/Vostok" , 0x04011C }, - { "Arctic/Longyearbyen" , 0x0401F1 }, - { "Asia/Aden" , 0x040AC8 }, - { "Asia/Almaty" , 0x040B7F }, - { "Asia/Amman" , 0x040F41 }, - { "Asia/Anadyr" , 0x0416A2 }, - { "Asia/Aqtau" , 0x041B8E }, - { "Asia/Aqtobe" , 0x042041 }, - { "Asia/Ashgabat" , 0x042478 }, - { "Asia/Ashkhabad" , 0x042723 }, - { "Asia/Baghdad" , 0x0429CE }, - { "Asia/Bahrain" , 0x042DB6 }, - { "Asia/Baku" , 0x042E93 }, - { "Asia/Bangkok" , 0x043643 }, - { "Asia/Beirut" , 0x04371B }, - { "Asia/Bishkek" , 0x043FA6 }, - { "Asia/Brunei" , 0x0443D7 }, - { "Asia/Calcutta" , 0x0444AC }, - { "Asia/Chita" , 0x0445DB }, - { "Asia/Choibalsan" , 0x044AEF }, - { "Asia/Chongqing" , 0x04513E }, - { "Asia/Chungking" , 0x0452E8 }, - { "Asia/Colombo" , 0x045492 }, - { "Asia/Dacca" , 0x045623 }, - { "Asia/Damascus" , 0x0457B5 }, - { "Asia/Dhaka" , 0x0460D1 }, - { "Asia/Dili" , 0x046263 }, - { "Asia/Dubai" , 0x0463A4 }, - { "Asia/Dushanbe" , 0x04645B }, - { "Asia/Gaza" , 0x0466CA }, - { "Asia/Harbin" , 0x046FEA }, - { "Asia/Hebron" , 0x047194 }, - { "Asia/Ho_Chi_Minh" , 0x047ACF }, - { "Asia/Hong_Kong" , 0x047C50 }, - { "Asia/Hovd" , 0x048101 }, - { "Asia/Irkutsk" , 0x048721 }, - { "Asia/Istanbul" , 0x048C2F }, - { "Asia/Jakarta" , 0x0496F6 }, - { "Asia/Jayapura" , 0x049882 }, - { "Asia/Jerusalem" , 0x0499B0 }, - { "Asia/Kabul" , 0x04A295 }, - { "Asia/Kamchatka" , 0x04A368 }, - { "Asia/Karachi" , 0x04A843 }, - { "Asia/Kashgar" , 0x04A9E2 }, - { "Asia/Kathmandu" , 0x04AA99 }, - { "Asia/Katmandu" , 0x04AB79 }, - { "Asia/Khandyga" , 0x04AC59 }, - { "Asia/Kolkata" , 0x04B1B2 }, - { "Asia/Krasnoyarsk" , 0x04B2E1 }, - { "Asia/Kuala_Lumpur" , 0x04B7D0 }, - { "Asia/Kuching" , 0x04B97D }, - { "Asia/Kuwait" , 0x04BB9F }, - { "Asia/Macao" , 0x04BC56 }, - { "Asia/Macau" , 0x04BF7D }, - { "Asia/Magadan" , 0x04C2A4 }, - { "Asia/Makassar" , 0x04C7AB }, - { "Asia/Manila" , 0x04C917 }, - { "Asia/Muscat" , 0x04CA8C }, - { "Asia/Nicosia" , 0x04CB43 }, - { "Asia/Novokuznetsk" , 0x04D32F }, - { "Asia/Novosibirsk" , 0x04D84C }, - { "Asia/Omsk" , 0x04DD27 }, - { "Asia/Oral" , 0x04E215 }, - { "Asia/Phnom_Penh" , 0x04E67C }, - { "Asia/Pontianak" , 0x04E754 }, - { "Asia/Pyongyang" , 0x04E8EC }, - { "Asia/Qatar" , 0x04EA0F }, - { "Asia/Qyzylorda" , 0x04EAEC }, - { "Asia/Rangoon" , 0x04EF52 }, - { "Asia/Riyadh" , 0x04F07B }, - { "Asia/Saigon" , 0x04F132 }, - { "Asia/Sakhalin" , 0x04F2B3 }, - { "Asia/Samarkand" , 0x04F7A5 }, - { "Asia/Seoul" , 0x04FA73 }, - { "Asia/Shanghai" , 0x04FCBA }, - { "Asia/Singapore" , 0x04FE70 }, - { "Asia/Srednekolymsk" , 0x050028 }, - { "Asia/Taipei" , 0x050528 }, - { "Asia/Tashkent" , 0x050854 }, - { "Asia/Tbilisi" , 0x050B18 }, - { "Asia/Tehran" , 0x050F9A }, - { "Asia/Tel_Aviv" , 0x051623 }, - { "Asia/Thimbu" , 0x051F08 }, - { "Asia/Thimphu" , 0x051FE5 }, - { "Asia/Tokyo" , 0x0520C2 }, - { "Asia/Ujung_Pandang" , 0x052231 }, - { "Asia/Ulaanbaatar" , 0x052355 }, - { "Asia/Ulan_Bator" , 0x052958 }, - { "Asia/Urumqi" , 0x052F4D }, - { "Asia/Ust-Nera" , 0x053011 }, - { "Asia/Vientiane" , 0x053541 }, - { "Asia/Vladivostok" , 0x053619 }, - { "Asia/Yakutsk" , 0x053B06 }, - { "Asia/Yekaterinburg" , 0x053FF2 }, - { "Asia/Yerevan" , 0x054545 }, - { "Atlantic/Azores" , 0x054A4E }, - { "Atlantic/Bermuda" , 0x055800 }, - { "Atlantic/Canary" , 0x055FE0 }, - { "Atlantic/Cape_Verde" , 0x056773 }, - { "Atlantic/Faeroe" , 0x05687D }, - { "Atlantic/Faroe" , 0x056FAE }, - { "Atlantic/Jan_Mayen" , 0x0576DF }, - { "Atlantic/Madeira" , 0x057FB6 }, - { "Atlantic/Reykjavik" , 0x058D67 }, - { "Atlantic/South_Georgia" , 0x059219 }, - { "Atlantic/St_Helena" , 0x0597A3 }, - { "Atlantic/Stanley" , 0x0592B9 }, - { "Australia/ACT" , 0x059859 }, - { "Australia/Adelaide" , 0x05A114 }, - { "Australia/Brisbane" , 0x05A9ED }, - { "Australia/Broken_Hill" , 0x05ABD8 }, - { "Australia/Canberra" , 0x05B4E2 }, - { "Australia/Currie" , 0x05BD9D }, - { "Australia/Darwin" , 0x05C66E }, - { "Australia/Eucla" , 0x05C7CF }, - { "Australia/Hobart" , 0x05C9E0 }, - { "Australia/LHI" , 0x05D324 }, - { "Australia/Lindeman" , 0x05DA73 }, - { "Australia/Lord_Howe" , 0x05DCA5 }, - { "Australia/Melbourne" , 0x05E404 }, - { "Australia/North" , 0x05ECC7 }, - { "Australia/NSW" , 0x05EE16 }, - { "Australia/Perth" , 0x05F6D1 }, - { "Australia/Queensland" , 0x05F8DE }, - { "Australia/South" , 0x05FAAE }, - { "Australia/Sydney" , 0x060378 }, - { "Australia/Tasmania" , 0x060C53 }, - { "Australia/Victoria" , 0x06157E }, - { "Australia/West" , 0x061E39 }, - { "Australia/Yancowinna" , 0x062024 }, - { "Brazil/Acre" , 0x062912 }, - { "Brazil/DeNoronha" , 0x062BAE }, - { "Brazil/East" , 0x062E92 }, - { "Brazil/West" , 0x06367D }, - { "Canada/Atlantic" , 0x0638F1 }, - { "Canada/Central" , 0x06466B }, - { "Canada/East-Saskatchewan" , 0x065F7D }, - { "Canada/Eastern" , 0x0651C2 }, - { "Canada/Mountain" , 0x06636B }, - { "Canada/Newfoundland" , 0x066CD9 }, - { "Canada/Pacific" , 0x067B35 }, - { "Canada/Saskatchewan" , 0x068696 }, - { "Canada/Yukon" , 0x068A84 }, - { "CET" , 0x0692BD }, - { "Chile/Continental" , 0x069AFF }, - { "Chile/EasterIsland" , 0x06A27C }, - { "CST6CDT" , 0x06A8D6 }, - { "Cuba" , 0x06B1D8 }, - { "EET" , 0x06BB69 }, - { "Egypt" , 0x06C2C9 }, - { "Eire" , 0x06CA89 }, - { "EST" , 0x06D87C }, - { "EST5EDT" , 0x06D907 }, - { "Etc/GMT" , 0x06E209 }, - { "Etc/GMT+0" , 0x06E3AA }, - { "Etc/GMT+1" , 0x06E4C9 }, - { "Etc/GMT+10" , 0x06E5F4 }, - { "Etc/GMT+11" , 0x06E723 }, - { "Etc/GMT+12" , 0x06E852 }, - { "Etc/GMT+2" , 0x06EAAD }, - { "Etc/GMT+3" , 0x06EBD4 }, - { "Etc/GMT+4" , 0x06ECFB }, - { "Etc/GMT+5" , 0x06EE22 }, - { "Etc/GMT+6" , 0x06EF49 }, - { "Etc/GMT+7" , 0x06F070 }, - { "Etc/GMT+8" , 0x06F197 }, - { "Etc/GMT+9" , 0x06F2BE }, - { "Etc/GMT-0" , 0x06E31F }, - { "Etc/GMT-1" , 0x06E435 }, - { "Etc/GMT-10" , 0x06E55C }, - { "Etc/GMT-11" , 0x06E68B }, - { "Etc/GMT-12" , 0x06E7BA }, - { "Etc/GMT-13" , 0x06E8E9 }, - { "Etc/GMT-14" , 0x06E981 }, - { "Etc/GMT-2" , 0x06EA19 }, - { "Etc/GMT-3" , 0x06EB40 }, - { "Etc/GMT-4" , 0x06EC67 }, - { "Etc/GMT-5" , 0x06ED8E }, - { "Etc/GMT-6" , 0x06EEB5 }, - { "Etc/GMT-7" , 0x06EFDC }, - { "Etc/GMT-8" , 0x06F103 }, - { "Etc/GMT-9" , 0x06F22A }, - { "Etc/GMT0" , 0x06E294 }, - { "Etc/Greenwich" , 0x06F351 }, - { "Etc/UCT" , 0x06F3DC }, - { "Etc/Universal" , 0x06F467 }, - { "Etc/UTC" , 0x06F4F2 }, - { "Etc/Zulu" , 0x06F57D }, - { "Europe/Amsterdam" , 0x06F608 }, - { "Europe/Andorra" , 0x070193 }, - { "Europe/Athens" , 0x070876 }, - { "Europe/Belfast" , 0x071161 }, - { "Europe/Belgrade" , 0x071FD4 }, - { "Europe/Berlin" , 0x072785 }, - { "Europe/Bratislava" , 0x0730BE }, - { "Europe/Brussels" , 0x0739AA }, - { "Europe/Bucharest" , 0x074550 }, - { "Europe/Budapest" , 0x074E09 }, - { "Europe/Busingen" , 0x07577A }, - { "Europe/Chisinau" , 0x075F0C }, - { "Europe/Copenhagen" , 0x076899 }, - { "Europe/Dublin" , 0x077115 }, - { "Europe/Gibraltar" , 0x077F08 }, - { "Europe/Guernsey" , 0x078B09 }, - { "Europe/Helsinki" , 0x07997C }, - { "Europe/Isle_of_Man" , 0x07A0FD }, - { "Europe/Istanbul" , 0x07AF70 }, - { "Europe/Jersey" , 0x07BA37 }, - { "Europe/Kaliningrad" , 0x07C8AA }, - { "Europe/Kiev" , 0x07CEDB }, - { "Europe/Lisbon" , 0x07D726 }, - { "Europe/Ljubljana" , 0x07E4B7 }, - { "Europe/London" , 0x07EC68 }, - { "Europe/Luxembourg" , 0x07FADB }, - { "Europe/Madrid" , 0x080685 }, - { "Europe/Malta" , 0x0810D4 }, - { "Europe/Mariehamn" , 0x081B25 }, - { "Europe/Minsk" , 0x0822A6 }, - { "Europe/Monaco" , 0x08280A }, - { "Europe/Moscow" , 0x08339F }, - { "Europe/Nicosia" , 0x0839BA }, - { "Europe/Oslo" , 0x0841A6 }, - { "Europe/Paris" , 0x084A7D }, - { "Europe/Podgorica" , 0x085624 }, - { "Europe/Prague" , 0x085DD5 }, - { "Europe/Riga" , 0x0866C1 }, - { "Europe/Rome" , 0x086F88 }, - { "Europe/Samara" , 0x087A0A }, - { "Europe/San_Marino" , 0x087FC1 }, - { "Europe/Sarajevo" , 0x088A43 }, - { "Europe/Simferopol" , 0x0891F4 }, - { "Europe/Skopje" , 0x0897F2 }, - { "Europe/Sofia" , 0x089FA3 }, - { "Europe/Stockholm" , 0x08A801 }, - { "Europe/Tallinn" , 0x08AF8B }, - { "Europe/Tirane" , 0x08B830 }, - { "Europe/Tiraspol" , 0x08C06E }, - { "Europe/Uzhgorod" , 0x08C9FB }, - { "Europe/Vaduz" , 0x08D246 }, - { "Europe/Vatican" , 0x08D9D0 }, - { "Europe/Vienna" , 0x08E452 }, - { "Europe/Vilnius" , 0x08ED1B }, - { "Europe/Volgograd" , 0x08F5BE }, - { "Europe/Warsaw" , 0x08FB0E }, - { "Europe/Zagreb" , 0x0905AB }, - { "Europe/Zaporozhye" , 0x090D5C }, - { "Europe/Zurich" , 0x0915D5 }, - { "Factory" , 0x091D5F }, - { "GB" , 0x091E73 }, - { "GB-Eire" , 0x092CE6 }, - { "GMT" , 0x093B59 }, - { "GMT+0" , 0x093CFA }, - { "GMT-0" , 0x093C6F }, - { "GMT0" , 0x093BE4 }, - { "Greenwich" , 0x093D85 }, - { "Hongkong" , 0x093E10 }, - { "HST" , 0x0942C1 }, - { "Iceland" , 0x09434D }, - { "Indian/Antananarivo" , 0x0947FF }, - { "Indian/Chagos" , 0x094926 }, - { "Indian/Christmas" , 0x0949FB }, - { "Indian/Cocos" , 0x094A9C }, - { "Indian/Comoro" , 0x094B40 }, - { "Indian/Kerguelen" , 0x094C67 }, - { "Indian/Mahe" , 0x094D1E }, - { "Indian/Maldives" , 0x094DD5 }, - { "Indian/Mauritius" , 0x094EAD }, - { "Indian/Mayotte" , 0x094FB6 }, - { "Indian/Reunion" , 0x0950DD }, - { "Iran" , 0x095194 }, - { "Israel" , 0x09581D }, - { "Jamaica" , 0x096102 }, - { "Japan" , 0x096309 }, - { "Kwajalein" , 0x096478 }, - { "Libya" , 0x096571 }, - { "MET" , 0x09680C }, - { "Mexico/BajaNorte" , 0x09704E }, - { "Mexico/BajaSur" , 0x09798E }, - { "Mexico/General" , 0x097FB6 }, - { "MST" , 0x098614 }, - { "MST7MDT" , 0x09869F }, - { "Navajo" , 0x098FA1 }, - { "NZ" , 0x099942 }, - { "NZ-CHAT" , 0x09A2EA }, - { "Pacific/Apia" , 0x09AAFF }, - { "Pacific/Auckland" , 0x09AF59 }, - { "Pacific/Bougainville" , 0x09B90F }, - { "Pacific/Chatham" , 0x09BA3F }, - { "Pacific/Chuuk" , 0x09C263 }, - { "Pacific/Easter" , 0x09C31C }, - { "Pacific/Efate" , 0x09C983 }, - { "Pacific/Enderbury" , 0x09CB6D }, - { "Pacific/Fakaofo" , 0x09CC6E }, - { "Pacific/Fiji" , 0x09CD3F }, - { "Pacific/Funafuti" , 0x09D17D }, - { "Pacific/Galapagos" , 0x09D21F }, - { "Pacific/Gambier" , 0x09D30F }, - { "Pacific/Guadalcanal" , 0x09D3D7 }, - { "Pacific/Guam" , 0x09D48F }, - { "Pacific/Honolulu" , 0x09D57C }, - { "Pacific/Johnston" , 0x09D6A2 }, - { "Pacific/Kiritimati" , 0x09D7D0 }, - { "Pacific/Kosrae" , 0x09D8CE }, - { "Pacific/Kwajalein" , 0x09D9C6 }, - { "Pacific/Majuro" , 0x09DAC8 }, - { "Pacific/Marquesas" , 0x09DBA7 }, - { "Pacific/Midway" , 0x09DC74 }, - { "Pacific/Nauru" , 0x09DD9E }, - { "Pacific/Niue" , 0x09DEA8 }, - { "Pacific/Norfolk" , 0x09DF96 }, - { "Pacific/Noumea" , 0x09E072 }, - { "Pacific/Pago_Pago" , 0x09E1B8 }, - { "Pacific/Palau" , 0x09E2D4 }, - { "Pacific/Pitcairn" , 0x09E375 }, - { "Pacific/Pohnpei" , 0x09E44C }, - { "Pacific/Ponape" , 0x09E501 }, - { "Pacific/Port_Moresby" , 0x09E5A6 }, - { "Pacific/Rarotonga" , 0x09E66C }, - { "Pacific/Saipan" , 0x09E8B6 }, - { "Pacific/Samoa" , 0x09E9A3 }, - { "Pacific/Tahiti" , 0x09EABF }, - { "Pacific/Tarawa" , 0x09EB88 }, - { "Pacific/Tongatapu" , 0x09EC3C }, - { "Pacific/Truk" , 0x09ED9B }, - { "Pacific/Wake" , 0x09EE40 }, - { "Pacific/Wallis" , 0x09EEF0 }, - { "Pacific/Yap" , 0x09EF92 }, - { "Poland" , 0x09F037 }, - { "Portugal" , 0x09FAD4 }, - { "PRC" , 0x0A085D }, - { "PST8PDT" , 0x0A0A07 }, - { "ROC" , 0x0A1309 }, - { "ROK" , 0x0A1635 }, - { "Singapore" , 0x0A187C }, - { "Turkey" , 0x0A1A34 }, - { "UCT" , 0x0A24FB }, - { "Universal" , 0x0A2586 }, - { "US/Alaska" , 0x0A2611 }, - { "US/Aleutian" , 0x0A2F6D }, - { "US/Arizona" , 0x0A38B6 }, - { "US/Central" , 0x0A3A23 }, - { "US/East-Indiana" , 0x0A5615 }, - { "US/Eastern" , 0x0A4830 }, - { "US/Hawaii" , 0x0A5CAC }, - { "US/Indiana-Starke" , 0x0A5DCC }, - { "US/Michigan" , 0x0A675D }, - { "US/Mountain" , 0x0A7011 }, - { "US/Pacific" , 0x0A79B2 }, - { "US/Pacific-New" , 0x0A84DB }, - { "US/Samoa" , 0x0A9004 }, - { "UTC" , 0x0A9120 }, - { "W-SU" , 0x0A9908 }, - { "WET" , 0x0A91AB }, - { "Zulu" , 0x0A9F0C }, + { "Africa/Ceuta" , 0x001DD0 }, + { "Africa/Conakry" , 0x002606 }, + { "Africa/Dakar" , 0x0026BC }, + { "Africa/Dar_es_Salaam" , 0x002772 }, + { "Africa/Djibouti" , 0x002899 }, + { "Africa/Douala" , 0x0029C0 }, + { "Africa/El_Aaiun" , 0x002A77 }, + { "Africa/Freetown" , 0x003036 }, + { "Africa/Gaborone" , 0x0030EC }, + { "Africa/Harare" , 0x0031A3 }, + { "Africa/Johannesburg" , 0x00325A }, + { "Africa/Juba" , 0x003375 }, + { "Africa/Kampala" , 0x00362C }, + { "Africa/Khartoum" , 0x003753 }, + { "Africa/Kigali" , 0x003A0A }, + { "Africa/Kinshasa" , 0x003AC1 }, + { "Africa/Lagos" , 0x003B8F }, + { "Africa/Libreville" , 0x003C46 }, + { "Africa/Lome" , 0x003CFD }, + { "Africa/Luanda" , 0x003DB3 }, + { "Africa/Lubumbashi" , 0x003E6A }, + { "Africa/Lusaka" , 0x003F38 }, + { "Africa/Malabo" , 0x003FEF }, + { "Africa/Maputo" , 0x0040A6 }, + { "Africa/Maseru" , 0x00415D }, + { "Africa/Mbabane" , 0x004278 }, + { "Africa/Mogadishu" , 0x004393 }, + { "Africa/Monrovia" , 0x0044BA }, + { "Africa/Nairobi" , 0x0045B7 }, + { "Africa/Ndjamena" , 0x0046DE }, + { "Africa/Niamey" , 0x0047CB }, + { "Africa/Nouakchott" , 0x004882 }, + { "Africa/Ouagadougou" , 0x004938 }, + { "Africa/Porto-Novo" , 0x0049EE }, + { "Africa/Sao_Tome" , 0x004AA5 }, + { "Africa/Timbuktu" , 0x004B5B }, + { "Africa/Tripoli" , 0x004C11 }, + { "Africa/Tunis" , 0x004EAC }, + { "Africa/Windhoek" , 0x00517E }, + { "America/Adak" , 0x0057B8 }, + { "America/Anchorage" , 0x006111 }, + { "America/Anguilla" , 0x006A78 }, + { "America/Antigua" , 0x006B2E }, + { "America/Araguaina" , 0x006BE4 }, + { "America/Argentina/Buenos_Aires" , 0x006F79 }, + { "America/Argentina/Catamarca" , 0x0073D9 }, + { "America/Argentina/ComodRivadavia" , 0x007869 }, + { "America/Argentina/Cordoba" , 0x007CDE }, + { "America/Argentina/Jujuy" , 0x008182 }, + { "America/Argentina/La_Rioja" , 0x008611 }, + { "America/Argentina/Mendoza" , 0x008AA1 }, + { "America/Argentina/Rio_Gallegos" , 0x008F4E }, + { "America/Argentina/Salta" , 0x0093D2 }, + { "America/Argentina/San_Juan" , 0x00983B }, + { "America/Argentina/San_Luis" , 0x009CCB }, + { "America/Argentina/Tucuman" , 0x00A177 }, + { "America/Argentina/Ushuaia" , 0x00A614 }, + { "America/Aruba" , 0x00AA9E }, + { "America/Asuncion" , 0x00AB7A }, + { "America/Atikokan" , 0x00B394 }, + { "America/Atka" , 0x00B53D }, + { "America/Bahia" , 0x00BE86 }, + { "America/Bahia_Banderas" , 0x00C2A3 }, + { "America/Barbados" , 0x00C90B }, + { "America/Belem" , 0x00CA6F }, + { "America/Belize" , 0x00CCD4 }, + { "America/Blanc-Sablon" , 0x00D0B0 }, + { "America/Boa_Vista" , 0x00D222 }, + { "America/Bogota" , 0x00D4B9 }, + { "America/Boise" , 0x00D5C6 }, + { "America/Buenos_Aires" , 0x00DF5E }, + { "America/Cambridge_Bay" , 0x00E3A9 }, + { "America/Campo_Grande" , 0x00EC03 }, + { "America/Cancun" , 0x00F400 }, + { "America/Caracas" , 0x00F760 }, + { "America/Catamarca" , 0x00F876 }, + { "America/Cayenne" , 0x00FCEB }, + { "America/Cayman" , 0x00FDBF }, + { "America/Chicago" , 0x010128 }, + { "America/Chihuahua" , 0x010F41 }, + { "America/Coral_Harbour" , 0x011574 }, + { "America/Cordoba" , 0x0116D9 }, + { "America/Costa_Rica" , 0x011B4E }, + { "America/Creston" , 0x011CAF }, + { "America/Cuiaba" , 0x011DD6 }, + { "America/Curacao" , 0x0125B0 }, + { "America/Danmarkshavn" , 0x01268C }, + { "America/Dawson" , 0x012983 }, + { "America/Dawson_Creek" , 0x0131D6 }, + { "America/Denver" , 0x01364E }, + { "America/Detroit" , 0x013FFC }, + { "America/Dominica" , 0x0148D8 }, + { "America/Edmonton" , 0x01498E }, + { "America/Eirunepe" , 0x01533E }, + { "America/El_Salvador" , 0x015600 }, + { "America/Ensenada" , 0x015706 }, + { "America/Fort_Wayne" , 0x016348 }, + { "America/Fortaleza" , 0x016046 }, + { "America/Glace_Bay" , 0x0169DF }, + { "America/Godthab" , 0x0172D0 }, + { "America/Goose_Bay" , 0x017A3F }, + { "America/Grand_Turk" , 0x018707 }, + { "America/Grenada" , 0x018C1A }, + { "America/Guadeloupe" , 0x018CD0 }, + { "America/Guatemala" , 0x018D86 }, + { "America/Guayaquil" , 0x018EC4 }, + { "America/Guyana" , 0x018FA3 }, + { "America/Halifax" , 0x0190BD }, + { "America/Havana" , 0x019E65 }, + { "America/Hermosillo" , 0x01A7F6 }, + { "America/Indiana/Indianapolis" , 0x01A9E7 }, + { "America/Indiana/Knox" , 0x01B0A5 }, + { "America/Indiana/Marengo" , 0x01BA5C }, + { "America/Indiana/Petersburg" , 0x01C153 }, + { "America/Indiana/Tell_City" , 0x01CF93 }, + { "America/Indiana/Vevay" , 0x01D68B }, + { "America/Indiana/Vincennes" , 0x01DC51 }, + { "America/Indiana/Winamac" , 0x01E344 }, + { "America/Indianapolis" , 0x01C8FC }, + { "America/Inuvik" , 0x01EA72 }, + { "America/Iqaluit" , 0x01F230 }, + { "America/Jamaica" , 0x01FA66 }, + { "America/Jujuy" , 0x01FC6D }, + { "America/Juneau" , 0x0200F2 }, + { "America/Kentucky/Louisville" , 0x020A56 }, + { "America/Kentucky/Monticello" , 0x021568 }, + { "America/Knox_IN" , 0x021ED3 }, + { "America/Kralendijk" , 0x022864 }, + { "America/La_Paz" , 0x022940 }, + { "America/Lima" , 0x022A3F }, + { "America/Los_Angeles" , 0x022BEC }, + { "America/Louisville" , 0x023721 }, + { "America/Lower_Princes" , 0x02420A }, + { "America/Maceio" , 0x0242E6 }, + { "America/Managua" , 0x0245F6 }, + { "America/Manaus" , 0x0247D1 }, + { "America/Marigot" , 0x024A4F }, + { "America/Martinique" , 0x024B05 }, + { "America/Matamoros" , 0x024C12 }, + { "America/Mazatlan" , 0x0251F0 }, + { "America/Mendoza" , 0x025840 }, + { "America/Menominee" , 0x025CE1 }, + { "America/Merida" , 0x02661F }, + { "America/Metlakatla" , 0x026BFB }, + { "America/Mexico_City" , 0x026F01 }, + { "America/Miquelon" , 0x02757C }, + { "America/Moncton" , 0x027C1C }, + { "America/Monterrey" , 0x0288A0 }, + { "America/Montevideo" , 0x028E88 }, + { "America/Montreal" , 0x029704 }, + { "America/Montserrat" , 0x02A4BF }, + { "America/Nassau" , 0x02A575 }, + { "America/New_York" , 0x02AE6D }, + { "America/Nipigon" , 0x02BC5E }, + { "America/Nome" , 0x02C508 }, + { "America/Noronha" , 0x02CE75 }, + { "America/North_Dakota/Beulah" , 0x02D169 }, + { "America/North_Dakota/Center" , 0x02DAF5 }, + { "America/North_Dakota/New_Salem" , 0x02E481 }, + { "America/Ojinaga" , 0x02EE22 }, + { "America/Panama" , 0x02F44B }, + { "America/Pangnirtung" , 0x02F522 }, + { "America/Paramaribo" , 0x02FD8D }, + { "America/Phoenix" , 0x02FECD }, + { "America/Port-au-Prince" , 0x03006A }, + { "America/Port_of_Spain" , 0x0308DD }, + { "America/Porto_Acre" , 0x030641 }, + { "America/Porto_Velho" , 0x030993 }, + { "America/Puerto_Rico" , 0x030BF3 }, + { "America/Rainy_River" , 0x030CFE }, + { "America/Rankin_Inlet" , 0x03158F }, + { "America/Recife" , 0x031D43 }, + { "America/Regina" , 0x032031 }, + { "America/Resolute" , 0x032454 }, + { "America/Rio_Branco" , 0x032C0A }, + { "America/Rosario" , 0x032EAA }, + { "America/Santa_Isabel" , 0x03331F }, + { "America/Santarem" , 0x033C99 }, + { "America/Santiago" , 0x033F1D }, + { "America/Santo_Domingo" , 0x0346A8 }, + { "America/Sao_Paulo" , 0x03489D }, + { "America/Scoresbysund" , 0x0350BA }, + { "America/Shiprock" , 0x03586A }, + { "America/Sitka" , 0x03620B }, + { "America/St_Barthelemy" , 0x036B6D }, + { "America/St_Johns" , 0x036C23 }, + { "America/St_Kitts" , 0x037AA7 }, + { "America/St_Lucia" , 0x037B5D }, + { "America/St_Thomas" , 0x037C13 }, + { "America/St_Vincent" , 0x037CC9 }, + { "America/Swift_Current" , 0x037D7F }, + { "America/Tegucigalpa" , 0x037FF7 }, + { "America/Thule" , 0x038119 }, + { "America/Thunder_Bay" , 0x03872D }, + { "America/Tijuana" , 0x038FFF }, + { "America/Toronto" , 0x03996F }, + { "America/Tortola" , 0x03A75A }, + { "America/Vancouver" , 0x03A810 }, + { "America/Virgin" , 0x03B395 }, + { "America/Whitehorse" , 0x03B44B }, + { "America/Winnipeg" , 0x03BC9E }, + { "America/Yakutat" , 0x03C81B }, + { "America/Yellowknife" , 0x03D154 }, + { "Antarctica/Casey" , 0x03D949 }, + { "Antarctica/Davis" , 0x03DA84 }, + { "Antarctica/DumontDUrville" , 0x03DBCF }, + { "Antarctica/Macquarie" , 0x03DCE3 }, + { "Antarctica/Mawson" , 0x03E2F9 }, + { "Antarctica/McMurdo" , 0x03E3EA }, + { "Antarctica/Palmer" , 0x03EDBF }, + { "Antarctica/Rothera" , 0x03F370 }, + { "Antarctica/South_Pole" , 0x03F449 }, + { "Antarctica/Syowa" , 0x03FDF1 }, + { "Antarctica/Troll" , 0x03FEC3 }, + { "Antarctica/Vostok" , 0x040376 }, + { "Arctic/Longyearbyen" , 0x04044B }, + { "Asia/Aden" , 0x040D22 }, + { "Asia/Almaty" , 0x040DD9 }, + { "Asia/Amman" , 0x04119B }, + { "Asia/Anadyr" , 0x0418FC }, + { "Asia/Aqtau" , 0x041DE8 }, + { "Asia/Aqtobe" , 0x04229B }, + { "Asia/Ashgabat" , 0x0426D2 }, + { "Asia/Ashkhabad" , 0x04297D }, + { "Asia/Baghdad" , 0x042C28 }, + { "Asia/Bahrain" , 0x043010 }, + { "Asia/Baku" , 0x0430ED }, + { "Asia/Bangkok" , 0x04389D }, + { "Asia/Beirut" , 0x043975 }, + { "Asia/Bishkek" , 0x044200 }, + { "Asia/Brunei" , 0x044631 }, + { "Asia/Calcutta" , 0x044706 }, + { "Asia/Chita" , 0x044835 }, + { "Asia/Choibalsan" , 0x044D49 }, + { "Asia/Chongqing" , 0x045398 }, + { "Asia/Chungking" , 0x045542 }, + { "Asia/Colombo" , 0x0456EC }, + { "Asia/Dacca" , 0x04587D }, + { "Asia/Damascus" , 0x045A0F }, + { "Asia/Dhaka" , 0x04632B }, + { "Asia/Dili" , 0x0464BD }, + { "Asia/Dubai" , 0x0465FE }, + { "Asia/Dushanbe" , 0x0466B5 }, + { "Asia/Gaza" , 0x046924 }, + { "Asia/Harbin" , 0x047244 }, + { "Asia/Hebron" , 0x0473EE }, + { "Asia/Ho_Chi_Minh" , 0x047D29 }, + { "Asia/Hong_Kong" , 0x047EAA }, + { "Asia/Hovd" , 0x04835B }, + { "Asia/Irkutsk" , 0x04897B }, + { "Asia/Istanbul" , 0x048E89 }, + { "Asia/Jakarta" , 0x049950 }, + { "Asia/Jayapura" , 0x049ADC }, + { "Asia/Jerusalem" , 0x049C0A }, + { "Asia/Kabul" , 0x04A4EF }, + { "Asia/Kamchatka" , 0x04A5C2 }, + { "Asia/Karachi" , 0x04AA9D }, + { "Asia/Kashgar" , 0x04AC3C }, + { "Asia/Kathmandu" , 0x04ACF3 }, + { "Asia/Katmandu" , 0x04ADD3 }, + { "Asia/Khandyga" , 0x04AEB3 }, + { "Asia/Kolkata" , 0x04B40C }, + { "Asia/Krasnoyarsk" , 0x04B53B }, + { "Asia/Kuala_Lumpur" , 0x04BA2A }, + { "Asia/Kuching" , 0x04BBD7 }, + { "Asia/Kuwait" , 0x04BDF9 }, + { "Asia/Macao" , 0x04BEB0 }, + { "Asia/Macau" , 0x04C1D7 }, + { "Asia/Magadan" , 0x04C4FE }, + { "Asia/Makassar" , 0x04CA05 }, + { "Asia/Manila" , 0x04CB71 }, + { "Asia/Muscat" , 0x04CCE6 }, + { "Asia/Nicosia" , 0x04CD9D }, + { "Asia/Novokuznetsk" , 0x04D589 }, + { "Asia/Novosibirsk" , 0x04DAA6 }, + { "Asia/Omsk" , 0x04DF81 }, + { "Asia/Oral" , 0x04E46F }, + { "Asia/Phnom_Penh" , 0x04E8D6 }, + { "Asia/Pontianak" , 0x04E9AE }, + { "Asia/Pyongyang" , 0x04EB46 }, + { "Asia/Qatar" , 0x04EC69 }, + { "Asia/Qyzylorda" , 0x04ED46 }, + { "Asia/Rangoon" , 0x04F1AC }, + { "Asia/Riyadh" , 0x04F2D5 }, + { "Asia/Saigon" , 0x04F38C }, + { "Asia/Sakhalin" , 0x04F50D }, + { "Asia/Samarkand" , 0x04F9FF }, + { "Asia/Seoul" , 0x04FCCD }, + { "Asia/Shanghai" , 0x04FF14 }, + { "Asia/Singapore" , 0x0500CA }, + { "Asia/Srednekolymsk" , 0x050282 }, + { "Asia/Taipei" , 0x050782 }, + { "Asia/Tashkent" , 0x050AAE }, + { "Asia/Tbilisi" , 0x050D72 }, + { "Asia/Tehran" , 0x0511F4 }, + { "Asia/Tel_Aviv" , 0x05187D }, + { "Asia/Thimbu" , 0x052162 }, + { "Asia/Thimphu" , 0x05223F }, + { "Asia/Tokyo" , 0x05231C }, + { "Asia/Ujung_Pandang" , 0x05248B }, + { "Asia/Ulaanbaatar" , 0x0525AF }, + { "Asia/Ulan_Bator" , 0x052BB2 }, + { "Asia/Urumqi" , 0x0531A7 }, + { "Asia/Ust-Nera" , 0x05326B }, + { "Asia/Vientiane" , 0x05379B }, + { "Asia/Vladivostok" , 0x053873 }, + { "Asia/Yakutsk" , 0x053D60 }, + { "Asia/Yekaterinburg" , 0x05424C }, + { "Asia/Yerevan" , 0x05479F }, + { "Atlantic/Azores" , 0x054CA8 }, + { "Atlantic/Bermuda" , 0x055A5A }, + { "Atlantic/Canary" , 0x05623A }, + { "Atlantic/Cape_Verde" , 0x0569CD }, + { "Atlantic/Faeroe" , 0x056AD7 }, + { "Atlantic/Faroe" , 0x057208 }, + { "Atlantic/Jan_Mayen" , 0x057939 }, + { "Atlantic/Madeira" , 0x058210 }, + { "Atlantic/Reykjavik" , 0x058FC1 }, + { "Atlantic/South_Georgia" , 0x059473 }, + { "Atlantic/St_Helena" , 0x0599FD }, + { "Atlantic/Stanley" , 0x059513 }, + { "Australia/ACT" , 0x059AB3 }, + { "Australia/Adelaide" , 0x05A36E }, + { "Australia/Brisbane" , 0x05AC47 }, + { "Australia/Broken_Hill" , 0x05AE32 }, + { "Australia/Canberra" , 0x05B73C }, + { "Australia/Currie" , 0x05BFF7 }, + { "Australia/Darwin" , 0x05C8C8 }, + { "Australia/Eucla" , 0x05CA29 }, + { "Australia/Hobart" , 0x05CC3A }, + { "Australia/LHI" , 0x05D57E }, + { "Australia/Lindeman" , 0x05DCCD }, + { "Australia/Lord_Howe" , 0x05DEFF }, + { "Australia/Melbourne" , 0x05E65E }, + { "Australia/North" , 0x05EF21 }, + { "Australia/NSW" , 0x05F070 }, + { "Australia/Perth" , 0x05F92B }, + { "Australia/Queensland" , 0x05FB38 }, + { "Australia/South" , 0x05FD08 }, + { "Australia/Sydney" , 0x0605D2 }, + { "Australia/Tasmania" , 0x060EAD }, + { "Australia/Victoria" , 0x0617D8 }, + { "Australia/West" , 0x062093 }, + { "Australia/Yancowinna" , 0x06227E }, + { "Brazil/Acre" , 0x062B6C }, + { "Brazil/DeNoronha" , 0x062E08 }, + { "Brazil/East" , 0x0630EC }, + { "Brazil/West" , 0x0638D7 }, + { "Canada/Atlantic" , 0x063B4B }, + { "Canada/Central" , 0x0648C5 }, + { "Canada/East-Saskatchewan" , 0x0661D7 }, + { "Canada/Eastern" , 0x06541C }, + { "Canada/Mountain" , 0x0665C5 }, + { "Canada/Newfoundland" , 0x066F33 }, + { "Canada/Pacific" , 0x067D8F }, + { "Canada/Saskatchewan" , 0x0688F0 }, + { "Canada/Yukon" , 0x068CDE }, + { "CET" , 0x069517 }, + { "Chile/Continental" , 0x069D59 }, + { "Chile/EasterIsland" , 0x06A4D6 }, + { "CST6CDT" , 0x06AB30 }, + { "Cuba" , 0x06B432 }, + { "EET" , 0x06BDC3 }, + { "Egypt" , 0x06C523 }, + { "Eire" , 0x06CCE3 }, + { "EST" , 0x06DAD6 }, + { "EST5EDT" , 0x06DB61 }, + { "Etc/GMT" , 0x06E463 }, + { "Etc/GMT+0" , 0x06E604 }, + { "Etc/GMT+1" , 0x06E723 }, + { "Etc/GMT+10" , 0x06E84E }, + { "Etc/GMT+11" , 0x06E97D }, + { "Etc/GMT+12" , 0x06EAAC }, + { "Etc/GMT+2" , 0x06ED07 }, + { "Etc/GMT+3" , 0x06EE2E }, + { "Etc/GMT+4" , 0x06EF55 }, + { "Etc/GMT+5" , 0x06F07C }, + { "Etc/GMT+6" , 0x06F1A3 }, + { "Etc/GMT+7" , 0x06F2CA }, + { "Etc/GMT+8" , 0x06F3F1 }, + { "Etc/GMT+9" , 0x06F518 }, + { "Etc/GMT-0" , 0x06E579 }, + { "Etc/GMT-1" , 0x06E68F }, + { "Etc/GMT-10" , 0x06E7B6 }, + { "Etc/GMT-11" , 0x06E8E5 }, + { "Etc/GMT-12" , 0x06EA14 }, + { "Etc/GMT-13" , 0x06EB43 }, + { "Etc/GMT-14" , 0x06EBDB }, + { "Etc/GMT-2" , 0x06EC73 }, + { "Etc/GMT-3" , 0x06ED9A }, + { "Etc/GMT-4" , 0x06EEC1 }, + { "Etc/GMT-5" , 0x06EFE8 }, + { "Etc/GMT-6" , 0x06F10F }, + { "Etc/GMT-7" , 0x06F236 }, + { "Etc/GMT-8" , 0x06F35D }, + { "Etc/GMT-9" , 0x06F484 }, + { "Etc/GMT0" , 0x06E4EE }, + { "Etc/Greenwich" , 0x06F5AB }, + { "Etc/UCT" , 0x06F636 }, + { "Etc/Universal" , 0x06F6C1 }, + { "Etc/UTC" , 0x06F74C }, + { "Etc/Zulu" , 0x06F7D7 }, + { "Europe/Amsterdam" , 0x06F862 }, + { "Europe/Andorra" , 0x0703ED }, + { "Europe/Athens" , 0x070AD0 }, + { "Europe/Belfast" , 0x0713BB }, + { "Europe/Belgrade" , 0x07222E }, + { "Europe/Berlin" , 0x0729DF }, + { "Europe/Bratislava" , 0x073318 }, + { "Europe/Brussels" , 0x073C04 }, + { "Europe/Bucharest" , 0x0747AA }, + { "Europe/Budapest" , 0x075063 }, + { "Europe/Busingen" , 0x0759D4 }, + { "Europe/Chisinau" , 0x076166 }, + { "Europe/Copenhagen" , 0x076AF3 }, + { "Europe/Dublin" , 0x07736F }, + { "Europe/Gibraltar" , 0x078162 }, + { "Europe/Guernsey" , 0x078D63 }, + { "Europe/Helsinki" , 0x079BD6 }, + { "Europe/Isle_of_Man" , 0x07A357 }, + { "Europe/Istanbul" , 0x07B1CA }, + { "Europe/Jersey" , 0x07BC91 }, + { "Europe/Kaliningrad" , 0x07CB04 }, + { "Europe/Kiev" , 0x07D135 }, + { "Europe/Lisbon" , 0x07D980 }, + { "Europe/Ljubljana" , 0x07E711 }, + { "Europe/London" , 0x07EEC2 }, + { "Europe/Luxembourg" , 0x07FD35 }, + { "Europe/Madrid" , 0x0808DF }, + { "Europe/Malta" , 0x08132E }, + { "Europe/Mariehamn" , 0x081D7F }, + { "Europe/Minsk" , 0x082500 }, + { "Europe/Monaco" , 0x082A64 }, + { "Europe/Moscow" , 0x0835F9 }, + { "Europe/Nicosia" , 0x083C14 }, + { "Europe/Oslo" , 0x084400 }, + { "Europe/Paris" , 0x084CD7 }, + { "Europe/Podgorica" , 0x08587E }, + { "Europe/Prague" , 0x08602F }, + { "Europe/Riga" , 0x08691B }, + { "Europe/Rome" , 0x0871E2 }, + { "Europe/Samara" , 0x087C64 }, + { "Europe/San_Marino" , 0x08821B }, + { "Europe/Sarajevo" , 0x088C9D }, + { "Europe/Simferopol" , 0x08944E }, + { "Europe/Skopje" , 0x089A4C }, + { "Europe/Sofia" , 0x08A1FD }, + { "Europe/Stockholm" , 0x08AA5B }, + { "Europe/Tallinn" , 0x08B1E5 }, + { "Europe/Tirane" , 0x08BA8A }, + { "Europe/Tiraspol" , 0x08C2C8 }, + { "Europe/Uzhgorod" , 0x08CC55 }, + { "Europe/Vaduz" , 0x08D4A0 }, + { "Europe/Vatican" , 0x08DC2A }, + { "Europe/Vienna" , 0x08E6AC }, + { "Europe/Vilnius" , 0x08EF75 }, + { "Europe/Volgograd" , 0x08F818 }, + { "Europe/Warsaw" , 0x08FD68 }, + { "Europe/Zagreb" , 0x090805 }, + { "Europe/Zaporozhye" , 0x090FB6 }, + { "Europe/Zurich" , 0x09182F }, + { "Factory" , 0x091FB9 }, + { "GB" , 0x0920CD }, + { "GB-Eire" , 0x092F40 }, + { "GMT" , 0x093DB3 }, + { "GMT+0" , 0x093F54 }, + { "GMT-0" , 0x093EC9 }, + { "GMT0" , 0x093E3E }, + { "Greenwich" , 0x093FDF }, + { "Hongkong" , 0x09406A }, + { "HST" , 0x09451B }, + { "Iceland" , 0x0945A7 }, + { "Indian/Antananarivo" , 0x094A59 }, + { "Indian/Chagos" , 0x094B80 }, + { "Indian/Christmas" , 0x094C55 }, + { "Indian/Cocos" , 0x094CF6 }, + { "Indian/Comoro" , 0x094D9A }, + { "Indian/Kerguelen" , 0x094EC1 }, + { "Indian/Mahe" , 0x094F78 }, + { "Indian/Maldives" , 0x09502F }, + { "Indian/Mauritius" , 0x095107 }, + { "Indian/Mayotte" , 0x095210 }, + { "Indian/Reunion" , 0x095337 }, + { "Iran" , 0x0953EE }, + { "Israel" , 0x095A77 }, + { "Jamaica" , 0x09635C }, + { "Japan" , 0x096563 }, + { "Kwajalein" , 0x0966D2 }, + { "Libya" , 0x0967CB }, + { "MET" , 0x096A66 }, + { "Mexico/BajaNorte" , 0x0972A8 }, + { "Mexico/BajaSur" , 0x097BE8 }, + { "Mexico/General" , 0x098210 }, + { "MST" , 0x09886E }, + { "MST7MDT" , 0x0988F9 }, + { "Navajo" , 0x0991FB }, + { "NZ" , 0x099B9C }, + { "NZ-CHAT" , 0x09A544 }, + { "Pacific/Apia" , 0x09AD59 }, + { "Pacific/Auckland" , 0x09B1B3 }, + { "Pacific/Bougainville" , 0x09BB69 }, + { "Pacific/Chatham" , 0x09BC99 }, + { "Pacific/Chuuk" , 0x09C4BD }, + { "Pacific/Easter" , 0x09C576 }, + { "Pacific/Efate" , 0x09CBDD }, + { "Pacific/Enderbury" , 0x09CDC7 }, + { "Pacific/Fakaofo" , 0x09CEC8 }, + { "Pacific/Fiji" , 0x09CF99 }, + { "Pacific/Funafuti" , 0x09D3D7 }, + { "Pacific/Galapagos" , 0x09D479 }, + { "Pacific/Gambier" , 0x09D569 }, + { "Pacific/Guadalcanal" , 0x09D631 }, + { "Pacific/Guam" , 0x09D6E9 }, + { "Pacific/Honolulu" , 0x09D7D6 }, + { "Pacific/Johnston" , 0x09D8FC }, + { "Pacific/Kiritimati" , 0x09DA2A }, + { "Pacific/Kosrae" , 0x09DB28 }, + { "Pacific/Kwajalein" , 0x09DC20 }, + { "Pacific/Majuro" , 0x09DD22 }, + { "Pacific/Marquesas" , 0x09DE01 }, + { "Pacific/Midway" , 0x09DECE }, + { "Pacific/Nauru" , 0x09DFF8 }, + { "Pacific/Niue" , 0x09E102 }, + { "Pacific/Norfolk" , 0x09E1F0 }, + { "Pacific/Noumea" , 0x09E2CC }, + { "Pacific/Pago_Pago" , 0x09E412 }, + { "Pacific/Palau" , 0x09E52E }, + { "Pacific/Pitcairn" , 0x09E5CF }, + { "Pacific/Pohnpei" , 0x09E6A6 }, + { "Pacific/Ponape" , 0x09E75B }, + { "Pacific/Port_Moresby" , 0x09E800 }, + { "Pacific/Rarotonga" , 0x09E8C6 }, + { "Pacific/Saipan" , 0x09EB10 }, + { "Pacific/Samoa" , 0x09EBFD }, + { "Pacific/Tahiti" , 0x09ED19 }, + { "Pacific/Tarawa" , 0x09EDE2 }, + { "Pacific/Tongatapu" , 0x09EE96 }, + { "Pacific/Truk" , 0x09EFF5 }, + { "Pacific/Wake" , 0x09F09A }, + { "Pacific/Wallis" , 0x09F14A }, + { "Pacific/Yap" , 0x09F1EC }, + { "Poland" , 0x09F291 }, + { "Portugal" , 0x09FD2E }, + { "PRC" , 0x0A0AB7 }, + { "PST8PDT" , 0x0A0C61 }, + { "ROC" , 0x0A1563 }, + { "ROK" , 0x0A188F }, + { "Singapore" , 0x0A1AD6 }, + { "Turkey" , 0x0A1C8E }, + { "UCT" , 0x0A2755 }, + { "Universal" , 0x0A27E0 }, + { "US/Alaska" , 0x0A286B }, + { "US/Aleutian" , 0x0A31C7 }, + { "US/Arizona" , 0x0A3B10 }, + { "US/Central" , 0x0A3C7D }, + { "US/East-Indiana" , 0x0A586F }, + { "US/Eastern" , 0x0A4A8A }, + { "US/Hawaii" , 0x0A5F06 }, + { "US/Indiana-Starke" , 0x0A6026 }, + { "US/Michigan" , 0x0A69B7 }, + { "US/Mountain" , 0x0A726B }, + { "US/Pacific" , 0x0A7C0C }, + { "US/Pacific-New" , 0x0A8735 }, + { "US/Samoa" , 0x0A925E }, + { "UTC" , 0x0A937A }, + { "W-SU" , 0x0A9B62 }, + { "WET" , 0x0A9405 }, + { "Zulu" , 0x0AA166 }, }; /* This is a generated file, do not modify */ -const unsigned char timelib_timezone_db_data_builtin[696215] = { +const unsigned char timelib_timezone_db_data_builtin[696817] = { /* Africa/Abidjan */ @@ -1001,7 +1001,7 @@ const unsigned char timelib_timezone_db_data_builtin[696215] = { /* Africa/Casablanca */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x4D, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x11, 0x80, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x11, 0x80, 0x00, 0x00, 0x00, 0x96, 0x51, 0xF9, 0x9C, 0xC6, 0xFF, 0x14, 0x80, 0xC7, 0x58, 0xAC, 0x70, 0xC7, 0xD9, 0xED, 0x80, 0xD2, 0xA1, 0x32, 0xF0, 0xDB, 0x35, 0xA4, 0x00, 0xDB, 0xEE, 0x27, 0xF0, 0xFB, 0x25, 0x72, 0x40, 0xFB, 0xC2, 0xEF, 0x70, 0x08, 0x6B, 0x84, 0x80, 0x08, 0xC6, 0x6D, 0xF0, 0x0B, 0xE8, 0x0C, 0x00, @@ -1012,98 +1012,96 @@ const unsigned char timelib_timezone_db_data_builtin[696215] = { 0x50, 0x08, 0xBB, 0xA0, 0x50, 0x31, 0x9A, 0x20, 0x50, 0x67, 0xA7, 0xA0, 0x51, 0x7C, 0x82, 0xA0, 0x51, 0xD8, 0xCB, 0xA0, 0x52, 0x05, 0x9E, 0xA0, 0x52, 0x6C, 0x73, 0xA0, 0x53, 0x37, 0x7A, 0xA0, 0x53, 0xAE, 0x21, 0xA0, 0x53, 0xDC, 0x46, 0x20, 0x54, 0x4C, 0x55, 0xA0, 0x55, 0x17, 0x5C, 0xA0, -0x55, 0x7B, 0x8E, 0xA0, 0x55, 0xA9, 0xB3, 0x20, 0x56, 0x2C, 0x37, 0xA0, 0x56, 0xF7, 0x3E, 0xA0, -0x57, 0x52, 0x36, 0x20, 0x57, 0x80, 0x5A, 0xA0, 0x58, 0x15, 0x54, 0x20, 0x58, 0xD7, 0x20, 0xA0, -0x59, 0x1F, 0xA3, 0x20, 0x59, 0x57, 0x02, 0x20, 0x59, 0xF5, 0x36, 0x20, 0x5A, 0xB7, 0x02, 0xA0, -0x5A, 0xF6, 0x4A, 0xA0, 0x5B, 0x24, 0x6F, 0x20, 0x5B, 0xD5, 0x18, 0x20, 0x5C, 0xA0, 0x1F, 0x20, -0x5C, 0xCC, 0xF2, 0x20, 0x5C, 0xFB, 0x16, 0xA0, 0x5D, 0xB4, 0xFA, 0x20, 0x5E, 0x80, 0x01, 0x20, -0x5E, 0x9A, 0x5F, 0x20, 0x5E, 0xD1, 0xBE, 0x20, 0x5F, 0x94, 0xDC, 0x20, 0x60, 0x5F, 0xE3, 0x20, -0x60, 0x71, 0x06, 0xA0, 0x60, 0x9F, 0x2B, 0x20, 0x61, 0x7D, 0xF8, 0xA0, 0x62, 0x3F, 0xC5, 0x20, -0x62, 0x47, 0xAE, 0x20, 0x62, 0x75, 0xD2, 0xA0, 0x63, 0x5D, 0xDA, 0xA0, 0x64, 0x43, 0x3F, 0xA0, -0x65, 0x3D, 0xBC, 0xA0, 0x66, 0x19, 0xE7, 0x20, 0x67, 0x1D, 0x9E, 0xA0, 0x67, 0xF0, 0x8E, 0xA0, -0x68, 0xFD, 0x80, 0xA0, 0x69, 0xC8, 0x87, 0xA0, 0x6A, 0xDD, 0x62, 0xA0, 0x6B, 0xA8, 0x69, 0xA0, -0x6C, 0xC6, 0x7F, 0x20, 0x6D, 0x88, 0x4B, 0xA0, 0x6E, 0xA6, 0x61, 0x20, 0x6F, 0x68, 0x2D, 0xA0, -0x70, 0x86, 0x43, 0x20, 0x71, 0x51, 0x4A, 0x20, 0x72, 0x66, 0x25, 0x20, 0x73, 0x31, 0x2C, 0x20, -0x74, 0x46, 0x07, 0x20, 0x75, 0x11, 0x0E, 0x20, 0x76, 0x2F, 0x23, 0xA0, 0x76, 0xF0, 0xF0, 0x20, -0x78, 0x0F, 0x05, 0xA0, 0x78, 0xD0, 0xD2, 0x20, 0x79, 0xEE, 0xE7, 0xA0, 0x7A, 0xB0, 0xB4, 0x20, -0x7B, 0xCD, 0x78, 0x20, 0x7C, 0x99, 0xD0, 0xA0, 0x7D, 0xA4, 0x1F, 0xA0, 0x7E, 0x79, 0xB2, 0xA0, -0x7F, 0x7A, 0xC7, 0x20, 0x00, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0xFF, 0xFF, 0xF8, 0xE4, 0x00, 0x00, -0x00, 0x00, 0x0E, 0x10, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0E, 0x10, -0x00, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x57, 0x45, 0x53, 0x54, -0x00, 0x57, 0x45, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x11, 0xF8, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x96, 0x51, 0xF9, 0x9C, 0xFF, -0xFF, 0xFF, 0xFF, 0xC6, 0xFF, 0x14, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xC7, 0x58, 0xAC, 0x70, 0xFF, -0xFF, 0xFF, 0xFF, 0xC7, 0xD9, 0xED, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xD2, 0xA1, 0x32, 0xF0, 0xFF, -0xFF, 0xFF, 0xFF, 0xDB, 0x35, 0xA4, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xDB, 0xEE, 0x27, 0xF0, 0xFF, -0xFF, 0xFF, 0xFF, 0xFB, 0x25, 0x72, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xC2, 0xEF, 0x70, 0x00, -0x00, 0x00, 0x00, 0x08, 0x6B, 0x84, 0x80, 0x00, 0x00, 0x00, 0x00, 0x08, 0xC6, 0x6D, 0xF0, 0x00, -0x00, 0x00, 0x00, 0x0B, 0xE8, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x61, 0x47, 0xF0, 0x00, -0x00, 0x00, 0x00, 0x0D, 0xC9, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x8E, 0xF2, 0x70, 0x00, -0x00, 0x00, 0x00, 0x0F, 0xD3, 0x51, 0x80, 0x00, 0x00, 0x00, 0x00, 0x10, 0x27, 0xA3, 0x70, 0x00, -0x00, 0x00, 0x00, 0x1A, 0xB7, 0xA6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x18, 0x6F, 0xF0, 0x00, -0x00, 0x00, 0x00, 0x48, 0x41, 0xE6, 0x80, 0x00, 0x00, 0x00, 0x00, 0x48, 0xBB, 0x22, 0x70, 0x00, -0x00, 0x00, 0x00, 0x4A, 0x23, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4A, 0x8D, 0xD5, 0x70, 0x00, -0x00, 0x00, 0x00, 0x4B, 0xDC, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x4C, 0x5D, 0xE5, 0x70, 0x00, -0x00, 0x00, 0x00, 0x4D, 0x97, 0xB8, 0x80, 0x00, 0x00, 0x00, 0x00, 0x4E, 0x34, 0x8C, 0xF0, 0x00, -0x00, 0x00, 0x00, 0x4F, 0x9C, 0xA0, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x50, 0x08, 0xBB, 0xA0, 0x00, -0x00, 0x00, 0x00, 0x50, 0x31, 0x9A, 0x20, 0x00, 0x00, 0x00, 0x00, 0x50, 0x67, 0xA7, 0xA0, 0x00, -0x00, 0x00, 0x00, 0x51, 0x7C, 0x82, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x51, 0xD8, 0xCB, 0xA0, 0x00, -0x00, 0x00, 0x00, 0x52, 0x05, 0x9E, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x52, 0x6C, 0x73, 0xA0, 0x00, -0x00, 0x00, 0x00, 0x53, 0x37, 0x7A, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x53, 0xAE, 0x21, 0xA0, 0x00, -0x00, 0x00, 0x00, 0x53, 0xDC, 0x46, 0x20, 0x00, 0x00, 0x00, 0x00, 0x54, 0x4C, 0x55, 0xA0, 0x00, -0x00, 0x00, 0x00, 0x55, 0x17, 0x5C, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x55, 0x7B, 0x8E, 0xA0, 0x00, -0x00, 0x00, 0x00, 0x55, 0xA9, 0xB3, 0x20, 0x00, 0x00, 0x00, 0x00, 0x56, 0x2C, 0x37, 0xA0, 0x00, -0x00, 0x00, 0x00, 0x56, 0xF7, 0x3E, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x57, 0x52, 0x36, 0x20, 0x00, -0x00, 0x00, 0x00, 0x57, 0x80, 0x5A, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x58, 0x15, 0x54, 0x20, 0x00, -0x00, 0x00, 0x00, 0x58, 0xD7, 0x20, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x59, 0x1F, 0xA3, 0x20, 0x00, -0x00, 0x00, 0x00, 0x59, 0x57, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x59, 0xF5, 0x36, 0x20, 0x00, -0x00, 0x00, 0x00, 0x5A, 0xB7, 0x02, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x5A, 0xF6, 0x4A, 0xA0, 0x00, -0x00, 0x00, 0x00, 0x5B, 0x24, 0x6F, 0x20, 0x00, 0x00, 0x00, 0x00, 0x5B, 0xD5, 0x18, 0x20, 0x00, -0x00, 0x00, 0x00, 0x5C, 0xA0, 0x1F, 0x20, 0x00, 0x00, 0x00, 0x00, 0x5C, 0xCC, 0xF2, 0x20, 0x00, -0x00, 0x00, 0x00, 0x5C, 0xFB, 0x16, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x5D, 0xB4, 0xFA, 0x20, 0x00, -0x00, 0x00, 0x00, 0x5E, 0x80, 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x5E, 0x9A, 0x5F, 0x20, 0x00, -0x00, 0x00, 0x00, 0x5E, 0xD1, 0xBE, 0x20, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x94, 0xDC, 0x20, 0x00, -0x00, 0x00, 0x00, 0x60, 0x5F, 0xE3, 0x20, 0x00, 0x00, 0x00, 0x00, 0x60, 0x71, 0x06, 0xA0, 0x00, -0x00, 0x00, 0x00, 0x60, 0x9F, 0x2B, 0x20, 0x00, 0x00, 0x00, 0x00, 0x61, 0x7D, 0xF8, 0xA0, 0x00, -0x00, 0x00, 0x00, 0x62, 0x3F, 0xC5, 0x20, 0x00, 0x00, 0x00, 0x00, 0x62, 0x47, 0xAE, 0x20, 0x00, -0x00, 0x00, 0x00, 0x62, 0x75, 0xD2, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x63, 0x5D, 0xDA, 0xA0, 0x00, -0x00, 0x00, 0x00, 0x64, 0x43, 0x3F, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x65, 0x3D, 0xBC, 0xA0, 0x00, -0x00, 0x00, 0x00, 0x66, 0x19, 0xE7, 0x20, 0x00, 0x00, 0x00, 0x00, 0x67, 0x1D, 0x9E, 0xA0, 0x00, -0x00, 0x00, 0x00, 0x67, 0xF0, 0x8E, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x68, 0xFD, 0x80, 0xA0, 0x00, -0x00, 0x00, 0x00, 0x69, 0xC8, 0x87, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x6A, 0xDD, 0x62, 0xA0, 0x00, -0x00, 0x00, 0x00, 0x6B, 0xA8, 0x69, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x6C, 0xC6, 0x7F, 0x20, 0x00, -0x00, 0x00, 0x00, 0x6D, 0x88, 0x4B, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x6E, 0xA6, 0x61, 0x20, 0x00, -0x00, 0x00, 0x00, 0x6F, 0x68, 0x2D, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x70, 0x86, 0x43, 0x20, 0x00, -0x00, 0x00, 0x00, 0x71, 0x51, 0x4A, 0x20, 0x00, 0x00, 0x00, 0x00, 0x72, 0x66, 0x25, 0x20, 0x00, -0x00, 0x00, 0x00, 0x73, 0x31, 0x2C, 0x20, 0x00, 0x00, 0x00, 0x00, 0x74, 0x46, 0x07, 0x20, 0x00, -0x00, 0x00, 0x00, 0x75, 0x11, 0x0E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x76, 0x2F, 0x23, 0xA0, 0x00, -0x00, 0x00, 0x00, 0x76, 0xF0, 0xF0, 0x20, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0F, 0x05, 0xA0, 0x00, -0x00, 0x00, 0x00, 0x78, 0xD0, 0xD2, 0x20, 0x00, 0x00, 0x00, 0x00, 0x79, 0xEE, 0xE7, 0xA0, 0x00, -0x00, 0x00, 0x00, 0x7A, 0xB0, 0xB4, 0x20, 0x00, 0x00, 0x00, 0x00, 0x7B, 0xCD, 0x78, 0x20, 0x00, -0x00, 0x00, 0x00, 0x7C, 0x99, 0xD0, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x7D, 0xA4, 0x1F, 0xA0, 0x00, -0x00, 0x00, 0x00, 0x7E, 0x79, 0xB2, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x7A, 0xC7, 0x20, 0x00, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x03, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0xFF, 0xFF, 0xF8, 0xE4, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x01, -0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x0D, 0x00, 0x00, 0x00, -0x00, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x57, 0x45, 0x53, 0x54, 0x00, 0x57, 0x45, 0x54, 0x00, -0x43, 0x45, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x57, -0x45, 0x54, 0x30, 0x57, 0x45, 0x53, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x35, 0x2E, 0x30, 0x2C, 0x4D, -0x31, 0x30, 0x2E, 0x35, 0x2E, 0x30, 0x2F, 0x33, 0x0A, 0x00, 0xBC, 0xAC, 0xC8, 0x01, 0x07, 0x16, -0x42, 0x00, 0x00, 0x00, 0x00, +0x55, 0x7C, 0xE0, 0x20, 0x55, 0xAB, 0x04, 0xA0, 0x56, 0x2C, 0x37, 0xA0, 0x56, 0xF7, 0x3E, 0xA0, +0x57, 0x53, 0x87, 0xA0, 0x57, 0x81, 0xAC, 0x20, 0x58, 0x15, 0x54, 0x20, 0x58, 0xD7, 0x20, 0xA0, +0x59, 0x20, 0xF4, 0xA0, 0x59, 0x58, 0x53, 0xA0, 0x59, 0xF5, 0x36, 0x20, 0x5A, 0xB7, 0x02, 0xA0, +0x5A, 0xF7, 0x9C, 0x20, 0x5B, 0x25, 0xC0, 0xA0, 0x5B, 0xD5, 0x18, 0x20, 0x5C, 0xA0, 0x1F, 0x20, +0x5C, 0xCE, 0x43, 0xA0, 0x5C, 0xFC, 0x68, 0x20, 0x5D, 0xB4, 0xFA, 0x20, 0x5E, 0x80, 0x01, 0x20, +0x5E, 0x9B, 0xB0, 0xA0, 0x5E, 0xC9, 0xD5, 0x20, 0x5F, 0x94, 0xDC, 0x20, 0x60, 0x5F, 0xE3, 0x20, +0x60, 0x72, 0x58, 0x20, 0x60, 0xA0, 0x7C, 0xA0, 0x61, 0x7D, 0xF8, 0xA0, 0x62, 0x77, 0x24, 0x20, +0x63, 0x5D, 0xDA, 0xA0, 0x64, 0x44, 0x91, 0x20, 0x65, 0x3D, 0xBC, 0xA0, 0x66, 0x1B, 0x38, 0xA0, +0x67, 0x1D, 0x9E, 0xA0, 0x67, 0xF1, 0xE0, 0x20, 0x68, 0xFD, 0x80, 0xA0, 0x69, 0xC8, 0x87, 0xA0, +0x6A, 0xDD, 0x62, 0xA0, 0x6B, 0xA8, 0x69, 0xA0, 0x6C, 0xC6, 0x7F, 0x20, 0x6D, 0x88, 0x4B, 0xA0, +0x6E, 0xA6, 0x61, 0x20, 0x6F, 0x68, 0x2D, 0xA0, 0x70, 0x86, 0x43, 0x20, 0x71, 0x51, 0x4A, 0x20, +0x72, 0x66, 0x25, 0x20, 0x73, 0x31, 0x2C, 0x20, 0x74, 0x46, 0x07, 0x20, 0x75, 0x11, 0x0E, 0x20, +0x76, 0x2F, 0x23, 0xA0, 0x76, 0xF0, 0xF0, 0x20, 0x78, 0x0F, 0x05, 0xA0, 0x78, 0xD0, 0xD2, 0x20, +0x79, 0xEE, 0xE7, 0xA0, 0x7A, 0xB0, 0xB4, 0x20, 0x7B, 0xCE, 0xC9, 0xA0, 0x7C, 0x99, 0xD0, 0xA0, +0x7D, 0xA5, 0x71, 0x20, 0x7E, 0x79, 0xB2, 0xA0, 0x7F, 0x72, 0xDE, 0x20, 0x00, 0x02, 0x01, 0x02, +0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x02, +0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, +0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, +0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, +0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, +0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, +0xFF, 0xFF, 0xF8, 0xE4, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, +0x00, 0x09, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x4C, 0x4D, +0x54, 0x00, 0x57, 0x45, 0x53, 0x54, 0x00, 0x57, 0x45, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, +0x05, 0x00, 0x00, 0x00, 0x11, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, +0xFF, 0x96, 0x51, 0xF9, 0x9C, 0xFF, 0xFF, 0xFF, 0xFF, 0xC6, 0xFF, 0x14, 0x80, 0xFF, 0xFF, 0xFF, +0xFF, 0xC7, 0x58, 0xAC, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0xC7, 0xD9, 0xED, 0x80, 0xFF, 0xFF, 0xFF, +0xFF, 0xD2, 0xA1, 0x32, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xDB, 0x35, 0xA4, 0x00, 0xFF, 0xFF, 0xFF, +0xFF, 0xDB, 0xEE, 0x27, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0x25, 0x72, 0x40, 0xFF, 0xFF, 0xFF, +0xFF, 0xFB, 0xC2, 0xEF, 0x70, 0x00, 0x00, 0x00, 0x00, 0x08, 0x6B, 0x84, 0x80, 0x00, 0x00, 0x00, +0x00, 0x08, 0xC6, 0x6D, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x0B, 0xE8, 0x0C, 0x00, 0x00, 0x00, 0x00, +0x00, 0x0C, 0x61, 0x47, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x0D, 0xC9, 0x3F, 0x80, 0x00, 0x00, 0x00, +0x00, 0x0E, 0x8E, 0xF2, 0x70, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xD3, 0x51, 0x80, 0x00, 0x00, 0x00, +0x00, 0x10, 0x27, 0xA3, 0x70, 0x00, 0x00, 0x00, 0x00, 0x1A, 0xB7, 0xA6, 0x00, 0x00, 0x00, 0x00, +0x00, 0x1E, 0x18, 0x6F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x48, 0x41, 0xE6, 0x80, 0x00, 0x00, 0x00, +0x00, 0x48, 0xBB, 0x22, 0x70, 0x00, 0x00, 0x00, 0x00, 0x4A, 0x23, 0x1A, 0x00, 0x00, 0x00, 0x00, +0x00, 0x4A, 0x8D, 0xD5, 0x70, 0x00, 0x00, 0x00, 0x00, 0x4B, 0xDC, 0xC0, 0x80, 0x00, 0x00, 0x00, +0x00, 0x4C, 0x5D, 0xE5, 0x70, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x97, 0xB8, 0x80, 0x00, 0x00, 0x00, +0x00, 0x4E, 0x34, 0x8C, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x9C, 0xA0, 0xA0, 0x00, 0x00, 0x00, +0x00, 0x50, 0x08, 0xBB, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x50, 0x31, 0x9A, 0x20, 0x00, 0x00, 0x00, +0x00, 0x50, 0x67, 0xA7, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x51, 0x7C, 0x82, 0xA0, 0x00, 0x00, 0x00, +0x00, 0x51, 0xD8, 0xCB, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x52, 0x05, 0x9E, 0xA0, 0x00, 0x00, 0x00, +0x00, 0x52, 0x6C, 0x73, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x53, 0x37, 0x7A, 0xA0, 0x00, 0x00, 0x00, +0x00, 0x53, 0xAE, 0x21, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x53, 0xDC, 0x46, 0x20, 0x00, 0x00, 0x00, +0x00, 0x54, 0x4C, 0x55, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x55, 0x17, 0x5C, 0xA0, 0x00, 0x00, 0x00, +0x00, 0x55, 0x7C, 0xE0, 0x20, 0x00, 0x00, 0x00, 0x00, 0x55, 0xAB, 0x04, 0xA0, 0x00, 0x00, 0x00, +0x00, 0x56, 0x2C, 0x37, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x56, 0xF7, 0x3E, 0xA0, 0x00, 0x00, 0x00, +0x00, 0x57, 0x53, 0x87, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x57, 0x81, 0xAC, 0x20, 0x00, 0x00, 0x00, +0x00, 0x58, 0x15, 0x54, 0x20, 0x00, 0x00, 0x00, 0x00, 0x58, 0xD7, 0x20, 0xA0, 0x00, 0x00, 0x00, +0x00, 0x59, 0x20, 0xF4, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x59, 0x58, 0x53, 0xA0, 0x00, 0x00, 0x00, +0x00, 0x59, 0xF5, 0x36, 0x20, 0x00, 0x00, 0x00, 0x00, 0x5A, 0xB7, 0x02, 0xA0, 0x00, 0x00, 0x00, +0x00, 0x5A, 0xF7, 0x9C, 0x20, 0x00, 0x00, 0x00, 0x00, 0x5B, 0x25, 0xC0, 0xA0, 0x00, 0x00, 0x00, +0x00, 0x5B, 0xD5, 0x18, 0x20, 0x00, 0x00, 0x00, 0x00, 0x5C, 0xA0, 0x1F, 0x20, 0x00, 0x00, 0x00, +0x00, 0x5C, 0xCE, 0x43, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x5C, 0xFC, 0x68, 0x20, 0x00, 0x00, 0x00, +0x00, 0x5D, 0xB4, 0xFA, 0x20, 0x00, 0x00, 0x00, 0x00, 0x5E, 0x80, 0x01, 0x20, 0x00, 0x00, 0x00, +0x00, 0x5E, 0x9B, 0xB0, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x5E, 0xC9, 0xD5, 0x20, 0x00, 0x00, 0x00, +0x00, 0x5F, 0x94, 0xDC, 0x20, 0x00, 0x00, 0x00, 0x00, 0x60, 0x5F, 0xE3, 0x20, 0x00, 0x00, 0x00, +0x00, 0x60, 0x72, 0x58, 0x20, 0x00, 0x00, 0x00, 0x00, 0x60, 0xA0, 0x7C, 0xA0, 0x00, 0x00, 0x00, +0x00, 0x61, 0x7D, 0xF8, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x62, 0x77, 0x24, 0x20, 0x00, 0x00, 0x00, +0x00, 0x63, 0x5D, 0xDA, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x64, 0x44, 0x91, 0x20, 0x00, 0x00, 0x00, +0x00, 0x65, 0x3D, 0xBC, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x66, 0x1B, 0x38, 0xA0, 0x00, 0x00, 0x00, +0x00, 0x67, 0x1D, 0x9E, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x67, 0xF1, 0xE0, 0x20, 0x00, 0x00, 0x00, +0x00, 0x68, 0xFD, 0x80, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x69, 0xC8, 0x87, 0xA0, 0x00, 0x00, 0x00, +0x00, 0x6A, 0xDD, 0x62, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x6B, 0xA8, 0x69, 0xA0, 0x00, 0x00, 0x00, +0x00, 0x6C, 0xC6, 0x7F, 0x20, 0x00, 0x00, 0x00, 0x00, 0x6D, 0x88, 0x4B, 0xA0, 0x00, 0x00, 0x00, +0x00, 0x6E, 0xA6, 0x61, 0x20, 0x00, 0x00, 0x00, 0x00, 0x6F, 0x68, 0x2D, 0xA0, 0x00, 0x00, 0x00, +0x00, 0x70, 0x86, 0x43, 0x20, 0x00, 0x00, 0x00, 0x00, 0x71, 0x51, 0x4A, 0x20, 0x00, 0x00, 0x00, +0x00, 0x72, 0x66, 0x25, 0x20, 0x00, 0x00, 0x00, 0x00, 0x73, 0x31, 0x2C, 0x20, 0x00, 0x00, 0x00, +0x00, 0x74, 0x46, 0x07, 0x20, 0x00, 0x00, 0x00, 0x00, 0x75, 0x11, 0x0E, 0x20, 0x00, 0x00, 0x00, +0x00, 0x76, 0x2F, 0x23, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x76, 0xF0, 0xF0, 0x20, 0x00, 0x00, 0x00, +0x00, 0x78, 0x0F, 0x05, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x78, 0xD0, 0xD2, 0x20, 0x00, 0x00, 0x00, +0x00, 0x79, 0xEE, 0xE7, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x7A, 0xB0, 0xB4, 0x20, 0x00, 0x00, 0x00, +0x00, 0x7B, 0xCE, 0xC9, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x99, 0xD0, 0xA0, 0x00, 0x00, 0x00, +0x00, 0x7D, 0xA5, 0x71, 0x20, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x79, 0xB2, 0xA0, 0x00, 0x00, 0x00, +0x00, 0x7F, 0x72, 0xDE, 0x20, 0x00, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, +0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, +0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, +0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, +0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, +0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, +0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0xFF, 0xFF, 0xF8, 0xE4, 0x00, 0x00, 0x00, +0x00, 0x0E, 0x10, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0E, 0x10, 0x00, +0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x57, 0x45, 0x53, 0x54, 0x00, +0x57, 0x45, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x0A, 0x57, 0x45, 0x54, 0x30, 0x57, 0x45, 0x53, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x35, +0x2E, 0x30, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x35, 0x2E, 0x30, 0x2F, 0x33, 0x0A, 0x00, 0xBC, 0xAC, +0xC8, 0x01, 0x07, 0x16, 0x42, 0x00, 0x00, 0x00, 0x00, /* Africa/Ceuta */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x45, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -1326,7 +1324,7 @@ const unsigned char timelib_timezone_db_data_builtin[696215] = { /* Africa/El_Aaiun */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x45, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x5B, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x11, 0x80, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x11, 0x80, 0x00, 0x00, 0x00, 0xBC, 0x48, 0xF0, 0xE0, 0x0B, 0xD1, 0xB0, 0x90, 0x0B, 0xE8, 0x0C, 0x00, 0x0C, 0x61, 0x47, 0xF0, 0x0D, 0xC9, 0x3F, 0x80, 0x0E, 0x8E, 0xF2, 0x70, 0x0F, 0xD3, 0x51, 0x80, 0x10, 0x27, 0xA3, 0x70, 0x48, 0x41, 0xE6, 0x80, 0x48, 0xBB, 0x22, 0x70, 0x4A, 0x23, 0x1A, 0x00, 0x4A, 0x8D, 0xD5, 0x70, @@ -1334,90 +1332,88 @@ const unsigned char timelib_timezone_db_data_builtin[696215] = { 0x4F, 0x9C, 0xA0, 0xA0, 0x50, 0x08, 0xBB, 0xA0, 0x50, 0x31, 0x9A, 0x20, 0x50, 0x67, 0xA7, 0xA0, 0x51, 0x7C, 0x82, 0xA0, 0x51, 0xD8, 0xCB, 0xA0, 0x52, 0x05, 0x9E, 0xA0, 0x52, 0x6C, 0x73, 0xA0, 0x53, 0x37, 0x7A, 0xA0, 0x53, 0xAE, 0x21, 0xA0, 0x53, 0xDC, 0x46, 0x20, 0x54, 0x4C, 0x55, 0xA0, -0x55, 0x17, 0x5C, 0xA0, 0x55, 0x7B, 0x8E, 0xA0, 0x55, 0xA9, 0xB3, 0x20, 0x56, 0x2C, 0x37, 0xA0, -0x56, 0xF7, 0x3E, 0xA0, 0x57, 0x52, 0x36, 0x20, 0x57, 0x80, 0x5A, 0xA0, 0x58, 0x15, 0x54, 0x20, -0x58, 0xD7, 0x20, 0xA0, 0x59, 0x1F, 0xA3, 0x20, 0x59, 0x57, 0x02, 0x20, 0x59, 0xF5, 0x36, 0x20, -0x5A, 0xB7, 0x02, 0xA0, 0x5A, 0xF6, 0x4A, 0xA0, 0x5B, 0x24, 0x6F, 0x20, 0x5B, 0xD5, 0x18, 0x20, -0x5C, 0xA0, 0x1F, 0x20, 0x5C, 0xCC, 0xF2, 0x20, 0x5C, 0xFB, 0x16, 0xA0, 0x5D, 0xB4, 0xFA, 0x20, -0x5E, 0x80, 0x01, 0x20, 0x5E, 0x9A, 0x5F, 0x20, 0x5E, 0xD1, 0xBE, 0x20, 0x5F, 0x94, 0xDC, 0x20, -0x60, 0x5F, 0xE3, 0x20, 0x60, 0x71, 0x06, 0xA0, 0x60, 0x9F, 0x2B, 0x20, 0x61, 0x7D, 0xF8, 0xA0, -0x62, 0x3F, 0xC5, 0x20, 0x62, 0x47, 0xAE, 0x20, 0x62, 0x75, 0xD2, 0xA0, 0x63, 0x5D, 0xDA, 0xA0, -0x64, 0x43, 0x3F, 0xA0, 0x65, 0x3D, 0xBC, 0xA0, 0x66, 0x19, 0xE7, 0x20, 0x67, 0x1D, 0x9E, 0xA0, -0x67, 0xF0, 0x8E, 0xA0, 0x68, 0xFD, 0x80, 0xA0, 0x69, 0xC8, 0x87, 0xA0, 0x6A, 0xDD, 0x62, 0xA0, -0x6B, 0xA8, 0x69, 0xA0, 0x6C, 0xC6, 0x7F, 0x20, 0x6D, 0x88, 0x4B, 0xA0, 0x6E, 0xA6, 0x61, 0x20, -0x6F, 0x68, 0x2D, 0xA0, 0x70, 0x86, 0x43, 0x20, 0x71, 0x51, 0x4A, 0x20, 0x72, 0x66, 0x25, 0x20, -0x73, 0x31, 0x2C, 0x20, 0x74, 0x46, 0x07, 0x20, 0x75, 0x11, 0x0E, 0x20, 0x76, 0x2F, 0x23, 0xA0, -0x76, 0xF0, 0xF0, 0x20, 0x78, 0x0F, 0x05, 0xA0, 0x78, 0xD0, 0xD2, 0x20, 0x79, 0xEE, 0xE7, 0xA0, -0x7A, 0xB0, 0xB4, 0x20, 0x7B, 0xCD, 0x78, 0x20, 0x7C, 0x99, 0xD0, 0xA0, 0x7D, 0xA4, 0x1F, 0xA0, -0x7E, 0x79, 0xB2, 0xA0, 0x7F, 0x7A, 0xC7, 0x20, 0x00, 0x01, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0xFF, 0xFF, 0xF3, 0xA0, 0x00, 0x00, 0xFF, 0xFF, 0xF1, 0xF0, 0x00, 0x04, 0x00, -0x00, 0x0E, 0x10, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x57, -0x41, 0x54, 0x00, 0x57, 0x45, 0x53, 0x54, 0x00, 0x57, 0x45, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5B, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x11, -0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xBC, 0x48, 0xF0, 0xE0, -0x00, 0x00, 0x00, 0x00, 0x0B, 0xD1, 0xB0, 0x90, 0x00, 0x00, 0x00, 0x00, 0x0B, 0xE8, 0x0C, 0x00, -0x00, 0x00, 0x00, 0x00, 0x0C, 0x61, 0x47, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x0D, 0xC9, 0x3F, 0x80, -0x00, 0x00, 0x00, 0x00, 0x0E, 0x8E, 0xF2, 0x70, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xD3, 0x51, 0x80, -0x00, 0x00, 0x00, 0x00, 0x10, 0x27, 0xA3, 0x70, 0x00, 0x00, 0x00, 0x00, 0x48, 0x41, 0xE6, 0x80, -0x00, 0x00, 0x00, 0x00, 0x48, 0xBB, 0x22, 0x70, 0x00, 0x00, 0x00, 0x00, 0x4A, 0x23, 0x1A, 0x00, -0x00, 0x00, 0x00, 0x00, 0x4A, 0x8D, 0xD5, 0x70, 0x00, 0x00, 0x00, 0x00, 0x4B, 0xDC, 0xC0, 0x80, -0x00, 0x00, 0x00, 0x00, 0x4C, 0x5D, 0xE5, 0x70, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x97, 0xB8, 0x80, -0x00, 0x00, 0x00, 0x00, 0x4E, 0x34, 0x8C, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x9C, 0xA0, 0xA0, -0x00, 0x00, 0x00, 0x00, 0x50, 0x08, 0xBB, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x50, 0x31, 0x9A, 0x20, -0x00, 0x00, 0x00, 0x00, 0x50, 0x67, 0xA7, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x51, 0x7C, 0x82, 0xA0, -0x00, 0x00, 0x00, 0x00, 0x51, 0xD8, 0xCB, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x52, 0x05, 0x9E, 0xA0, -0x00, 0x00, 0x00, 0x00, 0x52, 0x6C, 0x73, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x53, 0x37, 0x7A, 0xA0, -0x00, 0x00, 0x00, 0x00, 0x53, 0xAE, 0x21, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x53, 0xDC, 0x46, 0x20, -0x00, 0x00, 0x00, 0x00, 0x54, 0x4C, 0x55, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x55, 0x17, 0x5C, 0xA0, -0x00, 0x00, 0x00, 0x00, 0x55, 0x7B, 0x8E, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x55, 0xA9, 0xB3, 0x20, -0x00, 0x00, 0x00, 0x00, 0x56, 0x2C, 0x37, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x56, 0xF7, 0x3E, 0xA0, -0x00, 0x00, 0x00, 0x00, 0x57, 0x52, 0x36, 0x20, 0x00, 0x00, 0x00, 0x00, 0x57, 0x80, 0x5A, 0xA0, -0x00, 0x00, 0x00, 0x00, 0x58, 0x15, 0x54, 0x20, 0x00, 0x00, 0x00, 0x00, 0x58, 0xD7, 0x20, 0xA0, -0x00, 0x00, 0x00, 0x00, 0x59, 0x1F, 0xA3, 0x20, 0x00, 0x00, 0x00, 0x00, 0x59, 0x57, 0x02, 0x20, -0x00, 0x00, 0x00, 0x00, 0x59, 0xF5, 0x36, 0x20, 0x00, 0x00, 0x00, 0x00, 0x5A, 0xB7, 0x02, 0xA0, -0x00, 0x00, 0x00, 0x00, 0x5A, 0xF6, 0x4A, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x5B, 0x24, 0x6F, 0x20, -0x00, 0x00, 0x00, 0x00, 0x5B, 0xD5, 0x18, 0x20, 0x00, 0x00, 0x00, 0x00, 0x5C, 0xA0, 0x1F, 0x20, -0x00, 0x00, 0x00, 0x00, 0x5C, 0xCC, 0xF2, 0x20, 0x00, 0x00, 0x00, 0x00, 0x5C, 0xFB, 0x16, 0xA0, -0x00, 0x00, 0x00, 0x00, 0x5D, 0xB4, 0xFA, 0x20, 0x00, 0x00, 0x00, 0x00, 0x5E, 0x80, 0x01, 0x20, -0x00, 0x00, 0x00, 0x00, 0x5E, 0x9A, 0x5F, 0x20, 0x00, 0x00, 0x00, 0x00, 0x5E, 0xD1, 0xBE, 0x20, -0x00, 0x00, 0x00, 0x00, 0x5F, 0x94, 0xDC, 0x20, 0x00, 0x00, 0x00, 0x00, 0x60, 0x5F, 0xE3, 0x20, -0x00, 0x00, 0x00, 0x00, 0x60, 0x71, 0x06, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x60, 0x9F, 0x2B, 0x20, -0x00, 0x00, 0x00, 0x00, 0x61, 0x7D, 0xF8, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x62, 0x3F, 0xC5, 0x20, -0x00, 0x00, 0x00, 0x00, 0x62, 0x47, 0xAE, 0x20, 0x00, 0x00, 0x00, 0x00, 0x62, 0x75, 0xD2, 0xA0, -0x00, 0x00, 0x00, 0x00, 0x63, 0x5D, 0xDA, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x64, 0x43, 0x3F, 0xA0, -0x00, 0x00, 0x00, 0x00, 0x65, 0x3D, 0xBC, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x66, 0x19, 0xE7, 0x20, -0x00, 0x00, 0x00, 0x00, 0x67, 0x1D, 0x9E, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x67, 0xF0, 0x8E, 0xA0, -0x00, 0x00, 0x00, 0x00, 0x68, 0xFD, 0x80, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x69, 0xC8, 0x87, 0xA0, -0x00, 0x00, 0x00, 0x00, 0x6A, 0xDD, 0x62, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x6B, 0xA8, 0x69, 0xA0, -0x00, 0x00, 0x00, 0x00, 0x6C, 0xC6, 0x7F, 0x20, 0x00, 0x00, 0x00, 0x00, 0x6D, 0x88, 0x4B, 0xA0, -0x00, 0x00, 0x00, 0x00, 0x6E, 0xA6, 0x61, 0x20, 0x00, 0x00, 0x00, 0x00, 0x6F, 0x68, 0x2D, 0xA0, -0x00, 0x00, 0x00, 0x00, 0x70, 0x86, 0x43, 0x20, 0x00, 0x00, 0x00, 0x00, 0x71, 0x51, 0x4A, 0x20, -0x00, 0x00, 0x00, 0x00, 0x72, 0x66, 0x25, 0x20, 0x00, 0x00, 0x00, 0x00, 0x73, 0x31, 0x2C, 0x20, -0x00, 0x00, 0x00, 0x00, 0x74, 0x46, 0x07, 0x20, 0x00, 0x00, 0x00, 0x00, 0x75, 0x11, 0x0E, 0x20, -0x00, 0x00, 0x00, 0x00, 0x76, 0x2F, 0x23, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x76, 0xF0, 0xF0, 0x20, -0x00, 0x00, 0x00, 0x00, 0x78, 0x0F, 0x05, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x78, 0xD0, 0xD2, 0x20, -0x00, 0x00, 0x00, 0x00, 0x79, 0xEE, 0xE7, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x7A, 0xB0, 0xB4, 0x20, -0x00, 0x00, 0x00, 0x00, 0x7B, 0xCD, 0x78, 0x20, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x99, 0xD0, 0xA0, -0x00, 0x00, 0x00, 0x00, 0x7D, 0xA4, 0x1F, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x79, 0xB2, 0xA0, -0x00, 0x00, 0x00, 0x00, 0x7F, 0x7A, 0xC7, 0x20, 0x00, 0x01, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0xFF, 0xFF, 0xF3, 0xA0, 0x00, 0x00, 0xFF, 0xFF, 0xF1, 0xF0, 0x00, 0x04, 0x00, -0x00, 0x0E, 0x10, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x57, -0x41, 0x54, 0x00, 0x57, 0x45, 0x53, 0x54, 0x00, 0x57, 0x45, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x0A, 0x57, 0x45, 0x54, 0x30, 0x57, 0x45, 0x53, 0x54, 0x2C, 0x4D, 0x33, -0x2E, 0x35, 0x2E, 0x30, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x35, 0x2E, 0x30, 0x2F, 0x33, 0x0A, 0x00, -0xB2, 0xC1, 0xB8, 0x00, 0xFE, 0x84, 0x40, 0x00, 0x00, 0x00, 0x00, +0x55, 0x17, 0x5C, 0xA0, 0x55, 0x7C, 0xE0, 0x20, 0x55, 0xAB, 0x04, 0xA0, 0x56, 0x2C, 0x37, 0xA0, +0x56, 0xF7, 0x3E, 0xA0, 0x57, 0x53, 0x87, 0xA0, 0x57, 0x81, 0xAC, 0x20, 0x58, 0x15, 0x54, 0x20, +0x58, 0xD7, 0x20, 0xA0, 0x59, 0x20, 0xF4, 0xA0, 0x59, 0x58, 0x53, 0xA0, 0x59, 0xF5, 0x36, 0x20, +0x5A, 0xB7, 0x02, 0xA0, 0x5A, 0xF7, 0x9C, 0x20, 0x5B, 0x25, 0xC0, 0xA0, 0x5B, 0xD5, 0x18, 0x20, +0x5C, 0xA0, 0x1F, 0x20, 0x5C, 0xCE, 0x43, 0xA0, 0x5C, 0xFC, 0x68, 0x20, 0x5D, 0xB4, 0xFA, 0x20, +0x5E, 0x80, 0x01, 0x20, 0x5E, 0x9B, 0xB0, 0xA0, 0x5E, 0xC9, 0xD5, 0x20, 0x5F, 0x94, 0xDC, 0x20, +0x60, 0x5F, 0xE3, 0x20, 0x60, 0x72, 0x58, 0x20, 0x60, 0xA0, 0x7C, 0xA0, 0x61, 0x7D, 0xF8, 0xA0, +0x62, 0x77, 0x24, 0x20, 0x63, 0x5D, 0xDA, 0xA0, 0x64, 0x44, 0x91, 0x20, 0x65, 0x3D, 0xBC, 0xA0, +0x66, 0x1B, 0x38, 0xA0, 0x67, 0x1D, 0x9E, 0xA0, 0x67, 0xF1, 0xE0, 0x20, 0x68, 0xFD, 0x80, 0xA0, +0x69, 0xC8, 0x87, 0xA0, 0x6A, 0xDD, 0x62, 0xA0, 0x6B, 0xA8, 0x69, 0xA0, 0x6C, 0xC6, 0x7F, 0x20, +0x6D, 0x88, 0x4B, 0xA0, 0x6E, 0xA6, 0x61, 0x20, 0x6F, 0x68, 0x2D, 0xA0, 0x70, 0x86, 0x43, 0x20, +0x71, 0x51, 0x4A, 0x20, 0x72, 0x66, 0x25, 0x20, 0x73, 0x31, 0x2C, 0x20, 0x74, 0x46, 0x07, 0x20, +0x75, 0x11, 0x0E, 0x20, 0x76, 0x2F, 0x23, 0xA0, 0x76, 0xF0, 0xF0, 0x20, 0x78, 0x0F, 0x05, 0xA0, +0x78, 0xD0, 0xD2, 0x20, 0x79, 0xEE, 0xE7, 0xA0, 0x7A, 0xB0, 0xB4, 0x20, 0x7B, 0xCE, 0xC9, 0xA0, +0x7C, 0x99, 0xD0, 0xA0, 0x7D, 0xA5, 0x71, 0x20, 0x7E, 0x79, 0xB2, 0xA0, 0x7F, 0x72, 0xDE, 0x20, +0x00, 0x01, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, +0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, +0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, +0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, +0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, +0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0xFF, 0xFF, 0xF3, 0xA0, 0x00, 0x00, 0xFF, +0xFF, 0xF1, 0xF0, 0x00, 0x04, 0x00, 0x00, 0x0E, 0x10, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, +0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x57, 0x41, 0x54, 0x00, 0x57, 0x45, 0x53, 0x54, 0x00, 0x57, 0x45, +0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, +0x00, 0x04, 0x00, 0x00, 0x00, 0x11, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, +0xFF, 0xFF, 0xBC, 0x48, 0xF0, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x0B, 0xD1, 0xB0, 0x90, 0x00, 0x00, +0x00, 0x00, 0x0B, 0xE8, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x61, 0x47, 0xF0, 0x00, 0x00, +0x00, 0x00, 0x0D, 0xC9, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x8E, 0xF2, 0x70, 0x00, 0x00, +0x00, 0x00, 0x0F, 0xD3, 0x51, 0x80, 0x00, 0x00, 0x00, 0x00, 0x10, 0x27, 0xA3, 0x70, 0x00, 0x00, +0x00, 0x00, 0x48, 0x41, 0xE6, 0x80, 0x00, 0x00, 0x00, 0x00, 0x48, 0xBB, 0x22, 0x70, 0x00, 0x00, +0x00, 0x00, 0x4A, 0x23, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4A, 0x8D, 0xD5, 0x70, 0x00, 0x00, +0x00, 0x00, 0x4B, 0xDC, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x4C, 0x5D, 0xE5, 0x70, 0x00, 0x00, +0x00, 0x00, 0x4D, 0x97, 0xB8, 0x80, 0x00, 0x00, 0x00, 0x00, 0x4E, 0x34, 0x8C, 0xF0, 0x00, 0x00, +0x00, 0x00, 0x4F, 0x9C, 0xA0, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x50, 0x08, 0xBB, 0xA0, 0x00, 0x00, +0x00, 0x00, 0x50, 0x31, 0x9A, 0x20, 0x00, 0x00, 0x00, 0x00, 0x50, 0x67, 0xA7, 0xA0, 0x00, 0x00, +0x00, 0x00, 0x51, 0x7C, 0x82, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x51, 0xD8, 0xCB, 0xA0, 0x00, 0x00, +0x00, 0x00, 0x52, 0x05, 0x9E, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x52, 0x6C, 0x73, 0xA0, 0x00, 0x00, +0x00, 0x00, 0x53, 0x37, 0x7A, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x53, 0xAE, 0x21, 0xA0, 0x00, 0x00, +0x00, 0x00, 0x53, 0xDC, 0x46, 0x20, 0x00, 0x00, 0x00, 0x00, 0x54, 0x4C, 0x55, 0xA0, 0x00, 0x00, +0x00, 0x00, 0x55, 0x17, 0x5C, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x55, 0x7C, 0xE0, 0x20, 0x00, 0x00, +0x00, 0x00, 0x55, 0xAB, 0x04, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x56, 0x2C, 0x37, 0xA0, 0x00, 0x00, +0x00, 0x00, 0x56, 0xF7, 0x3E, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x57, 0x53, 0x87, 0xA0, 0x00, 0x00, +0x00, 0x00, 0x57, 0x81, 0xAC, 0x20, 0x00, 0x00, 0x00, 0x00, 0x58, 0x15, 0x54, 0x20, 0x00, 0x00, +0x00, 0x00, 0x58, 0xD7, 0x20, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x59, 0x20, 0xF4, 0xA0, 0x00, 0x00, +0x00, 0x00, 0x59, 0x58, 0x53, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x59, 0xF5, 0x36, 0x20, 0x00, 0x00, +0x00, 0x00, 0x5A, 0xB7, 0x02, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x5A, 0xF7, 0x9C, 0x20, 0x00, 0x00, +0x00, 0x00, 0x5B, 0x25, 0xC0, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x5B, 0xD5, 0x18, 0x20, 0x00, 0x00, +0x00, 0x00, 0x5C, 0xA0, 0x1F, 0x20, 0x00, 0x00, 0x00, 0x00, 0x5C, 0xCE, 0x43, 0xA0, 0x00, 0x00, +0x00, 0x00, 0x5C, 0xFC, 0x68, 0x20, 0x00, 0x00, 0x00, 0x00, 0x5D, 0xB4, 0xFA, 0x20, 0x00, 0x00, +0x00, 0x00, 0x5E, 0x80, 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x5E, 0x9B, 0xB0, 0xA0, 0x00, 0x00, +0x00, 0x00, 0x5E, 0xC9, 0xD5, 0x20, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x94, 0xDC, 0x20, 0x00, 0x00, +0x00, 0x00, 0x60, 0x5F, 0xE3, 0x20, 0x00, 0x00, 0x00, 0x00, 0x60, 0x72, 0x58, 0x20, 0x00, 0x00, +0x00, 0x00, 0x60, 0xA0, 0x7C, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x61, 0x7D, 0xF8, 0xA0, 0x00, 0x00, +0x00, 0x00, 0x62, 0x77, 0x24, 0x20, 0x00, 0x00, 0x00, 0x00, 0x63, 0x5D, 0xDA, 0xA0, 0x00, 0x00, +0x00, 0x00, 0x64, 0x44, 0x91, 0x20, 0x00, 0x00, 0x00, 0x00, 0x65, 0x3D, 0xBC, 0xA0, 0x00, 0x00, +0x00, 0x00, 0x66, 0x1B, 0x38, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x67, 0x1D, 0x9E, 0xA0, 0x00, 0x00, +0x00, 0x00, 0x67, 0xF1, 0xE0, 0x20, 0x00, 0x00, 0x00, 0x00, 0x68, 0xFD, 0x80, 0xA0, 0x00, 0x00, +0x00, 0x00, 0x69, 0xC8, 0x87, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x6A, 0xDD, 0x62, 0xA0, 0x00, 0x00, +0x00, 0x00, 0x6B, 0xA8, 0x69, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x6C, 0xC6, 0x7F, 0x20, 0x00, 0x00, +0x00, 0x00, 0x6D, 0x88, 0x4B, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x6E, 0xA6, 0x61, 0x20, 0x00, 0x00, +0x00, 0x00, 0x6F, 0x68, 0x2D, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x70, 0x86, 0x43, 0x20, 0x00, 0x00, +0x00, 0x00, 0x71, 0x51, 0x4A, 0x20, 0x00, 0x00, 0x00, 0x00, 0x72, 0x66, 0x25, 0x20, 0x00, 0x00, +0x00, 0x00, 0x73, 0x31, 0x2C, 0x20, 0x00, 0x00, 0x00, 0x00, 0x74, 0x46, 0x07, 0x20, 0x00, 0x00, +0x00, 0x00, 0x75, 0x11, 0x0E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x76, 0x2F, 0x23, 0xA0, 0x00, 0x00, +0x00, 0x00, 0x76, 0xF0, 0xF0, 0x20, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0F, 0x05, 0xA0, 0x00, 0x00, +0x00, 0x00, 0x78, 0xD0, 0xD2, 0x20, 0x00, 0x00, 0x00, 0x00, 0x79, 0xEE, 0xE7, 0xA0, 0x00, 0x00, +0x00, 0x00, 0x7A, 0xB0, 0xB4, 0x20, 0x00, 0x00, 0x00, 0x00, 0x7B, 0xCE, 0xC9, 0xA0, 0x00, 0x00, +0x00, 0x00, 0x7C, 0x99, 0xD0, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x7D, 0xA5, 0x71, 0x20, 0x00, 0x00, +0x00, 0x00, 0x7E, 0x79, 0xB2, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x72, 0xDE, 0x20, 0x00, 0x01, +0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, +0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, +0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, +0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, +0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, +0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0xFF, 0xFF, 0xF3, 0xA0, 0x00, 0x00, 0xFF, 0xFF, 0xF1, +0xF0, 0x00, 0x04, 0x00, 0x00, 0x0E, 0x10, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x4C, +0x4D, 0x54, 0x00, 0x57, 0x41, 0x54, 0x00, 0x57, 0x45, 0x53, 0x54, 0x00, 0x57, 0x45, 0x54, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x57, 0x45, 0x54, 0x30, 0x57, 0x45, 0x53, +0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x35, 0x2E, 0x30, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x35, 0x2E, 0x30, +0x2F, 0x33, 0x0A, 0x00, 0xB2, 0xC1, 0xB8, 0x00, 0xFE, 0x84, 0x40, 0x00, 0x00, 0x00, 0x00, /* Africa/Freetown */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x53, 0x4C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -4886,19 +4882,60 @@ const unsigned char timelib_timezone_db_data_builtin[696215] = { /* America/Cayman */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x4B, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x80, 0x00, 0x00, 0x00, -0x8B, 0xF4, 0x61, 0xE8, 0x01, 0x02, 0xFF, 0xFF, 0xB5, 0x70, 0x00, 0x00, 0xFF, 0xFF, 0xB5, 0x18, -0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x4D, 0x54, 0x00, -0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, -0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, -0xFF, 0xFF, 0x69, 0x87, 0x26, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0x8B, 0xF4, 0x61, 0xE8, 0x00, 0x01, -0x02, 0xFF, 0xFF, 0xB5, 0x70, 0x00, 0x00, 0xFF, 0xFF, 0xB5, 0x18, 0x00, 0x04, 0xFF, 0xFF, 0xB9, -0xB0, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x4D, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x45, 0x53, 0x54, 0x35, 0x0A, 0x00, 0xA6, 0xC7, 0x50, 0x00, -0x96, 0x7A, 0x22, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x2E, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x80, 0x00, 0x00, 0x00, +0x93, 0x0F, 0xB4, 0xFF, 0x56, 0xE5, 0x0F, 0xF0, 0x58, 0x1E, 0xC6, 0xE0, 0x58, 0xC4, 0xF1, 0xF0, +0x59, 0xFE, 0xA8, 0xE0, 0x5A, 0xA4, 0xD3, 0xF0, 0x5B, 0xDE, 0x8A, 0xE0, 0x5C, 0x84, 0xB5, 0xF0, +0x5D, 0xBE, 0x6C, 0xE0, 0x5E, 0x64, 0x97, 0xF0, 0x5F, 0x9E, 0x4E, 0xE0, 0x60, 0x4D, 0xB4, 0x70, +0x61, 0x87, 0x6B, 0x60, 0x62, 0x2D, 0x96, 0x70, 0x63, 0x67, 0x4D, 0x60, 0x64, 0x0D, 0x78, 0x70, +0x65, 0x47, 0x2F, 0x60, 0x65, 0xED, 0x5A, 0x70, 0x67, 0x27, 0x11, 0x60, 0x67, 0xCD, 0x3C, 0x70, +0x69, 0x06, 0xF3, 0x60, 0x69, 0xAD, 0x1E, 0x70, 0x6A, 0xE6, 0xD5, 0x60, 0x6B, 0x96, 0x3A, 0xF0, +0x6C, 0xCF, 0xF1, 0xE0, 0x6D, 0x76, 0x1C, 0xF0, 0x6E, 0xAF, 0xD3, 0xE0, 0x6F, 0x55, 0xFE, 0xF0, +0x70, 0x8F, 0xB5, 0xE0, 0x71, 0x35, 0xE0, 0xF0, 0x72, 0x6F, 0x97, 0xE0, 0x73, 0x15, 0xC2, 0xF0, +0x74, 0x4F, 0x79, 0xE0, 0x74, 0xFE, 0xDF, 0x70, 0x76, 0x38, 0x96, 0x60, 0x76, 0xDE, 0xC1, 0x70, +0x78, 0x18, 0x78, 0x60, 0x78, 0xBE, 0xA3, 0x70, 0x79, 0xF8, 0x5A, 0x60, 0x7A, 0x9E, 0x85, 0x70, +0x7B, 0xD8, 0x3C, 0x60, 0x7C, 0x7E, 0x67, 0x70, 0x7D, 0xB8, 0x1E, 0x60, 0x7E, 0x5E, 0x49, 0x70, +0x7F, 0x98, 0x00, 0x60, 0x01, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, +0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, +0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, +0x03, 0x02, 0xFF, 0xFF, 0xB3, 0xB4, 0x00, 0x00, 0xFF, 0xFF, 0xB8, 0x01, 0x00, 0x04, 0xFF, 0xFF, +0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x0C, 0x4C, 0x4D, 0x54, 0x00, 0x4B, 0x4D, +0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x45, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0xF8, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x69, 0x87, 0x27, 0xCC, 0xFF, 0xFF, +0xFF, 0xFF, 0x93, 0x0F, 0xB4, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x56, 0xE5, 0x0F, 0xF0, 0x00, 0x00, +0x00, 0x00, 0x58, 0x1E, 0xC6, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x58, 0xC4, 0xF1, 0xF0, 0x00, 0x00, +0x00, 0x00, 0x59, 0xFE, 0xA8, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x5A, 0xA4, 0xD3, 0xF0, 0x00, 0x00, +0x00, 0x00, 0x5B, 0xDE, 0x8A, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x5C, 0x84, 0xB5, 0xF0, 0x00, 0x00, +0x00, 0x00, 0x5D, 0xBE, 0x6C, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x5E, 0x64, 0x97, 0xF0, 0x00, 0x00, +0x00, 0x00, 0x5F, 0x9E, 0x4E, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x60, 0x4D, 0xB4, 0x70, 0x00, 0x00, +0x00, 0x00, 0x61, 0x87, 0x6B, 0x60, 0x00, 0x00, 0x00, 0x00, 0x62, 0x2D, 0x96, 0x70, 0x00, 0x00, +0x00, 0x00, 0x63, 0x67, 0x4D, 0x60, 0x00, 0x00, 0x00, 0x00, 0x64, 0x0D, 0x78, 0x70, 0x00, 0x00, +0x00, 0x00, 0x65, 0x47, 0x2F, 0x60, 0x00, 0x00, 0x00, 0x00, 0x65, 0xED, 0x5A, 0x70, 0x00, 0x00, +0x00, 0x00, 0x67, 0x27, 0x11, 0x60, 0x00, 0x00, 0x00, 0x00, 0x67, 0xCD, 0x3C, 0x70, 0x00, 0x00, +0x00, 0x00, 0x69, 0x06, 0xF3, 0x60, 0x00, 0x00, 0x00, 0x00, 0x69, 0xAD, 0x1E, 0x70, 0x00, 0x00, +0x00, 0x00, 0x6A, 0xE6, 0xD5, 0x60, 0x00, 0x00, 0x00, 0x00, 0x6B, 0x96, 0x3A, 0xF0, 0x00, 0x00, +0x00, 0x00, 0x6C, 0xCF, 0xF1, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x6D, 0x76, 0x1C, 0xF0, 0x00, 0x00, +0x00, 0x00, 0x6E, 0xAF, 0xD3, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x6F, 0x55, 0xFE, 0xF0, 0x00, 0x00, +0x00, 0x00, 0x70, 0x8F, 0xB5, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x71, 0x35, 0xE0, 0xF0, 0x00, 0x00, +0x00, 0x00, 0x72, 0x6F, 0x97, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x73, 0x15, 0xC2, 0xF0, 0x00, 0x00, +0x00, 0x00, 0x74, 0x4F, 0x79, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x74, 0xFE, 0xDF, 0x70, 0x00, 0x00, +0x00, 0x00, 0x76, 0x38, 0x96, 0x60, 0x00, 0x00, 0x00, 0x00, 0x76, 0xDE, 0xC1, 0x70, 0x00, 0x00, +0x00, 0x00, 0x78, 0x18, 0x78, 0x60, 0x00, 0x00, 0x00, 0x00, 0x78, 0xBE, 0xA3, 0x70, 0x00, 0x00, +0x00, 0x00, 0x79, 0xF8, 0x5A, 0x60, 0x00, 0x00, 0x00, 0x00, 0x7A, 0x9E, 0x85, 0x70, 0x00, 0x00, +0x00, 0x00, 0x7B, 0xD8, 0x3C, 0x60, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x7E, 0x67, 0x70, 0x00, 0x00, +0x00, 0x00, 0x7D, 0xB8, 0x1E, 0x60, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x5E, 0x49, 0x70, 0x00, 0x00, +0x00, 0x00, 0x7F, 0x98, 0x00, 0x60, 0x00, 0x01, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, +0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, +0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, +0x02, 0x03, 0x02, 0x03, 0x02, 0xFF, 0xFF, 0xB3, 0xB4, 0x00, 0x00, 0xFF, 0xFF, 0xB8, 0x01, 0x00, +0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x0C, 0x4C, 0x4D, 0x54, +0x00, 0x4B, 0x4D, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x45, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x45, 0x53, 0x54, 0x35, 0x45, 0x44, 0x54, 0x2C, 0x4D, 0x33, +0x2E, 0x32, 0x2E, 0x30, 0x2C, 0x4D, 0x31, 0x31, 0x2E, 0x31, 0x2E, 0x30, 0x0A, 0x00, 0xA6, 0xC7, +0x50, 0x00, 0x96, 0x7A, 0x22, 0x00, 0x00, 0x00, 0x00, /* America/Chicago */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x55, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -45591,4 +45628,4 @@ const unsigned char timelib_timezone_db_data_builtin[696215] = { 0x00, 0x00, 0x00, 0x55, 0x54, 0x43, 0x00, 0x00, 0x00, 0x0A, 0x55, 0x54, 0x43, 0x30, 0x0A, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,}; -const timelib_tzdb timezonedb_builtin = { "2015.4", 583, timezonedb_idx_builtin, timelib_timezone_db_data_builtin }; +const timelib_tzdb timezonedb_builtin = { "2015.5", 583, timezonedb_idx_builtin, timelib_timezone_db_data_builtin }; diff --git a/ext/dom/document.c b/ext/dom/document.c index c2c436513d..1bf4c541dd 100644 --- a/ext/dom/document.c +++ b/ext/dom/document.c @@ -1700,7 +1700,7 @@ PHP_FUNCTION(dom_document_save) char *file; long options = 0; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os|l", &id, dom_document_class_entry, &file, &file_len, &options) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Op|l", &id, dom_document_class_entry, &file, &file_len, &options) == FAILURE) { return; } @@ -1930,7 +1930,7 @@ static void _dom_document_schema_validate(INTERNAL_FUNCTION_PARAMETERS, int type int is_valid; char resolved_path[MAXPATHLEN + 1]; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Op|l", &id, dom_document_class_entry, &source, &source_len, &flags) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os|l", &id, dom_document_class_entry, &source, &source_len, &flags) == FAILURE) { return; } @@ -1943,6 +1943,10 @@ static void _dom_document_schema_validate(INTERNAL_FUNCTION_PARAMETERS, int type switch (type) { case DOM_LOAD_FILE: + if (CHECK_NULL_PATH(source, source_len)) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Schema file source"); + RETURN_FALSE; + } valid_file = _dom_get_valid_file_path(source, resolved_path, MAXPATHLEN TSRMLS_CC); if (!valid_file) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Schema file source"); @@ -2026,7 +2030,7 @@ static void _dom_document_relaxNG_validate(INTERNAL_FUNCTION_PARAMETERS, int typ int is_valid; char resolved_path[MAXPATHLEN + 1]; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Op", &id, dom_document_class_entry, &source, &source_len) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &id, dom_document_class_entry, &source, &source_len) == FAILURE) { return; } @@ -2039,6 +2043,10 @@ static void _dom_document_relaxNG_validate(INTERNAL_FUNCTION_PARAMETERS, int typ switch (type) { case DOM_LOAD_FILE: + if (CHECK_NULL_PATH(source, source_len)) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid RelaxNG file source"); + RETURN_FALSE; + } valid_file = _dom_get_valid_file_path(source, resolved_path, MAXPATHLEN TSRMLS_CC); if (!valid_file) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid RelaxNG file source"); @@ -2119,7 +2127,7 @@ static void dom_load_html(INTERNAL_FUNCTION_PARAMETERS, int mode) /* {{{ */ id = getThis(); - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "p|l", &source, &source_len, &options) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &source, &source_len, &options) == FAILURE) { return; } @@ -2129,6 +2137,10 @@ static void dom_load_html(INTERNAL_FUNCTION_PARAMETERS, int mode) /* {{{ */ } if (mode == DOM_LOAD_FILE) { + if (CHECK_NULL_PATH(source, source_len)) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid file source"); + RETURN_FALSE; + } ctxt = htmlCreateFileParserCtxt(source, NULL); } else { source_len = xmlStrlen(source); @@ -2217,7 +2229,7 @@ PHP_FUNCTION(dom_document_save_html_file) char *file; const char *encoding; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &id, dom_document_class_entry, &file, &file_len) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Op", &id, dom_document_class_entry, &file, &file_len) == FAILURE) { return; } diff --git a/ext/dom/tests/DOMDocument_loadHTMLfile_error2.phpt b/ext/dom/tests/DOMDocument_loadHTMLfile_error2.phpt index 75004e2a74..e0d0923642 100644 --- a/ext/dom/tests/DOMDocument_loadHTMLfile_error2.phpt +++ b/ext/dom/tests/DOMDocument_loadHTMLfile_error2.phpt @@ -15,9 +15,9 @@ $result = $doc->loadHTMLFile(""); assert('$result === false'); $doc = new DOMDocument(); $result = $doc->loadHTMLFile("text.html\0something"); -assert('$result === null'); +assert('$result === false'); ?> --EXPECTF-- %r(PHP ){0,1}%rWarning: DOMDocument::loadHTMLFile(): Empty string supplied as input %s -%r(PHP ){0,1}%rWarning: DOMDocument::loadHTMLFile() expects parameter 1 to be a valid path, string given %s +%r(PHP ){0,1}%rWarning: DOMDocument::loadHTMLFile(): Invalid file source %s diff --git a/ext/gd/gd.c b/ext/gd/gd.c index 0642d45ec2..72c2d480e3 100644 --- a/ext/gd/gd.c +++ b/ext/gd/gd.c @@ -1750,7 +1750,7 @@ PHP_FUNCTION(imagefilledarc) long cx, cy, w, h, ST, E, col, style; gdImagePtr im; int e, st; - + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rllllllll", &IM, &cx, &cy, &w, &h, &ST, &E, &col, &style) == FAILURE) { return; } @@ -1991,7 +1991,7 @@ PHP_FUNCTION(imagegrabwindow) if ( handle == 0 ) { goto clean; } - pPrintWindow = (tPrintWindow) GetProcAddress(handle, "PrintWindow"); + pPrintWindow = (tPrintWindow) GetProcAddress(handle, "PrintWindow"); if ( pPrintWindow ) { pPrintWindow(window, memDC, (UINT) client_area); @@ -3060,10 +3060,11 @@ PHP_FUNCTION(imagegammacorrect) for (x = 0; x < gdImageSX(im); x++) { c = gdImageGetPixel(im, x, y); gdImageSetPixel(im, x, y, - gdTrueColor( + gdTrueColorAlpha( (int) ((pow((pow((gdTrueColorGetRed(c) / 255.0), input)), 1.0 / output) * 255) + .5), (int) ((pow((pow((gdTrueColorGetGreen(c) / 255.0), input)), 1.0 / output) * 255) + .5), - (int) ((pow((pow((gdTrueColorGetBlue(c) / 255.0), input)), 1.0 / output) * 255) + .5) + (int) ((pow((pow((gdTrueColorGetBlue(c) / 255.0), input)), 1.0 / output) * 255) + .5), + gdTrueColorGetAlpha(c) ) ); } @@ -3860,7 +3861,7 @@ static void php_imagettftext_common(INTERNAL_FUNCTION_PARAMETERS, int mode, int if (zend_hash_get_current_data_ex(HASH_OF(EXT), (void **) &item, &pos) == FAILURE) { continue; } - + if (strcmp("linespacing", key) == 0) { convert_to_double_ex(item); strex.flags |= gdFTEX_LINESPACE; @@ -3939,7 +3940,7 @@ PHP_FUNCTION(imagepsloadfont) struct stat st; #endif - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &file, &file_len) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "p", &file, &file_len) == FAILURE) { return; } @@ -4279,11 +4280,11 @@ PHP_FUNCTION(imagepsbbox) if (argc != 3 && argc != 6) { ZEND_WRONG_PARAM_COUNT(); } - + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "srl|lld", &str, &str_len, &fnt, &sz, &sp, &wd, &angle) == FAILURE) { return; } - + if (argc == 6) { space = sp; add_width = wd; diff --git a/ext/gd/tests/bug61221.phpt b/ext/gd/tests/bug61221.phpt new file mode 100644 index 0000000000..42365da71f --- /dev/null +++ b/ext/gd/tests/bug61221.phpt @@ -0,0 +1,23 @@ +--TEST-- +Bug #61221 - imagegammacorrect function loses alpha channel +--SKIPIF-- +<?php +if (!extension_loaded('gd')) die('skip gd extension not available'); +?> +--FILE-- +<?php +$imagew = 50; +$imageh = 50; +$img = imagecreatetruecolor($imagew, $imageh); +$blacktransparent = imagecolorallocatealpha($img, 0, 0, 0, 127); +$redsolid = imagecolorallocate($img, 255, 0, 0); +imagefill($img, 0, 0, $blacktransparent); +imageline($img, $imagew / 2, 0, $imagew / 2, $imageh - 1, $redsolid); +imageline($img, 0, $imageh / 2, $imagew - 1, $imageh / 2, $redsolid); +imagegammacorrect($img, 1, 1); +$color = imagecolorat($img, 0, 0); +var_dump($color === $blacktransparent); +imagedestroy($img); +?> +--EXPECT-- +bool(true) diff --git a/ext/gmp/gmp.c b/ext/gmp/gmp.c index 6bc1d3ff16..575dab8a5b 100644 --- a/ext/gmp/gmp.c +++ b/ext/gmp/gmp.c @@ -1841,6 +1841,7 @@ ZEND_FUNCTION(gmp_random_range) { zval *min_arg, *max_arg; mpz_ptr gmpnum_min, gmpnum_max, gmpnum_result; + mpz_t gmpnum_range; gmp_temp_t temp_a, temp_b; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zz", &min_arg, &max_arg) == FAILURE) { @@ -1859,22 +1860,23 @@ ZEND_FUNCTION(gmp_random_range) } INIT_GMP_RETVAL(gmpnum_result); + mpz_init(gmpnum_range); - if (Z_LVAL_P(min_arg)) { - mpz_sub_ui(gmpnum_max, gmpnum_max, Z_LVAL_P(min_arg)); + if (Z_LVAL_P(min_arg) != 0) { + mpz_sub_ui(gmpnum_range, gmpnum_max, Z_LVAL_P(min_arg) - 1); + } else { + mpz_add_ui(gmpnum_range, gmpnum_max, 1); } - mpz_add_ui(gmpnum_max, gmpnum_max, 1); - mpz_urandomm(gmpnum_result, GMPG(rand_state), gmpnum_max); + mpz_urandomm(gmpnum_result, GMPG(rand_state), gmpnum_range); - if (Z_LVAL_P(min_arg)) { + if (Z_LVAL_P(min_arg) != 0) { mpz_add_ui(gmpnum_result, gmpnum_result, Z_LVAL_P(min_arg)); } + mpz_clear(gmpnum_range); FREE_GMP_TEMP(temp_a); - - } - else { + } else { FETCH_GMP_ZVAL_DEP(gmpnum_min, min_arg, temp_b, temp_a); if (mpz_cmp(gmpnum_max, gmpnum_min) <= 0) { @@ -1885,12 +1887,14 @@ ZEND_FUNCTION(gmp_random_range) } INIT_GMP_RETVAL(gmpnum_result); + mpz_init(gmpnum_range); - mpz_sub(gmpnum_max, gmpnum_max, gmpnum_min); - mpz_add_ui(gmpnum_max, gmpnum_max, 1); - mpz_urandomm(gmpnum_result, GMPG(rand_state), gmpnum_max); + mpz_sub(gmpnum_range, gmpnum_max, gmpnum_min); + mpz_add_ui(gmpnum_range, gmpnum_range, 1); + mpz_urandomm(gmpnum_result, GMPG(rand_state), gmpnum_range); mpz_add(gmpnum_result, gmpnum_result, gmpnum_min); + mpz_clear(gmpnum_range); FREE_GMP_TEMP(temp_b); FREE_GMP_TEMP(temp_a); } diff --git a/ext/gmp/tests/bug69803.phpt b/ext/gmp/tests/bug69803.phpt new file mode 100644 index 0000000000..e158cc5c0c --- /dev/null +++ b/ext/gmp/tests/bug69803.phpt @@ -0,0 +1,22 @@ +--TEST-- +Bug #69803: gmp_random_range() modifies second parameter if GMP number +--FILE-- +<?php + +$a = gmp_init(100); +$b = gmp_init(200); +echo $a . ", ", $b . "\n"; +gmp_random_range($a, $b); +echo $a . ", ", $b . "\n"; + +$b = gmp_init(200); +echo $a . ", ", $b . "\n"; +gmp_random_range(100, $b); +echo $a . ", ", $b . "\n"; + +?> +--EXPECT-- +100, 200 +100, 200 +100, 200 +100, 200 diff --git a/ext/gmp/tests/gmp_random_range.phpt b/ext/gmp/tests/gmp_random_range.phpt index db2ece61c5..654ffbefb3 100644 --- a/ext/gmp/tests/gmp_random_range.phpt +++ b/ext/gmp/tests/gmp_random_range.phpt @@ -5,8 +5,8 @@ gmp_random_range() basic tests --FILE-- <?php -$minusTen = gmp_init(-1); -$plusTen = gmp_init(1); +$minusTen = gmp_init(-10); +$plusTen = gmp_init(10); $zero = gmp_init(0); var_dump(gmp_random_range()); diff --git a/ext/iconv/config.m4 b/ext/iconv/config.m4 index fce59931b9..a6d50cfd9d 100644 --- a/ext/iconv/config.m4 +++ b/ext/iconv/config.m4 @@ -186,8 +186,8 @@ int main() { AC_DEFINE([ICONV_BROKEN_IGNORE],1,[Whether iconv supports IGNORE]) ],[ AC_MSG_RESULT(no, cross-compiling) - PHP_DEFINE([ICONV_SUPPORTS_ERRNO],0,[ext/iconv]) - AC_DEFINE([ICONV_SUPPORTS_ERRNO],0,[Whether iconv supports IGNORE]) + PHP_DEFINE([ICONV_BROKEN_IGNORE],0,[ext/iconv]) + AC_DEFINE([ICONV_BROKEN_IGNORE],0,[Whether iconv supports IGNORE]) ]) AC_MSG_CHECKING([if your cpp allows macro usage in include lines]) diff --git a/ext/ldap/ldap.c b/ext/ldap/ldap.c index f9e41ff796..5c6c481bc5 100644 --- a/ext/ldap/ldap.c +++ b/ext/ldap/ldap.c @@ -22,7 +22,7 @@ | PHP 4.0 updates: Zeev Suraski <zeev@zend.com> | +----------------------------------------------------------------------+ */ - + /* $Id$ */ #define IS_EXT_MODULE @@ -96,13 +96,21 @@ static void _close_ldap_link(zend_rsrc_list_entry *rsrc TSRMLS_DC) /* {{{ */ { ldap_linkdata *ld = (ldap_linkdata *)rsrc->ptr; - ldap_unbind_s(ld->link); -#if defined(LDAP_API_FEATURE_X_OPENLDAP) && defined(HAVE_3ARG_SETREBINDPROC) + /* ldap_unbind_s() is deprecated; + * the distinction between ldap_unbind() and ldap_unbind_s() is moot */ +#ifdef LDAP_API_FEATURE_X_OPENLDAP + ldap_unbind_ext(ld->link, NULL, NULL); +#ifdef HAVE_3ARG_SETREBINDPROC + if (ld->rebindproc != NULL) { zval_dtor(ld->rebindproc); FREE_ZVAL(ld->rebindproc); } #endif +#else /* ! LDAP_API_FEATURE_X_OPENLDAP */ + ldap_unbind_s(ld->link); +#endif /* ! LDAP_API_FEATURE_X_OPENLDAP */ + efree(ld); LDAPG(num_links)--; } @@ -125,7 +133,7 @@ static void _free_ldap_result_entry(zend_rsrc_list_entry *rsrc TSRMLS_DC) /* {{{ } zend_list_delete(entry->id); efree(entry); -} +} /* }}} */ /* {{{ PHP_INI_BEGIN @@ -194,6 +202,10 @@ PHP_MINIT_FUNCTION(ldap) REGISTER_LONG_CONSTANT("LDAP_OPT_DEBUG_LEVEL", LDAP_OPT_DEBUG_LEVEL, CONST_PERSISTENT | CONST_CS); #endif +#ifdef LDAP_OPT_DIAGNOSTIC_MESSAGE + REGISTER_LONG_CONSTANT("LDAP_OPT_DIAGNOSTIC_MESSAGE", LDAP_OPT_DIAGNOSTIC_MESSAGE, CONST_PERSISTENT | CONST_CS); +#endif + #ifdef HAVE_LDAP_SASL REGISTER_LONG_CONSTANT("LDAP_OPT_X_SASL_MECH", LDAP_OPT_X_SASL_MECH, CONST_PERSISTENT | CONST_CS); REGISTER_LONG_CONSTANT("LDAP_OPT_X_SASL_REALM", LDAP_OPT_X_SASL_REALM, CONST_PERSISTENT | CONST_CS); @@ -298,7 +310,13 @@ PHP_FUNCTION(ldap_connect) { char *host = NULL; int hostlen; - long port = 389; /* Default port */ + long port = +#ifdef LDAP_API_FEATURE_X_OPENLDAP + LDAP_PORT +#else /* ! LDAP_API_FEATURE_X_OPENLDAP */ + 389 /* Default port */ +#endif /* ! LDAP_API_FEATURE_X_OPENLDAP */ + ; #ifdef HAVE_ORALDAP char *wallet = NULL, *walletpasswd = NULL; int walletlen = 0, walletpasswdlen = 0; @@ -306,7 +324,7 @@ PHP_FUNCTION(ldap_connect) int ssl=0; #endif ldap_linkdata *ld; - LDAP *ldap; + LDAP *ldap = NULL; #ifdef HAVE_ORALDAP if (ZEND_NUM_ARGS() == 3 || ZEND_NUM_ARGS() == 4) { @@ -334,22 +352,38 @@ PHP_FUNCTION(ldap_connect) ld = ecalloc(1, sizeof(ldap_linkdata)); #ifdef LDAP_API_FEATURE_X_OPENLDAP - if (host != NULL && strchr(host, '/')) { + /* OpenLDAP provides a specific call to detect valid LDAP URIs; + * ldap_init()/ldap_open() is deprecated, use ldap_initialize() instead. + */ + { int rc; - - rc = ldap_initialize(&ldap, host); + char *url = host; + if (!ldap_is_ldap_url(url)) { + int urllen = hostlen + sizeof( "ldap://:65535" ); + + if (port <= 0 || port > 65535) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid port number: %ld", port); + RETURN_FALSE; + } + + url = emalloc(urllen); + snprintf( url, urllen, "ldap://%s:%ld", host ? host : "", port ); + } + + rc = ldap_initialize(&ldap, url); + if (url != host) { + efree(url); + } if (rc != LDAP_SUCCESS) { efree(ld); php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not create session handle: %s", ldap_err2string(rc)); RETURN_FALSE; } - } else { - ldap = ldap_init(host, port); } -#else +#else /* ! LDAP_API_FEATURE_X_OPENLDAP */ ldap = ldap_open(host, port); -#endif - +#endif /* ! LDAP_API_FEATURE_X_OPENLDAP */ + if (ldap == NULL) { efree(ld); RETURN_FALSE; @@ -361,7 +395,7 @@ PHP_FUNCTION(ldap_connect) php_error_docref(NULL TSRMLS_CC, E_WARNING, "SSL init failed"); RETURN_FALSE; } - } + } #endif LDAPG(num_links)++; ld->link = ldap; @@ -436,7 +470,21 @@ PHP_FUNCTION(ldap_bind) RETURN_FALSE; } - if ((rc = ldap_bind_s(ld->link, ldap_bind_dn, ldap_bind_pw, LDAP_AUTH_SIMPLE)) != LDAP_SUCCESS) { +#ifdef LDAP_API_FEATURE_X_OPENLDAP + { + struct berval cred; + + /* ldap_bind_s() is deprecated; use ldap_sasl_bind_s() instead */ + cred.bv_val = ldap_bind_pw; + cred.bv_len = ldap_bind_pw ? ldap_bind_pwlen : 0; + rc = ldap_sasl_bind_s(ld->link, ldap_bind_dn, LDAP_SASL_SIMPLE, &cred, + NULL, NULL, /* no controls right now */ + NULL); /* we don't care about the server's credentials */ + } +#else + rc = ldap_bind_s(ld->link, ldap_bind_dn, ldap_bind_pw, LDAP_AUTH_SIMPLE); +#endif + if ( rc != LDAP_SUCCESS) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to bind to server: %s", ldap_err2string(rc)); RETURN_FALSE; } else { @@ -460,7 +508,7 @@ static php_ldap_bictx *_php_sasl_setdefs(LDAP *ld, char *sasl_mech, char *sasl_r { php_ldap_bictx *ctx; - ctx = ber_memalloc(sizeof(php_ldap_bictx)); + ctx = ber_memalloc(sizeof(php_ldap_bictx)); ctx->mech = (sasl_mech) ? ber_strdup(sasl_mech) : NULL; ctx->realm = (sasl_realm) ? ber_strdup(sasl_realm) : NULL; ctx->authcid = (sasl_authc_id) ? ber_strdup(sasl_authc_id) : NULL; @@ -598,8 +646,8 @@ static void php_set_opts(LDAP *ldap, int sizelimit, int timelimit, int deref, in ldap_get_option(ldap, LDAP_OPT_SIZELIMIT, old_sizelimit); ldap_set_option(ldap, LDAP_OPT_SIZELIMIT, &sizelimit); #else - *old_sizelimit = ldap->ld_sizelimit; - ldap->ld_sizelimit = sizelimit; + *old_sizelimit = ldap->ld_sizelimit; + ldap->ld_sizelimit = sizelimit; #endif } @@ -609,8 +657,8 @@ static void php_set_opts(LDAP *ldap, int sizelimit, int timelimit, int deref, in ldap_get_option(ldap, LDAP_OPT_SIZELIMIT, old_timelimit); ldap_set_option(ldap, LDAP_OPT_TIMELIMIT, &timelimit); #else - *old_timelimit = ldap->ld_timelimit; - ldap->ld_timelimit = timelimit; + *old_timelimit = ldap->ld_timelimit; + ldap->ld_timelimit = timelimit; #endif } @@ -620,8 +668,8 @@ static void php_set_opts(LDAP *ldap, int sizelimit, int timelimit, int deref, in ldap_get_option(ldap, LDAP_OPT_SIZELIMIT, old_deref); ldap_set_option(ldap, LDAP_OPT_DEREF, &deref); #else - *old_deref = ldap->ld_deref; - ldap->ld_deref = deref; + *old_deref = ldap->ld_deref; + ldap->ld_deref = deref; #endif } } @@ -633,11 +681,11 @@ static void php_ldap_do_search(INTERNAL_FUNCTION_PARAMETERS, int scope) { zval *link, *base_dn, **filter, *attrs = NULL, **attr; long attrsonly, sizelimit, timelimit, deref; - char *ldap_base_dn = NULL, *ldap_filter = NULL, **ldap_attrs = NULL; + char *ldap_base_dn = NULL, *ldap_filter = NULL, **ldap_attrs = NULL; ldap_linkdata *ld = NULL; LDAPMessage *ldap_res; - int ldap_attrsonly = 0, ldap_sizelimit = -1, ldap_timelimit = -1, ldap_deref = -1; - int old_ldap_sizelimit = -1, old_ldap_timelimit = -1, old_ldap_deref = -1; + int ldap_attrsonly = 0, ldap_sizelimit = -1, ldap_timelimit = -1, ldap_deref = -1; + int old_ldap_sizelimit = -1, old_ldap_timelimit = -1, old_ldap_deref = -1; int num_attribs = 0, ret = 1, i, errno, argcount = ZEND_NUM_ARGS(); if (zend_parse_parameters(argcount TSRMLS_CC, "zzZ|allll", &link, &base_dn, &filter, &attrs, &attrsonly, @@ -680,7 +728,7 @@ static void php_ldap_do_search(INTERNAL_FUNCTION_PARAMETERS, int scope) int i, nlinks, nbases, nfilters, *rcs; ldap_linkdata **lds; zval **entry, *resource; - + nlinks = zend_hash_num_elements(Z_ARRVAL_P(link)); if (nlinks == 0) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "No links in link array"); @@ -722,7 +770,7 @@ static void php_ldap_do_search(INTERNAL_FUNCTION_PARAMETERS, int scope) lds = safe_emalloc(nlinks, sizeof(ldap_linkdata), 0); rcs = safe_emalloc(nlinks, sizeof(*rcs), 0); - + zend_hash_internal_pointer_reset(Z_ARRVAL_P(link)); for (i=0; i<nlinks; i++) { zend_hash_get_current_data(Z_ARRVAL_P(link), (void **)&entry); @@ -752,12 +800,12 @@ static void php_ldap_do_search(INTERNAL_FUNCTION_PARAMETERS, int scope) php_set_opts(ld->link, ldap_sizelimit, ldap_timelimit, ldap_deref, &old_ldap_sizelimit, &old_ldap_timelimit, &old_ldap_deref); - /* Run the actual search */ + /* Run the actual search */ rcs[i] = ldap_search(ld->link, ldap_base_dn, scope, ldap_filter, ldap_attrs, ldap_attrsonly); lds[i] = ld; zend_hash_move_forward(Z_ARRVAL_P(link)); } - + array_init(return_value); /* Collect results from the searches */ @@ -794,9 +842,9 @@ cleanup_parallel: php_set_opts(ld->link, ldap_sizelimit, ldap_timelimit, ldap_deref, &old_ldap_sizelimit, &old_ldap_timelimit, &old_ldap_deref); - /* Run the actual search */ + /* Run the actual search */ errno = ldap_search_s(ld->link, ldap_base_dn, scope, ldap_filter, ldap_attrs, ldap_attrsonly, &ldap_res); - + if (errno != LDAP_SUCCESS && errno != LDAP_SIZELIMIT_EXCEEDED #ifdef LDAP_ADMINLIMIT_EXCEEDED @@ -817,7 +865,7 @@ cleanup_parallel: php_error_docref(NULL TSRMLS_CC, E_WARNING, "Partial search results returned: Adminlimit exceeded"); } #endif - + ZEND_REGISTER_RESOURCE(return_value, ldap_res, le_result); } } @@ -902,7 +950,7 @@ PHP_FUNCTION(ldap_count_entries) PHP_FUNCTION(ldap_first_entry) { zval *link, *result; - ldap_linkdata *ld; + ldap_linkdata *ld; ldap_resultentry *resultentry; LDAPMessage *ldap_result, *entry; @@ -987,7 +1035,7 @@ PHP_FUNCTION(ldap_get_entries) if (num_entries == 0) { return; } - + ldap_result_entry = ldap_first_entry(ldap, ldap_result); if (ldap_result_entry == NULL) { zval_dtor(return_value); @@ -1011,7 +1059,7 @@ PHP_FUNCTION(ldap_get_entries) add_assoc_long(tmp2, "count", num_values); for (i = 0; i < num_values; i++) { add_index_stringl(tmp2, i, ldap_value[i]->bv_val, ldap_value[i]->bv_len, 1); - } + } ldap_value_free_len(ldap_value); attr_len = strlen(attribute); @@ -1040,7 +1088,7 @@ PHP_FUNCTION(ldap_get_entries) #endif zend_hash_index_update(Z_ARRVAL_P(return_value), num_entries, (void *) &tmp1, sizeof(zval *), NULL); - + num_entries++; ldap_result_entry = ldap_next_entry(ldap, ldap_result_entry); } @@ -1139,7 +1187,7 @@ PHP_FUNCTION(ldap_get_attributes) array_init(return_value); num_attrib = 0; - + attribute = ldap_first_attribute(ld->link, resultentry->data, &ber); while (attribute != NULL) { ldap_value = ldap_get_values_len(ld->link, resultentry->data, attribute); @@ -1167,7 +1215,7 @@ PHP_FUNCTION(ldap_get_attributes) ber_free(ber, 0); } #endif - + add_assoc_long(return_value, "count", num_attrib); } /* }}} */ @@ -1182,11 +1230,11 @@ PHP_FUNCTION(ldap_get_values_len) char *attr; struct berval **ldap_value_len; int i, num_values, attr_len; - + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rrs", &link, &result_entry, &attr, &attr_len) != SUCCESS) { return; } - + ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, &link, -1, "ldap link", le_link); ZEND_FETCH_RESOURCE(resultentry, ldap_resultentry *, &result_entry, -1, "ldap result entry", le_result_entry); @@ -1194,14 +1242,14 @@ PHP_FUNCTION(ldap_get_values_len) php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot get the value(s) of attribute %s", ldap_err2string(_get_lderrno(ld->link))); RETURN_FALSE; } - + num_values = ldap_count_values_len(ldap_value_len); array_init(return_value); - + for (i=0; i<num_values; i++) { add_next_index_stringl(return_value, ldap_value_len[i]->bv_val, ldap_value_len[i]->bv_len, 1); } - + add_assoc_long(return_value, "count", num_values); ldap_value_free_len(ldap_value_len); @@ -1210,7 +1258,7 @@ PHP_FUNCTION(ldap_get_values_len) /* {{{ proto string ldap_get_dn(resource link, resource result_entry) Get the DN of a result entry */ -PHP_FUNCTION(ldap_get_dn) +PHP_FUNCTION(ldap_get_dn) { zval *link, *result_entry; ldap_linkdata *ld; @@ -1220,7 +1268,7 @@ PHP_FUNCTION(ldap_get_dn) if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rr", &link, &result_entry) != SUCCESS) { return; } - + ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, &link, -1, "ldap link", le_link); ZEND_FETCH_RESOURCE(resultentry, ldap_resultentry *, &result_entry, -1, "ldap result entry", le_result_entry); @@ -1266,7 +1314,12 @@ PHP_FUNCTION(ldap_explode_dn) add_index_string(return_value, i, ldap_value[i], 1); } +#ifdef LDAP_API_FEATURE_X_OPENLDAP + /* ldap_value_free() is deprecated */ + ber_memvfree((void **)ldap_value); +#else /* ! LDAP_API_FEATURE_X_OPENLDAP */ ldap_value_free(ldap_value); +#endif /* ! LDAP_API_FEATURE_X_OPENLDAP */ } /* }}} */ @@ -1280,9 +1333,9 @@ PHP_FUNCTION(ldap_dn2ufn) if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &dn, &dn_len) != SUCCESS) { return; } - + ufn = ldap_dn2ufn(dn); - + if (ufn != NULL) { RETVAL_STRING(ufn, 1); #if (LDAP_API_VERSION > 2000) || HAVE_NSLDAP || HAVE_ORALDAP || WINDOWS @@ -1313,7 +1366,7 @@ static void php_ldap_do_modify(INTERNAL_FUNCTION_PARAMETERS, int oper) if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rsa", &link, &dn, &dn_len, &entry) != SUCCESS) { return; - } + } ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, &link, -1, "ldap link", le_link); @@ -1347,7 +1400,7 @@ static void php_ldap_do_modify(INTERNAL_FUNCTION_PARAMETERS, int oper) i--; } efree(num_berval); - efree(ldap_mods); + efree(ldap_mods); RETURN_FALSE; } @@ -1358,7 +1411,7 @@ static void php_ldap_do_modify(INTERNAL_FUNCTION_PARAMETERS, int oper) } else { num_values = zend_hash_num_elements(Z_ARRVAL_PP(value)); } - + num_berval[i] = num_values; ldap_mods[i]->mod_bvalues = safe_emalloc((num_values + 1), sizeof(struct berval *), 0); @@ -1368,7 +1421,7 @@ static void php_ldap_do_modify(INTERNAL_FUNCTION_PARAMETERS, int oper) ldap_mods[i]->mod_bvalues[0] = (struct berval *) emalloc (sizeof(struct berval)); ldap_mods[i]->mod_bvalues[0]->bv_len = Z_STRLEN_PP(value); ldap_mods[i]->mod_bvalues[0]->bv_val = Z_STRVAL_PP(value); - } else { + } else { for (j = 0; j < num_values; j++) { if (zend_hash_index_find(Z_ARRVAL_PP(value), j, (void **) &ivalue) != SUCCESS) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Value array must have consecutive indices 0, 1, ..."); @@ -1398,7 +1451,7 @@ static void php_ldap_do_modify(INTERNAL_FUNCTION_PARAMETERS, int oper) if ((i = ldap_modify_ext_s(ld->link, dn, ldap_mods, NULL, NULL)) != LDAP_SUCCESS) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Modify: %s", ldap_err2string(i)); RETVAL_FALSE; - } else RETVAL_TRUE; + } else RETVAL_TRUE; } errexit: @@ -1411,7 +1464,7 @@ errexit: efree(ldap_mods[i]); } efree(num_berval); - efree(ldap_mods); + efree(ldap_mods); return; } @@ -1858,7 +1911,7 @@ PHP_FUNCTION(ldap_err2str) /* {{{ proto string ldap_error(resource link) Get the current ldap error string */ -PHP_FUNCTION(ldap_error) +PHP_FUNCTION(ldap_error) { zval *link; ldap_linkdata *ld; @@ -1878,7 +1931,7 @@ PHP_FUNCTION(ldap_error) /* {{{ proto bool ldap_compare(resource link, string dn, string attr, string value) Determine if an entry has a specific value for one of its attributes */ -PHP_FUNCTION(ldap_compare) +PHP_FUNCTION(ldap_compare) { zval *link; char *dn, *attr, *value; @@ -1903,7 +1956,7 @@ PHP_FUNCTION(ldap_compare) RETURN_FALSE; break; } - + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Compare: %s", ldap_err2string(errno)); RETURN_LONG(-1); } @@ -1942,12 +1995,12 @@ PHP_FUNCTION(ldap_sort) #if (LDAP_API_VERSION > 2000) || HAVE_NSLDAP || HAVE_ORALDAP /* {{{ proto bool ldap_get_option(resource link, int option, mixed retval) Get the current value of various session-wide parameters */ -PHP_FUNCTION(ldap_get_option) +PHP_FUNCTION(ldap_get_option) { zval *link, *retval; ldap_linkdata *ld; long option; - + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rlz", &link, &option, &retval) != SUCCESS) { return; } @@ -1984,7 +2037,7 @@ PHP_FUNCTION(ldap_get_option) ldap_memfree(timeout); } RETURN_FALSE; - } + } if (!timeout) { RETURN_FALSE; } @@ -1999,7 +2052,7 @@ PHP_FUNCTION(ldap_get_option) if (ldap_get_option(ld->link, LDAP_X_OPT_CONNECT_TIMEOUT, &timeout)) { RETURN_FALSE; - } + } zval_dtor(retval); ZVAL_LONG(retval, (timeout / 1000)); } break; @@ -2010,7 +2063,7 @@ PHP_FUNCTION(ldap_get_option) case LDAP_OPT_HOST_NAME: #endif #ifdef HAVE_LDAP_SASL - case LDAP_OPT_X_SASL_MECH: + case LDAP_OPT_X_SASL_MECH: case LDAP_OPT_X_SASL_REALM: case LDAP_OPT_X_SASL_AUTHCID: case LDAP_OPT_X_SASL_AUTHZID: @@ -2046,13 +2099,13 @@ PHP_FUNCTION(ldap_get_option) /* {{{ proto bool ldap_set_option(resource link, int option, mixed newval) Set the value of various session-wide parameters */ -PHP_FUNCTION(ldap_set_option) +PHP_FUNCTION(ldap_set_option) { zval *link, **newval; ldap_linkdata *ld; LDAP *ldap; long option; - + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zlZ", &link, &option, &newval) != SUCCESS) { return; } @@ -2093,7 +2146,7 @@ PHP_FUNCTION(ldap_set_option) timeout.tv_usec = 0; if (ldap_set_option(ldap, LDAP_OPT_NETWORK_TIMEOUT, (void *) &timeout)) { RETURN_FALSE; - } + } } break; #elif defined(LDAP_X_OPT_CONNECT_TIMEOUT) case LDAP_X_OPT_CONNECT_TIMEOUT: @@ -2104,7 +2157,7 @@ PHP_FUNCTION(ldap_set_option) timeout = 1000 * Z_LVAL_PP(newval); /* Convert to milliseconds */ if (ldap_set_option(ldap, LDAP_X_OPT_CONNECT_TIMEOUT, &timeout)) { RETURN_FALSE; - } + } } break; #endif /* options with string value */ @@ -2113,7 +2166,7 @@ PHP_FUNCTION(ldap_set_option) case LDAP_OPT_HOST_NAME: #endif #ifdef HAVE_LDAP_SASL - case LDAP_OPT_X_SASL_MECH: + case LDAP_OPT_X_SASL_MECH: case LDAP_OPT_X_SASL_REALM: case LDAP_OPT_X_SASL_AUTHCID: case LDAP_OPT_X_SASL_AUTHZID: @@ -2188,7 +2241,7 @@ PHP_FUNCTION(ldap_set_option) } else { ctrl->ldctl_iscritical = 0; } - + ++ctrlp; *ctrlp = NULL; zend_hash_move_forward(Z_ARRVAL_PP(newval)); @@ -2216,7 +2269,7 @@ PHP_FUNCTION(ldap_set_option) #ifdef HAVE_LDAP_PARSE_RESULT /* {{{ proto bool ldap_parse_result(resource link, resource result, int errcode, string matcheddn, string errmsg, array referrals) Extract information from result */ -PHP_FUNCTION(ldap_parse_result) +PHP_FUNCTION(ldap_parse_result) { zval *link, *result, *errcode, *matcheddn, *errmsg, *referrals; ldap_linkdata *ld; @@ -2226,7 +2279,7 @@ PHP_FUNCTION(ldap_parse_result) int rc, lerrcode, myargcount = ZEND_NUM_ARGS(); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rrz|zzz", &link, &result, &errcode, &matcheddn, &errmsg, &referrals) != SUCCESS) { - return; + return; } ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, &link, -1, "ldap link", le_link); @@ -2267,7 +2320,7 @@ PHP_FUNCTION(ldap_parse_result) ZVAL_STRING(errmsg, lerrmsg, 1); ldap_memfree(lerrmsg); } - case 4: + case 4: zval_dtor(matcheddn); if (lmatcheddn == NULL) { ZVAL_EMPTY_STRING(matcheddn); @@ -2385,7 +2438,7 @@ PHP_FUNCTION(ldap_rename) char *dn, *newrdn, *newparent; int dn_len, newrdn_len, newparent_len; zend_bool deleteoldrdn; - + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rsssb", &link, &dn, &dn_len, &newrdn, &newrdn_len, &newparent, &newparent_len, &deleteoldrdn) != SUCCESS) { return; } @@ -2610,11 +2663,11 @@ PHP_FUNCTION(ldap_escape) #ifdef STR_TRANSLATION /* {{{ php_ldap_do_translate */ -static void php_ldap_do_translate(INTERNAL_FUNCTION_PARAMETERS, int way) +static void php_ldap_do_translate(INTERNAL_FUNCTION_PARAMETERS, int way) { char *value; int result, ldap_len; - + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &value, &value_len) != SUCCESS) { return; } @@ -2659,7 +2712,7 @@ PHP_FUNCTION(ldap_8859_to_t61) #ifdef LDAP_CONTROL_PAGEDRESULTS /* {{{ proto mixed ldap_control_paged_result(resource link, int pagesize [, bool iscritical [, string cookie]]) Inject paged results control*/ -PHP_FUNCTION(ldap_control_paged_result) +PHP_FUNCTION(ldap_control_paged_result) { long pagesize; zend_bool iscritical; @@ -2751,7 +2804,7 @@ lcpr_error_out: /* {{{ proto bool ldap_control_paged_result_response(resource link, resource result [, string &cookie [, int &estimated]]) Extract paged results control response */ -PHP_FUNCTION(ldap_control_paged_result_response) +PHP_FUNCTION(ldap_control_paged_result_response) { zval *link, *result, *cookie, *estimated; struct berval lcookie; @@ -3118,9 +3171,9 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_ldap_8859_to_t61, 0, 0, 1) ZEND_END_ARG_INFO() #endif /* }}} */ - + /* - This is just a small subset of the functionality provided by the LDAP library. All the + This is just a small subset of the functionality provided by the LDAP library. All the operations are synchronous. Referrals are not handled automatically. */ /* {{{ ldap_functions[] @@ -3204,13 +3257,13 @@ const zend_function_entry ldap_functions[] = { zend_module_entry ldap_module_entry = { /* {{{ */ STANDARD_MODULE_HEADER, - "ldap", - ldap_functions, - PHP_MINIT(ldap), - PHP_MSHUTDOWN(ldap), - NULL, + "ldap", + ldap_functions, + PHP_MINIT(ldap), + PHP_MSHUTDOWN(ldap), + NULL, NULL, - PHP_MINFO(ldap), + PHP_MINFO(ldap), NO_VERSION_YET, PHP_MODULE_GLOBALS(ldap), PHP_GINIT(ldap), diff --git a/ext/ldap/tests/bug48441.phpt b/ext/ldap/tests/bug48441.phpt index 87256611d1..4f212e7402 100644 --- a/ext/ldap/tests/bug48441.phpt +++ b/ext/ldap/tests/bug48441.phpt @@ -12,9 +12,9 @@ require_once('skipifbindfailure.inc'); include "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -insert_dummy_data($link); +insert_dummy_data($link, $base); -$dn = "dc=my-domain,dc=com"; +$dn = "$base"; $filter = "(objectclass=person)"; var_dump( @@ -36,7 +36,7 @@ var_dump( include "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -remove_dummy_data($link); +remove_dummy_data($link, $base); ?> --EXPECTF-- resource(%d) of type (ldap result) @@ -57,7 +57,7 @@ array(4) { ["count"]=> int(1) ["dn"]=> - string(28) "cn=userA,dc=my-domain,dc=com" + string(%d) "cn=userA,%s" } [1]=> array(4) { @@ -73,7 +73,7 @@ array(4) { ["count"]=> int(1) ["dn"]=> - string(28) "cn=userB,dc=my-domain,dc=com" + string(%d) "cn=userB,%s" } [2]=> array(4) { @@ -89,7 +89,7 @@ array(4) { ["count"]=> int(1) ["dn"]=> - string(37) "cn=userC,cn=userB,dc=my-domain,dc=com" + string(%d) "cn=userC,cn=userB,%s" } } @@ -110,7 +110,7 @@ array(2) { ["count"]=> int(1) ["dn"]=> - string(28) "cn=userA,dc=my-domain,dc=com" + string(%d) "cn=userA,%s" } } resource(%d) of type (ldap result) @@ -131,7 +131,7 @@ array(4) { ["count"]=> int(1) ["dn"]=> - string(28) "cn=userA,dc=my-domain,dc=com" + string(%d) "cn=userA,%s" } [1]=> array(4) { @@ -147,7 +147,7 @@ array(4) { ["count"]=> int(1) ["dn"]=> - string(28) "cn=userB,dc=my-domain,dc=com" + string(%d) "cn=userB,%s" } [2]=> array(4) { @@ -163,7 +163,7 @@ array(4) { ["count"]=> int(1) ["dn"]=> - string(37) "cn=userC,cn=userB,dc=my-domain,dc=com" + string(%d) "cn=userC,cn=userB,%s" } } ===DONE=== diff --git a/ext/ldap/tests/connect.inc b/ext/ldap/tests/connect.inc index ddb57828e9..002274cf55 100644 --- a/ext/ldap/tests/connect.inc +++ b/ext/ldap/tests/connect.inc @@ -1,13 +1,14 @@ <?php /* -Default values are "localhost", "root", database "test" and empty password. +Default values are "localhost", "cn=Manager,dc=my-domain,dc=com", and password "secret". Change the LDAP_TEST_* environment values if you want to use another configuration. */ $host = getenv("LDAP_TEST_HOST") ? getenv("LDAP_TEST_HOST") : "localhost"; $port = getenv("LDAP_TEST_PORT") ? getenv("LDAP_TEST_PORT") : 389; -$user = getenv("LDAP_TEST_USER") ? getenv("LDAP_TEST_USER") : "cn=Manager,dc=my-domain,dc=com"; +$base = getenv("LDAP_TEST_BASE") ? getenv("LDAP_TEST_BASE") : "dc=my-domain,dc=com"; +$user = getenv("LDAP_TEST_USER") ? getenv("LDAP_TEST_USER") : "cn=Manager,$base"; $sasl_user = getenv("LDAP_TEST_SASL_USER") ? getenv("LDAP_TEST_SASL_USER") : "Manager"; $passwd = getenv("LDAP_TEST_PASSWD") ? getenv("LDAP_TEST_PASSWD") : "secret"; $protocol_version = getenv("LDAP_TEST_OPT_PROTOCOL_VERSION") ? getenv("LDAP_TEST_OPT_PROTOCOL_VERSION") : 3; @@ -20,16 +21,14 @@ function ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version) return $link; } -function insert_dummy_data($link) { - ldap_add($link, "dc=my-domain,dc=com", array( +function insert_dummy_data($link, $base) { + ldap_add($link, "o=test,$base", array( "objectClass" => array( - "top", - "dcObject", - "organization"), - "dc" => "my-domain", - "o" => "my-domain", + "top", + "organization"), + "o" => "test", )); - ldap_add($link, "cn=userA,dc=my-domain,dc=com", array( + ldap_add($link, "cn=userA,$base", array( "objectclass" => "person", "cn" => "userA", "sn" => "testSN1", @@ -37,14 +36,14 @@ function insert_dummy_data($link) { "telephoneNumber" => "xx-xx-xx-xx-xx", "description" => "user A", )); - ldap_add($link, "cn=userB,dc=my-domain,dc=com", array( + ldap_add($link, "cn=userB,$base", array( "objectclass" => "person", "cn" => "userB", "sn" => "testSN2", "userPassword" => "oopsIDitItAgain", "description" => "user B", )); - ldap_add($link, "cn=userC,cn=userB,dc=my-domain,dc=com", array( + ldap_add($link, "cn=userC,cn=userB,$base", array( "objectclass" => "person", "cn" => "userC", "sn" => "testSN3", @@ -52,10 +51,10 @@ function insert_dummy_data($link) { )); } -function remove_dummy_data($link) { - ldap_delete($link, "cn=userC,cn=userB,dc=my-domain,dc=com"); - ldap_delete($link, "cn=userA,dc=my-domain,dc=com"); - ldap_delete($link, "cn=userB,dc=my-domain,dc=com"); - ldap_delete($link, "dc=my-domain,dc=com"); +function remove_dummy_data($link, $base) { + ldap_delete($link, "cn=userC,cn=userB,$base"); + ldap_delete($link, "cn=userA,$base"); + ldap_delete($link, "cn=userB,$base"); + ldap_delete($link, "o=test,$base"); } ?> diff --git a/ext/ldap/tests/ldap_add_basic.phpt b/ext/ldap/tests/ldap_add_basic.phpt index ca65e4986d..46fd6578db 100644 --- a/ext/ldap/tests/ldap_add_basic.phpt +++ b/ext/ldap/tests/ldap_add_basic.phpt @@ -13,7 +13,7 @@ require "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); var_dump( - ldap_add($link, "dc=my-domain,dc=com", array( + ldap_add($link, "dc=my-domain,$base", array( "objectClass" => array( "top", "dcObject", @@ -23,7 +23,7 @@ var_dump( )), ldap_get_entries( $link, - ldap_search($link, "dc=my-domain,dc=com", "(o=my-domain)") + ldap_search($link, "$base", "(o=my-domain)") ) ); ?> @@ -34,9 +34,9 @@ require "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -ldap_delete($link, "dc=my-domain,dc=com"); +ldap_delete($link, "dc=my-domain,$base"); ?> ---EXPECT-- +--EXPECTF-- bool(true) array(2) { ["count"]=> @@ -77,7 +77,7 @@ array(2) { ["count"]=> int(3) ["dn"]=> - string(19) "dc=my-domain,dc=com" + string(%d) "dc=my-domain,%s" } } ===DONE=== diff --git a/ext/ldap/tests/ldap_add_error.phpt b/ext/ldap/tests/ldap_add_error.phpt index d17db6bfa3..a53277da80 100644 --- a/ext/ldap/tests/ldap_add_error.phpt +++ b/ext/ldap/tests/ldap_add_error.phpt @@ -15,12 +15,12 @@ $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); // Too few parameters var_dump(ldap_add()); var_dump(ldap_add($link)); -var_dump(ldap_add($link, "dc=my-domain,dc=com")); +var_dump(ldap_add($link, "$base")); // Too many parameters -var_dump(ldap_add($link, "dc=my-domain,dc=com", array(), "Additional data")); +var_dump(ldap_add($link, "$base", array(), "Additional data")); -var_dump(ldap_add($link, "dc=my-domain,dc=com", array())); +var_dump(ldap_add($link, "$base", array())); // Invalid DN var_dump( @@ -34,14 +34,14 @@ var_dump( // Duplicate entry for ($i = 0; $i < 2; $i++) var_dump( - ldap_add($link, "dc=my-domain,dc=com", array( - "objectClass" => array( - "top", - "dcObject", - "organization"), - "dc" => "my-domain", - "o" => "my-domain", - )) + ldap_add($link, "dc=my-domain,$base", array( + "objectClass" => array( + "top", + "dcObject", + "organization"), + "dc" => "my-domain", + "o" => "my-domain", + )) ); var_dump(ldap_error($link), ldap_errno($link)); @@ -64,7 +64,7 @@ var_dump( // Invalid attribute var_dump( - ldap_add($link, "dc=my-domain,dc=com", array( + ldap_add($link, "$base", array( "objectClass" => array( "top", "dcObject", @@ -78,7 +78,7 @@ var_dump( ); var_dump( - ldap_add($link, "dc=my-domain,dc=com", array(array( "Oops" + ldap_add($link, "$base", array(array( "Oops" ))) /* Is this correct behaviour to still have "Undefined attribute type" as error/errno? , @@ -94,7 +94,7 @@ require "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -ldap_delete($link, "dc=my-domain,dc=com"); +ldap_delete($link, "dc=my-domain,$base"); ?> --EXPECTF-- Warning: ldap_add() expects exactly 3 parameters, 0 given in %s on line %d diff --git a/ext/ldap/tests/ldap_compare_basic.phpt b/ext/ldap/tests/ldap_compare_basic.phpt index b0c5e97fb6..a8bb37f004 100644 --- a/ext/ldap/tests/ldap_compare_basic.phpt +++ b/ext/ldap/tests/ldap_compare_basic.phpt @@ -11,10 +11,10 @@ Patrick Allaert <patrickallaert@php.net> require "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -insert_dummy_data($link); +insert_dummy_data($link, $base); var_dump( - ldap_compare($link, "cn=userA,dc=my-domain,dc=com", "sn", "testSN1"), - ldap_compare($link, "cn=userA,dc=my-domain,dc=com", "telephoneNumber", "yy-yy-yy-yy-yy") + ldap_compare($link, "cn=userA,$base", "sn", "testSN1"), + ldap_compare($link, "cn=userA,$base", "telephoneNumber", "yy-yy-yy-yy-yy") ); ?> ===DONE=== @@ -23,7 +23,7 @@ var_dump( include "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -remove_dummy_data($link); +remove_dummy_data($link, $base); ?> --EXPECT-- bool(true) diff --git a/ext/ldap/tests/ldap_compare_error.phpt b/ext/ldap/tests/ldap_compare_error.phpt index 28127578fd..07393f6de6 100644 --- a/ext/ldap/tests/ldap_compare_error.phpt +++ b/ext/ldap/tests/ldap_compare_error.phpt @@ -11,7 +11,7 @@ Patrick Allaert <patrickallaert@php.net> require "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -insert_dummy_data($link); +insert_dummy_data($link, $base); // Too few parameters var_dump(ldap_compare($link)); @@ -22,7 +22,7 @@ var_dump(ldap_compare($link, $link, $link)); var_dump(ldap_compare($link, $link, $link, $link, "Additional data")); var_dump( - ldap_compare($link, "cn=userNotAvailable,dc=my-domain,dc=com", "sn", "testSN1"), + ldap_compare($link, "cn=userNotAvailable,$base", "sn", "testSN1"), ldap_error($link), ldap_errno($link) ); @@ -33,7 +33,7 @@ var_dump( include "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -remove_dummy_data($link); +remove_dummy_data($link, $base); ?> --EXPECTF-- Warning: ldap_compare() expects exactly 4 parameters, 1 given in %s on line %d diff --git a/ext/ldap/tests/ldap_connect_error.phpt b/ext/ldap/tests/ldap_connect_error.phpt index fa28fcf077..b93375c39e 100644 --- a/ext/ldap/tests/ldap_connect_error.phpt +++ b/ext/ldap/tests/ldap_connect_error.phpt @@ -13,7 +13,7 @@ require "connect.inc"; // too many arguments var_dump(ldap_connect(null, null, null)); -var_dump(ldap_connect("ldap://$host:$port/dc=my-domain,dc=com")); +var_dump(ldap_connect("ldap://$host:$port/$base")); $links = array(); $links[0] = ldap_connect($host, $port); diff --git a/ext/ldap/tests/ldap_control_paged_results_variation1.phpt b/ext/ldap/tests/ldap_control_paged_results_variation1.phpt index 0e894464f4..862895e81d 100644 --- a/ext/ldap/tests/ldap_control_paged_results_variation1.phpt +++ b/ext/ldap/tests/ldap_control_paged_results_variation1.phpt @@ -12,10 +12,10 @@ require_once('skipifbindfailure.inc'); include "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -insert_dummy_data($link); +insert_dummy_data($link, $base); -$dn = "dc=my-domain,dc=com"; -$filter = "(cn=*)"; +$dn = "$base"; +$filter = "(cn=user*)"; var_dump( ldap_control_paged_result($link, 1), $result = ldap_search($link, $dn, $filter, array('cn')), @@ -28,7 +28,7 @@ var_dump( include "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -remove_dummy_data($link); +remove_dummy_data($link, $base); ?> --EXPECTF-- bool(true) @@ -50,7 +50,7 @@ array(2) { ["count"]=> int(1) ["dn"]=> - string(28) "cn=userA,dc=my-domain,dc=com" + string(%d) "cn=userA,%s" } } ===DONE=== diff --git a/ext/ldap/tests/ldap_control_paged_results_variation2.phpt b/ext/ldap/tests/ldap_control_paged_results_variation2.phpt index fee43fc4d6..4544a0b85a 100644 --- a/ext/ldap/tests/ldap_control_paged_results_variation2.phpt +++ b/ext/ldap/tests/ldap_control_paged_results_variation2.phpt @@ -12,10 +12,10 @@ require_once('skipifbindfailure.inc'); include "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -insert_dummy_data($link); +insert_dummy_data($link, $base); -$dn = "dc=my-domain,dc=com"; -$filter = "(cn=*)"; +$dn = "$base"; +$filter = "(cn=user*)"; var_dump( ldap_control_paged_result($link, 2), $result = ldap_search($link, $dn, $filter, array('cn')), @@ -28,7 +28,7 @@ var_dump( include "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -remove_dummy_data($link); +remove_dummy_data($link, $base); ?> --EXPECTF-- bool(true) @@ -50,7 +50,7 @@ array(3) { ["count"]=> int(1) ["dn"]=> - string(28) "cn=userA,dc=my-domain,dc=com" + string(%d) "cn=userA,%s" } [1]=> array(4) { @@ -66,7 +66,7 @@ array(3) { ["count"]=> int(1) ["dn"]=> - string(28) "cn=userB,dc=my-domain,dc=com" + string(%d) "cn=userB,%s" } } ===DONE=== diff --git a/ext/ldap/tests/ldap_control_paged_results_variation3.phpt b/ext/ldap/tests/ldap_control_paged_results_variation3.phpt index 43a68aea79..24eae9615f 100644 --- a/ext/ldap/tests/ldap_control_paged_results_variation3.phpt +++ b/ext/ldap/tests/ldap_control_paged_results_variation3.phpt @@ -12,10 +12,10 @@ require_once('skipifbindfailure.inc'); include "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -insert_dummy_data($link); +insert_dummy_data($link, $base); -$dn = "dc=my-domain,dc=com"; -$filter = "(cn=*)"; +$dn = "$base"; +$filter = "(cn=user*)"; $cookie = ''; var_dump( ldap_control_paged_result($link, 2, true, $cookie), @@ -33,7 +33,7 @@ var_dump( include "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -remove_dummy_data($link); +remove_dummy_data($link, $base); ?> --EXPECTF-- bool(true) @@ -55,7 +55,7 @@ array(3) { ["count"]=> int(1) ["dn"]=> - string(28) "cn=userA,dc=my-domain,dc=com" + string(%d) "cn=userA,%s" } [1]=> array(4) { @@ -71,7 +71,7 @@ array(3) { ["count"]=> int(1) ["dn"]=> - string(28) "cn=userB,dc=my-domain,dc=com" + string(%d) "cn=userB,%s" } } bool(true) @@ -94,7 +94,7 @@ array(2) { ["count"]=> int(1) ["dn"]=> - string(37) "cn=userC,cn=userB,dc=my-domain,dc=com" + string(%d) "cn=userC,cn=userB,%s" } } ===DONE=== diff --git a/ext/ldap/tests/ldap_count_entries_basic.phpt b/ext/ldap/tests/ldap_count_entries_basic.phpt index a03f0596e9..7eef960614 100644 --- a/ext/ldap/tests/ldap_count_entries_basic.phpt +++ b/ext/ldap/tests/ldap_count_entries_basic.phpt @@ -11,8 +11,8 @@ Patrick Allaert <patrickallaert@php.net> require "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -insert_dummy_data($link); -$result = ldap_search($link, "dc=my-domain,dc=com", "(objectclass=person)"); +insert_dummy_data($link, $base); +$result = ldap_search($link, "$base", "(objectclass=person)"); var_dump(ldap_count_entries($link, $result)); ?> ===DONE=== @@ -21,7 +21,7 @@ var_dump(ldap_count_entries($link, $result)); include "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -remove_dummy_data($link); +remove_dummy_data($link, $base); ?> --EXPECT-- int(3) diff --git a/ext/ldap/tests/ldap_delete_basic.phpt b/ext/ldap/tests/ldap_delete_basic.phpt index 1457384784..17b8a22f15 100644 --- a/ext/ldap/tests/ldap_delete_basic.phpt +++ b/ext/ldap/tests/ldap_delete_basic.phpt @@ -11,7 +11,7 @@ Patrick Allaert <patrickallaert@php.net> require "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -ldap_add($link, "dc=my-domain,dc=com", array( +ldap_add($link, "dc=my-domain,$base", array( "objectClass" => array( "top", "dcObject", @@ -21,8 +21,8 @@ ldap_add($link, "dc=my-domain,dc=com", array( )); var_dump( - ldap_delete($link, "dc=my-domain,dc=com"), - @ldap_search($link, "dc=my-domain,dc=com", "(o=my-domain)") + ldap_delete($link, "dc=my-domain,$base"), + @ldap_search($link, "dc=my-domain,$base", "(o=my-domain)") ); ?> ===DONE=== @@ -32,7 +32,7 @@ require "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -ldap_delete($link, "dc=my-domain,dc=com"); +ldap_delete($link, "$base"); ?> --EXPECT-- bool(true) diff --git a/ext/ldap/tests/ldap_delete_error.phpt b/ext/ldap/tests/ldap_delete_error.phpt index 6ef997bb03..1d160f1074 100644 --- a/ext/ldap/tests/ldap_delete_error.phpt +++ b/ext/ldap/tests/ldap_delete_error.phpt @@ -17,7 +17,7 @@ var_dump(ldap_delete()); var_dump(ldap_delete($link)); // Too many parameters -var_dump(ldap_delete($link, "dc=my-domain,dc=com", "Additional data")); +var_dump(ldap_delete($link, "$base", "Additional data")); // Invalid DN var_dump( @@ -28,7 +28,7 @@ var_dump( // Deleting unexisting data var_dump( - ldap_delete($link, "dc=my-domain,dc=com"), + ldap_delete($link, "dc=my-domain,$base"), ldap_error($link), ldap_errno($link) ); diff --git a/ext/ldap/tests/ldap_errno_basic.phpt b/ext/ldap/tests/ldap_errno_basic.phpt index 4b02ac6d65..58fa9387c0 100644 --- a/ext/ldap/tests/ldap_errno_basic.phpt +++ b/ext/ldap/tests/ldap_errno_basic.phpt @@ -11,7 +11,7 @@ Patrick Allaert <patrickallaert@php.net> require "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -@ldap_add($link, "badDN dc=my-domain,dc=com", array( +@ldap_add($link, "badDN $base", array( "objectClass" => array( "top", "dcObject", diff --git a/ext/ldap/tests/ldap_error_basic.phpt b/ext/ldap/tests/ldap_error_basic.phpt index 64e4ef6170..ba42d1d32e 100644 --- a/ext/ldap/tests/ldap_error_basic.phpt +++ b/ext/ldap/tests/ldap_error_basic.phpt @@ -11,7 +11,7 @@ Patrick Allaert <patrickallaert@php.net> require "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -@ldap_add($link, "badDN dc=my-domain,dc=com", array( +@ldap_add($link, "badDN $base", array( "objectClass" => array( "top", "dcObject", diff --git a/ext/ldap/tests/ldap_first_attribute_basic.phpt b/ext/ldap/tests/ldap_first_attribute_basic.phpt index 8e506fae8f..eec67c5f90 100644 --- a/ext/ldap/tests/ldap_first_attribute_basic.phpt +++ b/ext/ldap/tests/ldap_first_attribute_basic.phpt @@ -11,8 +11,8 @@ Patrick Allaert <patrickallaert@php.net> require "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -insert_dummy_data($link); -$result = ldap_search($link, "dc=my-domain,dc=com", "(objectclass=organization)"); +insert_dummy_data($link, $base); +$result = ldap_search($link, "$base", "(objectclass=organization)", array("objectClass")); $entry = ldap_first_entry($link, $result); var_dump( ldap_first_attribute($link, $entry) @@ -24,7 +24,7 @@ var_dump( include "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -remove_dummy_data($link); +remove_dummy_data($link, $base); ?> --EXPECT-- string(11) "objectClass" diff --git a/ext/ldap/tests/ldap_first_entry_basic.phpt b/ext/ldap/tests/ldap_first_entry_basic.phpt index 9b658227e7..5ba6ac42a4 100644 --- a/ext/ldap/tests/ldap_first_entry_basic.phpt +++ b/ext/ldap/tests/ldap_first_entry_basic.phpt @@ -11,8 +11,8 @@ Patrick Allaert <patrickallaert@php.net> require "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -insert_dummy_data($link); -$result = ldap_search($link, "dc=my-domain,dc=com", "(objectclass=person)"); +insert_dummy_data($link, $base); +$result = ldap_search($link, "$base", "(objectclass=person)"); var_dump( $entry = ldap_first_entry($link, $result), ldap_get_values($link, $entry, 'sn') @@ -24,7 +24,7 @@ var_dump( include "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -remove_dummy_data($link); +remove_dummy_data($link, $base); ?> --EXPECTF-- resource(%d) of type (ldap result entry) diff --git a/ext/ldap/tests/ldap_first_reference_basic.phpt b/ext/ldap/tests/ldap_first_reference_basic.phpt index d7834896a2..37155a796c 100644 --- a/ext/ldap/tests/ldap_first_reference_basic.phpt +++ b/ext/ldap/tests/ldap_first_reference_basic.phpt @@ -10,14 +10,14 @@ Patrick Allaert <patrickallaert@php.net> <?php require "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -insert_dummy_data($link); -ldap_add($link, "cn=userref,dc=my-domain,dc=com", array( +insert_dummy_data($link, $base); +ldap_add($link, "cn=userref,$base", array( "objectClass" => array("extensibleObject", "referral"), "cn" => "userref", - "ref" => "cn=userA,dc=my-domain,dc=com", + "ref" => "cn=userA,$base", )); ldap_set_option($link, LDAP_OPT_DEREF, LDAP_DEREF_NEVER); -$result = ldap_search($link, "dc=my-domain,dc=com", "(cn=*)"); +$result = ldap_search($link, "$base", "(cn=*)"); var_dump($ref = ldap_first_reference($link, $result)); $refs = null; ldap_parse_reference($link, $ref, $refs); @@ -31,13 +31,13 @@ include "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); // Referral can only be removed with Manage DSA IT Control ldap_set_option($link, LDAP_OPT_SERVER_CONTROLS, array(array("oid" => "2.16.840.1.113730.3.4.2"))); -ldap_delete($link, "cn=userref,dc=my-domain,dc=com"); -remove_dummy_data($link); +ldap_delete($link, "cn=userref,$base"); +remove_dummy_data($link, $base); ?> --EXPECTF-- resource(%d) of type (ldap result entry) array(1) { [0]=> - string(28) "cn=userA,dc=my-domain,dc=com" + string(%d) "cn=userA,%s" } ===DONE=== diff --git a/ext/ldap/tests/ldap_free_result_basic.phpt b/ext/ldap/tests/ldap_free_result_basic.phpt index 33e47d6eae..ff2f5402c3 100644 --- a/ext/ldap/tests/ldap_free_result_basic.phpt +++ b/ext/ldap/tests/ldap_free_result_basic.phpt @@ -11,8 +11,8 @@ Patrick Allaert <patrickallaert@php.net> require "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -insert_dummy_data($link); -$result = ldap_search($link, "dc=my-domain,dc=com", "(objectclass=person)"); +insert_dummy_data($link, $base); +$result = ldap_search($link, "$base", "(objectclass=person)"); var_dump(ldap_free_result($result)); ?> ===DONE=== @@ -21,7 +21,7 @@ var_dump(ldap_free_result($result)); include "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -remove_dummy_data($link); +remove_dummy_data($link, $base); ?> --EXPECT-- bool(true) diff --git a/ext/ldap/tests/ldap_get_attributes_basic.phpt b/ext/ldap/tests/ldap_get_attributes_basic.phpt index 82074c592a..c380432d1b 100644 --- a/ext/ldap/tests/ldap_get_attributes_basic.phpt +++ b/ext/ldap/tests/ldap_get_attributes_basic.phpt @@ -11,8 +11,8 @@ Patrick Allaert <patrickallaert@php.net> require "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -insert_dummy_data($link); -$result = ldap_search($link, "dc=my-domain,dc=com", "(objectclass=organization)"); +insert_dummy_data($link, $base); +$result = ldap_search($link, "$base", "(o=test)"); $entry = ldap_first_entry($link, $result); var_dump( ldap_get_attributes($link, $entry) @@ -24,42 +24,31 @@ var_dump( include "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -remove_dummy_data($link); +remove_dummy_data($link, $base); ?> ---EXPECT-- -array(7) { +--EXPECTF-- +array(5) { ["objectClass"]=> - array(4) { + array(3) { ["count"]=> - int(3) + int(2) [0]=> string(3) "top" [1]=> - string(8) "dcObject" - [2]=> string(12) "organization" } [0]=> string(11) "objectClass" - ["dc"]=> - array(2) { - ["count"]=> - int(1) - [0]=> - string(9) "my-domain" - } - [1]=> - string(2) "dc" ["o"]=> array(2) { ["count"]=> int(1) [0]=> - string(9) "my-domain" + string(4) "test" } - [2]=> + [1]=> string(1) "o" ["count"]=> - int(3) + int(2) } ===DONE=== diff --git a/ext/ldap/tests/ldap_get_dn_basic.phpt b/ext/ldap/tests/ldap_get_dn_basic.phpt index e70e7bf6c5..38c252c5bb 100644 --- a/ext/ldap/tests/ldap_get_dn_basic.phpt +++ b/ext/ldap/tests/ldap_get_dn_basic.phpt @@ -11,8 +11,8 @@ Patrick Allaert <patrickallaert@php.net> require "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -insert_dummy_data($link); -$result = ldap_search($link, "dc=my-domain,dc=com", "(objectclass=organization)"); +insert_dummy_data($link, $base); +$result = ldap_search($link, "$base", "(objectclass=organization)"); $entry = ldap_first_entry($link, $result); var_dump( ldap_get_dn($link, $entry) @@ -24,8 +24,8 @@ var_dump( include "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -remove_dummy_data($link); +remove_dummy_data($link, $base); ?> ---EXPECT-- -string(19) "dc=my-domain,dc=com" +--EXPECTF-- +string(%d) "%s" ===DONE=== diff --git a/ext/ldap/tests/ldap_get_entries_basic.phpt b/ext/ldap/tests/ldap_get_entries_basic.phpt index 90dbb26146..8ed479ee4c 100644 --- a/ext/ldap/tests/ldap_get_entries_basic.phpt +++ b/ext/ldap/tests/ldap_get_entries_basic.phpt @@ -11,12 +11,12 @@ Patrick Allaert <patrickallaert@php.net> require "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -insert_dummy_data($link); +insert_dummy_data($link, $base); var_dump( ldap_get_entries( $link, - ldap_search($link, "dc=my-domain,dc=com", "(o=my-domain)") + ldap_search($link, "$base", "(o=test)") ) ); ?> @@ -26,49 +26,38 @@ var_dump( require "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -remove_dummy_data($link); +remove_dummy_data($link, $base); ?> ---EXPECT-- +--EXPECTF-- array(2) { ["count"]=> int(1) [0]=> - array(8) { + array(6) { ["objectclass"]=> - array(4) { + array(3) { ["count"]=> - int(3) + int(2) [0]=> string(3) "top" [1]=> - string(8) "dcObject" - [2]=> string(12) "organization" } [0]=> string(11) "objectclass" - ["dc"]=> - array(2) { - ["count"]=> - int(1) - [0]=> - string(9) "my-domain" - } - [1]=> - string(2) "dc" ["o"]=> array(2) { ["count"]=> int(1) [0]=> - string(9) "my-domain" + string(4) "test" } - [2]=> + [1]=> string(1) "o" ["count"]=> - int(3) + int(2) ["dn"]=> - string(19) "dc=my-domain,dc=com" + string(23) "o=test,dc=mcmic,dc=test" } } ===DONE=== diff --git a/ext/ldap/tests/ldap_get_entries_variation.phpt b/ext/ldap/tests/ldap_get_entries_variation.phpt index cb0f306d5c..87d155a94c 100644 --- a/ext/ldap/tests/ldap_get_entries_variation.phpt +++ b/ext/ldap/tests/ldap_get_entries_variation.phpt @@ -11,12 +11,12 @@ Patrick Allaert <patrickallaert@php.net> require "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -insert_dummy_data($link); +insert_dummy_data($link, $base); var_dump( ldap_get_entries( $link, - ldap_search($link, "dc=my-domain,dc=com", "(o=my-unexisting-domain)") + ldap_search($link, "$base", "(o=my-unexisting-domain)") ) ); ?> @@ -26,7 +26,7 @@ var_dump( require "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -remove_dummy_data($link); +remove_dummy_data($link, $base); ?> --EXPECT-- array(1) { diff --git a/ext/ldap/tests/ldap_get_values_len_basic.phpt b/ext/ldap/tests/ldap_get_values_len_basic.phpt index ed8461427b..33084f48ab 100644 --- a/ext/ldap/tests/ldap_get_values_len_basic.phpt +++ b/ext/ldap/tests/ldap_get_values_len_basic.phpt @@ -11,8 +11,8 @@ Patrick Allaert <patrickallaert@php.net> require "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -insert_dummy_data($link); -$result = ldap_search($link, "dc=my-domain,dc=com", "(objectclass=organization)"); +insert_dummy_data($link, $base); +$result = ldap_search($link, "$base", "(o=test)"); $entry = ldap_first_entry($link, $result); var_dump( ldap_get_values_len($link, $entry, "o") @@ -24,12 +24,12 @@ var_dump( include "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -remove_dummy_data($link); +remove_dummy_data($link, $base); ?> --EXPECT-- array(2) { [0]=> - string(9) "my-domain" + string(4) "test" ["count"]=> int(1) } diff --git a/ext/ldap/tests/ldap_get_values_len_error.phpt b/ext/ldap/tests/ldap_get_values_len_error.phpt index 45f9031df4..8bcaee070f 100644 --- a/ext/ldap/tests/ldap_get_values_len_error.phpt +++ b/ext/ldap/tests/ldap_get_values_len_error.phpt @@ -11,8 +11,8 @@ Patrick Allaert <patrickallaert@php.net> require "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -insert_dummy_data($link); -$result = ldap_search($link, "dc=my-domain,dc=com", "(objectclass=organization)"); +insert_dummy_data($link, $base); +$result = ldap_search($link, "$base", "(objectclass=organization)"); $entry = ldap_first_entry($link, $result); // Too few parameters @@ -28,7 +28,7 @@ var_dump(ldap_get_values_len($link, $entry, "inexistentAttribute")); include "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -remove_dummy_data($link); +remove_dummy_data($link, $base); ?> --EXPECTF-- Warning: ldap_get_values_len() expects exactly 3 parameters, 1 given in %s on line %d diff --git a/ext/ldap/tests/ldap_list_basic.phpt b/ext/ldap/tests/ldap_list_basic.phpt index 1993f30f1f..3f98bc8e2d 100644 --- a/ext/ldap/tests/ldap_list_basic.phpt +++ b/ext/ldap/tests/ldap_list_basic.phpt @@ -14,9 +14,9 @@ require_once('skipifbindfailure.inc'); include "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -insert_dummy_data($link); +insert_dummy_data($link, $base); var_dump( - $result = ldap_list($link, "dc=my-domain,dc=com", "(objectClass=person)"), + $result = ldap_list($link, "$base", "(objectClass=person)"), ldap_get_entries($link, $result) ); ?> @@ -26,7 +26,7 @@ var_dump( include "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -remove_dummy_data($link); +remove_dummy_data($link, $base); ?> --EXPECTF-- resource(%d) of type (ldap result) @@ -92,7 +92,7 @@ array(3) { ["count"]=> int(6) ["dn"]=> - string(28) "cn=userA,dc=my-domain,dc=com" + string(%d) "cn=userA,%s" } [1]=> array(12) { @@ -144,7 +144,7 @@ array(3) { ["count"]=> int(5) ["dn"]=> - string(28) "cn=userB,dc=my-domain,dc=com" + string(%d) "cn=userB,%s" } } ===DONE=== diff --git a/ext/ldap/tests/ldap_list_error.phpt b/ext/ldap/tests/ldap_list_error.phpt index d234d0aa3b..51bcaa583f 100644 --- a/ext/ldap/tests/ldap_list_error.phpt +++ b/ext/ldap/tests/ldap_list_error.phpt @@ -17,7 +17,7 @@ var_dump(ldap_list($link)); var_dump(ldap_list($link, $link)); // Too many parameters -var_dump(ldap_list($link, "dc=my-domain,dc=com", "(objectClass=*)", array(), 0, 0, 0, 0 , "Additional data")); +var_dump(ldap_list($link, "$base", "(objectClass=*)", array(), 0, 0, 0, 0 , "Additional data")); ?> ===DONE=== --EXPECTF-- diff --git a/ext/ldap/tests/ldap_mod_add_basic.phpt b/ext/ldap/tests/ldap_mod_add_basic.phpt index 8c8164cfa1..a05a6a0418 100644 --- a/ext/ldap/tests/ldap_mod_add_basic.phpt +++ b/ext/ldap/tests/ldap_mod_add_basic.phpt @@ -11,17 +11,17 @@ Patrick Allaert <patrickallaert@php.net> require "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -insert_dummy_data($link); +insert_dummy_data($link, $base); $entry = array( "description" => "Domain description", ); var_dump( - ldap_mod_add($link, "dc=my-domain,dc=com", $entry), + ldap_mod_add($link, "o=test,$base", $entry), ldap_get_entries( $link, - ldap_search($link, "dc=my-domain,dc=com", "(Description=Domain description)") + ldap_search($link, "o=test,$base", "(Description=Domain description)") ) ); ?> @@ -32,45 +32,34 @@ require "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -remove_dummy_data($link); +remove_dummy_data($link, $base); ?> ---EXPECT-- +--EXPECTF-- bool(true) array(2) { ["count"]=> int(1) [0]=> - array(10) { + array(8) { ["objectclass"]=> - array(4) { + array(3) { ["count"]=> - int(3) + int(2) [0]=> string(3) "top" [1]=> - string(8) "dcObject" - [2]=> string(12) "organization" } [0]=> string(11) "objectclass" - ["dc"]=> - array(2) { - ["count"]=> - int(1) - [0]=> - string(9) "my-domain" - } - [1]=> - string(2) "dc" ["o"]=> array(2) { ["count"]=> int(1) [0]=> - string(9) "my-domain" + string(4) "test" } - [2]=> + [1]=> string(1) "o" ["description"]=> array(2) { @@ -79,12 +68,12 @@ array(2) { [0]=> string(18) "Domain description" } - [3]=> + [2]=> string(11) "description" ["count"]=> - int(4) + int(3) ["dn"]=> - string(19) "dc=my-domain,dc=com" + string(%d) "o=test,%s" } } ===DONE=== diff --git a/ext/ldap/tests/ldap_mod_add_error.phpt b/ext/ldap/tests/ldap_mod_add_error.phpt index 4ba1ef9bb3..c04e2cbd3d 100644 --- a/ext/ldap/tests/ldap_mod_add_error.phpt +++ b/ext/ldap/tests/ldap_mod_add_error.phpt @@ -15,13 +15,13 @@ $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); // Too few parameters var_dump(ldap_mod_add()); var_dump(ldap_mod_add($link)); -var_dump(ldap_mod_add($link, "dc=my-domain,dc=com")); +var_dump(ldap_mod_add($link, "$base")); // Too many parameters -var_dump(ldap_mod_add($link, "dc=my-domain,dc=com", array(), "Additional data")); +var_dump(ldap_mod_add($link, "$base", array(), "Additional data")); // DN not found -var_dump(ldap_mod_add($link, "dc=my-domain,dc=com", array())); +var_dump(ldap_mod_add($link, "dc=my-domain,$base", array())); // Invalid DN var_dump(ldap_mod_add($link, "weirdAttribute=val", array())); @@ -35,17 +35,17 @@ $entry = array( "o" => "my-domain", ); -ldap_add($link, "dc=my-domain,dc=com", $entry); +ldap_add($link, "dc=my-domain,$base", $entry); $entry2 = $entry; $entry2["dc"] = "Wrong Domain"; -var_dump(ldap_mod_add($link, "dc=my-domain,dc=com", $entry2)); +var_dump(ldap_mod_add($link, "dc=my-domain,$base", $entry2)); $entry2 = $entry; $entry2["weirdAttribute"] = "weirdVal"; -var_dump(ldap_mod_add($link, "dc=my-domain,dc=com", $entry2)); +var_dump(ldap_mod_add($link, "dc=my-domain,$base", $entry2)); ?> ===DONE=== --CLEAN-- @@ -54,7 +54,7 @@ require "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -ldap_delete($link, "dc=my-domain,dc=com"); +ldap_delete($link, "dc=my-domain,$base"); ?> --EXPECTF-- Warning: ldap_mod_add() expects exactly 3 parameters, 0 given in %s on line %d diff --git a/ext/ldap/tests/ldap_mod_del_basic.phpt b/ext/ldap/tests/ldap_mod_del_basic.phpt index c7daba44de..788ac0adb3 100644 --- a/ext/ldap/tests/ldap_mod_del_basic.phpt +++ b/ext/ldap/tests/ldap_mod_del_basic.phpt @@ -11,17 +11,17 @@ Patrick Allaert <patrickallaert@php.net> require "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -insert_dummy_data($link); +insert_dummy_data($link, $base); $entry = array( "description" => "user A" ); var_dump( - ldap_mod_del($link, "cn=userA,dc=my-domain,dc=com", $entry), + ldap_mod_del($link, "cn=userA,$base", $entry), ldap_get_entries( $link, - ldap_search($link, "dc=my-domain,dc=com", "(description=user A)") + ldap_search($link, "$base", "(description=user A)") ) ); ?> @@ -32,7 +32,7 @@ require "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -remove_dummy_data($link); +remove_dummy_data($link, $base); ?> --EXPECT-- bool(true) diff --git a/ext/ldap/tests/ldap_mod_del_error.phpt b/ext/ldap/tests/ldap_mod_del_error.phpt index 71bac9f28c..679adb6e6e 100644 --- a/ext/ldap/tests/ldap_mod_del_error.phpt +++ b/ext/ldap/tests/ldap_mod_del_error.phpt @@ -15,19 +15,19 @@ $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); // Too few parameters var_dump(ldap_mod_del()); var_dump(ldap_mod_del($link)); -var_dump(ldap_mod_del($link, "dc=my-domain,dc=com")); +var_dump(ldap_mod_del($link, "$base")); // Too many parameters -var_dump(ldap_mod_del($link, "dc=my-domain,dc=com", array(), "Additional data")); +var_dump(ldap_mod_del($link, "$base", array(), "Additional data")); // DN not found -var_dump(ldap_mod_del($link, "dc=my-domain,dc=com", array())); +var_dump(ldap_mod_del($link, "dc=my-domain,$base", array())); // Invalid DN var_dump(ldap_mod_del($link, "weirdAttribute=val", array())); // Invalid attributes -var_dump(ldap_mod_del($link, "dc=my-domain,dc=com", array('dc'))); +var_dump(ldap_mod_del($link, "$base", array('dc'))); ?> ===DONE=== --CLEAN-- @@ -36,7 +36,7 @@ require "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -ldap_delete($link, "dc=my-domain,dc=com"); +ldap_delete($link, "dc=my-domain,$base"); ?> --EXPECTF-- Warning: ldap_mod_del() expects exactly 3 parameters, 0 given in %s on line %d diff --git a/ext/ldap/tests/ldap_mod_replace_basic.phpt b/ext/ldap/tests/ldap_mod_replace_basic.phpt index d1670ec02b..8e9fd4dcad 100644 --- a/ext/ldap/tests/ldap_mod_replace_basic.phpt +++ b/ext/ldap/tests/ldap_mod_replace_basic.phpt @@ -11,17 +11,17 @@ Patrick Allaert <patrickallaert@php.net> require "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -insert_dummy_data($link); +insert_dummy_data($link, $base); $entry = array( "description" => "user X" ); var_dump( - ldap_mod_replace($link, "cn=userA,dc=my-domain,dc=com", $entry), + ldap_mod_replace($link, "cn=userA,$base", $entry), ldap_get_entries( $link, - ldap_search($link, "dc=my-domain,dc=com", "(description=user X)", array("description")) + ldap_search($link, "$base", "(description=user X)", array("description")) ) ); ?> @@ -32,9 +32,9 @@ require "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -remove_dummy_data($link); +remove_dummy_data($link, $base); ?> ---EXPECT-- +--EXPECTF-- bool(true) array(2) { ["count"]=> @@ -53,7 +53,7 @@ array(2) { ["count"]=> int(1) ["dn"]=> - string(28) "cn=userA,dc=my-domain,dc=com" + string(%d) "cn=userA,%s" } } ===DONE=== diff --git a/ext/ldap/tests/ldap_mod_replace_error.phpt b/ext/ldap/tests/ldap_mod_replace_error.phpt index 0409e3e386..f796568d07 100644 --- a/ext/ldap/tests/ldap_mod_replace_error.phpt +++ b/ext/ldap/tests/ldap_mod_replace_error.phpt @@ -15,19 +15,19 @@ $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); // Too few parameters var_dump(ldap_mod_replace()); var_dump(ldap_mod_replace($link)); -var_dump(ldap_mod_replace($link, "dc=my-domain,dc=com")); +var_dump(ldap_mod_replace($link, "$base")); // Too many parameters -var_dump(ldap_mod_replace($link, "dc=my-domain,dc=com", array(), "Additional data")); +var_dump(ldap_mod_replace($link, "$base", array(), "Additional data")); // DN not found -var_dump(ldap_mod_replace($link, "dc=my-domain,dc=com", array())); +var_dump(ldap_mod_replace($link, "dc=my-domain,$base", array())); // Invalid DN var_dump(ldap_mod_replace($link, "weirdAttribute=val", array())); // Invalid attributes -var_dump(ldap_mod_replace($link, "dc=my-domain,dc=com", array('dc'))); +var_dump(ldap_mod_replace($link, "$base", array('dc'))); ?> ===DONE=== --CLEAN-- @@ -35,8 +35,6 @@ var_dump(ldap_mod_replace($link, "dc=my-domain,dc=com", array('dc'))); require "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); - -ldap_delete($link, "dc=my-domain,dc=com"); ?> --EXPECTF-- Warning: ldap_mod_replace() expects exactly 3 parameters, 0 given in %s on line %d diff --git a/ext/ldap/tests/ldap_modify_basic.phpt b/ext/ldap/tests/ldap_modify_basic.phpt index 74bd831291..2f6a51af4d 100644 --- a/ext/ldap/tests/ldap_modify_basic.phpt +++ b/ext/ldap/tests/ldap_modify_basic.phpt @@ -11,23 +11,21 @@ Patrick Allaert <patrickallaert@php.net> require "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -insert_dummy_data($link); +insert_dummy_data($link, $base); $entry = array( "objectClass" => array( "top", - "dcObject", "organization"), - "dc" => "my-domain", - "o" => "my-domain", + "o" => "test", "description" => "Domain description", ); var_dump( - ldap_modify($link, "dc=my-domain,dc=com", $entry), + ldap_modify($link, "o=test,$base", $entry), ldap_get_entries( $link, - ldap_search($link, "dc=my-domain,dc=com", "(Description=Domain description)") + ldap_search($link, "$base", "(Description=Domain description)") ) ); ?> @@ -38,45 +36,34 @@ require "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -remove_dummy_data($link); +remove_dummy_data($link, $base); ?> ---EXPECT-- +--EXPECTF-- bool(true) array(2) { ["count"]=> int(1) [0]=> - array(10) { + array(8) { ["objectclass"]=> - array(4) { + array(3) { ["count"]=> - int(3) + int(2) [0]=> string(3) "top" [1]=> - string(8) "dcObject" - [2]=> string(12) "organization" } [0]=> string(11) "objectclass" - ["dc"]=> - array(2) { - ["count"]=> - int(1) - [0]=> - string(9) "my-domain" - } - [1]=> - string(2) "dc" ["o"]=> array(2) { ["count"]=> int(1) [0]=> - string(9) "my-domain" + string(4) "test" } - [2]=> + [1]=> string(1) "o" ["description"]=> array(2) { @@ -85,12 +72,12 @@ array(2) { [0]=> string(18) "Domain description" } - [3]=> + [2]=> string(11) "description" ["count"]=> - int(4) + int(3) ["dn"]=> - string(19) "dc=my-domain,dc=com" + string(%d) "o=test,%s" } } ===DONE=== diff --git a/ext/ldap/tests/ldap_modify_batch_basic.phpt b/ext/ldap/tests/ldap_modify_batch_basic.phpt index 4f6705c7e8..23700b49b2 100644 --- a/ext/ldap/tests/ldap_modify_batch_basic.phpt +++ b/ext/ldap/tests/ldap_modify_batch_basic.phpt @@ -11,7 +11,7 @@ Ondřej Hošek <ondra.hosek@gmail.com> require "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -insert_dummy_data($link); +insert_dummy_data($link, $base); $mods = array( array( @@ -33,8 +33,8 @@ $mods = array( ); var_dump( - ldap_modify_batch($link, "cn=userA,dc=my-domain,dc=com", $mods), - ldap_get_entries($link, ldap_search($link, "dc=my-domain,dc=com", "(sn=Brown-Smith)")) + ldap_modify_batch($link, "cn=userA,$base", $mods), + ldap_get_entries($link, ldap_search($link, "$base", "(sn=Brown-Smith)")) ); ?> ===DONE=== @@ -44,9 +44,9 @@ require "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -remove_dummy_data($link); +remove_dummy_data($link, $base); ?> ---EXPECT-- +--EXPECTF-- bool(true) array(2) { ["count"]=> @@ -103,7 +103,7 @@ array(2) { ["count"]=> int(5) ["dn"]=> - string(28) "cn=userA,dc=my-domain,dc=com" + string(%d) "cn=userA,%s" } } ===DONE=== diff --git a/ext/ldap/tests/ldap_modify_batch_error.phpt b/ext/ldap/tests/ldap_modify_batch_error.phpt index 687c371c4d..2d72d491f8 100644 --- a/ext/ldap/tests/ldap_modify_batch_error.phpt +++ b/ext/ldap/tests/ldap_modify_batch_error.phpt @@ -23,13 +23,13 @@ $addGivenName = array( // Too few parameters var_dump(ldap_modify_batch()); var_dump(ldap_modify_batch($link)); -var_dump(ldap_modify_batch($link, "dc=my-domain,dc=com")); +var_dump(ldap_modify_batch($link, "$base")); // Too many parameters -var_dump(ldap_modify_batch($link, "dc=my-domain,dc=com", $addGivenName, "Invalid additional parameter")); +var_dump(ldap_modify_batch($link, "$base", $addGivenName, "Invalid additional parameter")); // DN not found -var_dump(ldap_modify_batch($link, "dc=my-domain,dc=com", $addGivenName)); +var_dump(ldap_modify_batch($link, "cn=not-found,$base", $addGivenName)); // Invalid DN var_dump(ldap_modify_batch($link, "weirdAttribute=val", $addGivenName)); @@ -44,7 +44,7 @@ $entry = array( "o" => "my-domain", ); -ldap_add($link, "dc=my-domain,dc=com", $entry); +ldap_add($link, "dc=my-domain,$base", $entry); // invalid domain $mods = array( @@ -55,7 +55,7 @@ $mods = array( ) ); -var_dump(ldap_modify_batch($link, "dc=my-domain,dc=com", $mods)); +var_dump(ldap_modify_batch($link, "dc=my-domain,$base", $mods)); // invalid attribute $mods = array( @@ -66,7 +66,7 @@ $mods = array( ) ); -var_dump(ldap_modify_batch($link, "dc=my-domain,dc=com", $mods)); +var_dump(ldap_modify_batch($link, "dc=my-domain,$base", $mods)); ?> ===DONE=== --CLEAN-- @@ -75,7 +75,7 @@ require "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -ldap_delete($link, "dc=my-domain,dc=com"); +ldap_delete($link, "dc=my-domain,$base"); ?> --EXPECTF-- Warning: ldap_modify_batch() expects exactly 3 parameters, 0 given in %s on line %d diff --git a/ext/ldap/tests/ldap_modify_error.phpt b/ext/ldap/tests/ldap_modify_error.phpt index 78a7212182..0ca2ea49dc 100644 --- a/ext/ldap/tests/ldap_modify_error.phpt +++ b/ext/ldap/tests/ldap_modify_error.phpt @@ -15,13 +15,13 @@ $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); // Too few parameters var_dump(ldap_modify()); var_dump(ldap_modify($link)); -var_dump(ldap_modify($link, "dc=my-domain,dc=com")); +var_dump(ldap_modify($link, "$base")); // Too many parameters -var_dump(ldap_modify($link, "dc=my-domain,dc=com", array(), "Additional data")); +var_dump(ldap_modify($link, "$base", array(), "Additional data")); // DN not found -var_dump(ldap_modify($link, "dc=my-domain,dc=com", array())); +var_dump(ldap_modify($link, "cn=not-found,$base", array())); // Invalid DN var_dump(ldap_modify($link, "weirdAttribute=val", array())); @@ -35,17 +35,17 @@ $entry = array( "o" => "my-domain", ); -ldap_add($link, "dc=my-domain,dc=com", $entry); +ldap_add($link, "dc=my-domain,$base", $entry); $entry2 = $entry; $entry2["dc"] = "Wrong Domain"; -var_dump(ldap_modify($link, "dc=my-domain,dc=com", $entry2)); +var_dump(ldap_modify($link, "dc=my-domain,$base", $entry2)); $entry2 = $entry; $entry2["weirdAttribute"] = "weirdVal"; -var_dump(ldap_modify($link, "dc=my-domain,dc=com", $entry2)); +var_dump(ldap_modify($link, "dc=my-domain,$base", $entry2)); ?> ===DONE=== --CLEAN-- @@ -54,7 +54,7 @@ require "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -ldap_delete($link, "dc=my-domain,dc=com"); +ldap_delete($link, "dc=my-domain,$base"); ?> --EXPECTF-- Warning: ldap_modify() expects exactly 3 parameters, 0 given in %s on line %d diff --git a/ext/ldap/tests/ldap_next_attribute_basic.phpt b/ext/ldap/tests/ldap_next_attribute_basic.phpt index 0fab78a70c..1acc0e1ad1 100644 --- a/ext/ldap/tests/ldap_next_attribute_basic.phpt +++ b/ext/ldap/tests/ldap_next_attribute_basic.phpt @@ -11,13 +11,14 @@ Patrick Allaert <patrickallaert@php.net> require "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -insert_dummy_data($link); -$result = ldap_search($link, "dc=my-domain,dc=com", "(objectclass=organization)"); +insert_dummy_data($link, $base); +$result = ldap_search($link, "$base", "(cn=userC)"); $entry = ldap_first_entry($link, $result); $attribute = ldap_first_attribute($link, $entry); var_dump( ldap_next_attribute($link, $entry), ldap_next_attribute($link, $entry), + ldap_next_attribute($link, $entry), ldap_next_attribute($link, $entry) ); ?> @@ -27,10 +28,11 @@ var_dump( include "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -remove_dummy_data($link); +remove_dummy_data($link, $base); ?> --EXPECTF-- string(%d) "%s" string(%d) "%s" +string(%d) "%s" bool(false) ===DONE=== diff --git a/ext/ldap/tests/ldap_next_attribute_error.phpt b/ext/ldap/tests/ldap_next_attribute_error.phpt index c58a5602a6..0bedf8c33f 100644 --- a/ext/ldap/tests/ldap_next_attribute_error.phpt +++ b/ext/ldap/tests/ldap_next_attribute_error.phpt @@ -11,8 +11,8 @@ Patrick Allaert <patrickallaert@php.net> require "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -insert_dummy_data($link); -$result = ldap_search($link, "dc=my-domain,dc=com", "(objectclass=organization)"); +insert_dummy_data($link, $base); +$result = ldap_search($link, "$base", "(objectclass=organization)"); $entry = ldap_first_entry($link, $result); var_dump( ldap_next_attribute($link), @@ -26,7 +26,7 @@ var_dump( include "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -remove_dummy_data($link); +remove_dummy_data($link, $base); ?> --EXPECTF-- Warning: ldap_next_attribute() expects %s 2 parameters, 1 given in %s on line %d diff --git a/ext/ldap/tests/ldap_next_entry_basic.phpt b/ext/ldap/tests/ldap_next_entry_basic.phpt index 3209df6a01..dd43715239 100644 --- a/ext/ldap/tests/ldap_next_entry_basic.phpt +++ b/ext/ldap/tests/ldap_next_entry_basic.phpt @@ -11,8 +11,8 @@ Patrick Allaert <patrickallaert@php.net> require "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -insert_dummy_data($link); -$result = ldap_list($link, "dc=my-domain,dc=com", "(objectClass=person)"); +insert_dummy_data($link, $base); +$result = ldap_list($link, "$base", "(objectClass=person)"); $entry = ldap_first_entry($link, $result); var_dump( $entry = ldap_next_entry($link, $entry), @@ -26,7 +26,7 @@ var_dump( include "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -remove_dummy_data($link); +remove_dummy_data($link, $base); ?> --EXPECTF-- resource(%d) of type (ldap result entry) diff --git a/ext/ldap/tests/ldap_next_reference_basic.phpt b/ext/ldap/tests/ldap_next_reference_basic.phpt index d0fa31d9cb..18b135da01 100644 --- a/ext/ldap/tests/ldap_next_reference_basic.phpt +++ b/ext/ldap/tests/ldap_next_reference_basic.phpt @@ -10,19 +10,19 @@ Patrick Allaert <patrickallaert@php.net> <?php require "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -insert_dummy_data($link); -ldap_add($link, "cn=userref,dc=my-domain,dc=com", array( +insert_dummy_data($link, $base); +ldap_add($link, "cn=userref,$base", array( "objectClass" => array("extensibleObject", "referral"), "cn" => "userref", - "ref" => "cn=userA,dc=my-domain,dc=com", + "ref" => "cn=userA,$base", )); -ldap_add($link, "cn=userref2,dc=my-domain,dc=com", array( +ldap_add($link, "cn=userref2,$base", array( "objectClass" => array("extensibleObject", "referral"), "cn" => "userref2", - "ref" => "cn=userB,dc=my-domain,dc=com", + "ref" => "cn=userB,$base", )); ldap_set_option($link, LDAP_OPT_DEREF, LDAP_DEREF_NEVER); -$result = ldap_search($link, "dc=my-domain,dc=com", "(cn=*)"); +$result = ldap_search($link, "$base", "(cn=*)"); $ref = ldap_first_reference($link, $result); var_dump($ref2 = ldap_next_reference($link, $ref)); ldap_parse_reference($link, $ref2, $refs); @@ -36,14 +36,14 @@ include "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); // Referral can only be removed with Manage DSA IT Control ldap_set_option($link, LDAP_OPT_SERVER_CONTROLS, array(array("oid" => "2.16.840.1.113730.3.4.2"))); -ldap_delete($link, "cn=userref,dc=my-domain,dc=com"); -ldap_delete($link, "cn=userref2,dc=my-domain,dc=com"); -remove_dummy_data($link); +ldap_delete($link, "cn=userref,$base"); +ldap_delete($link, "cn=userref2,$base"); +remove_dummy_data($link, $base); ?> --EXPECTF-- resource(%d) of type (ldap result entry) array(1) { [0]=> - string(28) "cn=userB,dc=my-domain,dc=com" + string(%d) "cn=userB,%s" } ===DONE=== diff --git a/ext/ldap/tests/ldap_parse_reference_basic.phpt b/ext/ldap/tests/ldap_parse_reference_basic.phpt index 2bacd428a2..249f2959f3 100644 --- a/ext/ldap/tests/ldap_parse_reference_basic.phpt +++ b/ext/ldap/tests/ldap_parse_reference_basic.phpt @@ -10,14 +10,14 @@ Patrick Allaert <patrickallaert@php.net> <?php require "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -insert_dummy_data($link); -ldap_add($link, "cn=userref,dc=my-domain,dc=com", array( +insert_dummy_data($link, $base); +ldap_add($link, "cn=userref,$base", array( "objectClass" => array("extensibleObject", "referral"), "cn" => "userref", - "ref" => "cn=userA,dc=my-domain,dc=com", + "ref" => "cn=userA,$base", )); ldap_set_option($link, LDAP_OPT_DEREF, LDAP_DEREF_NEVER); -$result = ldap_search($link, "dc=my-domain,dc=com", "(cn=*)"); +$result = ldap_search($link, "$base", "(cn=*)"); $ref = ldap_first_reference($link, $result); $refs = null; var_dump( @@ -33,13 +33,13 @@ include "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); // Referral can only be removed with Manage DSA IT Control ldap_set_option($link, LDAP_OPT_SERVER_CONTROLS, array(array("oid" => "2.16.840.1.113730.3.4.2"))); -ldap_delete($link, "cn=userref,dc=my-domain,dc=com"); -remove_dummy_data($link); +ldap_delete($link, "cn=userref,$base"); +remove_dummy_data($link, $base); ?> --EXPECTF-- bool(true) array(1) { [0]=> - string(28) "cn=userA,dc=my-domain,dc=com" + string(%d) "cn=userA,%s" } ===DONE=== diff --git a/ext/ldap/tests/ldap_parse_result_basic.phpt b/ext/ldap/tests/ldap_parse_result_basic.phpt index 1646d59c91..ec88dff377 100644 --- a/ext/ldap/tests/ldap_parse_result_basic.phpt +++ b/ext/ldap/tests/ldap_parse_result_basic.phpt @@ -11,13 +11,13 @@ Patrick Allaert <patrickallaert@php.net> require "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -insert_dummy_data($link); -ldap_add($link, "cn=userref,dc=my-domain,dc=com", array( +insert_dummy_data($link, $base); +ldap_add($link, "cn=userref,$base", array( "objectClass" => array("extensibleObject", "referral"), "cn" => "userref", - "ref" => "cn=userA,dc=my-domain,dc=com", + "ref" => "cn=userA,$base", )); -$result = ldap_search($link, "cn=userref,dc=my-domain,dc=com", "(cn=user*)"); +$result = ldap_search($link, "cn=userref,$base", "(cn=user*)"); $errcode = $dn = $errmsg = $refs = null; var_dump( ldap_parse_result($link, $result, $errcode, $dn, $errmsg, $refs), @@ -32,16 +32,16 @@ include "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); // Referral can only be removed with Manage DSA IT Control ldap_set_option($link, LDAP_OPT_SERVER_CONTROLS, array(array("oid" => "2.16.840.1.113730.3.4.2"))); -ldap_delete($link, "cn=userref,dc=my-domain,dc=com"); -remove_dummy_data($link); +ldap_delete($link, "cn=userref,$base"); +remove_dummy_data($link, $base); ?> ---EXPECT-- +--EXPECTF-- bool(true) int(10) -string(30) "cn=userref,dc=my-domain,dc=com" +string(%d) "cn=userref,%s" string(0) "" array(1) { [0]=> - string(28) "cn=userA,dc=my-domain,dc=com" + string(%d) "cn=userA,%s" } ===DONE=== diff --git a/ext/ldap/tests/ldap_read_basic.phpt b/ext/ldap/tests/ldap_read_basic.phpt index 04d03d9860..5a6e7ed057 100644 --- a/ext/ldap/tests/ldap_read_basic.phpt +++ b/ext/ldap/tests/ldap_read_basic.phpt @@ -5,8 +5,8 @@ Davide Mendolia <idaf1er@gmail.com> Patrick Allaert <patrickallaert@php.net> Belgian PHP Testfest 2009 --SKIPIF-- -<?php -require_once('skipif.inc'); +<?php +require_once('skipif.inc'); require_once('skipifbindfailure.inc'); ?> --FILE-- @@ -14,9 +14,9 @@ require_once('skipifbindfailure.inc'); include "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -insert_dummy_data($link); +insert_dummy_data($link, $base); var_dump( - $result = ldap_read($link, "dc=my-domain,dc=com", "(dc=*)"), + $result = ldap_read($link, "o=test,$base", "(o=*)"), ldap_get_entries($link, $result) ); ?> @@ -26,7 +26,7 @@ var_dump( include "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -remove_dummy_data($link); +remove_dummy_data($link, $base); ?> --EXPECTF-- resource(%d) of type (ldap result) @@ -34,42 +34,31 @@ array(2) { ["count"]=> int(1) [0]=> - array(8) { + array(6) { ["objectclass"]=> - array(4) { + array(3) { ["count"]=> - int(3) + int(2) [0]=> string(3) "top" [1]=> - string(8) "dcObject" - [2]=> string(12) "organization" } [0]=> string(11) "objectclass" - ["dc"]=> - array(2) { - ["count"]=> - int(1) - [0]=> - string(9) "my-domain" - } - [1]=> - string(2) "dc" ["o"]=> array(2) { ["count"]=> int(1) [0]=> - string(9) "my-domain" + string(4) "test" } - [2]=> + [1]=> string(1) "o" ["count"]=> - int(3) + int(2) ["dn"]=> - string(19) "dc=my-domain,dc=com" + string(%d) "o=test,%s" } } ===DONE=== diff --git a/ext/ldap/tests/ldap_read_error.phpt b/ext/ldap/tests/ldap_read_error.phpt index 649658aa71..7d57172e0d 100644 --- a/ext/ldap/tests/ldap_read_error.phpt +++ b/ext/ldap/tests/ldap_read_error.phpt @@ -17,7 +17,7 @@ var_dump(ldap_read($link)); var_dump(ldap_read($link, $link)); // Too many parameters -var_dump(ldap_read($link, "dc=my-domain,dc=com", "(objectClass=*)", array(), 0, 0, 0, 0 , "Additional data")); +var_dump(ldap_read($link, "$base", "(objectClass=*)", array(), 0, 0, 0, 0 , "Additional data")); ?> ===DONE=== --EXPECTF-- diff --git a/ext/ldap/tests/ldap_rename_basic.phpt b/ext/ldap/tests/ldap_rename_basic.phpt index 135769d1d4..c01c4318a6 100644 --- a/ext/ldap/tests/ldap_rename_basic.phpt +++ b/ext/ldap/tests/ldap_rename_basic.phpt @@ -11,12 +11,12 @@ Patrick Allaert <patrickallaert@php.net> require "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -insert_dummy_data($link); +insert_dummy_data($link, $base); var_dump( - ldap_rename($link, "cn=userA,dc=my-domain,dc=com", "cn=userZ", "dc=my-domain,dc=com", true) + ldap_rename($link, "cn=userA,$base", "cn=userZ", "$base", true) ); -$result = ldap_search($link, "dc=my-domain,dc=com", "(cn=userA)", array("cn", "sn")); -$result = ldap_search($link, "dc=my-domain,dc=com", "(cn=userZ)", array("cn", "sn")); +$result = ldap_search($link, "$base", "(cn=userA)", array("cn", "sn")); +$result = ldap_search($link, "$base", "(cn=userZ)", array("cn", "sn")); var_dump(ldap_get_entries($link, $result)); ?> ===DONE=== @@ -25,10 +25,10 @@ var_dump(ldap_get_entries($link, $result)); include "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -ldap_rename($link, "cn=userZ,dc=my-domain,dc=com", "cn=userA", "dc=my-domain,dc=com", true); -remove_dummy_data($link); +ldap_rename($link, "cn=userZ,$base", "cn=userA", "$base", true); +remove_dummy_data($link, $base); ?> ---EXPECT-- +--EXPECTF-- bool(true) array(2) { ["count"]=> @@ -56,7 +56,7 @@ array(2) { ["count"]=> int(2) ["dn"]=> - string(28) "cn=userZ,dc=my-domain,dc=com" + string(%d) "cn=userZ,%s" } } ===DONE=== diff --git a/ext/ldap/tests/ldap_rename_error.phpt b/ext/ldap/tests/ldap_rename_error.phpt index 57ca3571b7..111717f0b0 100644 --- a/ext/ldap/tests/ldap_rename_error.phpt +++ b/ext/ldap/tests/ldap_rename_error.phpt @@ -11,7 +11,7 @@ require "connect.inc"; $link = ldap_connect($host, $port); var_dump(ldap_rename($link)); -var_dump(ldap_rename($link, "cn=userNotFound,dc=my-domain,dc=com", "cn=userZ", "dc=my-domain,dc=com", true)); +var_dump(ldap_rename($link, "cn=userNotFound,$base", "cn=userZ", "$base", true)); ?> ===DONE=== --EXPECTF-- diff --git a/ext/ldap/tests/ldap_search_basic.phpt b/ext/ldap/tests/ldap_search_basic.phpt index e6cebf2c57..54523de38a 100644 --- a/ext/ldap/tests/ldap_search_basic.phpt +++ b/ext/ldap/tests/ldap_search_basic.phpt @@ -15,9 +15,9 @@ include "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -insert_dummy_data($link); +insert_dummy_data($link, $base); var_dump( - $result = ldap_search($link, "dc=my-domain,dc=com", "(objectClass=person)"), + $result = ldap_search($link, "$base", "(objectClass=person)"), ldap_get_entries($link, $result) ); ?> @@ -27,7 +27,7 @@ var_dump( include "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -remove_dummy_data($link); +remove_dummy_data($link, $base); ?> --EXPECTF-- resource(%d) of type (ldap result) @@ -93,7 +93,7 @@ array(4) { ["count"]=> int(6) ["dn"]=> - string(28) "cn=userA,dc=my-domain,dc=com" + string(%d) "cn=userA,%s" } [1]=> array(12) { @@ -145,7 +145,7 @@ array(4) { ["count"]=> int(5) ["dn"]=> - string(28) "cn=userB,dc=my-domain,dc=com" + string(%d) "cn=userB,%s" } [2]=> array(10) { @@ -188,7 +188,7 @@ array(4) { ["count"]=> int(4) ["dn"]=> - string(37) "cn=userC,cn=userB,dc=my-domain,dc=com" + string(%d) "cn=userC,cn=userB,%s" } } ===DONE=== diff --git a/ext/ldap/tests/ldap_search_error.phpt b/ext/ldap/tests/ldap_search_error.phpt index 7e94613439..c5239e1ab1 100644 --- a/ext/ldap/tests/ldap_search_error.phpt +++ b/ext/ldap/tests/ldap_search_error.phpt @@ -12,7 +12,7 @@ include "connect.inc"; $link = ldap_connect($host, $port); -$dn = "dc=my-domain,dc=com"; +$dn = "dc=not-found,$base"; $filter = "(dc=*)"; $result = ldap_search(); diff --git a/ext/ldap/tests/ldap_search_variation1.phpt b/ext/ldap/tests/ldap_search_variation1.phpt index d56f5bdc93..766efa7598 100644 --- a/ext/ldap/tests/ldap_search_variation1.phpt +++ b/ext/ldap/tests/ldap_search_variation1.phpt @@ -14,12 +14,12 @@ require_once('skipifbindfailure.inc'); include "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -insert_dummy_data($link); +insert_dummy_data($link, $base); -$dn = "dc=my-domain,dc=com"; +$dn = "$base"; $filter = "(dc=*)"; var_dump( - $result = ldap_search($link, "dc=my-domain,dc=com", "(dc=*)", array('dc')), + $result = ldap_search($link, "o=test,$base", "(o=*)", array('o')), ldap_get_entries($link, $result) ); ?> @@ -29,7 +29,7 @@ var_dump( include "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -remove_dummy_data($link); +remove_dummy_data($link, $base); ?> --EXPECTF-- resource(%d) of type (ldap result) @@ -38,19 +38,19 @@ array(2) { int(1) [0]=> array(4) { - ["dc"]=> + ["o"]=> array(2) { ["count"]=> int(1) [0]=> - string(9) "my-domain" + string(4) "test" } [0]=> - string(2) "dc" + string(1) "o" ["count"]=> int(1) ["dn"]=> - string(19) "dc=my-domain,dc=com" + string(%d) "o=test,%s" } } ===DONE=== diff --git a/ext/ldap/tests/ldap_search_variation2.phpt b/ext/ldap/tests/ldap_search_variation2.phpt index 791c5e9bcf..f2ad3a6929 100644 --- a/ext/ldap/tests/ldap_search_variation2.phpt +++ b/ext/ldap/tests/ldap_search_variation2.phpt @@ -14,10 +14,10 @@ require_once('skipifbindfailure.inc'); include "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -insert_dummy_data($link); +insert_dummy_data($link, $base); var_dump( - $result = ldap_search($link, "dc=my-domain,dc=com", "(objectclass=person)", array('sn'), 1), + $result = ldap_search($link, "$base", "(objectclass=person)", array('sn'), 1), ldap_get_entries($link, $result) ); ?> @@ -27,7 +27,7 @@ var_dump( include "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -remove_dummy_data($link); +remove_dummy_data($link, $base); ?> --EXPECTF-- resource(%d) of type (ldap result) @@ -46,7 +46,7 @@ array(4) { ["count"]=> int(1) ["dn"]=> - string(28) "cn=userA,dc=my-domain,dc=com" + string(%d) "cn=userA,%s" } [1]=> array(4) { @@ -60,7 +60,7 @@ array(4) { ["count"]=> int(1) ["dn"]=> - string(28) "cn=userB,dc=my-domain,dc=com" + string(%d) "cn=userB,%s" } [2]=> array(4) { @@ -74,7 +74,7 @@ array(4) { ["count"]=> int(1) ["dn"]=> - string(37) "cn=userC,cn=userB,dc=my-domain,dc=com" + string(%d) "cn=userC,cn=userB,%s" } } ===DONE=== diff --git a/ext/ldap/tests/ldap_search_variation3.phpt b/ext/ldap/tests/ldap_search_variation3.phpt index ab7b222825..12224de24d 100644 --- a/ext/ldap/tests/ldap_search_variation3.phpt +++ b/ext/ldap/tests/ldap_search_variation3.phpt @@ -14,9 +14,9 @@ require_once('skipifbindfailure.inc'); include "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -insert_dummy_data($link); +insert_dummy_data($link, $base); -$dn = "dc=my-domain,dc=com"; +$dn = "$base"; $filter = "(objectclass=person)"; var_dump( $result = ldap_search($link, $dn, $filter, array('sn'), 1, 3), @@ -34,7 +34,7 @@ var_dump( include "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -remove_dummy_data($link); +remove_dummy_data($link, $base); ?> --EXPECTF-- resource(%d) of type (ldap result) @@ -53,7 +53,7 @@ array(4) { ["count"]=> int(1) ["dn"]=> - string(28) "cn=userA,dc=my-domain,dc=com" + string(%d) "cn=userA,%s" } [1]=> array(4) { @@ -67,7 +67,7 @@ array(4) { ["count"]=> int(1) ["dn"]=> - string(28) "cn=userB,dc=my-domain,dc=com" + string(%d) "cn=userB,%s" } [2]=> array(4) { @@ -81,7 +81,7 @@ array(4) { ["count"]=> int(1) ["dn"]=> - string(37) "cn=userC,cn=userB,dc=my-domain,dc=com" + string(%d) "cn=userC,cn=userB,%s" } } @@ -102,7 +102,7 @@ array(2) { ["count"]=> int(1) ["dn"]=> - string(28) "cn=userA,dc=my-domain,dc=com" + string(%d) "cn=userA,%s" } } ===DONE=== diff --git a/ext/ldap/tests/ldap_search_variation4.phpt b/ext/ldap/tests/ldap_search_variation4.phpt index 787468e0f5..ce164763b9 100644 --- a/ext/ldap/tests/ldap_search_variation4.phpt +++ b/ext/ldap/tests/ldap_search_variation4.phpt @@ -14,9 +14,9 @@ require_once('skipifbindfailure.inc'); include "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -insert_dummy_data($link); +insert_dummy_data($link, $base); -$dn = "dc=my-domain,dc=com"; +$dn = "$base"; $filter = "(objectclass=person)"; var_dump( $result = ldap_search($link, $dn, $filter, array('sn'), 1, 1, 3), @@ -29,7 +29,7 @@ var_dump( include "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -remove_dummy_data($link); +remove_dummy_data($link, $base); ?> --EXPECTF-- Warning: ldap_search(): Partial search results returned: Sizelimit exceeded in %s on line %d @@ -49,7 +49,7 @@ array(2) { ["count"]=> int(1) ["dn"]=> - string(28) "cn=userA,dc=my-domain,dc=com" + string(%d) "cn=userA,%s" } } ===DONE=== diff --git a/ext/ldap/tests/ldap_search_variation5.phpt b/ext/ldap/tests/ldap_search_variation5.phpt index d50854c658..de4d405090 100644 --- a/ext/ldap/tests/ldap_search_variation5.phpt +++ b/ext/ldap/tests/ldap_search_variation5.phpt @@ -14,9 +14,9 @@ require_once('skipifbindfailure.inc'); include "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -insert_dummy_data($link); +insert_dummy_data($link, $base); -$dn = "dc=my-domain,dc=com"; +$dn = "$base"; $filter = "(objectclass=person)"; var_dump( $result = ldap_search($link, $dn, $filter, array('sn'), 1, 1, 3, LDAP_DEREF_SEARCHING), @@ -37,7 +37,7 @@ var_dump( include "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -remove_dummy_data($link); +remove_dummy_data($link, $base); ?> --EXPECTF-- Warning: ldap_search(): Partial search results returned: Sizelimit exceeded in %s on line %d @@ -57,7 +57,7 @@ array(2) { ["count"]=> int(1) ["dn"]=> - string(28) "cn=userA,dc=my-domain,dc=com" + string(%d) "cn=userA,%s" } } @@ -78,7 +78,7 @@ array(2) { ["count"]=> int(1) ["dn"]=> - string(28) "cn=userA,dc=my-domain,dc=com" + string(%d) "cn=userA,%s" } } @@ -99,7 +99,7 @@ array(2) { ["count"]=> int(1) ["dn"]=> - string(28) "cn=userA,dc=my-domain,dc=com" + string(%d) "cn=userA,%s" } } ===DONE=== diff --git a/ext/ldap/tests/ldap_search_variation6.phpt b/ext/ldap/tests/ldap_search_variation6.phpt index 5139ebb77d..f4f98db873 100644 --- a/ext/ldap/tests/ldap_search_variation6.phpt +++ b/ext/ldap/tests/ldap_search_variation6.phpt @@ -14,9 +14,9 @@ require_once('skipifbindfailure.inc'); include "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -insert_dummy_data($link); +insert_dummy_data($link, $base); -$dn = "dc=my-domain,dc=com"; +$dn = "$base"; $filter = "(objectclass=person)"; var_dump( @@ -41,7 +41,7 @@ var_dump( include "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -remove_dummy_data($link); +remove_dummy_data($link, $base); ?> --EXPECTF-- array(2) { @@ -112,7 +112,7 @@ array(4) { ["count"]=> int(6) ["dn"]=> - string(28) "cn=userA,dc=my-domain,dc=com" + string(%d) "cn=userA,%s" } [1]=> array(12) { @@ -164,7 +164,7 @@ array(4) { ["count"]=> int(5) ["dn"]=> - string(28) "cn=userB,dc=my-domain,dc=com" + string(%d) "cn=userB,%s" } [2]=> array(10) { @@ -207,7 +207,7 @@ array(4) { ["count"]=> int(4) ["dn"]=> - string(37) "cn=userC,cn=userB,dc=my-domain,dc=com" + string(%d) "cn=userC,cn=userB,%s" } } bool(true) diff --git a/ext/ldap/tests/ldap_sort_basic.phpt b/ext/ldap/tests/ldap_sort_basic.phpt index f6ee5d198f..9744468438 100644 --- a/ext/ldap/tests/ldap_sort_basic.phpt +++ b/ext/ldap/tests/ldap_sort_basic.phpt @@ -11,29 +11,29 @@ Patrick Allaert <patrickallaert@php.net> require "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -insert_dummy_data($link); -ldap_add($link, "cn=userC,dc=my-domain,dc=com", array( +insert_dummy_data($link, $base); +ldap_add($link, "cn=userC,$base", array( "objectclass" => "person", "cn" => "userC", "sn" => "zzz", "userPassword" => "oops", "description" => "a user", )); -ldap_add($link, "cn=userD,dc=my-domain,dc=com", array( +ldap_add($link, "cn=userD,$base", array( "objectclass" => "person", "cn" => "userD", "sn" => "aaa", "userPassword" => "oops", "description" => "another user", )); -ldap_add($link, "cn=userE,dc=my-domain,dc=com", array( +ldap_add($link, "cn=userE,$base", array( "objectclass" => "person", "cn" => "userE", "sn" => "a", "userPassword" => "oops", "description" => "yet another user", )); -$result = ldap_search($link, "dc=my-domain,dc=com", "(objectclass=person)", array("sn", "description")); +$result = ldap_search($link, "$base", "(objectclass=person)", array("sn", "description")); var_dump( ldap_sort($link, $result, "sn"), ldap_get_entries($link, $result) @@ -45,12 +45,12 @@ var_dump( include "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -ldap_delete($link, "cn=userC,dc=my-domain,dc=com"); -ldap_delete($link, "cn=userD,dc=my-domain,dc=com"); -ldap_delete($link, "cn=userE,dc=my-domain,dc=com"); -remove_dummy_data($link); +ldap_delete($link, "cn=userC,$base"); +ldap_delete($link, "cn=userD,$base"); +ldap_delete($link, "cn=userE,$base"); +remove_dummy_data($link, $base); ?> ---EXPECT-- +--EXPECTF-- bool(true) array(7) { ["count"]=> @@ -78,7 +78,7 @@ array(7) { ["count"]=> int(2) ["dn"]=> - string(28) "cn=userE,dc=my-domain,dc=com" + string(%d) "cn=userE,%s" } [1]=> array(6) { @@ -103,7 +103,7 @@ array(7) { ["count"]=> int(2) ["dn"]=> - string(28) "cn=userD,dc=my-domain,dc=com" + string(%d) "cn=userD,%s" } [2]=> array(6) { @@ -128,7 +128,7 @@ array(7) { ["count"]=> int(2) ["dn"]=> - string(28) "cn=userA,dc=my-domain,dc=com" + string(%d) "cn=userA,%s" } [3]=> array(6) { @@ -153,7 +153,7 @@ array(7) { ["count"]=> int(2) ["dn"]=> - string(28) "cn=userB,dc=my-domain,dc=com" + string(%d) "cn=userB,%s" } [4]=> array(4) { @@ -169,7 +169,7 @@ array(7) { ["count"]=> int(1) ["dn"]=> - string(37) "cn=userC,cn=userB,dc=my-domain,dc=com" + string(%d) "cn=userC,cn=userB,%s" } [5]=> array(6) { @@ -194,7 +194,7 @@ array(7) { ["count"]=> int(2) ["dn"]=> - string(28) "cn=userC,dc=my-domain,dc=com" + string(%d) "cn=userC,%s" } } ===DONE=== diff --git a/ext/ldap/tests/ldap_sort_variation.phpt b/ext/ldap/tests/ldap_sort_variation.phpt index e1affe82fe..e8f00341c3 100644 --- a/ext/ldap/tests/ldap_sort_variation.phpt +++ b/ext/ldap/tests/ldap_sort_variation.phpt @@ -11,29 +11,29 @@ Patrick Allaert <patrickallaert@php.net> require "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -insert_dummy_data($link); -ldap_add($link, "cn=userC,dc=my-domain,dc=com", array( +insert_dummy_data($link, $base); +ldap_add($link, "cn=userC,$base", array( "objectclass" => "person", "cn" => "userC", "sn" => "zzz", "userPassword" => "oops", "description" => "a user", )); -ldap_add($link, "cn=userD,dc=my-domain,dc=com", array( +ldap_add($link, "cn=userD,$base", array( "objectclass" => "person", "cn" => "userD", "sn" => "aaa", "userPassword" => "oops", "description" => "another user", )); -ldap_add($link, "cn=userE,dc=my-domain,dc=com", array( +ldap_add($link, "cn=userE,$base", array( "objectclass" => "person", "cn" => "userE", "sn" => "a", "userPassword" => "oops", "description" => "yet another user", )); -$result = ldap_search($link, "dc=my-domain,dc=com", "(objectclass=person)", array("sn", "description")); +$result = ldap_search($link, "$base", "(objectclass=person)", array("sn", "description")); var_dump( ldap_sort($link, $result, "description"), ldap_get_entries($link, $result) @@ -45,12 +45,12 @@ var_dump( include "connect.inc"; $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); -ldap_delete($link, "cn=userC,dc=my-domain,dc=com"); -ldap_delete($link, "cn=userD,dc=my-domain,dc=com"); -ldap_delete($link, "cn=userE,dc=my-domain,dc=com"); -remove_dummy_data($link); +ldap_delete($link, "cn=userC,$base"); +ldap_delete($link, "cn=userD,$base"); +ldap_delete($link, "cn=userE,$base"); +remove_dummy_data($link, $base); ?> ---EXPECT-- +--EXPECTF-- bool(true) array(7) { ["count"]=> @@ -69,7 +69,7 @@ array(7) { ["count"]=> int(1) ["dn"]=> - string(37) "cn=userC,cn=userB,dc=my-domain,dc=com" + string(%d) "cn=userC,cn=userB,%s" } [1]=> array(6) { @@ -94,7 +94,7 @@ array(7) { ["count"]=> int(2) ["dn"]=> - string(28) "cn=userC,dc=my-domain,dc=com" + string(%d) "cn=userC,%s" } [2]=> array(6) { @@ -119,7 +119,7 @@ array(7) { ["count"]=> int(2) ["dn"]=> - string(28) "cn=userD,dc=my-domain,dc=com" + string(%d) "cn=userD,%s" } [3]=> array(6) { @@ -144,7 +144,7 @@ array(7) { ["count"]=> int(2) ["dn"]=> - string(28) "cn=userA,dc=my-domain,dc=com" + string(%d) "cn=userA,%s" } [4]=> array(6) { @@ -169,7 +169,7 @@ array(7) { ["count"]=> int(2) ["dn"]=> - string(28) "cn=userB,dc=my-domain,dc=com" + string(%d) "cn=userB,%s" } [5]=> array(6) { @@ -194,7 +194,7 @@ array(7) { ["count"]=> int(2) ["dn"]=> - string(28) "cn=userE,dc=my-domain,dc=com" + string(%d) "cn=userE,%s" } } ===DONE=== diff --git a/ext/pcre/pcrelib/pcre.h b/ext/pcre/pcrelib/pcre.h index 9216d55b0a..58ed46a2a3 100644 --- a/ext/pcre/pcrelib/pcre.h +++ b/ext/pcre/pcrelib/pcre.h @@ -42,9 +42,9 @@ POSSIBILITY OF SUCH DAMAGE. /* The current PCRE version information. */ #define PCRE_MAJOR 8 -#define PCRE_MINOR 36 +#define PCRE_MINOR 37 #define PCRE_PRERELEASE -#define PCRE_DATE 2014-09-26 +#define PCRE_DATE 2015-04-28 /* When an application links to a PCRE DLL in Windows, the symbols that are imported have to be identified as such. When building PCRE, the appropriate diff --git a/ext/pdo_pgsql/pgsql_driver.c b/ext/pdo_pgsql/pgsql_driver.c index 5237bb3e0a..2b05043253 100644 --- a/ext/pdo_pgsql/pgsql_driver.c +++ b/ext/pdo_pgsql/pgsql_driver.c @@ -27,6 +27,7 @@ #include "php.h" #include "php_ini.h" #include "ext/standard/info.h" +#include "ext/standard/php_string.h" #include "main/php_network.h" #include "pdo/php_pdo.h" #include "pdo/php_pdo_driver.h" @@ -62,6 +63,17 @@ static char * _pdo_pgsql_trim_message(const char *message, int persistent) return tmp; } +static char * _pdo_pgsql_escape_credentials(char *str TSRMLS_DC) +{ + int len; + + if (str) { + return php_addcslashes(str, strlen(str), &len, 0, "\\'", sizeof("\\'") TSRMLS_CC); + } + + return NULL; +} + int _pdo_pgsql_error(pdo_dbh_t *dbh, pdo_stmt_t *stmt, int errcode, const char *sqlstate, const char *msg, const char *file, int line TSRMLS_DC) /* {{{ */ { pdo_pgsql_db_handle *H = (pdo_pgsql_db_handle *)dbh->driver_data; @@ -1178,7 +1190,7 @@ static int pdo_pgsql_handle_factory(pdo_dbh_t *dbh, zval *driver_options TSRMLS_ pdo_pgsql_db_handle *H; int ret = 0; char *conn_str, *p, *e; - char *tmp_pass; + char *tmp_user, *tmp_pass; long connect_timeout = 30; H = pecalloc(1, sizeof(pdo_pgsql_db_handle), dbh->is_persistent); @@ -1200,42 +1212,27 @@ static int pdo_pgsql_handle_factory(pdo_dbh_t *dbh, zval *driver_options TSRMLS_ connect_timeout = pdo_attr_lval(driver_options, PDO_ATTR_TIMEOUT, 30 TSRMLS_CC); } - if (dbh->password) { - if (dbh->password[0] != '\'' && dbh->password[strlen(dbh->password) - 1] != '\'') { - char *pwd = dbh->password; - int pos = 1; - - tmp_pass = safe_emalloc(2, strlen(dbh->password), 3); - tmp_pass[0] = '\''; - - while (*pwd != '\0') { - if (*pwd == '\\' || *pwd == '\'') { - tmp_pass[pos++] = '\\'; - } - - tmp_pass[pos++] = *pwd++; - } - - tmp_pass[pos++] = '\''; - tmp_pass[pos] = '\0'; - } else { - tmp_pass = dbh->password; - } - } + /* escape username and password, if provided */ + tmp_user = _pdo_pgsql_escape_credentials(dbh->username TSRMLS_CC); + tmp_pass = _pdo_pgsql_escape_credentials(dbh->password TSRMLS_CC); /* support both full connection string & connection string + login and/or password */ - if (dbh->username && dbh->password) { - spprintf(&conn_str, 0, "%s user=%s password=%s connect_timeout=%ld", dbh->data_source, dbh->username, tmp_pass, connect_timeout); - } else if (dbh->username) { - spprintf(&conn_str, 0, "%s user=%s connect_timeout=%ld", dbh->data_source, dbh->username, connect_timeout); - } else if (dbh->password) { - spprintf(&conn_str, 0, "%s password=%s connect_timeout=%ld", dbh->data_source, tmp_pass, connect_timeout); + if (tmp_user && tmp_pass) { + spprintf(&conn_str, 0, "%s user='%s' password='%s' connect_timeout=%ld", dbh->data_source, tmp_user, tmp_pass, connect_timeout); + } else if (tmp_user) { + spprintf(&conn_str, 0, "%s user='%s' connect_timeout=%ld", dbh->data_source, tmp_user, connect_timeout); + } else if (tmp_pass) { + spprintf(&conn_str, 0, "%s password='%s' connect_timeout=%ld", dbh->data_source, tmp_pass, connect_timeout); } else { spprintf(&conn_str, 0, "%s connect_timeout=%ld", (char *) dbh->data_source, connect_timeout); } H->server = PQconnectdb(conn_str); - if (dbh->password && tmp_pass != dbh->password) { + + if (tmp_user) { + efree(tmp_user); + } + if (tmp_pass) { efree(tmp_pass); } diff --git a/ext/pdo_pgsql/pgsql_statement.c b/ext/pdo_pgsql/pgsql_statement.c index d9b1790b89..708977c55e 100644 --- a/ext/pdo_pgsql/pgsql_statement.c +++ b/ext/pdo_pgsql/pgsql_statement.c @@ -224,7 +224,7 @@ stmt_retry: return 0; } - if (!stmt->executed && !stmt->column_count) { + if (!stmt->executed && (!stmt->column_count || S->cols == NULL)) { stmt->column_count = (int) PQnfields(S->result); S->cols = ecalloc(stmt->column_count, sizeof(pdo_pgsql_column)); } @@ -297,8 +297,8 @@ static int pgsql_stmt_param_hook(pdo_stmt_t *stmt, struct pdo_bound_param_data * sizeof(Oid)); } if (param->paramno >= 0) { - if (param->paramno >= zend_hash_num_elements(stmt->bound_param_map)) { - pdo_pgsql_error_stmt(stmt, PGRES_FATAL_ERROR, "HY105"); + if (param->paramno >= zend_hash_num_elements(stmt->bound_params)) { + pdo_raise_impl_error(stmt->dbh, stmt, "HY093", "parameter was not defined" TSRMLS_CC); return 0; } @@ -612,6 +612,12 @@ done: static int pdo_pgsql_stmt_cursor_closer(pdo_stmt_t *stmt TSRMLS_DC) { + pdo_pgsql_stmt *S = (pdo_pgsql_stmt*)stmt->driver_data; + + if (S->cols != NULL){ + efree(S->cols); + S->cols = NULL; + } return 1; } diff --git a/ext/pdo_pgsql/tests/bug69344.phpt b/ext/pdo_pgsql/tests/bug69344.phpt new file mode 100644 index 0000000000..d274e0608c --- /dev/null +++ b/ext/pdo_pgsql/tests/bug69344.phpt @@ -0,0 +1,44 @@ +--TEST-- +PDO PgSQL Bug #69344 (PDO PgSQL Incorrect binding numeric array with gaps) +--SKIPIF-- +<?php +if (!extension_loaded('pdo') || !extension_loaded('pdo_pgsql')) die('skip not loaded'); +require dirname(__FILE__) . '/config.inc'; +require dirname(__FILE__) . '/../../../ext/pdo/tests/pdo_test.inc'; +PDOTest::skip(); +?> +--FILE-- +<?php + +require dirname(__FILE__) . '/../../../ext/pdo/tests/pdo_test.inc'; +$pdo = PDOTest::test_factory(dirname(__FILE__) . '/common.phpt'); +$pdo->setAttribute (\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); +$pdo->setAttribute (\PDO::ATTR_DEFAULT_FETCH_MODE, \PDO::FETCH_ASSOC); + +$test = function () use ($pdo) { + $arr = [ + 0 => "a", + 2 => "b", + ]; + + $stmt = $pdo->prepare("SELECT (?)::text AS a, (?)::text AS b"); + + try { + $stmt->execute($arr); + var_dump($stmt->fetch()); + } catch (\Exception $e) { + echo $e->getMessage()."\n"; + } +}; + +$test(); + +$pdo->setAttribute(\PDO::ATTR_EMULATE_PREPARES, true); + +$test(); + +?> +--EXPECT-- +SQLSTATE[HY093]: Invalid parameter number: parameter was not defined +SQLSTATE[HY093]: Invalid parameter number: parameter was not defined + diff --git a/ext/pdo_pgsql/tests/bug69362.phpt b/ext/pdo_pgsql/tests/bug69362.phpt new file mode 100644 index 0000000000..33212a8863 --- /dev/null +++ b/ext/pdo_pgsql/tests/bug69362.phpt @@ -0,0 +1,63 @@ +--TEST-- +PDO PgSQL Bug #69362 (PDO-pgsql fails to connect if password contains a leading single quote) +--SKIPIF-- +<?php +if (!extension_loaded('pdo') || !extension_loaded('pdo_pgsql')) die('skip not loaded'); +require dirname(__FILE__) . '/config.inc'; +require dirname(__FILE__) . '/../../../ext/pdo/tests/pdo_test.inc'; +PDOTest::skip(); + +$dsn = getenv('PDOTEST_DSN'); +if (empty($dsn)) die('skip no dsn found in env'); + +$db = PDOTest::test_factory(dirname(__FILE__) . '/common.phpt'); +$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); + + +$user = 'pdo_test_'.rand(5, 400); +$pass = 'testpass'; + +// Assume that if we can't create or drop a user, this test needs to be skipped +try { + $db->exec("DROP USER IF EXISTS $user"); + $db->exec("CREATE USER $user WITH PASSWORD '$pass'"); +} catch (PDOException $e) { + die("skip You need CREATEUSER permissions to run the test"); +} + +// Peer authentication might prevent the test from properly running +try { + $testConn = new PDO($dsn, $user, $pass); +} catch (PDOException $e) { + echo "skip ".$e->getMessage(); +} + +$db->exec("DROP USER $user"); + +?> +--FILE-- +<?php +require dirname(__FILE__) . '/../../../ext/pdo/tests/pdo_test.inc'; +$pdo = PDOTest::test_factory(dirname(__FILE__) . '/common.phpt'); +$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, true); +$rand = rand(5, 400); +$user = "pdo_test_$rand"; +$template = "CREATE USER $user WITH PASSWORD '%s'"; +$dropUser = "DROP USER $user"; +$testQuery = 'SELECT 1 as verification'; + +// Create temp user with leading single quote +$sql = sprintf($template, "''mypassword"); +$pdo->query($sql); +$testConn = new PDO($conf['ENV']['PDOTEST_DSN'], $user, "'mypassword"); +$result = $testConn->query($testQuery)->fetch(); +$check = $result[0]; +var_dump($check); + +// Remove the user +$pdo->query($dropUser); + +?> +--EXPECT-- +int(1) + diff --git a/ext/pdo_pgsql/tests/bug69752.phpt b/ext/pdo_pgsql/tests/bug69752.phpt new file mode 100644 index 0000000000..bb7e5e87e7 --- /dev/null +++ b/ext/pdo_pgsql/tests/bug69752.phpt @@ -0,0 +1,55 @@ +--TEST-- +PDO PgSQL Bug #69752 (memory leak with closeCursor) +--SKIPIF-- +<?php +if (!extension_loaded('pdo') || !extension_loaded('pdo_pgsql')) die('skip not loaded'); +require dirname(__FILE__) . '/config.inc'; +require dirname(__FILE__) . '/../../../ext/pdo/tests/pdo_test.inc'; +PDOTest::skip(); +?> +--FILE-- +<?php +require dirname(__FILE__) . '/../../../ext/pdo/tests/pdo_test.inc'; +$pdo = PDOTest::test_factory(dirname(__FILE__) . '/common.phpt'); + +$pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); + +$pdo->beginTransaction(); + +$pdo->exec(" + create table foo ( + id bigserial not null primary key, + field1 text not null, + field2 text not null, + field3 text not null, + field4 int4 not null + ) +"); +$stmt = $pdo->prepare("insert into foo (field1, field2, field3, field4) values (:field1, :field2, :field3, :field4)"); +$max = 1000; +$first_time_usage = null; + +for($i = 0; $i < $max; $i++) { + $data = array( + 'field1' => "field1: $i", + 'field2' => "field2: $i", + 'field3' => "field3: $i", + 'field4' => $i + ); + $stmt->execute($data); + $stmt->closeCursor(); + $usage = intval(floor(memory_get_usage() / 1024)); + + if ($first_time_usage === null) $first_time_usage = $usage; + + /* Use delta instead of direct comparison here */ + if (abs($first_time_usage - $usage) > 3){ + printf("Memory Leak Detected: %d != %d\n", $usage, $first_time_usage); + break; + } +} +$pdo->rollBack(); +echo "done\n" +?> +--EXPECTF-- +done diff --git a/ext/pgsql/tests/pg_insert_002.phpt b/ext/pgsql/tests/pg_insert_002.phpt index 87d87b8475..329f525b27 100644 --- a/ext/pgsql/tests/pg_insert_002.phpt +++ b/ext/pgsql/tests/pg_insert_002.phpt @@ -1,5 +1,5 @@ --TEST-- -PostgreSQL pg_select() - basic test using schema +PostgreSQL pg_insert() - test for CVE-2015-1532 --SKIPIF-- <?php include("skipif.inc"); ?> --FILE-- diff --git a/ext/sockets/conversions.c b/ext/sockets/conversions.c index d81484521d..30e895d97b 100644 --- a/ext/sockets/conversions.c +++ b/ext/sockets/conversions.c @@ -910,8 +910,8 @@ static void from_zval_write_control(const zval *arr, if (space_left < req_space) { *control_buf = safe_erealloc(*control_buf, 2, req_space, *control_len); *control_len += 2 * req_space; - memset(*control_buf, '\0', *control_len - *offset); - memcpy(&alloc->data, *control_buf, sizeof *control_buf); + memset(*control_buf + *offset, '\0', *control_len - *offset); + memcpy(&alloc->data, control_buf, sizeof *control_buf); } cmsghdr = (struct cmsghdr*)(((char*)*control_buf) + *offset); diff --git a/ext/standard/exec.c b/ext/standard/exec.c index 683878877b..06c068399d 100644 --- a/ext/standard/exec.c +++ b/ext/standard/exec.c @@ -380,6 +380,14 @@ PHPAPI char *php_escape_shell_arg(char *str) } } #ifdef PHP_WIN32 + if (y > 0 && '\\' == cmd[y - 1]) { + int k = 0, n = y - 1; + for (; n >= 0 && '\\' == cmd[n]; n--, k++); + if (k % 2) { + cmd[y++] = '\\'; + } + } + cmd[y++] = '"'; #else cmd[y++] = '\''; diff --git a/ext/standard/info.c b/ext/standard/info.c index 429c593c7d..f4c6c54276 100644 --- a/ext/standard/info.c +++ b/ext/standard/info.c @@ -394,53 +394,242 @@ char* php_get_windows_name() case PRODUCT_ULTIMATE: sub = "Ultimate Edition"; break; - case PRODUCT_HOME_PREMIUM: - sub = "Home Premium Edition"; - break; case PRODUCT_HOME_BASIC: sub = "Home Basic Edition"; break; + case PRODUCT_HOME_PREMIUM: + sub = "Home Premium Edition"; + break; case PRODUCT_ENTERPRISE: sub = "Enterprise Edition"; break; - case PRODUCT_BUSINESS: - sub = "Business Edition"; + case PRODUCT_HOME_BASIC_N: + sub = "Home Basic N Edition"; break; - case PRODUCT_STARTER: - sub = "Starter Edition"; + case PRODUCT_BUSINESS: + if ((osvi.dwMajorVersion > 6) || (osvi.dwMajorVersion == 6 && osvi.dwMinorVersion > 0)) { + sub = "Professional Edition"; + } else { + sub = "Business Edition"; + } break; - case PRODUCT_CLUSTER_SERVER: - sub = "Cluster Server Edition"; + case PRODUCT_STANDARD_SERVER: + sub = "Standard Edition"; break; case PRODUCT_DATACENTER_SERVER: sub = "Datacenter Edition"; break; - case PRODUCT_DATACENTER_SERVER_CORE: - sub = "Datacenter Edition (core installation)"; + case PRODUCT_SMALLBUSINESS_SERVER: + sub = "Small Business Server"; break; case PRODUCT_ENTERPRISE_SERVER: sub = "Enterprise Edition"; break; + case PRODUCT_STARTER: + if ((osvi.dwMajorVersion > 6) || (osvi.dwMajorVersion == 6 && osvi.dwMinorVersion > 0)) { + sub = "Starter N Edition"; + } else { + sub = "Starter Edition"; + } + break; + case PRODUCT_DATACENTER_SERVER_CORE: + sub = "Datacenter Edition (core installation)"; + break; + case PRODUCT_STANDARD_SERVER_CORE: + sub = "Standard Edition (core installation)"; + break; case PRODUCT_ENTERPRISE_SERVER_CORE: sub = "Enterprise Edition (core installation)"; break; case PRODUCT_ENTERPRISE_SERVER_IA64: sub = "Enterprise Edition for Itanium-based Systems"; break; - case PRODUCT_SMALLBUSINESS_SERVER: - sub = "Small Business Server"; + case PRODUCT_BUSINESS_N: + if ((osvi.dwMajorVersion > 6) || (osvi.dwMajorVersion == 6 && osvi.dwMinorVersion > 0)) { + sub = "Professional N Edition"; + } else { + sub = "Business N Edition"; + } + break; + case PRODUCT_WEB_SERVER: + sub = "Web Server Edition"; + break; + case PRODUCT_CLUSTER_SERVER: + sub = "HPC Edition"; + break; + case PRODUCT_HOME_SERVER: + sub = "Storage Server Essentials Edition"; + break; + case PRODUCT_STORAGE_EXPRESS_SERVER: + sub = "Storage Server Express Edition"; + break; + case PRODUCT_STORAGE_STANDARD_SERVER: + sub = "Storage Server Standard Edition"; + break; + case PRODUCT_STORAGE_WORKGROUP_SERVER: + sub = "Storage Server Workgroup Edition"; + break; + case PRODUCT_STORAGE_ENTERPRISE_SERVER: + sub = "Storage Server Enterprise Edition"; + break; + case PRODUCT_SERVER_FOR_SMALLBUSINESS: + sub = "Essential Server Solutions Edition"; break; case PRODUCT_SMALLBUSINESS_SERVER_PREMIUM: sub = "Small Business Server Premium Edition"; break; - case PRODUCT_STANDARD_SERVER: - sub = "Standard Edition"; + case PRODUCT_HOME_PREMIUM_N: + sub = "Home Premium N Edition"; break; - case PRODUCT_STANDARD_SERVER_CORE: - sub = "Standard Edition (core installation)"; + case PRODUCT_ENTERPRISE_N: + sub = "Enterprise N Edition"; break; - case PRODUCT_WEB_SERVER: - sub = "Web Server Edition"; + case PRODUCT_ULTIMATE_N: + sub = "Ultimate N Edition"; + break; + case PRODUCT_WEB_SERVER_CORE: + sub = "Web Server Edition (core installation)"; + break; + case PRODUCT_MEDIUMBUSINESS_SERVER_MANAGEMENT: + sub = "Essential Business Server Management Server Edition"; + break; + case PRODUCT_MEDIUMBUSINESS_SERVER_SECURITY: + sub = "Essential Business Server Management Security Edition"; + break; + case PRODUCT_MEDIUMBUSINESS_SERVER_MESSAGING: + sub = "Essential Business Server Management Messaging Edition"; + break; + case PRODUCT_SERVER_FOUNDATION: + sub = "Foundation Edition"; + break; + case PRODUCT_HOME_PREMIUM_SERVER: + sub = "Home Server 2011 Edition"; + break; + case PRODUCT_SERVER_FOR_SMALLBUSINESS_V: + sub = "Essential Server Solutions Edition (without Hyper-V)"; + break; + case PRODUCT_STANDARD_SERVER_V: + sub = "Standard Edition (without Hyper-V)"; + break; + case PRODUCT_DATACENTER_SERVER_V: + sub = "Datacenter Edition (without Hyper-V)"; + break; + case PRODUCT_ENTERPRISE_SERVER_V: + sub = "Enterprise Edition (without Hyper-V)"; + break; + case PRODUCT_DATACENTER_SERVER_CORE_V: + sub = "Datacenter Edition (core installation, without Hyper-V)"; + break; + case PRODUCT_STANDARD_SERVER_CORE_V: + sub = "Standard Edition (core installation, without Hyper-V)"; + break; + case PRODUCT_ENTERPRISE_SERVER_CORE_V: + sub = "Enterprise Edition (core installation, without Hyper-V)"; + break; + case PRODUCT_HYPERV: + sub = "Hyper-V Server"; + break; + case PRODUCT_STORAGE_EXPRESS_SERVER_CORE: + sub = "Storage Server Express Edition (core installation)"; + break; + case PRODUCT_STORAGE_STANDARD_SERVER_CORE: + sub = "Storage Server Standard Edition (core installation)"; + break; + case PRODUCT_STORAGE_WORKGROUP_SERVER_CORE: + sub = "Storage Server Workgroup Edition (core installation)"; + break; + case PRODUCT_STORAGE_ENTERPRISE_SERVER_CORE: + sub = "Storage Server Enterprise Edition (core installation)"; + break; + case PRODUCT_STARTER_N: + sub = "Starter N Edition"; + break; + case PRODUCT_PROFESSIONAL: + sub = "Professional Edition"; + break; + case PRODUCT_PROFESSIONAL_N: + sub = "Professional N Edition"; + break; + case PRODUCT_SB_SOLUTION_SERVER: + sub = "Small Business Server 2011 Essentials Edition"; + break; + case PRODUCT_SERVER_FOR_SB_SOLUTIONS: + sub = "Server For SB Solutions Edition"; + break; + case PRODUCT_STANDARD_SERVER_SOLUTIONS: + sub = "Solutions Premium Edition"; + break; + case PRODUCT_STANDARD_SERVER_SOLUTIONS_CORE: + sub = "Solutions Premium Edition (core installation)"; + break; + case PRODUCT_SB_SOLUTION_SERVER_EM: + sub = "Server For SB Solutions EM Edition"; + break; + case PRODUCT_SERVER_FOR_SB_SOLUTIONS_EM: + sub = "Server For SB Solutions EM Edition"; + break; + case PRODUCT_SOLUTION_EMBEDDEDSERVER: + sub = "MultiPoint Server Edition"; + break; + case PRODUCT_ESSENTIALBUSINESS_SERVER_MGMT: + sub = "Essential Server Solution Management Edition"; + break; + case PRODUCT_ESSENTIALBUSINESS_SERVER_ADDL: + sub = "Essential Server Solution Additional Edition"; + break; + case PRODUCT_ESSENTIALBUSINESS_SERVER_MGMTSVC: + sub = "Essential Server Solution Management SVC Edition"; + break; + case PRODUCT_ESSENTIALBUSINESS_SERVER_ADDLSVC: + sub = "Essential Server Solution Additional SVC Edition"; + break; + case PRODUCT_SMALLBUSINESS_SERVER_PREMIUM_CORE: + sub = "Small Business Server Premium Edition (core installation)"; + break; + case PRODUCT_CLUSTER_SERVER_V: + sub = "Hyper Core V Edition"; + break; + case PRODUCT_STARTER_E: + sub = "Hyper Core V Edition"; + break; + case PRODUCT_ENTERPRISE_EVALUATION: + sub = "Enterprise Edition (evaluation installation)"; + break; + case PRODUCT_MULTIPOINT_STANDARD_SERVER: + sub = "MultiPoint Server Standard Edition (full installation)"; + break; + case PRODUCT_MULTIPOINT_PREMIUM_SERVER: + sub = "MultiPoint Server Premium Edition (full installation)"; + break; + case PRODUCT_STANDARD_EVALUATION_SERVER: + sub = "Standard Edition (evaluation installation)"; + break; + case PRODUCT_DATACENTER_EVALUATION_SERVER: + sub = "Datacenter Edition (evaluation installation)"; + break; + case PRODUCT_ENTERPRISE_N_EVALUATION: + sub = "Enterprise N Edition (evaluation installation)"; + break; + case PRODUCT_STORAGE_WORKGROUP_EVALUATION_SERVER: + sub = "Storage Server Workgroup Edition (evaluation installation)"; + break; + case PRODUCT_STORAGE_STANDARD_EVALUATION_SERVER: + sub = "Storage Server Standard Edition (evaluation installation)"; + break; + case PRODUCT_CORE_N: + sub = "Windows 8 N Edition"; + break; + case PRODUCT_CORE_COUNTRYSPECIFIC: + sub = "Windows 8 China Edition"; + break; + case PRODUCT_CORE_SINGLELANGUAGE: + sub = "Windows 8 Single Language Edition"; + break; + case PRODUCT_CORE: + sub = "Windows 8 Edition"; + break; + case PRODUCT_PROFESSIONAL_WMC: + sub = "Professional with Media Center Edition"; break; } } diff --git a/ext/standard/mail.c b/ext/standard/mail.c index 4a20671af2..09e0a5546b 100644 --- a/ext/standard/mail.c +++ b/ext/standard/mail.c @@ -223,6 +223,43 @@ void php_mail_log_to_file(char *filename, char *message, size_t message_size TSR } +static int php_mail_detect_multiple_crlf(char *hdr) { + /* This function detects multiple/malformed multiple newlines. */ + + if (!hdr) { + return 0; + } + + /* Should not have any newlines at the beginning. */ + /* RFC 2822 2.2. Header Fields */ + if (*hdr < 33 || *hdr > 126 || *hdr == ':') { + return 1; + } + + while(*hdr) { + if (*hdr == '\r') { + if (*(hdr+1) == '\0' || *(hdr+1) == '\r' || (*(hdr+1) == '\n' && (*(hdr+2) == '\0' || *(hdr+2) == '\n' || *(hdr+2) == '\r'))) { + /* Malformed or multiple newlines. */ + return 1; + } else { + hdr += 2; + } + } else if (*hdr == '\n') { + if (*(hdr+1) == '\0' || *(hdr+1) == '\r' || *(hdr+1) == '\n') { + /* Malformed or multiple newlines. */ + return 1; + } else { + hdr += 2; + } + } else { + hdr++; + } + } + + return 0; +} + + /* {{{ php_mail */ PHPAPI int php_mail(char *to, char *subject, char *message, char *headers, char *extra_cmd TSRMLS_DC) @@ -276,6 +313,7 @@ PHPAPI int php_mail(char *to, char *subject, char *message, char *headers, char efree(tmp); } + if (PG(mail_x_header)) { const char *tmp = zend_get_executed_filename(TSRMLS_C); char *f; @@ -291,6 +329,11 @@ PHPAPI int php_mail(char *to, char *subject, char *message, char *headers, char efree(f); } + if (hdr && php_mail_detect_multiple_crlf(hdr)) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Multiple or malformed newlines found in additional_header"); + MAIL_RET(0); + } + if (!sendmail_path) { #if (defined PHP_WIN32 || defined NETWARE) /* handle old style win smtp sending */ diff --git a/ext/standard/tests/general_functions/bug69646.phpt b/ext/standard/tests/general_functions/bug69646.phpt new file mode 100644 index 0000000000..b077c67319 --- /dev/null +++ b/ext/standard/tests/general_functions/bug69646.phpt @@ -0,0 +1,47 @@ +--TEST-- +Bug #69646 OS command injection vulnerability in escapeshellarg() +--SKIPIF-- +<?php +if( substr(PHP_OS, 0, 3) != "WIN" ) + die("skip.. Windows only"); +?> +--FILE-- +<?php + +$a = 'a\\'; +$b = 'b -c d\\'; +var_dump( $a, escapeshellarg($a) ); +var_dump( $b, escapeshellarg($b) ); + +$helper_script = <<<SCRIPT +<?php + +print( "--- ARG INFO ---\n" ); +var_dump( \$argv ); + +SCRIPT; + +$script = dirname(__FILE__) . DIRECTORY_SEPARATOR . "arginfo.php"; +file_put_contents($script, $helper_script); + +$cmd = PHP_BINARY . " " . $script . " " . escapeshellarg($a) . " " . escapeshellarg($b); + +system($cmd); + +unlink($script); +?> +--EXPECTF-- +string(2) "a\" +string(5) ""a\\"" +string(7) "b -c d\" +string(10) ""b -c d\\"" +--- ARG INFO --- +array(3) { + [0]=> + string(%d) "%sarginfo.php" + [1]=> + string(2) "a\" + [2]=> + string(7) "b -c d\" +} + diff --git a/ext/standard/tests/mail/mail_basic6.phpt b/ext/standard/tests/mail/mail_basic6.phpt new file mode 100644 index 0000000000..d0d45b78f3 --- /dev/null +++ b/ext/standard/tests/mail/mail_basic6.phpt @@ -0,0 +1,329 @@ +--TEST-- +Test mail() function : basic functionality +--INI-- +sendmail_path=tee mailBasic.out >/dev/null +mail.add_x_header = Off +--SKIPIF-- +<?php +if(substr(PHP_OS, 0, 3) == "WIN") + die("skip Won't run on Windows"); +?> +--FILE-- +<?php +/* Prototype : int mail(string to, string subject, string message [, string additional_headers [, string additional_parameters]]) + * Description: Send an email message with invalid addtional_headers + * Source code: ext/standard/mail.c + * Alias to functions: + */ + +echo "*** Testing mail() : basic functionality ***\n"; + + +// Valid header +$to = 'user@example.com'; +$subject = 'Test Subject'; +$message = 'A Message'; +$additional_headers = "HEAD1: a\r\nHEAD2: b\r\n"; +$outFile = "mailBasic.out"; +@unlink($outFile); + +echo "-- Valid Header --\n"; +// Calling mail() with all additional headers +var_dump( mail($to, $subject, $message, $additional_headers) ); +echo file_get_contents($outFile); +unlink($outFile); + +// Valid header +$additional_headers = "HEAD1: a\nHEAD2: b\n"; +@unlink($outFile); + +echo "-- Valid Header --\n"; +// Calling mail() with all additional headers +var_dump( mail($to, $subject, $message, $additional_headers) ); +echo @file_get_contents($outFile); +@unlink($outFile); + +// Valid header +// \r is accepted as valid. This may be changed to invalid. +$additional_headers = "HEAD1: a\rHEAD2: b\r"; +@unlink($outFile); + +echo "-- Valid Header --\n"; +// Calling mail() with all additional headers +var_dump( mail($to, $subject, $message, $additional_headers) ); +echo @file_get_contents($outFile); +@unlink($outFile); + +//=============================================================================== +// Invalid header +$additional_headers = "\nHEAD1: a\nHEAD2: b\n"; +@unlink($outFile); + +echo "-- Invalid Header - preceeding newline--\n"; +// Calling mail() with all additional headers +var_dump( mail($to, $subject, $message, $additional_headers) ); +echo @file_get_contents($outFile); +@unlink($outFile); + +// Invalid header +$additional_headers = "\rHEAD1: a\nHEAD2: b\r"; +@unlink($outFile); + +echo "-- Invalid Header - preceeding newline--\n"; +// Calling mail() with all additional headers +var_dump( mail($to, $subject, $message, $additional_headers) ); +echo @file_get_contents($outFile); +@unlink($outFile); + +// Invalid header +$additional_headers = "\r\nHEAD1: a\r\nHEAD2: b\r\n"; +@unlink($outFile); + +echo "-- Invalid Header - preceeding newline--\n"; +// Calling mail() with all additional headers +var_dump( mail($to, $subject, $message, $additional_headers) ); +echo @file_get_contents($outFile); +@unlink($outFile); + +// Invalid header +$additional_headers = "\r\n\r\nHEAD1: a\r\nHEAD2: b\r\n"; +@unlink($outFile); + +echo "-- Invalid Header - preceeding newline--\n"; +// Calling mail() with all additional headers +var_dump( mail($to, $subject, $message, $additional_headers) ); +echo @file_get_contents($outFile); +@unlink($outFile); + +// Invalid header +$additional_headers = "\n\nHEAD1: a\r\nHEAD2: b\r\n"; +@unlink($outFile); + +echo "-- Invalid Header - preceeding newline--\n"; +// Calling mail() with all additional headers +var_dump( mail($to, $subject, $message, $additional_headers) ); +echo @file_get_contents($outFile); +@unlink($outFile); + +// Invalid header +$additional_headers = "\r\rHEAD1: a\r\nHEAD2: b\r\n"; +@unlink($outFile); + +echo "-- Invalid Header - preceeding newline--\n"; +// Calling mail() with all additional headers +var_dump( mail($to, $subject, $message, $additional_headers) ); +echo @file_get_contents($outFile); +@unlink($outFile); + +// Invalid header +$additional_headers = "HEAD1: a\r\n\r\nHEAD2: b\r\n"; +@unlink($outFile); + +echo "-- Invalid Header - multiple newlines in the middle --\n"; +// Calling mail() with all additional headers +var_dump( mail($to, $subject, $message, $additional_headers) ); +echo @file_get_contents($outFile); +@unlink($outFile); + +// Invalid header +$additional_headers = "HEAD1: a\r\n\nHEAD2: b\r\n"; +@unlink($outFile); + +echo "-- Invalid Header - multiple newlines in the middle --\n"; +// Calling mail() with all additional headers +var_dump( mail($to, $subject, $message, $additional_headers) ); +echo @file_get_contents($outFile); +@unlink($outFile); + +// Invalid header +$additional_headers = "HEAD1: a\n\nHEAD2: b\r\n"; +@unlink($outFile); + +echo "-- Invalid Header - multiple newlines in the middle --\n"; +// Calling mail() with all additional headers +var_dump( mail($to, $subject, $message, $additional_headers) ); +echo @file_get_contents($outFile); +@unlink($outFile); + +// Invalid header +$additional_headers = "HEAD1: a\r\rHEAD2: b\r\n"; +@unlink($outFile); + +echo "-- Invalid Header - multiple newlines in the middle --\n"; +// Calling mail() with all additional headers +var_dump( mail($to, $subject, $message, $additional_headers) ); +echo @file_get_contents($outFile); +@unlink($outFile); + +// Invalid header +$additional_headers = "HEAD1: a\n\rHEAD2: b\r\n"; +@unlink($outFile); + +echo "-- Invalid Header - multiple newlines in the middle --\n"; +// Calling mail() with all additional headers +var_dump( mail($to, $subject, $message, $additional_headers) ); +echo @file_get_contents($outFile); +@unlink($outFile); + +// Invalid header +$additional_headers = "HEAD1: a\n\r\nHEAD2: b\r\n"; +@unlink($outFile); + +echo "-- Invalid Header - multiple newlines in the middle --\n"; +// Calling mail() with all additional headers +var_dump( mail($to, $subject, $message, $additional_headers) ); +echo @file_get_contents($outFile); +@unlink($outFile); + +// Invalid header +// Invalid, but PHP_FUNCTION(mail) trims newlines +$additional_headers = "HEAD1: a\r\nHEAD2: b\r\n\n"; +@unlink($outFile); + +echo "-- Invalid Header - trailing newlines --\n"; +// Calling mail() with all additional headers +var_dump( mail($to, $subject, $message, $additional_headers) ); +echo @file_get_contents($outFile); +@unlink($outFile); + +// Invalid header +// Invalid, but PHP_FUNCTION(mail) trims newlines +$additional_headers = "HEAD1: a\r\nHEAD2: b\n\n"; +@unlink($outFile); + +echo "-- Invalid Header - trailing newlines --\n"; +// Calling mail() with all additional headers +var_dump( mail($to, $subject, $message, $additional_headers) ); +echo @file_get_contents($outFile); +@unlink($outFile); + +// Invalid header +// Invalid, but PHP_FUNCTION(mail) trims newlines +$additional_headers = "HEAD1: a\r\nHEAD2: b\n"; +@unlink($outFile); + +echo "-- Invalid Header - trailing newlines --\n"; +// Calling mail() with all additional headers +var_dump( mail($to, $subject, $message, $additional_headers) ); +echo @file_get_contents($outFile); +@unlink($outFile); + +// Invalid header +// Invalid, but PHP_FUNCTION(mail) trims newlines +$additional_headers = "HEAD1: a\r\nHEAD2: b\r"; +@unlink($outFile); + +echo "-- Invalid Header - trailing newlines --\n"; +// Calling mail() with all additional headers +var_dump( mail($to, $subject, $message, $additional_headers) ); +echo @file_get_contents($outFile); +@unlink($outFile); + +?> +===DONE=== +--EXPECTF-- +*** Testing mail() : basic functionality *** +-- Valid Header -- +bool(true) +To: user@example.com +Subject: Test Subject +HEAD1: a +HEAD2: b + +A Message +-- Valid Header -- +bool(true) +To: user@example.com +Subject: Test Subject +HEAD1: a +HEAD2: b + +A Message +-- Valid Header -- +bool(true) +To: user@example.com +Subject: Test Subject +HEAD1: a
HEAD2: b + +A Message +-- Invalid Header - preceeding newline-- + +Warning: mail(): Multiple or malformed newlines found in additional_header in %s/mail_basic6.php on line %d +bool(false) +-- Invalid Header - preceeding newline-- + +Warning: mail(): Multiple or malformed newlines found in additional_header in %s/mail_basic6.php on line %d +bool(false) +-- Invalid Header - preceeding newline-- + +Warning: mail(): Multiple or malformed newlines found in additional_header in %s/mail_basic6.php on line %d +bool(false) +-- Invalid Header - preceeding newline-- + +Warning: mail(): Multiple or malformed newlines found in additional_header in %s/mail_basic6.php on line %d +bool(false) +-- Invalid Header - preceeding newline-- + +Warning: mail(): Multiple or malformed newlines found in additional_header in %s/mail_basic6.php on line %d +bool(false) +-- Invalid Header - preceeding newline-- + +Warning: mail(): Multiple or malformed newlines found in additional_header in %s/mail_basic6.php on line %d +bool(false) +-- Invalid Header - multiple newlines in the middle -- + +Warning: mail(): Multiple or malformed newlines found in additional_header in %s/mail_basic6.php on line %d +bool(false) +-- Invalid Header - multiple newlines in the middle -- + +Warning: mail(): Multiple or malformed newlines found in additional_header in %s/mail_basic6.php on line %d +bool(false) +-- Invalid Header - multiple newlines in the middle -- + +Warning: mail(): Multiple or malformed newlines found in additional_header in %s/mail_basic6.php on line %d +bool(false) +-- Invalid Header - multiple newlines in the middle -- + +Warning: mail(): Multiple or malformed newlines found in additional_header in %s/mail_basic6.php on line %d +bool(false) +-- Invalid Header - multiple newlines in the middle -- + +Warning: mail(): Multiple or malformed newlines found in additional_header in %s/mail_basic6.php on line %d +bool(false) +-- Invalid Header - multiple newlines in the middle -- + +Warning: mail(): Multiple or malformed newlines found in additional_header in %s/mail_basic6.php on line %d +bool(false) +-- Invalid Header - trailing newlines -- +bool(true) +To: user@example.com +Subject: Test Subject +HEAD1: a +HEAD2: b + +A Message +-- Invalid Header - trailing newlines -- +bool(true) +To: user@example.com +Subject: Test Subject +HEAD1: a +HEAD2: b + +A Message +-- Invalid Header - trailing newlines -- +bool(true) +To: user@example.com +Subject: Test Subject +HEAD1: a +HEAD2: b + +A Message +-- Invalid Header - trailing newlines -- +bool(true) +To: user@example.com +Subject: Test Subject +HEAD1: a +HEAD2: b + +A Message +===DONE=== diff --git a/ext/standard/winver.h b/ext/standard/winver.h index 7152d60811..ba46c90a7c 100644 --- a/ext/standard/winver.h +++ b/ext/standard/winver.h @@ -18,32 +18,82 @@ #endif #ifndef PRODUCT_ULTIMATE -#define PRODUCT_UNDEFINED 0x00000000 -#define PRODUCT_ULTIMATE 0x00000001 -#define PRODUCT_HOME_BASIC 0x00000002 -#define PRODUCT_HOME_PREMIUM 0x00000003 -#define PRODUCT_ENTERPRISE 0x00000004 -#define PRODUCT_HOME_BASIC_N 0x00000005 -#define PRODUCT_BUSINESS 0x00000006 -#define PRODUCT_STANDARD_SERVER 0x00000007 -#define PRODUCT_DATACENTER_SERVER 0x00000008 -#define PRODUCT_SMALLBUSINESS_SERVER 0x00000009 -#define PRODUCT_ENTERPRISE_SERVER 0x0000000A -#define PRODUCT_STARTER 0x0000000B -#define PRODUCT_DATACENTER_SERVER_CORE 0x0000000C -#define PRODUCT_STANDARD_SERVER_CORE 0x0000000D -#define PRODUCT_ENTERPRISE_SERVER_CORE 0x0000000E -#define PRODUCT_ENTERPRISE_SERVER_IA64 0x0000000F -#define PRODUCT_BUSINESS_N 0x00000010 -#define PRODUCT_WEB_SERVER 0x00000011 -#define PRODUCT_CLUSTER_SERVER 0x00000012 -#define PRODUCT_HOME_SERVER 0x00000013 -#define PRODUCT_STORAGE_EXPRESS_SERVER 0x00000014 -#define PRODUCT_STORAGE_STANDARD_SERVER 0x00000015 -#define PRODUCT_STORAGE_WORKGROUP_SERVER 0x00000016 -#define PRODUCT_STORAGE_ENTERPRISE_SERVER 0x00000017 -#define PRODUCT_SERVER_FOR_SMALLBUSINESS 0x00000018 -#define PRODUCT_SMALLBUSINESS_SERVER_PREMIUM 0x00000019 +#define PRODUCT_UNDEFINED 0x00000000 +#define PRODUCT_ULTIMATE 0x00000001 +#define PRODUCT_HOME_BASIC 0x00000002 +#define PRODUCT_HOME_PREMIUM 0x00000003 +#define PRODUCT_ENTERPRISE 0x00000004 +#define PRODUCT_HOME_BASIC_N 0x00000005 +#define PRODUCT_BUSINESS 0x00000006 +#define PRODUCT_STANDARD_SERVER 0x00000007 +#define PRODUCT_DATACENTER_SERVER 0x00000008 +#define PRODUCT_SMALLBUSINESS_SERVER 0x00000009 +#define PRODUCT_ENTERPRISE_SERVER 0x0000000A +#define PRODUCT_STARTER 0x0000000B +#define PRODUCT_DATACENTER_SERVER_CORE 0x0000000C +#define PRODUCT_STANDARD_SERVER_CORE 0x0000000D +#define PRODUCT_ENTERPRISE_SERVER_CORE 0x0000000E +#define PRODUCT_ENTERPRISE_SERVER_IA64 0x0000000F +#define PRODUCT_BUSINESS_N 0x00000010 +#define PRODUCT_WEB_SERVER 0x00000011 +#define PRODUCT_CLUSTER_SERVER 0x00000012 +#define PRODUCT_HOME_SERVER 0x00000013 +#define PRODUCT_STORAGE_EXPRESS_SERVER 0x00000014 +#define PRODUCT_STORAGE_STANDARD_SERVER 0x00000015 +#define PRODUCT_STORAGE_WORKGROUP_SERVER 0x00000016 +#define PRODUCT_STORAGE_ENTERPRISE_SERVER 0x00000017 +#define PRODUCT_SERVER_FOR_SMALLBUSINESS 0x00000018 +#define PRODUCT_SMALLBUSINESS_SERVER_PREMIUM 0x00000019 +#define PRODUCT_HOME_PREMIUM_N 0x0000001A +#define PRODUCT_ENTERPRISE_N 0x0000001B +#define PRODUCT_ULTIMATE_N 0x0000001C +#define PRODUCT_WEB_SERVER_CORE 0x0000001D +#define PRODUCT_MEDIUMBUSINESS_SERVER_MANAGEMENT 0x0000001E +#define PRODUCT_MEDIUMBUSINESS_SERVER_SECURITY 0x0000001F +#define PRODUCT_MEDIUMBUSINESS_SERVER_MESSAGING 0x00000020 +#define PRODUCT_SERVER_FOUNDATION 0x00000021 +#define PRODUCT_HOME_PREMIUM_SERVER 0x00000022 +#define PRODUCT_SERVER_FOR_SMALLBUSINESS_V 0x00000023 +#define PRODUCT_STANDARD_SERVER_V 0x00000024 +#define PRODUCT_DATACENTER_SERVER_V 0x00000025 +#define PRODUCT_ENTERPRISE_SERVER_V 0x00000026 +#define PRODUCT_DATACENTER_SERVER_CORE_V 0x00000027 +#define PRODUCT_STANDARD_SERVER_CORE_V 0x00000028 +#define PRODUCT_ENTERPRISE_SERVER_CORE_V 0x00000029 +#define PRODUCT_HYPERV 0x0000002A +#define PRODUCT_STORAGE_EXPRESS_SERVER_CORE 0x0000002B +#define PRODUCT_STORAGE_STANDARD_SERVER_CORE 0x0000002C +#define PRODUCT_STORAGE_WORKGROUP_SERVER_CORE 0x0000002D +#define PRODUCT_STORAGE_ENTERPRISE_SERVER_CORE 0x0000002E +#define PRODUCT_STARTER_N 0x0000002F +#define PRODUCT_PROFESSIONAL 0x00000030 +#define PRODUCT_PROFESSIONAL_N 0x00000031 +#define PRODUCT_SB_SOLUTION_SERVER 0x00000032 +#define PRODUCT_SERVER_FOR_SB_SOLUTIONS 0x00000033 +#define PRODUCT_STANDARD_SERVER_SOLUTIONS 0x00000034 +#define PRODUCT_STANDARD_SERVER_SOLUTIONS_CORE 0x00000035 +#define PRODUCT_SB_SOLUTION_SERVER_EM 0x00000036 +#define PRODUCT_SERVER_FOR_SB_SOLUTIONS_EM 0x00000037 +#define PRODUCT_SOLUTION_EMBEDDEDSERVER 0x00000038 +#define PRODUCT_ESSENTIALBUSINESS_SERVER_MGMT 0x0000003B +#define PRODUCT_ESSENTIALBUSINESS_SERVER_ADDL 0x0000003C +#define PRODUCT_ESSENTIALBUSINESS_SERVER_MGMTSVC 0x0000003D +#define PRODUCT_ESSENTIALBUSINESS_SERVER_ADDLSVC 0x0000003E +#define PRODUCT_SMALLBUSINESS_SERVER_PREMIUM_CORE 0x0000003F +#define PRODUCT_CLUSTER_SERVER_V 0x00000040 +#define PRODUCT_ENTERPRISE_EVALUATION 0x00000048 +#define PRODUCT_MULTIPOINT_STANDARD_SERVER 0x0000004C +#define PRODUCT_MULTIPOINT_PREMIUM_SERVER 0x0000004D +#define PRODUCT_STANDARD_EVALUATION_SERVER 0x0000004F +#define PRODUCT_DATACENTER_EVALUATION_SERVER 0x00000050 +#define PRODUCT_ENTERPRISE_N_EVALUATION 0x00000054 +#define PRODUCT_STORAGE_WORKGROUP_EVALUATION_SERVER 0x0000005F +#define PRODUCT_STORAGE_STANDARD_EVALUATION_SERVER 0x00000060 +#define PRODUCT_CORE_N 0x00000062 +#define PRODUCT_CORE_COUNTRYSPECIFIC 0x00000063 +#define PRODUCT_CORE_SINGLELANGUAGE 0x00000064 +#define PRODUCT_CORE 0x00000065 +#define PRODUCT_PROFESSIONAL_WMC 0x00000067 #endif #ifndef VER_NT_WORKSTATION @@ -1,6 +1,15 @@ #! /bin/sh -STD='make -f Makefile.frag RE2C="re2c" RE2C_FLAGS="-i" YACC="bison -y -l" srcdir=Zend builddir=Zend top_srcdir=.' +if [ -z $YACC ]; then + YACC="bison" +fi +YACC="$YACC -y -l" + +if [ -z $RE2C ]; then + RE2C="re2c" +fi + +STD="make -f Makefile.frag RE2C='$RE2C' RE2C_FLAGS='-i' YACC='$YACC' srcdir=Zend builddir=Zend top_srcdir=." (eval "$STD Zend/zend_language_parser.c Zend/zend_language_scanner.c Zend/zend_ini_parser.c Zend/zend_ini_scanner.c") diff --git a/win32/install.txt b/win32/install.txt index b240ad2723..10478f6ffb 100644 --- a/win32/install.txt +++ b/win32/install.txt @@ -6,7 +6,6 @@ Installing PHP 1. General Installation Considerations 2. Installation on Windows systems - Windows Installer Manual Installation Steps ActiveScript Microsoft IIS @@ -107,9 +106,6 @@ Chapter 2. Installation on Windows systems refer to the supported Windows platforms as Win32. Windows 95 is no longer supported as of PHP 4.3.0. - There are two main ways to install PHP for Windows: either manually or - by using the installer. - If you have Microsoft Visual Studio, you can also build PHP from the original source code. @@ -124,129 +120,6 @@ Chapter 2. Installation on Windows systems optimised. __________________________________________________________________ -Windows Installer (PHP 5.2 and later) - - The Windows PHP installer for later versions of PHP is built using MSI - technology using the Wix Toolkit (http://wix.sourceforge.net/). It will - install and configure PHP and all the built-in and PECL extensions, as - well as configure many of the popular web servers such as IIS, Apache, - and Xitami. - - First, install your selected HTTP (web) server on your system, and make - sure that it works. Then proceed with one of the following install - types. - __________________________________________________________________ - -Normal Install - - Run the MSI installer and follow the instructions provided by the - installation wizard. You will be prompted to select the Web Server you - wish to configure first, along with any configuration details needed. - - You will then be prompted to select which features and extensions you - wish to install and enable. By selecting "Will be installed on local - hard drive" in the drop-down menu for each item you can trigger whether - to install the feature or not. By selecting "Entire feature will be - installed on local hard drive", you will be able to install all - sub-features of the included feature ( for example by selecting this - options for the feature "PDO" you will install all PDO Drivers ). - - Warning - - It is not recommended to install all extensions by default, since many - other them require dependencies from outside PHP in order to function - properly. Instead, use the Installation Repair Mode that can be - triggered thru the 'Add/Remove Programs' control panel to enable or - disable extensions and features after installation. - - The installer then sets up PHP to be used in Windows and the php.ini - file, and configures certain web servers to use PHP. The installer will - currently configure IIS (CGI mode only), Apache, Xitami, and Sambar - Server; if you are using a different web server you'll need to - configure it manually. - __________________________________________________________________ - -Silent Install - - The installer also supports a silent mode, which is helpful for Systems - Administrators to deploy PHP easily. To use silent mode: - msiexec.exe /i php-VERSION-win32-install.msi /q - - You can control the install directory by passing it as a parameter to - the install. For example, to install to e:\php: - msiexec.exe /i php-VERSION-win32-install.msi /q INSTALLDIR=e:\php - - You can also use the same syntax to specify the Apache Configuration - Directory (APACHEDIR), the Sambar Server directory (SAMBARDIR), and the - Xitami Server directory (XITAMIDIR). - - You can also specify what features to install. For example, to install - the mysqli extension and the CGI executable: - msiexec.exe /i php-VERSION-win32-install.msi /q ADDLOCAL=cgi,ext_php_mysqli - - The current list of Features to install is as follows: -MainExecutable - php.exe executable -ScriptExecutable - php-win.exe executable -ext_php_* - the various extensions ( for example: ext_php_mysql for MySQL ) -apache13 - Apache 1.3 module -apache20 - Apache 2.0 module -apache22 - Apache 2,2 module -apacheCGI - Apache CGI executable -iis4ISAPI - IIS ISAPI module -iis4CGI - IIS CGI executable -NSAPI - Sun/iPlanet/Netscape server module -Xitami - Xitami CGI executable -Sambar - Sambar Server ISAPI module -CGI - php-cgi.exe executable -PEAR - PEAR installer -Manual - PHP Manual in CHM Format - - For more information on installing MSI installers from the command - line, visit - http://msdn.microsoft.com/library/en-us/msi/setup/command_line_options. - asp - __________________________________________________________________ - -Windows Installer (PHP 5.1.0 and earlier) - - The Windows PHP installer is available from the downloads page at - http://www.php.net/downloads.php. This installs the CGI version of PHP - and for IIS and Xitami, it configures the web server as well. The - installer does not include any extra external PHP extensions - (php_*.dll) as you'll only find those in the Windows Zip Package and - PECL downloads. - - Note: While the Windows installer is an easy way to make PHP work, - it is restricted in many aspects as, for example, the automatic - setup of extensions is not supported. Use of the installer isn't the - preferred method for installing PHP. - - First, install your selected HTTP (web) server on your system, and make - sure that it works. - - Run the executable installer and follow the instructions provided by - the installation wizard. Two types of installation are supported - - standard, which provides sensible defaults for all the settings it can, - and advanced, which asks questions as it goes along. - - The installation wizard gathers enough information to set up the - php.ini file, and configure certain web servers to use PHP. One of the - web servers the PHP installer does not configure for is Apache, so - you'll need to configure it manually. - - Once the installation has completed, the installer will inform you if - you need to restart your system, restart the server, or just start - using PHP. - - Warning - - Be aware, that this setup of PHP is not secure. If you would like to - have a secure PHP setup, you'd better go on the manual way, and set - every option carefully. This automatically working setup gives you an - instantly working PHP installation, but it is not meant to be used on - online servers. - __________________________________________________________________ - Manual Installation Steps This install guide will help you manually install and configure PHP @@ -254,11 +127,10 @@ Manual Installation Steps download the zip binary distribution from the downloads page at http://www.php.net/downloads.php. - Although there are many all-in-one installation kits, and we also - distribute a PHP installer for Microsoft Windows, we recommend you take - the time to setup PHP yourself as this will provide you with a better - understanding of the system, and enables you to install PHP extensions - easily when needed. + Although there are many all-in-one installation kits, we recommend you + take the time to setup PHP yourself as this will provide you with a + better understanding of the system, and enables you to install PHP + extensions easily when needed. Upgrading from a previous PHP version: Previous editions of the manual suggest moving various ini and DLL files into your SYSTEM @@ -533,10 +405,10 @@ General considerations for all installations of PHP with IIS extensions_dir value is "c:\php\ext" and an example IIS doc_root value is "c:\Inetpub\wwwroot". * PHP extension DLL files, such as php_mysql.dll and php_curl.dll, - are found in the zip package of the PHP download (not the PHP - installer). In PHP 5, many extensions are part of PECL and can be - downloaded in the "Collection of PECL modules" package. Files such - as php_zip.dll and php_ssh2.dll. Download PHP files here. + are found in the zip package of the PHP download. In PHP 5, many + extensions are part of PECL and can be downloaded in the + "Collection of PECL modules" package. Files such as php_zip.dll and + php_ssh2.dll. Download PHP files here. * When defining the executable, the 'check that file exists' box may also be checked. For a small performance penalty, the IIS will check that the script file exists and sort out authentication |