<html><body><div style="color:#000; background-color:#fff; font-family:times new roman, new york, times, serif;font-size:12pt"><div><span></span> </div><div><span>/home/eserica/rancid/bin/hulogin -t 90 -c"display version ; display current-configuration" 10.3.4.5</span></div><div><span></span> </div><div><span>runs neatly. <var id="yui-ie-cursor"></var>Actually,</span></div><div><span>It logs in, to the enable mode, then runs "display version" gives the output of the command, afterwards runs "display current-configuration" and gives the output of the command as well. thereafter logs out, </span></div><div><span></span> </div><div><span>[eserica@netflow bin]$ /home/eserica/rancid/bin/hulogin -t 90 -c "display version ; display current-configuration" 10.3.4.5<br>10.3.4.5<br>spawn telnet 10.3.4.5<br>Trying 10.3.4.5...<br>Connected to 10.3.4.5 (10.3.4.5).<br>Escape character is '^]'.</span></div><div><span>>>User name:xxx<br>>>User
 password:</span></div><div><span><br>  Huawei Integrated Access SoftwareMA5600T.</span></div><div><span></span> </div><div><span><<output omitted>></span></div><div><span></span> </div><div><span>MA5600T>enable</span></div><div><span>MA5600T#</span></div><div><span></span> </div><div><span><span><<output omitted>></span></span></div><div><span><span></span></span> </div><div><span><span>MA5600T#display version</span></span></div><div><span><span></span></span> </div><div><span><span><span><span><<output omitted>></span></span></span></span></div><div><span><span></span></span> </div><div><span><span>MA5600T# display current-configuration</span></span></div><div><span><span></span></span> </div><span><span><div><span><span></span></span> </div><div><span><span><span><span><<output
 omitted>></span></span></span></span></div></span></span><div> </div><div><span>#<br>return</span></div><div><span>MA5600T#quit<br>  Check whether system data has been changed. Please save data before logout. <br>Are you sure to log out? (y/n)[n]:y</span></div><div><span>MA5600T#</span></div><div><span>  Configuration console exit, please retry to log on<br>Connection closed by foreign host.</span></div><div><span></span>[eserica@netflow bin]$ <br></div><div> </div><div> </div>  <div style="font-family: times new roman, new york, times, serif; font-size: 12pt;"> <div style="font-family: times new roman, new york, times, serif; font-size: 12pt;"> <div dir="ltr"> <div class="hr" style="margin: 5px 0px; padding: 0px; border: 1px solid rgb(204, 204, 204); height: 0px; line-height: 0; font-size: 0px;" contenteditable="false" readonly="true"></div>  <font face="Arial" size="2"> <b><span style="font-weight:
 bold;">From:</span></b> Alan McKinnon <alan.mckinnon@gmail.com><br> <b><span style="font-weight: bold;">To:</span></b> Erica James <jameserica156@yahoo.com> <br> <b><span style="font-weight: bold;">Sent:</span></b> Tuesday, September 17, 2013 1:22 PM<br> <b><span style="font-weight: bold;">Subject:</span></b> Re: [rancid] Rancid-missed cmds<br> </font> </div> <div class="y_msg_container"><br>Yes, that is much better now. The commands we need to run to debug now<br>run properly. If you run<br><br>/home/eserica/rancid/bin/hulogin -t 90 -c"display version ; display<br>current-configuration" 10.3.4.5<br><br>from the command line, do you get sensible output on the screen? What's<br>the exit code from running that command?<br><br>I need to establish if hulogin is doing the right thing or not before we<br>dig into the rancid parser<br><br><br><br><br>On 17/09/2013 12:11, Erica James wrote:<br>> Hello,<br>> Alan, thank you.<br>> 
 <br>> I can see something better now.<br>>  <br>> [eserica@netflow bin]$ /home/eserica/rancid/bin/h3crancid -d 10.3.4.5<br>> executing /home/eserica/rancid/bin/hulogin -t 90 -c"display version ;<br>> display current-configuration" 10.3.4.5<br>> executing /home/eserica/rancid/bin/hulogin -t 90 -c"display version ;<br>> display current-configuration" 10.3.4.5<br>> 10.3.4.5: missed cmd(s): display current-configuration,display version<br>> 10.3.4.5: missed cmd(s): display current-configuration,display version<br>> 10.3.4.5: End of run not found<br>> 10.3.4.5: End of run not found<br>> #<br>> <br>> *From:* Alan McKinnon <<a href="mailto:alan.mckinnon@gmail.com" ymailto="mailto:alan.mckinnon@gmail.com">alan.mckinnon@gmail.com</a>><br>> *To:* Erica James <<a href="mailto:jameserica156@yahoo.com" ymailto="mailto:jameserica156@yahoo.com">jameserica156@yahoo.com</a>><br>> *Cc:* rancid shrubbery
 <<a href="mailto:rancid-discuss@shrubbery.net" ymailto="mailto:rancid-discuss@shrubbery.net">rancid-discuss@shrubbery.net</a>><br>> *Sent:* Tuesday, September 17, 2013 11:19 AM<br>> *Subject:* Re: [rancid] Rancid-missed cmds<br>> <br>> Ah, I see it now. The PATH is set in rancid.conf correctly so it is<br>> available when run from cron.<br>> <br>> You now need to add it to *your* path so it's available when you run the<br>> command on the cli. Add it in your .bashrc or .profile as appropriate,<br>> then log out, log in and run the test commands again. If rancid also<br>> runs as a different user yu should add the same to that users<br>> environment too.<br>> <br>> These steps won't affect how rancid runs on a cron schedule, it will<br>> only affect cli commands so our debugging efforts work<br>> <br>> <br>> On 17/09/2013 08:08, Erica James wrote:<br>>> Hello.<br>>> I have checked in
 rancid's PATH.<br>>> this is a portion of the rancid.conf file.<br>>> BASEDIR=/home/eserica/rancid/var/rancid; export BASEDIR<br>>><br>> PATH=/home/eserica/rancid/bin:/usr/bin:.:/bin:/usr/kerberos/bin:/usr/local/bin:/usr/bin;<br>>> export PATH<br>>><br>>> <br>>><br>>> *From:* Alan McKinnon <<a href="mailto:alan.mckinnon@gmail.com" ymailto="mailto:alan.mckinnon@gmail.com">alan.mckinnon@gmail.com</a><br>> <mailto:<a href="mailto:alan.mckinnon@gmail.com" ymailto="mailto:alan.mckinnon@gmail.com">alan.mckinnon@gmail.com</a>>><br>>> *To:* Erica James <<a href="mailto:jameserica156@yahoo.com" ymailto="mailto:jameserica156@yahoo.com">jameserica156@yahoo.com</a><br>> <mailto:<a href="mailto:jameserica156@yahoo.com" ymailto="mailto:jameserica156@yahoo.com">jameserica156@yahoo.com</a>>><br>>> *Cc:* rancid shrubbery <<a href="mailto:rancid-discuss@shrubbery.net"
 ymailto="mailto:rancid-discuss@shrubbery.net">rancid-discuss@shrubbery.net</a><br>> <mailto:<a href="mailto:rancid-discuss@shrubbery.net" ymailto="mailto:rancid-discuss@shrubbery.net">rancid-discuss@shrubbery.net</a>>><br>>> *Sent:* Monday, September 16, 2013 10:37 PM<br>>> *Subject:* Re: [rancid] Rancid-missed cmds<br>>><br>>> On 16/09/2013 16:32, Erica James wrote:<br>>>> Alan,<br>>>><br>>>> Thank you . Please see the below,<br>>>><br>>>> 1. Can telnet to device and authenticate manually<br>>>><br>>>> 2. /home/eserica/rancid/bin/hulogin -d 10.3.4.5 logs in successfully,<br>>>> and enables properly. Prompt is correct as well<br>>>><br>>>> 3. /home/eserica/rancid/bin/hulogin -t 90 -c"display<br>>>> current-configuration ; display version" 10.3.4.5 runs cleanly. commands<br>>>> are run neatly. automatic login and
 logout<br>>>> 4.[eserica@netflow <mailto:eserica@netflow> <mailto:eserica@netflow<br>> <mailto:eserica@netflow>> logs]$<br>>> /home/eserica/rancid/bin/h3crancid -d 10.3.4.5<br>>>> executing hulogin -t 90 -c"display version ; display<br>>>> current-configuration" 10.3.4.5<br>>>> executing hulogin -t 90 -c"display version ; display<br>>>> current-configuration" 10.3.4.5<br>>>> sh: hulogin: command not found<br>>><br>>>      ^^^^^^^^^^^^^^^^^^^^^^^^^^<br>>><br>>> You almost certainly do not have "/home/eserica/rancid/bin/" in rancid's<br>>> PATH. It is set in $RANCID_DIR/etc/rancid.conf.<br>>><br>>> As to why this happened, it is very likely an installation failure.<br>>><br>>> Did you install all of rancid to /home/eserica/rancid, or is that just a<br>>> convenient place to put rancid scripts you are
 testing?<br>>><br>>><br>>> The rancid build system works almost perfectly every time. It uses<br>>> autotools and is designed to install the entire package to<br>>> /usr/local/rancid/ by default and for the scripts to be run by user<br>>> "rancid". As with all Unix apps it is sensitive to ownership and<br>>> permission errors<br>>><br>>> The errors you are getting indicate a faulty install, possibly trying to<br>>> do itmanually.<br>>><br>>><br>>><br>>><br>>>> 10.3.4.5: missed cmd(s): display current-configuration,display version<br>>>> 10.3.4.5: missed cmd(s): display current-configuration,display version<br>>>> 10.3.4.5: End of run not found<br>>>> 10.3.4.5: End of run not found<br>>>> The router.db<br>>>> 10.3.4.5:huawei:up<br>>>><br>>>> The rancid-fe<br>>>>    'huawei' 
           => 'h3crancid',<br>>>><br>>>> Don't understand why am getting such an output  from<br>>>> /home/eserica/rancid/bin/h3crancid -d 10.3.4.5<br>>>> Any comments on the above?<br>>>><br>>>> Still the same logs.<br>>>><br>>>> Eserica<br>>>><br>>>><br>>>> *From:* Alan McKinnon <<a href="mailto:alan.mckinnon@gmail.com" ymailto="mailto:alan.mckinnon@gmail.com">alan.mckinnon@gmail.com</a><br>> <mailto:<a href="mailto:alan.mckinnon@gmail.com" ymailto="mailto:alan.mckinnon@gmail.com">alan.mckinnon@gmail.com</a>><br>>> <mailto:<a href="mailto:alan.mckinnon@gmail.com" ymailto="mailto:alan.mckinnon@gmail.com">alan.mckinnon@gmail.com</a> <mailto:<a href="mailto:alan.mckinnon@gmail.com" ymailto="mailto:alan.mckinnon@gmail.com">alan.mckinnon@gmail.com</a>>>><br>>>> *To:* rancid shrubbery
 <<a href="mailto:rancid-discuss@shrubbery.net" ymailto="mailto:rancid-discuss@shrubbery.net">rancid-discuss@shrubbery.net</a><br>> <mailto:<a href="mailto:rancid-discuss@shrubbery.net" ymailto="mailto:rancid-discuss@shrubbery.net">rancid-discuss@shrubbery.net</a>><br>>> <mailto:<a href="mailto:rancid-discuss@shrubbery.net" ymailto="mailto:rancid-discuss@shrubbery.net">rancid-discuss@shrubbery.net</a><br>> <mailto:<a href="mailto:rancid-discuss@shrubbery.net" ymailto="mailto:rancid-discuss@shrubbery.net">rancid-discuss@shrubbery.net</a>>>><br>>>> *Sent:* Monday, September 16, 2013 4:33 PM<br>>>> *Subject:* Re: [rancid] Rancid-missed cmds<br>>>><br>>>> The approach to fixing this is always the same, at this point nothing<br>>>> rancid is outputting helps debug in the slightest - all it says is that<br>>>> something went wrong, but we already know
 that.<br>>>><br>>>> Do the following:<br>>>><br>>>> 1. telnet to device and check you can auth manually<br>>>> 2. "hulogin <device>" and check it logs in and enables properly, and<br>>>> that the prompt etc on the screen is correct<br>>>> 3. run "hulogin -t 90 -c"display current-configuration,display version"<br>>>> <device>" and check that the commands do actually run correctly<br>>>> 4. run "hurancid -d <device>" - this dumps a *complete* log in the<br>>>> current directory containing more info than the regular log you quoted<br>>>> and often reveals the problem (but not always).<br>>>><br>>>><br>>>> But first a few prior steps need to be verified:<br>>>><br>>>> - the command in #3 I pasted from your log output, and that has comma<br>>>> separators. Your device might need semicolons,
 I have no idea as I don;t<br>>>> know that vendors stuff<br>>>> - the relevant line in router.db must contain the appropriate type<br>>>> string in field 3<br>>>> - you will have had to edit rancid-fe and add a line for huawei to a<br>>>> perl hash. Without this, rancid-run doesn't know what parser script to<br>>>> call and it cannot work.<br>>>> - the device you have must be supported by the script you are using;<br>>>> just because Huawei made it is no guarantee it works similarly to<br>>>> anything else they might have made.<br>>>><br>>>><br>>>> If all of that checks out, then we need to look into the running perl<br>>>> itself.<br>>>><br>>>> I believe we've been over most of this before, I don't recall getting a<br>>>> definitive answer. You really do need to go through all these steps as<br>>>>
 given, nothing else is going to get to the root of your problem.<br>>>><br>>>><br>>>><br>>>> On 16/09/2013 15:11, Erica James wrote:<br>>>>> Hello<br>>>>> I have a problem with rancid parsing script. Logs show missed cmd(s).<br>>>>> Trying to get all of the configs.<br>>>>> 10.3.4.5: missed cmd(s): display current-configuration,display version<br>>>>> 10.3.4.5: End of run not found<br>>>>> #<br>>>>> All routers sucessfully completed.<br>>>>> cvs diff: Diffing .<br>>>>> cvs diff: Diffing configs<br>>>>> cvs commit: Examining .<br>>>>> cvs commit: Examining configs<br>>>>><br>>>>> The script is for Huawei. The problem now seems to be that rancid is not<br>>>>> collecting configs.<br>>>>> Anyone with an idea on what to
 do?<br>>>>><br>>>>> Below is the rancid-script<br>>>>><br>>>>> #! /usr/bin/perl<br>>>>> ##<br>>>>> ## $Id$<br>>>>> ##<br>>>>> ## rancid 2.3.8<br>>>>> ##<br>>>>> ## Copyright (C) 1997-2004 by Terrapin Communications, Inc.<br>>>>> ## All rights reserved.<br>>>>> ##<br>>>>> ## This software may be freely copied, modified and redistributed<br>>>>> ## without fee for non-commerical purposes provided that this license<br>>>>> ## remains intact and unmodified with any RANCID distribution.<br>>>>> ##<br>>>>> ## There is no warranty or other guarantee of fitness of this software.<br>>>>> ## It is provided solely "as is".  The author(s) disclaim(s) all<br>>>>> ## responsibility and liability with respect to this software's
 usage<br>>>>> ## or its effect upon hardware, computer systems, other software, or<br>>>>> ## anything else.<br>>>>> ##<br>>>>> ## Except where noted otherwise, rancid was written by and is<br>>>> maintained by<br>>>>> ## Henry Kilmer, John Heasley, Andrew Partan, Pete Whiting, and Austin<br>>>>> Schutz.<br>>>>> ##<br>>>>> #<br>>>>> # hurancid - Interface to Huawei devices<br>>>>> #<br>>>>> #  RANCID - Really Awesome New Cisco confIg Differ<br>>>>> #<br>>>>> # usage: rancid [-d] [-l] [-f filename | $host]<br>>>>> #<br>>>>> use Getopt::Std;<br>>>>> getopts('dfl');<br>>>>> $log = $opt_l;<br>>>>> $debug = $opt_d;<br>>>>> $file = $opt_f;<br>>>>> $host = $ARGV[0];<br>>>>> $clean_run =
 0;<br>>>>> $found_end = 0;<br>>>>> $timeo = 90;                    # hulogin timeout in seconds<br>>>>><br>>>>> my(%filter_pwds);              # password filtering mode<br>>>>> # This routine is used to print out the router configuration<br>>>>> sub ProcessHistory {<br>>>>>    my($new_hist_tag,$new_command,$command_string,@string)=(@_);<br>>>>> if((($new_hist_tag ne $hist_tag) || ($new_command ne $command))<br>>>>>        && defined %history) {<br>>>>>        print eval "$command \%history";<br>>>>>        undef %history;<br>>>>>    }<br>>>>>    if (($new_hist_tag) && ($new_command) && ($command_string))
 {<br>>>>>        if ($history{$command_string}) {<br>>>>>            $history{$command_string} =<br>>>>> "mailto:$history%7B$command_string%7D@string <mailto:7D@string><br>> <mailto:7D@string <mailto:7D@string>><br>>> <mailto:7D@string <mailto:7D@string> <mailto:7D@string<br>> <mailto:7D@string>>>";<br>>>>>        } else {<br>>>>>            $history{$command_string} = "@string";<br>>>>>        }<br>>>>>    } elsif (($new_hist_tag) && ($new_command)) {<br>>>>>        $history{++$#history} = "@string";<br>>>>>    } else {<br>>>>>        print "@string";<br>>>>>   
 }<br>>>>>    $hist_tag = $new_hist_tag;<br>>>>>    $command = $new_command;<br>>>>>    1;<br>>>>> }<br>>>>><br>>>>> sub numerically { $a <=> $b; }<br>>>>><br>>>>> # This is a sort routing that will sort numerically on the<br>>>>> # keys of a hash as if it were a normal array.<br>>>>> sub keynsort {<br>>>>>    local(%lines)=@_;<br>>>>>    local($i) = 0;<br>>>>>    local(@sorted_lines);<br>>>>>    foreach $key (sort numerically keys(%lines)) {<br>>>>>        $sorted_lines[$i] = $lines{$key};<br>>>>>        $i++;<br>>>>>    }<br>>>>>    @sorted_lines;<br>>>>>
 }<br>>>>><br>>>>> # This is a sort routing that will sort on the<br>>>>> # keys of a hash as if it were a normal array.<br>>>>> sub keysort {<br>>>>>    local(%lines)=@_;<br>>>>>    local($i) = 0;<br>>>>>    local(@sorted_lines);<br>>>>>    foreach $key (sort keys(%lines)) {<br>>>>>        $sorted_lines[$i] = $lines{$key};<br>>>>>        $i++;<br>>>>>    }<br>>>>>    @sorted_lines;<br>>>>> }<br>>>>><br>>>>> # This is a sort routing that will sort on the<br>>>>> # values of a hash as if it were a normal array.<br>>>>> sub valsort{<br>>>>>    local(%lines)=@_;<br>>>>>    local($i) = 0;<br>>>>> 
   local(@sorted_lines);<br>>>>>    foreach $key (sort values %lines) {<br>>>>>        $sorted_lines[$i] = $key;<br>>>>>        $i++;<br>>>>>    }<br>>>>>    @sorted_lines;<br>>>>> }<br>>>>><br>>>>> # This is a numerical sort routing (ascending).<br>>>>> sub numsort {<br>>>>>    local(%lines)=@_;<br>>>>>    local($i) = 0;<br>>>>>    local(@sorted_lines);<br>>>>>    foreach $num (sort {$a <=> $b} keys %lines) {<br>>>>>        $sorted_lines[$i] = $lines{$num};<br>>>>>        $i++;<br>>>>>    }<br>>>>>    @sorted_lines;<br>>>>>
 }<br>>>>><br>>>>> # This is a sort routine that will sort on the<br>>>>> # ip address when the ip address is anywhere in<br>>>>> # the strings.<br>>>>> sub ipsort {<br>>>>>    local(%lines)=@_;<br>>>>>    local($i) = 0;<br>>>>>    local(@sorted_lines);<br>>>>>    foreach $addr (sort sortbyipaddr keys %lines) {<br>>>>>        $sorted_lines[$i] = $lines{$addr};<br>>>>>        $i++;<br>>>>>    }<br>>>>>    @sorted_lines;<br>>>>> }<br>>>>><br>>>>> # These two routines will sort based upon IP addresses<br>>>>> sub ipaddrval {<br>>>>>    my(@a) = ($_[0] =~ m#^(\d+)\.(\d+)\.(\d+)\.(\d+)$#);<br>>>>>   
 $a[3]+256*($a[2]+256*($a[1]+256*$a[0]));<br>>>>> }<br>>>>> sub sortbyipaddr {<br>>>>>    &ipaddrval($a) <=> &ipaddrval($b);<br>>>>> }<br>>>>><br>>>>><br>>>>> # This routine processes a "show configuration"<br>>>>> # This routine processes a "show configuration"<br>>>>> sub WriteTerm {<br>>>>>    print STDERR "    In WriteTerm: $_" if ($debug);<br>>>>>    #my($lineauto) = 0;<br>>>>><br>>>>>    while (<INPUT>) {<br>>>>> #print STDERR "History $_\n";<br>>>>><br>>>>>        tr/\015//d;<br>>>>>        last if(/^$prompt/);<br>>>>>        next if (/^(\s*|\s*$cmd\s*)$/);<br>>>>>       
 return(1) if (/^\s*\^\s*$/);<br>>>>>        return(1) if (/Line has invalid autocommand /);<br>>>>>        return(1) if (/(Invalid (input|command) detected|Type help or<br>>> )/i);<br>>>>>        return(-1) if (/command authorization failed/i);<br>>>>>        # the pager can not be disabled per-session on the PIX<br>>>>>        if (/^(<-+ More -+>)/) {<br>>>>>            my($len) = length($1);<br>>>>>            s/^$1\s{$len}//;<br>>>>>        }<br>>>>>   <br>>>>>        /^/ && next;<br>>>>>        ProcessHistory("COMMENTS","keysort","B1","# $_") &&
 next;<br>>>>>    }<br>>>>><br>>>>>        # end of config...is a comment.<br>>>>>        if (/^return/i) {<br>>>>> $found_end = 1;<br>>>>>            return(1);<br>>>>>        }<br>>>>><br>>>>>        return(0);<br>>>>> }<br>>>>><br>>>>> # This routine copies everything with precefing "#"<br>>>>> sub CopyComment {<br>>>>>    print STDERR "    In CopyComment: $_" if ($debug);<br>>>>><br>>>>>    while (<INPUT>) {<br>>>>>        tr/\015//d;<br>>>>>        last if (/^$prompt/);<br>>>>><br>>>>>       
 ProcessHistory("","","","# $_");<br>>>>>        # end of config<br>>>>>    }<br>>>>>    return(0);<br>>>>> }<br>>>>><br>>>>> # filter out "uptime" lines<br>>>>> sub FilterUptime {<br>>>>>    print STDERR "    In FilterUptime: $_" if ($debug);<br>>>>><br>>>>>    while (<INPUT>) {<br>>>>>        tr/\015//d;<br>>>>>        last if (/^$prompt/);<br>>>>> #nmeongeza<br>>>>>        next if (/^(\s*|\s*$cmd\s*)$/);<br>>>>>        return(-1) if (/command authorization failed/i);<br>>>>>        /^VERSION\=>(\s+.*)$/ &&<br>>>>> ProcessHistory("COMMENTS","keysort","C1","\#\n#
 Version: $1\n")<br>>>>> && next;<br>>>>>        /^PATCH\=>(\s+.*)$/ &&<br>>>>> ProcessHistory("COMMENTS","keysort","C2","\# Patch: $1\n")<br>>>>> && next;<br>>>>><br>>>>>        /^PRODUCT\=>(\s+.*)$/ &&<br>>>>> ProcessHistory("COMMENTS","keysort","C3","\# Version: $1\n")<br>>>>> && next;<br>>>>> }<br>>>>> return(0);<br>>>>> }<br>>>>><br>>>>><br>>>>> # dummy function<br>>>>> sub DoNothing {print STDOUT;}<br>>>>><br>>>>> # Main<br>>>>> @commandtable = (<br>>>>>        {'display version'                      => 'FilterUptime'},<br>>>>>     
   {'display patch-information'            => 'CopyComment'},<br>>>>>        {'display device'                        => 'CopyComment'},<br>>>>>        {'display device pic-status'            => 'CopyComment'},<br>>>>>        {'display current-configuration'        => 'WriteTerm'},<br>>>>> );<br>>>>><br>>>>> # Use an array to preserve the order of the commands and a hash for<br>>>> mapping<br>>>>> # commands to the subroutine and track commands that have been<br>> completed.<br>>>>> @commands = map(keys(%$_), @commandtable);<br>>>>> %commands = map(%$_, @commandtable);<br>>>>><br>>>>>
 $huaw_cmds=join(";",@commands);<br>>>>> $cmds_regexp=join("|",@commands);<br>>>>><br>>>>> open(OUTPUT,">$host.new") || die "Can't open $host.new for writing:<br>>> $!\n";<br>>>>> select(OUTPUT);<br>>>>> # make OUTPUT unbuffered if debugging<br>>>>> if ($debug) { $| = 1; }<br>>>>><br>>>>> if ($file) {<br>>>>>    print STDERR "opening file $host\n" if ($debug);<br>>>>>    print STDOUT "opening file $host\n" if ($log);<br>>>>>    open(INPUT,"<$host") || die "open failed for $host: $!\n";<br>>>>> } else {<br>>>>>    print STDERR "executing hulogin -t $timeo -c\"$huaw_cmds\" $host\n"<br>>>>> if ($debug);<br>>>>>    print STDOUT "executing hulogin -t $timeo -c\"$huaw_cmds\" $host\n"<br>>>>> if
 ($debug);<br>>>>>    if (defined($ENV{NOPIPE}) && $ENV{NOPIPE} =~ /^YES/i) {<br>>>>>        system "hulogin -t $timeo -c \"$huaw_cmds\" $host </dev/null ><br>>>>> $host.raw" || die "hulogin failed for $host: $!\n";<br>>>>>        open(INPUT, "< $host.raw") || die "hulogin failed for $host:<br>>> $!\n";<br>>>>>    } else {<br>>>>>        open(INPUT,"hulogin -t $timeo -c \"$huaw_cmds\" $host </dev/null<br>>>>> |") || die "hulogin failed for $host: $!\n";<br>>>>>    }<br>>>>> }<br>>>>><br>>>>> # determine password filtering mode<br>>>>> if ($ENV{"FILTER_PWDS"} =~ /no/i) {<br>>>>>        $filter_pwds = 0;<br>>>>> } elsif ($ENV{"FILTER_PWDS"} =~ /all/i)
 {<br>>>>>        $filter_pwds = 2;<br>>>>> } else {<br>>>>>        $filter_pwds = 1;<br>>>>> }<br>>>>><br>>>>> ProcessHistory("","","","#RANCID-CONTENT-TYPE: Huawei\n#\n");<br>>>>> ProcessHistory("COMMENTS","keysort","B0","#\n");<br>>>>> ProcessHistory("COMMENTS","keysort","F0","#\n");<br>>>>> ProcessHistory("COMMENTS","keysort","G0","#\n");<br>>>>> TOP: while(<INPUT>) {<br>>>>>    tr/\015//d;<br>>>>><br>>>>> #print STDERR ("CMD: $_\n");<br>>>>><br>>>>>    if (/\>\s?quit.*$/) {<br>>>>>        $clean_run=1;<br>>>>>        last;<br>>>>>    }<br>>>>><br>>>>>    if (/^Error:/)
 {<br>>>>>        print STDOUT ("$host hulogin error: $_");<br>>>>>        print STDERR ("$host hulogin error: $_") if ($debug);<br>>>>>        $clean_run=0;<br>>>>>        last;<br>>>>> }<br>>>>><br>>>>>    while (/\>\007*\s*($cmds_regexp)\s*$/) {<br>>>>>        $cmd = $1;<br>>>>><br>>>>>        if (!defined($prompt)) {<br>>>>>            $prompt = ($_ =~ /^([^>]+\>)/)[0];<br>>>>>            $prompt =~ s/([][}{)(file://])///$1/g;<br>>>>>            print STDERR ("PROMPT MATCH: $prompt\n") if ($debug);<br>>>>>        }<br>>>>> 
       print STDERR ("HIT COMMAND:$_") if ($debug);<br>>>>>        if (! defined($commands{$cmd})) {<br>>>>>            print STDERR "$host: found unexpected command - \"$cmd\"\n";<br>>>>>            $clean_run = 0;<br>>>>>            last TOP;<br>>>>>        }<br>>>>>        $rval = &{$commands{$cmd}};<br>>>>>        delete($commands{$cmd});<br>>>>>        if ($rval == -1) {<br>>>>>            $clean_run = 0;<br>>>>>            last TOP;<br>>>>>        }<br>>>>>    }<br>>>>> }<br>>>>> print
 STDOUT "Done $logincmd: $_\n" if ($log);<br>>>>> # Flush History<br>>>>> ProcessHistory("","","","");<br>>>>> # Cleanup<br>>>>> close(INPUT);<br>>>>> close(OUTPUT);<br>>>>><br>>>>> if (defined($ENV{NOPIPE})) {<br>>>>>    #unlink("$host.raw") if (! $debug);<br>>>>> }<br>>>>> # check for completeness<br>>>>> if (scalar(%commands) || !$clean_run || !$found_end) {<br>>>>>    if (scalar(%commands)) {<br>>>>>        printf(STDOUT "$host: missed cmd(s): %s\n", join(',',<br>>>>> keys(%commands)));<br>>>>>        printf(STDERR "$host: missed cmd(s): %s\n", join(',',<br>>>>> keys(%commands))) if ($debug);<br>>>>>    }<br>>>>>    if (!$clean_run || !$found_end)
 {<br>>>>>        print STDOUT "$host: End of run not found\n";<br>>>>>        print STDERR "$host: End of run not found\n" if ($debug);<br>>>>>        system("/usr/bin/tail -1 $host.new");<br>>>>>    }<br>>>>>    #unlink "$host.new" if (! $debug);<br>>>>> }<br>>>>><br>>>>><br>>>><br>>>><br>>>> --<br>>>> Alan McKinnon<br>>>> <a href="mailto:alan.mckinnon@gmail.com" ymailto="mailto:alan.mckinnon@gmail.com">alan.mckinnon@gmail.com</a> <mailto:<a href="mailto:alan.mckinnon@gmail.com" ymailto="mailto:alan.mckinnon@gmail.com">alan.mckinnon@gmail.com</a>><br>> <mailto:<a href="mailto:alan.mckinnon@gmail.com" ymailto="mailto:alan.mckinnon@gmail.com">alan.mckinnon@gmail.com</a> <mailto:<a href="mailto:alan.mckinnon@gmail.com"
 ymailto="mailto:alan.mckinnon@gmail.com">alan.mckinnon@gmail.com</a>>><br>>> <mailto:<a href="mailto:alan.mckinnon@gmail.com" ymailto="mailto:alan.mckinnon@gmail.com">alan.mckinnon@gmail.com</a> <mailto:<a href="mailto:alan.mckinnon@gmail.com" ymailto="mailto:alan.mckinnon@gmail.com">alan.mckinnon@gmail.com</a>><br>> <mailto:<a href="mailto:alan.mckinnon@gmail.com" ymailto="mailto:alan.mckinnon@gmail.com">alan.mckinnon@gmail.com</a> <mailto:<a href="mailto:alan.mckinnon@gmail.com" ymailto="mailto:alan.mckinnon@gmail.com">alan.mckinnon@gmail.com</a>>>><br>>>><br>>>> _______________________________________________<br>>>> Rancid-discuss mailing list<br>>>> <a href="mailto:Rancid-discuss@shrubbery.net" ymailto="mailto:Rancid-discuss@shrubbery.net">Rancid-discuss@shrubbery.net</a> <mailto:<a href="mailto:Rancid-discuss@shrubbery.net"
 ymailto="mailto:Rancid-discuss@shrubbery.net">Rancid-discuss@shrubbery.net</a>><br>> <mailto:<a href="mailto:Rancid-discuss@shrubbery.net" ymailto="mailto:Rancid-discuss@shrubbery.net">Rancid-discuss@shrubbery.net</a> <mailto:<a href="mailto:Rancid-discuss@shrubbery.net" ymailto="mailto:Rancid-discuss@shrubbery.net">Rancid-discuss@shrubbery.net</a>>><br>>> <mailto:<a href="mailto:Rancid-discuss@shrubbery.net" ymailto="mailto:Rancid-discuss@shrubbery.net">Rancid-discuss@shrubbery.net</a><br>> <mailto:<a href="mailto:Rancid-discuss@shrubbery.net" ymailto="mailto:Rancid-discuss@shrubbery.net">Rancid-discuss@shrubbery.net</a>><br>> <mailto:<a href="mailto:Rancid-discuss@shrubbery.net" ymailto="mailto:Rancid-discuss@shrubbery.net">Rancid-discuss@shrubbery.net</a> <mailto:<a href="mailto:Rancid-discuss@shrubbery.net"
 ymailto="mailto:Rancid-discuss@shrubbery.net">Rancid-discuss@shrubbery.net</a>>>><br>>>> <a href="http://www.shrubbery.net/mailman/listinfo/rancid-discuss" target="_blank">http://www.shrubbery.net/mailman/listinfo/rancid-discuss</a><br>>>><br>>>><br>>><br>>><br>>> --<br>>> Alan McKinnon<br>>> <a href="mailto:alan.mckinnon@gmail.com" ymailto="mailto:alan.mckinnon@gmail.com">alan.mckinnon@gmail.com</a> <mailto:<a href="mailto:alan.mckinnon@gmail.com" ymailto="mailto:alan.mckinnon@gmail.com">alan.mckinnon@gmail.com</a>><br>> <mailto:<a href="mailto:alan.mckinnon@gmail.com" ymailto="mailto:alan.mckinnon@gmail.com">alan.mckinnon@gmail.com</a> <mailto:<a href="mailto:alan.mckinnon@gmail.com" ymailto="mailto:alan.mckinnon@gmail.com">alan.mckinnon@gmail.com</a>>><br>>><br>>><br>>><br>> <br>> <br>> -- <br>> Alan McKinnon<br>> <a
 href="mailto:alan.mckinnon@gmail.com" ymailto="mailto:alan.mckinnon@gmail.com">alan.mckinnon@gmail.com</a> <mailto:<a href="mailto:alan.mckinnon@gmail.com" ymailto="mailto:alan.mckinnon@gmail.com">alan.mckinnon@gmail.com</a>><br>> <br>> <br>> <br><br><br>-- <br>Alan McKinnon<br><a href="mailto:alan.mckinnon@gmail.com" ymailto="mailto:alan.mckinnon@gmail.com">alan.mckinnon@gmail.com</a><br><br><br><br></div> </div> </div>  </div></body></html>