diff --git a/Changes b/Changes index ae0376a9..2c7adef3 100644 --- a/Changes +++ b/Changes @@ -1,4 +1,4 @@ -2.035999_003 - 2017-05-29 +2.036000 - TESTING [NEW FEATURES] diff --git a/META.json b/META.json index fd7d40fb..07312316 100644 --- a/META.json +++ b/META.json @@ -75,6 +75,7 @@ "Sereal" : "0", "Socket6" : "0.23", "Starman" : "0.4008", + "Sys::Proctitle" : "0", "Template" : "2.24", "Template::Plugin::CSV" : "0.04", "Template::Plugin::Number::Format" : "1.02", @@ -99,7 +100,7 @@ "provides" : { "App::Netdisco" : { "file" : "lib/App/Netdisco.pm", - "version" : "2.035999_003" + "version" : "2.035999_006" }, "App::Netdisco::AnyEvent::Nbtstat" : { "file" : "lib/App/Netdisco/AnyEvent/Nbtstat.pm" @@ -649,6 +650,6 @@ "x_IRC" : "irc://irc.freenode.org/#netdisco", "x_MailingList" : "https://lists.sourceforge.net/lists/listinfo/netdisco-users" }, - "version" : "2.035999_003", - "x_serialization_backend" : "JSON::PP version 2.27400" + "version" : "2.035999_006", + "x_serialization_backend" : "JSON::PP version 2.27300" } diff --git a/META.yml b/META.yml index 7d689349..d988e5b4 100644 --- a/META.yml +++ b/META.yml @@ -9,7 +9,7 @@ configure_requires: DBIx::Class: '0.082810' Module::Build: '0.42' dynamic_config: 1 -generated_by: 'Module::Build version 0.4222, CPAN::Meta::Converter version 2.150010' +generated_by: 'Module::Build version 0.4222, CPAN::Meta::Converter version 2.150005' license: bsd meta-spec: url: http://module-build.sourceforge.net/META-spec-v1.4.html @@ -18,7 +18,7 @@ name: App-Netdisco provides: App::Netdisco: file: lib/App/Netdisco.pm - version: 2.035999_003 + version: 2.035999_006 App::Netdisco::AnyEvent::Nbtstat: file: lib/App/Netdisco/AnyEvent/Nbtstat.pm App::Netdisco::Backend::Job: @@ -427,6 +427,7 @@ requires: Sereal: '0' Socket6: '0.23' Starman: '0.4008' + Sys::Proctitle: '0' Template: '2.24' Template::Plugin::CSV: '0.04' Template::Plugin::Number::Format: '1.02' @@ -446,5 +447,5 @@ resources: homepage: http://netdisco.org/ license: http://opensource.org/licenses/bsd-license.php repository: https://github.com/netdisco/netdisco -version: 2.035999_003 -x_serialization_backend: 'CPAN::Meta::YAML version 0.011' +version: 2.035999_006 +x_serialization_backend: 'CPAN::Meta::YAML version 0.018' diff --git a/bin/netdisco-rancid-export b/bin/netdisco-rancid-export index 60dfee22..6128aae7 100755 --- a/bin/netdisco-rancid-export +++ b/bin/netdisco-rancid-export @@ -73,7 +73,7 @@ foreach my $d (@devices) { my $old = $d->get_column( 'old' ); my $devgroup = 'other'; foreach my $g (keys %$groups) { - if (check_acl( $d, $groups->{$g} )) { + if (check_acl_only( $d, $groups->{$g} )) { $devgroup = $g; last; } diff --git a/lib/App/Netdisco.pm b/lib/App/Netdisco.pm index 15d094a0..88f28590 100644 --- a/lib/App/Netdisco.pm +++ b/lib/App/Netdisco.pm @@ -4,7 +4,7 @@ use strict; use warnings; use 5.010_000; -our $VERSION = '2.035999_003'; +our $VERSION = '2.035999_006'; use App::Netdisco::Configuration; use Module::Find (); @@ -207,7 +207,7 @@ Notes|App::Netdisco::Manual::ReleaseNotes>. Then, the process is as follows: # upgrade Netdisco ~/bin/localenv cpanm --notest App::Netdisco - ln -s ~/perl5/bin/{localenv,netdisco-*} ~/bin/ + ln -sf ~/perl5/bin/{localenv,netdisco-*} ~/bin/ # apply database schema updates ~/bin/netdisco-deploy diff --git a/lib/App/Netdisco/Core/Discover.pm b/lib/App/Netdisco/Core/Discover.pm index aeed9b5c..dca91119 100644 --- a/lib/App/Netdisco/Core/Discover.pm +++ b/lib/App/Netdisco/Core/Discover.pm @@ -5,6 +5,7 @@ use Dancer::Plugin::DBIC 'schema'; use App::Netdisco::Util::Device qw/get_device match_devicetype is_discoverable/; +use App::Netdisco::Util::Permission 'check_acl_only'; use App::Netdisco::Util::DNS ':all'; use App::Netdisco::JobQueue qw/jq_queued jq_insert/; use NetAddr::IP::Lite ':lower'; @@ -76,8 +77,8 @@ sub set_canonical_ip { foreach my $key (sort keys %$map) { # lhs matches device, rhs matches device_ip - if (check_acl($device, $key) - and check_acl($alias, $map->{$key})) { + if (check_acl_only($device, $key) + and check_acl_only($alias, $map->{$key})) { if ($snmp->snmp_connect_ip( $alias->alias )) { $new_ip = $alias->alias; diff --git a/lib/App/Netdisco/JobQueue/PostgreSQL.pm b/lib/App/Netdisco/JobQueue/PostgreSQL.pm index e83bb79a..3a883787 100644 --- a/lib/App/Netdisco/JobQueue/PostgreSQL.pm +++ b/lib/App/Netdisco/JobQueue/PostgreSQL.pm @@ -101,6 +101,7 @@ sub jq_queued { sub _get_denied_actions { my $device = shift; my @badactions = (); + return @badactions unless $device; push @badactions, ('discover', @{ setting('job_prio')->{high} }) if not is_discoverable($device); @@ -142,17 +143,19 @@ sub jq_lock { $fqdn ||= (hostfqdn || 'localhost'); my $happy = false; - # need to handle device discovered since backend daemon started - # and the skiplist was primed. these should be checked against - # the various acls and have device_skip entry added if needed, - # and return false if it should have been skipped. - my @badactions = _get_denied_actions($job->device); - if (scalar @badactions) { - schema('netdisco')->resultset('DeviceSkip')->find_or_create({ - backend => $fqdn, device => $job->device, - },{ key => 'device_skip_pkey' })->add_to_actionset(@badactions); + if ($job->device) { + # need to handle device discovered since backend daemon started + # and the skiplist was primed. these should be checked against + # the various acls and have device_skip entry added if needed, + # and return false if it should have been skipped. + my @badactions = _get_denied_actions($job->device); + if (scalar @badactions) { + schema('netdisco')->resultset('DeviceSkip')->find_or_create({ + backend => $fqdn, device => $job->device, + },{ key => 'device_skip_pkey' })->add_to_actionset(@badactions); - return false if scalar grep {$_ eq $job->action} @badactions; + return false if scalar grep {$_ eq $job->action} @badactions; + } } # lock db row and update to show job has been picked @@ -200,9 +203,11 @@ sub jq_defer { try { schema('netdisco')->txn_do(sub { - schema('netdisco')->resultset('DeviceSkip')->find_or_create({ - backend => $fqdn, device => $job->device, - },{ key => 'device_skip_pkey' })->increment_deferrals; + if ($job->device) { + schema('netdisco')->resultset('DeviceSkip')->find_or_create({ + backend => $fqdn, device => $job->device, + },{ key => 'device_skip_pkey' })->increment_deferrals; + } # lock db row and update to show job is available schema('netdisco')->resultset('Admin') diff --git a/lib/App/Netdisco/Util/DNS.pm b/lib/App/Netdisco/Util/DNS.pm index fe823742..afd13fb5 100644 --- a/lib/App/Netdisco/Util/DNS.pm +++ b/lib/App/Netdisco/Util/DNS.pm @@ -8,7 +8,7 @@ use Net::DNS; use AnyEvent::DNS; use NetAddr::IP::Lite ':lower'; -use App::Netdisco::Util::Permission 'check_acl'; +use App::Netdisco::Util::Permission; use base 'Exporter'; our @EXPORT = (); @@ -129,7 +129,7 @@ sub hostnames_resolve_async { IP: foreach my $hash_ref (@$ips) { my $ip = $hash_ref->{'ip'} || $hash_ref->{'alias'}; - next IP if check_acl($ip, $skip); + next IP if App::Netdisco::Util::Permission::check_acl_no($ip, $skip); # check /etc/hosts file and short-circuit if found foreach my $name (reverse sort keys %HOSTS) { diff --git a/lib/App/Netdisco/Util/Device.pm b/lib/App/Netdisco/Util/Device.pm index ac06c9fc..a45c631f 100644 --- a/lib/App/Netdisco/Util/Device.pm +++ b/lib/App/Netdisco/Util/Device.pm @@ -239,7 +239,7 @@ Returns false if the host is not permitted to arpnip the target device. =cut sub is_arpnipable_now { - my $ip = shift; + my ($ip) = @_; my $device = get_device($ip) or return 0; return _bail_msg("is_arpnipable: cannot arpnip an undiscovered device") @@ -290,7 +290,7 @@ Returns false if the host is not permitted to macsuck the target device. =cut sub is_macsuckable_now { - my $ip = shift; + my ($ip) = @_; my $device = get_device($ip) or return 0; return _bail_msg("is_macsuckable: cannot macsuck an undiscovered device") diff --git a/lib/App/Netdisco/Util/SNMP.pm b/lib/App/Netdisco/Util/SNMP.pm index dcfe08fb..8caaeddd 100644 --- a/lib/App/Netdisco/Util/SNMP.pm +++ b/lib/App/Netdisco/Util/SNMP.pm @@ -2,7 +2,7 @@ package App::Netdisco::Util::SNMP; use Dancer qw/:syntax :script/; use App::Netdisco::Util::Device 'get_device'; -use App::Netdisco::Util::Permission qw/check_acl_no check_acl/; +use App::Netdisco::Util::Permission ':all'; use SNMP::Info; use Try::Tiny; @@ -300,7 +300,7 @@ sub _build_communities { if not $stanza->{tag} and !exists $stanza->{community}; - if ($stanza->{$mode} and check_acl($device, $stanza->{only})) { + if ($stanza->{$mode} and check_acl_only($device, $stanza->{only})) { if ($device->in_storage and $stored_tag and $stored_tag eq $stanza->{tag}) { # last known-good by tag