diff --git a/app/zone/edit.pm b/app/zone/edit.pm index 434a4ab..dd20c91 100644 --- a/app/zone/edit.pm +++ b/app/zone/edit.pm @@ -77,6 +77,7 @@ sub update { sub update_raw { my ($self, $zonetext) = @_; + my $zonefile; my $file = '/tmp/'.$self->zname; # write the updated zone file to disk @@ -85,10 +86,17 @@ sub update_raw { print $newzone $zonetext; close $newzone; - my $zonefile = DNS::ZoneParse->new($file, $self->zname); + eval { $zonefile = DNS::ZoneParse->new($file, $self->zname); }; + + if( $@ ) { + unlink($file); + 0; + } + unlink($file); $self->update($zonefile); + 1; } # sera utile plus tard, pour l'interface diff --git a/www/lib/DNSManager.pm b/www/lib/DNSManager.pm index c0f61cf..fef11e9 100644 --- a/www/lib/DNSManager.pm +++ b/www/lib/DNSManager.pm @@ -136,14 +136,14 @@ prefix '/domain' => sub { my ($auth_ok, $user, $isadmin) = $app->auth(param('login'), param('password') ); - $app->update_domain_raw(session('login') + my $success = $app->update_domain_raw(session('login') , param('zoneupdated') , param('domain')); redirect '/domain/details/' . param('domain'); - } + } - }; + }; any ['post', 'get'] => '/update/:domain' => sub { unless( session('login') && param('domain') ) @@ -152,75 +152,87 @@ prefix '/domain' => sub { } else { - my $type = param('type'); - my $name = param('name'); - my $value = param('value'); - my $ttl = param('ttl'); + my $type = param('type'); + my $name = param('name'); + my $value = param('value'); + my $ttl = param('ttl'); + my $priority = param('priority'); - my $app = initco(); - my ($auth_ok, $user, $isadmin) = $app->auth(param('login'), - param('password') ); - my $zone = $app->get_domain( session('login') , param('domain') ); - given( $type ) - { + my $app = initco(); + my ($auth_ok, $user, $isadmin) = $app->auth(param('login'), + param('password') ); + my $zone = $app->get_domain( session('login') , param('domain') ); + given( $type ) + { - when ('A') { my $a=$zone->a(); - push( @$a, {name => $name, - class => "IN", - host => $value, - ttl => $ttl, - ORIGIN => $zone->origin} ); - } + when ('A') { + my $a = $zone->a(); + push( @$a, {name => $name + , class => "IN" + , host => $value + , ttl => $ttl + , ORIGIN => $zone->origin} ); + } - when ('AAAA') { my $aaaa=$zone->aaaa; - push(@$aaaa, {name => $name, - class => "IN", - host => $value, - ttl => $ttl, - ORIGIN => $zone->origin} ); - } + when ('AAAA') { + my $aaaa = $zone->aaaa; + push(@$aaaa, {name => $name + , class => "IN" + , host => $value + , ttl => $ttl + , ORIGIN => $zone->origin} ); + } - when ('CNAME') { my $cname=$zone->cname; - push(@$cname, - {name => $name, - class => "IN", - host => $value, - ttl => $ttl, - ORIGIN => $zone->origin} ); - } + when ('CNAME') { + my $cname = $zone->cname; + push(@$cname, + {name => $name + , class => "IN" + , host => $value + , ttl => $ttl + , ORIGIN => $zone->origin} ); + } - when ('MX') { my $ptr=$zone->ptr; - push(@$ptr, {name => $name, - class => "IN", - host => $value, - ttl => $ttl, - ORIGIN => $zone->origin} ); - } + when ('MX') { + my $mx = $zone->mx; + push(@$mx, { name => $name + , class => "IN" + , host => $value + , priority => $priority + , ttl => $ttl + , ORIGIN => $zone->origin} ); + } - when ('PTR') { my $ptr=$zone->ptr; - push(@$ptr, {name => $name, - class => "IN", - host => $value, - ttl => $ttl, - ORIGIN => $zone->origin} ); - } + when ('PTR') { + my $ptr = $zone->ptr; + push(@$ptr, {name => $name + , class => "IN" + , host => $value + , ttl => $ttl + , ORIGIN => $zone->origin} ); + } - when ('NS') { my $ns=$zone->ns; - push(@$ns, {name => $name, - class => "IN", - host => $value, - ttl => $ttl, - ORIGIN => $zone->origin} ); - } + when ('NS') { + my $ns = $zone->ns; + push(@$ns, {name => $name + , class => "IN" + , host => $value + , ttl => $ttl + , ORIGIN => $zone->origin} ); + } - } - $zone->new_serial(); - my $cfg = new Config::Simple(dirname(__FILE__).'/../conf/config.ini'); - my $ed = app::zone::edit->new(zdir=>$cfg->param('zones_path'), zname => param('domain')); - $ed->update($zone); - redirect '/domain/details/'.param('domain'); - } - }; + } + + $zone->new_serial(); + my $cfg = new Config::Simple(dirname(__FILE__).'/../conf/config.ini'); + my $ed = app::zone::edit->new(zdir=>$cfg->param('zones_path') + , zname => param('domain')); + + $ed->update($zone); + redirect '/domain/details/'.param('domain'); + + } + }; get '/details/:domain' => sub { diff --git a/www/views/details.tt b/www/views/details.tt index 72c7a7f..7545714 100644 --- a/www/views/details.tt +++ b/www/views/details.tt @@ -87,25 +87,65 @@ -

- Ajouter un enregistrement :
-
+
+ - - +
+ Ajout d'un enregistrement + +
+ +
+ +
+
+ +
+ +
+ + +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+
+ +
+
+ +
+
+ +
- - - - <% END %>