Среда исполнения PHP плагина на r24 и r25¶
Редакция 2026-11-02. В какой среде работает код плагина Dune HD на прошивках r24 и r25: версия и модули PHP,
php_serverиphp-cgi, uid, переменные окружения, подстановкаFS_PREFIX, каталоги, HTTP, фон, лимиты, отладка. Источники: наблюдения на tv188b261021_0117_r25(device) и260827_0003_r24(device, снимки процессов); код tv188b r24 и r25 (code); код APK260724_0207_r24— там разобрана подстановка путей (code, платформаandroid-atv); SDK — только как справка и с пометкой. Чего нет ни в коде, ни в наблюдениях, глава не утверждает. Факты о других устройствах — только где сказано. Каждое фактическое предложение ссылается на claim id. Дополнение (2026-11-03): наблюдения запроса 11 — один прогон, tv188b261021_0117_r25, зондkb_probe11; на другие прошивки и устройства они не переносятся. Дополнение (2026-11-03): повторы запроса 12 (curl_multi,bg2) — тоже один прогон на том же устройстве;HTTP_HOSTразведён по способу задать URL, окружение sh-CGI в §4.1 отделено отphp-cgi. Дополнение (2026-11-03): запрос 13 (зондkb_probe13, один прогон на том же устройстве) —$_SERVERи$_ENVphp_server, окружение самогоphp-cgi(§4.1),execпервым словом и после пробела (§3.2),ffmpeg(§3.4), повторbg2со снимками процессов (§3.8).Рядом: очередь операций, тайм-ауты и жизнь
php_server— «Операции плагина, тайм-ауты иphp_server»; ошибки прошивки — «Реестр ошибок прошивки и SDK»; приёмы плагинов (HTTP, хранение, фон, CGI) — «Приёмы разработки плагинов Dune HD»; лог и отладка в плагинах — «Приёмы разработки плагинов Dune HD»; сводка по прошивкам — «Матрица совместимости возможностей плагина».
Коротко: вопрос → ответ¶
| Вопрос | Ответ | Где |
|---|---|---|
| Какая версия PHP? | 5.3.6: r25, device (устройство r25)1; строка PHP/5.3.6 есть в пяти сборках r22, r24, r25 (код r22, r24, r25)2 |
§2 |
| Разрядность целых? | r25, device: PHP_INT_SIZE = 4 (устройство r25)3 |
§2 |
| Какие расширения загружены? | tv188b r25, один прогон: 32 в php_server (устройство r25)4, те же и cgi-fcgi в CGI (устройство r25)5 |
§2 |
| Какой текущий каталог? | tv188b r25, один прогон: php_server — / (устройство r25)6, CGI зонда — /data/data/com.dunehd.app/flashdata/plugins/kb_probe11/www/cgi-bin (устройство r25)7 |
§1.3 |
| Кто исполняет код плагина? | php_server, по процессу на плагин, дочерний для com.dunehd.app (устройство)8 |
§1.1 |
| Какой uid? | php_server — 1000 (r25) (устройство r25)9, system (r24) (устройство r24)10; CGI на r25 — root (устройство r25)11 |
§1.3 |
Что такое FS_PREFIX? |
r25: /data/data/com.dunehd.app (устройство r25)12 — корень, куда встроенный PHP отображает /tmp, /config, /flashdata (устройство r25)13 |
§3.2 |
| Куда писать постоянные данные? | data_dir_path (устройство r25)14; онлайн-обновление его сохраняет (устройство r25)15 |
§3.3 |
| Куда писать временные? | tmp_dir_path (устройство r25)16 |
§3.3 |
Что переживает am force-stop? |
tv188b r25, один прогон: файлы в tmp_dir_path, /tmp и data_dir_path (устройство r25)17; перезагрузка не проверялась |
§3.3 |
| Почему путь в команде не сработал? | r25: в "…" префикс не подставляется, в '…' подставляется (устройство r25)18 |
§3.2 |
| Как выполнить команду от root? | /system/dunehd/dunehd_service do …: r25 — uid 0 (устройство r25)19 |
§3.5 |
| Какой cURL? | r25: 7.67.0 с OpenSSL 1.0.1u (устройство r25)20; части констант нет (устройство r25)21 | «HTTP из PHP плагина на r24 и r25» §3.6, §4.2 |
| Какой CA-бандл? | /firmware/certs/ca-bundle.crt (устройство r25)22 данных Mozilla 2022 года (код r22, r24, r25)23 |
«HTTP из PHP плагина на r24 и r25» §3.6 |
Есть ли wget? |
r25: $FS_PREFIX/bin/wget, ссылка на BusyBox (устройство r25)24; в одном прогоне вызов по имени к /ping — ok и rc=0 (устройство r25)25, полным путём — rc=126 (устройство r25)26 |
«HTTP из PHP плагина на r24 и r25» §3.6 |
Куда идёт hd_print? |
r25: /tmp/run/<плагин>.log (устройство r25)27, в этом же файле — fd 1 и 2 php_server (устройство r25)28 |
§3.11 |
Где переменные окружения в php_server? |
tv188b r25, один прогон: в $_ENV и getenv(); $_SERVER содержал только REQUEST_TIME, argv и argc (устройство r25)29 |
§4.1 |
Есть ли ffmpeg? |
tv188b r25, один прогон: ffmpeg -version без пути и $FS_PREFIX/firmware/scripts/ffmpeg.sh -version из php_server — rc=0, «ffmpeg version 7.1.3» (устройство r25)30 |
§3.4 |
Почему exec('/config/x.sh') — rc=127? |
tv188b r25, по одному прогону: путь первым словом $FS_PREFIX не получил (устройство r25)31, а sh /config/x.sh — получил (устройство r25)32 |
§3.2 |
| Сколько живёт PHP-вызов? | до тайм-аута операции: handle_user_input на r25 — 60 с по умолчанию (устройство r25)33, по тайм-ауту php_server убивается (устройство r25)34 |
§3.9 |
1. Модель: где исполняется PHP плагина¶
Код плагина работает в одном из нескольких процессов, и от процесса зависят uid, окружение и настройки PHP
(устройство r25)35. Основной —
php_server: на r25 он живёт между вызовами оболочки (устройство r25)36 и исполняет main.php плагина (устройство r25)37. CGI и отдельные скрипты идут в php-cgi:
по коду r24 php-cgi связан с libphp5.so (код r24)38, но SAPI и настройки у него другие (§1.3). Shell-скрипты плагина — третий контекст, без PHP (устройство r25)39.
1.1. php_server: PHP плагина¶
На tv188b r24 и r25 наблюдались три php_server — по одному на плагин; все они — дочерние процессы com.dunehd.app
(устройство)8. Запускает его модуль
php_driver.cpp оболочки (код r24): /firmware/bin/php_server (код r24)40; на r25 это
происходит при первом вызове плагина, а не при регистрации (устройство r25)41. Формат аргументов —
php_server <plugin_name> <php_script_path> <base_log_dir> <system_properties_path><input_fd> <output_fd>
(код r24)42; PHP встроен через libphp5.so
(код r24)43.
На r25 с оболочкой он связан двумя каналами pipe (устройство r25)44, а других открытых дескрипторов,
кроме /dev/null на fd 0 и лога на fd 1 и 2, у него нет (устройство r25)28. При старте он загружает по порядку
bootstrap.php, dune_api.php, dune_plugin.php, dune_plugin_fw.php, затем выполняет определение системных свойств,
загружает dune_config.php и только потом программу плагина (устройство r25)37. Поэтому к коду верхнего уровня
main.php уже определены DunePluginFw, DuneSystem, PLUGIN_OP_HANDLE_USER_INPUT и hd_print
(устройство r25)45, и подключать их самому не нужно.
В логе системные файлы названы /firmware_ext/php/<файл>, исполняются как
/data/data/com.dunehd.app/firmware_ext/php/<файл> (устройство r25)46, а get_included_files() показывает
/system/dunehd/firmware_ext/php/<файл> (устройство r25)47. include_path на r25 —
.:<каталог плагина>:/data/data/com.dunehd.app/firmware_ext/php/include (устройство r25)48; в строках
php_server r24 есть шаблон ini_set('include_path', '.:%s:%s'); (код r24)49. Текущий каталог и значения ini на r25 — §1.3.
Когда процесс перезапускается, что происходит со статическими переменными и что считается сбоем, — в
«Операции плагина, тайм-ауты и php_server». Файла system_properties.txt, путь к которому
php_server получает в аргументах, на r25 в /tmp/plugins/<плагин> нет: каталог пуст
(устройство r25)50; значения читайте из DuneSystem::$properties, а не из файла (§3.1).
1.2. php-cgi: CGI и отдельные PHP-скрипты¶
CGI-скрипт плагина run_plugin_cgi запускает как shell-скрипт, а PHP-обработчик плагин должен вызвать сам
(код r24)51. Встроенный CGI download_subtitle — двухстрочная обёртка:
дописать .php к SCRIPT_FILENAME и запустить $FS_PREFIX/firmware_ext/php/php-cgi -c .
(код r24)52. На r25 плагин с такой обёрткой исполняет свой <имя>.php: getcwd() —
www/cgi-bin, php.ini — из того же каталога, get_include_path() — . (устройство r25)53. По коду r24 php-cgi
связан с libphp5.so и содержит лишь CGI-обвязку (код r24)38.
В r24 тот же php-cgi прошивка использует и как отдельный процесс без HTTP: run_async_worker.sh запускает им
async_worker.php (код r24)54. На r24 этот процесс работает от system
(u:r:system_app:s0) с PPID 1 (устройство r24)55, тогда как CGI на r25 — от root
(устройство r25)11. Обёртки, переменные PLUGIN_*, свой php.ini и свой php-cgi в пакете —
«Приёмы разработки плагинов Dune HD».
URL и запуск CGI по SDK. По SDK встроенный HTTP-сервер отдаёт $install_dir_path/www/* по http://<STB>/plugins/<plugin_name>/* и исполняет
CGI из www/cgi-bin/* по http://<STB>/cgi-bin/plugins/<plugin_name>/* (SDK)56; на r25 это наблюдалось и для файла www/index.txt
(устройство r25)57, и для CGI (устройство r25)58. Страница httpd SDK — выдержка из busybox/networking/httpd.c, и не всё
перечисленное в ней поддерживается текущими прошивками (SDK)59; сказанное в ней — по SDK, на r24+ не подтверждено. По выдержке URL, начинающийся с /cgi-bin/, считается CGI-скриптом: сервер
переходит в каталог скрипта и запускает его, установив QUERY_STRING и другие переменные (SDK)60, за описанием которых страница отсылает к
спецификации NCSA (SDK)61. На r25 текущий каталог CGI — …/www/cgi-bin плагина (устройство r25)62, а наблюдавшиеся переменные — в §4.1. В
выдержке приведён запуск из rc-скрипта с uid=0 под пользователем www (httpd -u www), при uid www = 80 — httpd -p 80 -u 80 … (SDK)63. Это пример из
выдержки; на r25 CGI плагина работает под uid 0 (устройство r25)11, см. §6.
Сервисные плагины (по SDK, на r24+ не подтверждено). Страница SDK описывает плагины-службы, к которым обращаются HTTP-запросом к http://localhost или
http://127.0.0.1 по пути /cgi-bin/plugins/<имя_плагина>/do?cmd=… (SDK)64; см. также dunehd_service в §1.4.
mediainfo_service (2013_04_18) получает длительность файла и делает скриншот (SDK)65; /D/some folder/file.avi
в его описании — пример UNIX-пути (SDK)66. 3g_service (2013_05_20) — SMS и 3G: команды (SDK)67, поля
status (SDK)68; фоновое 3G-подключение при каждой загрузке выключено
(SDK)69, интернет проверяет через ping 8.8.8.8 (SDK)70, а при нём не поддерживаются приём и передача SMS
(SDK)71. dvb_service (2013_04_28) ставит системное время по DVB-каналу, но не одновременно с воспроизведением DVB-канала
(SDK)72; альтернатива — автозапуск скрипта dvb_time из /config/boot (SDK)73. file_service (2013_08_12) знает delete_file, get_info и read_text_file
(SDK)74: директорию не удаляет (SDK)75, get_info возвращает type, size, mtime
(SDK)76, текст идёт после строки @data (SDK)77, ошибка — result = error и error_message
(SDK)78.
1.3. Сравнение php_server и php-cgi на r25¶
Все строки таблицы — tv188b 261021_0117_r25, device, кроме отмеченных. Строки getcwd(), «Расширения», max_execution_time, memory_limit и magic_quotes_gpc —
один прогон запроса 11, зонд kb_probe11; значения ini — этого зонда, а не всех плагинов. Прогон подтвердил и строки uid, php_sapi_name(), PHP_VERSION (устройство r25)79, include_path (устройство r25)80.
В запросе 13 (зонд kb_probe13, один прогон) php_server снова дал php_sapi_name() = hd, PHP_VERSION 5.3.6, getcwd() = / и uid 1000
(устройство r25)81, а php-cgi (/data/data/com.dunehd.app/firmware_ext/php/php-cgi), запущенный busybox httpd для CGI зонда, —
cgi-fcgi и uid 0 (устройство r25)82.
| Что | php_server |
php-cgi из CGI плагина |
Claim |
|---|---|---|---|
| Кто запускает | оболочка, родитель com.dunehd.app |
httpd через run_plugin_cgi и обёртку плагина |
(устройство r25)83 |
| uid | 1000 (system) |
0 | (устройство r25)84 |
getcwd() |
/ |
/data/data/com.dunehd.app/flashdata/plugins/kb_probe11/www/cgi-bin |
(устройство r25)79 |
| Расширения | 32, перечень — §2 | те же 32 и cgi-fcgi |
(устройство r25)85 |
max_execution_time |
0 | 30 | (устройство r25)80 |
memory_limit |
128M | 128M | (устройство r25)80 |
magic_quotes_gpc |
1 | 0 | (устройство r25)80 |
| SELinux-контекст | u:r:system_app:s0 |
u:r:shell:s0 |
(устройство r25)86 |
php_sapi_name() |
hd |
cgi-fcgi |
(устройство r25)87 |
PHP_VERSION, разрядность |
5.3.6, 32 бита | то же | (устройство r25)88 |
include_path |
., каталог плагина, firmware_ext/php/include |
. |
(устройство r25)89 |
date.timezone |
Europe/Moscow | пусто при php.ini без этого ключа, date() пишет Warning |
(устройство r25)90 |
PHP_PROC_OPEN_SH |
$FS_PREFIX/bin/sh |
не задана | (устройство r25)91 |
| Окружение процесса | своё, с HOME, TMPDIR, PHP_PROC_OPEN_SH и др. (запрос 13); переменные — в $_ENV, не в $_SERVER |
то же, что у sh-CGI httpd; HOME и TMPDIR нет (запрос 13) |
(устройство r25)92 |
| Куда идут ошибки | /tmp/run/<плагин>.log |
stderr обёрток — $FS_PREFIX/tmp/dune_apk_cgi_err.log (код r24) |
(устройство r25, код r24)93 |
Подстановка FS_PREFIX |
есть | есть | (устройство r25)94 |
1.4. Shell-скрипты плагина и dunehd_service¶
Скрипт plugin_system из global_action на r25 работает под uid 1000 с контекстом u:r:system_app:s0, текущим каталогом
/ и FS_PREFIX=/data/data/com.dunehd.app (устройство r25)39. Команды поставщика из стороннего плагина — тоже
uid 1000 и каталог / (устройство r25)95. Демон dunehd_service на r24 работает от root с контекстом
u:r:shell:s0 (устройство r24)96; как им пользоваться, — §3.5. httpd на r24 и r25 — тоже root
(устройство)97. Сам процесс com.dunehd.app на r24 — system
(устройство r24)98, и в его окружении нет FS_PREFIX и PHP_PROC_OPEN_SH
(устройство r24)99.
2. Версия PHP и модули¶
Строка PHP/5.3.6 есть в libphp5.so пяти исследованных сборок: tv188b r22, r24, r25, tv175u r24 и APK r24
(код r22, r24, r25)2. На r25 PHP_VERSION = 5.3.6 подтверждён и в php_server
(устройство r25)1, и в php-cgi (устройство r25)100. В тех же сборках — OpenSSL
1.0.1u (код r22, r24, r25)101 и PCRE 8.11 (код r22, r24, r25)102. Бинарные файлы при этом разные: r22
(e7d22b70…), r24 (e28ffc74…) и r25 (4a31ef48…), причём файл tv188b r24 совпадает с APK 260724_0207_r24 и tv175u 260724_0207_r24
(код r22, r24, r25)103.
На tv188b r25 в прогоне запроса 11 php_server зонда kb_probe11 перечислил 32 загруженных расширения: Core, date, ereg, libxml, openssl, pcre,
sqlite3, zlib, ctype, curl, dom, fileinfo, filter, hash, iconv, json, mbstring, pcntl, SPL, PDO, posix, Reflection, session, SimpleXML,
soap, sockets, standard, tokenizer, xml, xmlreader, xmlwriter, zip (устройство r25)4; CGI того же зонда — те же и cgi-fcgi
(устройство r25)5. О других прошивках — §7.
Ниже — имена из strings libphp5.so пяти сборок (code): наличие
имени значит «так собрано», а не «проверено вызовом». «Нет наблюдения» в столбце r25 — вызов не проверялся, хотя расширение группы есть в перечне выше (устройство r25)4.
| Группа | Имена в strings | Наблюдение на r25 | Claim |
|---|---|---|---|
| JSON | json_encode, json_decode, json_last_error |
да, §4.2 | (устройство r25, код r22, r24, r25)104 |
| cURL | curl_init, curl_setopt, curl_setopt_array, curl_exec, curl_getinfo, curl_error, curl_errno, curl_close, curl_copy_handle, curl_version |
да, «HTTP из PHP плагина на r24 и r25» §3.6 | (устройство r25, код r22, r24, r25)105 |
| cURL multi | curl_multi_init, curl_multi_add_handle, curl_multi_exec, curl_multi_select, curl_multi_getcontent, curl_multi_info_read, curl_multi_remove_handle, curl_multi_close |
да, с падением, «HTTP из PHP плагина на r24 и r25» §3.6 | (устройство r25, код r22, r24, r25)106 |
| mbstring | mb_strlen, mb_substr, mb_convert_encoding, mb_detect_encoding, mb_check_encoding |
mb_strlen — да, таблица ниже |
(устройство r25, код r22, r24, r25)107 |
| iconv | iconv_strlen, iconv_substr, iconv_mime_decode, iconv_get_encoding, iconv_set_encoding |
нет наблюдения | (код r22, r24, r25)108 |
| PCRE | preg_match, preg_match_all, preg_replace, preg_split, preg_last_error |
нет наблюдения | (код r22, r24, r25)109 |
| OpenSSL | openssl_encrypt, openssl_decrypt, openssl_sign, openssl_verify, openssl_random_pseudo_bytes |
openssl_x509_parse — да |
(устройство r25, код r22, r24, r25)110 |
| pcntl | pcntl_fork, pcntl_waitpid, pcntl_signal, pcntl_signal_dispatch, pcntl_exec |
pcntl_fork, pcntl_waitpid — да, таблица ниже |
(устройство r25, код r22, r24, r25)111 |
| posix | posix_getuid, posix_getpid, posix_kill, posix_setuid |
posix_getuid, posix_kill — да |
(устройство r25, код r22, r24, r25)112 |
| sockets | socket_create, socket_connect, socket_select, socket_read, socket_write |
нет наблюдения | (код r22, r24, r25)113 |
| XML | simplexml_load_string, xml_parser_create, libxml_use_internal_errors |
нет наблюдения | (код r22, r24, r25)114 |
| Классы | DOMDocument, SoapClient, ZipArchive, SQLite3 |
DOMDocument, ZipArchive, SQLite3 — да, таблица ниже; SoapClient — нет наблюдения |
(устройство r25, код r22, r24, r25)115 |
| hash, сессии, zlib | hash_hmac, hash_file, session_start, gzcompress, gzuncompress |
нет наблюдения | (код r22, r24, r25)116 |
Проверка вызовом (tv188b r25, php_server зонда kb_probe11, запрос 11, один прогон). Результат относится к этому единственному вызову; другие методы тех же
расширений он не проверяет.
| Вызов | Результат | Claim |
|---|---|---|
mb_strlen для двух букв UTF-8 |
2 | (устройство r25)117 |
SQLite3(':memory:')->querySingle('SELECT 1') |
1 | (устройство r25)118 |
ZipArchive::open с CREATE |
true | (устройство r25)119 |
DOMDocument::loadXML('<a><b/></a>') |
true | (устройство r25)120 |
pcntl_fork, в потомке posix_kill(getmypid(), 9), в родителе pcntl_waitpid |
потомок 22745; pcntl_waitpid вернул 22745, status=9 |
(устройство r25)121 |
popen('echo kb11-popen', 'r'), pclose |
строка kb11-popen, pclose — 0 |
(устройство r25)122 |
proc_open без cwd и env |
rc=0, оболочка — §3.4; с cwd и env — §3.2 |
(устройство r25)123 |
libphp5.so тянет libxml2.so.2, libcurl.so.5, libssl.so.1.0.0, libcrypto.so.1.0.0, libiconv.so.2, libz.so
(код r22, r24, r25)124; libiconv.so.2 не находит php-cgi, запущенный снаружи (устройство r25)125 (§3.11).
Целые и JSON (r25, device, php_server и php-cgi). PHP_INT_MAX = 2147483647 (устройство r25)3.
Литерал 3000000000 в коде даёт integer 2147483647; PHP_INT_MAX + 1 даёт 2147483648, а time() * 1000 — 13-значное число
без обрезки (устройство r25)126. json_decode() целых вне 32 бит возвращает 2147483647 или −2147483648
при json_last_error() = 0 (устройство r25)127, а 12345678901234567890 — double
(устройство r25)128. Как плагины обходят потерю больших чисел, — §5.
3. Задачи¶
3.1. Узнать свои пути: DuneSystem::$properties и FS_PREFIX¶
На r25 DuneSystem::$properties плагина из flashdata содержит 8 ключей: sdk_version 1.0.0, plugin_name,
install_dir_path, tmp_dir_path, data_dir_path, plugin_www_url, plugin_cgi_url, few_buttons_remote_type
(устройство r25)129. Значения путей уже с FS_PREFIX
(устройство r25)130, а URL — с явным портом 80:
http://127.0.0.1:80/plugins/<p>/ и http://127.0.0.1:80/cgi-bin/plugins/<p>/ (устройство r25)131. Сверка с перечнем SDK — §4.4.
По коду r24 сам префикс возвращает HD::get_fs_prefix из FS_PREFIX, пустую строку — если переменной нет; HD::is_apk,
is_fw_apk и get_apk_package_name читают HD_APK, HD_FW_APK и APK_PACKAGE_NAME
(код r24)132. На tv188b r25 FS_PREFIX есть в php_server
(устройство r25)12 и в php-cgi CGI (устройство r25)133. На tv175u r24 скрипт init эту
переменную не выставляет (код r24)134. Поэтому брать путь из свойства или HD::get_fs_prefix
надёжнее, чем зашивать /data/data/com.dunehd.app.
В CGI обёртка передаёт PLUGIN_NAME, PLUGIN_CGI_DIR и SCRIPT_FILENAME
(устройство r25)58; как плагины достраивают остальное —
«Приёмы разработки плагинов Dune HD».
3.2. Понять, что делает абсолютный путь: подстановка FS_PREFIX¶
На r25 встроенный PHP переписывает абсолютные пути (устройство r25)135 и пути в команде shell_exec (устройство r25)18. Поэтому один и тот же путь значит разное в PHP,
в команде и в adb shell.
Что видно на r25 (device, php_server и php-cgi). realpath('/config') = /data/data/com.dunehd.app/config,
realpath('/firmware') = /system/dunehd/firmware, realpath('/firmware_ext/php') = /system/dunehd/firmware_ext/php, хотя в
корне ФС из adb shell /firmware и /firmware_ext нет, а /config — другой каталог (устройство r25)135.
is_dir('/flashdata') = true при realpath /data/data/com.dunehd.app/flashdata, хотя в корне ФС его нет
(устройство r25)136. CA-бандл доступен и как
/firmware/certs/ca-bundle.crt, и как $FS_PREFIX/firmware/certs/ca-bundle.crt (устройство r25)22.
Файловые функции (код APK r24). Префикс добавляется только к пути, начинающемуся с /
(код r24)137. Корни: всё, что начинается с /tmp, /firmware, /config, /flashdata,
/fconfig, ровно /system/dunehd/init и /D, и ещё один образец по адресу 0x353448
(код r24)138. Сравнение — по префиксу без границы каталога: подходят и
/firmware_ext/…, /tmpX, /config2/… (код r24)139. Для /D и второго образца после
FS_PREFIX вставляется /tmp/mnt (код r24)140. Без FS_PREFIX путь не меняется
(код r24)141.
_php_add_fs_prefix вызывают 22 функции, среди них _php_curl_setopt, simplexml_load_file, chdir, glob, readfile,
rename, unlink, chmod, touch, php_stat, _php_stream_mkdir, _php_stream_opendir, _php_stream_open_wrapper_ex,
zend_stream_open (код r24)142. Отдельно префикс учитывает virtual_file_ex
(код r24)143, а её вызывает 21 функция, включая tsrm_realpath,
php_do_open_temporary_file и php_zip_extract_file (код r24)144.
Две оговорки по коду APK r24: открытие потока с поиском по include_path идёт без _php_add_fs_prefix
(код r24)145, а чтение /sys/class/net/eth0/address при заданной HD_APK
подменяется на /tmp/run/dune_mac.txt (код r24)146; значение HD_APK при этом не
проверяется (код r24)147.
Команды. На r25 shell_exec добавляет $FS_PREFIX к словам /tmp/…, /firmware/…, /config/…, /flashdata/… и к пути в
одинарных кавычках, но не к /etc/…, не к x/tmp/f и не к пути в двойных кавычках (устройство r25)18. Этот
дефект описан в BUG-012. По коду APK r24
_php_add_fs_prefix_to_cmd вызывают php_exec, zif_shell_exec, zif_popen, zif_proc_open и virtual_popen
(код r24)148; путь проверяется, только если перед / стоит пробел, !, &,
апостроф, скобка, ;, <, > или обратная кавычка (код r24)149.
Ещё два правила того же кода касаются первого слова команды. Слово, оканчивающееся на /php-cgi, заменяется на
$FS_PREFIX/firmware_ext/php/php-cgi с добавлением -c <исходный каталог>
(код r24)150. Команда, начинающаяся с $FS_PREFIX или пути под корнем, не из
/firmware/bin/ и не из /firmware_ext/php/, получает спереди sh (код r24)151.
Первое слово команды в коде libphp5.so r25. Если команда начинается с / и путь требует префикса, но не начинается с
/firmware/bin/ или /firmware_ext/php/, _php_add_fs_prefix_to_cmd ставит в начало результата sh
(код r25)152. $FS_PREFIX к пути у / эта функция дописывает, только если байт перед / —
пробел, !, &, апостроф, (, ), ;, <, > или обратная кавычка; для / в первом символе команды проверяется байт
перед началом строки (код r25)153. Слово-путь после пробела (как /config/… в наблюдении
shell_exec выше (устройство r25)18) и путь первым словом команды проходят, таким образом, разные ветви
одного кода. Вызывают ли эту функцию и exec, и shell_exec, и чем объясняется прогон ниже, — гипотезы в §7.
Первое слово, cwd, env и include_path на r25 (tv188b, php_server, запрос 11, один прогон). exec команды /config/kbp11_x.sh first-word вернул rc=127 и
sh: /config/kbp11_x.sh: No such file or directory, а file_get_contents того же пути с use_include_path=true прочитал 49 байт (устройство r25)154;
гипотеза о причине — §7. file_get_contents('lib/kbp11_steps.php', true) прочитал 15678 байт (устройство r25)155.
proc_open с cwd=/tmp вернул rc=0, pwd=/tmp и увидел каталог kb_probe11 (устройство r25)156. proc_open с env={KB11_E:one} вернул rc=0,
KB11_E=one и PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:. (устройство r25)157 — не тот PATH, что в снимке окружения
php_server (§4.1) (устройство r25)158. Какие из гипотез по коду APK r24 это проверяет и что осталось открытым, — §7.
Первое слово и слово после пробела в одном прогоне (tv188b r25, php_server, запрос 13, один прогон). С PHP_DEBUG=1
exec("/config/kbp13_x.sh first-word 2>&1") снова вернул rc=127 и sh: /config/kbp13_x.sh: No such file or directory: путь
первым словом $FS_PREFIX не получил (устройство r25)31. В том же прогоне exec("echo /config/kbp13_x.sh")
напечатал /data/data/com.dunehd.app/config/kbp13_x.sh, а exec("sh /config/kbp13_x.sh after-sh") запустил скрипт с argv0
/data/data/com.dunehd.app/config/kbp13_x.sh — путь после пробела префикс получил (устройство r25)32.
shell_exec("echo x; /config/kbp13_x.sh after-semicolon") тоже выполнил скрипт по пути с $FS_PREFIX
(устройство r25)159; перед / там стоял пробел, поэтому прогон не различает, сработал ; или пробел
(устройство r25)159. Практически: свой скрипт под /config запускайте как sh /config/…, а не путём первым словом
(устройство r25)160. Строк о замене команд этот прогон
не проверял; почему, — §3.11 (устройство r25)161.
libphp5.so tv188b r24 совпадает с APK по sha256, а у r25 файл другой
(код r22, r24, r25)103. Перенос правил кода на r24 и r25 — в §7.
3.3. Выбрать, куда писать, и что переживёт перезапуск¶
Значения — у плагинов из flashdata на tv188b r25, если не сказано иное. php_server работает как system
(устройство r25)19; этому же пользователю после регистрации плагина принадлежат /tmp/plugins/<p> и plugins_data/<p>
(устройство r25)162.
| Что | Путь | Что с ним происходит | Claim |
|---|---|---|---|
install_dir_path |
$FS_PREFIX/flashdata/plugins/<p>; у встроенных каталог плагина — $FS_PREFIX/firmware_ext/plugins/<p> |
файлы пакета; при замене плагина удаляются каталоги установки (код APK r24) | (устройство r25, код r24)163 |
data_dir_path |
$FS_PREFIX/flashdata/plugins_data/<p>, в том числе у встроенных |
постоянные данные; файлы и cookies пережили два онлайн-обновления | (устройство r25)164 |
tmp_dir_path |
$FS_PREFIX/tmp/plugins/<p>, он же /tmp/plugins/<p> для PHP |
существует уже после регистрации плагина | (устройство r25)165 |
Свой каталог в /tmp |
например /tmp/kb_probe5/props.txt |
зонд php_server записал туда файл |
(устройство r25)27 |
| Лог | /tmp/run/<p>.log, предел 3072000 байт |
см. §3.11 | (устройство r25)166 |
| pid | /tmp/run/<p>.pid |
переписывается при каждом новом запуске php_server |
(устройство r25)167 |
/config |
для PHP — $FS_PREFIX/config, в adb shell /config — другой каталог |
boot-скрипты — §13.1 |
(устройство r25)135 |
| Точки монтирования | /tmp/mnt/network, smb, storage, права drwxrwxrwx system:system |
SMB-ресурсы — в /tmp/mnt/smb/<N> |
(устройство r25)168 |
Запись и am force-stop (tv188b r25, php_server зонда kb_probe11, запрос 11, один прогон). Зонд создал и удалил файл kbp11_w.tmp в /sdcard, /config, /tmp,
tmp_dir_path и data_dir_path (устройство r25)169; fopen на запись /data/data/com.dunehd.app/firmware/kbp11_w.tmp вернул
failed to open stream: Read-only file system (устройство r25)170. Файлы по 5 байт в tmp_dir_path, /tmp и data_dir_path сохранились после
am force-stop и запуска com.dunehd.app (pid 15016 → 22982) (устройство r25)17. /data/data/com.dunehd.app/tmp в этом прогоне оказался символической
ссылкой на /tmp (устройство r25)171. Перезагрузка не проверялась — §7.
/tmp на tv188b r24 — tmpfs, его монтирует init (код r24)172. По коду APK в режиме fw_apk
каталог <FS-префикс>/tmp заменяется ссылкой на системный /tmp, а firmware и firmware_ext — ссылками на /system/dunehd/…
(код r24)173. Флаги однократных действий в /tmp/run
(код r24) (код r24)174 на r25 датированы моментом загрузки системы (устройство r25)175, а при
следующих стартах приложения boot и boot_end не повторяются (устройство r25)176. Перезапуск самого
php_server на r25 обнуляет статические переменные (устройство r25)177, поэтому состояние, которое должно
пережить его, держат в файле.
По SDK data_dir_path может отсутствовать на устройствах без System Storage и Flash Memory Storage (SDK)178, а после
каждой записи в постоянное хранилище нужен sync (SDK)179 (по SDK, на r24+ не подтверждено). Настройки и кэш в
плагинах — §10, перенос данных на накопитель —
§10.5, что
сохраняется при обновлении — «Онлайн-обновление плагина».
3.4. Запустить внешнюю команду: shell_exec, proc_open, PATH¶
На r25 shell_exec выполняет команду через /system/bin/sh (устройство r25)180. proc_open по коду APK r24 берёт
оболочку из PHP_PROC_OPEN_SH, а без неё — /bin/sh (код r24)181, и зовёт её как
sh -c <команда> (код r24)182. В php_server r25 эта переменная указывает на
$FS_PREFIX/bin/sh, то есть на libxxx_bash.so (устройство r25)183, а в php-cgi CGI её нет
(устройство r25)133. В прогоне запроса 11 на tv188b r25 proc_open без cwd и env из php_server выполнил sh-команду с rc=0, и readlink /proc/$$/exe в ней
показал /system/bin/libxxx_bash.so (устройство r25)123. Какой интерпретатор получит proc_open в php-cgi, — см. §7.
По коду APK r24 cwd у proc_open передаётся в chdir() как есть, без префикса (код r24)184. Наблюдения r25 с cwd и env — §3.2.
PATH. Во фрагменте окружения демонов и php-cgi он начинается с $FS_PREFIX/firmware/bin:$FS_PREFIX/bin:/bin: r25 —
httpd и network_manager (устройство r25)185, r24 — php-cgi shell_ext
(устройство r24)186. В самом com.dunehd.app на r24 это не так: PATH=/product/bin:… без $FS_PREFIX
(устройство r24)99. В php_server r25 (прогон kb_probe8) PATH начинается так же, целиком он приведён в §4.1
(устройство r25)158; из php_server r25 which wget находит $FS_PREFIX/bin/wget (устройство r25)12.
ffmpeg (tv188b r25, php_server, запрос 13, один прогон). Все три вызова — FS_PREFIX=$FS_PREFIX sh $FS_PREFIX/firmware/scripts/ffmpeg.sh -version,
sh $FS_PREFIX/firmware/scripts/ffmpeg.sh -version без явного FS_PREFIX и ffmpeg -version без пути — вернули rc=0 и «ffmpeg version 7.1.3»
(устройство r25)30. $FS_PREFIX/firmware/bin/ffmpeg — символическая ссылка на /data/data/com.dunehd.app/lib/libxxx_ffmpeg.so, а
firmware/scripts/ffmpeg.sh — обычный файл 457 байт (устройство r25)187.
Утилиты. На r25 /system/bin содержит 46 файлов libxxx_*.so с правами -rwxr-xr-x (устройство r25)188.
$FS_PREFIX/bin/httpd и $FS_PREFIX/bin/wget — ссылки на BusyBox (устройство r25)189, в r24 это v1.35.0 (код r24)190. В bin APK r24, среди прочего, — sh, bash, tar и
24 апплета BusyBox: nohup, sed, awk, xargs, killall, date, ps, unzip, wget, tail и другие
(код r24)191.
3.5. Выполнить команду от root: dunehd_service do¶
На r25 из php_server (uid=1000(system), u:r:system_app:s0) команда
shell_exec('/system/dunehd/dunehd_service do id') выводит uid=0(root), контекст u:r:shell:s0
(устройство r25)19. Клиент, демон, обёртка и файл окружения одинаковы в tv188b r22, r24 и r25
(код r22, r24, r25)192.
Код shell_ext r25 так удаляет пакеты: system() с /system/dunehd/dunehd_service do LD_LIBRARY_PATH= pm uninstall '<пакет>'
(код r25)193. В launch_ext_app r25 команда с таким началом идёт в ветку «run command», а am start … — в apk_helper
(устройство r25)194.
§3.6–§3.7. HTTP из PHP, cURL, CA-бандл, локальные URL, lcreg, wget — перенесены в «HTTP из PHP плагина на r24 и r25».
3.8. Фон и отдельные процессы¶
Долгий код не стоит держать в PHP-вызове: операция ограничена по времени (§3.9), а на r25 команды IP Control
(устройство r25)195 и клавиши (устройство r25)196 ждут её конца (подробно —
«Операции плагина, тайм-ауты и php_server»). Схема «запустить процесс, вернуть действие, читать файл по
таймеру» и варианты плагинов — в §13.4, а
демоны и автозапуск — в §13.
Что показывает сама прошивка:
- Отдельный PHP-процесс.
run_async_worker.shr24 делаетexec php-cgi -f <плагин>/async_worker.php, вывод — в$FS_PREFIX/tmp/plugins/<плагин>/error.log(код r24)54. С ним общаются файлами в/tmp/plugins/<плагин>/async_worker:wake_flag,stop_flag,request.<id>,response.<id>(код r24)197. - Форк из PHP. Конструктор
HDHttpLoaderвshell_extr25 создаёт пару UNIX-сокетов и делаетpcntl_fork(код r25)198. На уровне кода это пример, а не наблюдение; строка «exitting from forked child» есть и вphp_serverr24 (код r24)43. Вызовpcntl_forkизphp_serverзонда на r25 — §2. - Что видно в процессах r24.
php-cgiasync_worker—system, PPID 1 (устройство r24)55; демон стороннегоDune_backup, который его скрипт запускает черезdunehd_service do, если этот файл есть (код)199, — root,u:r:shell:s0, PPID 1 (устройство r24)200.
Фоновый процесс из shell_exec (tv188b r25, php_server, запрос 11, один прогон). shell_exec('sleep 61 >/dev/null 2>&1 &') вернулся за 0.01 с; процесс sleep с PPid=1 оставался
после kill php_server и сохранял открытые pipe-дескрипторы 93 и 98 (устройство r25)201. Шаг bg2 того же запроса
разобран в §7.
shell_exec("sleep 61 &") без перенаправления (tv188b r25, php_server, запрос 12, один прогон). Перед шагом bg2 шаг noop завершился в
новом php_server, и выборка процессов не показала ни одного sleep 61 (устройство r25)202. Шаг bg2 записал
begin и метку перед shell_exec("sleep 61 &"), но записи возврата в отчёте нет, а end bg2 за 75 с окна ожидания не появился
(устройство r25)203. Оболочка отменила handle_user_input по тайм-ауту 30.0 с, убила PHP-сервер и записала
отмену через 30.333 с с сообщением «Превышено время операции» (устройство r25)204. После окна ожидания выборка процессов не вывела ни
sleep 61, ни его pipe- и socket-дескрипторов, а php_server зонда уже не найден
(устройство r25)205. Команда с перенаправлением в запросе 11 вернулась за 0.01 с
(устройство r25)201, без перенаправления в запросе 12 возврат до отмены операции не записан
(устройство r25)203; это по одному прогону каждого вида, и почему возврата нет в отчёте, лог не показывает.
Тот же bg2 со снимками процессов (tv188b r25, php_server, запрос 13, один прогон). php_server 15502 записал метку перед
shell_exec("sleep 61 &"), записи о возврате нет; через 30 с оболочка отменила handle_user_input по тайм-ауту, убила PHP-сервер и
показала «Превышено время операции» — повтор запроса 12 (устройство r25)206. Процесс sleep 61 на 1, 5, 29, 32 и
45 с имел PPid 1, держал fd 1 на pipe, а также fd 101 (чтение) и 110 (запись) на pipe — те же номера, что в аргументах php_server
«… 101 110» (устройство r25)207. php_server исчез к 20:01:24 (отмена — в 20:01:22), а sleep 61 оставался до 45 с и
не был виден на 62 и 70 с: он пережил php_server и завершился сам, а не вместе с ним (устройство r25)208. Почему
shell_exec не вернулся, — гипотеза в §7. Вывод для плагина: фоновую команду из shell_exec запускайте с перенаправлением вывода, как в
запросе 11, где sleep 61 >/dev/null 2>&1 & вернулся за 0.01 с (устройство r25)201.
Widget Ext запускает свои скрипты с перенаправлением вывода > /dev/null & (код)209, другие приёмы — §5.
3.9. Тайм-ауты и лимиты¶
Срок операции считает оболочка; единицы и умолчания — в «Операции плагина, тайм-ауты и php_server». Здесь
только то, что влияет на код в среде: на r25 handle_user_input без operation_timeout стартует с 60 с
(устройство r25)33, а по истечении срока оболочка останавливает php_server, и код вызова не дорабатывает
(устройство r25)34.
bootstrap.php (код r24) делает set_time_limit(0) (код r24)210; файл одинаков в r22 и r24
(код r22, r24)211. Лимит PHP, таким образом, снят, а sleep(15) при сроке 60 с дорабатывает
(устройство r25)212; в прогоне запроса 11 max_execution_time у php_server зонда — 0, у его CGI — 30 (§1.3) (устройство r25)80. В CGI разобранных плагинов фреймворк не подключается (код)213, а обёртка передаёт
php-cgi свой php.ini (устройство r25)53: на r25 php.ini shell_ext — date.timezone = UTC, display_errors = 0, log_errors = 1, error_log = /tmp/run/shell_ext_cgi.log
(код r25)214.
memory_limit в shell_ext задаёт код прошивки: main_plugin.php r24 ставит 300M, конструктор MainPlugin вызывает gc_disable()
(код r24)215, AsyncWorker ставит 200M (код r24)216; в r25 Memory::check
поднимает лимит с 300 до 500 МБ шагами по 50 МБ (код r25)217. У зонда kb_probe11 на tv188b r25 в запросе 11 memory_limit — 128M и в php_server, и в CGI (устройство r25)80; на других прошивках значение не проверялось — §7. Предел лога php_server — 3072000 байт (устройство r25)166.
3.10. Время и часовой пояс¶
В r24 bootstrap.php выставляет date.timezone из date_default_timezone_get() с комментарием «Use timezone from the environment (TZ)»
(код r24)218. На r25 в php_server это дало Europe/Moscow при getenv('TZ') = false, а date() — MSK
+0300 (устройство r25)219. В php-cgi без date.timezone в php.ini значение пусто, и date() пишет PHP Warning, хотя
date_default_timezone_get() возвращает ту же Europe/Moscow (устройство r25)220. В CGI поэтому пояс задают в php.ini или
в коде: php.ini shell_ext r25 — UTC (код r25)214.
Метки времени в логах на r25 на 3 часа меньше местного времени (устройство r25)221
(BUG-017). openssl_x509_parse() даёт
validTo_time_t = −1 для сроков позже 2038-01-19 03:14:07 UTC (устройство r25)222.
3.11. Отладить: лог, PHP_DEBUG, запуск снаружи¶
Лог php_server. По SDK лог плагина — /tmp/run/<plugin_name>.log (SDK)223; на r25 это
/data/data/com.dunehd.app/tmp/run/<плагин>.log, предел 3072000 байт, в окружении LOG_DIR=/tmp/run
(устройство r25)166. Туда попадают hd_print с префиксом [pid] [t<tid>] [время] (устройство r25)27, ошибки PHP
строкой [<файл>:<строка>] [E_WARNING] … (устройство r25)224 и этапы старта (устройство r25)37. Оператор @
запись не подавляет (устройство r25)225. По коду r24 hd_print выводит через echo
(код r24)226, а ошибки перехватывает обработчик bootstrap.php
(код r24)227; приглушают их hd_silence_warnings() и hd_restore_warnings()
(код r24)228. SDK советует hd_print вместо echo, print и printf (SDK)229 (по SDK,
на r24+ не подтверждено). Приёмы логирования —
§17.1.
Лог CGI. По коду r24 stderr CGI-скриптов пишется в $FS_PREFIX/tmp/dune_apk_cgi_err.log, больше 10000 байт — в .old
(код r24)230; на r25 там видны Segmentation fault (устройство r25)231 и предупреждения
линковщика unable to normalize "./lib" (устройство r25)232.
PHP_DEBUG. При заданной переменной изменённые команды печатаются в stdout как -C-> EEE orig command: и -C-> EEE repl command:
(код r24)233, изменённые URL — как =H=> EEE orig http: и =H=> EEE repl http:
(код r24)234 (код APK r24). В r24 tv188b печать URL тоже ограждена PHP_DEBUG
(код r24)235. В прогоне запроса 11 на tv188b r25 после wget с putenv(PHP_DEBUG=1) grep EEE по /tmp/run/kb_probe11.log не вывел строк, а успешный
результат самого wget записан (устройство r25)236; это наблюдение о логе, а не вывод, что печати нет (§7).
В запросе 13 (tv188b r25, php_server, один прогон) с PHP_DEBUG=1 печать URL в лог плагина дошла: после curl_setopt(CURLOPT_URL, …) там
появились строки «=H=> EEE orig http» и «repl http» (устройство r25)237 (подробно —
«HTTP из PHP плагина на r24 и r25» §3.6). После шага с командами grep «=H=>» не нашёл ни одной строки
(устройство r25)161; маркер команд — -C-> EEE, а зонд искал только маркер HTTP, так что печать команд не
проверена (устройство r25, код r24)238. Флаги /config/hd_debug/* — в
«Операции плагина, тайм-ауты и php_server».
Запуск снаружи. php-cgi из adb shell на r25 не стартует: CANNOT LINK EXECUTABLE, нет libiconv.so.2 при
LD_LIBRARY_PATH=$FS_PREFIX/lib:… (устройство r25)125, а в другом зонде — нет libphp5.so
(устройство r25)239. В CGI он работает, и там LD_LIBRARY_PATH=/data/data/com.dunehd.app/firmware/lib:/lib:/usr/lib
(устройство r25)240. На r25 в этих опытах правка подключаемого файла подхватилась только после смены mtime main.php
(устройство r25)241. Отладка без устройства —
§17.5.
3.12. Почему не работает: диагностическая таблица¶
Всё в таблице — tv188b r25, device, кроме отмеченных.
| Симптом | Причина или наблюдение | Что сделать | Claim |
|---|---|---|---|
Путь работает в PHP, но не в adb shell |
/flashdata и /firmware есть только для встроенного PHP |
в adb писать $FS_PREFIX/… |
(устройство r25)242 |
Команда не нашла файл по "/tmp/x" |
в двойных кавычках префикс не подставляется | одинарные кавычки | (устройство r25)18 |
| Большой id из JSON стал 2147483647 | 32-битные целые, ошибки при этом нет | переписать числа в строки до json_decode (§5) |
(устройство r25)127 |
Не определена JSON_UNESCAPED_UNICODE или CURLOPT_RESOLVE |
констант нет | §4.2 | (устройство r25)243 |
Правка lib/*.php не видна |
php_server перезапускается по mtime main.php |
touch main.php |
(устройство r25)241 |
Нет system_properties.txt |
файла нет при работающем php_server |
DuneSystem::$properties |
(устройство r25)50 |
PHP_CALL_FAILED и «Ошибка приложения» |
curl_multi к httpd плеера; в запросе 12 — curl_multi к компьютеру, отчёт обрывается на метке перед curl_multi_getcontent; Fatal error или exit(0) в handle_user_input, в запросе 11 — E_ERROR от вызова несуществующего HD::make_json_rpc_request; null из call_plugin |
«HTTP из PHP плагина на r24 и r25» §3.6; «Операции плагина, тайм-ауты и php_server» |
(устройство r25)244 |
«Превышено время операции» после shell_exec("sleep 61 &") |
запросы 12 и 13, по одному прогону: возврат shell_exec не записан, операция отменена по тайм-ауту 30 с; в запросе 13 sleep держал fd 1 на pipe и пережил php_server |
§3.8: команда с перенаправлением >/dev/null 2>&1 & в запросе 11 вернулась за 0.01 с |
(устройство r25)245 |
| «Превышено время операции» | срок операции истёк, php_server остановлен |
вынести работу в фон (§3.8) | (устройство r25)246 |
HTTPS: errno 60 у www.ssl.com |
цепочка заканчивается самоподписанным корнем: «self signed certificate in certificate chain» | BUG-001 | (устройство r25)247 |
HTTPS: errno 35 у kodikapi.com |
причина не установлена, отключение проверки не помогает | — | (устройство r25)248 |
date() в CGI пишет Warning |
в php.ini нет date.timezone |
задать ключ | (устройство r25)220 |
Время в логе расходится с date() на 3 часа |
метки лога меньше местного времени | сравнивать с поправкой | (устройство r25)221 |
$FS_PREFIX/bin/wget … \| head пуст |
причина не установлена; wget по имени в том же прогоне сработал |
вызывать по имени | (устройство r25)249 |
wget полным путём или через sh: rc=126, cannot execute binary file |
один прогон, причина не установлена; по имени в том же прогоне сработал | вызывать по имени | (устройство r25)250 |
exec('/config/kbp11_x.sh …'): rc=127, No such file or directory |
запросы 11 и 13, по одному прогону: путь первым словом $FS_PREFIX не получил; file_get_contents того же пути с use_include_path=true файл прочитал; по коду r25 путь первым словом, которому нужен префикс, получает sh, а префикс зависит от байта перед строкой (§3.2), гипотеза о причине — §7 |
sh /config/…: в запросе 13 путь после пробела префикс получил |
(устройство r25, код r25)251 |
fopen на запись в $FS_PREFIX/firmware/: Read-only file system |
один прогон; запись в каталоги §3.3 прошла | писать в data_dir_path или tmp_dir_path |
(устройство r25)252 |
php-cgi из adb: CANNOT LINK EXECUTABLE |
нет библиотек при запуске снаружи | запускать из CGI-обёртки | (устройство r25)253 |
Предупреждение в логе при @mkdir |
@ запись не подавляет |
проверять наличие заранее | (устройство r25)225 |
4. Справочник¶
4.1. Переменные окружения¶
Окружение php_server на tv188b r25. Значения одного прогона (плагин kb_probe8, pid 3005, ppid 2449, uid 1000), кроме отмеченного. Снимок относится только к php_server;
для php-cgi и других прошивок — вторая таблица.
| Переменная | Значение | Claim |
|---|---|---|
PATH |
/data/data/com.dunehd.app/firmware/bin:/data/data/com.dunehd.app/bin:/bin:/product/bin:/apex/com.android.runtime/bin:/apex/com.android.art/bin:/system_ext/bin:/system/bin:/system/xbin:/odm/bin:/vendor/bin:/vendor/xbin |
(устройство r25)158 |
HOME |
/data/user/0/com.dunehd.app/app_vlc |
(устройство r25)254 |
TMPDIR |
/data/data/com.dunehd.app/tmp |
(устройство r25)255 |
FS_BIN_PREFIX |
/data/data/com.dunehd.app |
(устройство r25)256 |
APK_PACKAGE_NAME |
com.dunehd.app |
(устройство r25)257 |
HD_APK |
1 |
(устройство r25)258 |
HD_FW_APK |
1 |
(устройство r25)259 |
HD_HTTP_LOCAL_PORT |
80 |
(устройство r25)260 |
HD_DSSD_AMEM |
0xecc5679c; в прогоне kb_probe5 (collect5) было 0x2e78afb7: значение меняется между прогонами |
(устройство r25)261 |
HD_RMCL_DISABLE_CLOPTNS |
1 |
(устройство r25)262 |
В прогоне запроса 11 (зонд kb_probe11) /proc/self/environ php_server содержал PHP_PROC_OPEN_SH=/data/data/com.dunehd.app/bin/sh, FS_PREFIX=/data/data/com.dunehd.app,
TMPDIR=/data/data/com.dunehd.app/tmp, FS_BIN_PREFIX=/data/data/com.dunehd.app и HD_HTTP_LOCAL_PORT=80 (устройство r25)263. Куда ведёт TMPDIR, — §3.3.
В прогоне запроса 13 (зонд kb_probe13) /proc/self/environ php_server содержал, кроме общих с CGI переменных, HOME=/data/user/0/com.dunehd.app/app_vlc,
TMPDIR=/data/data/com.dunehd.app/tmp, FS_BIN_PREFIX=/data/data/com.dunehd.app, APK_PACKAGE_NAME=com.dunehd.app, PHP_PROC_OPEN_SH=/data/data/com.dunehd.app/bin/sh,
LOG_MAX_FILE_SIZE=3072000 и HD_RMCL_DISABLE_CLOPTNS=1 (устройство r25)264. Читать их из PHP нужно через
$_ENV или getenv(): $_SERVER в php_server содержал только REQUEST_TIME, argv и argc, а $_ENV совпал с /proc/self/environ
(устройство r25)29.
HD_DSSD_AMEM по коду r24 читает client_authenticate в dunehd_service: при отсутствии переменной берётся get_default_env
(код r24, r25)265.
Значения по процессам и прошивкам. Для каждой строки указан процесс, где значение наблюдалось; значения php_server r25 — в снимке выше.
«sh-CGI r25» — вывод env sh-скрипта env.sh плагина kb_probe5, запущенного busybox httpd как CGI (uid 0): это окружение CGI-оболочки,
а не самого процесса php-cgi (устройство r25)266. В нём нет HOME, TMPDIR, FS_BIN_PREFIX, APK_PACKAGE_NAME, PHP_PROC_OPEN_SH, HD_DSSD_AMEM и
HD_RMCL_DISABLE_CLOPTNS, которые были в окружении php_server kb_probe8 (устройство r25)267. Окружение самого php-cgi снято в запросе 13
(зонд kb_probe13, один прогон): набор имён в /proc/self/environ php-cgi совпал с набором в env sh-обёртки того же CGI-запроса, различие — только в
значении _ (устройство r25)268. В нём были FS_PREFIX, HD_HTTP_LOCAL_PORT=80, LD_LIBRARY_PATH, PATH, LOG_DIR, HD_APK, PLUGIN_NAME,
PLUGIN_CGI_DIR и DUNEHD_SERVICE_DONT_FORK, а getenv(HOME) и getenv(TMPDIR) вернули false (устройство r25)82. Поэтому строки «sh-CGI r25» в
этом прогоне относятся и к php-cgi (устройство r25)268.
| Переменная | Значение | Где | Claim |
|---|---|---|---|
FS_PREFIX |
/data/data/com.dunehd.app |
r25: php_server, php-cgi CGI, sh-CGI, plugin_system, команды поставщика; r24: php-cgi async_worker, демоны |
(устройство)269 |
HD_APK, HD_FW_APK |
1 |
r25: httpd, network_manager, sh-CGI; r24: php-cgi async_worker; APK r24 — только HD_APK (код); tv175u r24 init их не выставляет (код) |
(устройство, код r24)270 |
HD_HTTP_LOCAL_PORT |
80; APK r24 — 11080 (код) |
r25: php_server, sh-CGI, php-cgi CGI (запрос 13); r24: php-cgi async_worker |
(устройство, код r24)271 |
PATH |
начинается с $FS_PREFIX/firmware/bin:$FS_PREFIX/bin:/bin |
r25: httpd, network_manager, sh-CGI; r24: php-cgi async_worker; php_server r25 — снимок выше, с тем же началом, что в sh-CGI |
(устройство)272 |
LD_LIBRARY_PATH |
$FS_PREFIX/firmware/lib:/lib:/usr/lib |
r25: php-cgi CGI, sh-CGI; r24: php-cgi async_worker |
(устройство)273 |
PHP_PROC_OPEN_SH |
$FS_PREFIX/bin/sh (libxxx_bash.so) |
r25: php_server, нет в php-cgi CGI; r24: php-cgi async_worker |
(устройство)274 |
DUNEHD_SERVICE_DONT_FORK |
1 |
r25: sh-CGI | (устройство r25)275 |
LOG_DIR, LOG_MAX_FILE_SIZE |
/tmp/run, 3072000 |
r25: php_server; LOG_DIR — ещё и sh-CGI; r24: php-cgi async_worker |
(устройство)276 |
TMPDIR |
$FS_PREFIX/tmp |
r25: php_server; в php-cgi CGI r25 getenv = false; r24: php-cgi async_worker |
(устройство)277 |
HOME |
/data/user/0/com.dunehd.app/app_vlc |
r25: php_server; в php-cgi CGI r25 getenv = false; r24: php-cgi async_worker |
(устройство)277 |
FS_BIN_PREFIX, APK_PACKAGE_NAME |
/data/data/com.dunehd.app, com.dunehd.app |
r24: php-cgi async_worker |
(устройство r24)186 |
HD_DSSD_AMEM, HD_RMCL_DISABLE_CLOPTNS |
0x0744a101, 1 |
r24: php-cgi async_worker |
(устройство r24)278 |
TZ |
нет (getenv = false) |
r25: php_server |
(устройство r25)219 |
PLUGIN_NAME, PLUGIN_CGI_DIR, SCRIPT_FILENAME |
имя и реальные пути www/cgi-bin |
r25: CGI | (устройство r25)58 |
SERVER_SOFTWARE, GATEWAY_INTERFACE |
busybox httpd/1.35.0, CGI/1.1 |
r25: CGI | (устройство r25)279 |
PHP_DEBUG |
включает печать подстановок (код) | APK r24; URL также tv188b r24 | (код r24)280 |
4.2. Что есть и чего нет в PHP r25¶
Загруженные расширения и проверка вызовами — §2. Константы проверены зондом на tv188b r25 в php_server и php-cgi, device. На других прошивках имена констант CURLOPT_* в strings те
же (код r22, r24, r25)281, но определены ли они — см. §7.
| Что | Определено | Не определено | Claim |
|---|---|---|---|
| JSON | JSON_NUMERIC_CHECK (32), JSON_HEX_TAG (1), JSON_FORCE_OBJECT (16), JSON_ERROR_UTF8 (5) |
JSON_BIGINT_AS_STRING, JSON_UNESCAPED_UNICODE, JSON_UNESCAPED_SLASHES, JSON_PRETTY_PRINT |
(устройство r25)282 |
| cURL | CURLOPT_ENCODING (10102), CURLOPT_SSLVERSION, CURLOPT_CAINFO, CURLOPT_TIMEOUT_MS, CURLOPT_CONNECTTIMEOUT_MS, CURLOPT_NOSIGNAL, CURLOPT_IPRESOLVE |
CURLOPT_ACCEPT_ENCODING, CURLOPT_RESOLVE, CURL_SSLVERSION_TLSv1_2, CURLOPT_SSL_VERIFYSTATUS, CURLOPT_TCP_KEEPALIVE, CURLMOPT_PIPELINING, CURLMOPT_MAXCONNECTS |
(устройство r25)21 |
4.3. Различия r22, r24 и r25¶
Только то, для чего есть claims о каждой версии. Если версии в строке нет, значит, о ней claims нет.
| Что | r22 | r24 | r25 | Claim |
|---|---|---|---|---|
Файл libphp5.so |
e7d22b70… |
e28ffc74… |
4a31ef48… |
(код r22, r24, r25)103 |
| Строка версии PHP, OpenSSL, PCRE | 5.3.6, 1.0.1u, 8.11 | то же | то же | (код r22, r24, r25)283 |
| CA-бандл | тот же файл | тот же файл | тот же файл | (код r22, r24, r25)284 |
Помощник URL в libphp5.so |
имя _php_add_http_port |
_php_add_http_port |
_php_add_fs_prefix_to_http |
(код r22, r24, r25)285 |
lcreg в HTTP-помощнике |
— | нет | есть | (код)286 |
opensocket в curl_exec |
— | — | есть | (код r25)287 |
Запись /tmp/run/%s.pid в php_server |
— | строки нет | строка есть | (код r25)288 |
dunelib/utils.php и др. |
только dune_countries.php |
config_utils, dune_languages, expr, utils |
— | (код r22, r24)289 |
bootstrap.php, dune_config.php, dune_plugin.php |
одинаковы с r24 | одинаковы с r22 | — | (код r22, r24)211 |
dune_api.php, dune_plugin_fw.php |
119788 и 6211 байт | 127635 и 6653 байт | — | (код r22, r24)290 |
Запуск $FS_PREFIX/config/boot |
цикл прямо в init |
через binit.sh |
— | (код)291 |
dunehd_service (клиент, ELF, обёртка, .env) |
одинаково | одинаково | одинаково | (код r22, r24, r25)192 |
php.ini shell_ext: error_reporting |
— | без E_WARNING |
E_WARNING включён |
(код)292 |
| По тайм-ауту (r25 — наблюдение, r24 — код) | — | флаг отмены | остановка php_server |
(устройство r25, код r24)293; см. «Операции плагина, тайм-ауты и php_server» |
Sigma и прошивки ниже r22 — короткая справка: SDK для Sigma называет tail -F лога через telnet (SDK)223; вложенные в
плагины сборки curl под другие платформы — §9.1.
4.4. Ключи DuneSystem::$properties: SDK и r25¶
Столбец «По SDK» — страница SDK без указания версии прошивки (по SDK, на r24+ не подтверждено). Столбец «На r25» — tv188b 261021_0117_r25, device, плагин kb_probe5
из flashdata. Куда писать и что сохраняется, — §3.3.
| Ключ | По SDK | На r25 | Claim |
|---|---|---|---|
plugin_name |
в перечне из шести ключей | kb_probe5 |
(устройство r25, SDK)294 |
install_dir_path |
в перечне; от него отсчитываются www/* и www/cgi-bin/* |
/data/data/com.dunehd.app/flashdata/plugins/kb_probe5 |
(устройство r25, SDK)295 |
tmp_dir_path |
в перечне; каталог под /tmp для временных данных, Dune GUI гарантирует, что он существует |
/data/data/com.dunehd.app/tmp/plugins/kb_probe5; пустой каталог есть уже после регистрации плагина |
(устройство r25, SDK)296 |
data_dir_path |
в перечне; постоянные данные; на устройствах без System Storage и Flash Memory Storage ключ не задан; после каждой записи — sync |
/data/data/com.dunehd.app/flashdata/plugins_data/kb_probe5 |
(устройство r25, SDK)297 |
plugin_www_url |
в перечне | http://127.0.0.1:80/plugins/kb_probe5/ |
(устройство r25, SDK)298 |
plugin_cgi_url |
в перечне | http://127.0.0.1:80/cgi-bin/plugins/kb_probe5/ |
(устройство r25, SDK)298 |
sdk_version |
не в перечне | 1.0.0 |
(устройство r25, SDK)294 |
few_buttons_remote_type |
не в перечне | 0 |
(устройство r25, SDK)294 |
5. Как это делают плагины¶
Платформа исполнения большинства разобранных плагинов не установлена; приём ниже — то, как написан код, а не гарантия работы на r24+.
Большие числа в JSON. Клиент TorrServer r25 перед json_decode заменяет значения от 10 цифр на строки
(код r25)299; RemTor при hack_big_int переписывает все целые значения (код)300, Torrent Center —
значения после части ключей (код)301. Приём —
§9.4.
Фон. Widget Ext запускает скрипты через shell_exec("<путь> > /dev/null &") (код)209; Torrent Center — вложенный php-cgi -f
www/cgi-bin/run.php через HD::asyncExec (код)302; ProIPTV — отдельный PHP-процесс через shell_exec с логом
(код)303.
Root. rclone на Android идёт через /system/dunehd/dunehd_service do и передаёт результат JSON-файлом exec_log
(код)304; Dune BackUp запускает демон так же, если этот файл есть (код)199.
Часовой пояс. GlobalTV ставит date_default_timezone_set("UTC"), а смещение берёт из date +%z (код)305; копия фреймворка
MegaAnime ставит UTC и через ini_set (код)306.
set_time_limit. Anidub.Com и folder_cache вызывают set_time_limit(0) (код)307; m3u.class.php remote-control — наоборот, set_time_limit(15) (код)308.
Пути. Widget Ext смешивает пути с $FS_PREFIX и без него: в boot.sh и в PHP-части — без, в остальных скриптах — с ним
(код)309. Lampa bridge в CGI-обёртке задаёт FS_PREFIX по умолчанию /data/data/com.dunehd.app
и дополняет LD_LIBRARY_PATH (код)310; по сообщениям автора в комментариях (forum), run_plugin_cgi вызывает файл через
sh и на Android 11 (форум)311, а код заявлен совместимым с PHP 5.3
(форум)312.
Вывод. Контроллер Kohana-канала перед возвратом результата делает echo имени операции (код)313: на r25 fd 1
php_server ведёт в его лог (устройство r25)28. Служебный Cleanup ищет потомков процесса по общим pipe-дескрипторам в
/proc/<pid>/fd и по PPID (код)314.
6. Расхождения¶
- uid CGI: выдержка SDK и r25. В выдержке SDK
httpdзапускается из rc-скрипта с uid=0 под пользователемwww(httpd -u www; при uidwww= 80 —httpd -p 80 -u 80 …) (SDK)63, с оговоркой, что не всё из неё поддерживается прошивками (SDK)59. На r25httpdзапущен как$FS_PREFIX/bin/httpd -h …и работает от root (устройство r25)315, CGI плагина — uid 0 (устройство r25)11.conflicts_withнет. - «PHP на Dune требует явной таймзоны». Так сказано в комментариях
HD::format_timestamp(код r24)316 и библиотеки GlobalTV (код)317. На r25php_serverбезTZдаёт Europe/Moscow и MSK (устройство r25)219, аphp-cgiс той же Europe/Moscow пишет Warning (устройство r25)220. Связь между комментариями и наблюдениями —related,conflicts_withнет. /flashdataиз SDK. SDK даёт командыadb pushв/flashdata/plugins/(SDK)318, а на r25 в корне ФС этого каталога нет (устройство r25)319; стороны связаныconflicts_with, см. BUG-010.- Тайм-ауты и судьба процесса. Умолчание 10 с в SDK (SDK)320 против 60 с на r25
(устройство r25)33; остановка
php_serverна r25 (устройство r25)34 и код r24 — «Операции плагина, тайм-ауты иphp_server». PHP_PROC_OPEN_SHиphp-cgi. На r24 переменная есть уphp-cgiasync_worker(устройство r24)186, на r25 её нет уphp-cgiиз CGI (устройство r25)133. Сравниваются разные прошивки и разные способы запуска; поведение каждого случая на другой прошивке не проверено./config/…в команде на tv188b r25.shell_execдобавляет$FS_PREFIXк словам/config/…(устройство r25)18, аexecс таким путём первым словом вернулrc=127и сообщение с путём без префикса (устройство r25)154. По коду r25 путь первым словом и слово после пробела проходят разные ветви_php_add_fs_prefix_to_cmd(код r25)321 (§3.2); стороны связаны какrelated,conflicts_withнет. В запросе 13 обе стороны наблюдались в одном прогоне одной функциейexec: путь первым словом префикс не получил (устройство r25)31, путь после пробела — получил (устройство r25)32. Объяснение различия позицией слова — гипотеза, §7.
7. Не проверено¶
Гипотезы (inference) и disputed; кандидаты на проверку на устройстве. Гипотезы о жизни php_server и операциях —
«Операции плагина, тайм-ауты и php_server», о CA-бандле — «Реестр ошибок прошивки и SDK» и «HTTP из PHP плагина на r24 и r25» §7.
| Утверждение | Статус | Claim |
|---|---|---|
В запросе 11 после kill php_server и запуска шага bg2 операция handle_user_input отменена через 30.0 с с operation timed out; step_bg2.txt не появился, в steps.txt нет begin bg2. Верификатор: тайм-аут 30 с без end повторился в чистом запросе 12 (§3.8), а отсутствие begin bg2 — только условия запроса 11, где от bg1 ещё жил sleep |
device, disputed | (устройство r25)322 |
shell_exec("sleep 61 &") в php_server не возвращается, вероятно, потому что фоновый sleep наследует pipe stdout (fd 1) и держит его открытым до конца, а shell_exec ждёт EOF; fd 101/110 php_server перед exec тоже не закрываются (наблюдения — §3.8) |
inference | (вывод r25)323 |
В r25 _php_add_fs_prefix_to_cmd вызывается из php_exec (exec, system, passthru), zif_shell_exec, zif_popen, zif_proc_open и virtual_popen, то есть exec и shell_exec переписывают команду одной функцией (только перекрёстные ссылки r2) |
inference | (вывод r25)324 |
rc=127 у exec("/config/kbp11_x.sh first-word") в запросе 11 согласуется с тем, что путь стоит первым словом: функция добавила sh, но $FS_PREFIX к первому слову не дописала (байт перед строкой не разделитель); в shell_exec запроса 6 /config/c стоял после пробела и префикс получил. Различие — по позиции слова, а не по функции. В запросе 13 оба случая повторились в одном прогоне exec (§3.2) |
inference, verified | (вывод r25)325 |
Подстановка путей и команд на tv188b r24 работает как в APK: тот же libphp5.so, FS_PREFIX задан |
inference | (вывод r24)326 |
На tv175u r24 libphp5.so пути и команды не переписывает: FS_PREFIX пуст |
inference | (вывод r24)327 |
В APK файловые функции для /tmp/…, /config/…, /flashdata/…, /fconfig/…, /firmware… работают с $FS_PREFIX/… |
inference | (вывод r24)328 |
В APK вторая строка-образец — /D/, то есть /D/x превращается в $FS_PREFIX/tmp/mnt/D/x |
inference | (вывод r24)329 |
В APK подстановке в командах подвержены exec, system, passthru, shell_exec, popen, proc_open |
inference | (вывод r24)330 |
Программа плагина, запущенная по абсолютному пути вне /firmware/bin/ и /firmware_ext/php/, в APK запускается через sh; связаны ли с этим пустой вывод $FS_PREFIX/bin/wget (устройство r25)331 и rc=126 при вызове полным путём и через sh на r25 (устройство r25)26, claims не говорят |
inference | (вывод r24)332 |
В APK путь первым словом команды (/config/x.sh) проверяет байт перед началом строки. В коде r25 то же сказано в (код r25)153 (§3.2); на r25 exec с таким путём дал rc=127 (устройство r25)154; трассы подстановки и памяти перед строкой нет, APK и r24 не проверялись |
inference | (вывод r24)333 |
В APK proc_open с $cwd вида /tmp/… переходит в системный каталог, а не в $FS_PREFIX/…. На r25 cwd=/tmp дал pwd=/tmp (устройство r25)156, но $FS_PREFIX/tmp там же — ссылка на /tmp (устройство r25)171: маршрут cwd не различён; для этого нужен каталог вроде /config, APK и r24 не проверялись |
inference | (вывод r24)334 |
В APK proc_open с массивом $env теряет FS_PREFIX, PATH, LD_LIBRARY_PATH. На r25 зонд вывел только KB11_E и PATH (устройство r25)157: остальные переменные не проверены, APK и r24 тоже |
inference | (вывод r24)335 |
В APK realpath, include, tempnam, tmpfile получают FS_PREFIX перед разрешением пути |
inference | (вывод r24)336 |
В APK chdir, glob, readfile, rename, unlink, chmod, touch и другие применяют подстановку |
inference | (вывод r24)337 |
/sys/class/net/eth0/address в APK даёт содержимое dune_mac.txt, а не MAC интерфейса |
inference | (вывод r24)338 |
В APK поток с поиском по include_path обходит подстановку: file_get_contents($f, true) даёт другой результат. На r25 такие чтения вернули 49 и 15678 байт (устройство r25)339; это не показывает, каким путём шло разрешение, APK и r24 не проверялись |
inference | (вывод r24)340 |
На tv188b r24 окружение php_server не снято: наличие в нём FS_PREFIX, HD_APK, HD_FW_APK, LOG_DIR, TMPDIR, PHP_PROC_OPEN_SH не установлено |
inference | (вывод r24)341 |
В APK php_server наследует окружение процесса оболочки |
inference | (вывод r24)342 |
На tv188b r24 php_server исполняет вызов как PHP-код $in = <<<EOL …; $out = …($in); |
inference | (вывод r24)343 |
На tv188b r24 каталог firmware_ext/php/include должен быть в include_path (на r25 он там есть, §1.1) |
inference, verified | (вывод r24)344 |
| На tv188b r24 системные PHP-файлы подключаются до кода плагина (на r25 — §1.1) | inference, disputed | (вывод r24)345 |
На r24 data_dir_path — <хранилище>/plugins_data/<name> (на r25 — §3.3) |
inference, disputed | (вывод r24, r25)346 |
На r24 tmp_dir_path — $FS_PREFIX/tmp/plugins/<name> (на r25 — §3.3) |
inference, disputed | (вывод r24, r25)347 |
На tv188b r24 установщик заменяет нерабочие бинарники плагина (bin/php-cgi) ссылками на /firmware/bin |
inference, disputed | (вывод r24)348 |
На tv188b r25 run_plugin_cgi запускается с $0 — именем файла CGI из каталога с именем плагина |
inference | (вывод r25)349 |
| В плагине zlostnyi-iptv вызов по ссылке на месте вызова в PHP 5.3 — лишь deprecated, поэтому такой код плагина работает на r25 | inference | (вывод)350 |
В плагине dunemdb-supplier-movies-rus запущенный из описателя поставщика php-cgi без -c не обязательно читает bin/php.ini |
inference | (вывод)351 |
В базе нет данных о следующем:
- полный список расширений (
get_loaded_extensions()) и значенияini_get, включаяmemory_limit, на r24 и на устройствах, кроме tv188b r25 (там — один прогон, §2 и §1.3); наличие функцийmcrypt_*(в перечне §2mcryptнет (устройство r25)4; строкаmcryptвlibphp5.soпяти сборок входит в перечень авторов расширений (код r22, r24, r25)352); - вызовы вне таблицы §2: остальные
mb_*,SQLite3с файлом, распаковкаZipArchive; эти же вызовы вphp-cgiи на других прошивках; какой интерпретатор получаетproc_openвphp-cgir25, гдеPHP_PROC_OPEN_SHнет (устройство r25)133; - окружение и uid
php_serverна r22; полный снимок окруженияphp_serverr25 у других плагинов и назначениеHD_RMCL_DISABLE_CLOPTNS; HTTP_HOSTи порт приcurl_setopt(CURLOPT_URL)иcurl_init($url)изphp-cgiв CGI плагина (запрос 13 проверил их изphp_server, «HTTP из PHP плагина на r24 и r25» §3.6); процесс безHD_HTTP_LOCAL_PORTи порт не 80; что делает_php_apply_lcreg_to_httpпри таких входах; окружениеphp-cgiвне CGI-запроса и на других прошивках (§4.1 — один прогон запроса 13);- работают ли на r24+ сервисные плагины из страницы SDK (§1.2), какие у них uid и окружение; код
shell_extr24 ставит и обновляет «сервисные плагины» (код r24)353, но те ли это службы, claims не говорят; - можно ли из
php_serverписать в/tmp/mnt/storage; запись в/sdcardи/configна других прошивках; что происходит с файламиtmp_dir_path,/tmpиdata_dir_pathпри перезагрузке (прогон запроса 11 проверил толькоam force-stop, §3.3); - почему
shell_exec("sleep 61 &")не возвращается (гипотеза о наследованном stdout — в таблице выше; снимки запроса 13 — §3.8): возвращается ли он без наследования fd 1 при оставленных fd 101/110, и не мешает ли фоновый процесс с этими дескрипторами следующемуphp_server; - печатает ли
PHP_DEBUG=1строки-C-> EEEо замене команд в лог плагина (печать URL в запросе 13 дошла, §3.11); работает лиlcregна устройстве и действует ли при отсутствииlcreg.txt(устройство r25)354 ветка ошибки чтения из кода (код r25)355; - какое поле читает
zif_curl_multi_getcontentв точке падения (сигнал и кадр сбоя сняты в запросе 13, «HTTP из PHP плагина на r24 и r25» §3.6);curl_multiк внешним хостам на r25 и на других прошивках; что делает_php_curl_opensocket_remote; определены ли константы §4.2 на r24 и r22.
-
fw-tv188b-261021-0117-r25--libphp5.c002 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В зонде kb_probe5 на tv188b 261021_0117_r25 значение PHP_VERSION равно 5.3.6. ↩↩
-
fw-tv188b-261021-0117-r25--libphp5.c001 · code · android-dune-fw, android-atv; прошивка 261021_0117_r25, 260827_0003_r24, 250815_1012_r22, 260724_0207_r24, 1.0.1-1000-260724_0207_r24 · В strings libphp5.so пяти исследованных сборок присутствует строка PHP/5.3.6. ↩↩
-
fw-tv188b-261021-0117-r25.c242 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 встроенный PHP 32-битный по целым: в php_server и в php-cgi CGI плагина PHP_INT_SIZE = 4, PHP_INT_MAX = 2147483647. ↩↩
-
fw-tv188b-261021-0117-r25--libphp5.c056 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 11 php_server kb_probe11 перечислил 32 загруженных расширения: Core, date, ereg, libxml, openssl, pcre, sqlite3, zlib, ctype, curl, dom, fileinfo, filter, hash, iconv, json, mbstring, pcntl, SPL, PDO, posix, Reflection, session, SimpleXML, soap, sockets, standard, tokenizer, xml, xmlreader, xmlwriter, zip. ↩↩↩↩
-
fw-tv188b-261021-0117-r25--libphp5.c059 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 11 CGI env перечислил те же 32 расширения, что php_server kb_probe11, и дополнительное cgi-fcgi. ↩↩
-
fw-tv188b-261021-0117-r25--libphp5.c055 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 11 на tv188b r25 php_server зонда kb_probe11 сообщил PHP_VERSION=5.3.6, SAPI hd, getcwd=/ и uid=1000. ↩
-
fw-tv188b-261021-0117-r25--libphp5.c058 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 11 CGI env зонда сообщил PHP_VERSION=5.3.6, SAPI cgi-fcgi, uid=0 и getcwd=/data/data/com.dunehd.app/flashdata/plugins/kb_probe11/www/cgi-bin. ↩
-
- fw-tv188b-260827-0003-r24--plugin-loader--php-runtime.c030 · device · tv188b, android-dune-fw; прошивка 260827_0003_r24 · На tv188b r24 одновременно работают три процесса php_server — по одному на плагин (shell_ext, dune-hd.tv, android_apps), все — дочерние com.dunehd.app, с аргументами <плагин> <скрипт> /tmp/run /tmp/plugins/<плагин>/system_properties.txt
- fw-tv188b-261021-0117-r25.c298 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На снимках tv188b r25 (collect4 и начало collect6, до установки зондов) работают три php_server — shell_ext, dune-hd.tv (программа /flashdata/plugins/dune-hd.tv/i24h.php) и android_apps; все — дочерние процессы com.dunehd.app с Uid 1000.
- fw-tv188b-260827-0003-r24--plugin-loader--php-runtime.c030 · device · tv188b, android-dune-fw; прошивка 260827_0003_r24 · На tv188b r24 одновременно работают три процесса php_server — по одному на плагин (shell_ext, dune-hd.tv, android_apps), все — дочерние com.dunehd.app, с аргументами <плагин> <скрипт> /tmp/run /tmp/plugins/<плагин>/system_properties.txt
-
fw-tv188b-261021-0117-r25.c240 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 PHP-скрипт CGI плагина (php-cgi через CGI-обёртку) работает с posix_getuid() = 0, а php_server того же плагина — с uid 1000. ↩
-
fw-tv188b-260827-0003-r24.c054 · device · tv188b, android-dune-fw; прошивка 260827_0003_r24 · На tv188b r24 три процесса php_server (shell_ext, dune-hd.tv, android_apps) работают от пользователя system с SELinux-меткой u:r:system_app:s0; их родитель — com.dunehd.app (PPID 25631), а UID пакета приложения — 1000 (sharedUser android.uid.system/1000). ↩
-
fw-tv188b-261021-0117-r25.c152 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 CGI плагина, запущенный httpd через run_plugin_cgi, работает под uid=0(root) gid=0(root) с SELinux-контекстом u:r:shell:s0. ↩↩↩↩
-
fw-tv188b-261021-0117-r25.c350 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 команды зонда из php_server (uid 1000) дают FS_PREFIX=/data/data/com.dunehd.app; which wget и command -v wget возвращают /data/data/com.dunehd.app/bin/wget. ↩↩↩
-
- fw-tv188b-261021-0117-r25.c254 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в файловых функциях встроенного PHP (php_server и php-cgi) realpath('/config') = /data/data/com.dunehd.app/config, realpath('/firmware') = /system/dunehd/firmware, realpath('/firmware_ext/php') = /system/dunehd/firmware_ext/php, хотя в корне ФС (adb shell) /firmware и /firmware_ext нет, а /config — другой каталог.
- fw-tv188b-261021-0117-r25.c255 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 во встроенном PHP (php_server и php-cgi CGI плагина) путь /flashdata существует: is_dir('/flashdata') = true, realpath — /data/data/com.dunehd.app/flashdata, хотя в корне ФС (adb shell) /flashdata нет.
- fw-tv188b-261021-0117-r25.c291 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 tmp_dir_path у kb_probe5 = '/data/data/com.dunehd.app/tmp/plugins/kb_probe5' — путь /tmp/plugins/kb_probe5 с префиксом FS_PREFIX=/data/data/com.dunehd.app; is_dir() для него true.
-
fw-tv188b-261021-0117-r25.c292 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 data_dir_path у kb_probe5 (плагин в flashdata) = '/data/data/com.dunehd.app/flashdata/plugins_data/kb_probe5'; is_dir() для него true. ↩
-
fw-tv188b-260827-0003-r24--plugin-loader--online-upgrade.c090 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 онлайн-обновление сохраняет cookies плагина и его data_dir_path: v2 и v3 получили в plugin_cookies значение kbp7u_mark, записанное v1, файл kbp7u_mark.txt v1 в flashdata/plugins_data/
остался с прежним mtime. ↩ -
fw-tv188b-261021-0117-r25.c291 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 tmp_dir_path у kb_probe5 = '/data/data/com.dunehd.app/tmp/plugins/kb_probe5' — путь /tmp/plugins/kb_probe5 с префиксом FS_PREFIX=/data/data/com.dunehd.app; is_dir() для него true. ↩
-
fw-tv188b-261021-0117-r25.c376 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 11 файлы kbp11_persist.txt по 5 байт в tmp_dir_path, /tmp и data_dir_path сохранились после am force-stop и запуска com.dunehd.app (pid 15016 → 22982). ↩↩
-
fw-tv188b-261021-0117-r25.c253 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 встроенный PHP (php_server и php-cgi CGI) в команде shell_exec добавляет $FS_PREFIX (/data/data/com.dunehd.app) к словам /tmp/…, /firmware/…, /config/…, /flashdata/… и к пути в одинарных кавычках ('/tmp/h'), но не к /etc/…, не к x/tmp/f и не к пути в двойных кавычках ("/tmp/g"). ↩↩↩↩↩↩
-
fw-tv188b-261021-0117-r25.c259 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 из php_server PHP-плагина (id — uid=1000(system), context=u:r:system_app:s0) команда shell_exec('/system/dunehd/dunehd_service do id') выводит uid=0(root) gid=0(root) groups=0(root) context=u:r:shell:s0. ↩↩↩
-
fw-tv188b-261021-0117-r25.c249 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в php_server и php-cgi curl_version() сообщает version 7.67.0, ssl_version OpenSSL/1.0.1u, libz_version 1.2.11, host arm-unknown-linux-androideabi. ↩
-
fw-tv188b-261021-0117-r25.c250 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в php_server и php-cgi не определены константы CURLOPT_ACCEPT_ENCODING, CURLOPT_RESOLVE, CURL_SSLVERSION_TLSv1_2, CURLOPT_SSL_VERIFYSTATUS, CURLOPT_TCP_KEEPALIVE, CURLMOPT_PIPELINING и CURLMOPT_MAXCONNECTS; CURLOPT_ENCODING (10102), CURLOPT_SSLVERSION, CURLOPT_CAINFO, CURLOPT_TIMEOUT_MS, CURLOPT_CONNECTTIMEOUT_MS, CURLOPT_NOSIGNAL и CURLOPT_IPRESOLVE определены. ↩↩
-
fw-tv188b-261021-0117-r25.c251 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 из php_server и php-cgi файл /firmware/certs/ca-bundle.crt доступен (is_file true; размер 227282, md5 e9dc50a63d76d3c88baa24a4374c4542), как и $FS_PREFIX/firmware/certs/ca-bundle.crt; в нём 143 PEM-блока сертификатов. ↩↩
-
fw-tv188b-261021-0117-r25--libphp5.c037 · code · android-dune-fw, android-atv; прошивка 261021_0117_r25, 260827_0003_r24, 250815_1012_r22, 260724_0207_r24, 1.0.1-1000-260724_0207_r24 · Заголовки CA-бандлов пяти исследованных сборок датируют данные Mozilla 11 октября 2022 года. ↩
-
- fw-tv188b-261021-0117-r25.c350 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 команды зонда из php_server (uid 1000) дают FS_PREFIX=/data/data/com.dunehd.app; which wget и command -v wget возвращают /data/data/com.dunehd.app/bin/wget.
- fw-tv188b-261021-0117-r25.c351 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 $FS_PREFIX/bin/wget — симлинк на $FS_PREFIX/lib/libxxx_busybox.so; /system/bin/libxxx_busybox.so — отдельный файл root:shell размером 987728 байт.
-
fw-tv188b-261021-0117-r25--libphp5.c073 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 11 which wget из php_server показал /data/data/com.dunehd.app/bin/wget — ссылку на libxxx_busybox.so; вызов по имени wget к /ping компьютера вернул ok и rc=0. ↩
-
fw-tv188b-261021-0117-r25--libphp5.c074 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 11 прямой вызов /data/data/com.dunehd.app/bin/wget и вызов sh с тем же путём из php_server оба вернули rc=126 и cannot execute binary file. ↩↩
-
fw-tv188b-261021-0117-r25.c328 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 строки hd_print() из кода плагина попадают в /tmp/run/<плагин>.log с префиксом «[pid] [t
] [время]»: hd_print("kbp5: …") зонда дал «[17362] [t17362] [2026-10-26 10:38:00.049061] kbp5: props dumped to /tmp/kb_probe5/props.txt». ↩↩↩ -
fw-tv188b-261021-0117-r25.c300 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 у php_server (снимок /proc/
/fd снаружи процесса) открыты только fd 0 → /dev/null, fd 1 и 2 → /tmp/run/<плагин>.log и два pipe-канала из argv; так у kb_probe6 и у встроенных shell_ext, dune-hd.tv, android_apps. ↩↩↩ -
fw-tv188b-261021-0117-r25--libphp5.c090 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 13 $_SERVER в php_server зонда kb_probe13 содержал только REQUEST_TIME, argv и argc — без переменных окружения; переменные окружения процесса были в $_ENV (один прогон). ↩↩
-
fw-tv188b-261021-0117-r25.c393 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 13 из php_server все три вызова — FS_PREFIX=$FS_PREFIX sh $FS_PREFIX/firmware/scripts/ffmpeg.sh -version, sh $FS_PREFIX/firmware/scripts/ffmpeg.sh -version без явного FS_PREFIX и ffmpeg -version без пути — вернули rc=0 и «ffmpeg version 7.1.3» (один прогон). ↩↩
-
fw-tv188b-261021-0117-r25--libphp5.c091 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 13 с PHP_DEBUG=1 exec("/config/kbp13_x.sh first-word 2>&1") в php_server вернул rc=127 и «sh: /config/kbp13_x.sh: No such file or directory» — путь первым словом префикс $FS_PREFIX не получил (повтор наблюдения запроса 11, один прогон). ↩↩↩
-
fw-tv188b-261021-0117-r25--libphp5.c092 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 13 exec("echo /config/kbp13_x.sh") в php_server напечатал /data/data/com.dunehd.app/config/kbp13_x.sh, а exec("sh /config/kbp13_x.sh after-sh") запустил скрипт с argv0 /data/data/com.dunehd.app/config/kbp13_x.sh: путь после пробела получил $FS_PREFIX (один прогон). ↩↩↩
-
fw-tv188b-261021-0117-r25.c309 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 операция handle_user_input PHP-плагина без operation_timeout в манифесте (kb_probe5, kb_probe6; ENTER на точке входа с plugin_handle_user_input) стартует с тайм-аутом 60 с: в shell.log «…->handle_user_input(…): start (timeout=60.0s)». ↩↩↩
-
fw-tv188b-260827-0003-r24--plugin-loader--php-runtime--opexec.c032 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 по тайм-ауту handle_user_input оболочка останавливает php_server плагина и тем прерывает вызов: за «cancelling by timeout (N s)» следуют «FATAL ERROR detected (msg = operation timed out)», «[php] shutting down...», через ~0,25 с «killing PHP-server process...» и «stopped.», затем «canceling req N (fast: 1)», «PHP-FW was shut down. The operation fails.», «result status canceled» и «canceled in N s»; PHP-код вызова не доработал. ↩↩↩
-
- fw-tv188b-261021-0117-r25.c240 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 PHP-скрипт CGI плагина (php-cgi через CGI-обёртку) работает с posix_getuid() = 0, а php_server того же плагина — с uid 1000.
- fw-tv188b-261021-0117-r25.c258 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в окружении php-cgi CGI плагина переменной PHP_PROC_OPEN_SH нет (getenv = false), а FS_PREFIX = /data/data/com.dunehd.app есть.
- fw-tv188b-261021-0117-r25.c248 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в php-cgi CGI плагина с php.ini без date.timezone ini date.timezone пуст; date_default_timezone_get() возвращает Europe/Moscow, но date() и date_default_timezone_get() пишут PHP Warning «It is not safe to rely on the system's timezone settings… We selected 'Europe/Moscow' for 'MSK/3.0/no DST' instead».
-
fw-tv188b-261021-0117-r25.c307 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 статическая переменная класса плагина сохраняется между вызовами, пока жив php_server: счётчик KbProbe5Fw::$n, увеличиваемый в каждом call_plugin, рос 1→5 в пяти вызовах процесса 17362 (13:38:00–13:39:25). ↩
-
fw-tv188b-261021-0117-r25.c313 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 php_server при старте пишет в /tmp/run/<плагин>.log по порядку: «[server] preparing...», «reader fd: N; writer fd: M», «resetting include path to …», загрузку bootstrap.php, dune_api.php, dune_plugin.php, dune_plugin_fw.php, «executing system properties cmd (number of properties: 7)...», загрузку dune_config.php, затем программы плагина, после чего «[server] ready.» и «[server] main loop started.»; get_included_files() из main.php даёт тот же порядок файлов. ↩↩↩
-
fw-tv188b-260827-0003-r24--http-api.c114 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · libxxx_php-cgi.so (php-cgi) динамически связан с libphp5.so и содержит лишь CGI-обвязку (php_module_startup, php_execute_script, страница «CGI security») ↩↩
-
fw-tv188b-261021-0117-r25.c081 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 скрипт global_action plugin_system (boot, boot_end, gui_start) работает под uid 1000(system) с SELinux-контекстом u:r:system_app:s0, текущим каталогом / и переменной окружения FS_PREFIX=/data/data/com.dunehd.app; $0 — абсолютный путь скрипта. ↩↩
-
fw-tv188b-260827-0003-r24--plugin-loader.c099 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Модуль php_driver.cpp оболочки запускает процесс PHP-сервера: строки «starting PHP-server process», /tmp/plugins/%s/system_properties.txt, /firmware/bin/php_server, «execv (%s) failed» ↩
-
fw-tv188b-261021-0117-r25.c297 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 php_server нового PHP-плагина из flashdata запускается при первом вызове плагина, а не при его регистрации: после регистрации kb_probe6 процесса php_server kb_probe6 нет, а при первом handle_user_input в shell.log идут «start (timeout=60.0s)», «[kb_probe6] [php] creating...», «server started; pid: 31928.», «ready.» (так же у kb_probe5, pid 17362). ↩
-
fw-tv188b-260827-0003-r24--php-framework.c303 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Строка использования php_server (libxxx_php_server.so): «php_server
» ↩ -
fw-tv188b-260827-0003-r24--plugin-loader--php-runtime.c027 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · php_server встраивает PHP через libphp5.so (импорты php_module_startup, php_request_startup, zend_eval_string) и пишет этапы инициализации движка: «php engine: initializing...», «php engine: startup() failed.», «php engine: initialized.», «php engine: exitting from forked child (pid %d)» ↩↩
-
fw-tv188b-261021-0117-r25.c299 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 два последних аргумента php_server — fd канала на чтение и fd канала на запись: при argv «… 83 109» сервер пишет «[server] reader fd: 83; writer fd: 109», а в /proc fd 83 — pipe, открытый на чтение (lr-x), fd 109 — pipe на запись (l-wx); у kb_probe5 так же «… 90 93» и «reader fd: 90; writer fd: 93». ↩
-
fw-tv188b-261021-0117-r25.c314 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 к исполнению программы плагина (код верхнего уровня main.php) уже определены классы DunePluginFw и DuneSystem, константа PLUGIN_OP_HANDLE_USER_INPUT и функция hd_print. ↩
-
fw-tv188b-261021-0117-r25.c311 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 php_server пишет в лог «[server] loading '/firmware_ext/php/<файл>'...», а выполняет «require ('/data/data/com.dunehd.app/firmware_ext/php/<файл>');» — с префиксом $FS_PREFIX; программа плагина так же: loading '/flashdata/plugins/kb_probe5/main.php', require ('/data/data/com.dunehd.app/flashdata/plugins/kb_probe5/main.php'). ↩
-
fw-tv188b-261021-0117-r25.c312 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в коде main.php kb_probe5 get_included_files() показывает системные файлы как '/system/dunehd/firmware_ext/php/<файл>' (bootstrap.php … dune_config.php), а main.php — как '/data/data/com.dunehd.app/flashdata/plugins/kb_probe5/main.php'; FILE — тот же путь main.php. ↩
-
fw-tv188b-261021-0117-r25.c316 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 include_path в php_server = '.:<каталог плагина>:/data/data/com.dunehd.app/firmware_ext/php/include', каталог плагина — с префиксом $FS_PREFIX: …/flashdata/plugins/kb_probe5 и …/flashdata/plugins/dune-hd.tv у плагинов из flashdata, …/firmware_ext/plugins/shell_ext и …/firmware_ext/plugins/android_apps у встроенных; php_server пишет его в лог «[server] resetting include path to '…'». ↩
-
fw-tv188b-260827-0003-r24--php-framework.c306 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · php_server задаёт include_path по шаблону «ini_set('include_path', '.:%s:%s');»; рядом строка /firmware_ext/php/include ↩
-
fw-tv188b-261021-0117-r25.c293 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 у работающего php_server каталог /tmp/plugins/<плагин> пуст: файла system_properties.txt, путь к которому php_server получает в argv, нет ни при загрузке main.php (kb_probe6, два запуска), ни при первом вызове (kb_probe5). ↩↩
-
fw-tv188b-260827-0003-r24--http-api.c008 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · CGI-скрипт плагина запускается run_plugin_cgi как shell-скрипт (sh), а не напрямую: PHP-обработчик плагин должен вызвать сам ↩
-
fw-tv188b-260827-0003-r24--http-api.c010 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · CGI shell_ext/www/cgi-bin/download_subtitle — двухстрочная обёртка: дописывает .php к SCRIPT_FILENAME и запускает $FS_PREFIX/firmware_ext/php/php-cgi -c . (php.ini из каталога cgi-bin) ↩
-
fw-tv188b-261021-0117-r25.c237 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 CGI-обёртка плагина по образцу download_subtitle (SCRIPT_FILENAME="$SCRIPT_FILENAME.php" и "$FS_PREFIX/firmware_ext/php/php-cgi" -c .) исполняет <имя>.php из www/cgi-bin плагина: FILE и SCRIPT_FILENAME — …/www/cgi-bin/rt.php, getcwd() — каталог www/cgi-bin, php_ini_loaded_file() — www/cgi-bin/php.ini, get_include_path() — «.». ↩↩
-
fw-tv188b-260827-0003-r24--shell-ext.c023 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · run_async_worker.sh берёт php-cgi из $FS_PREFIX/firmware_ext/php/php-cgi (если его нет — exit 1) и запускает exec php-cgi -f <плагин>/async_worker.php с аргументами скрипта, stdout/stderr — в $FS_PREFIX/tmp/plugins/<плагин>/error.log ↩↩
-
fw-tv188b-260827-0003-r24.c055 · device · tv188b, android-dune-fw; прошивка 260827_0003_r24 · На tv188b r24 фоновый PHP-процесс плагина shell_ext «php-cgi -f $FS_PREFIX/firmware_ext/plugins/shell_ext/async_worker.php start» (pid 26705) работает от пользователя system с меткой u:r:system_app:s0 и PPID 1. ↩↩
-
doc-sdk-plugins.c095 · doc · any-documented; прошивка — · Встроенный HTTP-сервер отдаёт $install_dir_path/www/* по http://
/plugins/ /* и исполняет CGI из www/cgi-bin/* по http:// /cgi-bin/plugins/ /* ↩ -
fw-tv188b-261021-0117-r25.c154 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 файл www/index.txt плагина отдаётся по http://
/plugins/ /index.txt: HTTP 200, Content-type: text/plain, Accept-Ranges: bytes, тело — содержимое файла. ↩
-
fw-tv188b-261021-0117-r25.c149 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 CGI-скрипт плагина, вызванный через http://
/cgi-bin/plugins/ /<файл>, получает PLUGIN_NAME=
, а PLUGIN_CGI_DIR и SCRIPT_FILENAME — реальные пути $FS_PREFIX/flashdata/plugins/
/www/cgi-bin и …/www/cgi-bin/<файл>, а не /tmp/www/plugins/
-
doc-sdk-httpd.c001 · doc · any-documented; прошивка — · Документ HTTPD — выдержка из busybox/networking/httpd.c; не все перечисленные в ней возможности поддерживаются текущими прошивками Dune HD. ↩↩
-
doc-sdk-httpd.c003 · doc · any-documented; прошивка — · URL, начинающийся с /cgi-bin/, считается CGI-скриптом; сервер переходит в каталог скрипта и запускает его, установив QUERY_STRING и другие переменные окружения. ↩
-
doc-sdk-httpd.c004 · doc · any-documented; прошивка — · За описанием переменных окружения CGI документ отсылает к спецификации NCSA http://hoohoo.ncsa.uiuc.edu/cgi/env.html. ↩
-
fw-tv188b-261021-0117-r25.c150 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 CGI-скрипт плагина запускается с $0, равным абсолютному SCRIPT_FILENAME ($FS_PREFIX/flashdata/plugins/
/www/cgi-bin/<файл>), и текущим каталогом PLUGIN_CGI_DIR ($FS_PREFIX/flashdata/plugins/
/www/cgi-bin). ↩
-
doc-sdk-httpd.c002 · doc · any-documented; прошивка — · В выдержке busybox httpd демон запускается из rc-скрипта с uid=0 под пользователем www (
httpd -u www); при uid пользователя www = 80 это эквивалентноhttpd -p 80 -u 80 -h /www -c /etc/httpd.conf -r "Web Server Authentication". ↩↩ -
doc-sdk-service-plugins.c001 · doc · any-documented; прошивка — · Документ обращается к сервисным плагинам HTTP-запросами к
http://localhostилиhttp://127.0.0.1по пути/cgi-bin/plugins/<имя_плагина>/do?cmd=…. ↩ -
- doc-sdk-service-plugins.c002 · doc · any-documented; прошивка — · mediainfo_service по
cmd=get_durationполучает длительность медиафайла; параметрfile— UNIX-путь к видеофайлу (в примере/D/some folder/file.avi). - doc-sdk-service-plugins.c003 · doc · any-documented; прошивка — · mediainfo_service по
cmd=make_screenshotсохраняет скриншот вscreenshot_file, берёт его с позицииscreenshot_posсекунд и размераscreenshot_size.
- doc-sdk-service-plugins.c002 · doc · any-documented; прошивка — · mediainfo_service по
-
doc-sdk-service-plugins.c002 · doc · any-documented; прошивка — · mediainfo_service по
cmd=get_durationполучает длительность медиафайла; параметрfile— UNIX-путь к видеофайлу (в примере/D/some folder/file.avi). ↩ -
doc-sdk-service-plugins.c004 · doc · any-documented; прошивка — · 3g_service поддерживает команды
send_sms,status,list_sms,delete_sms,set_sms_storage,start_3gиstop_3g. ↩ -
- doc-sdk-service-plugins.c005 · doc · any-documented; прошивка — · 3g_service по
cmd=statusс флагамиget_sim_status,get_imsi,get_imei,get_signalвозвращаетsim_status,imsi,imei,signal_strength,signal_ber; ответ завершаетсяresult = ok. - doc-sdk-service-plugins.c006 · doc · any-documented; прошивка — · 3g_service по
cmd=statusтакже сообщаетhave_main_connectionиhave_3g_connection— доступность интернета через основное подключение и 3G.
- doc-sdk-service-plugins.c005 · doc · any-documented; прошивка — · 3g_service по
-
doc-sdk-service-plugins.c007 · doc · any-documented; прошивка — · Фоновое 3G-подключение включается
cmd=start_3gи выключаетсяcmd=stop_3g; при каждой загрузке STB оно выключено, постоянно поддерживается и используется для интернета только тогда, когда основное подключение доступа не даёт. ↩ -
doc-sdk-service-plugins.c008 · doc · any-documented; прошивка — · Доступность интернета фоновое 3G-подключение проверяет через ping google DNS 8.8.8.8; переключение между основным и 3G-подключением происходит автоматически в обе стороны. ↩
-
doc-sdk-service-plugins.c009 · doc · any-documented; прошивка — · При включённом фоновом 3G-подключении не поддерживаются приём и передача SMS; качество сигнала определяется только в момент включения; горячее отключение USB-модема поддерживается только при выключенном фоновом 3G. ↩
-
doc-sdk-service-plugins.c010 · doc · any-documented; прошивка — · dvb_service по
cmd=set_system_timeсmedia_urlDVB-канала устанавливает системное время; запрос нельзя выполнять одновременно с воспроизведением DVB-канала. ↩ -
doc-sdk-service-plugins.c011 · doc · any-documented; прошивка — · Альтернатива вызову dvb_service — автозапуск скрипта при загрузке STB: создать
/config/boot, скачатьdvb_time, сделать его исполняемым и указать в нём DVB media_url. ↩ -
doc-sdk-service-plugins.c012 · doc · any-documented; прошивка — · file_service поддерживает команды
delete_file,get_infoиread_text_file. ↩ -
doc-sdk-service-plugins.c013 · doc · any-documented; прошивка — · file_service
cmd=delete_fileудаляет файл и возвращаетresult = ok; попытка удалить директорию даёт ошибку. ↩ -
doc-sdk-service-plugins.c014 · doc · any-documented; прошивка — · file_service
cmd=get_infoвозвращаетtype(regular_file,regular empty file,directoryи специальные значения),size,mtimeв unix timestamp иresult = ok; ссылки разыменовываются. ↩ -
doc-sdk-service-plugins.c015 · doc · any-documented; прошивка — · file_service
cmd=read_text_fileчитает текстовый файл; содержимое идёт после строки-разделителя@data; приmax_length <= 0возвращается файл целиком, иначе первыеmax(file_size, max_length)байт. ↩ -
doc-sdk-service-plugins.c016 · doc · any-documented; прошивка — · При ошибке file_service возвращает
result = errorиerror_message = command '<cmd>' failed. ↩ -
- fw-tv188b-261021-0117-r25--libphp5.c055 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 11 на tv188b r25 php_server зонда kb_probe11 сообщил PHP_VERSION=5.3.6, SAPI hd, getcwd=/ и uid=1000.
- fw-tv188b-261021-0117-r25--libphp5.c058 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 11 CGI env зонда сообщил PHP_VERSION=5.3.6, SAPI cgi-fcgi, uid=0 и getcwd=/data/data/com.dunehd.app/flashdata/plugins/kb_probe11/www/cgi-bin.
-
- fw-tv188b-261021-0117-r25--libphp5.c057 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 11 php_server kb_probe11 показал max_execution_time=0, memory_limit=128M, include_path=.:
:/data/data/com.dunehd.app/firmware_ext/php/include и magic_quotes_gpc=1. - fw-tv188b-261021-0117-r25--libphp5.c060 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 11 CGI env показал max_execution_time=30, memory_limit=128M, include_path=. и magic_quotes_gpc=0.
- fw-tv188b-261021-0117-r25--libphp5.c057 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 11 php_server kb_probe11 показал max_execution_time=0, memory_limit=128M, include_path=.:
-
fw-tv188b-261021-0117-r25--libphp5.c089 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 13 шаг g_env в php_server зонда kb_probe13 записал php_sapi_name() = hd, PHP_VERSION 5.3.6, getcwd() = / и posix_getuid() = 1000 (один прогон). ↩
-
fw-tv188b-261021-0117-r25.c391 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 13 php-cgi (/data/data/com.dunehd.app/firmware_ext/php/php-cgi, php_sapi_name cgi-fcgi, uid 0), запущенный busybox httpd для /cgi-bin/plugins/kb_probe13/env, имел FS_PREFIX, HD_HTTP_LOCAL_PORT=80, LD_LIBRARY_PATH, PATH, LOG_DIR, HD_APK, PLUGIN_NAME, PLUGIN_CGI_DIR и DUNEHD_SERVICE_DONT_FORK, а getenv(HOME) и getenv(TMPDIR) вернули false (один прогон). ↩↩
-
- fw-tv188b-261021-0117-r25.c298 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На снимках tv188b r25 (collect4 и начало collect6, до установки зондов) работают три php_server — shell_ext, dune-hd.tv (программа /flashdata/plugins/dune-hd.tv/i24h.php) и android_apps; все — дочерние процессы com.dunehd.app с Uid 1000.
- fw-tv188b-261021-0117-r25.c152 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 CGI плагина, запущенный httpd через run_plugin_cgi, работает под uid=0(root) gid=0(root) с SELinux-контекстом u:r:shell:s0.
-
- fw-tv188b-261021-0117-r25.c240 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 PHP-скрипт CGI плагина (php-cgi через CGI-обёртку) работает с posix_getuid() = 0, а php_server того же плагина — с uid 1000.
- fw-tv188b-261021-0117-r25.c259 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 из php_server PHP-плагина (id — uid=1000(system), context=u:r:system_app:s0) команда shell_exec('/system/dunehd/dunehd_service do id') выводит uid=0(root) gid=0(root) groups=0(root) context=u:r:shell:s0.
- fw-tv188b-261021-0117-r25--libphp5.c055 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 11 на tv188b r25 php_server зонда kb_probe11 сообщил PHP_VERSION=5.3.6, SAPI hd, getcwd=/ и uid=1000.
- fw-tv188b-261021-0117-r25--libphp5.c058 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 11 CGI env зонда сообщил PHP_VERSION=5.3.6, SAPI cgi-fcgi, uid=0 и getcwd=/data/data/com.dunehd.app/flashdata/plugins/kb_probe11/www/cgi-bin.
-
- fw-tv188b-261021-0117-r25--libphp5.c056 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 11 php_server kb_probe11 перечислил 32 загруженных расширения: Core, date, ereg, libxml, openssl, pcre, sqlite3, zlib, ctype, curl, dom, fileinfo, filter, hash, iconv, json, mbstring, pcntl, SPL, PDO, posix, Reflection, session, SimpleXML, soap, sockets, standard, tokenizer, xml, xmlreader, xmlwriter, zip.
- fw-tv188b-261021-0117-r25--libphp5.c059 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 11 CGI env перечислил те же 32 расширения, что php_server kb_probe11, и дополнительное cgi-fcgi.
-
- fw-tv188b-261021-0117-r25.c259 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 из php_server PHP-плагина (id — uid=1000(system), context=u:r:system_app:s0) команда shell_exec('/system/dunehd/dunehd_service do id') выводит uid=0(root) gid=0(root) groups=0(root) context=u:r:shell:s0.
- fw-tv188b-261021-0117-r25.c152 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 CGI плагина, запущенный httpd через run_plugin_cgi, работает под uid=0(root) gid=0(root) с SELinux-контекстом u:r:shell:s0.
-
- fw-tv188b-261021-0117-r25--libphp5.c003 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В зонде kb_probe5 на tv188b 261021_0117_r25 php_sapi_name возвращает hd.
- fw-tv188b-261021-0117-r25.c239 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в php-cgi CGI плагина PHP_VERSION = 5.3.6, php_sapi_name() = cgi-fcgi.
- fw-tv188b-261021-0117-r25--libphp5.c055 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 11 на tv188b r25 php_server зонда kb_probe11 сообщил PHP_VERSION=5.3.6, SAPI hd, getcwd=/ и uid=1000.
- fw-tv188b-261021-0117-r25--libphp5.c058 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 11 CGI env зонда сообщил PHP_VERSION=5.3.6, SAPI cgi-fcgi, uid=0 и getcwd=/data/data/com.dunehd.app/flashdata/plugins/kb_probe11/www/cgi-bin.
-
- fw-tv188b-261021-0117-r25--libphp5.c002 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В зонде kb_probe5 на tv188b 261021_0117_r25 значение PHP_VERSION равно 5.3.6.
- fw-tv188b-261021-0117-r25.c239 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в php-cgi CGI плагина PHP_VERSION = 5.3.6, php_sapi_name() = cgi-fcgi.
- fw-tv188b-261021-0117-r25.c242 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 встроенный PHP 32-битный по целым: в php_server и в php-cgi CGI плагина PHP_INT_SIZE = 4, PHP_INT_MAX = 2147483647.
- fw-tv188b-261021-0117-r25--libphp5.c055 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 11 на tv188b r25 php_server зонда kb_probe11 сообщил PHP_VERSION=5.3.6, SAPI hd, getcwd=/ и uid=1000.
- fw-tv188b-261021-0117-r25--libphp5.c058 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 11 CGI env зонда сообщил PHP_VERSION=5.3.6, SAPI cgi-fcgi, uid=0 и getcwd=/data/data/com.dunehd.app/flashdata/plugins/kb_probe11/www/cgi-bin.
-
- fw-tv188b-261021-0117-r25.c316 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 include_path в php_server = '.:<каталог плагина>:/data/data/com.dunehd.app/firmware_ext/php/include', каталог плагина — с префиксом $FS_PREFIX: …/flashdata/plugins/kb_probe5 и …/flashdata/plugins/dune-hd.tv у плагинов из flashdata, …/firmware_ext/plugins/shell_ext и …/firmware_ext/plugins/android_apps у встроенных; php_server пишет его в лог «[server] resetting include path to '…'».
- fw-tv188b-261021-0117-r25.c237 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 CGI-обёртка плагина по образцу download_subtitle (SCRIPT_FILENAME="$SCRIPT_FILENAME.php" и "$FS_PREFIX/firmware_ext/php/php-cgi" -c .) исполняет <имя>.php из www/cgi-bin плагина: FILE и SCRIPT_FILENAME — …/www/cgi-bin/rt.php, getcwd() — каталог www/cgi-bin, php_ini_loaded_file() — www/cgi-bin/php.ini, get_include_path() — «.».
- fw-tv188b-261021-0117-r25--libphp5.c057 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 11 php_server kb_probe11 показал max_execution_time=0, memory_limit=128M, include_path=.:
:/data/data/com.dunehd.app/firmware_ext/php/include и magic_quotes_gpc=1. - fw-tv188b-261021-0117-r25--libphp5.c060 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 11 CGI env показал max_execution_time=30, memory_limit=128M, include_path=. и magic_quotes_gpc=0.
-
- fw-tv188b-261021-0117-r25.c247 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в php_server PHP-плагина ini date.timezone = Europe/Moscow и date_default_timezone_get() = Europe/Moscow при getenv('TZ') = false; date() даёт MSK +0300, getprop persist.sys.timezone — Europe/Moscow.
- fw-tv188b-261021-0117-r25.c248 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в php-cgi CGI плагина с php.ini без date.timezone ini date.timezone пуст; date_default_timezone_get() возвращает Europe/Moscow, но date() и date_default_timezone_get() пишут PHP Warning «It is not safe to rely on the system's timezone settings… We selected 'Europe/Moscow' for 'MSK/3.0/no DST' instead».
-
- fw-tv188b-261021-0117-r25.c257 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в окружении php_server PHP-плагинов (kb_probe6, shell_ext, dune-hd.tv, android_apps) PHP_PROC_OPEN_SH=/data/data/com.dunehd.app/bin/sh; $FS_PREFIX/bin/sh — ссылка на /data/data/com.dunehd.app/lib/libxxx_bash.so.
- fw-tv188b-261021-0117-r25.c258 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в окружении php-cgi CGI плагина переменной PHP_PROC_OPEN_SH нет (getenv = false), а FS_PREFIX = /data/data/com.dunehd.app есть.
-
- fw-tv188b-261021-0117-r25.c390 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 13 /proc/self/environ php_server зонда kb_probe13 содержал, кроме общих с CGI переменных, HOME=/data/user/0/com.dunehd.app/app_vlc, TMPDIR=/data/data/com.dunehd.app/tmp, FS_BIN_PREFIX=/data/data/com.dunehd.app, APK_PACKAGE_NAME=com.dunehd.app, PHP_PROC_OPEN_SH=/data/data/com.dunehd.app/bin/sh, LOG_MAX_FILE_SIZE=3072000 и HD_RMCL_DISABLE_CLOPTNS=1 (один прогон).
- fw-tv188b-261021-0117-r25--libphp5.c090 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 13 $_SERVER в php_server зонда kb_probe13 содержал только REQUEST_TIME, argv и argc — без переменных окружения; переменные окружения процесса были в $_ENV (один прогон).
- fw-tv188b-261021-0117-r25.c391 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 13 php-cgi (/data/data/com.dunehd.app/firmware_ext/php/php-cgi, php_sapi_name cgi-fcgi, uid 0), запущенный busybox httpd для /cgi-bin/plugins/kb_probe13/env, имел FS_PREFIX, HD_HTTP_LOCAL_PORT=80, LD_LIBRARY_PATH, PATH, LOG_DIR, HD_APK, PLUGIN_NAME, PLUGIN_CGI_DIR и DUNEHD_SERVICE_DONT_FORK, а getenv(HOME) и getenv(TMPDIR) вернули false (один прогон).
- fw-tv188b-261021-0117-r25.c392 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 13 набор имён переменных в /proc/self/environ php-cgi совпал с набором имён в env sh-обёртки того же CGI-запроса (различие только в значении «_»): окружение php-cgi — это окружение sh-CGI busybox httpd (один прогон).
-
- fw-tv188b-261021-0117-r25.c326 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 ошибки и предупреждения PHP в коде плагина php_server пишет в /tmp/run/<плагин>.log строкой вида «[<полный путь файла>:<строка>] [E_WARNING] …» / «[…] [E_ERROR] …».
- fw-tv188b-260827-0003-r24--http-api.c005 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · run_plugin_cgi направляет stderr CGI-скриптов плагинов в $FS_PREFIX/tmp/dune_apk_cgi_err.log; при размере больше 10000 байт лог переименовывается в .old
-
- fw-tv188b-261021-0117-r25.c253 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 встроенный PHP (php_server и php-cgi CGI) в команде shell_exec добавляет $FS_PREFIX (/data/data/com.dunehd.app) к словам /tmp/…, /firmware/…, /config/…, /flashdata/… и к пути в одинарных кавычках ('/tmp/h'), но не к /etc/…, не к x/tmp/f и не к пути в двойных кавычках ("/tmp/g").
- fw-tv188b-261021-0117-r25.c254 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в файловых функциях встроенного PHP (php_server и php-cgi) realpath('/config') = /data/data/com.dunehd.app/config, realpath('/firmware') = /system/dunehd/firmware, realpath('/firmware_ext/php') = /system/dunehd/firmware_ext/php, хотя в корне ФС (adb shell) /firmware и /firmware_ext нет, а /config — другой каталог.
-
fw-tv188b-261021-0117-r25.c179 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 команды поставщика из стороннего плагина (bin без cd) выполняются с uid 1000 и текущим каталогом /. ↩
-
fw-tv188b-260827-0003-r24.c057 · device · tv188b, android-dune-fw; прошивка 260827_0003_r24 · На tv188b r24 демон dunehd_service (pid 587) работает от root с SELinux-меткой u:r:shell:s0 и PPID 1. ↩
-
- fw-tv188b-260827-0003-r24.c058 · device · tv188b, android-dune-fw; прошивка 260827_0003_r24 · На tv188b r24 HTTP-сервер «httpd -h /data/data/com.dunehd.app/tmp/www» (pid 1843) работает от root с SELinux-меткой u:r:shell:s0 и PPID 1.
- fw-tv188b-261021-0117-r25.c094 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 httpd запущен как «$FS_PREFIX/bin/httpd -h /data/data/com.dunehd.app/tmp/www», то есть корень веб-сервера — $FS_PREFIX/tmp/www; процесс работает от root (метка u:r:shell:s0, PPID 1).
-
fw-tv188b-260827-0003-r24.c062 · device · tv188b, android-dune-fw; прошивка 260827_0003_r24 · На tv188b r24 com.dunehd.app (pid 25631), его процесс :bg (pid 1590) и com.dunehd.systemui (pid 4952) работают от пользователя system с SELinux-меткой u:r:system_app:s0; userId пакета com.dunehd.app — 1000 (sharedUser android.uid.system/1000). ↩
-
fw-tv188b-260827-0003-r24.c067 · device · tv188b, android-dune-fw; прошивка 260827_0003_r24 · На tv188b r24 в окружении com.dunehd.app (pid 25631) PATH=/product/bin:… (без $FS_PREFIX), ANDROID_SOCKET_zygote=18 и ANDROID_SOCKET_usap_pool_primary=19; переменных FS_PREFIX, HD_APK, HD_FW_APK, LOG_DIR, TMPDIR, PHP_PROC_OPEN_SH и LD_LIBRARY_PATH в блоке нет. ↩↩
-
fw-tv188b-261021-0117-r25.c239 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в php-cgi CGI плагина PHP_VERSION = 5.3.6, php_sapi_name() = cgi-fcgi. ↩
-
fw-tv188b-261021-0117-r25--libphp5.c006 · code · android-dune-fw, android-atv; прошивка 261021_0117_r25, 260827_0003_r24, 250815_1012_r22, 260724_0207_r24, 1.0.1-1000-260724_0207_r24 · В strings libphp5.so пяти исследованных сборок присутствует версия OpenSSL 1.0.1u от 22 Sep 2016. ↩
-
fw-tv188b-261021-0117-r25--libphp5.c007 · code · android-dune-fw, android-atv; прошивка 261021_0117_r25, 260827_0003_r24, 250815_1012_r22, 260724_0207_r24, 1.0.1-1000-260724_0207_r24 · В strings libphp5.so пяти исследованных сборок присутствует строка версии PCRE 8.11 2010-12-10. ↩
-
fw-apk-260724-0207-r24--data-deploy--php-fs-prefix.c028 · code · android-atv, android-dune-fw; прошивка 260724_0207_r24, 260827_0003_r24, 240619_0210_r22, 250815_1012_r22, 261021_0117_r25 · libphp5.so APK 260724_0207_r24 совпадает по sha256 (e28ffc74…) с libphp5.so прошивок tv175u 260724_0207_r24 и tv188b 260827_0003_r24; в tv175u 240619_0210_r22 и tv188b 250815_1012_r22 файл другой (e7d22b70…), в tv188b 261021_0117_r25 — тоже (4a31ef48…) ↩↩↩
-
- fw-tv188b-261021-0117-r25--libphp5.c009 · code · android-dune-fw, android-atv; прошивка 261021_0117_r25, 260827_0003_r24, 250815_1012_r22, 260724_0207_r24, 1.0.1-1000-260724_0207_r24 · В strings libphp5.so пяти исследованных сборок присутствуют имена JSON: json_encode, json_decode, json_last_error.
- fw-tv188b-261021-0117-r25.c244 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в php_server и php-cgi json_decode() целых вне 32-битного диапазона (2147483648, 4294967296, 9007199254740993, 1793009215123, [3000000000]) возвращает integer 2147483647, а -2147483649 — integer -2147483648; json_last_error() при этом 0.
-
- fw-tv188b-261021-0117-r25--libphp5.c010 · code · android-dune-fw, android-atv; прошивка 261021_0117_r25, 260827_0003_r24, 250815_1012_r22, 260724_0207_r24, 1.0.1-1000-260724_0207_r24 · В strings libphp5.so пяти исследованных сборок присутствуют имена cURL: curl_init, curl_copy_handle, curl_version, curl_setopt, curl_setopt_array, curl_exec, curl_getinfo, curl_error, curl_errno, curl_close.
- fw-tv188b-261021-0117-r25.c249 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в php_server и php-cgi curl_version() сообщает version 7.67.0, ssl_version OpenSSL/1.0.1u, libz_version 1.2.11, host arm-unknown-linux-androideabi.
-
- fw-tv188b-261021-0117-r25--libphp5.c011 · code · android-dune-fw, android-atv; прошивка 261021_0117_r25, 260827_0003_r24, 250815_1012_r22, 260724_0207_r24, 1.0.1-1000-260724_0207_r24 · В strings libphp5.so пяти исследованных сборок присутствуют имена PHP cURL multi: curl_multi_init, curl_multi_add_handle, curl_multi_remove_handle, curl_multi_select, curl_multi_exec, curl_multi_getcontent, curl_multi_info_read, curl_multi_close.
- fw-tv188b-261021-0117-r25.c234 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 PHP-скрипт CGI плагина (php-cgi через CGI-обёртку), выполнивший curl_multi на 4 хендла к httpd самого плеера (http://127.0.0.1/plugins/…, http://127.0.0.1:80/cgi-bin/plugins/…, http://localhost/cgi-bin/plugins/…), доходит до curl_multi_info_read и получает все 4 сообщения с msg=1 result=0, после чего php-cgi завершается с кодом 139 и в /tmp/dune_apk_cgi_err.log появляется «Segmentation fault»; повторный запуск дал то же самое.
-
- fw-tv188b-261021-0117-r25--libphp5.c014 · code · android-dune-fw, android-atv; прошивка 261021_0117_r25, 260827_0003_r24, 250815_1012_r22, 260724_0207_r24, 1.0.1-1000-260724_0207_r24 · В strings libphp5.so пяти исследованных сборок присутствуют имена mbstring: mb_strlen, mb_substr, mb_convert_encoding, mb_detect_encoding, mb_check_encoding.
- fw-tv188b-261021-0117-r25--libphp5.c062 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 11 из php_server kb_probe11 вызов mb_strlen для двух букв UTF-8 вернул 2.
-
fw-tv188b-261021-0117-r25--libphp5.c015 · code · android-dune-fw, android-atv; прошивка 261021_0117_r25, 260827_0003_r24, 250815_1012_r22, 260724_0207_r24, 1.0.1-1000-260724_0207_r24 · В strings libphp5.so пяти исследованных сборок присутствуют имена iconv: iconv_strlen, iconv_substr, iconv_mime_decode, iconv_get_encoding, iconv_set_encoding. ↩
-
fw-tv188b-261021-0117-r25--libphp5.c016 · code · android-dune-fw, android-atv; прошивка 261021_0117_r25, 260827_0003_r24, 250815_1012_r22, 260724_0207_r24, 1.0.1-1000-260724_0207_r24 · В strings libphp5.so пяти исследованных сборок присутствуют имена PCRE: preg_match, preg_match_all, preg_replace, preg_split, preg_last_error. ↩
-
- fw-tv188b-261021-0117-r25--libphp5.c017 · code · android-dune-fw, android-atv; прошивка 261021_0117_r25, 260827_0003_r24, 250815_1012_r22, 260724_0207_r24, 1.0.1-1000-260724_0207_r24 · В strings libphp5.so пяти исследованных сборок присутствуют имена OpenSSL: openssl_encrypt, openssl_decrypt, openssl_sign, openssl_verify, openssl_random_pseudo_bytes.
- fw-tv188b-261021-0117-r25.c331 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 openssl_x509_parse() в php_server и в php-cgi даёт validTo_time_t = -1 (gmdate — 1969-12-31 23:59:59) у всех сертификатов /firmware/certs/ca-bundle.crt со сроком позже 2038-01-19 03:14:07 UTC (57 из 143), а более ранние сроки переводит верно; 2147483647 (2038-01-19 03:14:07) — настоящий срок сертификата GlobalSign.
-
- fw-tv188b-261021-0117-r25--libphp5.c018 · code · android-dune-fw, android-atv; прошивка 261021_0117_r25, 260827_0003_r24, 250815_1012_r22, 260724_0207_r24, 1.0.1-1000-260724_0207_r24 · В strings libphp5.so пяти исследованных сборок присутствуют имена pcntl: pcntl_fork, pcntl_waitpid, pcntl_signal, pcntl_signal_dispatch, pcntl_exec.
- fw-tv188b-261021-0117-r25--libphp5.c066 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 11 pcntl_fork из php_server создал потомка 22745; после posix_kill(getmypid(),9) в потомке pcntl_waitpid вернул 22745 и status=9.
-
- fw-tv188b-261021-0117-r25--libphp5.c019 · code · android-dune-fw, android-atv; прошивка 261021_0117_r25, 260827_0003_r24, 250815_1012_r22, 260724_0207_r24, 1.0.1-1000-260724_0207_r24 · В strings libphp5.so пяти исследованных сборок присутствуют имена posix: posix_getuid, posix_getpid, posix_kill, posix_setuid.
- fw-tv188b-261021-0117-r25--libphp5.c004 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В зонде kb_probe5 на tv188b 261021_0117_r25 posix_getuid возвращает 1000.
- fw-tv188b-261021-0117-r25--libphp5.c066 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 11 pcntl_fork из php_server создал потомка 22745; после posix_kill(getmypid(),9) в потомке pcntl_waitpid вернул 22745 и status=9.
-
fw-tv188b-261021-0117-r25--libphp5.c020 · code · android-dune-fw, android-atv; прошивка 261021_0117_r25, 260827_0003_r24, 250815_1012_r22, 260724_0207_r24, 1.0.1-1000-260724_0207_r24 · В strings libphp5.so пяти исследованных сборок присутствуют имена sockets: socket_create, socket_connect, socket_select, socket_read, socket_write. ↩
-
fw-tv188b-261021-0117-r25--libphp5.c021 · code · android-dune-fw, android-atv; прошивка 261021_0117_r25, 260827_0003_r24, 250815_1012_r22, 260724_0207_r24, 1.0.1-1000-260724_0207_r24 · В strings libphp5.so пяти исследованных сборок присутствуют имена XML: simplexml_load_string, xml_parser_create, libxml_use_internal_errors. ↩
-
- fw-tv188b-261021-0117-r25--libphp5.c022 · code · android-dune-fw, android-atv; прошивка 261021_0117_r25, 260827_0003_r24, 250815_1012_r22, 260724_0207_r24, 1.0.1-1000-260724_0207_r24 · В strings libphp5.so пяти исследованных сборок присутствуют имена классов XML/SOAP/ZIP/SQLite: DOMDocument, SoapClient, ZipArchive, SQLite3.
- fw-tv188b-261021-0117-r25--libphp5.c063 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 11 из php_server SQLite3(:memory:)->querySingle(SELECT 1) вернул 1.
- fw-tv188b-261021-0117-r25--libphp5.c064 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 11 из php_server ZipArchive::open с CREATE вернул true.
- fw-tv188b-261021-0117-r25--libphp5.c065 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 11 из php_server DOMDocument::loadXML для вернул true.
-
fw-tv188b-261021-0117-r25--libphp5.c023 · code · android-dune-fw, android-atv; прошивка 261021_0117_r25, 260827_0003_r24, 250815_1012_r22, 260724_0207_r24, 1.0.1-1000-260724_0207_r24 · В strings libphp5.so пяти исследованных сборок присутствуют имена hash, сессий и zlib: hash_hmac, hash_file, session_start, gzcompress, gzuncompress. ↩
-
fw-tv188b-261021-0117-r25--libphp5.c062 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 11 из php_server kb_probe11 вызов mb_strlen для двух букв UTF-8 вернул 2. ↩
-
fw-tv188b-261021-0117-r25--libphp5.c063 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 11 из php_server SQLite3(:memory:)->querySingle(SELECT 1) вернул 1. ↩
-
fw-tv188b-261021-0117-r25--libphp5.c064 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 11 из php_server ZipArchive::open с CREATE вернул true. ↩
-
fw-tv188b-261021-0117-r25--libphp5.c065 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 11 из php_server DOMDocument::loadXML для вернул true. ↩
-
fw-tv188b-261021-0117-r25--libphp5.c066 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 11 pcntl_fork из php_server создал потомка 22745; после posix_kill(getmypid(),9) в потомке pcntl_waitpid вернул 22745 и status=9. ↩
-
fw-tv188b-261021-0117-r25--libphp5.c067 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 11 popen(echo kb11-popen,r) вернул строку kb11-popen, pclose — 0. ↩
-
fw-tv188b-261021-0117-r25--libphp5.c068 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 11 proc_open без cwd/env выполнил sh-команду с rc=0; readlink /proc/$$/exe в ней показал /system/bin/libxxx_bash.so. ↩↩
-
fw-tv188b-261021-0117-r25--libphp5.c008 · code · android-dune-fw, android-atv; прошивка 261021_0117_r25, 260827_0003_r24, 250815_1012_r22, 260724_0207_r24, 1.0.1-1000-260724_0207_r24 · В strings libphp5.so пяти исследованных сборок присутствуют имена библиотек-зависимостей: libxml2.so.2, libcurl.so.5, libssl.so.1.0.0, libcrypto.so.1.0.0, libiconv.so.2, libz.so. ↩
-
fw-tv188b-261021-0117-r25.c241 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 $FS_PREFIX/firmware_ext/php/php-cgi, запущенный из adb shell (adbd root) с LD_LIBRARY_PATH=$FS_PREFIX/lib:$LD_LIBRARY_PATH, не стартует — «CANNOT LINK EXECUTABLE … library "libiconv.so.2" not found: needed by main executable», код 1 (и с -v, и с -q -f). ↩↩
-
fw-tv188b-261021-0117-r25.c243 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в php_server и php-cgi целочисленный литерал 3000000000 в PHP-коде даёт integer 2147483647 (gettype integer, json_encode(3000000000) и json_encode(1793009215123) — 2147483647), тогда как PHP_INT_MAX + 1 даёт 2147483648, а time() * 1000 — 13-значное число без обрезки. ↩
-
fw-tv188b-261021-0117-r25.c244 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в php_server и php-cgi json_decode() целых вне 32-битного диапазона (2147483648, 4294967296, 9007199254740993, 1793009215123, [3000000000]) возвращает integer 2147483647, а -2147483649 — integer -2147483648; json_last_error() при этом 0. ↩↩
-
fw-tv188b-261021-0117-r25.c245 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в php_server и php-cgi json_decode() целого 12345678901234567890 возвращает double 1.2345678901235E+19 при json_last_error() = 0. ↩
-
fw-tv188b-261021-0117-r25.c288 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 DuneSystem::$properties у PHP-плагина kb_probe5 из flashdata содержит 8 ключей: sdk_version '1.0.0', plugin_name 'kb_probe5', install_dir_path, tmp_dir_path, data_dir_path, plugin_www_url, plugin_cgi_url, few_buttons_remote_type '0'. ↩
-
- fw-tv188b-261021-0117-r25.c290 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 install_dir_path у kb_probe5 = '/data/data/com.dunehd.app/flashdata/plugins/kb_probe5' (is_dir() = true) — тот же путь, что
плагина в /tmp/run/installed_plugins.xml. - fw-tv188b-261021-0117-r25.c291 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 tmp_dir_path у kb_probe5 = '/data/data/com.dunehd.app/tmp/plugins/kb_probe5' — путь /tmp/plugins/kb_probe5 с префиксом FS_PREFIX=/data/data/com.dunehd.app; is_dir() для него true.
- fw-tv188b-261021-0117-r25.c292 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 data_dir_path у kb_probe5 (плагин в flashdata) = '/data/data/com.dunehd.app/flashdata/plugins_data/kb_probe5'; is_dir() для него true.
- fw-tv188b-261021-0117-r25.c290 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 install_dir_path у kb_probe5 = '/data/data/com.dunehd.app/flashdata/plugins/kb_probe5' (is_dir() = true) — тот же путь, что
-
fw-tv188b-261021-0117-r25.c289 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 у kb_probe5 plugin_www_url = 'http://127.0.0.1:80/plugins/kb_probe5/', plugin_cgi_url = 'http://127.0.0.1:80/cgi-bin/plugins/kb_probe5/' — с явным портом 80. ↩
-
fw-tv188b-260827-0003-r24--php-framework.c071 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · HD читает переменные окружения: is_apk — HD_APK, is_fw_apk — HD_FW_APK, get_apk_package_name — APK_PACKAGE_NAME, get_fs_prefix — FS_PREFIX (пустая строка, если не задана); is_limited_apk = apk и не fw_apk; with_network_manager = не limited_apk ↩
-
fw-tv188b-261021-0117-r25.c258 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в окружении php-cgi CGI плагина переменной PHP_PROC_OPEN_SH нет (getenv = false), а FS_PREFIX = /data/data/com.dunehd.app есть. ↩↩↩↩
-
fw-tv175u-260724-0207-r24.c023 · code · tv175u, android; прошивка 260724_0207_r24 · Скрипт /system/dunehd/init не выставляет HD_APK, HD_FW_APK и FS_PREFIX: перед запуском dunehd_service он экспортирует только PATH, LD_LIBRARY_PATH=/firmware/lib:/lib:/usr/lib и LOG_DIR=/tmp/run ↩
-
fw-tv188b-261021-0117-r25.c254 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в файловых функциях встроенного PHP (php_server и php-cgi) realpath('/config') = /data/data/com.dunehd.app/config, realpath('/firmware') = /system/dunehd/firmware, realpath('/firmware_ext/php') = /system/dunehd/firmware_ext/php, хотя в корне ФС (adb shell) /firmware и /firmware_ext нет, а /config — другой каталог. ↩↩↩
-
- fw-tv188b-261021-0117-r25.c255 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 во встроенном PHP (php_server и php-cgi CGI плагина) путь /flashdata существует: is_dir('/flashdata') = true, realpath — /data/data/com.dunehd.app/flashdata, хотя в корне ФС (adb shell) /flashdata нет.
- fw-tv188b-261021-0117-r25.c207 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в корне ФС каталога /flashdata нет, а оболочка в shell.log называет каталог плагинов /flashdata/plugins («Loading plugins from '/flashdata/plugins'», «invalid plugin manifest from '/flashdata/plugins/kb_probe5_badname/dune_plugin.xml'», «copying recursively '/tmp/plugin_tmp' to '/flashdata/plugins/kb_probe5_plat'»); файлы этих плагинов лежат в /data/data/com.dunehd.app/flashdata/plugins.
-
fw-apk-260724-0207-r24--data-deploy--php-fs-prefix.c001 · code · android-atv; прошивка 260724_0207_r24 · В libphp5.so APK функция _php_get_fs_prefix(path) возвращает getenv("FS_PREFIX"), только если path начинается с '/' и _php_path_needs_prefix.part.0(path) вернула не 0; иначе возвращает NULL ↩
-
fw-apk-260724-0207-r24--data-deploy--php-fs-prefix.c007 · code · android-atv; прошивка 260724_0207_r24 · _php_path_needs_prefix.part.0(path) возвращает 1, если str_starts_with(path, s) не 0 для одной из строк "/tmp", "/firmware", "/config", "/flashdata", "/fconfig" или strcmp(path, s) равен 0 для "/system/dunehd/init" и "/D"; иначе возвращает 1 или 0 по результату str_starts_with(path, <строка по адресу 0x353448>) — того же второго образца, что в _php_get_fs_prefix2 ↩
-
fw-apk-260724-0207-r24--data-deploy--php-fs-prefix.c032 · code · android-atv; прошивка 260724_0207_r24 · Корни в _php_path_needs_prefix.part.0 сравниваются как префикс без проверки границы каталога: str_starts_with(path, s) возвращает результат strncmp(path, s, strlen(s)) == 0, поэтому проверку проходят и /firmware_ext/…, /tmpX, /config2/…, /flashdata_old/… ↩
-
fw-apk-260724-0207-r24--data-deploy--php-fs-prefix.c002 · code · android-atv; прошивка 260724_0207_r24 · _php_get_fs_prefix2(path) при заданной FS_PREFIX возвращает строку "/tmp/mnt", если path равен "/D" (strcmp) или начинается со второй строки-образца (str_starts_with); в остальных случаях и без FS_PREFIX — NULL ↩
-
fw-apk-260724-0207-r24--data-deploy--php-fs-prefix.c006 · code · android-atv; прошивка 260724_0207_r24 · Без переменной FS_PREFIX _php_add_fs_prefix путь под корнями не меняет: возвращает *out, если он не NULL, иначе исходный path ↩
-
fw-apk-260724-0207-r24--data-deploy--php-fs-prefix.c026 · code · android-atv; прошивка 260724_0207_r24 · _php_add_fs_prefix вызывают в 24 местах 22 функции: _php_curl_setopt (2 вызова), zif_simplexml_load_file, zim_simplexml_element_asXML, zif_chdir, zif_glob, zif_readfile, zif_rename (2), zif_unlink, php_do_chgrp.isra.1, php_do_chown.isra.2, zif_disk_total_space, zif_disk_free_space, zif_chmod, zif_touch, fcn.0020d018 (у Ghidra — php_clear_stat_cache), php_stat, _php_stream_mkdir, _php_stream_rmdir, _php_stream_stat_path, _php_stream_opendir, _php_stream_open_wrapper_ex и zend_stream_open ↩
-
fw-apk-260724-0207-r24--data-deploy--php-fs-prefix.c025 · code · android-atv; прошивка 260724_0207_r24 · virtual_file_ex(state, path, …) для path, начинающегося с '/', собирает во внутреннем буфере строку _php_get_fs_prefix(path) + _php_get_fs_prefix2(path) + path (префиксы — если не NULL; _php_get_fs_prefix2 вызывается, только если первый не NULL) и передаёт этот буфер в tsrm_realpath_r; относительный path дописывается через '/' к пути из state без префиксов ↩
-
fw-apk-260724-0207-r24--data-deploy--php-fs-prefix.c033 · code · android-atv; прошивка 260724_0207_r24 · virtual_file_ex вызывают в 22 местах 21 функция: virtual_chdir, virtual_realpath, virtual_filepath_ex, virtual_fopen, virtual_access, virtual_utime, virtual_chmod, virtual_chown, virtual_open, virtual_creat, virtual_rename (2 вызова), virtual_stat, virtual_lstat, virtual_unlink, virtual_mkdir, virtual_rmdir, virtual_opendir, tsrm_realpath, expand_filepath_ex, php_do_open_temporary_file и php_zip_extract_file.isra.3 ↩
-
fw-apk-260724-0207-r24--data-deploy--php-fs-prefix.c040 · code · android-atv; прошивка 260724_0207_r24 · _php_stream_open_wrapper_ex(path, mode, options, …) при сброшенном бите 1 в options пропускает path через _php_add_fs_prefix до php_stream_locate_url_wrapper; при установленном бите 1 _php_add_fs_prefix не вызывает, а разрешает path через указатель zend_resolve_path ↩
-
fw-apk-260724-0207-r24--data-deploy--php-fs-prefix.c041 · code · android-atv; прошивка 260724_0207_r24 · Если mode начинается с 'r', path равен "/sys/class/net/eth0/address" и переменная HD_APK задана (php_is_apk() не 0), _php_stream_open_wrapper_ex при сброшенном бите 1 в options подменяет path на "/tmp/run/dune_mac.txt" и уже его пропускает через _php_add_fs_prefix ↩
-
fw-apk-260724-0207-r24--data-deploy--php-fs-prefix.c044 · code · android-atv; прошивка 260724_0207_r24 · php_is_apk() возвращает 1, если getenv("HD_APK") не NULL, иначе 0; содержимое значения HD_APK не проверяется. ↩
-
fw-apk-260724-0207-r24--data-deploy--php-fs-prefix.c008 · code · android-atv; прошивка 260724_0207_r24 · _php_add_fs_prefix_to_cmd вызывают php_exec, zif_shell_exec, zif_popen, zif_proc_open и virtual_popen (перекрёстные ссылки radare2 в листинге) ↩
-
fw-apk-260724-0207-r24--data-deploy--php-fs-prefix.c014 · code · android-atv; прошивка 260724_0207_r24 · _php_add_fs_prefix_to_cmd ищет в команде символы '/' и проверяет путь, только если перед '/' стоит пробел, '!', '&', апостроф, '(', ')', ';', '<', '>' или обратная кавычка; после двойной кавычки, '=', '|', ':', табуляции и прочих символов путь не переписывается ↩
-
fw-apk-260724-0207-r24--data-deploy--php-fs-prefix.c011 · code · android-atv; прошивка 260724_0207_r24 · Если первое слово команды оканчивается на /php-cgi (strstr "/php-cgi " раньше первого пробела), _php_add_fs_prefix_to_cmd заменяет его на $FS_PREFIX/firmware_ext/php/php-cgi, дописывает « -c » и исходный каталог этого php-cgi (часть слова до /php-cgi, без префикса), а остаток команды разбирает дальше ↩
-
fw-apk-260724-0207-r24--data-deploy--php-fs-prefix.c012 · code · android-atv; прошивка 260724_0207_r24 · Если команда начинается с $FS_PREFIX или с пути, для которого _php_path_needs_prefix.part.0 не 0, и этот путь (после префикса) не начинается с /firmware/bin/ или /firmware_ext/php/, _php_add_fs_prefix_to_cmd начинает результат со строки «sh » (3 байта) ↩
-
fw-tv188b-261021-0117-r25--libphp5.c085 · code · android-dune-fw; прошивка 261021_0117_r25 · В r25 _php_add_fs_prefix_to_cmd, если команда начинается с '/' и путь требует префикса (_php_path_needs_prefix.part.0), но не начинается с /firmware/bin/ или /firmware_ext/php/, ставит в начало результата «sh ». ↩
-
fw-tv188b-261021-0117-r25--libphp5.c086 · code · android-dune-fw; прошивка 261021_0117_r25 · В r25 _php_add_fs_prefix_to_cmd дописывает $FS_PREFIX к пути у '/', только если байт перед '/' — пробел, '!', '&', апостроф, '(', ')', ';', '<', '>' или '`'; для '/' в первом символе команды проверяется байт перед началом строки. ↩↩
-
fw-tv188b-261021-0117-r25--libphp5.c077 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 11 exec команды /config/kbp11_x.sh first-word из php_server вернул rc=127 и sh: /config/kbp11_x.sh: No such file or directory; file_get_contents того же пути с use_include_path=true прочитал 49 байт. ↩↩↩
-
fw-tv188b-261021-0117-r25--libphp5.c080 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 11 file_get_contents(lib/kbp11_steps.php,true) из php_server прочитал 15678 байт. ↩
-
fw-tv188b-261021-0117-r25--libphp5.c078 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 11 proc_open с cwd=/tmp из php_server вернул rc=0, pwd=/tmp и увидел каталог kb_probe11. ↩↩
-
fw-tv188b-261021-0117-r25--libphp5.c079 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 11 proc_open с env={KB11_E:one} из php_server вернул rc=0, KB11_E=one и PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:.. ↩↩
-
fw-tv188b-261021-0117-r25.c354 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в окружении php_server плагина kb_probe8 (pid 3005, ppid 2449, uid 1000) PATH=/data/data/com.dunehd.app/firmware/bin:/data/data/com.dunehd.app/bin:/bin:/product/bin:/apex/com.android.runtime/bin:/apex/com.android.art/bin:/system_ext/bin:/system/bin:/system/xbin:/odm/bin:/vendor/bin:/vendor/xbin. ↩↩↩
-
fw-tv188b-261021-0117-r25--libphp5.c093 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 13 shell_exec("echo x; /config/kbp13_x.sh after-semicolon") выполнил скрипт по пути /data/data/com.dunehd.app/config/kbp13_x.sh: путь после «; » получил $FS_PREFIX (один прогон). ↩↩
-
- fw-tv188b-261021-0117-r25--libphp5.c091 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 13 с PHP_DEBUG=1 exec("/config/kbp13_x.sh first-word 2>&1") в php_server вернул rc=127 и «sh: /config/kbp13_x.sh: No such file or directory» — путь первым словом префикс $FS_PREFIX не получил (повтор наблюдения запроса 11, один прогон).
- fw-tv188b-261021-0117-r25--libphp5.c092 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 13 exec("echo /config/kbp13_x.sh") в php_server напечатал /data/data/com.dunehd.app/config/kbp13_x.sh, а exec("sh /config/kbp13_x.sh after-sh") запустил скрипт с argv0 /data/data/com.dunehd.app/config/kbp13_x.sh: путь после пробела получил $FS_PREFIX (один прогон).
-
fw-tv188b-261021-0117-r25--libphp5.c094 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 13 после шага g_subst с PHP_DEBUG=1 grep «=H=>» по /tmp/run/kb_probe13.log не нашёл ни одной строки; строк о замене команд в выводе нет (один прогон). ↩↩
-
- fw-tv188b-261021-0117-r25.c147 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 после регистрации плагина из $FS_PREFIX/flashdata/plugins появляется пустой каталог /tmp/plugins/
(владелец system).
- fw-tv188b-261021-0117-r25.c148 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 после регистрации плагина, положенного через adb push, появляется каталог $FS_PREFIX/flashdata/plugins_data/
(владелец system).
- fw-tv188b-261021-0117-r25.c147 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 после регистрации плагина из $FS_PREFIX/flashdata/plugins появляется пустой каталог /tmp/plugins/
-
- fw-tv188b-261021-0117-r25.c290 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 install_dir_path у kb_probe5 = '/data/data/com.dunehd.app/flashdata/plugins/kb_probe5' (is_dir() = true) — тот же путь, что
плагина в /tmp/run/installed_plugins.xml. - fw-tv188b-261021-0117-r25.c316 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 include_path в php_server = '.:<каталог плагина>:/data/data/com.dunehd.app/firmware_ext/php/include', каталог плагина — с префиксом $FS_PREFIX: …/flashdata/plugins/kb_probe5 и …/flashdata/plugins/dune-hd.tv у плагинов из flashdata, …/firmware_ext/plugins/shell_ext и …/firmware_ext/plugins/android_apps у встроенных; php_server пишет его в лог «[server] resetting include path to '…'».
- fw-tv188b-260827-0003-r24--plugin-loader--online-upgrade.c073 · code · android-atv; прошивка 260724_0207_r24 · В APK r24 при замене установленного плагина (fcn.00291428) старому вызывается nav_plugin_delete_plugin_data (fcn.00261034) с флагом 1: удаляются только каталоги установки (список fcn.0021bab0 и plugin->path) и ещё одно поле плагина (+0x14); /tmp/plugin_updater_
.txt, поля +0x10, +0x18…+0x24, /tmp/www/plugins/ , /tmp/www/cgi-bin/plugins/ и файл, путь которого строит fcn.0027ee94, удаляются только при флаге 0; затем новый каталог копируется (из /tmp/) или переименовывается в <хранилище>/plugins/ , снимается флаг скрытия, удаляется /tmp/plugin_updater_ .txt и плагин перезагружается
- fw-tv188b-261021-0117-r25.c290 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 install_dir_path у kb_probe5 = '/data/data/com.dunehd.app/flashdata/plugins/kb_probe5' (is_dir() = true) — тот же путь, что
-
- fw-tv188b-261021-0117-r25.c292 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 data_dir_path у kb_probe5 (плагин в flashdata) = '/data/data/com.dunehd.app/flashdata/plugins_data/kb_probe5'; is_dir() для него true.
- fw-tv188b-261021-0117-r25.c231 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 каталоги данных плагинов лежат в /data/data/com.dunehd.app/flashdata/plugins_data/
, в том числе для встроенных из firmware_ext (widget, radiotime, s928x_dvfel и др.) и dune_internal; в /data/data/com.dunehd.app/config/plugins_data есть только bluray. Других каталогов plugins_data поиск по ФС не нашёл, кроме тех же путей через /data/user/0 и /data_mirror.
- fw-tv188b-260827-0003-r24--plugin-loader--online-upgrade.c090 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 онлайн-обновление сохраняет cookies плагина и его data_dir_path: v2 и v3 получили в plugin_cookies значение kbp7u_mark, записанное v1, файл kbp7u_mark.txt v1 в flashdata/plugins_data/
остался с прежним mtime.
-
- fw-tv188b-261021-0117-r25.c291 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 tmp_dir_path у kb_probe5 = '/data/data/com.dunehd.app/tmp/plugins/kb_probe5' — путь /tmp/plugins/kb_probe5 с префиксом FS_PREFIX=/data/data/com.dunehd.app; is_dir() для него true.
- fw-tv188b-261021-0117-r25.c294 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 пустой каталог /tmp/plugins/<плагин> PHP-плагина существует уже после регистрации плагина, до первого вызова и запуска его php_server: kb_probe5 — в 13:24 при первом вызове в 13:37:59, kb_probe6 — в 15:06 при первом вызове в 15:08:02 (местное время).
-
fw-tv188b-261021-0117-r25.c329 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 php_server при старте пишет «Starting logging to '/data/data/com.dunehd.app/tmp/run/<плагин>.log' (<= 3072000)»; в окружении php_server LOG_DIR=/tmp/run и LOG_MAX_FILE_SIZE=3072000. ↩↩↩
-
fw-tv188b-261021-0117-r25.c303 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 /tmp/run/<плагин>.pid переписывается при каждом новом запуске php_server: у kb_probe5 файл последовательно содержал 17362, 17676, 17849, 17924, а его mtime совпадал со временем запуска нового процесса (13:37:59.827, 13:39:39.787, 13:40:31.655, 13:40:46.215). ↩
-
- fw-tv188b-261021-0117-r25.c123 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 /tmp/mnt содержит каталоги network, smb и storage, все drwxrwxrwx system:system.
- fw-tv188b-261021-0117-r25.c124 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 SMB-ресурсы из /tmp/run/network_mount_list.xml (path="/tmp/mnt/smb/
", status="mounted") смонтированы как cifs в /tmp/mnt/smb/ : например, //<адрес в LAN>/usb_tb — в /tmp/mnt/smb/5.
-
fw-tv188b-261021-0117-r25--libphp5.c069 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 11 php_server kb_probe11 успешно создал и удалил kbp11_w.tmp в /sdcard, /config, /tmp, tmp_dir_path и data_dir_path. ↩
-
fw-tv188b-261021-0117-r25--libphp5.c070 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 11 fopen на запись /data/data/com.dunehd.app/firmware/kbp11_w.tmp из php_server вернул ошибку failed to open stream: Read-only file system. ↩
-
fw-tv188b-261021-0117-r25.c375 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 11 на tv188b r25 /data/data/com.dunehd.app/tmp оказался символической ссылкой на /tmp. ↩↩
-
fw-tv188b-260827-0003-r24.c021 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Скрипт /system/xbin/dunehd/init монтирует tmpfs в /tmp, запускает dunehd_service и выставляет FS_PREFIX=/data/data/com.dunehd.app, HD_APK=1, HD_FW_APK=1, HD_HTTP_LOCAL_PORT=80 ↩
-
fw-apk-260724-0207-r24--data-deploy.c028 · code · android-atv; прошивка 260724_0207_r24 · В режиме fw_apk класс содержит другой путь: fwApkEnsureTmpDir удаляет настоящий каталог
/tmp и заменяет его симлинком на системный /tmp, а fwApkEnsureSymlinks ставит /firmware → /system/dunehd/firmware и /firmware_ext → /system/dunehd/firmware_ext ↩ -
fw-tv188b-260827-0003-r24--plugin-loader.c054 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · libduneshell.so содержит флаги однократных действий /tmp/run/%s_plugin_boot_action_executed.flag и /tmp/run/%s_plugin_boot_end_action_executed.flag с сообщениями «boot action already executed» ↩
-
fw-tv188b-261021-0117-r25.c075 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 флаги boot/boot_end встроенных и ранее установленных плагинов (Dune_backup, radiotime, widget_ext, s928x_dvfel) имели mtime 2026-10-25 01:54 — момент загрузки системы, если вычесть /proc/uptime (127797 с) из времени начала прогона 2026-10-26 13:24. ↩
-
fw-tv188b-261021-0117-r25.c077 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 при следующих стартах приложения (после am force-stop и после restart_gui) boot и boot_end плагина kb_probe5 не выполнялись повторно — в shell.log «[plugin] kb_probe5: boot action already executed» и «[plugin] kb_probe5: GUI boot action already executed». ↩
-
fw-tv188b-261021-0117-r25.c308 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 после каждого перезапуска php_server (по touch main.php, после Fatal error, после exit(0)) статические переменные плагина начинаются заново: счётчик KbProbe5Fw::$n в первом вызове нового процесса снова равен 1 (pid 17676, 17849, 17924). ↩
-
doc-sdk-plugins.c066 · doc · any-documented; прошивка — · data_dir_path (постоянные данные) недоступен на устройствах без System Storage и Flash Memory Storage — тогда ключ не задан ↩
-
doc-sdk-plugins.c067 · doc · any-documented; прошивка — · После каждой записи в постоянное хранилище нужно сразу выполнять sync (команду или системный вызов) ↩
-
fw-tv188b-261021-0117-r25.c256 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 shell_exec во встроенном PHP (php_server и php-cgi CGI) выполняет команду через /system/bin/sh: readlink /proc/$$/exe даёт /system/bin/sh, $0 — sh. ↩
-
fw-apk-260724-0207-r24--data-deploy--php-fs-prefix.c019 · code · android-atv; прошивка 260724_0207_r24 · Дочерний процесс proc_open берёт путь оболочки из getenv("PHP_PROC_OPEN_SH"), а если переменной нет — "/bin/sh" ↩
-
fw-apk-260724-0207-r24--data-deploy--php-fs-prefix.c020 · code · android-atv; прошивка 260724_0207_r24 · Затем дочерний процесс proc_open вызывает execl(<оболочка>, "sh", "-c", <команда>, NULL), а при заданном аргументе env — execle(…, <массив env>); если exec не удался — _exit(127) ↩
-
fw-tv188b-261021-0117-r25.c257 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в окружении php_server PHP-плагинов (kb_probe6, shell_ext, dune-hd.tv, android_apps) PHP_PROC_OPEN_SH=/data/data/com.dunehd.app/bin/sh; $FS_PREFIX/bin/sh — ссылка на /data/data/com.dunehd.app/lib/libxxx_bash.so. ↩
-
fw-apk-260724-0207-r24--data-deploy--php-fs-prefix.c021 · code · android-atv; прошивка 260724_0207_r24 · Аргумент cwd в zif_proc_open передаётся в chdir() дочернего процесса как есть: единственный вызов функций phpfs_prefix в листинге zif_proc_open — _php_add_fs_prefix_to_cmd для команды ↩
-
- fw-tv188b-261021-0117-r25.c091 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 у процесса network_manager ($FS_PREFIX/firmware/bin/network_manager, PPID 1) в окружении HD_HTTP_LOCAL_PORT=80, HD_FW_APK=1, HD_APK=1, FS_PREFIX=/data/data/com.dunehd.app, LOG_DIR=/tmp/run, DUNEHD_SERVICE_DONT_FORK=1, PATH начинается с $FS_PREFIX/firmware/bin:$FS_PREFIX/bin:/bin, а LD_LIBRARY_PATH=$FS_PREFIX/firmware/lib:/lib:/usr/lib (без /system/xbin/dunehd/firmware/lib).
- fw-tv188b-261021-0117-r25.c092 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 у процесса httpd ($FS_PREFIX/bin/httpd, PPID 1) в окружении HD_HTTP_LOCAL_PORT=80, HD_FW_APK=1, HD_APK=1, FS_PREFIX=/data/data/com.dunehd.app, LOG_DIR=/tmp/run, DUNEHD_SERVICE_DONT_FORK=1, PATH начинается с $FS_PREFIX/firmware/bin:$FS_PREFIX/bin:/bin, а LD_LIBRARY_PATH=$FS_PREFIX/firmware/lib:/lib:/usr/lib (без /system/xbin/dunehd/firmware/lib).
-
fw-tv188b-260827-0003-r24.c068 · device · tv188b, android-dune-fw; прошивка 260827_0003_r24 · На tv188b r24 в окружении php-cgi плагина shell_ext (pid 26705) есть FS_PREFIX=/data/data/com.dunehd.app, FS_BIN_PREFIX=/data/data/com.dunehd.app, TMPDIR=$FS_PREFIX/tmp, LOG_DIR=/tmp/run, PHP_PROC_OPEN_SH=$FS_PREFIX/bin/sh, APK_PACKAGE_NAME=com.dunehd.app и HOME=/data/user/0/com.dunehd.app/app_vlc; PATH начинается с $FS_PREFIX/firmware/bin:$FS_PREFIX/bin:/bin, а LD_LIBRARY_PATH=$FS_PREFIX/firmware/lib:/lib:/usr/lib. ↩↩↩
-
fw-tv188b-261021-0117-r25.c394 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 13 $FS_PREFIX/firmware/bin/ffmpeg — символическая ссылка на /data/data/com.dunehd.app/lib/libxxx_ffmpeg.so, а firmware/scripts/ffmpeg.sh — обычный файл 457 байт (один прогон). ↩
-
fw-tv188b-261021-0117-r25.c086 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в /system/bin 46 файлов libxxx_*.so, все root:shell с правами -rwxr-xr-x. ↩
-
- fw-tv188b-261021-0117-r25.c095 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 $FS_PREFIX/bin/httpd — симлинк на /data/data/com.dunehd.app/lib/libxxx_busybox.so, и в $FS_PREFIX/apk_bin_map.txt есть строка «bin/httpd libxxx_busybox.so».
- fw-tv188b-261021-0117-r25.c351 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 $FS_PREFIX/bin/wget — симлинк на $FS_PREFIX/lib/libxxx_busybox.so; /system/bin/libxxx_busybox.so — отдельный файл root:shell размером 987728 байт.
-
fw-tv188b-260827-0003-r24--http-api.c112 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · libxxx_busybox.so в tv188b r24 — BusyBox v1.35.0, собранный 2023-11-24 ↩
-
fw-apk-260724-0207-r24--data-deploy.c015 · code · android-atv; прошивка 260724_0207_r24 · apk_bin_map.txt ставит в
/bin/ 32 ссылки: sh и bash → libxxx_bash.so; tar → libxxx_tar.so; smbd, nmbd, smbpasswd, nmblookup → одноимённые libxxx_*.so; 24 апплета busybox (nohup, uptime, od, touch, tee, sync, sed, xargs, mktemp, killall, awk, date, gunzip, gzip, httpd, ifconfig, netstat, ps, telnetd, unzip, vi, wget, zcat, tail) и сам busybox → libxxx_busybox.so ↩ -
- fw-tv188b-260827-0003-r24--init-runtime--dunehd-service.c001 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24, 250815_1012_r22, 261021_0117_r25 · Клиент dunehd_service имеет одинаковые размер, SHA-256 и режим доступа в tv188b r22 (250815_1012), r24 (260827_0003) и r25 (261021_0117).
- fw-tv188b-260827-0003-r24--init-runtime--dunehd-service.c002 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24, 250815_1012_r22, 261021_0117_r25 · Сервисный ELF dunehd_service имеет одинаковые размер, SHA-256 и режим доступа в tv188b r22 (250815_1012), r24 (260827_0003) и r25 (261021_0117).
- fw-tv188b-260827-0003-r24--init-runtime--dunehd-service.c003 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24, 250815_1012_r22, 261021_0117_r25 · Обёртка dunehd_service.sh имеет одинаковые размер, SHA-256 и режим доступа в tv188b r22 (250815_1012), r24 (260827_0003) и r25 (261021_0117).
- fw-tv188b-260827-0003-r24--init-runtime--dunehd-service.c004 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24, 250815_1012_r22, 261021_0117_r25 · Файл окружения dunehd_service.env имеет одинаковые размер, SHA-256 и режим доступа в tv188b r22 (250815_1012), r24 (260827_0003) и r25 (261021_0117).
-
fw-tv188b-261021-0117-r25--app-launch.c015 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · Удаление пакета (run_uninstall_cmd, r25) PHP выполняет сам через system() командой /system/dunehd/dunehd_service do LD_LIBRARY_PATH= pm uninstall '<пакет>', а не через launch_ext_app. ↩
-
fw-tv188b-261021-0117-r25--app-launch.c071 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в запросе 9 в launch_ext_app выбор ветки виден в shell.log: cmd, начинающаяся с «/system/dunehd/dunehd_service do am start …», идёт в ветку «run command» (pclose 0, command status 0), а cmd «am start --user 0 …» — в ветку «launch activity for command» и apk_helper (activity launch status −1, error_action). ↩
-
fw-tv188b-260827-0003-r24--http-api--ext-command-params.c098 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 команды IP Control ждут, пока идёт handle_user_input плагина: launch_media_url, отправленный через 4 с после начала 20-секундной операции, получил ответ только после её конца — и для точки входа того же плагина, и для другого плагина. ↩
-
fw-tv188b-261021-0117-r25.c343 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 событие PROG_BLUE, нажатое в 22:10:24 во время операции таймера (sleep 3), дошло до плагина в 22:10:26.592 — сразу после timer end в 22:10:26.588, то есть ждало конца операции. ↩
-
fw-tv188b-260827-0003-r24--shell-ext.c070 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Протокол async_worker через файлы в /tmp/plugins/<плагин>/async_worker: wake_flag (разбудить), stop_flag (остановить), request.
(запрос, читается при пробуждении) и response. (ответ, содержимое — time()); данные — /flashdata/plugins_data/<плагин> ↩ -
fw-tv188b-261021-0117-r25--shell-ext--ui-lib--support.c051 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · Конструктор HDHttpLoader создаёт пару UNIX-сокетов AF_UNIX/SOCK_STREAM и делает pcntl_fork; в родителе закрывается $this->parent, в ребёнке — $this->child; ребёнок выполняет child_loop и завершается с кодом 33. ↩
-
plg-dc-dune-backup.c048 · code · unknown; прошивка — · bin/gui_start.sh запрещает повторный запуск demon_as.sh (проверка ps w и pidof), затем запускает демон через /system/dunehd/dunehd_service do, если этот файл есть, иначе напрямую. ↩↩
-
fw-tv188b-260827-0003-r24.c056 · device · tv188b, android-dune-fw; прошивка 260827_0003_r24 · На tv188b r24 фоновый процесс установленного плагина Dune_backup «sh $FS_PREFIX/flashdata/plugins/Dune_backup/bin/demon_as.sh» (pid 3881 и 27104) работает от root с SELinux-меткой u:r:shell:s0 и PPID 1. ↩
-
fw-tv188b-261021-0117-r25--libphp5.c071 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 11 shell_exec(sleep 61 >/dev/null 2>&1 &) вернулся за 0.01 с; процесс sleep 23847 с PPid=1 оставался после kill php_server 23841 и сохранял открытые pipe-дескрипторы 93/98. ↩↩↩
-
fw-tv188b-261021-0117-r25--libphp5.c081 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · Перед bg2 запроса 12 шаг noop завершился в новом php_server 2929; последующая выборка процессов показала этот сервер и не вывела ни одного sleep 61. ↩
-
fw-tv188b-261021-0117-r25--libphp5.c082 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 12 чистый bg2 записал begin и метку перед shell_exec("sleep 61 &") из php_server 2929; в сохранённом отчёте нет записи возврата, а ожидание end bg2 показало 0 → 0 за 75 с. ↩↩
-
fw-tv188b-261021-0117-r25--libphp5.c083 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В чистом bg2 запроса 12 оболочка отменила handle_user_input по тайм-ауту 30.0 с, убила PHP-server и записала отмену операции через 30.333 с с сообщением «Превышено время операции». ↩
-
fw-tv188b-261021-0117-r25--libphp5.c084 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · После окна ожидания bg2 запроса 12 выборка процессов в 11:45:06 не вывела sleep 61 и его pipe/socket fd, а заголовок сообщил php_server(kb_probe12)=нет. ↩
-
fw-tv188b-261021-0117-r25--libphp5.c095 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В чистом bg2 запроса 13 php_server 15502 записал метку перед shell_exec("sleep 61 &"), записи о возврате нет; оболочка через 30 с отменила handle_user_input по тайм-ауту, убила PHP-server и показала «Превышено время операции» (один прогон, повтор запроса 12). ↩
-
fw-tv188b-261021-0117-r25--libphp5.c096 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В bg2 запроса 13 процесс sleep 61 (15964) на 1, 5, 29, 32 и 45 с имел PPid 1 и держал fd 1 на pipe, а также fd 101 (чтение) и 110 (запись) на pipe — те же номера, что в аргументах php_server «… 101 110» (один прогон). ↩
-
fw-tv188b-261021-0117-r25--libphp5.c097 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В bg2 запроса 13 php_server 15502 был в заголовке в 20:01:21 и исчез к 20:01:24 (отмена в 20:01:22), а sleep 61 оставался и после этого до 45 с и не был виден на 62 и 70 с — завершился сам, а не вместе с php_server (один прогон). ↩
-
plg-dc-widget-ext.c041 · code · unknown; прошивка — · Плагин вызывает свои shell-скрипты из PHP через shell_exec("<путь> > /dev/null &") — в фоне, без ожидания ↩↩
-
fw-tv188b-260827-0003-r24--php-framework.c005 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · bootstrap.php снимает ограничение времени выполнения PHP: set_time_limit(0) ↩
-
fw-tv188b-260827-0003-r24--php-framework.c082 · code · tv188b, tv175u, android-dune-fw; прошивка 240619_0210_r22, 250815_1012_r22, 260724_0207_r24, 260827_0003_r24 · bootstrap.php, dune_config.php, dune_plugin.php и dunelib/dune_countries.php одинаковы (sha256) в tv175u 240619_0210_r22, tv188b 250815_1012_r22 и r24-прошивках; dunelib/config_utils, dune_languages, expr, utils в r22-прошивках отсутствуют ↩↩
-
fw-tv188b-261021-0117-r25.c310 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 handle_user_input kb_probe5 со sleep(15) при «start (timeout=60.0s)» доработал без отмены: результат («result action») пришёл через ~15 с после старта, сообщений об отмене по тайм-ауту нет, а следующий вызов исполнил тот же php_server 17676. ↩
-
plg-dc-screenshoter.c060 · code · unknown; прошивка — · В CGI фреймворк плагина не подключается: do_config.php сам объявляет класс DuneSystem и заполняет DuneSystem::$properties из $_ENV (PLUGIN_NAME, PLUGIN_INSTALL_DIR_PATH, …) ↩
-
fw-tv188b-261021-0117-r25.c335 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · shell_ext/www/cgi-bin/php.ini r25 задаёт cgi.force_redirect = 0, cgi.redirect_status_env = yes, date.timezone = UTC, error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED (E_WARNING включён), magic_quotes_gpc = 0, display_errors = 0, log_errors = 1 и error_log = /tmp/run/shell_ext_cgi.log. ↩↩
-
fw-tv188b-260827-0003-r24--shell-ext.c046 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Конструктор MainPlugin вызывает gc_disable() и HD::init(20); main_plugin.php ставит memory_limit 300M ↩
-
fw-tv188b-260827-0003-r24--shell-ext.c072 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · AsyncWorker shell_ext ставит memory_limit 200M, читает /tmp/run/installed_plugins.xml и хранит версию формата данных 2 в /flashdata/plugins_data/shell_ext/data_format_version.txt ↩
-
fw-tv188b-261021-0117-r25--shell-ext--ui-lib--support.c037 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · Memory::get_used_mb возвращает memory_get_usage(true)/1048576; Memory::check при used>0, used > mem_limit-50 и mem_limit<500 увеличивает лимит на 50 МБ, вызывает ini_set('memory_limit','
M') и не уменьшает его; начальный mem_limit=300, максимум 500. ↩ -
fw-tv188b-260827-0003-r24--php-framework.c004 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · bootstrap.php устанавливает ini date.timezone из date_default_timezone_get(), с комментарием «Use timezone from the environment (TZ)» как обход известной проблемы PHP с 5.3.0 ↩
-
fw-tv188b-261021-0117-r25.c247 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в php_server PHP-плагина ini date.timezone = Europe/Moscow и date_default_timezone_get() = Europe/Moscow при getenv('TZ') = false; date() даёт MSK +0300, getprop persist.sys.timezone — Europe/Moscow. ↩↩↩
-
fw-tv188b-261021-0117-r25.c248 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в php-cgi CGI плагина с php.ini без date.timezone ini date.timezone пуст; date_default_timezone_get() возвращает Europe/Moscow, но date() и date_default_timezone_get() пишут PHP Warning «It is not safe to rely on the system's timezone settings… We selected 'Europe/Moscow' for 'MSK/3.0/no DST' instead». ↩↩↩
-
fw-tv188b-261021-0117-r25.c330 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 метки времени в /tmp/run/<плагин>.log и shell.log на 3 часа меньше местного времени: вызов, который date() в php_server kb_probe5 записал как 13:38:00, в логе плагина помечен 10:38:00.049. ↩↩
-
fw-tv188b-261021-0117-r25.c331 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 openssl_x509_parse() в php_server и в php-cgi даёт validTo_time_t = -1 (gmdate — 1969-12-31 23:59:59) у всех сертификатов /firmware/certs/ca-bundle.crt со сроком позже 2038-01-19 03:14:07 UTC (57 из 143), а более ранние сроки переводит верно; 2147483647 (2038-01-19 03:14:07) — настоящий срок сертификата GlobalSign. ↩
-
doc-sdk-plugins.c139 · doc · sigma-smp86xx, sigma-smp87xx, android; прошивка — · Лог плагина — /tmp/run/
.log (Sigma: tail -F через telnet; Android: busybox tail -F через telnet/ADB) ↩↩ -
fw-tv188b-261021-0117-r25.c326 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 ошибки и предупреждения PHP в коде плагина php_server пишет в /tmp/run/<плагин>.log строкой вида «[<полный путь файла>:<строка>] [E_WARNING] …» / «[…] [E_ERROR] …». ↩
-
fw-tv188b-261021-0117-r25.c327 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 предупреждение PHP попадает в /tmp/run/<плагин>.log и для выражения с оператором подавления @: @mkdir(...) в main.php:11 зонда при существующем каталоге дал строку «[…/main.php:11] [E_WARNING] mkdir() …: File exists» при каждом запуске php_server. ↩↩
-
fw-tv188b-260827-0003-r24--php-framework.c001 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · bootstrap.php определяет hd_print($str): выводит строку через echo с суффиксом $HD_NEW_LINE (по умолчанию ''), а при заданном $HD_OB_PREFIX — с этим префиксом и вызовом ob_flush() ↩
-
fw-tv188b-260827-0003-r24--php-framework.c002 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · bootstrap.php регистрирует hd_error_handler через set_error_handler и hd_shutdown_handler через register_shutdown_function; обработчик печатает ошибку через hd_print в формате «[файл:строка] [E_ТИП] сообщение» ↩
-
fw-tv188b-260827-0003-r24--php-framework.c003 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · hd_silence_warnings() выключает вывод ошибок (error_reporting(0) и пустой обработчик hd_error_silencer), hd_restore_warnings() восстанавливает обработчик и error_reporting(E_STRICT | E_ALL) ↩
-
doc-sdk-plugins.c048 · doc · any-documented; прошивка — · bootstrap.php настраивает вывод ошибок PHP во внутренний лог, текущий часовой пояс и определяет hd_print() — её следует использовать вместо echo/print/printf ↩
-
fw-tv188b-260827-0003-r24--plugin-loader.c036 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · run_plugin_cgi пишет stderr CGI-скриптов в $FS_PREFIX/tmp/dune_apk_cgi_err.log и переносит лог в .old, когда он больше 10000 байт ↩
-
fw-tv188b-261021-0117-r25.c234 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 PHP-скрипт CGI плагина (php-cgi через CGI-обёртку), выполнивший curl_multi на 4 хендла к httpd самого плеера (http://127.0.0.1/plugins/…, http://127.0.0.1:80/cgi-bin/plugins/…, http://localhost/cgi-bin/plugins/…), доходит до curl_multi_info_read и получает все 4 сообщения с msg=1 result=0, после чего php-cgi завершается с кодом 139 и в /tmp/dune_apk_cgi_err.log появляется «Segmentation fault»; повторный запуск дал то же самое. ↩
-
fw-tv188b-261021-0117-r25.c166 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 после вызовов sh-CGI плагинов в /tmp/dune_apk_cgi_err.log есть строки «WARNING: linker: Warning: unable to normalize "./lib" (ignoring)». ↩
-
fw-apk-260724-0207-r24--data-deploy--php-fs-prefix.c017 · code · android-atv; прошивка 260724_0207_r24 · Если команда изменена и задана переменная PHP_DEBUG, _php_add_fs_prefix_to_cmd печатает в stdout « -C-> EEE orig command: %s» с исходной и « -C-> EEE repl command: %s» с новой командой ↩
-
fw-apk-260724-0207-r24--data-deploy--php-fs-prefix.c039 · code · android-atv; прошивка 260724_0207_r24 · После замены URL при заданной PHP_DEBUG _php_add_fs_prefix_to_http печатает в stdout « =H=> EEE orig http: %s» с исходным и « =H=> EEE repl http: %s» с новым URL ↩
-
fw-tv188b-261021-0117-r25--libphp5--curl-http.c021 · code · android-dune-fw; прошивка 260827_0003_r24 · В r24 _php_add_fs_prefix_to_http не вызывает lcreg и других функций замены хоста; при отсутствии HD_HTTP_LOCAL_PORT или несовпадении префикса URL не меняется, а печать исходного и нового URL ограждена getenv("PHP_DEBUG"). ↩
-
fw-tv188b-261021-0117-r25--libphp5.c076 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 11 после wget с putenv(PHP_DEBUG=1) собранный grep EEE по /tmp/run/kb_probe11.log не вывел строк; успешный результат самого wget записан. ↩
-
fw-tv188b-261021-0117-r25--libphp5--curl-http.c036 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 13 с PHP_DEBUG=1 и HD_HTTP_LOCAL_PORT=80 curl_setopt(CURLOPT_URL, http://127.0.0.1/cgi-bin/plugins/kb_probe13/host.sh) дал в логе плагина «=H=> EEE orig http» с исходным URL и «repl http: http://127.0.0.1:80/cgi-bin/plugins/kb_probe13/host.sh», а CURLINFO_EFFECTIVE_URL — тот же URL с :80 (один прогон). ↩
-
- fw-tv188b-261021-0117-r25--libphp5.c094 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 13 после шага g_subst с PHP_DEBUG=1 grep «=H=>» по /tmp/run/kb_probe13.log не нашёл ни одной строки; строк о замене команд в выводе нет (один прогон).
- fw-apk-260724-0207-r24--data-deploy--php-fs-prefix.c017 · code · android-atv; прошивка 260724_0207_r24 · Если команда изменена и задана переменная PHP_DEBUG, _php_add_fs_prefix_to_cmd печатает в stdout « -C-> EEE orig command: %s» с исходной и « -C-> EEE repl command: %s» с новой командой
-
fw-tv188b-261021-0117-r25--libphp5.c005 · device · android-dune-fw; прошивка 261021_0117_r25 · На tv188b 261021_0117_r25 запуск php-cgi -v из collect5 завершился CANNOT LINK EXECUTABLE: library libphp5.so not found. ↩
-
fw-tv188b-261021-0117-r25.c238 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 php-cgi, запущенный CGI-обёрткой плагина без изменения LD_LIBRARY_PATH, стартует и выполняет скрипт; в окружении php-cgi LD_LIBRARY_PATH=/data/data/com.dunehd.app/firmware/lib:/lib:/usr/lib. ↩
-
- fw-tv188b-261021-0117-r25.c304 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 после touch main.php плагина kb_probe5 следующий вызов handle_user_input сначала перезапускает php_server: в shell.log того же процесса оболочки «[kb_probe5] [php] start_call(): PHP-script modification detected (1793009215). Restarting PHP-server-process...», «shutting down...», «stopped.», «server started; pid: 17676.», и вызов исполняет уже новый процесс 17676.
- fw-tv188b-261021-0117-r25.c306 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 правка файла lib/kbp5_lib.php, подключаемого из main.php через require_once, без изменения main.php не перезапустила php_server kb_probe5: следующий вызов исполнил тот же процесс 17362 (n=5) со старой версией функции (lib=v1), в shell.log между «start» и «result action» сообщений о перезапуске нет.
-
- fw-tv188b-261021-0117-r25.c254 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в файловых функциях встроенного PHP (php_server и php-cgi) realpath('/config') = /data/data/com.dunehd.app/config, realpath('/firmware') = /system/dunehd/firmware, realpath('/firmware_ext/php') = /system/dunehd/firmware_ext/php, хотя в корне ФС (adb shell) /firmware и /firmware_ext нет, а /config — другой каталог.
- fw-tv188b-261021-0117-r25.c255 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 во встроенном PHP (php_server и php-cgi CGI плагина) путь /flashdata существует: is_dir('/flashdata') = true, realpath — /data/data/com.dunehd.app/flashdata, хотя в корне ФС (adb shell) /flashdata нет.
-
- fw-tv188b-261021-0117-r25.c246 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в php_server и php-cgi константы JSON_BIGINT_AS_STRING, JSON_UNESCAPED_UNICODE, JSON_UNESCAPED_SLASHES и JSON_PRETTY_PRINT не определены; JSON_NUMERIC_CHECK (32), JSON_HEX_TAG (1), JSON_FORCE_OBJECT (16), JSON_ERROR_UTF8 (5) определены.
- fw-tv188b-261021-0117-r25.c250 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в php_server и php-cgi не определены константы CURLOPT_ACCEPT_ENCODING, CURLOPT_RESOLVE, CURL_SSLVERSION_TLSv1_2, CURLOPT_SSL_VERIFYSTATUS, CURLOPT_TCP_KEEPALIVE, CURLMOPT_PIPELINING и CURLMOPT_MAXCONNECTS; CURLOPT_ENCODING (10102), CURLOPT_SSLVERSION, CURLOPT_CAINFO, CURLOPT_TIMEOUT_MS, CURLOPT_CONNECTTIMEOUT_MS, CURLOPT_NOSIGNAL и CURLOPT_IPRESOLVE определены.
-
- fw-tv188b-261021-0117-r25.c235 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 тот же зонд curl_multi (4 хендла к httpd плеера) в php_server PHP-плагина (операция handle_user_input) доходит до curl_multi_info_read со всеми 4 сообщениями msg=1 result=0; результата операция не возвращает: через ~0,25 с после её начала оболочка пишет в shell.log «[kb_probe6] [php] E: op 11 failed (read status: 2).», «shutting down...», «stopped.» и «Error: operation returned PHP_CALL_FAILED.».
- fw-tv188b-261021-0117-r25--libphp5--curl-http.c029 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В multi запроса 12 оболочка получила EOF от PHP-сервера, записала PHP_CALL_FAILED и stopped; end multi за 25 с не появился, а при сборе php_server зонда уже не найден.
- fw-tv188b-261021-0117-r25.c320 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 при сбое PHP-вызова (Fatal error или exit(0) в handle_user_input) оболочка пишет в shell.log «[<плагин>] [php] poll_calls() E: treating empty result as failure and stopping server», останавливает php_server («shutting down...», «stopped.»), затем «Error: operation returned PHP_CALL_FAILED.», «[handle_user_input] Failed.» и «[plugin] <плагин>: FATAL ERROR detected (msg = Ошибка приложения)».
- fw-tv188b-261021-0117-r25--php-framework.c063 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 11 после E_ERROR от вызова несуществующего HD::make_json_rpc_request в handle_user_input оболочка записала «poll_calls() E: treating empty result as failure and stopping server», остановила php_server, получила PHP_CALL_FAILED и выполнила plugin_show_error («FATAL ERROR detected (msg = Ошибка приложения)»).
- fw-tv188b-260827-0003-r24--plugin-loader--php-runtime.c039 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25, если call_plugin PHP-плагина возвращает null, php_server ничего не пишет в ответ и завершает цикл по EOF канала, а оболочка печатает «poll_calls() E: treating empty result as failure and stopping server», «Error: operation returned PHP_CALL_FAILED.», «result status failed», выполняет plugin_show_error и «FATAL ERROR detected (msg = Ошибка приложения)»; на экране — «Ошибка приложения / Произошла ошибка. Приложение будет закрыто.».
-
- fw-tv188b-261021-0117-r25--libphp5.c082 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 12 чистый bg2 записал begin и метку перед shell_exec("sleep 61 &") из php_server 2929; в сохранённом отчёте нет записи возврата, а ожидание end bg2 показало 0 → 0 за 75 с.
- fw-tv188b-261021-0117-r25--libphp5.c083 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В чистом bg2 запроса 12 оболочка отменила handle_user_input по тайм-ауту 30.0 с, убила PHP-server и записала отмену операции через 30.333 с с сообщением «Превышено время операции».
- fw-tv188b-261021-0117-r25--libphp5.c095 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В чистом bg2 запроса 13 php_server 15502 записал метку перед shell_exec("sleep 61 &"), записи о возврате нет; оболочка через 30 с отменила handle_user_input по тайм-ауту, убила PHP-server и показала «Превышено время операции» (один прогон, повтор запроса 12).
- fw-tv188b-261021-0117-r25--libphp5.c096 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В bg2 запроса 13 процесс sleep 61 (15964) на 1, 5, 29, 32 и 45 с имел PPid 1 и держал fd 1 на pipe, а также fd 101 (чтение) и 110 (запись) на pipe — те же номера, что в аргументах php_server «… 101 110» (один прогон).
- fw-tv188b-261021-0117-r25--libphp5.c097 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В bg2 запроса 13 php_server 15502 был в заголовке в 20:01:21 и исчез к 20:01:24 (отмена в 20:01:22), а sleep 61 оставался и после этого до 45 с и не был виден на 62 и 70 с — завершился сам, а не вместе с php_server (один прогон).
- fw-tv188b-261021-0117-r25--libphp5.c071 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 11 shell_exec(sleep 61 >/dev/null 2>&1 &) вернулся за 0.01 с; процесс sleep 23847 с PPid=1 оставался после kill php_server 23841 и сохранял открытые pipe-дескрипторы 93/98.
-
- fw-tv188b-260827-0003-r24--plugin-loader--php-runtime--opexec.c033 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 после отмены handle_user_input по тайм-ауту оболочка выполняет plugin_show_error, и на экране — диалог «Превышено время операции» с кнопкой OK (перевод plugin_operation_timed_out).
- fw-tv188b-260827-0003-r24--plugin-loader--php-runtime--opexec.c032 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 по тайм-ауту handle_user_input оболочка останавливает php_server плагина и тем прерывает вызов: за «cancelling by timeout (N s)» следуют «FATAL ERROR detected (msg = operation timed out)», «[php] shutting down...», через ~0,25 с «killing PHP-server process...» и «stopped.», затем «canceling req N (fast: 1)», «PHP-FW was shut down. The operation fails.», «result status canceled» и «canceled in N s»; PHP-код вызова не доработал.
-
fw-tv188b-261021-0117-r25--libphp5.c050 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · www.ssl.com на tv188b r25 из php_server (uid 1000) с полным бандлом, без корня Entrust и только с корнем Entrust при включённой проверке TLS даёт errno 60 «self signed certificate in certificate chain»; без проверки — HTTP 200, а цепочка заканчивается самоподписанным SSL.com TLS RSA Root CA 2022. ↩
-
fw-tv188b-261021-0117-r25--libphp5.c051 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · kodikapi.com на tv188b r25 из php_server (uid 1000) во всех четырёх режимах (full, no_entrust, only_entrust, no_verify) получил errno 35 «OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to kodikapi.com:443» и HTTP 0; причина не установлена. ↩
-
- fw-tv188b-261021-0117-r25.c353 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 вызов $FS_PREFIX/bin/wget -q -O - 'http://127.0.0.1/cgi-bin/do?cmd=status' | head -c 80 из php_server (uid 1000) в том же прогоне вернул пустой вывод, а [exit 0] — код head в конвейере; причина не установлена.
- fw-tv188b-261021-0117-r25.c352 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 команда wget -q -O - 'http://127.0.0.1/cgi-bin/do?cmd=status' | head -c 80 из php_server (uid 1000) вернула начало XML-ответа
<param name="protocol_version" value="6"; [exit 0] — код head в конвейере, а не wget.
-
- fw-tv188b-261021-0117-r25--libphp5.c074 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 11 прямой вызов /data/data/com.dunehd.app/bin/wget и вызов sh с тем же путём из php_server оба вернули rc=126 и cannot execute binary file.
- fw-tv188b-261021-0117-r25--libphp5.c073 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 11 which wget из php_server показал /data/data/com.dunehd.app/bin/wget — ссылку на libxxx_busybox.so; вызов по имени wget к /ping компьютера вернул ok и rc=0.
-
- fw-tv188b-261021-0117-r25--libphp5.c077 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 11 exec команды /config/kbp11_x.sh first-word из php_server вернул rc=127 и sh: /config/kbp11_x.sh: No such file or directory; file_get_contents того же пути с use_include_path=true прочитал 49 байт.
- fw-tv188b-261021-0117-r25--libphp5.c091 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 13 с PHP_DEBUG=1 exec("/config/kbp13_x.sh first-word 2>&1") в php_server вернул rc=127 и «sh: /config/kbp13_x.sh: No such file or directory» — путь первым словом префикс $FS_PREFIX не получил (повтор наблюдения запроса 11, один прогон).
- fw-tv188b-261021-0117-r25--libphp5.c092 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 13 exec("echo /config/kbp13_x.sh") в php_server напечатал /data/data/com.dunehd.app/config/kbp13_x.sh, а exec("sh /config/kbp13_x.sh after-sh") запустил скрипт с argv0 /data/data/com.dunehd.app/config/kbp13_x.sh: путь после пробела получил $FS_PREFIX (один прогон).
- fw-tv188b-261021-0117-r25--libphp5.c085 · code · android-dune-fw; прошивка 261021_0117_r25 · В r25 _php_add_fs_prefix_to_cmd, если команда начинается с '/' и путь требует префикса (_php_path_needs_prefix.part.0), но не начинается с /firmware/bin/ или /firmware_ext/php/, ставит в начало результата «sh ».
- fw-tv188b-261021-0117-r25--libphp5.c086 · code · android-dune-fw; прошивка 261021_0117_r25 · В r25 _php_add_fs_prefix_to_cmd дописывает $FS_PREFIX к пути у '/', только если байт перед '/' — пробел, '!', '&', апостроф, '(', ')', ';', '<', '>' или '`'; для '/' в первом символе команды проверяется байт перед началом строки.
-
- fw-tv188b-261021-0117-r25--libphp5.c070 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 11 fopen на запись /data/data/com.dunehd.app/firmware/kbp11_w.tmp из php_server вернул ошибку failed to open stream: Read-only file system.
- fw-tv188b-261021-0117-r25--libphp5.c069 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 11 php_server kb_probe11 успешно создал и удалил kbp11_w.tmp в /sdcard, /config, /tmp, tmp_dir_path и data_dir_path.
-
- fw-tv188b-261021-0117-r25.c241 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 $FS_PREFIX/firmware_ext/php/php-cgi, запущенный из adb shell (adbd root) с LD_LIBRARY_PATH=$FS_PREFIX/lib:$LD_LIBRARY_PATH, не стартует — «CANNOT LINK EXECUTABLE … library "libiconv.so.2" not found: needed by main executable», код 1 (и с -v, и с -q -f).
- fw-tv188b-261021-0117-r25.c238 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 php-cgi, запущенный CGI-обёрткой плагина без изменения LD_LIBRARY_PATH, стартует и выполняет скрипт; в окружении php-cgi LD_LIBRARY_PATH=/data/data/com.dunehd.app/firmware/lib:/lib:/usr/lib.
-
fw-tv188b-261021-0117-r25.c355 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в окружении php_server плагина kb_probe8 (pid 3005, ppid 2449, uid 1000) HOME=/data/user/0/com.dunehd.app/app_vlc. ↩
-
fw-tv188b-261021-0117-r25.c356 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в окружении php_server плагина kb_probe8 (pid 3005, ppid 2449, uid 1000) TMPDIR=/data/data/com.dunehd.app/tmp. ↩
-
fw-tv188b-261021-0117-r25.c357 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в окружении php_server плагина kb_probe8 (pid 3005, ppid 2449, uid 1000) FS_BIN_PREFIX=/data/data/com.dunehd.app. ↩
-
fw-tv188b-261021-0117-r25.c358 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в окружении php_server плагина kb_probe8 (pid 3005, ppid 2449, uid 1000) APK_PACKAGE_NAME=com.dunehd.app. ↩
-
fw-tv188b-261021-0117-r25.c359 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в окружении php_server плагина kb_probe8 (pid 3005, ppid 2449, uid 1000) HD_APK=1. ↩
-
fw-tv188b-261021-0117-r25.c360 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в окружении php_server плагина kb_probe8 (pid 3005, ppid 2449, uid 1000) HD_FW_APK=1. ↩
-
fw-tv188b-261021-0117-r25.c361 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в окружении php_server плагина kb_probe8 (pid 3005, ppid 2449, uid 1000) HD_HTTP_LOCAL_PORT=80. ↩
-
fw-tv188b-261021-0117-r25.c362 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в окружении php_server плагина kb_probe8 (pid 3005, ppid 2449, uid 1000) HD_DSSD_AMEM=0xecc5679c; в прогоне kb_probe5 (collect5) у php_server было HD_DSSD_AMEM=0x2e78afb7 — значение меняется между прогонами. ↩
-
fw-tv188b-261021-0117-r25.c363 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в окружении php_server плагина kb_probe8 (pid 3005, ppid 2449, uid 1000) HD_RMCL_DISABLE_CLOPTNS=1. ↩
-
fw-tv188b-261021-0117-r25--libphp5.c061 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 11 /proc/self/environ php_server kb_probe11 содержал PHP_PROC_OPEN_SH=/data/data/com.dunehd.app/bin/sh, FS_PREFIX=/data/data/com.dunehd.app, TMPDIR=/data/data/com.dunehd.app/tmp, FS_BIN_PREFIX=/data/data/com.dunehd.app и HD_HTTP_LOCAL_PORT=80. ↩
-
fw-tv188b-261021-0117-r25.c390 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 13 /proc/self/environ php_server зонда kb_probe13 содержал, кроме общих с CGI переменных, HOME=/data/user/0/com.dunehd.app/app_vlc, TMPDIR=/data/data/com.dunehd.app/tmp, FS_BIN_PREFIX=/data/data/com.dunehd.app, APK_PACKAGE_NAME=com.dunehd.app, PHP_PROC_OPEN_SH=/data/data/com.dunehd.app/bin/sh, LOG_MAX_FILE_SIZE=3072000 и HD_RMCL_DISABLE_CLOPTNS=1 (один прогон). ↩
-
fw-tv188b-260827-0003-r24--init-runtime--dunehd-service.c014 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24, 261021_0117_r25 · client_authenticate берёт числовое значение через getenv(HD_DSSD_AMEM), а при отсутствии переменной использует get_default_env; значение разбирается strtoul с основанием 0. ↩
-
fw-tv188b-261021-0117-r25.c382 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 вывод env sh-скрипта env.sh плагина kb_probe5, запущенного busybox httpd как CGI (uid=0), — это окружение sh-CGI, а не самого процесса php-cgi — содержит FS_PREFIX=/data/data/com.dunehd.app. ↩
-
fw-tv188b-261021-0117-r25.c388 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в выводе env sh-скрипта env.sh плагина kb_probe5, запущенного busybox httpd как CGI (uid=0), нет переменных HOME, TMPDIR, FS_BIN_PREFIX, APK_PACKAGE_NAME, PHP_PROC_OPEN_SH, HD_DSSD_AMEM и HD_RMCL_DISABLE_CLOPTNS, которые были в окружении php_server kb_probe8. ↩
-
fw-tv188b-261021-0117-r25.c392 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 13 набор имён переменных в /proc/self/environ php-cgi совпал с набором имён в env sh-обёртки того же CGI-запроса (различие только в значении «_»): окружение php-cgi — это окружение sh-CGI busybox httpd (один прогон). ↩↩
-
- fw-tv188b-261021-0117-r25.c350 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 команды зонда из php_server (uid 1000) дают FS_PREFIX=/data/data/com.dunehd.app; which wget и command -v wget возвращают /data/data/com.dunehd.app/bin/wget.
- fw-tv188b-261021-0117-r25.c258 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в окружении php-cgi CGI плагина переменной PHP_PROC_OPEN_SH нет (getenv = false), а FS_PREFIX = /data/data/com.dunehd.app есть.
- fw-tv188b-261021-0117-r25.c382 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 вывод env sh-скрипта env.sh плагина kb_probe5, запущенного busybox httpd как CGI (uid=0), — это окружение sh-CGI, а не самого процесса php-cgi — содержит FS_PREFIX=/data/data/com.dunehd.app.
- fw-tv188b-261021-0117-r25.c081 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 скрипт global_action plugin_system (boot, boot_end, gui_start) работает под uid 1000(system) с SELinux-контекстом u:r:system_app:s0, текущим каталогом / и переменной окружения FS_PREFIX=/data/data/com.dunehd.app; $0 — абсолютный путь скрипта.
- fw-tv188b-261021-0117-r25.c172 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 bin/movie_suppliers_update.sh плагина-поставщика выполняется с uid 1000 и переменной окружения FS_PREFIX=/data/data/com.dunehd.app.
- fw-tv188b-260827-0003-r24.c068 · device · tv188b, android-dune-fw; прошивка 260827_0003_r24 · На tv188b r24 в окружении php-cgi плагина shell_ext (pid 26705) есть FS_PREFIX=/data/data/com.dunehd.app, FS_BIN_PREFIX=/data/data/com.dunehd.app, TMPDIR=$FS_PREFIX/tmp, LOG_DIR=/tmp/run, PHP_PROC_OPEN_SH=$FS_PREFIX/bin/sh, APK_PACKAGE_NAME=com.dunehd.app и HOME=/data/user/0/com.dunehd.app/app_vlc; PATH начинается с $FS_PREFIX/firmware/bin:$FS_PREFIX/bin:/bin, а LD_LIBRARY_PATH=$FS_PREFIX/firmware/lib:/lib:/usr/lib.
- fw-tv188b-260827-0003-r24.c063 · device · tv188b, android-dune-fw; прошивка 260827_0003_r24 · На tv188b r24 в окружении dunehd_service (pid 587) есть FS_PREFIX=/data/data/com.dunehd.app, HD_APK=1, HD_FW_APK=1, HD_HTTP_LOCAL_PORT=80 и DUNEHD_SERVICE_DONT_FORK=1, а PATH начинается с $FS_PREFIX/firmware/bin:$FS_PREFIX/bin:/bin.
-
- fw-tv188b-261021-0117-r25.c091 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 у процесса network_manager ($FS_PREFIX/firmware/bin/network_manager, PPID 1) в окружении HD_HTTP_LOCAL_PORT=80, HD_FW_APK=1, HD_APK=1, FS_PREFIX=/data/data/com.dunehd.app, LOG_DIR=/tmp/run, DUNEHD_SERVICE_DONT_FORK=1, PATH начинается с $FS_PREFIX/firmware/bin:$FS_PREFIX/bin:/bin, а LD_LIBRARY_PATH=$FS_PREFIX/firmware/lib:/lib:/usr/lib (без /system/xbin/dunehd/firmware/lib).
- fw-tv188b-261021-0117-r25.c092 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 у процесса httpd ($FS_PREFIX/bin/httpd, PPID 1) в окружении HD_HTTP_LOCAL_PORT=80, HD_FW_APK=1, HD_APK=1, FS_PREFIX=/data/data/com.dunehd.app, LOG_DIR=/tmp/run, DUNEHD_SERVICE_DONT_FORK=1, PATH начинается с $FS_PREFIX/firmware/bin:$FS_PREFIX/bin:/bin, а LD_LIBRARY_PATH=$FS_PREFIX/firmware/lib:/lib:/usr/lib (без /system/xbin/dunehd/firmware/lib).
- fw-tv188b-261021-0117-r25.c384 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 вывод env sh-скрипта env.sh плагина kb_probe5, запущенного busybox httpd как CGI (uid=0), — окружение sh-CGI, не процесса php-cgi — содержит HD_APK=1 и HD_FW_APK=1.
- fw-tv188b-260827-0003-r24.c069 · device · tv188b, android-dune-fw; прошивка 260827_0003_r24 · На tv188b r24 в окружении php-cgi плагина shell_ext (pid 26705) есть HD_HTTP_LOCAL_PORT=80, HD_APK=1, HD_FW_APK=1, HD_DSSD_AMEM=0x0744a101, HD_RMCL_DISABLE_CLOPTNS=1, LOG_MAX_FILE_SIZE=3072000 и VLC_DATA_PATH=/system/usr/share.
- fw-apk-260724-0207-r24--data-deploy.c034 · code · android-atv; прошивка 260724_0207_r24 · runDaemonProcess задаёт HD_APK=1; переменной HD_FW_APK среди его строк нет (const-string метода: LOG_DIR, HD_APK, HD_HTTP_LOCAL_PORT, FS_PREFIX, PATH, LD_LIBRARY_PATH, HOME, PWD, /tmp/run и пути)
- fw-tv175u-260724-0207-r24.c023 · code · tv175u, android; прошивка 260724_0207_r24 · Скрипт /system/dunehd/init не выставляет HD_APK, HD_FW_APK и FS_PREFIX: перед запуском dunehd_service он экспортирует только PATH, LD_LIBRARY_PATH=/firmware/lib:/lib:/usr/lib и LOG_DIR=/tmp/run
-
- fw-tv188b-261021-0117-r25.c361 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в окружении php_server плагина kb_probe8 (pid 3005, ppid 2449, uid 1000) HD_HTTP_LOCAL_PORT=80.
- fw-tv188b-261021-0117-r25--libphp5.c061 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 11 /proc/self/environ php_server kb_probe11 содержал PHP_PROC_OPEN_SH=/data/data/com.dunehd.app/bin/sh, FS_PREFIX=/data/data/com.dunehd.app, TMPDIR=/data/data/com.dunehd.app/tmp, FS_BIN_PREFIX=/data/data/com.dunehd.app и HD_HTTP_LOCAL_PORT=80.
- fw-tv188b-261021-0117-r25.c381 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в окружении php_server плагина kb_probe6 (запрос 6) HD_HTTP_LOCAL_PORT=80.
- fw-tv188b-261021-0117-r25.c383 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 вывод env sh-скрипта env.sh плагина kb_probe5, запущенного busybox httpd как CGI (uid=0), — окружение sh-CGI, не процесса php-cgi — содержит HD_HTTP_LOCAL_PORT=80.
- fw-tv188b-261021-0117-r25.c391 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 13 php-cgi (/data/data/com.dunehd.app/firmware_ext/php/php-cgi, php_sapi_name cgi-fcgi, uid 0), запущенный busybox httpd для /cgi-bin/plugins/kb_probe13/env, имел FS_PREFIX, HD_HTTP_LOCAL_PORT=80, LD_LIBRARY_PATH, PATH, LOG_DIR, HD_APK, PLUGIN_NAME, PLUGIN_CGI_DIR и DUNEHD_SERVICE_DONT_FORK, а getenv(HOME) и getenv(TMPDIR) вернули false (один прогон).
- fw-tv188b-260827-0003-r24.c069 · device · tv188b, android-dune-fw; прошивка 260827_0003_r24 · На tv188b r24 в окружении php-cgi плагина shell_ext (pid 26705) есть HD_HTTP_LOCAL_PORT=80, HD_APK=1, HD_FW_APK=1, HD_DSSD_AMEM=0x0744a101, HD_RMCL_DISABLE_CLOPTNS=1, LOG_MAX_FILE_SIZE=3072000 и VLC_DATA_PATH=/system/usr/share.
- fw-apk-260724-0207-r24--data-deploy.c033 · code · android-atv; прошивка 260724_0207_r24 · runDaemonProcess задаёт HD_HTTP_LOCAL_PORT=11080 (константа HDConfig.HD_HTTP_LOCAL_PORT, подставлена в байткод как const/16 11080)
-
- fw-tv188b-261021-0117-r25.c091 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 у процесса network_manager ($FS_PREFIX/firmware/bin/network_manager, PPID 1) в окружении HD_HTTP_LOCAL_PORT=80, HD_FW_APK=1, HD_APK=1, FS_PREFIX=/data/data/com.dunehd.app, LOG_DIR=/tmp/run, DUNEHD_SERVICE_DONT_FORK=1, PATH начинается с $FS_PREFIX/firmware/bin:$FS_PREFIX/bin:/bin, а LD_LIBRARY_PATH=$FS_PREFIX/firmware/lib:/lib:/usr/lib (без /system/xbin/dunehd/firmware/lib).
- fw-tv188b-261021-0117-r25.c092 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 у процесса httpd ($FS_PREFIX/bin/httpd, PPID 1) в окружении HD_HTTP_LOCAL_PORT=80, HD_FW_APK=1, HD_APK=1, FS_PREFIX=/data/data/com.dunehd.app, LOG_DIR=/tmp/run, DUNEHD_SERVICE_DONT_FORK=1, PATH начинается с $FS_PREFIX/firmware/bin:$FS_PREFIX/bin:/bin, а LD_LIBRARY_PATH=$FS_PREFIX/firmware/lib:/lib:/usr/lib (без /system/xbin/dunehd/firmware/lib).
- fw-tv188b-261021-0117-r25.c385 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 вывод env sh-скрипта env.sh плагина kb_probe5, запущенного busybox httpd как CGI (uid=0), — окружение sh-CGI, не процесса php-cgi — содержит PATH, начинающийся с /data/data/com.dunehd.app/firmware/bin:/data/data/com.dunehd.app/bin:/bin, тот же, что в php_server kb_probe8.
- fw-tv188b-260827-0003-r24.c068 · device · tv188b, android-dune-fw; прошивка 260827_0003_r24 · На tv188b r24 в окружении php-cgi плагина shell_ext (pid 26705) есть FS_PREFIX=/data/data/com.dunehd.app, FS_BIN_PREFIX=/data/data/com.dunehd.app, TMPDIR=$FS_PREFIX/tmp, LOG_DIR=/tmp/run, PHP_PROC_OPEN_SH=$FS_PREFIX/bin/sh, APK_PACKAGE_NAME=com.dunehd.app и HOME=/data/user/0/com.dunehd.app/app_vlc; PATH начинается с $FS_PREFIX/firmware/bin:$FS_PREFIX/bin:/bin, а LD_LIBRARY_PATH=$FS_PREFIX/firmware/lib:/lib:/usr/lib.
- fw-tv188b-261021-0117-r25.c354 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в окружении php_server плагина kb_probe8 (pid 3005, ppid 2449, uid 1000) PATH=/data/data/com.dunehd.app/firmware/bin:/data/data/com.dunehd.app/bin:/bin:/product/bin:/apex/com.android.runtime/bin:/apex/com.android.art/bin:/system_ext/bin:/system/bin:/system/xbin:/odm/bin:/vendor/bin:/vendor/xbin.
-
- fw-tv188b-261021-0117-r25.c238 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 php-cgi, запущенный CGI-обёрткой плагина без изменения LD_LIBRARY_PATH, стартует и выполняет скрипт; в окружении php-cgi LD_LIBRARY_PATH=/data/data/com.dunehd.app/firmware/lib:/lib:/usr/lib.
- fw-tv188b-261021-0117-r25.c386 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 вывод env sh-скрипта env.sh плагина kb_probe5, запущенного busybox httpd как CGI (uid=0), — окружение sh-CGI, не процесса php-cgi — содержит LD_LIBRARY_PATH=/data/data/com.dunehd.app/firmware/lib:/lib:/usr/lib.
- fw-tv188b-260827-0003-r24.c068 · device · tv188b, android-dune-fw; прошивка 260827_0003_r24 · На tv188b r24 в окружении php-cgi плагина shell_ext (pid 26705) есть FS_PREFIX=/data/data/com.dunehd.app, FS_BIN_PREFIX=/data/data/com.dunehd.app, TMPDIR=$FS_PREFIX/tmp, LOG_DIR=/tmp/run, PHP_PROC_OPEN_SH=$FS_PREFIX/bin/sh, APK_PACKAGE_NAME=com.dunehd.app и HOME=/data/user/0/com.dunehd.app/app_vlc; PATH начинается с $FS_PREFIX/firmware/bin:$FS_PREFIX/bin:/bin, а LD_LIBRARY_PATH=$FS_PREFIX/firmware/lib:/lib:/usr/lib.
-
- fw-tv188b-261021-0117-r25.c257 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в окружении php_server PHP-плагинов (kb_probe6, shell_ext, dune-hd.tv, android_apps) PHP_PROC_OPEN_SH=/data/data/com.dunehd.app/bin/sh; $FS_PREFIX/bin/sh — ссылка на /data/data/com.dunehd.app/lib/libxxx_bash.so.
- fw-tv188b-261021-0117-r25.c258 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в окружении php-cgi CGI плагина переменной PHP_PROC_OPEN_SH нет (getenv = false), а FS_PREFIX = /data/data/com.dunehd.app есть.
- fw-tv188b-260827-0003-r24.c068 · device · tv188b, android-dune-fw; прошивка 260827_0003_r24 · На tv188b r24 в окружении php-cgi плагина shell_ext (pid 26705) есть FS_PREFIX=/data/data/com.dunehd.app, FS_BIN_PREFIX=/data/data/com.dunehd.app, TMPDIR=$FS_PREFIX/tmp, LOG_DIR=/tmp/run, PHP_PROC_OPEN_SH=$FS_PREFIX/bin/sh, APK_PACKAGE_NAME=com.dunehd.app и HOME=/data/user/0/com.dunehd.app/app_vlc; PATH начинается с $FS_PREFIX/firmware/bin:$FS_PREFIX/bin:/bin, а LD_LIBRARY_PATH=$FS_PREFIX/firmware/lib:/lib:/usr/lib.
-
fw-tv188b-261021-0117-r25.c387 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 вывод env sh-скрипта env.sh плагина kb_probe5, запущенного busybox httpd как CGI (uid=0), — окружение sh-CGI, не процесса php-cgi — содержит LOG_DIR=/tmp/run и DUNEHD_SERVICE_DONT_FORK=1. ↩
-
- fw-tv188b-261021-0117-r25.c329 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 php_server при старте пишет «Starting logging to '/data/data/com.dunehd.app/tmp/run/<плагин>.log' (<= 3072000)»; в окружении php_server LOG_DIR=/tmp/run и LOG_MAX_FILE_SIZE=3072000.
- fw-tv188b-261021-0117-r25.c387 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 вывод env sh-скрипта env.sh плагина kb_probe5, запущенного busybox httpd как CGI (uid=0), — окружение sh-CGI, не процесса php-cgi — содержит LOG_DIR=/tmp/run и DUNEHD_SERVICE_DONT_FORK=1.
- fw-tv188b-260827-0003-r24.c068 · device · tv188b, android-dune-fw; прошивка 260827_0003_r24 · На tv188b r24 в окружении php-cgi плагина shell_ext (pid 26705) есть FS_PREFIX=/data/data/com.dunehd.app, FS_BIN_PREFIX=/data/data/com.dunehd.app, TMPDIR=$FS_PREFIX/tmp, LOG_DIR=/tmp/run, PHP_PROC_OPEN_SH=$FS_PREFIX/bin/sh, APK_PACKAGE_NAME=com.dunehd.app и HOME=/data/user/0/com.dunehd.app/app_vlc; PATH начинается с $FS_PREFIX/firmware/bin:$FS_PREFIX/bin:/bin, а LD_LIBRARY_PATH=$FS_PREFIX/firmware/lib:/lib:/usr/lib.
- fw-tv188b-260827-0003-r24.c069 · device · tv188b, android-dune-fw; прошивка 260827_0003_r24 · На tv188b r24 в окружении php-cgi плагина shell_ext (pid 26705) есть HD_HTTP_LOCAL_PORT=80, HD_APK=1, HD_FW_APK=1, HD_DSSD_AMEM=0x0744a101, HD_RMCL_DISABLE_CLOPTNS=1, LOG_MAX_FILE_SIZE=3072000 и VLC_DATA_PATH=/system/usr/share.
-
- fw-tv188b-261021-0117-r25.c390 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 13 /proc/self/environ php_server зонда kb_probe13 содержал, кроме общих с CGI переменных, HOME=/data/user/0/com.dunehd.app/app_vlc, TMPDIR=/data/data/com.dunehd.app/tmp, FS_BIN_PREFIX=/data/data/com.dunehd.app, APK_PACKAGE_NAME=com.dunehd.app, PHP_PROC_OPEN_SH=/data/data/com.dunehd.app/bin/sh, LOG_MAX_FILE_SIZE=3072000 и HD_RMCL_DISABLE_CLOPTNS=1 (один прогон).
- fw-tv188b-261021-0117-r25.c391 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 13 php-cgi (/data/data/com.dunehd.app/firmware_ext/php/php-cgi, php_sapi_name cgi-fcgi, uid 0), запущенный busybox httpd для /cgi-bin/plugins/kb_probe13/env, имел FS_PREFIX, HD_HTTP_LOCAL_PORT=80, LD_LIBRARY_PATH, PATH, LOG_DIR, HD_APK, PLUGIN_NAME, PLUGIN_CGI_DIR и DUNEHD_SERVICE_DONT_FORK, а getenv(HOME) и getenv(TMPDIR) вернули false (один прогон).
- fw-tv188b-260827-0003-r24.c068 · device · tv188b, android-dune-fw; прошивка 260827_0003_r24 · На tv188b r24 в окружении php-cgi плагина shell_ext (pid 26705) есть FS_PREFIX=/data/data/com.dunehd.app, FS_BIN_PREFIX=/data/data/com.dunehd.app, TMPDIR=$FS_PREFIX/tmp, LOG_DIR=/tmp/run, PHP_PROC_OPEN_SH=$FS_PREFIX/bin/sh, APK_PACKAGE_NAME=com.dunehd.app и HOME=/data/user/0/com.dunehd.app/app_vlc; PATH начинается с $FS_PREFIX/firmware/bin:$FS_PREFIX/bin:/bin, а LD_LIBRARY_PATH=$FS_PREFIX/firmware/lib:/lib:/usr/lib.
-
fw-tv188b-260827-0003-r24.c069 · device · tv188b, android-dune-fw; прошивка 260827_0003_r24 · На tv188b r24 в окружении php-cgi плагина shell_ext (pid 26705) есть HD_HTTP_LOCAL_PORT=80, HD_APK=1, HD_FW_APK=1, HD_DSSD_AMEM=0x0744a101, HD_RMCL_DISABLE_CLOPTNS=1, LOG_MAX_FILE_SIZE=3072000 и VLC_DATA_PATH=/system/usr/share. ↩
-
fw-tv188b-261021-0117-r25.c153 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в окружении CGI плагина SERVER_SOFTWARE=busybox httpd/1.35.0 и GATEWAY_INTERFACE=CGI/1.1. ↩
-
- fw-apk-260724-0207-r24--data-deploy--php-fs-prefix.c017 · code · android-atv; прошивка 260724_0207_r24 · Если команда изменена и задана переменная PHP_DEBUG, _php_add_fs_prefix_to_cmd печатает в stdout « -C-> EEE orig command: %s» с исходной и « -C-> EEE repl command: %s» с новой командой
- fw-tv188b-261021-0117-r25--libphp5--curl-http.c021 · code · android-dune-fw; прошивка 260827_0003_r24 · В r24 _php_add_fs_prefix_to_http не вызывает lcreg и других функций замены хоста; при отсутствии HD_HTTP_LOCAL_PORT или несовпадении префикса URL не меняется, а печать исходного и нового URL ограждена getenv("PHP_DEBUG").
-
fw-tv188b-261021-0117-r25--libphp5.c028 · code · android-dune-fw, android-atv; прошивка 261021_0117_r25, 260827_0003_r24, 250815_1012_r22, 260724_0207_r24, 1.0.1-1000-260724_0207_r24 · Наборы имён curl_multi_* (12) и CURLOPT_* (111) в strings libphp5.so совпадают у всех пяти исследованных сборок. ↩
-
fw-tv188b-261021-0117-r25.c246 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в php_server и php-cgi константы JSON_BIGINT_AS_STRING, JSON_UNESCAPED_UNICODE, JSON_UNESCAPED_SLASHES и JSON_PRETTY_PRINT не определены; JSON_NUMERIC_CHECK (32), JSON_HEX_TAG (1), JSON_FORCE_OBJECT (16), JSON_ERROR_UTF8 (5) определены. ↩
-
- fw-tv188b-261021-0117-r25--libphp5.c001 · code · android-dune-fw, android-atv; прошивка 261021_0117_r25, 260827_0003_r24, 250815_1012_r22, 260724_0207_r24, 1.0.1-1000-260724_0207_r24 · В strings libphp5.so пяти исследованных сборок присутствует строка PHP/5.3.6.
- fw-tv188b-261021-0117-r25--libphp5.c006 · code · android-dune-fw, android-atv; прошивка 261021_0117_r25, 260827_0003_r24, 250815_1012_r22, 260724_0207_r24, 1.0.1-1000-260724_0207_r24 · В strings libphp5.so пяти исследованных сборок присутствует версия OpenSSL 1.0.1u от 22 Sep 2016.
- fw-tv188b-261021-0117-r25--libphp5.c007 · code · android-dune-fw, android-atv; прошивка 261021_0117_r25, 260827_0003_r24, 250815_1012_r22, 260724_0207_r24, 1.0.1-1000-260724_0207_r24 · В strings libphp5.so пяти исследованных сборок присутствует строка версии PCRE 8.11 2010-12-10.
-
fw-tv188b-261021-0117-r25--libphp5.c036 · code · android-dune-fw, android-atv; прошивка 261021_0117_r25, 260827_0003_r24, 250815_1012_r22, 260724_0207_r24, 1.0.1-1000-260724_0207_r24 · CA-бандлы всех пяти исследованных сборок совпадают по SHA-256 722be2869ed2c2a949e5edb75b030f1e737e869ca8e8f70bc8d876dd93227ead. ↩
-
fw-tv188b-261021-0117-r25--libphp5.c029 · code · android-dune-fw, android-atv; прошивка 261021_0117_r25, 260827_0003_r24, 250815_1012_r22, 260724_0207_r24, 1.0.1-1000-260724_0207_r24 · В strings libphp5.so tv188b r25 присутствует _php_add_fs_prefix_to_http вместо имени _php_add_http_port из r24 и r22. ↩
-
- fw-tv188b-261021-0117-r25--libphp5--curl-http.c021 · code · android-dune-fw; прошивка 260827_0003_r24 · В r24 _php_add_fs_prefix_to_http не вызывает lcreg и других функций замены хоста; при отсутствии HD_HTTP_LOCAL_PORT или несовпадении префикса URL не меняется, а печать исходного и нового URL ограждена getenv("PHP_DEBUG").
- fw-tv188b-261021-0117-r25--libphp5--curl-http.c004 · code · android-dune-fw; прошивка 261021_0117_r25 · В r25 _php_do_add_fs_prefix_to_http вызывает lcreg при отсутствии HD_HTTP_LOCAL_PORT либо для http:// URL, не попавшего под CGI-подстановку; при заданной HD_HTTP_LOCAL_PORT URL без префикса http:// выходит до lcreg.
-
fw-tv188b-261021-0117-r25--libphp5--curl-http.c022 · code · android-dune-fw; прошивка 261021_0117_r25 · В r25 zif_curl_exec перед curl_easy_perform читает сохранённый URL из поля handle +0x16c; если хост (после http:// или https://, без userinfo и порта) не localhost/localhost. и не разрешается getaddrinfo в 127.x или ::1, либо URL пуст или с другой схемой, ставит опцию 0x4ec3 с обработчиком _php_curl_opensocket_remote. ↩
-
fw-tv188b-260827-0003-r24--plugin-loader--php-runtime.c036 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В r25 php_server содержит путь /tmp/run/%s.pid и импорт FS_writestring, которых нет в strings php_server r24 ↩
-
fw-tv188b-260827-0003-r24.c052 · code · tv188b, android-dune-fw; прошивка 250815_1012_r22, 260827_0003_r24 · В 260827_0003_r24 по сравнению с 250815_1012_r22 в firmware_ext/php/include/dunelib/ добавлены config_utils.php, dune_languages.php, expr.php, utils.php: в r22 там только dune_countries.php ↩
-
fw-tv188b-260827-0003-r24.c053 · code · tv188b, android-dune-fw; прошивка 250815_1012_r22, 260827_0003_r24 · В 260827_0003_r24 по сравнению с 250815_1012_r22 изменены firmware_ext/php/dune_api.php (119788 → 127635 байт) и dune_plugin_fw.php (6211 → 6653 байт) ↩
-
- fw-tv188b-260827-0003-r24--init-runtime.c033 · code · tv188b, android-dune-fw; прошивка 250815_1012_r22 · В tv188b r22 цикл запуска $FS_PREFIX/config/boot записан прямо в init (отдельного вызова binit.sh нет)
- fw-tv188b-260827-0003-r24--init-runtime.c031 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · binit.sh находит файлы в $FS_PREFIX/config/boot (find … -type f) и по очереди, без фонового запуска, выполняет исполняемые (-x), записывая в лог код возврата каждого
-
- fw-tv188b-260827-0003-r24--shell-ext.c074 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · www/cgi-bin/php.ini shell_ext: cgi.force_redirect = 0, cgi.redirect_status_env = yes, error_reporting без E_NOTICE/E_STRICT/E_DEPRECATED/E_WARNING, magic_quotes_gpc = 0
- fw-tv188b-261021-0117-r25.c335 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · shell_ext/www/cgi-bin/php.ini r25 задаёт cgi.force_redirect = 0, cgi.redirect_status_env = yes, date.timezone = UTC, error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED (E_WARNING включён), magic_quotes_gpc = 0, display_errors = 0, log_errors = 1 и error_log = /tmp/run/shell_ext_cgi.log.
-
- fw-tv188b-260827-0003-r24--plugin-loader--php-runtime--opexec.c017 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Отмена операции PHP-плагина (php_plugin.c, fcn.00272050) находит дескриптор операции по id, печатает «Cancelling... Output-data: %p.» и ставит в дескрипторе байт-флаг отмены — и больше ничего: ни php_server, ни PHP-коду отмена не передаётся.
- fw-tv188b-260827-0003-r24--plugin-loader--php-runtime--opexec.c032 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 по тайм-ауту handle_user_input оболочка останавливает php_server плагина и тем прерывает вызов: за «cancelling by timeout (N s)» следуют «FATAL ERROR detected (msg = operation timed out)», «[php] shutting down...», через ~0,25 с «killing PHP-server process...» и «stopped.», затем «canceling req N (fast: 1)», «PHP-FW was shut down. The operation fails.», «result status canceled» и «canceled in N s»; PHP-код вызова не доработал.
-
- doc-sdk-plugins.c064 · doc · any-documented; прошивка — · DuneSystem::$properties содержит plugin_name, install_dir_path, tmp_dir_path, data_dir_path, plugin_www_url, plugin_cgi_url
- fw-tv188b-261021-0117-r25.c288 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 DuneSystem::$properties у PHP-плагина kb_probe5 из flashdata содержит 8 ключей: sdk_version '1.0.0', plugin_name 'kb_probe5', install_dir_path, tmp_dir_path, data_dir_path, plugin_www_url, plugin_cgi_url, few_buttons_remote_type '0'.
-
- doc-sdk-plugins.c064 · doc · any-documented; прошивка — · DuneSystem::$properties содержит plugin_name, install_dir_path, tmp_dir_path, data_dir_path, plugin_www_url, plugin_cgi_url
- doc-sdk-plugins.c095 · doc · any-documented; прошивка — · Встроенный HTTP-сервер отдаёт $install_dir_path/www/* по http://
/plugins/ /* и исполняет CGI из www/cgi-bin/* по http:// /cgi-bin/plugins/ /* - fw-tv188b-261021-0117-r25.c290 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 install_dir_path у kb_probe5 = '/data/data/com.dunehd.app/flashdata/plugins/kb_probe5' (is_dir() = true) — тот же путь, что
плагина в /tmp/run/installed_plugins.xml.
-
- doc-sdk-plugins.c064 · doc · any-documented; прошивка — · DuneSystem::$properties содержит plugin_name, install_dir_path, tmp_dir_path, data_dir_path, plugin_www_url, plugin_cgi_url
- doc-sdk-plugins.c065 · doc · any-documented; прошивка — · tmp_dir_path — каталог под /tmp для временных данных плагина; Dune GUI гарантирует его существование
- fw-tv188b-261021-0117-r25.c291 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 tmp_dir_path у kb_probe5 = '/data/data/com.dunehd.app/tmp/plugins/kb_probe5' — путь /tmp/plugins/kb_probe5 с префиксом FS_PREFIX=/data/data/com.dunehd.app; is_dir() для него true.
- fw-tv188b-261021-0117-r25.c294 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 пустой каталог /tmp/plugins/<плагин> PHP-плагина существует уже после регистрации плагина, до первого вызова и запуска его php_server: kb_probe5 — в 13:24 при первом вызове в 13:37:59, kb_probe6 — в 15:06 при первом вызове в 15:08:02 (местное время).
-
- doc-sdk-plugins.c064 · doc · any-documented; прошивка — · DuneSystem::$properties содержит plugin_name, install_dir_path, tmp_dir_path, data_dir_path, plugin_www_url, plugin_cgi_url
- doc-sdk-plugins.c066 · doc · any-documented; прошивка — · data_dir_path (постоянные данные) недоступен на устройствах без System Storage и Flash Memory Storage — тогда ключ не задан
- doc-sdk-plugins.c067 · doc · any-documented; прошивка — · После каждой записи в постоянное хранилище нужно сразу выполнять sync (команду или системный вызов)
- fw-tv188b-261021-0117-r25.c292 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 data_dir_path у kb_probe5 (плагин в flashdata) = '/data/data/com.dunehd.app/flashdata/plugins_data/kb_probe5'; is_dir() для него true.
-
- doc-sdk-plugins.c064 · doc · any-documented; прошивка — · DuneSystem::$properties содержит plugin_name, install_dir_path, tmp_dir_path, data_dir_path, plugin_www_url, plugin_cgi_url
- fw-tv188b-261021-0117-r25.c289 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 у kb_probe5 plugin_www_url = 'http://127.0.0.1:80/plugins/kb_probe5/', plugin_cgi_url = 'http://127.0.0.1:80/cgi-bin/plugins/kb_probe5/' — с явным портом 80.
-
fw-tv188b-261021-0117-r25--downloads.c043 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · torrserverActionGet включает API_OPT_LONG_INT_AS_STRING: перед json_decode клиент заменяет значения из 10 и более десятичных цифр после ключа \w+ на JSON-строки. ↩
-
plg-hdtv-remtor.c114 · code · unknown; прошивка — · При hack_big_int TransmissionRPC переписывает регулярным выражением целые числа JSON (значения вида "key":123) в строки, чтобы большие размеры не теряли точность. ↩
-
plg-dc-torrent-center.c082 · code · unknown; прошивка — · torrserverActionGet перед json_decode переписывает в строки числовые значения после ключа из символов слова перед запятой, а отдельным выражением — значения length. ↩
-
plg-dc-torrent-center.c079 · code · unknown; прошивка — · TorrServer::actionGetTorrentList запускает вложенный php-cgi -f www/cgi-bin/run.php с action=torrentTorrServList через HD::asyncExec. ↩
-
plg-gh-kocourkuba-proiptv.c061 · code · unknown; прошивка — · run_bg_epg_indexing запускает фоновую индексацию EPG, если allow_index истинно или включён delay-load пиконов при is_delay_load_supported(), или движок XMLTV/combined; источник должен существовать и не быть заблокирован is_index_locked. Он пишет JSON-конфиг в tmp, экспортирует DuneSystem и запускает отдельный процесс '
bin/index_epg.php ' через shell_exec с перенаправлением в лог; check_and_run_bg_indexing выставляет plugin_cookies->ticker, когда индексация запущена. ↩ -
- plg-hdtv-rclone.c081 · code · unknown; прошивка — · SmartConfig::do_cmd удаляет старый exec_log, а на android выполняет команду через /system/dunehd/dunehd_service do с экранированием двойных кавычек; на остальных платформах — через system().
- plg-hdtv-rclone.c082 · code · unknown; прошивка — · Результат shell-команд передаётся в PHP через JSON-файл exec_log: do_exec_log декодирует его json_decode и складывает поля в $this->execLogObj, откуда вызывающий код читает status/descr.
-
plg-dc-globaltv.c072 · code · unknown; прошивка — · Плагин вызывает date_default_timezone_set("UTC"), а смещение пояса вычисляет из вывода shell-команды date +%z. ↩
-
plg-hdtv-megaanime.c076 · code · unknown; прошивка — · Копия lib/default_dune_plugin_fw.php в MegaAnime отличается от копии эталона HdKinoTeatr: добавляет флаг tracing_enabled, в create_plugin ставит date_default_timezone_set('UTC') и ini_set('date.timezone', 'UTC'), а call_plugin получил обработку ошибок и трассировку. ↩
-
- plg-gh-rpervykh-dune-plugin-anidub-com.c040 · code · unknown; прошивка — · set_time_limit(0) вызывают anidub_main, anidub_main_year, anidub_main_studii, get_main_menu_items и Youtube::retrieve_playback_url.
- plg-hdtv-folder-cache-vod.c050 · code · unknown; прошивка — · Youtube::retrieve_playback_url() и General_main() снимают ограничение времени через set_time_limit(0); в Youtube это подписано комментарием «no more plugin restarts».
-
plg-dune-remote-control.c074 · code · unknown; прошивка — · При подключении m3u.class.php выполняет error_reporting(0) и set_time_limit(15), перекрывая error_reporting(E_ALL), заданный в do.php. ↩
-
- plg-dc-widget-ext.c086 · code · unknown; прошивка — · boot.sh проверяет каталог /flashdata/plugins_data без $FS_PREFIX, а остальные скрипты — $FS_PREFIX/flashdata/plugins_data
- plg-dc-widget-ext.c087 · code · unknown; прошивка — · PHP-часть вызывает /firmware/scripts/run_widget.sh без $FS_PREFIX, а shell-скрипты — $FS_PREFIX/firmware/scripts/run_widget.sh
-
plg-gh-vladikshkwok-lampa-dune-plugins.c044 · code · android; прошивка — · CGI-обёртка api задаёт FS_PREFIX по умолчанию /data/data/com.dunehd.app и добавляет в LD_LIBRARY_PATH каталоги firmware/lib, lib и системные. ↩
-
plg-gh-vladikshkwok-lampa-dune-plugins.c046 · forum · android; прошивка — · Комментарии CGI-обёртки api утверждают, что run_plugin_cgi вызывает файл через sh даже на Android 11, а php-cgi предпочитает SCRIPT_FILENAME опции -f при наличии REQUEST_METHOD. ↩
-
plg-gh-vladikshkwok-lampa-dune-plugins.c123 · forum · android; прошивка — · Комментарий bridge.php заявляет совместимость с PHP 5.3 и отсутствие распространения SDK, демона и внешнего сервиса метаданных. ↩
-
plg-hdtv-kohana-channel.c048 · code · unknown; прошивка — · Controller перед возвратом результата печатает в stdout имя операции: echo 'get_tv_info: ' . $media_url и аналогичные строки в get_folder_view, get_next_folder_view, get_tv_stream_url, get_vod_info, get_vod_stream_url, get_regular_folder_items, get_day_epg, get_tv_playback_url, change_tv_favorites. ↩
-
plg-hdtv-cleanup.c013 · code · unknown; прошивка — · check_children добирает дочерние процессы двумя способами: по общим pipe-файловым дескрипторам из /proc/
/fd и по PPID через pgrep -P, объединяет их, убирает дубликаты и убивает каждый через kill. ↩ -
fw-tv188b-261021-0117-r25.c094 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 httpd запущен как «$FS_PREFIX/bin/httpd -h /data/data/com.dunehd.app/tmp/www», то есть корень веб-сервера — $FS_PREFIX/tmp/www; процесс работает от root (метка u:r:shell:s0, PPID 1). ↩
-
fw-tv188b-260827-0003-r24--php-framework.c075 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · В HD::format_timestamp есть комментарий, что PHP на Dune требует явной таймзоны (нет встроенной информации о таймзонах?) ↩
-
plg-dc-globaltv.c071 · code · unknown; прошивка — · Комментарий в библиотеке: PHP на Dune требует явного указания часового пояса (встроенной информации о часовых поясах, видимо, нет). ↩
-
doc-sdk-plugins.c140 · doc · android; прошивка — · В SDK для Android приведены команды развёртывания плагина: adb push в /flashdata/plugins/ и chmod -R +x для bin и www/cgi-bin внутри каталога плагина. ↩
-
fw-tv188b-261021-0117-r25.c207 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в корне ФС каталога /flashdata нет, а оболочка в shell.log называет каталог плагинов /flashdata/plugins («Loading plugins from '/flashdata/plugins'», «invalid plugin manifest from '/flashdata/plugins/kb_probe5_badname/dune_plugin.xml'», «copying recursively '/tmp/plugin_tmp' to '/flashdata/plugins/kb_probe5_plat'»); файлы этих плагинов лежат в /data/data/com.dunehd.app/flashdata/plugins. ↩
-
doc-sdk-plugins.c042 · doc · any-documented; прошивка — · По SDK тайм-аут операций плагина по умолчанию составляет 10 секунд; operation_timeout задаёт общий (
) и потиповой ( N ) тайм-аут. ↩ -
- fw-tv188b-261021-0117-r25--libphp5.c085 · code · android-dune-fw; прошивка 261021_0117_r25 · В r25 _php_add_fs_prefix_to_cmd, если команда начинается с '/' и путь требует префикса (_php_path_needs_prefix.part.0), но не начинается с /firmware/bin/ или /firmware_ext/php/, ставит в начало результата «sh ».
- fw-tv188b-261021-0117-r25--libphp5.c086 · code · android-dune-fw; прошивка 261021_0117_r25 · В r25 _php_add_fs_prefix_to_cmd дописывает $FS_PREFIX к пути у '/', только если байт перед '/' — пробел, '!', '&', апостроф, '(', ')', ';', '<', '>' или '`'; для '/' в первом символе команды проверяется байт перед началом строки.
-
fw-tv188b-261021-0117-r25--libphp5.c072 · device, disputed · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 11 после kill php_server и запуска collect11 шага bg2 операция handle_user_input была отменена через 30.0 с с operation timed out; step_bg2.txt не появился, а в сохранённом steps.txt нет begin bg2 между end bg1 и begin wget. ↩
-
fw-tv188b-261021-0117-r25--libphp5.c098 · inference · tv188b, android-dune-fw; прошивка 261021_0117_r25 · Вероятно, shell_exec("sleep 61 &") в php_server не возвращается потому, что фоновый sleep наследует pipe stdout (fd 1) и держит его открытым до конца, а shell_exec ждёт EOF; наследование fd 101/110 php_server тоже не закрывается перед exec. ↩
-
fw-tv188b-261021-0117-r25--libphp5.c087 · inference · android-dune-fw; прошивка 261021_0117_r25 · В r25 _php_add_fs_prefix_to_cmd вызывается из php_exec (exec, system, passthru), zif_shell_exec, zif_popen, zif_proc_open и virtual_popen, то есть exec и shell_exec переписывают команду одной функцией. ↩
-
fw-tv188b-261021-0117-r25--libphp5.c088 · inference · tv188b, android-dune-fw; прошивка 261021_0117_r25 · rc=127 и «sh: /config/kbp11_x.sh: No such file or directory» у exec("/config/kbp11_x.sh first-word") в запросе 11 согласуются с тем, что путь стоит первым словом: _php_add_fs_prefix_to_cmd добавил «sh », но $FS_PREFIX к первому слову не дописал (байт перед строкой не разделитель); в shell_exec запроса 6 /config/c стоял после пробела и префикс получил. Различие — по позиции слова, а не по функции exec/shell_exec. ↩
-
fw-apk-260724-0207-r24--data-deploy--php-fs-prefix.c029 · inference · android-dune-fw; прошивка 260827_0003_r24 · Вероятно, на tv188b 260827_0003_r24 подстановка путей и команд в PHP работает так же, как в APK: там тот же libphp5.so, а init и dunehd_service.env задают FS_PREFIX=/data/data/com.dunehd.app ↩
-
fw-apk-260724-0207-r24--data-deploy--php-fs-prefix.c030 · inference · android-dune-fw; прошивка 260724_0207_r24 · Вероятно, на tv175u 260724_0207_r24 libphp5.so пути и команды не переписывает: файл тот же, что в APK, а скрипт /system/dunehd/init FS_PREFIX не задаёт, так что getenv("FS_PREFIX") пуст ↩
-
fw-apk-260724-0207-r24--data-deploy--php-fs-prefix.c031 · inference · android-atv; прошивка 260724_0207_r24 · Вероятно, в APK PHP-плагин, обращаясь файловыми функциями к /tmp/…, /config/…, /flashdata/…, /fconfig/…, /firmware…, фактически работает с $FS_PREFIX/tmp/… и т. д., к /D/… — с $FS_PREFIX/tmp/mnt/D/…, а пути, уже начинающиеся с $FS_PREFIX (/data/data/<пакет>), не меняются; поэтому годятся и абсолютные пути прошивки, и getenv("FS_PREFIX") . "/config/…" ↩
-
fw-apk-260724-0207-r24--data-deploy--php-fs-prefix.c003 · inference · android-atv; прошивка 260724_0207_r24 · Вероятно, вторая строка-образец _php_get_fs_prefix2 (адрес 0x353448) — "/D/": к путям /D и /D/… после FS_PREFIX добавляется /tmp/mnt, то есть /D/x превращается в $FS_PREFIX/tmp/mnt/D/x ↩
-
fw-apk-260724-0207-r24--data-deploy--php-fs-prefix.c009 · inference · android-atv; прошивка 260724_0207_r24 · Вероятно, подстановке FS_PREFIX в командах подвержены PHP-функции exec, system и passthru (через php_exec), shell_exec (и оператор
…), popen и proc_open ↩ -
fw-tv188b-261021-0117-r25.c353 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 вызов $FS_PREFIX/bin/wget -q -O - 'http://127.0.0.1/cgi-bin/do?cmd=status' | head -c 80 из php_server (uid 1000) в том же прогоне вернул пустой вывод, а [exit 0] — код head в конвейере; причина не установлена. ↩
-
fw-apk-260724-0207-r24--data-deploy--php-fs-prefix.c013 · inference · android-atv; прошивка 260724_0207_r24 · Вероятно, в APK программа плагина, запущенная exec/shell_exec по абсолютному пути вне /firmware/bin/ и /firmware_ext/php/ (например /flashdata/plugins/<плагин>/bin/x или $FS_PREFIX/…), запускается как «sh <путь>»: shell-скрипт так работает и без бита x, а ELF-бинарник — нет ↩
-
fw-apk-260724-0207-r24--data-deploy--php-fs-prefix.c016 · inference · android-atv; прошивка 260724_0207_r24 · Для '/' в самом начале команды _php_add_fs_prefix_to_cmd проверяет байт перед началом строки (вне команды), поэтому, вероятно, путь первым словом (/config/x.sh …) получает FS_PREFIX непредсказуемо — в зависимости от памяти перед строкой; «sh » при этом добавляется ↩
-
fw-apk-260724-0207-r24--data-deploy--php-fs-prefix.c022 · inference · android-atv; прошивка 260724_0207_r24 · Вероятно, в APK proc_open(<команда>, …, $cwd) с $cwd вида /tmp/… или /config/… переходит в системный каталог Android, а не в $FS_PREFIX/…: пути в команде переписываются, а cwd — нет ↩
-
fw-apk-260724-0207-r24--data-deploy--php-fs-prefix.c023 · inference · android-atv; прошивка 260724_0207_r24 · Вероятно, при переданном в proc_open массиве $env дочерний процесс получает только эти переменные: FS_PREFIX, PATH, LD_LIBRARY_PATH и прочее окружение php_server в него не попадают, если плагин их не передал ↩
-
fw-apk-260724-0207-r24--data-deploy--php-fs-prefix.c034 · inference · android-atv; прошивка 260724_0207_r24 · Вероятно, в APK при заданной FS_PREFIX абсолютные пути под корнями /config и /tmp, разрешаемые realpath(), include/require, проверкой open_basedir и созданием временных файлов tempnam/tmpfile через virtual_file_ex, получают FS_PREFIX перед разрешением. ↩
-
fw-apk-260724-0207-r24--data-deploy--php-fs-prefix.c035 · inference · android-atv; прошивка 260724_0207_r24 · Вероятно, _php_add_fs_prefix применяют к путям PHP-функции chdir, glob, readfile, rename, unlink, chgrp, chown, chmod, touch, disk_total_space, disk_free_space, clearstatcache, stat-семейство (php_stat: stat, filemtime, file_exists, is_dir…), mkdir, rmdir, opendir/scandir, открытие потоков (_php_stream_open_wrapper_ex: fopen, file_get_contents, file_put_contents и т. п.), include/require (zend_stream_open), simplexml_load_file, SimpleXMLElement::asXML и curl_setopt ↩
-
fw-apk-260724-0207-r24--data-deploy--php-fs-prefix.c042 · inference · android-atv; прошивка 260724_0207_r24 · Вероятно, в APK при заданных HD_APK и FS_PREFIX плагин, читающий /sys/class/net/eth0/address через fopen с режимом на 'r' или file_get_contents без поиска по include_path, получает содержимое $FS_PREFIX/tmp/run/dune_mac.txt ↩
-
- fw-tv188b-261021-0117-r25--libphp5.c077 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 11 exec команды /config/kbp11_x.sh first-word из php_server вернул rc=127 и sh: /config/kbp11_x.sh: No such file or directory; file_get_contents того же пути с use_include_path=true прочитал 49 байт.
- fw-tv188b-261021-0117-r25--libphp5.c080 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 11 file_get_contents(lib/kbp11_steps.php,true) из php_server прочитал 15678 байт.
-
fw-apk-260724-0207-r24--data-deploy--php-fs-prefix.c043 · inference · android-atv; прошивка 260724_0207_r24 · Вероятно, при открытии потока с поиском по include_path (fopen($f, $mode, true), file_get_contents($f, true) — бит 1 options, USE_PATH) _php_stream_open_wrapper_ex путь не переписывает, и FS_PREFIX к нему приписывается разве что при разрешении через virtual_file_ex ↩
-
fw-tv188b-260827-0003-r24.c070 · inference · tv188b, android-dune-fw; прошивка 260827_0003_r24 · На tv188b r24 окружение php_server отдельно не снято: сбор
24-environвыбирал процессы поpgrep -f dunehd, а в argv php_server строки dunehd нет; при этом окружение родителя com.dunehd.app не содержит FS_PREFIX, HD_APK, HD_FW_APK, LOG_DIR, TMPDIR и PHP_PROC_OPEN_SH, поэтому наличие этих переменных у php_server на r24 не установлено. ↩ -
fw-apk-260724-0207-r24--data-deploy.c046 · inference · android-atv; прошивка 260724_0207_r24 · Вероятно, PHP-код плагина в APK исполняется в процессе php_server, который оболочка запускает fork + FS_execv("/firmware/bin/php_server", …) без отдельного окружения, поэтому он наследует окружение процесса оболочки: FS_PREFIX, HD_APK=1, HD_HTTP_LOCAL_PORT=11080, APK_PACKAGE_NAME, PATH, LD_LIBRARY_PATH, PHP_PROC_OPEN_SH; HD_FW_APK не задан ↩
-
fw-tv188b-260827-0003-r24--php-framework.c308 · inference · tv188b, android-dune-fw; прошивка 260827_0003_r24 · php_server, вероятно, исполняет вызов плагина как PHP-код «$in = <<<EOL …EOL; $out = <выражение>($in);», где выражение (например DunePluginFw::$instance->call_plugin) приходит от оболочки в CallPacket ↩
-
fw-tv188b-260827-0003-r24--php-framework.c033 · inference · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Пути require_once 'dunelib/…' разрешаются, только если каталог firmware_ext/php/include/ есть в include_path PHP; где он задаётся, из модуля не видно ↩
-
fw-tv188b-260827-0003-r24--php-framework.c309 · inference, disputed · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Системные PHP-файлы /firmware_ext/php подключаются до кода плагина: так сказано в SDK; для tv188b r24 порядок из строк php_server не следует ↩
-
fw-tv188b-260827-0003-r24--plugin-loader.c081 · inference, disputed · tv188b, android-dune-fw; прошивка 260827_0003_r24, 261021_0117_r25 · data_dir_path, вероятно, — <хранилище>/plugins_data/
; для плагина из flashdata — с префиксом $FS_PREFIX ($FS_PREFIX/flashdata/plugins_data/ ); варианты persistfs и запасной /config/plugins_data, а также правило выбора не установлены. ↩ -
fw-tv188b-260827-0003-r24--plugin-loader.c082 · inference, disputed · tv188b, android-dune-fw; прошивка 260827_0003_r24, 261021_0117_r25 · tmp_dir_path, вероятно, — $FS_PREFIX/tmp/plugins/
(для плагина из flashdata); shell-переменная bluray задаёт тот же путь без префикса — /tmp/plugins/ . ↩ -
fw-tv188b-260827-0003-r24--plugin-loader.c047 · inference, disputed · tv188b, android-dune-fw; прошивка 260827_0003_r24 · libduneshell.so содержит строки установщика %s/bin/php-cgi, %s/www/cgi-bin/php-cgi, /firmware/bin/%s и сообщения «non-working binary detected», «created symlink(%s -> %s)»; вероятно, нерабочий бинарник плагина заменяется ссылкой на /firmware/bin/<имя>; связь %s/bin/php-cgi с этой заменой не установлена, а /firmware/bin/php-cgi в этой прошивке нет ↩
-
fw-tv188b-261021-0117-r25.c151 · inference · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 httpd запускает ссылку run_plugin_cgi с $0, равным имени файла CGI без каталога, из каталога, последний компонент которого — имя плагина: обёртка строит SCRIPT_FILENAME как $dir_path/$0 и PLUGIN_NAME как ${PWD##*/}, и для /cgi-bin/plugins/kb_probe5/env.sh получились …/www/cgi-bin/env.sh и kb_probe5. Полный путь каталога запуска не наблюдался. ↩
-
plg-hdtv-zlostnyi-iptv.c068 · inference · unknown; прошивка — · Передача по ссылке на месте вызова (call-time pass-by-reference) в PHP 5.3 — лишь предупреждение deprecated, в 5.4+ — ошибка разбора; в прошивке r25 PHP 5.3.6, поэтому код работает, но на PHP 5.4+ файлы с такими вызовами не загрузятся. ↩
-
plg-dc-dunemdb-supplier-movies-rus.c021 · inference · unknown; прошивка — · Не доказано, что запущенный из описателя php-cgi читает bin/php.ini: ключ -c не передан, а путь php.ini по умолчанию задан при сборке PHP. ↩
-
fw-tv188b-261021-0117-r25--libphp5.c025 · code · android-dune-fw, android-atv; прошивка 261021_0117_r25, 260827_0003_r24, 250815_1012_r22, 260724_0207_r24, 1.0.1-1000-260724_0207_r24 · Строка mcrypt в libphp5.so пяти сборок входит в общий перечень авторов расширений PHP. ↩
-
fw-tv188b-260827-0003-r24--shell-ext--entry-handler.c088 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · get_update_service_plugins_action пропускает установленный сервисный плагин при version_index>1; version_index<=1 ведёт к установке/обновлению. ↩
-
fw-tv188b-261021-0117-r25.c377 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В запросе 11 ls и cat /data/data/com.dunehd.app/config/lcreg.txt вернули No such file or directory. ↩
-
fw-tv188b-261021-0117-r25--libphp5--curl-http.c007 · code · android-dune-fw; прошивка 261021_0117_r25 · В r25 lcreg_kind выбирается через atoi первой строки lcreg.txt: 0 выбирает встроенную таблицу lcreg_ru_pairs, 1 читает lcreg_pairs.txt; ошибка открытия/чтения lcreg.txt, результат вне 0/1 или недоступный файл пар дают lcreg_kind=-1. ↩