#!/usr/bin/perl # (c) Pali 2019, Perl license use strict; use warnings; use Net::Telnet; use Time::HiRes qw(usleep); die "Usage: $0 host pass line 0|1\n" unless @ARGV == 4; my $host = $ARGV[0]; my $pass = $ARGV[1]; my $line = $ARGV[2]; my $enable = $ARGV[3]; die "Line $line is not valid line number [1-6]\n" unless $line =~ /^[1-6]$/; my $t = Net::Telnet->new(Timeout => 3, Prompt => '/[^\n]*> $/'); $t->open($host); $t->waitfor('/Password :$/'); $t->print($pass); $t->waitfor($t->prompt); my $failed; my $skip; my $auto_answer; for (1..10) { if ($_ == 10) { $failed = 1; last; } ($auto_answer) = map { /^auto_answer : ([0-9]+)$/ ? $1 : () } $t->cmd('show config'); if ($enable and ($auto_answer & (1 << ($line - 1)))) { do { print "auto_answer on $host is already enabled\n"; $skip = 1 } if $_ == 1; last; } elsif (not $enable and not ($auto_answer & (1 << ($line - 1)))) { do { print "auto_answer on $host is already disabled\n"; $skip = 1 } if $_ == 1; last; } foreach ('open', 'key dir', 'key set', 'key set', 'key soft4', 'key set', 'key 6', 'key 8', "key $line", 'key soft1', 'key soft2', 'key set', 'close') { $t->cmd("test $_"); usleep 200_000; } } $t->print("exit"); $t->close(); if ($failed) { warn (($enable ? "enabling" : "disabling") . " auto_answer on $host failed\n"); exit 1; } else { print ("auto_answer on $host is now " . ($enable ? "enabled" : "disabled") . "\n") unless $skip; exit 0; }