summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Steven Schubiger <stsc@refcnt.org> 2013-09-19 21:00:29 +0200
committerGravatar Steven Schubiger <stsc@refcnt.org> 2013-09-19 21:00:29 +0200
commit3f79b3088e5eaa6185822f26c21a3b5e8548e60e (patch)
tree1992bbf92df82b1cf1ac95b9742fc67c5b80938a
parentb29a7dbc8fcef7ffb5ecb50f84b99d38d4c14b8b (diff)
downloaddistdns-3f79b3088e5eaa6185822f26c21a3b5e8548e60e.tar.gz
distdns-3f79b3088e5eaa6185822f26c21a3b5e8548e60e.tar.bz2
Make switches mutually exclusive
-rwxr-xr-xclient.pl64
-rwxr-xr-xserver.cgi4
2 files changed, 38 insertions, 30 deletions
diff --git a/client.pl b/client.pl
index 0563c5c..aab5ea4 100755
--- a/client.pl
+++ b/client.pl
@@ -40,8 +40,9 @@ sub _die { die "$0: [client] $_[0]" }
sub usage
{
+ warn "$_[0]\n" if defined $_[0];
print <<"USAGE";
-Usage: $0
+Usage: $0 [options]
-d, --debug server debugging
-h, --help this help screen
-i, --init initialize session data
@@ -54,6 +55,8 @@ my %opts;
GetOptions(\%opts, qw(d|debug h|help i|init l|list)) or usage();
usage() if $opts{h};
+usage('Cannot combine --init and --list') if $opts{i} && $opts{l};
+
my $config = Config::Tiny->new;
$config = Config::Tiny->read($conf_file);
@@ -122,9 +125,10 @@ if ($response->is_success) {
die "$0: [server] $data->{error}" if defined $data->{error};
- $save_session->($session) if $opts{i};
-
- if ($opts{l}) {
+ if ($opts{i}) {
+ $save_session->($session);
+ }
+ elsif ($opts{l}) {
format STDOUT_TOP =
IP Name PC Netz
=============================================================================
@@ -136,37 +140,37 @@ IP Name PC Netz
.
write;
}
- exit;
- }
-
- my %list;
- foreach my $entry (@{$data->{entries}}) {
- my $host = "$entry->{ip}\t" . join '.', @$entry{qw(name pc netz)};
- push @{$list{$entry->{netz}}}, $host;
}
+ else {
+ my %list;
+ foreach my $entry (@{$data->{entries}}) {
+ my $host = "$entry->{ip}\t" . join '.', @$entry{qw(name pc netz)};
+ push @{$list{$entry->{netz}}}, $host;
+ }
- my $o = tie my @hosts, 'Tie::File', $hosts_file or _die "Cannot tie $hosts_file: $!\n";
- $o->flock(LOCK_EX);
-
- foreach my $network (keys %list) {
- my %indexes;
- for (my $i = 0; $i < @hosts; $i++) {
- if ($hosts[$i] =~ /^\#$network\#$/i) {
- $indexes{start} = $i;
- }
- elsif (exists $indexes{start} && $hosts[$i] =~ /^\#\/$network\#$/i) {
- $indexes{end} = $i;
- my $count = ($indexes{end} - $indexes{start} > 1)
- ? $indexes{end} - $indexes{start} - 1
- : 0;
- splice @hosts, $indexes{start} + 1, $count, @{$list{$network}};
- last;
+ my $o = tie my @hosts, 'Tie::File', $hosts_file or _die "Cannot tie $hosts_file: $!\n";
+ $o->flock(LOCK_EX);
+
+ foreach my $network (keys %list) {
+ my %indexes;
+ for (my $i = 0; $i < @hosts; $i++) {
+ if ($hosts[$i] =~ /^\#$network\#$/i) {
+ $indexes{start} = $i;
+ }
+ elsif (exists $indexes{start} && $hosts[$i] =~ /^\#\/$network\#$/i) {
+ $indexes{end} = $i;
+ my $count = ($indexes{end} - $indexes{start} > 1)
+ ? $indexes{end} - $indexes{start} - 1
+ : 0;
+ splice @hosts, $indexes{start} + 1, $count, @{$list{$network}};
+ last;
+ }
}
}
- }
- undef $o;
- untie @hosts;
+ undef $o;
+ untie @hosts;
+ }
}
else {
warn $response->status_line, "\n";
diff --git a/server.cgi b/server.cgi
index f9f8579..43bf0bd 100755
--- a/server.cgi
+++ b/server.cgi
@@ -81,6 +81,10 @@ if ($params{init}) {
open(my $fh, '>', $session_file) or die "Cannot open $session_file for writing: $!\n";
print {$fh} "$params{session}\n";
close($fh);
+
+ print $query->header('application/json');
+ print encode_json({ entries => [], error => undef });
+ exit;
}
else {
open(my $fh, '<', $session_file) or die "Cannot open $session_file for reading: $!\nPerhaps try running --init\n";