[rancid] [PATCH] clogin default prompt matches Extreme XOS banner (was: Re: Extreme XOS (etc.) slow buffered output & clogin)
Zenon Mousmoulas
zmousm at noc.grnet.gr
Wed Jun 6 17:54:27 UTC 2012
Hi again,
Taking a closer look, the particular issue is due to '>' appearing in the
banner XOS sends (by default) after login. The attached patch takes care of
this. I can not recall if this appeared in XOS 12.5 or earlier.
I understand there is a timeout pattern, implicitly added by a previous
expect_after command, therefore slow/late output should never be an issue.
As mentioned previously, I have also seen this issue on Cisco switches with
similarly large post-login banners (banner motd). However I can't reproduce
this currently, so let me take this back and the suggested ugly workaround.
Sorry for the noise.
Best regards,
Z.
On Wed, 06 Jun 2012 11:52:55 +0300, Zenon Mousmoulas <zmousm at noc.grnet.gr>
wrote:
> Hi,
>
> There is an issue with clogin and buffered output, easily reproducible
> with Extreme XOS devices, which by default show a sizable banner
> post-login, but I have also been able to reproduce it with Cisco
switches,
> when a large banner is displayed:
>
> On Thu, 01 Dec 2011 03:44:32 +0200, Zenon Mousmoulas
<zmousm at noc.grnet.gr>
> wrote:
>> [...]
>> However there's still a problem in this version with buffered output
> from
>> the extreme. After login, when you send "\r", the following expect
>> catches the first prompt, not the one after "\r". This becomes evident
>> later on, when the expect statement in the loop within run_commands
>> catches
>> "disable clipaging\r\n\<prompt>" rather than the command echoed and
>> its' output. So you're always one step behind, until the end, where you
>> erroneously see a prompt after sending "quit\r" so you also
>> send -h "exit\r". This obviously messes up xrancid parsing as
>> well. See the attached clogin log for more evidence (with exp_internal
>> added after login).
>
> Some time ago I had posted a patch which tried to address this, among
> other things related to XOS & rancid. Other changes were accepted in
2.3.7
> (thanks for that), however this issue is still present in 2.3.8.
> My rather ugly workaround was to add this code after login and before
> prompt detection:
>
> diff -ru rancid-2.3.8/bin/clogin.in rancid-2.3.8-zmousm/bin/clogin.in
> --- rancid-2.3.8/bin/clogin.in 2012-02-01 00:42:14.000000000 +0200
> +++ rancid-2.3.8-zmousm/bin/clogin.in 2012-06-06 09:00:59.000000000
+0300
> @@ -858,6 +858,16 @@
> # if login failed or rsh was unsuccessful, move on to the next device
> continue
> }
> + # Get all (output after login) you can eat in 1s
> + # (hopefully up to and including the first prompt).
> + # This is mostly necessary to work around
> + # stoopid extreme output buffering.
> + expect {
> + -timeout 1
> + -re "\[\n\r]+" { exp_continue }
> + -re "\[^\n\r]+" { exp_continue -continue_timer }
> + timeout {}
> + }
> # Figure out the prompt.
> if { [regexp -- "(#| \\(enable\\))" $prompt_match junk] == 1 } {
> set enable 0
>
> Unfortunately this introduces a 1 second delay for all (not just XOS)
> clogin-controlled devices, but there is no obvious way to avoid this,
since
> we haven't done prompt detection yet and haven't set $platform.
> Furthermore, this issue is not strictly limited to XOS devices, as noted
> previously, therefore a slightly different approach would be perhaps to
> trigger this delay when the output received after login exceeds some
> conservative threshold, but I'm not really sure if and how one could do
> such a thing.
>
> I can send again (off-list) clogin output with expect debugging enabled,
> depicting the issue described above, as well as the correct output of
> clogin patched with the code above.
> While going through the list archives, I also found this post which
shows
> how xrancid parsing (see: missed cmds) and output is messed up exactly
due
> to this issue:
> http://www.shrubbery.net/pipermail/rancid-discuss/2012-April/006308.html
>
> Please advise how this issue can be addressed.
>
> Thanks,
> Zenon Mousmoulas
-------------- next part --------------
diff -ru rancid-2.3.8/bin/clogin.in rancid-2.3.8-zmousm/bin/clogin.in
--- rancid-2.3.8/bin/clogin.in 2012-02-01 00:42:14.000000000 +0200
+++ rancid-2.3.8-zmousm/bin/clogin.in 2012-06-06 18:39:17.000000000 +0300
@@ -567,8 +567,23 @@
}
exp_continue
}
- -re "$prompt" {
+ -indices -re "$prompt" {
set prompt_match $expect_out(0,string);
+ if {"$prompt_match" == ">"} {
+ # Extreme XOS >= 12.5 by default sends a banner after login
+ # including this line:
+ # "Press the <tab> or '?' key at any time for completions."
+ # Match and discard it, as it is not a prompt.
+ if [string match "\r\nPress the <tab>" \
+ [string range $expect_out(buffer) \
+ [expr $expect_out(0,start) - 16] \
+ $expect_out(0,start) \
+ ]
+ ] {
+ send_error -- "second if\n";
+ exp_continue
+ }
+ }
break;
}
"Login invalid" {
More information about the Rancid-discuss
mailing list