Skip to content
Snippets Groups Projects
Commit c99faefb authored by deuce's avatar deuce
Browse files

Pass the bbslist struct to conn_connect so that extra attributes such as

host fingerprints, public and provate keys can be used/modified without
needing yet more parameters.
parent e79bd927
Branches
Tags
No related merge requests found
...@@ -184,17 +184,20 @@ int conn_send(char *buffer, size_t buflen, unsigned int timeout) ...@@ -184,17 +184,20 @@ int conn_send(char *buffer, size_t buflen, unsigned int timeout)
return(0); return(0);
} }
int conn_connect(char *addr, int port, char *ruser, char *passwd, char *syspass, int conn_type, int speed) int conn_connect(struct bbslist *bbs)
{ {
HOSTENT *ent; HOSTENT *ent;
SOCKADDR_IN saddr; SOCKADDR_IN saddr;
char *p; char *p;
unsigned int neta; unsigned int neta;
char *ruser;
char *passwd;
init_uifc(TRUE, TRUE); init_uifc(TRUE, TRUE);
con_type=bbs->conn_type;
#ifdef USE_CRYPTLIB #ifdef USE_CRYPTLIB
if(conn_type==CONN_TYPE_SSH) { if(con_type==CONN_TYPE_SSH) {
if(!crypt_loaded) if(!crypt_loaded)
init_crypt(); init_crypt();
if(!crypt_loaded) { if(!crypt_loaded) {
...@@ -214,20 +217,25 @@ int conn_connect(char *addr, int port, char *ruser, char *passwd, char *syspass, ...@@ -214,20 +217,25 @@ int conn_connect(char *addr, int port, char *ruser, char *passwd, char *syspass,
} }
#endif #endif
con_type=conn_type; ruser=bbs->user;
for(p=addr;*p;p++) passwd=bbs->password;
if(con_type==CONN_TYPE_RLOGIN && bbs->reversed) {
passwd=bbs->user;
ruser=bbs->password;
}
for(p=bbs->addr;*p;p++)
if(*p!='.' && !isdigit(*p)) if(*p!='.' && !isdigit(*p))
break; break;
if(!(*p)) if(!(*p))
neta=inet_addr(addr); neta=inet_addr(bbs->addr);
else { else {
uifc.pop("Lookup up host"); uifc.pop("Lookup up host");
if((ent=gethostbyname(addr))==NULL) { if((ent=gethostbyname(bbs->addr))==NULL) {
char str[LIST_ADDR_MAX+17]; char str[LIST_ADDR_MAX+17];
uifc.pop(NULL); uifc.pop(NULL);
sprintf(str,"Cannot resolve %s!",addr); sprintf(str,"Cannot resolve %s!",bbs->addr);
uifcmsg(str, "`Cannot Resolve Host`\n\n" uifcmsg(str, "`Cannot Resolve Host`\n\n"
"The system is unable to resolve the hostname... double check the spelling.\n" "The system is unable to resolve the hostname... double check the spelling.\n"
"If it's not an issue with your DNS settings, the issue is probobly\n" "If it's not an issue with your DNS settings, the issue is probobly\n"
...@@ -250,14 +258,14 @@ int conn_connect(char *addr, int port, char *ruser, char *passwd, char *syspass, ...@@ -250,14 +258,14 @@ int conn_connect(char *addr, int port, char *ruser, char *passwd, char *syspass,
memset(&saddr,0,sizeof(saddr)); memset(&saddr,0,sizeof(saddr));
saddr.sin_addr.s_addr = neta; saddr.sin_addr.s_addr = neta;
saddr.sin_family = AF_INET; saddr.sin_family = AF_INET;
saddr.sin_port = htons((WORD)port); saddr.sin_port = htons((WORD)bbs->port);
if(connect(conn_socket, (struct sockaddr *)&saddr, sizeof(saddr))) { if(connect(conn_socket, (struct sockaddr *)&saddr, sizeof(saddr))) {
char str[LIST_ADDR_MAX+20]; char str[LIST_ADDR_MAX+20];
conn_close(); conn_close();
uifc.pop(NULL); uifc.pop(NULL);
sprintf(str,"Cannot connect to %s!",addr); sprintf(str,"Cannot connect to %s!",bbs->addr);
uifcmsg(str, "`Unable to connect`\n\n" uifcmsg(str, "`Unable to connect`\n\n"
"Cannot connect to the remote system... it is down or unreachable."); "Cannot connect to the remote system... it is down or unreachable.");
return(-1); return(-1);
...@@ -273,9 +281,9 @@ int conn_connect(char *addr, int port, char *ruser, char *passwd, char *syspass, ...@@ -273,9 +281,9 @@ int conn_connect(char *addr, int port, char *ruser, char *passwd, char *syspass,
conn_send("",1,1000); conn_send("",1,1000);
conn_send(passwd,strlen(passwd)+1,1000); conn_send(passwd,strlen(passwd)+1,1000);
conn_send(ruser,strlen(ruser)+1,1000); conn_send(ruser,strlen(ruser)+1,1000);
if(speed) { if(bbs->bpsrate) {
char sbuf[30]; char sbuf[30];
sprintf(sbuf, "ansi-bbs/%d", speed); sprintf(sbuf, "ansi-bbs/%d", bbs->bpsrate);
conn_send(sbuf, strlen(sbuf)+1,1000); conn_send(sbuf, strlen(sbuf)+1,1000);
} }
......
...@@ -5,6 +5,8 @@ ...@@ -5,6 +5,8 @@
#include "sockwrap.h" #include "sockwrap.h"
#include "bbslist.h"
extern SOCKET conn_socket; extern SOCKET conn_socket;
extern char *conn_types[]; extern char *conn_types[];
extern int conn_ports[]; extern int conn_ports[];
...@@ -22,7 +24,7 @@ enum { ...@@ -22,7 +24,7 @@ enum {
int conn_recv(char *buffer, size_t buflen, unsigned int timeout); int conn_recv(char *buffer, size_t buflen, unsigned int timeout);
int conn_send(char *buffer, size_t buflen, unsigned int timeout); int conn_send(char *buffer, size_t buflen, unsigned int timeout);
int conn_connect(char *addr, int port, char *ruser, char *passwd, char *syspass, int conn_type, int speed); int conn_connect(struct bbslist *bbs);
int conn_close(void); int conn_close(void);
BOOL conn_is_connected(void); BOOL conn_is_connected(void);
void conn_settype(int type); void conn_settype(int type);
......
...@@ -419,9 +419,6 @@ int main(int argc, char **argv) ...@@ -419,9 +419,6 @@ int main(int argc, char **argv)
else else
FULLPATH(path,inpath,sizeof(path)); FULLPATH(path,inpath,sizeof(path));
atexit(uifcbail); atexit(uifcbail);
#ifdef USE_CRYPTLIB
atexit(exit_crypt);
#endif
scrollback_buf=malloc(80*2*settings.backlines); /* Terminal width is *always* 80 cols */ scrollback_buf=malloc(80*2*settings.backlines); /* Terminal width is *always* 80 cols */
if(scrollback_buf==NULL) { if(scrollback_buf==NULL) {
...@@ -458,7 +455,7 @@ int main(int argc, char **argv) ...@@ -458,7 +455,7 @@ int main(int argc, char **argv)
load_font_files(); load_font_files();
while(bbs!=NULL || (bbs=show_bbslist(BBSLIST_SELECT))!=NULL) { while(bbs!=NULL || (bbs=show_bbslist(BBSLIST_SELECT))!=NULL) {
gettextinfo(&txtinfo); /* Current mode may have changed while in show_bbslist() */ gettextinfo(&txtinfo); /* Current mode may have changed while in show_bbslist() */
if(!conn_connect(bbs->addr,bbs->port,bbs->reversed?bbs->password:bbs->user,bbs->reversed?bbs->user:bbs->password,bbs->syspass,bbs->conn_type,bbs->bpsrate)) { if(!conn_connect(bbs)) {
/* ToDo: Update the entry with new lastconnected */ /* ToDo: Update the entry with new lastconnected */
/* ToDo: Disallow duplicate entries */ /* ToDo: Disallow duplicate entries */
bbs->connected=time(NULL); bbs->connected=time(NULL);
...@@ -499,8 +496,12 @@ int main(int argc, char **argv) ...@@ -499,8 +496,12 @@ int main(int argc, char **argv)
sprintf(str,"SyncTERM - %s",bbs->name); sprintf(str,"SyncTERM - %s",bbs->name);
settitle(str); settitle(str);
term.nostatus=bbs->nostatus; term.nostatus=bbs->nostatus;
if(drawwin()) if(drawwin()) {
#ifdef USE_CRYPTLIB
atexit(exit_crypt);
#endif
return(1); return(1);
}
if(log_fp==NULL && bbs->logfile[0]) if(log_fp==NULL && bbs->logfile[0])
log_fp=fopen(bbs->logfile,"a"); log_fp=fopen(bbs->logfile,"a");
if(log_fp!=NULL) { if(log_fp!=NULL) {
...@@ -550,6 +551,9 @@ int main(int argc, char **argv) ...@@ -550,6 +551,9 @@ int main(int argc, char **argv)
#ifdef _WINSOCKAPI_ #ifdef _WINSOCKAPI_
if(WSAInitialized && WSACleanup()!=0) if(WSAInitialized && WSACleanup()!=0)
fprintf(stderr,"!WSACleanup ERROR %d",ERROR_VALUE); fprintf(stderr,"!WSACleanup ERROR %d",ERROR_VALUE);
#endif
#ifdef USE_CRYPTLIB
atexit(exit_crypt);
#endif #endif
return(0); return(0);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment