From 19b2e6c4a5b6d3006150f686a2c4b92eb2b53246 Mon Sep 17 00:00:00 2001 From: clyang Date: Thu, 19 Oct 2017 01:38:15 +0800 Subject: [PATCH] Fix ssh auto-login once and for all! Now, if a user want to auto-login BBS with ssh. The format will be: ssh://bbs@ptt.cc/USERID --- src/WLConnection.m | 35 ++++++++++++++++++++++------------- src/WLPTY.m | 15 ++++++++++++--- 2 files changed, 34 insertions(+), 16 deletions(-) diff --git a/src/WLConnection.m b/src/WLConnection.m index 804b1dc..2c2a175 100644 --- a/src/WLConnection.m +++ b/src/WLConnection.m @@ -231,20 +231,30 @@ - (void)login { NSString *addr = [_site address]; const char *account = [addr UTF8String]; // telnet; send username - char *pe = strchr(account, '@'); - if (pe) { - char *ps = pe; - for (; ps >= account; --ps) - if (*ps == ' ' || *ps == '/') - break; - if (ps != pe) { - while ([_feeder cursorY] <= 3) - sleep(1); - [self sendBytes:ps+1 length:pe-ps-1]; - [self sendBytes:"\r" length:1]; + if (![addr hasPrefix:@"ssh"]) { + char *pe = strchr(account, '@'); + if (pe) { + char *ps = pe; + for (; ps >= account; --ps) + if (*ps == ' ' || *ps == '/') + break; + if (ps != pe) { + while ([_feeder cursorY] <= 3) + sleep(1); + [self sendBytes:ps+1 length:pe-ps-1]; + [self sendBytes:"\r" length:1]; + } } + } else if([addr hasPrefix:@"ssh://"] && [addr containsString:@"/"]) { + // user wants to autologin with shh + addr = [addr substringFromIndex:[addr rangeOfString:@":"].location+3]; + NSString *account = [addr substringFromIndex: [addr rangeOfString:@"/"].location+1]; + [self sendText:account]; + [self sendBytes:"\r" length:1]; + }else if ([_feeder grid][[_feeder cursorY]][[_feeder cursorX] - 2].byte == '?') { + [self sendBytes:"yes\r" length:4]; + sleep(1); } - // send password const char *service = "Welly"; UInt32 len = 0; @@ -263,7 +273,6 @@ - (void)login { [pool release]; } - #pragma mark - #pragma mark Message - (void)increaseMessageCount:(NSInteger)value { diff --git a/src/WLPTY.m b/src/WLPTY.m index 5073722..804155c 100644 --- a/src/WLPTY.m +++ b/src/WLPTY.m @@ -69,10 +69,19 @@ + (NSString *)parse:(NSString *)addr { if (port == nil) port = @"22"; range = [addr rangeOfString:@"@"]; - // remove username for telnet - if (range.length > 0) + // remove username from ssh + if (range.length > 0 && ![addr containsString:@"/"]) { + // user don't want auto login + fmt = @"/usr/bin/ssh -o Protocol=2,1 -p %2$@ -x %1$@"; + } else if(range.length > 0 && [addr containsString:@"/"]) { + // user wants auto-login + // remove userid "/USERID" from the end addr = [addr substringFromIndex:range.location + range.length]; - fmt = @"/usr/bin/ssh -4 -o PubkeyAuthentication=no -o Protocol=2,1 -p %2$@ -x bbs@%1$@"; + addr = [addr substringToIndex:[addr rangeOfString:@"/"].location]; + fmt = @"/usr/bin/ssh -4 -o PubkeyAuthentication=no -o Protocol=2,1 -p %2$@ -x bbs@%1$@"; + } else { + fmt = @"/usr/bin/ssh -o Protocol=2,1 -p %2$@ -x %1$@"; + } } else if (websock) { port = [NSString stringWithFormat:@"%d", arc4random_uniform(99999)]; proxyScript = [[NSBundle mainBundle] pathForResource:@"proxy.sh" ofType:@""];