#!/usr/bin/perl # TODO # - hash domaine->[sous domaines] # - parsage du html renvoyé par lautre3 -> messages d'erreur # - intégration ez-ipupdate # - doc # DONE # - locales # - amélioration système de log # - séparation config/script use strict; use Fcntl ':flock'; use HTTP::Request::Common qw(POST); use LWP::UserAgent; use HTTP::Cookies; # Constantes my $configfile = '/etc/lautre3dyndns.conf'; my $logfile = '/var/log/lautre3dyndns.log'; my $ifconfig = 'LC_ALL="C" /sbin/ifconfig'; # Initialisation log (fichier ou stderr) my $log_fh; (open(LOG, ">> $logfile") and flock(LOG, LOCK_EX) and $log_fh = *LOG ) or (print STDERR "unable to open file \"$logfile\" : $!\n" and $log_fh = *STDERR ); print $log_fh "\n". scalar(localtime) ."\n"; # Chargement config { package config; do $configfile or (print $log_fh "unable to open config file \"$configfile\" : $!\n" and die) or die; # (devrait jamais arriver) } # Récupération ip my $ip; open(IFCONFIG, "$ifconfig $config::netinterface |"); while () { if (m/inet addr:(\d+\.\d+\.\d+\.\d+)/) { $ip = $1; last; } } close(IFCONFIG); print $log_fh "ip : $ip\n"; # Préparation useragent my $ua = LWP::UserAgent->new(); my $cookies = HTTP::Cookies->new(); $ua->cookie_jar($cookies); my ($req, $resp); # Identification lautre3 (cookie) $req = POST 'http://lautre3.lautre.net/admin/login.php', [username => $config::login, password => $config::password ]; $resp = $ua->request($req); $cookies->extract_cookies($resp); print $log_fh "login : " . $resp->code . "\n"; # Enregistrement ip $req = POST 'http://lautre3.lautre.net/admin/dom_subdoedit.php', [dom => $config::dom, sub => $config::sub, action => "edit", type => "2", # IP redirection sub_ip => $ip]; $resp = $ua->request($req); print $log_fh "subdoedit : " . $resp->code . "\n"; # Fermeture log close($log_fh) unless $log_fh eq *STDERR;