Wrzucalem to to kiedys na grupe. Ostrzezenia generujesz np.. Modulem cutoff z lmsd. Potem tworzysz skrypcik o tej tresci:
#!/bin/bash /usr/local/sbin/iptables -t nat -D WARNING -p tcp -s $1 -j REDIRECT --to-port 80
Nadajesz mu praw 700 i userowi, na którym chodzi apache pozwalasz przez sudo na odpalanie go.
W daemonie tworzysz sobie instancje warn (korzystasz z modulu parser):
{if (fileexists("/etc/lms/scripts/warn.daemon")) deletefile("/etc/lms/scripts/warn.daemon"); /if;}
{result = SELECT inet_ntoa( nodes.ipaddr ) as ip, nodes.name, nodes.warning FROM nodes, networks WHERE networks.address = ( nodes.ipaddr & inet_aton( networks.mask ) ) AND (networks.name = "<<NAZWA SIECI>>")}
{if (number(result)) for (i=0; i<number(result); i++) if (number(result[i].warning)) }/usr/local/sbin/iptables -t nat -A WARNING -s {result[i].ip} -p tcp -j REDIRECT --to-port 80\n{ /if; /for; /if}\n
/usr/local/sbin/iptables -t nat -A WARNING -j RETURN\n
Na koniec modyfikujesz winietke ta z lms-squid (dokladniej message.html podmieniasz linijke do klikania oznaczajacego przeczytanie):
<a href="http://<url>/index.php?readed=1&oldurl={$layout.moveurl}">{t}Click here to mark this message as readed.{/t}</a>
A index.php od linijki z SMARTY ma wygladac tak:
$SMARTY->>assign_by_ref('layout', $layout);
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { $forwarded_ip = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']); $nodeip = $forwarded_ip['0']; $nodeid = $LMS->GetNodeIDByIP($forwarded_ip['0']); } else { $nodeip = str_replace('::ffff:', '', $_SERVER['REMOTE_ADDR']); $nodeid = $LMS->GetNodeIDByIP($nodeip); }
$customerid = $LMS->>GetNodeOwner($nodeid); $nodeinfo = $LMS->>GetNode($nodeid);
$layout['ip'] = "sudo /etc/lms/warn $nodeip"; if (isset($_GET['readed'])) { $DB->Execute('UPDATE nodes SET warning = 0 WHERE id = ?', array($nodeid)); shell_exec("sudo /etc/lms/warn $nodeip"); header('Location: http://%27.$_GET%5B%27oldurl']); } else { $customerinfo = $LMS->GetCustomer($customerid); //$layout['oldurl'] = $_GET['oldurl']; $layout['moveurl'] = $_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"]; $SMARTY->assign('customerinfo', $customerinfo); $SMARTY->assign('nodeinfo', $nodeinfo); $SMARTY->assign('layout', $layout); $SMARTY->display('message.html'); }
Oczywiście sprawdz, czy Tobie będą się zgadzac porty (u mnie router osiedlowy nie robi w zasadzie nic poza shapingiem, routowaniem wyjscia i pory pocztowym, wiec moglem sobie to na porcie 80 to postawic)
chcialem aby to zadzialalo ale jakos nie bardzo to mi chce dzialac, jedynie gdy dam na prerouting to rusza ale jak kasowac odrazu wpisy? przy tablicy WARNING np mozna by grepowac i odrazu przy klikaniu usuwac ta linijke. taki przynajmniej mam koncept.