From 4fd42a6fdf572e825c426d81419662352e2ae4d1 Mon Sep 17 00:00:00 2001 From: Packit Service Date: Dec 09 2020 18:10:08 +0000 Subject: Apply patch lftp-4.8.4-ssh-prompt.patch patch_name: lftp-4.8.4-ssh-prompt.patch present_in_specfile: true --- diff --git a/src/SSH_Access.cc b/src/SSH_Access.cc index 2d1229c..bd1fee1 100644 --- a/src/SSH_Access.cc +++ b/src/SSH_Access.cc @@ -20,6 +20,8 @@ #include #include "SSH_Access.h" #include "misc.h" +#include +#include "ascii_ctype.h" void SSH_Access::MakePtyBuffers() { @@ -44,6 +46,26 @@ static bool begins_with(const char *b,const char *e,const char *suffix) return (e-b>=len && !strncasecmp(b,suffix,len)); } +struct nocase_eq +{ + inline bool operator() (char lhs, char rhs) const + { + return c_tolower(lhs) == c_tolower(rhs); + }; +}; + +static bool contains(char const *begin, char const *end, char const *needle) +{ + return std::search(begin, end, needle, needle+strlen(needle), nocase_eq()) != end; +} + +static bool IsConfirmPrompt(const char *b,const char *e) +{ + if(b==e) + return false; + return e[-1]=='?' && contains(b,e,"yes/no"); +} + int SSH_Access::HandleSSHMessage() { int m=STALL; @@ -75,7 +97,7 @@ int SSH_Access::HandleSSHMessage() password_sent++; return m; } - if(ends_with(b,b+s,"(yes/no)?")) + if(IsConfirmPrompt(b,b+s)) { const char *answer=QueryBool("auto-confirm",hostname)?"yes\n":"no\n"; pty_recv_buf->Put(answer);