The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Вызов system() в Perl"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы OpenNET: Виртуальная конференция (Public)
Изначальное сообщение [Проследить за развитием треда]

"Вызов system() в Perl"  
Сообщение от Amigo email(??) on 29-Дек-06, 00:58 
Доброе время суток, Аll!

Ситуация следующая:
Есть скрипт запуска pptp, pptp-command, наверное его все знают!
В виду того, что у меня на маршрутизаторе 2 соединения pptp решил я его немного подредактировать, потому как для нескольких соединений он адаптирован частично.
Почему разработчики не предусмотрели что может быть не одно и не 2 а несколько Pptp соединений я незнаю.
Вообщем исходный код:
====== сut=======
это из самого начала файла!!!
#######                                                              
# Data                                                                
#                                                                    
# the regexp for the list of characters that are unsafe              
# to put inside a system() or ``                                      
# it is built by saying everything but known safe characters          
# anyone want to make bets on if this holds true for i18n'ed systems?
my $safe_set  = '-A-Za-z0-9\s\._\/:';                                
my $unsafe_re = "[^$safe_set]";                                      
my $safe_re   = "[$safe_set]*";                                      

sub stop() {                                              
        Rotate $resolv, $resolv_real, $resolv_pptp;        
        print "Sending HUP signal to PPTP processes...\n";
        `killall -HUP /usr/sbin/pptp`;                    

========сut ====== Это из оригинального файла
Хочеться чтобы было вот так:
sub stop() {                                                                    
        Rotate $resolv, $resolv_real, $resolv_pptp;                            
        open(RUN, "<$run_dir/ppp253.pid") or die "couldn't open $run_dir/ppp253.pid: $!";
                my @run = <RUN>;                                                
        close RUN;                                                              
        my ($pid) = @run;                                                      
#        if $pid !~ /^($safe_re)$/o {                                            
#        $pid = $1; };                                                          
#$pid =~ /$unsafe_re/o;                                                        
#print $pid;                                                                    
#my $pid = `kill -HUP | cat $run_dir/ppp253.pid`;                              
chomp $pid;                                                                    
system("kill", "-HUP", "$pid =~ /$unsafe_re/o");
==============
Вообще я хочу прочитать из файла pid процесса и грохнуть!
пробовал уже по всякому - в итоге получаю

Insecure dependency in system while running with -T switch at ./pptp-command253
line 842.                                                                      

В начало файла вставил
# $ENV{'PATH'} = '/bin:/usr/bin:/usr/local/bin';
непомогает!

Что нужно сделать подскажите - устал уже - в перле не силен!
Спасибо!


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "Вызов system() в Perl"  
Сообщение от Skif (ok) on 29-Дек-06, 03:05 

>system("kill", "-HUP", "$pid =~ /$unsafe_re/o");

что мешает проделать


$pid =~ /$unsafe_re/o;
system "kill -HUP $pid";
Не хочу отправлять вас в perldoc -f system, но $pid стоит обработать до вызова system и по соображениям безопасноти и по логичности чтения вывода. Все же первый аргемент команда, остальные аргументы к этой самой команде, извините за тавтологию, и про никакие квантификаторы и иже с ними банальный шел не знает.
system есть не что иное как fork + waitpid. отсюда и пляшите.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Вызов system() в Perl"  
Сообщение от Amigo email(??) on 30-Дек-06, 11:42 
>
>>system("kill", "-HUP", "$pid =~ /$unsafe_re/o");
>
>что мешает проделать
>
>
>$pid =~ /$unsafe_re/o;
>system "kill -HUP $pid";
>Не хочу отправлять вас в perldoc -f system, но $pid стоит обработать
>до вызова system и по соображениям безопасноти и по логичности чтения
>вывода. Все же первый аргемент команда, остальные аргументы к этой самой
>команде, извините за тавтологию, и про никакие квантификаторы и иже с
>ними банальный шел не знает.
>system есть не что иное как fork + waitpid. отсюда и пляшите.
>


Большушее вам Спасибо! Скиф, но у меня почему-то все оставлось по прежнему!
темболее я делал такую проверку уже! не мне всеравно выдает

Insecure dependency in system while running with -T switch at ./pptp-command253
line 843.                                                                      

Поэтому то я и спрашиваю в чем может быть дело!
Спасбо еще раз!

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Вызов system() в Perl"  
Сообщение от Skif (ok) on 31-Дек-06, 04:10 
>Большушее вам Спасибо! Скиф, но у меня почему-то все оставлось по прежнему!
>
>темболее я делал такую проверку уже! не мне всеравно выдает
>
>Insecure dependency in system while running with -T switch at ./pptp-command253
>line 843.

Цитирую:
---------------
Попытка сделать что-то, непонравившееся механизму меченных данных. Этот механизм включается, когда выполняется setuid или setgid, либо задан -T для явного его включения. Он помечает все данные явно или косвенно полученные от пользователя, которые считаются недостояными доверия. Если такие данные используются в "опасной" операции, то генерируется сообщение об этой ошибке.
---------------
"Программирование на Perl", Лари Уолл, стр. 1011
system как раз и неявляется секурной.
Отсюда, с какими ключами и опциями пускается скрипт (#!/usr/bin/perl _чего_тут_написано_ + use _чего_пользуем_)
Цитирую:
---------------
-T  Включает проверки "меченых" данных("taint" checks), которые становиться возможным использовать. Обычно эти проверки  осуществляются только при установленых setuid или setgid. Неплохо  явно включить их для программ, выполняемых от другого имени, таких как CGI.
Обратите внимание, что по соображениям безопасности Perl должен увиденть этот параметр как можно раньшеl; обычно это значит, что он должен стоят в начале командной строки  или строки #!.
---------------
Там же, стр. 552
Ну с этим разобрались.

>
>Поэтому то я и спрашиваю в чем может быть дело!
>Спасбо еще раз!


Если строка 843 это и есть вызов system, то отсюда выход проверить $pid + явно указать расположение kill:
$pid =~ /$unsafe_re/o;
warn $pid;
system "kill -HUP $pid";
warn "kill -HUP $pid";

или

$pid =~ /$unsafe_re/o;
warn $pid;
system "/bin/kill -HUP $pid";
warn "/bin/kill -HUP $pid";

Ну и в заключение, а что мешает использовать встроенную функцию kill? Философия или религия?
root@fbsd2.home /usr/home/skif :perldoc -f kill
       kill SIGNAL, LIST
               Sends a signal to a list of processes.  Returns the number of
               processes successfully signaled (which is not necessarily the
               same as the number actually killed).

                   $cnt = kill 1, $child1, $child2;
                   kill 9, @goners;

               If SIGNAL is zero, no signal is sent to the process.  This is a
               useful way to check that a child process is alive and hasn't
               changed its UID.  See perlport for notes on the portability of
               this construct.

               Unlike in the shell, if SIGNAL is negative, it kills process
               groups instead of processes.  (On System V, a negative PROCESS
               number will also kill process groups, but that's not portable.)
               That means you usually want to use positive not negative sig-
               nals.  You may also use a signal name in quotes.

               See "Signals" in perlipc for more details.
root@fbsd2.home /usr/home/skif :kill -l
HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM URG STOP
TSTP CONT CHLD TTIN TTOU IO XCPU XFSZ VTALRM PROF WINCH INFO USR1 USR2

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Спонсоры:
Слёрм
Inferno Solutions
Hosting by Ihor
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2019 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру