From: |
Stas Mishchenkov 2:460/5858 |
10 Oct 2022 09:31 +0300 |
To: |
Pavel Gulchouck 2:463/68 |
|
Subject: |
hpt.core
|
Hi, Pavel!
08 окт 22 22:22, Pavel Gulchouck -> Stas Mishchenkov:
SM>> Учитывая, что скрипт у тебя на перле и текст генерируется именно в
SM>> нём, то проще из перла же и создать сразу PKT в инбаунде, чем
SM>> вызывать hpt post, что чревато глюками.
PG> Есть ли готовая перловая библиотека для создания pkt?
Есть, кажется, целых две. Однако, что-то там мне не понравилось и я сделал
собственную. После обработки напильником могу поделиться. А пока можно списать,
например, отсюда https://brorabbit.g0x.ru/files/perl/callip.pl
PG> Если нет, то вызвать из перла "hpt post" явно проще, чем создавать
PG> пакет "руками", там немало разных нюансов.
Я пробовал. Получался глюкогенератор. Именно по этому, ну, кроме того,
разумеется, что мне было просто интересно, и озаботился написанием.
Have nice nights.
Stas Mishchenkov.
From: |
Ruslan Suleimanov 2:467/888 |
09 Oct 2022 23:54 +0300 |
To: |
Pavel Gulchouck 2:463/68 |
|
Subject: |
hpt.core
|
Привет, Pavel!
Ответ на сообщение Pavel Gulchouck (2:463/68) к Ruslan Suleimanov,
написанное 08 окт 22 в 11:00:
PG> Hi Ruslan!
PG> 07 Oct 22, Ruslan Suleimanov ==> Pavel Gulchouck:
PG>>>>> Покажи, как именно он запускается из перла.
RS>>>> open(FROMK,"-|") || exec("cat /mnt/fido/CODE/db/1.txt | hpt -c
RS>>>> /mnt/fido/zone2/husky/config post -af '2:467/888' -nf '.....' ...
RS>>>> -") || die "error message: $!"; close(FROMK);
PG>>> Тут много странного.
PG>>> У open() второй параметр "-|", что предполагает третий аргумент как
PG>>> процесс, для которого stdout перенаправляется в FROMK. Но третий
PG>>> параметр не передаётся, от undef. Вариант undef как третий параметр
PG>>> используется для unnamed tempfile, но это в случае "+>", а в твоём
PG>>> случае я не понимаю, что произойдёт и что имелось ввиду, поясни.
RS>> тут я открываю канал без опаски перехвата интерпретатором команд моих
RS>> аргументов которые могут изменятся. тоесть потом просто читается из
RS>> FROMK в родительском процессе.
PG> Ты хочешь, чтобы, если в параметрах, которые ты подставляешь из
переменных,
PG> встретились метасимволы ("'", "$"), то они не были интерпретированны
PG> шеллом? Открытый пайп FROMK (а на самом деле не открытый, иначе exec не
PG> выполнится) тут не поможет. Запускай hpt через exec() (если возврат не
PG> нужен) или через system (если нужен), передавая не командную строку, а
PG> список аргументов без всяких перенаправлений, тогда он будет выполнен без
PG> shell. Текст поста ты предварительно пишешь в 1.txt? Тогда просто
передавай
PG> этот 1.txt параметром. А если хочешь через пайп, тогда open my $openk,
PG> "|-", "hpt post -nf '$from' ... -"; и потом в $openk пиши текст поста, без
PG> создания 1.txt. Но тогда нужно самостоятельно проверить, чтобы в
параметрах
PG> не встретились одинарные кавычки. Ещё вариант, чтобы использовать пайп без
PG> запуска шелла - руками сделать редирект stdout на пайп, потом запустить
PG> hpt, и потом писать в пайп. Или использовать IPC::Open3.
PG> В твоём случае я бы предложил не усложнять, т.е. не использовать пайп, а
PG> запускать через system() со списком параметров, а текст брать из файла
PG> 1.txt.
RS>> а как можно безопасно вызвать чтобы динамичные аргументы не
RS>> подставлялись в командах ? через system() ?
PG> Можно через system(), можно через exec(), можно предварительно
экранировать
PG> метасимволы.
спасибо будем заниматься. Тебе удачи !
WBR Ruslan Suleimanov
... "Спершу ти називаэш українцiв салоїдами, а потiм тебе в полi доїдає
українська
From: |
Victor Dronov 2:5030/722.140 |
09 Oct 2022 00:27 +0300 |
To: |
Dima Krylov 2:5020/570.1 |
|
Subject: |
exec failed, code 256
|
Hello Dima!
08 Oct 22 20:26, you wrote to Stas Mishchenkov:
DK> Возможно дело в чем-то еще, т.к. виноват не BusyBox. Я сейчас снес unzip
DK> и САБЖ стал вылетать на всех пакетах. Получается, что BusyBox не
DK> работает в принципе.
Да не все ключи он понимает, а когда не понимает, 1 и возвращает. -L,
конкретно, он не знает.
Victor
... Dronov шугает демонов, меряющихся вилками с утконосами
From: |
Pavel Gulchouck 2:463/68 |
08 Oct 2022 22:22 +0300 |
To: |
Stas Mishchenkov 2:460/5858 |
|
Subject: |
hpt.core
|
Hi Stas!
08 Oct 22, Stas Mishchenkov ==> Ruslan Suleimanov:
RS>> ок понял, попробую через system() и профильтровать динамические
RS>> аргументы, послежу за поведением, спасибо.
SM> Учитывая, что скрипт у тебя на перле и текст генерируется именно в нём, то
проще из перла же и создать сразу PKT в инбаунде, чем
SM> вызывать hpt post, что чревато глюками.
Есть ли готовая перловая библиотека для создания pkt?
Если нет, то вызвать из перла "hpt post" явно проще, чем создавать пакет
"руками", там немало разных нюансов.
Lucky carrier,
Паша
aka gul@gul.kiev.ua
From: |
Dima Krylov 2:5020/570.1 |
08 Oct 2022 20:26 +0300 |
To: |
Stas Mishchenkov 2:460/5858 |
|
Subject: |
exec failed, code 256
|
Привет тебе, Stas!
Kaк-тo нa дняx (08 окт 22) Stas Mishchenkov пишeт к Dima Krylov...
[ ... ]
DK>> Получается, что поменялось что-то на стороне линка, если мой
DK>> урезанный вариант BusyBox перестал жрать его пакеты?
SM> Возможно поменялся тип сжатия.
Возможно дело в чем-то еще, т.к. виноват не BusyBox. Я сейчас снес unzip и САБЖ
стал вылетать на всех пакетах. Получается, что BusyBox не работает в принципе.
From: |
Stas Mishchenkov 2:460/5858 |
08 Oct 2022 20:08 +0300 |
To: |
Ruslan Suleimanov 2:467/888 |
|
Subject: |
hpt.core
|
Hi, Ruslan!
07 окт 22 23:28, Ruslan Suleimanov -> Pavel Gulchouck:
RS> ок понял, попробую через system() и профильтровать динамические
RS> аргументы, послежу за поведением, спасибо.
Учитывая, что скрипт у тебя на перле и текст генерируется именно в нём, то
проще из перла же и создать сразу PKT в инбаунде, чем вызывать hpt post, что
чревато глюками.
Have nice nights.
Stas Mishchenkov.
From: |
Stas Mishchenkov 2:460/5858 |
08 Oct 2022 19:51 +0300 |
To: |
Dima Krylov 2:5020/570.1 |
|
Subject: |
exec failed, code 256
|
Hi, Dima!
07 окт 22 22:28, Dima Krylov -> Michael Dukelsky:
MD>> а путь к нему в конфиге hpt прописать забыл.
DK> Как же оно работало всегда без пути в конфиге и работает с пакетами других
DK> линков без пути в конфиге?
Мне тоже интересно.
MD>> В результате работал урезанный вариант из BusyBox.
DK> Получается, что поменялось что-то на стороне линка, если мой урезанный
DK> вариант BusyBox перестал жрать его пакеты?
Возможно поменялся тип сжатия.
Have nice nights.
Stas Mishchenkov.
From: |
Pavel Gulchouck 2:463/68 |
08 Oct 2022 11:00 +0300 |
To: |
Ruslan Suleimanov 2:467/888 |
|
Subject: |
hpt.core
|
Hi Ruslan!
07 Oct 22, Ruslan Suleimanov ==> Pavel Gulchouck:
PG>>>> Покажи, как именно он запускается из перла.
RS>>> open(FROMK,"-|") || exec("cat /mnt/fido/CODE/db/1.txt | hpt -c
RS>>> /mnt/fido/zone2/husky/config post -af '2:467/888' -nf '.....' ... -")
RS>>> || die "error message: $!";
RS>>> close(FROMK);
PG>> Тут много странного.
PG>> У open() второй параметр "-|", что предполагает третий аргумент как
PG>> процесс, для которого stdout перенаправляется в FROMK. Но третий параметр
PG>> не передаётся, от undef. Вариант undef как третий параметр используется
для
PG>> unnamed tempfile, но это в случае "+>", а в твоём случае я не понимаю,
что
PG>> произойдёт и что имелось ввиду, поясни.
RS> тут я открываю канал без опаски перехвата интерпретатором команд моих
аргументов
RS> которые могут изменятся.
RS> тоесть потом просто читается из FROMK в родительском процессе.
Ты хочешь, чтобы, если в параметрах, которые ты подставляешь из переменных,
встретились метасимволы ("'", "$"), то они не были интерпретированны шеллом?
Открытый пайп FROMK (а на самом деле не открытый, иначе exec не выполнится) тут
не поможет.
Запускай hpt через exec() (если возврат не нужен) или через system (если
нужен), передавая не командную строку, а список аргументов без всяких
перенаправлений, тогда он будет выполнен без shell.
Текст поста ты предварительно пишешь в 1.txt? Тогда просто передавай этот 1.txt
параметром.
А если хочешь через пайп, тогда
open my $openk, "|-", "hpt post -nf '$from' ... -";
и потом в $openk пиши текст поста, без создания 1.txt. Но тогда нужно
самостоятельно проверить, чтобы в параметрах не встретились одинарные кавычки.
Ещё вариант, чтобы использовать пайп без запуска шелла - руками сделать
редирект stdout на пайп, потом запустить hpt, и потом писать в пайп.
Или использовать IPC::Open3.
В твоём случае я бы предложил не усложнять, т.е. не использовать пайп, а
запускать через system() со списком параметров, а текст брать из файла 1.txt.
RS> а как можно безопасно вызвать чтобы динамичные аргументы не подставлялись
в командах ?
RS> через system() ?
Можно через system(), можно через exec(), можно предварительно экранировать
метасимволы.
Lucky carrier,
Паша
aka gul@gul.kiev.ua
From: |
Ruslan Suleimanov 2:467/888 |
07 Oct 2022 23:28 +0300 |
To: |
Pavel Gulchouck 2:463/68 |
|
Subject: |
hpt.core
|
Привет, Pavel!
Ответ на сообщение Pavel Gulchouck (2:463/68) к Ruslan Suleimanov,
написанное 07 окт 22 в 12:19:
PG> Hi Ruslan!
PG> 06 Oct 22, Ruslan Suleimanov ==> Pavel Gulchouck:
PG>>> Покажи, как именно он запускается из перла.
RS>> open(FROMK,"-|") || exec("cat /mnt/fido/CODE/db/1.txt | hpt -c
RS>> /mnt/fido/zone2/husky/config post -af '2:467/888' -nf '.....' ... -")
RS>> || die "error message: $!";
RS>> close(FROMK);
PG> Тут много странного.
PG> У open() второй параметр "-|", что предполагает третий аргумент как
PG> процесс, для которого stdout перенаправляется в FROMK. Но третий параметр
PG> не передаётся, от undef. Вариант undef как третий параметр используется
для
PG> unnamed tempfile, но это в случае "+>", а в твоём случае я не понимаю, что
PG> произойдёт и что имелось ввиду, поясни.
тут я открываю канал без опаски перехвата интерпретатором команд моих
аргументов
которые могут изменятся.
тоесть потом просто читается из FROMK в родительском процессе.
PG> Кстати, для filehandle рекомендуют использовать обычные переменные, а не
PG> glob, т.е. "open(my $fromk, ...)" вместо устаревшего варианта "open(FROMK,
PG> ...)".
ок, спасибо, перепишу скрипт.
PG> Потом, exec() выполняется только если этот open() не был успешен. Немного
PG> странная логика, ну да ладно. Наверное, ты знаешь, что exec() заменяет
PG> текущий процесс запускаемым, т.е. возврата после успешного exec() не
PG> происходит (если нужен возврат и продолжение работы скрипта, то вместо
PG> exec() надо использовать system()).
PG> Зачем вызывать в варианте "cat 1.txt | hpt post ... -" вместо "hpt
PG> post ...
PG> 1.txt"?
а как можно безопасно вызвать чтобы динамичные аргументы не подставлялись в
командах ?
через system() ?
PG> Не исключаю, что hpt может плохо работать с пайпом на stdin - не
PG> ожидать, что данные ещё не готовы и их прочитано меньше, чем
PG> запрошено.
PG> Кроме того, передавать файл параметром эффективнее: в этом случае не
PG> нужно
PG> будет запускать дополнительный процесс cat и, скорее всего, shell.
PG> hpt, конечно, всё равно не должен падать по segfault, но для начала
PG> имеет
PG> смысл привести к более понятному виду его запуск.
ок понял, попробую через system() и профильтровать динамические аргументы,
послежу за поведением, спасибо.
WBR Ruslan Suleimanov
"Спершу ти називаэш українцiв салоїдами, а потiм тебе в полi доїдає українська
свиня. В карми все ок з iронiєю."(c) Селфiя Iгорiвна
... Наши мысли, определяют наше будущее.
From: |
Ruslan Suleimanov 2:467/888 |
07 Oct 2022 23:24 +0300 |
To: |
Pavel Gulchouck 2:463/68 |
|
Subject: |
hpt.core
|
Привет, Pavel!
Ответ на сообщение Pavel Gulchouck (2:463/68) к Ruslan Suleimanov,
написанное 07 окт 22 в 12:41:
PG> 06 Oct 22, Ruslan Suleimanov ==> Pavel Gulchouck:
PG>>> Ошибка воспроизводится или при запуске с одинаковыми параметрами
PG>>> иногда отрабатывает корректно, а иногда падает?
RS>> да, именно, иногда корректно, а иногда падает. Но сабж для hpt post
RS>> скармливается разный, и тело сообщения разное.
PG> А при повторном запуске после падения с теми же параметрами, с которыми
PG> упало, может отработать корректно?
вот єтого я незнаю, так как всегда разный текст, как проверить незнаю,
развечто выловить тот текст на котором падает и попробовать снова скормить.
WBR Ruslan Suleimanov
... Идите домой. Водки нет! Go home, no vodka!