|
|
ru.unix.bsd- RU.UNIX.BSD ------------------------------------------------------------------ From : Alexey Zakrevskiy 2:5031/47.22 05 Aug 2002 21:28:47 To : Dmitry Shishkin Subject : Re: засада с apache -------------------------------------------------------------------------------- > пpедыстоpия: сеть соединена с инетом по коммyтиpyемомy соединению. надо > написать cgi, чтобы чеpез веб любая тyпая телка могла зайти на нyжнyю стpаницy > с двyма кнопками "отсоединиться" и "подключится", и сделать все, что надо. но > вот сабж: апач запyскается от nobody:nobody, а pppd yпpавляется только от > pyта, что делает невозможной сию схемy... как быть? запyскать httpd от pyта > довольно pискованно, хотя можно, есть еще пpедложения? и, если можно, > ваpиантик пpимеpного cgi на любом языке, на пеpле напpимеp:) Я когда-то писал подобную фигню и делал это примерно так: поставил sudo сказал ему www ALL = NOPASSWD: /etc/ppp/scripts/*.sh чтобы апач мог пущать без пароля волосатые скрипты из которых нужны всего-то: dial.sh, redial.sh, reset,sh & disconnect.sh dial это: ppp -ddial -nat ${PROVIDER} && touch ${FLGDIR}/dial redial: pppctl ${SOCKET} down disconnect: pppctl ${SOCKET} quit all reset: pppctl ${SOCKET} quit all; killall -9 ppp; rm ${SOCKET} и скрипт на php состоящий из 2 частей: if (isset($HTTP_POST_VARS['provider'])){ $prov = $HTTP_POST_VARS['provider']; }else{ $prov = 'an'; } if (isset($HTTP_POST_VARS['action'])){ switch ($HTTP_POST_VARS['action']){ case 'disconnect': if (file_exists("$flgpath/inet")){ exec("/usr/local/bin/sudo /etc/ppp/scripts/disconnect.sh 2>&1 >/dev/null"); } break; case 'redial': if (file_exists("$flgpath/dial")){ exec("/usr/local/bin/sudo /etc/ppp/scripts/redial.sh 2>&1 >/dev/null"); } break; case 'dial': if (!file_exists("$flgpath/dial")){ exec("/usr/local/bin/sudo /etc/ppp/scripts/dial.sh $prov 2>&1 >/dev/null"); } break; default: exec("/usr/local/bin/sudo /etc/ppp/scripts/reset.sh 2>&1 >/dev/null"); } } эта часть обрабатывала запросы, из формы и генерилка формы: if (file_exists("$flgpath/inet")){ $arr = file("$flgpath/inet"); printf("<tr><td class='left'>IP адрес:</td><td class='right'>%s</td></tr>", $arr[0]); printf("<tr><td class='left'>Время захода:</td><tdclass='right'>%s</td></tr>", $arr[0]); $action = 'disconnect'; $link = 'up'; $status = 'up'; } elseif (file_exists("$flgpath/dial")){ $action = 'redial'; $link = 'down'; $status = 'dialing'; } else { $action = 'dial'; $link = 'down'; $status = 'down'; }; printf("<tr><td class='left'>Текущее состояние:</td><td class='right'>%s</td></tr>", $status); print "<tr><td class='left'>Возможные действия:</td><form action='' method='post'><td class='right'>"; if ($action == 'dial'){ print "<select name='provider'>"; print "<option value='adm'>провайдер1</option>"; print "<option value='an'>провайдер2</option>"; print "</select>"; } printf("<input type='submit' name='action' value='%s'>", $action); print "<input type='submit' name='action' value='reset'></td></tr><form>"; вобсчем скрипт генерит форму для пуцания и обрабатывает запросы от неё же смотрит чё пришло, тот скрипт и пущает P.S. все примеры кода я набивал по памяти и кусок выдрал из php (работають они на сервере в офисе) на самом деле эти скрипты ещё рулят прокси/файрволом/статистикой/автозакачкой/почтой... Ежели народ потребует напищу более подробно с примерами, хотя имхо основная мысля ясна, а далее можно такую изгородь сделать что о-го-го... --- tin/1.5.11-20020130 ("Toxicity") (UNIX) (FreeBSD/4.6-STABLE (i386)) * Origin: Glukodrom research. Murmansk. Russia (2:5031/47.22@fidonet) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.unix.bsd/160390c52d90b.html, оценка из 5, голосов 10
|