From 64059155774e2b35bbff97442e409ec5f0203256 Mon Sep 17 00:00:00 2001 From: Steven Schubiger Date: Sun, 15 Sep 2013 16:16:39 +0200 Subject: [PATCH] List remote entries --- client.pl | 19 ++++++++++++++++++- distdns.pod | 5 +++++ server.cgi | 38 +++++++++++++++++++++++--------------- 3 files changed, 46 insertions(+), 16 deletions(-) diff --git a/client.pl b/client.pl index 9992c9d..e573f9d 100755 --- a/client.pl +++ b/client.pl @@ -45,12 +45,13 @@ Usage: $0 -d, --debug server debugging -h, --help this help screen -i, --init initialize session data + -l, --list list remote entries USAGE exit; } my %opts; -GetOptions(\%opts, qw(d|debug h|help i|init)) or usage(); +GetOptions(\%opts, qw(d|debug h|help i|init l|list)) or usage(); usage() if $opts{h}; my $config = Config::Tiny->new; @@ -104,6 +105,7 @@ my %params = ( name => $name, debug => $opts{d} || false, init => $opts{i} || false, + list => $opts{l} || false, session => $session, ); @@ -122,6 +124,21 @@ if ($response->is_success) { $save_session->($session) if $opts{i}; + if ($opts{l}) { + format STDOUT_TOP = +IP Name PC Netz +============================================================================= +. + foreach my $entry (sort { $a->{netz} cmp $b->{netz} } @{$data->{entries}}) { + format STDOUT = +@<<<<<<<<<<<<<< @<<<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<< @<<<<<<<<<<<<<< +@$entry{qw(ip name pc netz)} +. + write; + } + exit; + } + my %list; foreach my $entry (@{$data->{entries}}) { my $host = "$entry->{ip}\t" . join '.', @$entry{qw(name pc netz)}; diff --git a/distdns.pod b/distdns.pod index 920deb4..eaec8fe 100644 --- a/distdns.pod +++ b/distdns.pod @@ -24,6 +24,7 @@ machines. -d, --debug server debugging -h, --help this help screen -i, --init initialize session data + -l, --list list remote entries =over 4 @@ -39,6 +40,10 @@ Show usage screen. Initialize session data prior to using client/server script regularly. +=item * C<-l, --list> + +List remote JSON entries. + =back =head1 AUTHORS diff --git a/server.cgi b/server.cgi index 67b522e..77e979b 100755 --- a/server.cgi +++ b/server.cgi @@ -34,7 +34,7 @@ my $conf_file = catfile($Bin, 'server.conf'); my $query = CGI->new; -my @params = qw(netz pc name debug init session); +my @params = qw(netz pc name debug init list session); my %params; foreach my $param (@params) { @@ -115,26 +115,34 @@ if (exists $access{$params{name}} && grep /^$params{pc}$/i, @{$access{$params{na my $data = defined $json && length $json ? decode_json($json) : []; - for (my $i = 0; $i < @$data; $i++) { - if ($params{netz} eq $data->[$i]->{netz} - && $params{pc} eq $data->[$i]->{pc} - && $params{name} eq $data->[$i]->{name}) { - splice @$data, $i--, 1; - } + if ($params{list}) { + close($fh); + + print $query->header('application/json'); + print encode_json({ entries => $data, error => undef }); } - push @$data, { map { $_ => $params{$_} } qw(netz pc name ip) }; + else { + for (my $i = 0; $i < @$data; $i++) { + if ($params{netz} eq $data->[$i]->{netz} + && $params{pc} eq $data->[$i]->{pc} + && $params{name} eq $data->[$i]->{name}) { + splice @$data, $i--, 1; + } + } + push @$data, { map { $_ => $params{$_} } qw(netz pc name ip) }; - seek($fh, 0, 0) or die "Cannot seek to start of $json_file: $!\n"; - truncate($fh, 0) or die "Cannot truncate $json_file: $!\n"; + seek($fh, 0, 0) or die "Cannot seek to start of $json_file: $!\n"; + truncate($fh, 0) or die "Cannot truncate $json_file: $!\n"; - print {$fh} encode_json($data); + print {$fh} encode_json($data); - close($fh); + close($fh); - my @data = grep $_->{netz} eq $params{netz}, @$data; + my @data = grep $_->{netz} eq $params{netz}, @$data; - print $query->header('application/json'); - print encode_json({ entries => \@data, error => undef }); + print $query->header('application/json'); + print encode_json({ entries => \@data, error => undef }); + } } else { die "Access not permitted\n"; -- 2.39.2