LINUX.ORG.RU

Передача бинарных параметров скрипту на Perl


0

0

Здравствуйте !

Уже видно съехал с колес. Задача простейшая, а бьюсь вторые сутки.
Из RADIUS передаю пераметры скрипту на PERL через командную строку, а в ней несколько строчных параметров и 2 параметра двоичные фиксированной длинны (кому интересно это CHAP-PASSWORD и CHAP-CHALLENGE).Все поля разделены пробелами (и бинарные тоже).

Так вот как только встречается нулевой символ строка режется, символ \047 просто убирается из ввода, символ \012 заменяется на пробел и прочее прочее. Естественно проверить пароль могу только в 6-7 случаях из 10. а хотелось бы в 10 из 10.

Если есть идеи или приходилось решать подобную проблему, помогите.

Заранее спасибо

Юрий

anonymous

Ответ на: комментарий от majordomo

Да конечно поможет, но сначала надо получить ту строку которую потом надо передать функции unpack. Стандартные средства ($ARGV) испробованы и не помогают (например представьте себе что мне возвращает $ARGV если внутри одного из двоичных полей символ \000? Да ничего ARGV не делает, просто считает что ввод закончился :-)
Ну и конечно половину ключа передавать на обработку функции unpack, сами понимаете бесполезно :-(

Строка в @ARGV попадает в уже преобразованном виде.

Это уже пройденный этап...

Кстати... Сейчас пойду поробую получить ссылку на начало строки и перебирать последовательно в цикле.

anonymous
()
Ответ на: комментарий от anonymous

И все равно ничего не получилось.
Еще пол дня потерял :-(

Жаль что больше никто так и не откликнулся :-(

anonymous
()
Ответ на: комментарий от vilfred

Эх... все руки никак не доходят до фидо :-)
и на том большое спасибо :-)
хоть не одиноко :-)

большое спасибо всем кто старался помочь.

но проблема так и не решилась :-(

anonymous
()
Ответ на: комментарий от anonymous

А нельзя попробовать передать данные на вход программы? С радиосом не знаком, поэтому как там вызывается внешняя программы хз, но если можно, то я думаю проблема решится ;)

roy ★★★★★
()
Ответ на: комментарий от roy

В радиусе есть файл настройки в котором я указываю какие параметры передать в командной строке. Вот пример этой строки:

Exec-Program-Wait = "/usr/local/etc/raddb/scripts/exec.pl \
%C{User-Name:-0} \
%C{Password:-0} \
%C{NAS-Port-Id:-0} \
%C{NAS-IP-Address:-0} \
%C{CHAP-Password:-0} \
%C{CHAP-Challenge:-0}"

User-Name, Password и прочие - это параметры которые я передаю своему скрипту. Е.е. я могу выбирать параметры которые я передаю, но не могу влиять на способ передачи.

anonymous
()

Проблема не perl-а, а shell-а
Именно он обрабатывает командную строку.
Т.е. нужно до perl-а подготовить параметры (закодировать, потом раскодировать)
Или передавать perl-у в виде входного потока

anonymous
()
Ответ на: комментарий от anonymous

а чем stdin не стандартный способ передачи входных данных?

vasilin
()
Ответ на: комментарий от anonymous

> Проблема не perl-а, а shell-а

Для нулевого символа в параметре ком. строке проблема, я думаю, ещё глубже. Достаточно взглянуть на любую из exec*(...) :)

watashiwa_daredeska ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.