LibreOffice Update Service

$message

\n"; print $out; if ($debug) error_log($out); exit; } # Parse the User-Agent: string from the browser function get_update_info($agent=null) { global $debug; if ($debug) error_log($_SERVER['HTTP_USER_AGENT'] . "; " . $_SERVER['HTTP_ACCEPT_LANGUAGE'] . "; " . $_SERVER['QUERY_STRING']); if ($agent == null && array_key_exists('HTTP_USER_AGENT', $_SERVER)) $agent = $_SERVER['HTTP_USER_AGENT']; if ($agent == null) return array(); $pattern = '#^(?P[^/ ]+)[/ ]+(?P[0-9]+(?:\.[0-9]+)?)[^\(]+\((?P[^;\( ]*) *; (?P[^; ]*); (?P[^; ]*); (BundledLanguages=(?[^;\)]*))?\)#i'; if (!preg_match($pattern, $agent, $match)) return array(); # additionally store language of the user interface $match['lang'] = $_SERVER['HTTP_ACCEPT_LANGUAGE']; # check the package format for Linux packages # FIXME this should be improved, but serves the purpose for now $match['pkgfmt'] = ''; if (array_key_exists('QUERY_STRING', $_SERVER)) { if ($_SERVER['QUERY_STRING'] == 'pkgfmt=rpm') $match['pkgfmt'] = 'rpm'; else if ($_SERVER['QUERY_STRING'] == 'pkgfmt=deb') $match['pkgfmt'] = 'deb'; } return $match; } # Localization of the URLs $localize_map = array( 'https://www.libreoffice.org/download/' => array( 'cs' => 'https://cs.libreoffice.org/stahnout/', 'da' => 'https://da.libreoffice.org/hent-libreoffice/', 'de' => 'https://de.libreoffice.org/download/', 'eo' => 'https://eo.libreoffice.org/elsxuti/', 'es' => 'https://es.libreoffice.org/descarga/', 'fi' => 'https://fi.libreoffice.org/lataa/', 'fr' => 'https://fr.libreoffice.org/telecharger/', 'ga' => 'https://ga.libreoffice.org/iosluchtu/', 'gd' => 'https://gd.libreoffice.org/faigh-e/', 'hu' => 'https://hu.libreoffice.org/letoeltes/', 'it' => 'https://it.libreoffice.org/download/', 'ja' => 'https://ja.libreoffice.org/download/', 'lt' => 'https://lt.libreoffice.org/parsisiuntimas/', 'nl' => 'https://nl.libreoffice.org/download/', 'pt' => 'https://pt.libreoffice.org/transferir-e-instalar/', 'pt-br' => 'https://pt-br.libreoffice.org/baixe-ja-o-libreoffice-em-portugues-do-brasil/', 'sl' => 'https://sl.libreoffice.org/prenosi/', 'zh-tw' => 'https://zh-tw.libreoffice.org/download/', ), 'https://www.libreoffice.org/download/pre-releases/' => array( 'da' => 'https://da.libreoffice.org/hent-libreoffice/test/', 'de' => 'https://de.libreoffice.org/download/testversionen/', 'es' => 'https://es.libreoffice.org/descarga/pre-lanzamientos/', 'fi' => 'https://fi.libreoffice.org/lataa/testiversioita/', 'fr' => 'https://fr.libreoffice.org/telecharger/pre-versions/', 'ga' => 'https://ga.libreoffice.org/iosluchtu/reamhleagan/', 'gd' => 'https://gd.libreoffice.org/faigh-e/deuchainn-lann/', 'hu' => 'https://hu.libreoffice.org/letoeltes/el-zetes-kiadasok/', 'it' => 'https://it.libreoffice.org/download/pre-release/', 'ja' => 'https://ja.libreoffice.org/download/pre-releases/', 'lt' => 'https://lt.libreoffice.org/parsisiuntimas/testuojamosios-versijos/', 'nl' => 'https://nl.libreoffice.org/download/pre-releases/', 'pt' => 'https://pt.libreoffice.org/pre-lancamentos/', 'pt-br' => 'https://pt-br.libreoffice.org/baixe-ja-o-libreoffice-em-portugues-do-brasil/prelancamento/', 'sl' => 'https://sl.libreoffice.org/prenosi/prenosi-poskusnih-gradenj/', 'zh-tw' => 'https://zh-tw.libreoffice.org/download/pre-releases/', ) ); # Map the build id's into a large integer # Every released version has to be added here (all betas, RC's and final # versions) as soon as they are out $build_hash_to_version = array( ################## # 3.5.0 versions '7362ca8-b5a8e65-af86909-d471f98-61464c4' => '3.5.0.0.b1', # 3.5.0 Beta1 '8589e48-760cc4d-f39cf3d-1b2857e-60db978' => '3.5.0.0.b2', # 3.5.0 Beta2 'da8462e-760cc4d-f39cf3d-1b2857e-60db978' => '3.5.0.0.b2', # 3.5.0 Beta2 (MacOSX) 'e40af8c-10029e3-615e522-88673a2-727f724' => '3.5.0.0.b3', # 3.5.0 Beta3 'b6c8ba5-8c0b455-0b5e650-d7f0dd3-b100c87' => '3.5.0.1', # 3.5.0 RC1 'e371a95-bf68a13-5a1aa2b-d3c1ae9-b938258' => '3.5.0.2', # 3.5.0 RC2 '7e68ba2-a744ebf-1f241b7-c506db1-7d53735' => '3.5.0.3', # 3.5.0 RC3 / Final # 3.5.1 versions '45a2874-aa8c38d-dff3b9c-def3dbd-62463c8' => '3.5.1.1', # 3.5.1 RC1 'dc9775d-05ecbee-0851ad3-1586698-727bf66' => '3.5.1.2', # 3.5.1 RC2 / Final # 3.5.2 versions '1488b14-519dc6f-43021d0-52136ea-8d338cc' => '3.5.2.1', # 3.5.2 RC1 '281b639-6baa1d3-ef66a77-d866f25-f36d45f' => '3.5.2.2', # 3.5.2 RC2 / Final # 3.5.3 versions '21cb047-d7e6025-9ba54fc-b4a51a8-f42372b' => '3.5.3.1', # 3.5.3 RC1 '235ab8a-3802056-4a8fed3-2d66ea8-e241b80' => '3.5.3.2', # 3.5.3 RC2 / Final # 3.5.4 versions '7306755-f4f605c-738527d-1cf4bc1-9930dc8' => '3.5.4.1', # 3.5.4 RC1 '165a79a-7059095-e13bb37-fef39a4-9503d18' => '3.5.4.2', # 3.5.4 RC2 / Final # 3.5.5 versions 'c9944f7-48b7ff5-0507789-54a4c8a-8b242a8' => '3.5.5.1', # 3.5.5 RC1 '24b32b4-b87ec2e-85c8e98-87a4e20-9a1b8c1' => '3.5.5.2', # 3.5.5 RC2 '7122e39-92ed229-498d286-15e43b4-d70da21' => '3.5.5.3', # 3.5.5 RC3 / Final # 3.5.6 versions '9cb76c3-dcba98b-297ab39-994e618-0f858f0' => '3.5.6.1', # 3.5.6 RC1 'e0fbe70-5879838-a0745b0-0cd1158-638b327' => '3.5.6.2', # 3.5.6 RC2 / Final # 3.5.7 versions '3fa2330-e49ffd2-90d118b-705e248-051e21c' => '3.5.7.1', # 3.5.7 RC1 '3215f89-f603614-ab984f2-7348103-1225a5b' => '3.5.7.2', # 3.5.7 RC2 / Final ################## # 3.6.0 versions '1f1cdd8-e28082e-41df8bf-b153627-a97a84' => '3.6.0.0.b1', # 3.6.0 Beta1 'f010139-41cc8cc-da4127d-d2bb4b0-f433b8' => '3.6.0.0.b2', # 3.6.0 Beta2 '3e2b862-dd05a58-d67668b-8ec3f67-dfb62d' => '3.6.0.0.b3', # 3.6.0 Beta3 '73f9fb6-115b9dc-d7b744e-21dd070-d656a7' => '3.6.0.1', # 3.6.0 RC1 '815c576-a5d8898-9df72e7-b4d87fe-96ce64' => '3.6.0.2', # 3.6.0 RC2 '61d5034-02759b5-145085a-056ecdd-4e8a3e' => '3.6.0.3', # 3.6.0 RC3 '932b512-69e3009-7a10e5c-fc86223-a55908' => '3.6.0.4', # 3.6.0 RC4 / Final # 3.6.1 versions '4db6344-f0536b8-bbcdb32-f398e1b-f43716' => '3.6.1.1', 'e29a214-2bbed72-0621de6-a97528c-8f066d' => '3.6.1.2', # Final # 3.6.2 versions 'ba822cc-88e2710-134b205-7cd8c5c-680b12' => '3.6.2.1', 'da8c1e6-fd468f4-454e206-f42a4a9-143cfd' => '3.6.2.2', # Final # 3.6.3 versions 'f8fce0b-300fad7-0c1a2b6-334b928-da36a9' => '3.6.3.1', '58f22d5-270d05a-e2abed1-ea17a85-9b5702' => '3.6.3.2', # Final # 3.6.4 versions 'a9a0717-273e462-768e6e3-978247f-65e65f' => '3.6.4.1', '2ef5aff-a6fb0ff-166bdff-cf087ad-0f1389' => '3.6.4.3', # Final [3.6.4.2 was skipped] # 3.6.5 versions '5b93205-6e6b3fc-7830f6d-c08ad66-1d9bf4' => '3.6.5.2', # Final [3.6.5.1 was skipped] # 3.6.6 versions 'a61ad19-949f691-349cf55-3bea8d1-2c85eb' => '3.6.6.1', 'f969faf-c24b504-8c77064-174276e-40b382' => '3.6.6.2', # Final # 3.6.7 versions '9418c72-a20f997-6f5dfc1-4f5ae61-61563f' => '3.6.7.1', 'e183d5b-f8ccaf6-3804794-95b4be8-895629' => '3.6.7.2', # Final (last of 3.6 series) ################## # 4.0.0 versions '87906242e87d3ddb2ba9827818f2d1416d80cc7' => '4.0.0.0.b1', # 4.0.0 Beta1 '4104d660979c57e1160b5135634f732918460a0' => '4.0.0.0.b2', # 4.0.0 Beta2 '527dba6f6e0cfbbc71bd6e7b88a52699bb48799' => '4.0.0.1', # 4.0.0 RC1 '408fe71bd18616c467b3dcd7ab6756528ffcae2' => '4.0.0.2', # 4.0.0 RC2 '5991f37846fc3763493029c4958b57282c2597e' => '4.0.0.2', # 4.0.0 RC2 (Windows) '7545bee9c2a0782548772a21bc84a9dcc583b89' => '4.0.0.3', # 4.0.0 RC3 / Final '53fd80e80f44edd735c18dbc5b6cde811e0a15c' => '4.0.0.3', # 4.0.0 RC3 / Final (MacOSX) # 4.0.1 versions '2c0c17a6e4bee0ee28131ea4bdc47edc700d659' => '4.0.1.1', '84102822e3d61eb989ddd325abf1ac077904985' => '4.0.1.2', # Final # 4.0.2 versions '7e5467ff8f30d821f4fbf69cb2769163eb64c2c' => '4.0.2.1', '4c82dcdd6efcd48b1d8bba66bfe1989deee49c3' => '4.0.2.2', # Final # 4.0.3 versions 'a67943cd4d125208f4ea7fa29439551825cfb39' => '4.0.3.1', 'c6786add5a58268e11aa027c47054344040db1b' => '4.0.3.2', '0eaa50a932c8f2199a615e1eb30f7ac74279539' => '4.0.3.3', # Final # 4.0.4 versions '7fdd5ee61c1c7379dd088f5d50265f0adbccf53' => '4.0.4.1', '9e9821abd0ffdbc09cd8c52eaa574fa09eb08f2' => '4.0.4.2', # Final # 4.0.5 versions '5eca95953c59f90dec2cd6ed6dab4b1f4b3b24c' => '4.0.5.1', '5464147a081647a250913f19c0715bca595af2f' => '4.0.5.2', # Final # 4.0.6 versions '7168152d13aa529ba3718c9ae3700216a574137' => '4.0.6.1', '2e2573268451a50806fcd60ae2d9fe01dd0ce24' => '4.0.6.2', # Final ################## # 4.1.0 versions '06ebec34fb5a4351b2d356919d5c68a0d4c2e78' => '4.1.0.0.a1', # alpha1 (buildfix2) '3a2c2d2417101e45fe07cfd8358acf2204a98f3' => '4.1.0.0.b1', # beta1 '794cd2a652270bfbe3a35910aa6d57964eac257' => '4.1.0.0.b1', # beta1 (buildfix1, only Windows) '33224f4f11a05cfad2249e812fcc2975fbb61f6' => '4.1.0.0.b2', # beta2 '1b3956717a60d6ac35b133d7b0a0f5eb55e9155' => '4.1.0.1', # rc1 (apparently buildfix applied manually) '43286d64e6126b0915ae60d89d3177018fe63b9' => '4.1.0.1', # rc1 (buildfix1) 'a7d538950185d02a6b950cd1cb2dfd79435f6e2' => '4.1.0.1', # rc1 (buildfix2, only Windows) '103a942746cfe346e87daab62acbd4268c38097' => '4.1.0.2', '0f08a823567f802c29cbaf2b327db19aaf72016' => '4.1.0.3', '719826cd009b9a1fa43e253db0616288c682826' => '4.1.0.3', # (hotfixes1, only Windows) '89ea49ddacd9aa532507cbf852f2bb22b1ace28' => '4.1.0.4', # Final ################## # 4.1.1 versions 'a990db030b8125868501634ff662be1d89d0868' => '4.1.1.1', '7e4286b58adc75a14f6d83f53a03b6c11fa2903' => '4.1.1.2', # (hotfix1) # 4.1.2 'bf15ac65c2167fb1ef3daf3710609d4a4c369a9' => '4.1.2.1', '281b75f427729060b6446ddb3777b32f957a8fb' => '4.1.2.2', '40b2d7fde7e8d2d7bc5a449dc65df4d08a7dd38' => '4.1.2.3', # unscheduled, Final # 4.1.3 'b42498da0e3f91b17e51b55c8295ec4f8f22087' => '4.1.3.1', '70feb7d99726f064edab4605a8ab840c50ec57a' => '4.1.3.2', # Final # 4.1.4 '414ce1317b94ce49e6044b84baf237918e9a659' => '4.1.4.1', '0a0440ccc0227ad9829de5f46be37cfb6edcf72' => '4.1.4.2', # Final # 4.1.5 'e0a1805d063a472a7b281ae3977a26d42a48b20' => '4.1.5.1', 'a02f36998a4af5e2f9fbec2b7e9f70a8b0bc934' => '4.1.5.2', '1c1366bba2ba2b554cd2ca4d87c06da81c05d24' => '4.1.5.3', # unscheduled, Final # 4.1.6 'a59ce81388f477fc89db57f0c27f222f31884eb' => '4.1.6.1', '40ff705089295be5be0aae9b15123f687c05b0a' => '4.1.6.2', # Final ################## # 4.2.0 versions 'c2b9ad37f8a8de9c7dbdd76c86aecf6388107056' => '4.2.0.0.a1', # alpha1 'f4ca7b35f580827ad2c69ea6d29f7c9b48ebbac7' => '4.2.0.0.b1', # beta1 '1a27be92e320f97c20d581a69ef1c8b99ea9885d' => '4.2.0.0.b2', # beta2 '7bf567613a536ded11709b952950c9e8f7181a4a' => '4.2.0.1', 'cd65d6220c5694ee7012d7863bcde3455c9e3c30' => '4.2.0.2', '601a398b803303d1a40a3299729531824fe0db56' => '4.2.0.2', # buildfix1 'c63c03decdf780d8fb80823950665b782ec9ecd0' => '4.2.0.3', '05dceb5d363845f2cf968344d7adab8dcfb2ba71' => '4.2.0.4', # unscheduled, Final # 4.2.1 'd7dbbd7842e6a58b0f521599204e827654e1fb8b' => '4.2.1.1', # rc1, was made final # 4.2.2 '3be8cda0bddd8e430d8cda1ebfd581265cca5a0f' => '4.2.2.1', # rc1, was made final # 4.2.3 '3d4fc3d9dbf8f4c0aeb61498a81f91c5b7922f13' => '4.2.3.1', '7c5c769e412afd32da4d946d2cb0c8b0674e95e0' => '4.2.3.2', '6c3586f855673fa6a1576797f575b31ac6fa0ba3' => '4.2.3.3', '882f8a0a489bc99a9e60c7905a60226254cb6ff0' => '4.2.3.3', # hotfix1, Final # 4.2.4 'd4c441391e20647b3d2e8dde4d20aa868e77e515' => '4.2.4.1', '63150712c6d317d27ce2db16eb94c2f3d7b699f8' => '4.2.4.2', # Final # 4.2.5 '881bb88abfe2992c6cede97c23e64a9885de87de' => '4.2.5.1', '61cb170a04bb1f12e77c884eab9192be736ec5f5' => '4.2.5.2', # Final '6ff819b65674ae6c83f3cbab9e4a4c2b292a7a94' => '4.2.5.2', # hotfix for windows (i.e. only built version for win) # 4.2.6 '5fdddf655fba363e34f755715238d0943a44857e' => '4.2.6.1', '185f2ce4dcc34af9bd97dec29e6d42c39557298f' => '4.2.6.2', # Final '3fd416d4c6db7d3204c17ce57a1d70f6e531ee21' => '4.2.6.3', # unscheduled, 4.2.6-secfix # 4.2.7 'ad618ebe74a072c4ad8fae3b902f6ff1be98983d' => '4.2.7.1', '933c0aa564ec4f8883ed5732c866db48dca4dac5' => '4.2.7.2', # Final # 4.2.8 - after-EOL-release '4044db1653798618515c987464157abee9229c11' => '4.2.8.1', '48d50dbfc06349262c9d50868e5c1f630a573ebd' => '4.2.8.2', # Final ################## # 4.3.0 versions '46cfcd5a05aa1d13fecd73f5a25b64b8d8dd6781' => '4.3.0.0.a1', # alpha1 '2e39c7e59c8fc8b16a54c3d981dceef27fb0c07f' => '4.3.0.0.b1', # beta1 'b7cfa1eab1cb1e94f71d6df6612b73f231d0bf92' => '4.3.0.0.b1', # beta1-hotfix1 '02d957703b758bfbd3aee0d349f65c4273bead78' => '4.3.0.0.b2', # beta2 'a06aa316117a6ff0f05c697c82831c227812d810' => '4.3.0.0.b1', # beta1-buildfix1 '67f5430184326974072b65403ef1d9d934fc4481' => '4.3.0.1', # rc1 '9ed0c4329cf13f882dab0ee8b9ecd7b05e4aafbb' => '4.3.0.1', # rc1-buildfix1 '14ed55896fdfcb93ff437b85c4f3e1923d2b1409' => '4.3.0.2', # rc2 'fcd3838c4097f7817b5b3984fd88a44e1edd8548' => '4.3.0.3', # rc3 '08ebe52789a201dd7d38ef653ef7a48925e7f9f7' => '4.3.0.3', # rc3-buildfix1 '62ad5818884a2fc2e5780dd45466868d41009ec0' => '4.3.0.4', # Final # 4.3.1 'c4b15cd4d00dec6b266fa830b4ba73e31ae6ce73' => '4.3.1.1', '958349dc3b25111dbca392fbc281a05559ef6848' => '4.3.1.2', # Final # 4.3.2 'f9b3ad49d92181b0a1fe7e76f785a2c2cd0847d3' => '4.3.2.1', 'edfb5295ba211bd31ad47d0bad0118690f76407d' => '4.3.2.2', # Final # 4.3.3 '65dc54c61032b7ebe54405cba6b4fb172b9af7d6' => '4.3.3.1', # initial tag, no builds done '7d55112667c8fcddb67bc3803796b46c93aa56b0' => '4.3.3.1', # rc1-buildfix1 '9bb7eadab57b6755b1265afa86e04bf45fbfc644' => '4.3.3.2', # Final # 4.3.4 'bc356b2f991740509f321d70e4512a6a54c5f243' => '4.3.4.1', # Final (unscheduled additional release) # 4.3.5 '8fd0451cc08e6a5310bed8b7ad1c46b93c1c6889' => '4.3.5.1', '3a87456aaa6a95c63eea1c1b3201acedf0751bd5' => '4.3.5.2', # Final # 4.3.6 '9629686a67dd1f357477c13325e45a66f3452bb9' => '4.3.6.1', 'd50a87b2e514536ed401c18000dad4660b6a169e' => '4.3.6.2', # Final # 4.3.7 'f08731f5dacd79f6348052311f5b237b002d78da' => '4.3.7.1', '8a35821d8636a03b8bf4e15b48f59794652c68ba' => '4.3.7.2', # Final ################## # 4.4.0 versions 'e73cb2cc40530caa75d588833c4b690e4f49f630' => '4.4.0.0.a1', # alpha1 (calc rendering probs) '24f0a5815f581dd9a7f09d30213a379edee6e9ac' => '4.4.0.0.a2', # alpha2 '9af3d21234aa89dac653c0bd76648188cdeb683e' => '4.4.0.0.b1', # beta1 'be92f32b8f21603a6b7a75dd645f7475bdee519d' => '4.4.0.0.b2', # beta2 '1ba9640ddd424f1f535c75bf2b86703770b8cf6f' => '4.4.0.1', 'a3603970151a6ae2596acd62b70112f4d376b990' => '4.4.0.2', 'de093506bcdc5fafd9023ee680b8c60e3e0645d7' => '4.4.0.3', # Final # 4.4.1 'b5ac74bf8683a92078a2bc8aff97d4b436af63cb' => '4.4.1.1', '45e2de17089c24a1fa810c8f975a7171ba4cd432' => '4.4.1.2', # Final # 4.4.2 '93fc8832889bf050a10ec6d0171dae213adc9b55' => '4.4.2.1', 'c4e993994148596de57daf68d2e9ff859520e773' => '4.4.2.2', # unreleased 'c4c7d32d0d49397cad38d62472b0bc8acff48dd6' => '4.4.2.2', # rc2-buildfix2 Final # 4.4.3 'b2f347f2ac68821efc00b6f1793cda90af748118' => '4.4.3.1', '88805f81e9fe61362df02b9941de8e38a9b5fd16' => '4.4.3.2', # Final # 4.4.4 '0396d3e8a6d28185695c6422dbdf78aa24ba67d1' => '4.4.4.1', '24c5f9979e61fde7b098af60756a4890e5713390' => '4.4.4.1', # buildfix1 'f784c932ccfd756d01b70b6bb5e09ff62e1b3285' => '4.4.4.2', '2c39ebcf046445232b798108aa8a7e7d89552ea8' => '4.4.4.3', # Final # 4.4.5 '1b6df295803ea040dab1b48b5424da8d78d94cf0' => '4.4.5.1', 'a22f674fd25a3b6f45bdebf25400ed2adff0ff99' => '4.4.5.2', # Final '0117cb452ebc0a76746570e606c6aef5718b1c50' => '4.4.5.3', # unreleased, CVE disclosure incertainity.. # 4.4.6 '86eeaa3ce8281ef4034ee1f97d7fa699482d04d2' => '4.4.6.1', '008d5d0ddffba0b82de2a2c36a65b9cba0a6b328' => '4.4.6.2', 'e8938fd3328e95dcf59dd64e7facd2c7d67c704d' => '4.4.6.3', # Final # 4.4.7 'ff36774456acc538223589597da53fd987db12e9' => '4.4.7.1', 'f3153a8b245191196a4b6b9abd1d0da16eead600' => '4.4.7.2', # Final ################## # 5.0.0 versions '77a35997fa7cff387b5b135ff0c42155f80e9884' => '5.0.0.0.a1', # alpha1 'f0853d5c2c38b050fbfd48e09cd0bf0b400aaef8' => '5.0.0.0.a1', # alpha1-builfix1 '0a16c3dda4150008d9be6f24cbd15ac198d116d3' => '5.0.0.0.b1', # beta1 '059fa2b7a3bda92168c65c61e50cc5c6fda8cfac' => '5.0.0.0.b2', # beta2 '900960d3e4220f7e04f45c9bf45a1cd92cd06aff' => '5.0.0.0.b2', # beta2-buildfix1 '96345c15d8ab19c49014f055fe41ba8e1f421e5c' => '5.0.0.0.b3', # beta3 '9a0b23dd0ab9652e0965484934309f2d49a7758e' => '5.0.0.1', 'a26d58f11b99b6aeddf7f7884effea188cc6e512' => '5.0.0.2', 'f79b5ba13f5e6cbad23f8038060e556217e66632' => '5.0.0.3', 'cf112dc905650fb985306a7a03d2fe3fcc6c978f' => '5.0.0.4', '1b1a90865e348b492231e1c451437d7a15bb262b' => '5.0.0.5', # Final '437e4abdf9e72fd0a6e6f8697a0e659bc77f9b10' => '5.0.0.5', # hotfix1 (gtk window-icon fix, linux only) Final # 5.0.1 '13f702ca819ea5b9f8605782c852d5bb513b3891' => '5.0.1.1', '81898c9f5c0d43f3473ba111d7b351050be20261' => '5.0.1.2', # Final # 5.0.2 '9a18d52abbdfbdc2ac9acebec2b92e7859eb73b7' => '5.0.2.1', '37b43f919e4de5eeaca9b9755ed688758a8251fe' => '5.0.2.2', # Final # 5.0.3 'fd8cfc22f7f58033351fcb8a83b92acbadb0749e' => '5.0.3.1', 'e5f16313668ac592c1bfb310f4390624e3dbfb75' => '5.0.3.2', # Final # 5.0.4 '2def61bcbb29a7a8611b833682fe1291910b11ad' => '5.0.4.1', '2b9802c1994aa0b7dc6079e128979269cf95bc78' => '5.0.4.2', # Final # 5.0.5 '7609023f63524a6c8326f6c82e7e23f55a5b7bb5' => '5.0.5.1', '55b006a02d247b5f7215fc6ea0fde844b30035b3' => '5.0.5.2', # Final # 5.0.6 '4ce937670f417d473bfbb3d9ddf30aa5a524fb53' => '5.0.6.1', 'b3fbfa99158a1030fb79f0ba72b6851afc3c7895' => '5.0.6.2', '490fc03b25318460cfc54456516ea2519c11d1aa' => '5.0.6.3', # Final, respin of rc2 with newer openssl ################## # 5.1.0 versions 'a8e4f75fe264f6ece37c154951cff53f2f4fa3e4' => '5.1.0.0.a1', # alpha1 '0b48731919433e46e4fda7e5a5ca27c08c28b981' => '5.1.0.0.a1', # alpha1-builfix1 '6289ed9bfa8915e6cba2cf001deb4d73773f8ca3' => '5.1.0.0.b1', # beta1 '13010a13177025f633c9b85adcb3edf6920e44e3' => '5.1.0.0.b1', # beta1-buildfix1 '53054959a12edc6510f51b94ddc9b73d27aedaf6' => '5.1.0.0.b2', # beta2 'bcace328aabc4c8c10b56daa87da0a2ee6579b5a' => '5.1.0.1', 'ecd3574d51754b043f865cf5bafee286d24db7cc' => '5.1.0.2', '5e3e00a007d9b3b6efb6797a8b8e57b51ab1f737' => '5.1.0.3', # Final # 5.1.1 'c43cb650e9c145b181321ea547d38296db70f36e' => '5.1.1.1', 'fe4d9e69c82c6ee6db3c27cd5e2d47558afa80ac' => '5.1.1.2', '89f508ef3ecebd2cfb8e1def0f0ba9a803b88a6d' => '5.1.1.3', # Final # 5.1.2 '5f8868b93c074a1680a0e0909a12a29516351466' => '5.1.2.1', '2603b69c5ec5981bb5f053f8ebfd1f3de00a4c29' => '5.1.2.1', # buildfix1 'd3bf12ecb743fc0d20e0be0c58ca359301eb705f' => '5.1.2.2', # Final # 5.1.3 '115e0e13d3c8ac1452186ad2394abce2dd5c2b57' => '5.1.3.1', '644e4637d1d8544fd9f56425bd6cec110e49301b' => '5.1.3.2', # Final # 5.1.4 'a4d48e4ff0e9f93e78b6356ca7b0b6303e360356' => '5.1.4.1', 'f99d75f39f1c57ebdd7ffc5f42867c12031db97a' => '5.1.4.2', # Final # 5.1.5 'bb431b2be5fb7772067efc27a3cc98b6927c7b4c' => '5.1.5.1', '7a864d8825610a8c07cfc3bc01dd4fce6a9447e5' => '5.1.5.2', # Final # 5.1.6 'f3e25ec0581f5012f54d8810dcddd5824f4ee374' => '5.1.6.1', '07ac168c60a517dba0f0d7bc7540f5afa45f0909' => '5.1.6.2', # Final ################## # 5.2.0 versions '902b28a39528b6c92602e9b521a1d0861be1caf9' => '5.2.0.0.a1', # alpha1 'd1c24dad0806ab7dcd8dba93d76e6a7a38f48c72' => '5.2.0.0.b1', # beta1 '1e9933ef611c66bcded94b84052543c78cf1c223' => '5.2.0.0.b1', # beta1-hotfix1 'ae12e6f168ba39f137fc110174a37c482ce68fa4' => '5.2.0.0.b2', # beta2 'fcbcb4963bda8633ba72bd2108ca1e802aad557d' => '5.2.0.1', 'a7567a46e5d2953c320b13eb88a3981c4f9bd1e0' => '5.2.0.2', '7dbd85f5a18cfeaf6801c594fc43a5edadc2df0c' => '5.2.0.3', '066b007f5ebcc236395c7d282ba488bca6720265' => '5.2.0.4', # Final # 5.2.1 '2d75cf29e6d05e44c404f0547047f1da6563d380' => '5.2.1.1', '31dd62db80d4e60af04904455ec9c9219178d620' => '5.2.1.2', # Final # 5.2.2 '3c2231d4aa4c68281f28ad35a100c092cff84f5d' => '5.2.2.1', '8f96e87c890bf8fa77463cd4b640a2312823f3ad' => '5.2.2.2', # Final # 5.2.3 '01ec8f357e651ca9656837b783cf7e6a32ee4d92' => '5.2.3.1', 'c019706a50de7fcb07d0d528b09b46a887562beb' => '5.2.3.2', 'd54a8868f08a7b39642414cf2c8ef2f228f780cf' => '5.2.3.3', # Final # 5.2.4 '9b50003582f07ac674d6451e411e9b77cccd2b22' => '5.2.4.1', '8783ba61dfea562444cb6390e69aa8b3c5e91156' => '5.2.4.2', '3d5603e1122f0f102b62521720ab13a38a4e0eb0' => '5.2.4.2', # buildfix1, Final # 5.2.5 '0312e1a284a7d50ca85a365c316c7abbf20a4d22' => '5.2.5.1', # Final # 5.2.6 'e37e437cb0cfa0eab9d2e98a23f5074ae118d3df' => '5.2.6.1', 'a3100ed2409ebf1c212f5048fbe377c281438fdc' => '5.2.6.2', # Final # 5.2.7 'bf0fa7b86c7c0592941ede29fca6fafff642a948' => '5.2.7.1', '2b7f1e640c46ceb28adf43ee075a6e8b8439ed10' => '5.2.7.2', # Final ################## # 5.3.0 versions 'f4ca1573fcf445164c068c1046ab5d084e1b005f' => '5.3.0.0.a1', # alpha1 '690f553ecb3efd19143acbf01f3af4e289e94536' => '5.3.0.0.b1', # beta1 'a7e30712ad6d8bc9286007b37aa581983e0caba3' => '5.3.0.0.b2', # beta2 '3b800451b1d0c48045de03b5b3c7bbbac87f20d9' => '5.3.0.1', # rc1 '5ad7b2889021c491af62f7930a4b1cb631392f16' => '5.3.0.2', # rc2 '7074905676c47b82bbcfbea1aeefc84afe1c50e1' => '5.3.0.3', # Final # 5.3.1 '72fee18f394a980128dc111963f2eefb05998eeb' => '5.3.1.1', 'e80a0e0fd1875e1696614d24c32df0f95f03deb2' => '5.3.1.2', # Final # 5.3.2 '7f6693c08cc110b9721245fc4bd4f1712e0c086c' => '5.3.2.1', '6cd4f1ef626f15116896b1d8e1398b56da0d0ee1' => '5.3.2.2', # Final # 5.3.3 '46360c72c4823cefeaa85af537fba22bd568da7e' => '5.3.3.1', '3d9a8b4b4e538a85e0782bd6c2d430bafe583448' => '5.3.3.2', # Final # 5.3.4 '1b1606c6e1203cdc3fd5ffbc16e74ecea300241a' => '5.3.4.1', 'f82d347ccc0be322489bf7da61d7e4ad13fe2ff3' => '5.3.4.2', # Final # 5.3.5 '020db1aa8142e57290f8a21e4df31185392d0e38' => '5.3.5.1', '50d9bf2b0a79cdb85a3814b592608037a682059d' => '5.3.5.2', # Final # 5.3.6 '686f202eff87ef707079aeb7f485847613344eb7' => '5.3.6.1', # Final, to fix translation issues in 5.3.5 # 5.3.7 '376eaac300a303c4ad2193fb7f6a7522caf550b9' => '5.3.7.1', '6b8ed514a9f8b44d37a1b96673cbbdd077e24059' => '5.3.7.2', # Final ################## # 5.4.0 versions '0b9f9bef65bb21ebb6a64aafad448f7f62dc824a' => '5.4.0.0.a1', # alpha1 '8672113ead4e403c55e31b1d9a3d1e0f3b299577' => '5.4.0.0.b1', # beta1 '3cc1cdd8ee50f144e5514da51800a08119754d8f' => '5.4.0.0.b2', # beta2 '962a9c4e2f56d1dbdd354b1becda28edd471f4f2' => '5.4.0.1', # rc1 '2b906d450a44f2bbe506dcd22c51b3fa11dc65fd' => '5.4.0.2', # rc2 '92c2794a7c181ba4c1c5053618179937228ed1fb' => '5.4.0.3', # rc3 '7556cbc6811c9d992f4064ab9287069087d7f62c' => '5.4.0.3', # hotfix1, Final # 5.4.1 'a5be49f0c45fe24a575c7f41559aa8fc79a781a2' => '5.4.1.1', 'ea7cb86e6eeb2bf3a5af73a8f7777ac570321527' => '5.4.1.2', # Final # 5.4.2 'dfa67a98bede79c671438308dc9036d50465d2cb' => '5.4.2.1', '22b09f6418e8c2d508a9eaf86b2399209b0990f4' => '5.4.2.2', # Final # 5.4.3 '32c8895c6cae21571f364dbb059f419a743ee44d' => '5.4.3.1', 'facb2780328619f348f035e17baa8b2984099ca4' => '5.4.3.2', '92a7159f7e4af62137622921e809f8546db437e5' => '5.4.3.2', # hotfix1, Final # 5.4.4 'da790616461e15a10c95a80eb8ef8ee7b726c114' => '5.4.4.1', '2524958677847fb3bb44820e40380acbe820f960' => '5.4.4.2', # Final # 5.4.5 '79c9829dd5d8054ec39a82dc51cd9eff340dbee8' => '5.4.5.1', # unscheduled, due to unresponsible secfix # 5.4.6 '7d6c666f03cf1f0a0c2c51a17c0f67a8d5a8012b' => '5.4.6.1', '4014ce260a04f1026ba855d3b8d91541c224eab8' => '5.4.6.2', # Final # 5.4.7 'ef425abf896c652d177000096228d1dbcfe9c7af' => '5.4.7.1', 'c838ef25c16710f8838b1faec480ebba495259d0' => '5.4.7.2', # Final ################## # 6.0.0 versions 'c6800cf490f53fde5b2426a9ef8841495c81ed17' => '6.0.0.0.a1', # alpha1 'c1d1f859b268f650143d48f294999cda0fa57350' => '6.0.0.0.a1', # alpha1-buildfix1 '97471ab4eb4db4c487195658631696bb3238656c' => '6.0.0.0.b1', # beta1 '13edaaa12f25de343fce136064e27da66c1c4fa4' => '6.0.0.0.b2', # beta2 'd2bec56d7865f05a1003dc88449f2b0fdd85309a' => '6.0.0.1', # rc1 'd13b6f5b8f357b3226a359e4ed08281d7d81d238' => '6.0.0.2', # rc2 '06b618bb6f431d27fd2def25aa19c833e29b61cd' => '6.0.0.2', # rc2-buildfix2 '64a0f66915f38c6217de274f0aa8e15618924765' => '6.0.0.3', # Final # 6.0.1 '1a915a3f2906b005770de982c78bfccb21913273' => '6.0.1.0.0+', # unreleased, testbuild for crashfix '60bfb1526849283ce2491346ed2aa51c465abfe6' => '6.0.1.1', # unscheduled, due to unresponsible secfix # 6.0.2 'f7f06a8f319e4b62f9bc5095aa112a65d2f3ac89' => '6.0.2.1', # shortened cylce to to early 6.0.1 # 6.0.3 '2c0e9fedbe970b30beb17ba5e8acc8d1679471b4' => '6.0.3.1', 'e2c9f5e42b90771faa7eee1c4fc77191de3067e6' => '6.0.3.1', # rc1-buildfix1 '62abb169b0efa1520d7bee1f586865354060b989' => '6.0.3.1', # rc1-buildfix1 '8f48d515416608e3a835360314dac7e47fd0b821' => '6.0.3.2', # Final # 6.0.4 'a63363f6506b8bdc5222481ce79ef33b2d13c741' => '6.0.4.1', '9b0d9b32d5dcda91d2f1a96dc04c645c450872bf' => '6.0.4.2', # Final # 6.0.5 '0588a1cb9a40c4a6a029e1d442a2b9767d612751' => '6.0.5.1', '54c8cbb85f300ac59db32fe8a675ff7683cd5a16' => '6.0.5.2', # Final # 6.0.6 'dc68ad6c5cde3c62874b96422f2e5e8252499bad' => '6.0.6.1', '0c292870b25a325b5ed35f6b45599d2ea4458e77' => '6.0.6.2', # Final # 6.0.7 '5d2cb2a5dd04fe174b336488731eb50bbb5faed3' => '6.0.7.1', '78c12ce5f2b8960f18b204a7ea82f971769f1679' => '6.0.7.2', 'dc89aa7a9eabfd848af146d5086077aeed2ae4a5' => '6.0.7.3', # Final ################## # 6.1.0 versions 'cb47f0d320994e001bc38dc2ee9b7d957b15e6ab' => '6.1.0.0.a1', # alpha1 '8c76dfe1284e211954c30f219b3a38dcdd82f8a0' => '6.1.0.0.b1', # beta1 '0f4d2060bc90b4008fbc8e6d9a49ec7eeea60b78' => '6.1.0.0.b2', # beta2 '378e26bd4f22a135cef5fa17afd5d4171d8da21a' => '6.1.0.1', # rc1 '4f67d5dc17167597fb047841e0bc8e88de758a40' => '6.1.0.2', # rc2 'b3972dcf1284967612d5ee04fea9d15bcf0cc106' => '6.1.0.2', # rc2-buildfix2 'efb621ed25068d70781dc026f7e9c5187a4decd1' => '6.1.0.3', # Final # 6.1.1 '2718b4a18dfcc6a54ebe5f7b801ee7a47fa81e0c' => '6.1.1.1', # unreleased, testbuild for crashfix '5d19a1bfa650b796764388cd8b33a5af1f5baa1b' => '6.1.1.2', # unscheduled, due to unresponsible secfix # 6.1.2 '65905a128db06ba48db947242809d14d3f9a93fe' => '6.1.2.1', # Final, shortened cycle due to secfix # 6.1.3 'a9670562c26181ec3afbe381c9ff499ae88c98b7' => '6.1.3.1', '86daf60bf00efa86ad547e59e09d6bb77c699acb' => '6.1.3.2', # Final # 6.1.4 '25073d18caee244880112e52c4a7e71f6081b3a9' => '6.1.4.1', '9d0f32d1f0b509096fd65e0d4bec26ddd1938fd3' => '6.1.4.2', # Final # 6.1.5 'f18954c1ba9116b85c32b6bdbc0188d3e0fd24c7' => '6.1.5.1', '90f8dcf33c87b3705e78202e3df5142b201bd805' => '6.1.5.2', # Final # 6.1.6 '6008c19e488329dfd81fea1b4444c29eddaac14f' => '6.1.6.1', '104be1be28d1c5200e1c50b0a00747fe8c907aa8' => '6.1.6.2', '5896ab1714085361c45cf540f76f60673dd96a72' => '6.1.6.3', # Final ################## # 6.2.0 versions 'ff46ad24d1d3cbcea45895520483ed1fd4ff488b' => '6.2.0.0.a1', # alpha1 'd1b41307be3f8c19fe6f1938cf056e7ff1eb1d18' => '6.2.0.0.b1', # beta1 '0412ee99e862f384c1106d0841a950c4cfaa9df1' => '6.2.0.1', # rc1 '2ce5217b30a543f7666022df50f0562f82be0cff' => '6.2.0.2', # rc2 '98c6a8a1c6c7b144ce3cc729e34964b47ce25d62' => '6.2.0.3', # Final # 6.2.1 '757c58e8cb70b2982843211a54750fb3cd79acd5' => '6.2.1.1', '7bcb35dc3024a62dea0caee87020152d1ee96e71' => '6.2.1.2', # Final # 6.2.2 'fcd633fb1bf21b0a99c9acb3ad6e526437947b01' => '6.2.2.1', '2b840030fec2aae0fd2658d8d4f9548af4e3518d' => '6.2.2.2', # Final # 6.2.3 '9ba025bafb03b962c34687cf87806cc03a3a7436' => '6.2.3.1', 'aecc05fe267cc68dde00352a451aa867b3b546ac' => '6.2.3.2', # Final # 6.2.4 '170a9c04e0ad25cd937fc7a913bb06bf8c75c11d' => '6.2.4.1', '2412653d852ce75f65fbfa83fb7e7b669a126d64' => '6.2.4.2', # Final # 6.2.5 '9a940173fab1747f02322bc89779759d52b3a086' => '6.2.5.1', '1ec314fa52f458adc18c4f025c545a4e8b22c159' => '6.2.5.2', # Final # 6.2.6 '1f09ad467b449704e317fb11998b9a2ad7184670' => '6.2.6.1', '684e730861356e74889dfe6dbddd3562aae2e6ad' => '6.2.6.2', # Final # 6.2.7 '23edc44b61b830b7d749943e020e96f5a7df63bf' => '6.2.7.1', # Final, additional release ################## # 6.3.0 versions '547edd20e527fb02900f6174973770d26306e2e7' => '6.3.0.0.a1', # alpha1 'a187af327633f5f00363be5131bd21a13e0f1a7b' => '6.3.0.0.b1', # beta1 '6c6edded7133daf2d8d0b2ea7ae25b8109c5c064' => '6.3.0.0.b2', # beta2 '41ac97386aba908b6db860cfb4cfe2da871886ae' => '6.3.0.1', # rc1 '728469fa359ba8c83d812146293a0b0aa53945ba' => '6.3.0.2', # rc2 'c75130c129d9c5e43b76e4f26881b3db8bdb5c91' => '6.3.0.3', # rc3 '057fc023c990d676a43019934386b85b21a9ee99' => '6.3.0.4', # Final # 6.3.1 'e979878b49a48dab15ebe528f238b88125e32c65' => '6.3.1.1', 'b79626edf0065ac373bd1df5c28bd630b4424273' => '6.3.1.2', # Final # 6.3.2 'db810050ff08fd4774137f693d5a01d22f324dfd' => '6.3.2.1', '98b30e735bda24bc04ab42594c85f7fd8be07b9c' => '6.3.2.2', # Final ); # Descriptions of the target versions # The entry must point to the newest version # 'gitid' is the content of program/versionrc:buildid of the newest version # 'id' is what is going to be shown in the update information dialog # 'update_src' specifies the target url. When 'substitute' is set to true, # you can use there a string like # 'https://www.libreoffice.org/download/?type=&lang=&version=3.5.6' # where '' and '' will be substitued with the right value # NOTE: '&' in the URL has to be escaped as & $update_map = array( 'stable' => array('gitid' => '23edc44b61b830b7d749943e020e96f5a7df63bf', 'id' => 'LibreOffice 6.2.7', 'version' => '6.2.7', 'update_type' => 'text/html', 'update_src' => 'https://www.libreoffice.org/download/download/?lang=&version=6.2.7', 'substitute' => true ), 'latest' => array('gitid' => '98b30e735bda24bc04ab42594c85f7fd8be07b9c', 'id' => 'LibreOffice 6.3.2', 'version' => '6.3.2', 'update_type' => 'text/html', 'update_src' => 'https://www.libreoffice.org/download/download/?lang=&version=6.3.2', 'substitute' => true ), ); # Print the update xml function print_update_xml($buildid, $os, $arch, $lang, $pkgfmt) { global $build_hash_to_version, $update_map, $localize_map, $debug; if(!array_key_exists($buildid, $build_hash_to_version) || $buildid == $update_map['stable']['gitid'] || $buildid == $update_map['latest']['gitid'] || ($arch == "PowerPC" && $os == "MacOSX") ) { error('No update for your LibreOffice version.'); } # We upgrade X.Y.Z to X.Y+1.Z for all X iff Z < latest.Z # If today we are at: old: 3.5.4, new: 3.6.1 # 3.4 3.5 3.6 # .0 N N N # .1 N N *(N) # .2 O O # .3 O O # .4 O O(*) # .5 O # # ie. we have essentially two rectangular regions. # print "ver : " . $build_hash_to_version[$buildid] . " - " . # $update_map['latest']['version'] . "\n"; $user_ver = explode( '.', $build_hash_to_version[$buildid] ); $latest_ver = explode( '.', $update_map['latest']['version'] ); if ($latest_ver[2] >= $user_ver[2]) { # third digit at index 2 $new = $update_map['latest']; } else { $new = $update_map['stable']; } # don't downgrade RC/prerelease users if(version_compare($new['version'], substr($build_hash_to_version[$buildid], 0, 5), '<')) { error('No update for your LibreOffice version.'); } # try to localize $update_src = $new['update_src']; if (array_key_exists($update_src, $localize_map)) { $lang = strtolower($lang); $src_array = $localize_map[$update_src]; if (array_key_exists($lang, $src_array)) $update_src = $src_array[$lang]; else { $lang_only = strtok($lang, '-'); if ($lang_only != false && array_key_exists($lang_only, $src_array)) $update_src = $src_array[$lang_only]; } } # substitute '' and '' with the right values if (array_key_exists('substitute', $new) && $new['substitute']) { $target_type = ''; switch ($os) { case 'Linux': if ($pkgfmt == '') $pkgfmt = 'rpm'; if ($arch == 'X86_64') $target_type = $pkgfmt . "-x86_64"; else $target_type = $pkgfmt . "-x86"; break; case 'MacOSX': if ($arch == 'X86_64') $target_type = 'mac-x86_64'; else { $target_type = 'mac-x86'; error('No 32bit update available - for OS X 10.8 or later, please install 64bit version of LibreOffice.'); } break; case 'Windows': if ($arch == 'X86_64') $target_type = 'win-x86_64'; else $target_type = 'win-x86'; break; } $target_lang = strtok($lang, '-'); if ($target_lang == false || $lang == 'en-US' || $lang == 'ca-XV' || $lang == 'en-GB' || $lang == 'en-ZA' || $lang == 'pa-IN' || $lang == 'pt-BR' || $lang == 'sa-IN' || $lang == 'sw-TZ' || $lang == 'zh-CN' || $lang == 'zh-TW') { $target_lang = $lang; } if ($target_lang == '') $target_lang = 'en-US'; $patterns = array(); $replacementns = array(); $patterns[0] = '//'; $replacements[0] = $target_type; $patterns[1] = '//'; $replacements[1] = $target_lang; $update_src = preg_replace($patterns, $replacements, $update_src); } $gitid = $new['gitid']; if (array_key_exists('gitid' . $os, $new)) $gitid = $new['gitid' . $os]; # inst:buildid is a legacy thing, and we need to set it in order to # update 3.5.0 Beta1 and Beta2 to further versions too # We can get rid of it when there is no Beta1 or Beta2 in use out there $out = ' ' . $new['id'] . ' ' . $gitid . ' ' . $os . ' ' . $arch . ' ' . $new['version'] . ' 9999 '; print $out; if ($debug) error_log($out); } # Main # to test me paste: # # HTTP_USER_AGENT='LibreOffice 3.5 (c9944f7-48b7ff5-0507789-54a4c8a-8b242a8; Windows; x86; BundledLanguages=en-US af ar as ast be bg bn bo br brx bs ca ca-XV cs cy da de dgo dz el en-GB en-ZA eo es et eu fa fi fr ga gd gl gu he hi hr hu id is it ja ka kk km kn ko kok ks ku lb lo lt lv mai mk ml mn mni mr my nb ne nl nn nr nso oc om or pa-IN pl pt pt-BR ro ru rw sa-IN sat sd sh si sk sl sq sr ss st sv sw-TZ ta te tg th tn tr ts tt ug uk uz ve vi xh zh-CN zh-TW zu)' HTTP_ACCEPT_LANGUAGE=cs-CZ php ./check.php # $info = get_update_info(); if (!array_key_exists('product', $info) || ($info['product'] != 'LibreOffice' && $info['product'] != 'LibreOfficeDev' && $info['product'] != 'LOdev')) error('Error: Only LibreOffice can access the update service.'); print_update_xml($info['buildid'], $info['os'], $info['arch'], $info['lang'], $info['pkgfmt']);