Thanks for that Claudiu - I'll have to see what I can do :)<br><br>Handling the sighup would be a big deal. I am adding my NAS via a php script so I can easily ask it to give the server a kick once i've added a NAS.
<br><br>It may be that I can live with an hourly cron job - will have to see. In theory there could be a lot of NAS deviced being added...<br><br>Paul.<br><br><div><span class="gmail_quote">On 7/31/07, <b class="gmail_sendername">
Claudiu Filip</b> <<a href="mailto:claudiu@globtel.ro">claudiu@globtel.ro</a>> wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Hi Santiago,<br><br><br>Tuesday, July 31, 2007, 11:21:36 AM, you wrote:<br>> I have one question to this, you suposed that RADIUS and DataBase<br>> services are in the same machine, what happens if these services are
<br>> in severa or there are replicate servers?<br><br>Most probably you will have the radius and the database on separate<br>machines. If you have replication or if you have many updates (a farm of<br>dyndns radius clients) or if you dont want to HUP the server too
<br>often, you will have to create a simple program to just NOTIFY another<br>application responsible with HUPing the freeradius.<br><br>Example from a fantasy world:<br>== database trigger ============<br><br>CREATE OR REPLACE FUNCTION restart_radiusd() RETURNS TRIGGER AS $rr_rad$
<br>  use IO::Socket;<br>  my($sock, $SERVER_IP, $SERVER_PORT);<br>  $SERVER_IP = '<a href="http://1.2.3.4">1.2.3.4</a>';<br>  $SERVER_PORT  = 1818;<br>  $sock = IO::Socket::INET->new(Proto     => 'udp',
<br>                              PeerPort  => $SERVER_PORT,<br>                              PeerAddr  => $SERVER_IP);<br>  $sock->send("please restart");<br>  return;<br>$rr_rad$ LANGUAGE plperlu;<br>
<br>===============================<br><br>This trigger will send an udp packet to <a href="http://1.2.3.4:1818">1.2.3.4:1818</a> with the text<br>"please restart". On the <a href="http://1.2.3.4">1.2.3.4</a> end, we'll have a little gipsy opening
<br>the door every min_restart_interval seconds to check for stickies..<br>He's very sensitive and we must be polite to him.<br><br>== freeradius machine =========<br>#!/usr/bin/perl<br>use IO::Socket;<br>my ($server, $request, $server_port, $min_restart_interval, $need_to_restart, $msg_max_length, $message);
<br><br>$min_restart_interval = 300; #seconds<br>$server_port          = 1818;<br>$need_to_restart      = 0;<br>$msg_max_length       = 1024;<br><br>$server = IO::Socket::INET->new(LocalPort => $server_port, Proto     => "udp")
<br>    or die "Couldn't bind udp server on port $server_port : $@\n";<br><br>$SIG{ALRM} = sub {<br>           if ($need_to_restart == 1) {<br>              system("/usr/bin/sudo /usr/bin/killall -HUP radiusd");
<br>              $need_to_restart = 0;<br>           }<br>           alarm $min_restart_interval;<br>};<br>alarm $min_restart_interval;<br>while (1) {<br>        $request = $server->recv($message, $msg_max_length);<br>
        $need_to_restart = 1 if ($message =~ /please/);<br>}<br>===============================<br><br>In the real world, you also have many other ways, like using ssh, RPC<br>- rsh... If you are paranoic about opening a port, i guess you can
<br>also make freeradius to shoot itself in the leg by using rlm_exec and<br>%{Client-IP-Address}.<br><br><br>Best regards,<br><br>Claudiu Filip<br>@: <a href="mailto:claudiu@globtel.ro">claudiu@globtel.ro</a><br><a href="Http://www.globtel.ro">
Http://www.globtel.ro</a><br>T:+40344880100<br>F:+40344880113<br><br><br>>>My advice is to create a database trigger on INSERTs, UPDATEs,<br>>>DELETEs.<br>>>For example, my postgresql trigger written in plperlu:
<br>>><br>>>CREATE OR REPLACE FUNCTION restart_radiusd() RETURNS TRIGGER AS $rr_rad$<br>>> system("/usr/bin/sudo /usr/bin/killall -HUP radiusd");<br>>> return;<br>>>$rr_rad$ LANGUAGE plperlu;
<br>>>DROP TRIGGER IF EXISTS need_to_restart_radiusd ON nas_table;<br>>>CREATE TRIGGER need_to_restart_radiusd AFTER INSERT OR UPDATE OR DELETE ON nas_table<br>>>FOR EACH STATEMENT EXECUTE PROCEDURE  restart_radiusd();
<br><br><br><br>-<br>List info/subscribe/unsubscribe? See <a href="http://www.freeradius.org/list/users.html">http://www.freeradius.org/list/users.html</a><br></blockquote></div><br>