Skip to content
Snippets Groups Projects
Commit a048dc25 authored by Deucе's avatar Deucе :ok_hand_tone4:
Browse files

Some menu/help cleanup

More documentation of stuff.
parent 77260f9d
No related branches found
No related tags found
No related merge requests found
Pipeline #6099 passed
...@@ -304,3 +304,164 @@ This menu lists all the entries in the two dialing directory files. If ...@@ -304,3 +304,164 @@ This menu lists all the entries in the two dialing directory files. If
you move the bar over one and press <Enter>, it will connect you to the you move the bar over one and press <Enter>, it will connect you to the
highlighted system as configured in the entry. highlighted system as configured in the entry.
To add a new entry, go to the bottom of the list (by pressing end) and
select the blank entry at the bottom. A window will pop up asking for
the Name of the entry. This name must not already exist in the personal
dialing directory.
Next you will be prompted for the protocol to use. Options include:
RLogin: Uses the historic RFC1282 RLogin protocol without OOB data. This
is an obsolete, unencrypted protocol that can allow auto-login, and
is 8-bit clean (unlike telnet). It is very simple. Instead of the
local username, the users password is sent.
RLogin Reversed: Some RLogin servers that support password auto-login have
reversed the remote and local username fields. This allows connecting
to these servers.
Telnet: Uses the historic and highly complex telnet protocol. This is an
obsolete, unencrypted protocol and is not 8-bit clean and predates
TCP/IP. It has been the source of many security vulnerabilities over
the fifty years or so it has existed. Historically, it has been the
most common way to connect to a remote system as a terminal, so is
widely supported.
Raw: A raw 8-bit clean TCP connection. This is often what retro BBSs
actually support when they say they support telnet.
SSH: The Secure Shell v2 protocol. This is the modern replacement for both
telnet and rlogin, and is widely supported. This is encrypted and
performs user and server authentication as part of the protocol instead
of inline. SyncTERM supports authenticating with both a password and
a public key.
SSH (no auth): The SSH protocol, but will not send a password or public
key. Used for auto-login systems where the user name by itself is
sufficient.
Modem: SyncTERM can directly control a modem for making outgoing calls.
Serial: Direct communication with a serial port.
3-wire: Serial, but with only transmit and receive. In this mode, there
is no way to detect if the remote has hung up and there is no flow
control, so bytes can easily be lost. This is primarily used for
communicating with embedded hardware, and not BBSs.
Shell: Runs a shell in the terminal.
MBBS GHost: The MajorBBS 'GHost' protocol.
TelnetS: Telnet over TLS. All the drawbacks of the telnet protocol, but
at least it's encrypted.
Finally, you will be promted for the "address". This is the DNS addres, IP
address, serial port, or command to connect to.
Ones these three pieces of information are entered, the entry is created
and you are returned to the Directory. To further modify the settings,
you can press F2 to enter the Edit Directory Entry menu.
Edit Directory Entry
In this menu, you can modify all the connection settings for an entry.
The exact contents of this menu will vary a bit by connection type, but
most of the options are the same or silimar.
Name: The name of the entry.
Phone Number (Modem only): The phone number to dial.
Device Name (Serial and 3-wire only): The device name to open.
Command (Shell only): The command to run (usually a shell such as
/bin/sh)
Address: IP address or host name
Connection Type: Protocol to use. See pervious section
Flow Control (Modem, Serial, and 3-wire): The type of flow control
to use. RTC/CTS, XON/XOFF, Both, or None
TCP Port: The TCP port to connect to.
SSH Username (SSH (no auth)): The username to send for the SSH
protocol. This may not be the same as the BBS username.
BBS Username (SSH (no auth)): The username to send when ALT-L is entered.
BBS Password (SSH (no auth)): The password to send on ALT-L.
Username: The user name to send. Used by SSH, RLogin, and GHost.
For other protocols, send when ALT-L is pressed.
Password: The password to send.
GHost Program (GHost): The program name to send to the remote.
System Password: An additional password that can be sent after the
first ALT-L using successive ALT-Ls.
MBBS GHost
"GHost" in Syncterm refers to the "Galacticomm Host Program" (called Ghost)
that was included in Major BBS and Worldgroup (MBBS/WG) that allowed a Sysop
to connect another (DOS-based) PC to the BBS by use of a null modem cable.
This was a way for a MBBS/WG Sysop to offer DOS doors, something that wasn't
normally possible.
The functions of the Ghost software itself are beyond the scope of Syncterm,
and you should consult the MBBS/WG Ghost documentation for operation details.
However, broadly speaking, it worked like this:
1) MBBS/WG would send a signal down the null modem cable to alert the DOS PC
(running Ghost) that it wanted to run a door.
2) Using a simple protocol, MBBS/WG would transmit information required to
run the door (username, time remaining, whether ANSI-BBS graphics were
supported, etc) to Ghost.
3) Ghost would then launch the door in DOS, using a batch file to call Ghost
back once the door exited to wait for the next request.
While few people are connecting DOS-based PC's to anything by null modem
cables anymore, the Ghost protocol (as offered in Syncterm) is still useful
because it's a way to run DOS doors inside a virtual machine and expose them
outside of that virtual machine. The idea being that the VM would configure
a serial port as some kind of network passthrough, so when Syncterm connects,
it's passed through to the VM and then Ghost.
One use case for this is to offer DOS doors in environments where it would
normally be difficult or impossible. For example, a UNIX user could run
Syncterm on a remote system in curses mode, where it would then connect to
a VM and launch a DOS door via Ghost. This would all be presented to the
end UNIX user in a seamless way, so all they would see is the door startup.
The Ghost protocol consists of a single line starting with 'MBBS:',
terminated with \r\n, and contains five parameters:
MBBS: PROGRAM PROTOCOL 'USER' TIME GR
You don't need to worry about sending this since Syncterm will format it
for you based on the Syncterm configuration options. But it is helpful
to understand how various Syncterm options will translate to the Ghost
protocol parameters:
PROGRAM: The name of the DOS door/software to ask the Ghost side to run.
Configured in Syncterm in the 'GHost Program' field of a directory entry,
or after the final slash in a ghost:// style URL.
For example: ghost://user@203.0.113.64/program
PROTOCOL: Always set to 2. Not configurable in Syncterm.
USER: Username of the person connecting. Configured in Syncterm in the
'username' field of a directory entry, or before the '@' in a ghost://
style URL. For example: ghost://user@203.0.113.64/program
TIME: Amount of time the user has remaining. Always set to 999. Not
configurable in Syncterm.
GR: Set to GR (for "GRaphics", meaning ANSI-BBS support) or NG
(for "No Graphics"). Always set to GR. Not configurable in Syncterm.
...@@ -287,11 +287,13 @@ static char *conn_type_help = "`Connection Type`\n\n" ...@@ -287,11 +287,13 @@ static char *conn_type_help = "`Connection Type`\n\n"
"`Telnet`...........: Use more common Telnet protocol\n" "`Telnet`...........: Use more common Telnet protocol\n"
"`Raw`..............: Make a raw TCP socket connection\n" "`Raw`..............: Make a raw TCP socket connection\n"
"`SSH`..............: Connect using the Secure Shell (SSH-2) protocol\n" "`SSH`..............: Connect using the Secure Shell (SSH-2) protocol\n"
"`SSH (no auth)`....: SSH-2, but will not send password or public key\n"
"`Modem`............: Connect using a dial-up modem\n" "`Modem`............: Connect using a dial-up modem\n"
"`Serial`...........: Connect directly to a serial communications port\n" "`Serial`...........: Connect directly to a serial communications port\n"
"`3-wire (no RTS)`..: As with Serial, but lower RTS\n" "`3-wire (no RTS)`..: As with Serial, but lower RTS\n"
"`Shell`............: Connect to a local PTY (*nix only)\n" "`Shell`............: Connect to a local PTY (*nix only)\n"
"`MBBS GHost`.......: Communicate using the Major BBS 'GHost' protocol\n"; "`MBBS GHost`.......: Communicate using the Major BBS 'GHost' protocol\n"
"`TelnetS`..........: Telnet over TLS\n";
static char *YesNo[3] = {"Yes", "No", ""}; static char *YesNo[3] = {"Yes", "No", ""};
...@@ -1069,6 +1071,7 @@ edit_list(struct bbslist **list, struct bbslist *item, char *listpath, int isdef ...@@ -1069,6 +1071,7 @@ edit_list(struct bbslist **list, struct bbslist *item, char *listpath, int isdef
str_list_t inifile; str_list_t inifile;
char tmp[LIST_NAME_MAX + 1]; char tmp[LIST_NAME_MAX + 1];
char *itemname; char *itemname;
char *tmpptr;
for (i = 0; i < sizeof(opt) / sizeof(opt[0]); i++) for (i = 0; i < sizeof(opt) / sizeof(opt[0]); i++)
opts[i] = opt[i]; opts[i] = opt[i];
...@@ -1114,7 +1117,13 @@ edit_list(struct bbslist **list, struct bbslist *item, char *listpath, int isdef ...@@ -1114,7 +1117,13 @@ edit_list(struct bbslist **list, struct bbslist *item, char *listpath, int isdef
fc_str(opt[i++], item->flow_control); fc_str(opt[i++], item->flow_control);
else if (item->conn_type != CONN_TYPE_SHELL) else if (item->conn_type != CONN_TYPE_SHELL)
sprintf(opt[i++], "TCP Port %hu", item->port); sprintf(opt[i++], "TCP Port %hu", item->port);
if (item->conn_type == CONN_TYPE_SSHNA) { if (item->conn_type == CONN_TYPE_MBBS_GHOST) {
printf_trunc(opt[i], sizeof(opt[i]), "Username %s", item->user);
i++;
sprintf(opt[i++], "GHost Program %s", item->password);
sprintf(opt[i++], "System Password %s", item->syspass[0] ? "********" : "<none>");
}
else if (item->conn_type == CONN_TYPE_SSHNA) {
printf_trunc(opt[i], sizeof(opt[i]), "SSH Username %s", item->user); printf_trunc(opt[i], sizeof(opt[i]), "SSH Username %s", item->user);
i++; i++;
sprintf(opt[i++], "BBS Username %s", item->password); sprintf(opt[i++], "BBS Username %s", item->password);
...@@ -1145,7 +1154,8 @@ edit_list(struct bbslist **list, struct bbslist *item, char *listpath, int isdef ...@@ -1145,7 +1154,8 @@ edit_list(struct bbslist **list, struct bbslist *item, char *listpath, int isdef
sprintf(opt[i++], "RIP %s", rip_versions[item->rip]); sprintf(opt[i++], "RIP %s", rip_versions[item->rip]);
sprintf(opt[i++], "Force LCF Mode %s", item->force_lcf ? "Yes" : "No"); sprintf(opt[i++], "Force LCF Mode %s", item->force_lcf ? "Yes" : "No");
sprintf(opt[i++], "Yellow is Yellow %s", item->yellow_is_yellow ? "Yes" : "No"); sprintf(opt[i++], "Yellow is Yellow %s", item->yellow_is_yellow ? "Yes" : "No");
sprintf(opt[i++], "SFTP Public Key %s", item->sftp_public_key ? "Yes" : "No"); if (item->conn_type == CONN_TYPE_SSH || item->conn_type == CONN_TYPE_SSHNA)
sprintf(opt[i++], "SFTP Public Key %s", item->sftp_public_key ? "Yes" : "No");
opt[i][0] = 0; opt[i][0] = 0;
uifc.changes = 0; uifc.changes = 0;
...@@ -1190,6 +1200,10 @@ edit_list(struct bbslist **list, struct bbslist *item, char *listpath, int isdef ...@@ -1190,6 +1200,10 @@ edit_list(struct bbslist **list, struct bbslist *item, char *listpath, int isdef
"~ Yellow Is Yellow ~\n" "~ Yellow Is Yellow ~\n"
" Make the dark yellow colour actually yellow instead of the brown\n" " Make the dark yellow colour actually yellow instead of the brown\n"
" used in IBM CGA monitors\n\n" " used in IBM CGA monitors\n\n"
"~ SFTP Public Key ~ (if applicable)\n"
" Automatically append the SSH public key to the\n"
" .ssh/authorized_keys file on the remote system using the SFTP\n"
" protocol."
; ;
} }
else { else {
...@@ -1380,16 +1394,23 @@ edit_list(struct bbslist **list, struct bbslist *item, char *listpath, int isdef ...@@ -1380,16 +1394,23 @@ edit_list(struct bbslist **list, struct bbslist *item, char *listpath, int isdef
iniSetString(&inifile, itemname, "UserName", item->user, &ini_style); iniSetString(&inifile, itemname, "UserName", item->user, &ini_style);
break; break;
case 5: case 5:
if (item->conn_type == CONN_TYPE_SSHNA) { if (item->conn_type == CONN_TYPE_MBBS_GHOST) {
uifc.helpbuf = "`GHost Program`\n\n"
"Enter the program name to be sent.";
tmpptr = "GHost Program";
}
else if (item->conn_type == CONN_TYPE_SSHNA) {
uifc.helpbuf = "`BBS Username`\n\n" uifc.helpbuf = "`BBS Username`\n\n"
"Enter the username to be sent for auto-login (ALT-L)."; "Enter the username to be sent for auto-login (ALT-L).";
tmpptr = "BBS Username";
} }
else { else {
uifc.helpbuf = "`Password`\n\n" uifc.helpbuf = "`Password`\n\n"
"Enter your password for auto-login.\n" "Enter your password for auto-login.\n"
"For SSH, this must be the SSH password if it exists.\n"; "For SSH, this must be the SSH password if it exists.\n";
tmpptr = "Password";
} }
uifc.input(WIN_MID | WIN_SAV, 0, 0, "Password", item->password, MAX_PASSWD_LEN, K_EDIT); uifc.input(WIN_MID | WIN_SAV, 0, 0, tmpptr, item->password, MAX_PASSWD_LEN, K_EDIT);
check_exit(false); check_exit(false);
iniSetString(&inifile, itemname, "Password", item->password, &ini_style); iniSetString(&inifile, itemname, "Password", item->password, &ini_style);
break; break;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment