Re: Perl scripts
Theo Schlossnagle <[email protected]> Mon, 26 Jun 2006 18:58:33 +0100
| Newsgroups | gmane.comp.apache.mod-wackamole.general |
|---|---|
| Message-ID | <[email protected]> |
On Jun 26, 2006, at 5:34 PM, Ian Eiloart wrote:
> OK, so here's a slightly useful example script, which logs
> interfaces as they come up. It also shows how to extract the IP
> addresses that just came up. For example, in future I'll use that
> data to bring up an Exim smtp server listening on that IP address.
>
> NB: The brick wall I was banging my head against today was the use
> of null terminated strings in the hash keys!
Ouch... that can only be considered a bug. Is that broken in CVS?
> My wackamole.conf file holds this segment:
> ------------------------------------------
>
> # Named socket for online control
> Control = /var/run/wack.it
> PerlUseLib /opt/local/etc/
> PerlUse wackamole
> RunDynamic wackamole::onup on up
>
> And, here's the content of wackamole.pm:
> ----------------------------------------
>
> package wackamole;
>
> use strict;
> use Sys::Syslog;
> use Data::Dumper;
>
> sub logaddressup {
> sleep 2;
> my ($ipadd) = @_;
> # let's also open a syslog facility
> openlog('wackamole.pm', 'ndelay pid', 'daemon');
>
> # this is how we address an element of the hash
> # keys we could use are (all null terminated!):
> # "ifname\0" eg: en0
> # "broadcast\0" eg: "192.168.0.1"
> # "netmask\0" eg: 255.255.255.255
> # "ip\0" eg "192.168.0.1"
> my $address = $ipadd->{ "ip\0" };
> my $if = $ipadd->{"ifname\0"};
> my $string = 'IP address '.$address.' acquired on '.$if.' ';
>
> # make a syslog notice
> syslog('notice','%s',$string);
>
> closelog();
> }
>
> sub onup {
> # we're being passed:
> # 1. a hash reference describing what just came up
> # 2. an array of hash references - the rest of the VIF
> # 3. a hash reference with the real interface that was affected
> # we'll just put them all into separate variables
> my ($ipadd, $vifs, $extern) = @_;
> #open (NFAM, '> /opt/local/etc/klop');
> #print NFAM Dumper(\@_);
> logaddressup($ipadd);
> # report each additional ip address (NB $vifs is a reference)
> foreach my $ipaddss (@{$vifs}){
> logaddressup($ipaddss);
> }
> #close NFAM;
>
> }
> # return a true value, otherwise wackamole doesn't start
> 1;
>
>
>
>
> --
> Ian Eiloart
> IT Services, University of Sussex
>
> _______________________________________________
> wackamole-users mailing list
> [email protected]
> http://lists.backhand.org/mailman/listinfo/wackamole-users
// Theo Schlossnagle
// CTO -- http://www.omniti.com/~jesus/
// OmniTI Computer Consulting, Inc. -- http://www.omniti.com/
// Ecelerity: Run with it.