summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Steven Schubiger <stsc@refcnt.org>2013-09-15 16:16:39 +0200
committerGravatar Steven Schubiger <stsc@refcnt.org>2013-09-15 16:16:39 +0200
commit64059155774e2b35bbff97442e409ec5f0203256 (patch)
treee714d41b8c409cb841bbe6c5f9288829cbc58266
parent577cd6cddb2b1d6bfa21d682308fde6493d9dab6 (diff)
downloaddistdns-64059155774e2b35bbff97442e409ec5f0203256.tar.gz
distdns-64059155774e2b35bbff97442e409ec5f0203256.tar.bz2
List remote entries
-rwxr-xr-xclient.pl19
-rw-r--r--distdns.pod5
-rwxr-xr-xserver.cgi38
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";