Compare commits

..

No commits in common. "99d48344b775b5eb0c38729c09eccb897ddb0b95" and "21e3dccbac2c68f83170d32b7d660e351a0beb39" have entirely different histories.

47 changed files with 5642 additions and 3652 deletions

2129
6pack.c

File diff suppressed because it is too large Load Diff

12
ARDOP.c
View File

@ -880,17 +880,6 @@ static size_t ExtProc(int fn, int port, PDATAMESSAGE buff)
} }
} }
// Check ATTACH time limit
if (STREAM->Attached)
{
if (STREAM->AttachTime && TNC->AttachTimeLimit && time(NULL) > (TNC->AttachTimeLimit + STREAM->AttachTime))
{
STREAM->ReportDISC = 1;
STREAM->AttachTime = 0;
}
}
if (TNC->ARDOPCommsMode != 'T') // S I or E if (TNC->ARDOPCommsMode != 'T') // S I or E
{ {
ARDOPSCSCheckRX(TNC); ARDOPSCSCheckRX(TNC);
@ -1201,7 +1190,6 @@ static size_t ExtProc(int fn, int port, PDATAMESSAGE buff)
Debugprintf("ARDOP New Attach Stream %d DEDStream %d", Stream, STREAM->DEDStream); Debugprintf("ARDOP New Attach Stream %d DEDStream %d", Stream, STREAM->DEDStream);
STREAM->Attached = TRUE; STREAM->Attached = TRUE;
STREAM->AttachTime = time(NULL);
calllen = ConvFromAX25(TNC->PortRecord->ATTACHEDSESSIONS[Stream]->L4USER, TNC->Streams[Stream].MyCall); calllen = ConvFromAX25(TNC->PortRecord->ATTACHEDSESSIONS[Stream]->L4USER, TNC->Streams[Stream].MyCall);
TNC->Streams[Stream].MyCall[calllen] = 0; TNC->Streams[Stream].MyCall[calllen] = 0;

View File

@ -158,7 +158,6 @@ char MailPage[] = "<html><head><title>%s's BBS Web Server</title>"
"<td><a href=/Mail/Wel?%s>Welcome Msgs & Prompts</a></td>" "<td><a href=/Mail/Wel?%s>Welcome Msgs & Prompts</a></td>"
"<td><a href=/Mail/HK?%s>Housekeeping</a></td>" "<td><a href=/Mail/HK?%s>Housekeeping</a></td>"
"<td><a href=/Mail/WP?%s>WP Update</a></td>" "<td><a href=/Mail/WP?%s>WP Update</a></td>"
"<td><a href=/Webmail>WebMail</a></td>"
"<td><a href=/>Node Menu</a></td>" "<td><a href=/>Node Menu</a></td>"
"</tr></table>"; "</tr></table>";
@ -179,7 +178,6 @@ char RefreshMainPage[] = "<html><head>"
"<td><a href=/Mail/Wel?%s>Welcome Msgs & Prompts</a></td>" "<td><a href=/Mail/Wel?%s>Welcome Msgs & Prompts</a></td>"
"<td><a href=/Mail/HK?%s>Housekeeping</a></td>" "<td><a href=/Mail/HK?%s>Housekeeping</a></td>"
"<td><a href=/Mail/WP?%s>WP Update</a></td>" "<td><a href=/Mail/WP?%s>WP Update</a></td>"
"<td><a href=/Webmail>WebMail</a></td>"
"<td><a href=/>Node Menu</a></td>" "<td><a href=/>Node Menu</a></td>"
"</tr></table>"; "</tr></table>";
@ -1889,7 +1887,6 @@ VOID SaveFwdCommon(struct HTTPConnectionInfo * Session, char * MsgPtr, char * Re
GetCheckBox(input, "WarnNoRoute=", &WarnNoRoute); GetCheckBox(input, "WarnNoRoute=", &WarnNoRoute);
GetCheckBox(input, "LocalTime=", &Localtime); GetCheckBox(input, "LocalTime=", &Localtime);
GetCheckBox(input, "SendPtoMultiple=", &SendPtoMultiple); GetCheckBox(input, "SendPtoMultiple=", &SendPtoMultiple);
GetCheckBox(input, "FourCharCont=", &FOURCHARCONT);
// Reinitialise Aliases // Reinitialise Aliases
@ -2719,7 +2716,6 @@ VOID SendFwdMainPage(char * Reply, int * RLen, char * Key)
(WarnNoRoute) ? CHKD : UNC, (WarnNoRoute) ? CHKD : UNC,
(Localtime) ? CHKD : UNC, (Localtime) ? CHKD : UNC,
(SendPtoMultiple) ? CHKD : UNC, (SendPtoMultiple) ? CHKD : UNC,
(FOURCHARCONT) ? CHKD : UNC,
ALIASES); ALIASES);
} }

View File

@ -213,7 +213,6 @@ BOOL UserCantKillT = FALSE;
typedef int (WINAPI FAR *FARPROCX)(); typedef int (WINAPI FAR *FARPROCX)();
FARPROCX pRunEventProgram; FARPROCX pRunEventProgram;
FARPROCX pGetPortFrequency;
int RunEventProgram(char * Program, char * Param); int RunEventProgram(char * Program, char * Param);
@ -9681,7 +9680,6 @@ VOID SaveConfig(char * ConfigName)
SaveIntValue(group, "WarnNoRoute", WarnNoRoute); SaveIntValue(group, "WarnNoRoute", WarnNoRoute);
SaveIntValue(group, "Localtime", Localtime); SaveIntValue(group, "Localtime", Localtime);
SaveIntValue(group, "SendPtoMultiple", SendPtoMultiple); SaveIntValue(group, "SendPtoMultiple", SendPtoMultiple);
SaveIntValue(group, "FOURCHARCONT", FOURCHARCONT);
SaveMultiStringValue(group, "FWDAliases", AliasText); SaveMultiStringValue(group, "FWDAliases", AliasText);
@ -10118,8 +10116,6 @@ BOOL GetConfig(char * ConfigName)
ReaddressReceived = GetIntValue(group, "ReaddressReceived"); ReaddressReceived = GetIntValue(group, "ReaddressReceived");
WarnNoRoute = GetIntValue(group, "WarnNoRoute"); WarnNoRoute = GetIntValue(group, "WarnNoRoute");
SendPtoMultiple = GetIntValue(group, "SendPtoMultiple"); SendPtoMultiple = GetIntValue(group, "SendPtoMultiple");
FOURCHARCONT = GetIntValue(group, "FOURCHARCONT");
Localtime = GetIntValue(group, "Localtime"); Localtime = GetIntValue(group, "Localtime");
AliasText = GetMultiStringValue(group, "FWDAliases"); AliasText = GetMultiStringValue(group, "FWDAliases");
GetStringValue(group, "BBSName", BBSName); GetStringValue(group, "BBSName", BBSName);
@ -10592,24 +10588,8 @@ int Connected(int Stream)
if (SendNewUserMessage) if (SendNewUserMessage)
{ {
int64_t LongFreq = Freq;
char * MailBuffer = malloc(100); char * MailBuffer = malloc(100);
Length += sprintf(MailBuffer, "New User %s Connected to Mailbox on Port %d Freq %d Mode %d\r\n", callsign, port, Freq, Mode);
if (Freq == 0 && port)
{
// Get Port Freq if available
char FreqString[256];
#ifdef WIN32
if (pGetPortFrequency)
LongFreq = pGetPortFrequency(port, FreqString);
#else
LongFreq = GetPortFrequency(port, FreqString);
#endif
}
Length += sprintf(MailBuffer, "New User %s Connected to Mailbox on Port %d Freq %d Mode %ld\r\n", callsign, port, LongFreq, Mode);
sprintf(Title, "New User %s", callsign); sprintf(Title, "New User %s", callsign);
@ -11762,258 +11742,303 @@ BOOL CheckforMIME(SocketConn * sockptr, char * Msg, char ** Body, int * MsgLen);
#include <sys/wait.h> #include <sys/wait.h>
#include <signal.h> #include <signal.h>
// G8BPQ Version of Steve G7TAJ's code typedef struct _POPENRET
int pgret = 9999;
int pindex = 0;
void sigchild_handler(int sig , siginfo_t * siginfo, void * ucontext)
{ {
/* • SIGCHLD fills in si_pid, si_uid, si_status, si_utime, and FILE * fp;
si_stime, providing information about the child. The si_pid pid_t pid;
field is the process ID of the child; si_uid is the child's } POPENRET;
real user ID. The si_status field contains the exit status of
the child (if si_code is CLD_EXITED), or the signal number /*
that caused the process to change state. * Check if the PG is still running after 5 sec
* if so, kill it
*/ */
// printf("SIGCHLD PID %d Code %d status %d\n", siginfo->si_pid, siginfo->si_code, siginfo->si_status); void run_pgTimeoutThread( pid_t process )
pgret = siginfo->si_status; {
printf("watchdog thread: PID of subprocess: %d\n", process);
fflush(stdout);
Sleep(5000);
// if still running PID (?) then kill.
if ( getpgid(process) >= 0 )
{
Debugprintf("watchdog thread: Still running, so killing %d ... ", process);
if ( kill( -process, SIGKILL ) == 0 )
Debugprintf("Killed PG watchdog Process %d", process);
else
Debugprintf("Failed to kill PG watchdog Process %d", process);
}
Debugprintf("watchdog thread: PID=%d Exit", process);
fflush(stdout);
//return;
} }
void run_pg(CIRCUIT * conn, struct UserInfo * user) //https://sources.debian.org/src/cron/3.0pl1-45/popen.c/
POPENRET my_popen(char *program, char *type, CIRCUIT *conn)
{ {
register char *cp; register char *cp;
FILE *iop; FILE *iop;
int argc, pdes[2]; int argc, pdes[2];
pid_t pid; pid_t pid;
POPENRET PRET;
pgret = 9999; if (*type != 'r' && *type != 'w' || type[1])
return(PRET);
int index = user->Temp->PG_INDEX; if (pipe(pdes) < 0)
return(PRET);
iop = NULL; iop = NULL;
switch(pid = fork()) {
conn->InputBuffer[conn->InputLen] = 0;
strlop(conn->InputBuffer, 13);
conn->InputLen = 0;
if (!user->Temp->RUNPGPARAMS)
user->Temp->RUNPGPARAMS = (RUNPGARGS_PTR) zalloc(sizeof(RUNPGARGS));
user->Temp->RUNPGPARAMS->user = user;
user->Temp->RUNPGPARAMS->conn = conn;
strncpy(user->Temp->RUNPGPARAMS->InputBuffer, conn->InputBuffer, 80); // needs to be length of actual input!
user->Temp->RUNPGPARAMS->Len = conn->InputLen;
if (conn == 0 || user == 0)
{
Debugprintf("run_pg conn or user null");
return;
}
// Build command line. Parmas are:
// - Callsign (format as F6FBB-8).
// - Level number (0 is the first time, up to 99).
// - Flags of the user (binary number as user`s mask of INIT.SRV).
// - Record number of the user in INF.SYS.
// - Received data (each word is a new argument).
// BPQ doesn't support params 3 and 4 (but may supply copy of user record later)
char cmd[20];
char *ptr = cmd;
char pg_dir[MAX_PATH];
char log_file[50] = "pg.log";
char call[10];
char data[80];
char line[80];
size_t bufsize = 80;
strcpy(pg_dir, BaseDir);
strcat(pg_dir, "/PG/");
sprintf(cmd, "./%s", SERVERLIST[user->Temp->PG_SERVER][1] );
sprintf(line, "%s%s", pg_dir, SERVERLIST[user->Temp->PG_SERVER][1]);
// printf("PG Prog %s%s\n", pg_dir, SERVERLIST[user->Temp->PG_SERVER][1]);
// check file exists and is executable
if (access(line, F_OK) == -1 || access(line, X_OK) == -1)
{
Debugprintf("%s FileNotFound || not executable", line);
BBSputs(conn, "Error running PG Server\r");
conn->InputMode=0;
SendPrompt(conn, user);
return;
}
strcpy(call, conn->UserPointer->Call);
index = user->Temp->PG_INDEX;
// remove ';' from input for security reasons
ptr = strchr(user->Temp->RUNPGPARAMS->InputBuffer, ';');
if (ptr)
*ptr = '\0';
sprintf(data, "%s %d 0 0 %s", call, index, user->Temp->RUNPGPARAMS->InputBuffer);
// printf("PG Params %s\n", data);
conn->InputBufferLen = 0;
char buf[256];
sprintf (buf, "%s %s", line, data); // buf is command to exec
// printf ("PG exec cmd %s\n", buf);
// Create pipe for reading PG program STDOUT
if (pipe(pdes) < 0)
{
Debugprintf("run_pg pipe failed");
BBSputs(conn, "Error running PG Server (pipe() failed)\r");
conn->InputMode=0;
SendPrompt(conn, user);
return;
}
// We will just fork and execute program. For now don't create a new thread
// Trap sigchild so we can tell when it exits and get return code
struct sigaction act;
memset(&act, 0, sizeof(struct sigaction));
act.sa_flags = SA_RESETHAND | SA_SIGINFO; // Restore default handler when called
act.sa_sigaction = sigchild_handler;
sigaction(SIGCHLD, &act, NULL);
switch(pid = fork())
{
case -1: /* error */ case -1: /* error */
(void)close(pdes[0]); (void)close(pdes[0]);
(void)close(pdes[1]); (void)close(pdes[1]);
Debugprintf("run_pg fork failed"); return PRET;
BBSputs(conn, "Error running PG Server (fork() failed)\r");
conn->InputMode=0;
SendPrompt(conn, user);
return;
case 0: /* child */ case 0: /* child */
if (*type == 'r') {
if (pdes[1] != 1) if (pdes[1] != 1) {
{ dup2(pdes[1], 1);
dup2(pdes[1], 1); dup2(pdes[1], 2);
dup2(pdes[1], 2); (void)close(pdes[1]);
}
(void)close(pdes[0]);
} else {
if (pdes[0] != 0) {
dup2(pdes[0], 0);
(void)close(pdes[0]);
}
(void)close(pdes[1]); (void)close(pdes[1]);
} }
(void)close(pdes[0]); setpgid(-pid,pid);
char *args[] = {"sh", "-c", program, NULL};
setpgid(0, pid); execve("/bin/sh", args, NULL);
char *args[] = {"sh", "-c", buf, NULL};
execve("/bin/sh", args, NULL);
_exit(1); _exit(1);
} }
/* parent */ /* parent */
// printf("child PID %d\n", pid); _beginthread((void (*)(void *))run_pgTimeoutThread, 0, (VOID *) pid );
struct timespec duration; if (*type == 'r') {
duration.tv_sec = 5; iop = fdopen(pdes[0], type);
duration.tv_nsec = 0; (void)close(pdes[1]);
} else {
nanosleep(&duration, &duration); // Will be interrupted by SIGCHLD iop = fdopen(pdes[1], type);
(void)close(pdes[0]);
// printf("PG retcode %d\n", pgret);
if (pgret == 9999) // Process still running
{
BBSputs(conn, "PG Program Looping\r");
kill(pid, SIGKILL);
user->Temp->PG_INDEX = 0;
conn->InputMode=0;
SendPrompt(conn, user);
return;
} }
if (pgret > 127)
{
// Probably killed by signal
int err = pgret - 128;
char errmsg[256];
sprintf(errmsg, "PG Signal %s received\n", strsignal(err));
BBSputs(conn, errmsg);
user->Temp->PG_INDEX = 0;
conn->InputMode=0;
SendPrompt(conn, user);
return;
}
// Send STDOUT from PG program to BBS user
iop = fdopen(pdes[0], "r");
(void)close(pdes[1]);
char buffer[128]; char buffer[128];
while (fgets(buffer, sizeof(buffer), iop) != NULL) while (fgets(buffer, sizeof(buffer), iop) != NULL)
{ {
BBSputs(conn, buffer); BBSputs(conn, buffer);
buffer[0] = '\0'; buffer[0] = '\0';
} }
PRET.fp = iop;
PRET.pid= pid;
switch (pgret) return(PRET);
}
int
my_pclose( POPENRET pret )
{
register int fdes;
sigset_t omask, mask;
int stat_loc;
pid_t pid;
FILE * iop = pret.fp;
fdes = fileno(iop);
(void)fclose(iop);
sigemptyset(&mask);
sigaddset(&mask, SIGQUIT);
sigaddset(&mask, SIGINT);
sigaddset(&mask, SIGHUP);
sigprocmask(SIG_BLOCK, &mask, &omask);
pid = waitpid(pret.pid, &stat_loc, 0);
sigprocmask(SIG_SETMASK, &omask, NULL);
if (pid == -1 || !WIFEXITED(stat_loc))
return -1;
return stat_loc;
}
int run_server (char **cmd, int nb_cmd, int mode, char *log, char *pgdir, char *data, CIRCUIT * conn)
{
int i;
int ret = 0;
FILE *fp;
POPENRET PRET;
pid_t pid;
char *ptr;
char file[256];
char buf[256];
char dir[256];
char arg[256];
if (mode)
// sprintf (file, " >>%s", log);
// sprintf (file, " | tee -a %s", log);
sprintf(file, "" );
else
sprintf (file, " </dev/null");
if (pgdir)
{ {
case -1: // ERROR or forced closed /* remove ';' security reasons */
case 0: ptr = strchr(pgdir, ';');
index=0; // Goodbye/Exit if (ptr)
conn->InputMode=0; *ptr = '\0';
SendPrompt(conn, user);
break;
case 1:
index++; // inc & keep in PG
break;
case 2: sprintf (dir, "cd %s ; ", pgdir);
}
index=0; // disconnect else
conn->InputMode=0; *dir = '\0';
Disconnect(conn->BPQStream);
break;
case 3: *arg = '\0';
Debugprintf("data->BBS & end");
break;
case 4: if (data)
Debugprintf("data->BBS and inc %d", pindex++); {
break; /* remove ';' security reasons */
case 5: ptr = strchr(data, ';');
Debugprintf("call no inc %d", pgret); if (ptr)
break; *ptr = '\0';
default: sprintf (arg, " %s ", data);
BBSputs(conn, "PG unexexpected response\r"); }
user->Temp->PG_INDEX = 0;
for (i = 0; i < nb_cmd; i++)
{
/* remove ';' security reasons */
ptr = strchr(cmd[i], ';');
if (ptr)
*ptr = '\0';
sprintf (buf, "%s%s%s%s", dir, cmd[i], arg, file);
PRET = my_popen (buf, "r", conn);
if (PRET.fp == NULL)
Debugprintf ("Failed to run PG command %s\n", cmd[i] );
ret = my_pclose( PRET );
ret = ret >> 8;
if (verbose) {
Debugprintf ("Debug: command = {%s}\n", buf);
Debugprintf ("Debug: exit code = %d\n", ret);
}
/* fail-safe bypass if executable isn't found (exit code 127) (was ret ==127)*/
if (ret > 5) // should never be more than 5
ret = 0;
}
return ( ret );
}
void run_pg( CIRCUIT * conn, struct UserInfo * user )
{
if (!user->Temp->RUNPGPARAMS) {
user->Temp->RUNPGPARAMS = (RUNPGARGS_PTR) zalloc(sizeof(RUNPGARGS));
}
user->Temp->RUNPGPARAMS->user = user;
user->Temp->RUNPGPARAMS->conn = conn;
strncpy(user->Temp->RUNPGPARAMS->InputBuffer, conn->InputBuffer, 80); // needs to be length of actual input!
user->Temp->RUNPGPARAMS->Len = conn->InputLen;
if ( conn == 0 || user == 0 ) {
Debugprintf("run_pg null err");
return;
}
_beginthread((void (*)(void *))startrun_pgThread, 0, user->Temp->RUNPGPARAMS );
return;
}
void startrun_pgThread( RUNPGARGS_PTR Args ) {
CIRCUIT * conn = Args->conn;
struct UserInfo * user = Args->user;
char cmd[20];
sprintf( cmd, "./%s", SERVERLIST[user->Temp->PG_SERVER][1] );
char *ptr = cmd;
char pg_dir[MAX_PATH];
char log_file[50] = "pg.log";
char call[6];
char data[80];
char line[80];
char *line_ptr = line;
int index;
char *data_ptr = data;
size_t bufsize = 80;
strcpy(pg_dir, BaseDir);
strcat(pg_dir, "/PG/");
sprintf(line, "%s%s", pg_dir, SERVERLIST[user->Temp->PG_SERVER][1]);
// check file exists and is executable
if (access(line, F_OK) == -1 || access(line, X_OK) == -1) {
Debugprintf("%s FileNotFound || Not EXE", line);
BBSputs(conn, "Error running PG Server\r");
conn->InputMode=0; conn->InputMode=0;
SendPrompt(conn, user); SendPrompt(conn, user);
return; return;
} }
user->Temp->PG_INDEX = index; strcpy( call, conn->UserPointer->Call);
// sprintf( log_file, "%s-%d.log", call, conn);
index = user->Temp->PG_INDEX;
// printf("runpg return index = %d\n", index); line[0] = '\0';
int Len = Args->Len;
UCHAR * Msg = Args->InputBuffer;
strncpy( line, Msg, Len);
line[ Len - 1 ] = 0; //remove LF
sprintf( data, "%s %d 0 0 %s", call, index, line);
// clear the input queue
conn->InputLen = 0;
conn->InputBufferLen = 0;
int ret = run_server (&ptr, 1, 1, log_file, pg_dir, data_ptr, conn);
switch (ret)
{
case -1: // ERROR or forced closed
case 0: index=0; // Goodbye/Exit
conn->InputMode=0;
SendPrompt(conn, user);
break;
case 1: index++; // inc & keep in PG
break;
case 2: index=0; // disconnect
conn->InputMode=0;
Disconnect(conn->BPQStream);
break;
case 3: Debugprintf("data->BBS & end");
break;
case 4: Debugprintf("data->BBS and inc %d", index++);
break;
case 5: Debugprintf("call no inc %d", ret);
break;
}
user->Temp->PG_INDEX=index;
} }
/*---- G7TAJ END ----- */ /*---- G7TAJ END ----- */
#else #else
@ -12034,7 +12059,7 @@ void ReadFromPipe(void);
void run_pg( CIRCUIT * conn, struct UserInfo * user ) void run_pg( CIRCUIT * conn, struct UserInfo * user )
{ {
// Run PG program, read anything from program's stdout to the user // Run PG program, rend anything from program's stdout to the user
int retcode = -1; int retcode = -1;
SECURITY_ATTRIBUTES saAttr; SECURITY_ATTRIBUTES saAttr;
@ -12209,7 +12234,7 @@ void run_pg( CIRCUIT * conn, struct UserInfo * user )
case 4: case 4:
// Send Output to BBS - was done above // Send Output to BBS - was down above
break; break;
case 5: case 5:
@ -12613,6 +12638,7 @@ VOID ProcessLine(CIRCUIT * conn, struct UserInfo * user, char* Buffer, int len)
#endif #endif
return; return;
} }
if (_memicmp(Cmd, "Node", 4) == 0) if (_memicmp(Cmd, "Node", 4) == 0)
{ {
ExpandAndSendMessage(conn, SignoffMsg, LOG_BBS); ExpandAndSendMessage(conn, SignoffMsg, LOG_BBS);
@ -15731,10 +15757,8 @@ VOID GetPGConfig()
strcat(FN, "PG/PGList.txt"); strcat(FN, "PG/PGList.txt");
if ((file = fopen(FN, "r")) == NULL) if ((file = fopen(FN, "r")) == NULL)
{
return; return;
}
while(fgets(buf, 255, file) != NULL) while(fgets(buf, 255, file) != NULL)
{ {
if ( buf[0] == '#') if ( buf[0] == '#')
@ -15761,7 +15785,6 @@ VOID GetPGConfig()
break; break;
} }
NUM_SERVERS = n; NUM_SERVERS = n;
fclose(file); fclose(file);

View File

@ -0,0 +1,65 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioUserFile
ProjectType="Visual C++"
Version="8.00"
ShowAllFiles="false"
>
<Configurations>
<Configuration
Name="Debug|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="LAPTOP-Q6S4RP5Q"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
<Configuration
Name="Release|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="LAPTOP-Q6S4RP5Q"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
</Configurations>
</VisualStudioUserFile>

View File

@ -0,0 +1,65 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioUserFile
ProjectType="Visual C++"
Version="8.00"
ShowAllFiles="false"
>
<Configurations>
<Configuration
Name="Debug|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="SKIGACER"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
<Configuration
Name="Release|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="SKIGACER"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
</Configurations>
</VisualStudioUserFile>

Binary file not shown.

View File

@ -1133,11 +1133,6 @@
// Fix possible failure to update last listed count when user disconnects without using B command // Fix possible failure to update last listed count when user disconnects without using B command
// Add short random delay (<30 secs) when forward new Messages immediately is enabled (35) // Add short random delay (<30 secs) when forward new Messages immediately is enabled (35)
// Fix Connect Script IDLETIME (38) // Fix Connect Script IDLETIME (38)
// Add "Mail Mgmt" to Webmail menu bar and "WebMail" to Mail Mgmt Menu (39)
// Improve "New User" frequency determination (39)
// Allow selection of 2 or 4 character country codes for forward processing (39)
// Fix Send P to multiple BBS's when routing on HR (40)
// Rewrite PG server code on Lunux (41)
#include "bpqmail.h" #include "bpqmail.h"
#include "winstdint.h" #include "winstdint.h"
@ -1155,7 +1150,6 @@ FARPROCX pDllBPQTRACE;
FARPROCZ pGetLOC; FARPROCZ pGetLOC;
FARPROCX pRefreshWebMailIndex; FARPROCX pRefreshWebMailIndex;
FARPROCX pRunEventProgram; FARPROCX pRunEventProgram;
FARPROCX pGetPortFrequency;
BOOL WINE = FALSE; BOOL WINE = FALSE;
@ -1930,8 +1924,6 @@ BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
pGetLOC = GetProcAddress(ExtDriver,"_GetLOC@0"); pGetLOC = GetProcAddress(ExtDriver,"_GetLOC@0");
pRefreshWebMailIndex = GetProcAddress(ExtDriver,"_RefreshWebMailIndex@0"); pRefreshWebMailIndex = GetProcAddress(ExtDriver,"_RefreshWebMailIndex@0");
pRunEventProgram = GetProcAddress(ExtDriver,"_RunEventProgram@8"); pRunEventProgram = GetProcAddress(ExtDriver,"_RunEventProgram@8");
pGetPortFrequency = GetProcAddress(ExtDriver,"_GetPortFrequency@8");
if (pGetLOC) if (pGetLOC)
{ {

View File

@ -387,16 +387,16 @@ BEGIN
CONTROL "Warn if no route for P or T",IDC_WARNNOROUTE,"Button", CONTROL "Warn if no route for P or T",IDC_WARNNOROUTE,"Button",
BS_AUTOCHECKBOX | BS_LEFTTEXT | BS_MULTILINE | BS_AUTOCHECKBOX | BS_LEFTTEXT | BS_MULTILINE |
WS_TABSTOP,5,101,103,8 WS_TABSTOP,5,101,103,8
LTEXT "Aliases",IDC_STATIC,5,165,57,13 LTEXT "Aliases",IDC_STATIC,5,144,57,13
EDITTEXT IDC_ALIAS,4,183,99,81,ES_MULTILINE | ES_UPPERCASE | EDITTEXT IDC_ALIAS,4,162,99,81,ES_MULTILINE | ES_UPPERCASE |
ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_WANTRETURN | ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_WANTRETURN |
WS_VSCROLL WS_VSCROLL
CONTROL "Readdress Locally Input",IDC_READDRESSLOCAL,"Button", CONTROL "Readdress Locally Input",IDC_READDRESSLOCAL,"Button",
BS_AUTOCHECKBOX | BS_LEFTTEXT | BS_MULTILINE | BS_AUTOCHECKBOX | BS_LEFTTEXT | BS_MULTILINE |
WS_DISABLED | WS_TABSTOP,4,267,97,8 WS_DISABLED | WS_TABSTOP,4,246,97,8
CONTROL "Readdress Received",IDC_READDRESSRXED,"Button", CONTROL "Readdress Received",IDC_READDRESSRXED,"Button",
BS_AUTOCHECKBOX | BS_LEFTTEXT | BS_MULTILINE | BS_AUTOCHECKBOX | BS_LEFTTEXT | BS_MULTILINE |
WS_DISABLED | WS_TABSTOP,4,281,97,8 WS_DISABLED | WS_TABSTOP,4,260,97,8
GROUPBOX "Per-BBS Params",IDC_STATIC,121,33,326,263 GROUPBOX "Per-BBS Params",IDC_STATIC,121,33,326,263
LTEXT "BBS",IDC_STATIC,128,46,57,10 LTEXT "BBS",IDC_STATIC,128,46,57,10
COMBOBOX IDC_BBS,122,59,50,60,CBS_SIMPLE | CBS_OEMCONVERT | COMBOBOX IDC_BBS,122,59,50,60,CBS_SIMPLE | CBS_OEMCONVERT |
@ -471,9 +471,6 @@ BEGIN
WS_TABSTOP,5,130,103,8 WS_TABSTOP,5,130,103,8
LTEXT "Incoming Connect Timeout",IDC_STATIC,125,278,95,12 LTEXT "Incoming Connect Timeout",IDC_STATIC,125,278,95,12
EDITTEXT IDC_CONTIMEOUT,219,276,22,12,ES_AUTOHSCROLL EDITTEXT IDC_CONTIMEOUT,219,276,22,12,ES_AUTOHSCROLL
CONTROL "Use 4 Char Continent Codes",IDC_FOURCHARCONTINENT,
"Button",BS_AUTOCHECKBOX | BS_LEFTTEXT | BS_MULTILINE |
WS_TABSTOP,6,146,103,8
END END
IDD_USERADDED_BOX DIALOG DISCARDABLE 176, 132, 129, 68 IDD_USERADDED_BOX DIALOG DISCARDABLE 176, 132, 129, 68

View File

@ -1,20 +0,0 @@

Microsoft Visual Studio Solution File, Format Version 9.00
# Visual C++ Express 2005
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BPQMail", "BPQMail.vcproj", "{3766AA10-C777-4ED8-A83D-F1452DE9B665}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
Release|Win32 = Release|Win32
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{3766AA10-C777-4ED8-A83D-F1452DE9B665}.Debug|Win32.ActiveCfg = Debug|Win32
{3766AA10-C777-4ED8-A83D-F1452DE9B665}.Debug|Win32.Build.0 = Debug|Win32
{3766AA10-C777-4ED8-A83D-F1452DE9B665}.Release|Win32.ActiveCfg = Release|Win32
{3766AA10-C777-4ED8-A83D-F1452DE9B665}.Release|Win32.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

4
BPQMail.vcxproj.user Normal file
View File

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup />
</Project>

View File

@ -1867,7 +1867,6 @@ VOID SaveFWDConfig(HWND hDlg)
MaxRXSize = GetDlgItemInt(hDlg, IDC_MAXRECV, &OK, FALSE); MaxRXSize = GetDlgItemInt(hDlg, IDC_MAXRECV, &OK, FALSE);
MaxAge = GetDlgItemInt(hDlg, IDC_MAXAGE, &OK, FALSE); MaxAge = GetDlgItemInt(hDlg, IDC_MAXAGE, &OK, FALSE);
SendPtoMultiple = IsDlgButtonChecked(hDlg, IDC_MULTIP); SendPtoMultiple = IsDlgButtonChecked(hDlg, IDC_MULTIP);
FOURCHARCONT = IsDlgButtonChecked(hDlg, IDC_FOURCHARCONTINENT);
// Reinitialise Aliases // Reinitialise Aliases
@ -3250,7 +3249,6 @@ INT_PTR CALLBACK FwdEditDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARA
CheckDlgButton(hDlg, IDC_WARNNOROUTE, WarnNoRoute); CheckDlgButton(hDlg, IDC_WARNNOROUTE, WarnNoRoute);
CheckDlgButton(hDlg, IDC_USELOCALTIME, Localtime); CheckDlgButton(hDlg, IDC_USELOCALTIME, Localtime);
CheckDlgButton(hDlg, IDC_MULTIP, SendPtoMultiple); CheckDlgButton(hDlg, IDC_MULTIP, SendPtoMultiple);
CheckDlgButton(hDlg, IDC_FOURCHARCONTINENT, FOURCHARCONT);
CurrentBBS = NULL; CurrentBBS = NULL;

View File

@ -319,7 +319,6 @@
#define ID_MULTICAST 40024 #define ID_MULTICAST 40024
#define IDC_DEFAULTNOWINLINK 41001 #define IDC_DEFAULTNOWINLINK 41001
#define IDC_MULTIP 41002 #define IDC_MULTIP 41002
#define IDC_FOURCHARCONTINENT 41003
// Next default values for new objects // Next default values for new objects
// //

10
Bpq32.c
View File

@ -1217,12 +1217,6 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
// Fix potential buffer overflow in Telnet login (36) // Fix potential buffer overflow in Telnet login (36)
// Allow longer serial device names (37) // Allow longer serial device names (37)
// Fix ICF8101 Mode setting (37) // Fix ICF8101 Mode setting (37)
// Kill link if we are getting repeated RR(F) after timeout
// (Indicating other station is seeing our RR(P) but not the resent I frame) (40)
// Change default of SECURETELNET to 1 (41)
// Add optional ATTACH time limit for ARDOP (42)
// Fix buffer overflow risk in HTTP Terminal(42)
#define CKernel #define CKernel
@ -1316,7 +1310,6 @@ void * KISSHFExtInit(EXTPORTDATA * PortEntry);
void * WinRPRExtInit(EXTPORTDATA * PortEntry); void * WinRPRExtInit(EXTPORTDATA * PortEntry);
void * HSMODEMExtInit(EXTPORTDATA * PortEntry); void * HSMODEMExtInit(EXTPORTDATA * PortEntry);
void * FreeDataExtInit(EXTPORTDATA * PortEntry); void * FreeDataExtInit(EXTPORTDATA * PortEntry);
void * SIXPACKExtInit(EXTPORTDATA * PortEntry);
extern char * ConfigBuffer; // Config Area extern char * ConfigBuffer; // Config Area
VOID REMOVENODE(dest_list * DEST); VOID REMOVENODE(dest_list * DEST);
@ -3954,9 +3947,6 @@ VOID * InitializeExtDriver(PEXTPORTDATA PORTVEC)
if (strstr(Value, "FREEDATA")) if (strstr(Value, "FREEDATA"))
return FreeDataExtInit; return FreeDataExtInit;
if (strstr(Value, "6PACK"))
return SIXPACKExtInit;
ExtDriver = LoadLibrary(Value); ExtDriver = LoadLibrary(Value);
if (ExtDriver == NULL) if (ExtDriver == NULL)

View File

@ -57,7 +57,7 @@
UsePrecompiledHeader="0" UsePrecompiledHeader="0"
AssemblerOutput="2" AssemblerOutput="2"
AssemblerListingLocation="c:\devprogs\bpq32\listings\debug\" AssemblerListingLocation="c:\devprogs\bpq32\listings\debug\"
BrowseInformation="1" BrowseInformation="0"
WarningLevel="3" WarningLevel="3"
Detect64BitPortabilityProblems="false" Detect64BitPortabilityProblems="false"
DebugInformationFormat="4" DebugInformationFormat="4"
@ -234,10 +234,6 @@
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx" Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}" UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
> >
<File
RelativePath=".\6pack.c"
>
</File>
<File <File
RelativePath="..\CommonSource\adif.c" RelativePath="..\CommonSource\adif.c"
> >

View File

@ -0,0 +1,65 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioUserFile
ProjectType="Visual C++"
Version="8.00"
ShowAllFiles="false"
>
<Configurations>
<Configuration
Name="Debug|Win32"
>
<DebugSettings
Command="C:\Devprogs\BPQ32\bpq32.exe"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="NOTTSDESKTOP"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
<Configuration
Name="Release|Win32"
>
<DebugSettings
Command=""
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="NOTTSDESKTOP"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
</Configurations>
</VisualStudioUserFile>

View File

@ -0,0 +1,65 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioUserFile
ProjectType="Visual C++"
Version="8.00"
ShowAllFiles="false"
>
<Configurations>
<Configuration
Name="Debug|Win32"
>
<DebugSettings
Command="C:\DevProgs\BPQ32\bpq32.exe"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="SKIGACER"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
<Configuration
Name="Release|Win32"
>
<DebugSettings
Command="C:\DevProgs\BPQ32\bpq32.exe"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="SKIGACER"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
</Configurations>
</VisualStudioUserFile>

View File

@ -37,7 +37,7 @@
Name="Release|Win32" Name="Release|Win32"
> >
<DebugSettings <DebugSettings
Command="" Command="C:\DevProgs\BPQ32\bpq32.exe"
WorkingDirectory="" WorkingDirectory=""
CommandArguments="" CommandArguments=""
Attach="false" Attach="false"

View File

@ -4859,6 +4859,7 @@ DllExport uint64_t APIENTRY GetPortFrequency(int PortNo, char * FreqString)
struct TNCINFO * TNC; struct TNCINFO * TNC;
struct RIGINFO * RIG = 0; struct RIGINFO * RIG = 0;
int RigPort;
if (PORT->RIGPort) if (PORT->RIGPort)
TNC = TNCInfo[PORT->RIGPort]; TNC = TNCInfo[PORT->RIGPort];
@ -5088,8 +5089,6 @@ void BuildPortMH(char * MHJSON, struct PORTCONTROL * PORT)
int len; int len;
char * ptr; char * ptr;
char mhstr[400]; char mhstr[400];
int i;
char c;
if (MH == NULL) if (MH == NULL)
return; return;
@ -5111,16 +5110,7 @@ void BuildPortMH(char * MHJSON, struct PORTCONTROL * PORT)
continue; continue;
} }
// validate call to prevent corruption of json Normcall[len++] = 0;
for (i=0; i < len; i++)
{
c = Normcall[i];
if (!isalnum(c) && !(c == '#') && !(c == ' ') && !(c == '-'))
goto skipit;
}
//format TIME //format TIME
@ -5133,7 +5123,7 @@ void BuildPortMH(char * MHJSON, struct PORTCONTROL * PORT)
Normcall, PORT->PORTNUMBER, MH->MHCOUNT, MHTIME); Normcall, PORT->PORTNUMBER, MH->MHCOUNT, MHTIME);
strcat( MHJSON, mhstr ); strcat( MHJSON, mhstr );
skipit:
MH++; MH++;
} }
} }

View File

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup />
</Project>

View File

@ -1876,8 +1876,6 @@ int standardParams(struct TNCINFO * TNC, char * buf)
TNC->WL2K = DecodeWL2KReportLine(buf); TNC->WL2K = DecodeWL2KReportLine(buf);
else if (_memicmp(buf, "SESSIONTIMELIMIT", 16) == 0) else if (_memicmp(buf, "SESSIONTIMELIMIT", 16) == 0)
TNC->SessionTimeLimit = TNC->DefaultSessionTimeLimit = atoi(&buf[17]) * 60; TNC->SessionTimeLimit = TNC->DefaultSessionTimeLimit = atoi(&buf[17]) * 60;
else if (_memicmp(buf, "ATTACHTIMELIMIT", 15) == 0)
TNC->AttachTimeLimit = atoi(&buf[16]) * 60;
else if (_memicmp(buf, "BUSYHOLD", 8) == 0) // Hold Time for Busy Detect else if (_memicmp(buf, "BUSYHOLD", 8) == 0) // Hold Time for Busy Detect
TNC->BusyHold = atoi(&buf[8]); TNC->BusyHold = atoi(&buf[8]);
else if (_memicmp(buf, "BUSYWAIT", 8) == 0) // Wait time before failing connect if busy else if (_memicmp(buf, "BUSYWAIT", 8) == 0) // Wait time before failing connect if busy

View File

@ -600,8 +600,7 @@ VOID HTTPTimer()
for (n = Last;;) for (n = Last;;)
{ {
if ((strlen(Session->ScreenLines[n]) + strlen(_REPLYBUFFER)) < 99999) strcat(_REPLYBUFFER, Session->ScreenLines[n]);
strcat(_REPLYBUFFER, Session->ScreenLines[n]);
if (n == 99) if (n == 99)
n = -1; n = -1;
@ -681,15 +680,13 @@ struct HTTPConnectionInfo * FindSession(char * Key)
void ProcessTermInput(SOCKET sock, char * MsgPtr, int MsgLen, char * Key) void ProcessTermInput(SOCKET sock, char * MsgPtr, int MsgLen, char * Key)
{ {
char _REPLYBUFFER[2048]; char _REPLYBUFFER[1024];
int ReplyLen; int ReplyLen;
char Header[256]; char Header[256];
int HeaderLen; int HeaderLen;
int State; int State;
struct HTTPConnectionInfo * Session = FindSession(Key); struct HTTPConnectionInfo * Session = FindSession(Key);
int Stream; int Stream;
int maxlen = 1000;
if (Session == NULL) if (Session == NULL)
{ {
@ -704,24 +701,12 @@ void ProcessTermInput(SOCKET sock, char * MsgPtr, int MsgLen, char * Key)
char c; char c;
UCHAR hex; UCHAR hex;
int msglen = end - input;
struct TNCINFO * TNC = Session->TNC; struct TNCINFO * TNC = Session->TNC;
struct TCPINFO * TCP = 0; struct TCPINFO * TCP = 0;
if (TNC) if (TNC)
TCP = TNC->TCPInfo; TCP = TNC->TCPInfo;
if (TCP && TCP->WebTermCSS)
maxlen -= strlen(TCP->WebTermCSS);
if (MsgLen > maxlen)
{
Session->KillTimer = 99999; // close session
return;
}
if (TCP && TCP->WebTermCSS) if (TCP && TCP->WebTermCSS)
ReplyLen = sprintf(_REPLYBUFFER, InputLine, Key, TCP->WebTermCSS); ReplyLen = sprintf(_REPLYBUFFER, InputLine, Key, TCP->WebTermCSS);
else else

343
LinBPQ.c
View File

@ -1077,212 +1077,217 @@ int main(int argc, char * argv[])
BBSApplMask = 1<<(BBSApplNum-1); BBSApplMask = 1<<(BBSApplNum-1);
// See if we need to warn of possible problem with BaseDir moved by installer // See if we need to warn of possible problem with BaseDir moved by installer
sprintf(BaseDir, "%s", BPQDirectory); sprintf(BaseDir, "%s", BPQDirectory);
// Set up file and directory names // Set up file and directory names
strcpy(UserDatabasePath, BaseDir); strcpy(UserDatabasePath, BaseDir);
strcat(UserDatabasePath, "/"); strcat(UserDatabasePath, "/");
strcat(UserDatabasePath, UserDatabaseName); strcat(UserDatabasePath, UserDatabaseName);
strcpy(MsgDatabasePath, BaseDir); strcpy(MsgDatabasePath, BaseDir);
strcat(MsgDatabasePath, "/"); strcat(MsgDatabasePath, "/");
strcat(MsgDatabasePath, MsgDatabaseName); strcat(MsgDatabasePath, MsgDatabaseName);
strcpy(BIDDatabasePath, BaseDir); strcpy(BIDDatabasePath, BaseDir);
strcat(BIDDatabasePath, "/"); strcat(BIDDatabasePath, "/");
strcat(BIDDatabasePath, BIDDatabaseName); strcat(BIDDatabasePath, BIDDatabaseName);
strcpy(WPDatabasePath, BaseDir); strcpy(WPDatabasePath, BaseDir);
strcat(WPDatabasePath, "/"); strcat(WPDatabasePath, "/");
strcat(WPDatabasePath, WPDatabaseName); strcat(WPDatabasePath, WPDatabaseName);
strcpy(BadWordsPath, BaseDir); strcpy(BadWordsPath, BaseDir);
strcat(BadWordsPath, "/"); strcat(BadWordsPath, "/");
strcat(BadWordsPath, BadWordsName); strcat(BadWordsPath, BadWordsName);
strcpy(NTSAliasesPath, BaseDir); strcpy(NTSAliasesPath, BaseDir);
strcat(NTSAliasesPath, "/"); strcat(NTSAliasesPath, "/");
strcat(NTSAliasesPath, NTSAliasesName); strcat(NTSAliasesPath, NTSAliasesName);
strcpy(MailDir, BaseDir); strcpy(MailDir, BaseDir);
strcat(MailDir, "/"); strcat(MailDir, "/");
strcat(MailDir, "Mail"); strcat(MailDir, "Mail");
#ifdef WIN32 #ifdef WIN32
CreateDirectory(MailDir, NULL); // Just in case CreateDirectory(MailDir, NULL); // Just in case
#else #else
mkdir(MailDir, S_IRWXU | S_IRWXG | S_IRWXO); mkdir(MailDir, S_IRWXU | S_IRWXG | S_IRWXO);
chmod(MailDir, S_IRWXU | S_IRWXG | S_IRWXO); chmod(MailDir, S_IRWXU | S_IRWXG | S_IRWXO);
#endif #endif
// Make backup copies of Databases // Make backup copies of Databases
// CopyConfigFile(ConfigName); // CopyConfigFile(ConfigName);
CopyBIDDatabase(); CopyBIDDatabase();
CopyMessageDatabase(); CopyMessageDatabase();
CopyUserDatabase(); CopyUserDatabase();
CopyWPDatabase(); CopyWPDatabase();
SetupMyHA(); SetupMyHA();
SetupFwdAliases(); SetupFwdAliases();
SetupNTSAliases(NTSAliasesPath); SetupNTSAliases(NTSAliasesPath);
GetWPDatabase(); GetWPDatabase();
GetMessageDatabase(); GetMessageDatabase();
GetUserDatabase(); GetUserDatabase();
GetBIDDatabase(); GetBIDDatabase();
GetBadWordFile(); GetBadWordFile();
GetHTMLForms(); GetHTMLForms();
GetPGConfig(); GetPGConfig();
// Make sure there is a user record for the BBS, with BBS bit set. // Make sure there is a user record for the BBS, with BBS bit set.
user = LookupCall(BBSName); user = LookupCall(BBSName);
if (user == NULL)
{
user = AllocateUserRecord(BBSName);
user->Temp = zalloc(sizeof (struct TempUserInfo));
}
if ((user->flags & F_BBS) == 0)
{
// Not Defined as a BBS
if(SetupNewBBS(user))
user->flags |= F_BBS;
}
// if forwarding AMPR mail make sure User/BBS AMPR exists
if (SendAMPRDirect)
{
BOOL NeedSave = FALSE;
user = LookupCall("AMPR");
if (user == NULL) if (user == NULL)
{ {
user = AllocateUserRecord(BBSName); user = AllocateUserRecord("AMPR");
user->Temp = zalloc(sizeof (struct TempUserInfo)); user->Temp = zalloc(sizeof (struct TempUserInfo));
NeedSave = TRUE;
} }
if ((user->flags & F_BBS) == 0) if ((user->flags & F_BBS) == 0)
{ {
// Not Defined as a BBS // Not Defined as a BBS
if(SetupNewBBS(user)) if (SetupNewBBS(user))
user->flags |= F_BBS; user->flags |= F_BBS;
NeedSave = TRUE;
} }
// if forwarding AMPR mail make sure User/BBS AMPR exists if (NeedSave)
SaveUserDatabase();
if (SendAMPRDirect)
{
BOOL NeedSave = FALSE;
user = LookupCall("AMPR");
if (user == NULL)
{
user = AllocateUserRecord("AMPR");
user->Temp = zalloc(sizeof (struct TempUserInfo));
NeedSave = TRUE;
}
if ((user->flags & F_BBS) == 0)
{
// Not Defined as a BBS
if (SetupNewBBS(user))
user->flags |= F_BBS;
NeedSave = TRUE;
}
if (NeedSave)
SaveUserDatabase();
}
// Make sure SYSOPCALL is set
if (SYSOPCall[0] == 0)
strcpy(SYSOPCall, BBSName);
// See if just want to add user (mainly for setup scripts)
if (argc == 5 && _stricmp(argv[1], "--adduser") == 0)
{
BOOL isBBS = FALSE;
char * response;
if (_stricmp(argv[4], "TRUE") == 0)
isBBS = TRUE;
printf("Adding User %s\r\n", argv[2]);
response = AddUser(argv[2], argv[3], isBBS);
printf("%s", response);
exit(0);
}
// Allocate Streams
strcpy(pgm, "BBS");
for (i=0; i < MaxStreams; i++)
{
conn = &Connections[i];
conn->BPQStream = FindFreeStream();
if (conn->BPQStream == 255) break;
NumberofStreams++;
// BPQSetHandle(conn->BPQStream, hWnd);
SetAppl(conn->BPQStream, (i == 0 && EnableUI) ? 0x82 : 2, BBSApplMask);
Disconnect(conn->BPQStream);
}
strcpy(pgm, "LINBPQ");
InitialiseTCP();
InitialiseNNTP();
SetupListenSet(); // Master set of listening sockets
if (EnableUI || MailForInterval)
SetupUIInterface();
if (MailForInterval)
_beginthread(SendMailForThread, 0, 0);
// Calulate time to run Housekeeping
{
struct tm *tm;
time_t now;
now = time(NULL);
tm = gmtime(&now);
tm->tm_hour = MaintTime / 100;
tm->tm_min = MaintTime % 100;
tm->tm_sec = 0;
MaintClock = mktime(tm) - (time_t)_MYTIMEZONE;
while (MaintClock < now)
MaintClock += MaintInterval * 3600;
Debugprintf("Maint Clock %lld NOW %lld Time to HouseKeeping %lld", (long long)MaintClock, (long long)now, (long long)(MaintClock - now));
if (LastHouseKeepingTime)
{
if ((now - LastHouseKeepingTime) > MaintInterval * 3600)
{
DoHouseKeeping(FALSE);
}
}
for (i = optind; i < argc; i++)
{
if (_stricmp(argv[i], "tidymail") == 0)
DeleteRedundantMessages();
if (_stricmp(argv[i], "nohomebbs") == 0)
DontNeedHomeBBS = TRUE;
}
printf("Mail Started\n");
Logprintf(LOG_BBS, NULL, '!', "Mail Starting");
}
} }
// Make sure SYSOPCALL is set
if (SYSOPCall[0] == 0)
strcpy(SYSOPCall, BBSName);
// See if just want to add user (mainly for setup scripts)
if (argc == 5 && _stricmp(argv[1], "--adduser") == 0)
{
BOOL isBBS = FALSE;
char * response;
if (_stricmp(argv[4], "TRUE") == 0)
isBBS = TRUE;
printf("Adding User %s\r\n", argv[2]);
response = AddUser(argv[2], argv[3], isBBS);
printf("%s", response);
exit(0);
}
// Allocate Streams
strcpy(pgm, "BBS");
for (i=0; i < MaxStreams; i++)
{
conn = &Connections[i];
conn->BPQStream = FindFreeStream();
if (conn->BPQStream == 255) break;
NumberofStreams++;
// BPQSetHandle(conn->BPQStream, hWnd);
SetAppl(conn->BPQStream, (i == 0 && EnableUI) ? 0x82 : 2, BBSApplMask);
Disconnect(conn->BPQStream);
}
strcpy(pgm, "LINBPQ");
Debugprintf("POP3 Debug Before Init TCP Timer = %d", POP3Timer);
InitialiseTCP();
Debugprintf("POP3 Debug Before Init NNTP Timer = %d", POP3Timer);
InitialiseNNTP();
SetupListenSet(); // Master set of listening sockets
if (EnableUI || MailForInterval)
SetupUIInterface();
if (MailForInterval)
_beginthread(SendMailForThread, 0, 0);
// Calulate time to run Housekeeping
{
struct tm *tm;
time_t now;
now = time(NULL);
tm = gmtime(&now);
tm->tm_hour = MaintTime / 100;
tm->tm_min = MaintTime % 100;
tm->tm_sec = 0;
MaintClock = mktime(tm) - (time_t)_MYTIMEZONE;
while (MaintClock < now)
MaintClock += MaintInterval * 3600;
Debugprintf("Maint Clock %lld NOW %lld Time to HouseKeeping %lld", (long long)MaintClock, (long long)now, (long long)(MaintClock - now));
if (LastHouseKeepingTime)
{
if ((now - LastHouseKeepingTime) > MaintInterval * 3600)
{
DoHouseKeeping(FALSE);
}
}
for (i = optind; i < argc; i++)
{
if (_stricmp(argv[i], "tidymail") == 0)
DeleteRedundantMessages();
if (_stricmp(argv[i], "nohomebbs") == 0)
DontNeedHomeBBS = TRUE;
}
printf("Mail Started\n");
Logprintf(LOG_BBS, NULL, '!', "Mail Starting");
}
}
Debugprintf("POP3 Debug After Mail Init Timer = %d", POP3Timer);
if (NUMBEROFTNCPORTS) if (NUMBEROFTNCPORTS)
InitializeTNCEmulator(); InitializeTNCEmulator();

View File

8
MailNode.vcxproj.user Normal file
View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LocalDebuggerCommand>c:\linbpq\linbpq.exe</LocalDebuggerCommand>
<LocalDebuggerWorkingDirectory>c:\linbpq</LocalDebuggerWorkingDirectory>
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
</PropertyGroup>
</Project>

File diff suppressed because it is too large Load Diff

View File

@ -195,9 +195,6 @@ KC6OAR*>ID:
// Check Port // Check Port
Port = msg->PORT; Port = msg->PORT;
if (Port == 40)
Port = Port;
if (Port & 0x80) if (Port & 0x80)
{ {
@ -253,8 +250,10 @@ KC6OAR*>ID:
ptr += 7; ptr += 7;
n--; n--;
if (n < 0) if (n == 0)
{
return 0; // Corrupt - no end of address bit return 0; // Corrupt - no end of address bit
}
} }
// Reached End of digis // Reached End of digis

4322
SCSPactor.c.bak Normal file

File diff suppressed because it is too large Load Diff

View File

@ -452,7 +452,8 @@ ok:
if (buffptr == 0) return (0); // No buffers, so ignore if (buffptr == 0) return (0); // No buffers, so ignore
buffptr->Len = sprintf(&buffptr->Data[0], "No Connection to TNC\r"); buffptr->Len = 36;
memcpy(&buffptr->Data[0], "No Connection to TNC\r", 36);
C_Q_ADD(&TNC->Streams[Stream].PACTORtoBPQ_Q, buffptr); C_Q_ADD(&TNC->Streams[Stream].PACTORtoBPQ_Q, buffptr);

View File

@ -427,7 +427,6 @@ int ProcessLine(char * buf, int Port)
TCP->MaxSessions = 10; // Default Values TCP->MaxSessions = 10; // Default Values
TNC->Hardware = H_TELNET; TNC->Hardware = H_TELNET;
TCP->IPV4 = TRUE; TCP->IPV4 = TRUE;
TCP->SecureTelnet = 1;
strcpy(TCP->CMSServer, "cms.winlink.org"); strcpy(TCP->CMSServer, "cms.winlink.org");
} }

2
VARA.c
View File

@ -2586,7 +2586,7 @@ VOID VARAProcessDataPacket(struct TNCINFO * TNC, UCHAR * Data, int Length)
STREAM->BytesRXed += Length; STREAM->BytesRXed += Length;
Data[Length] = 0; Data[Length] = 0;
// Debugprintf("VARA: RXD %d bytes", Length); Debugprintf("VARA: RXD %d bytes", Length);
sprintf(TNC->WEB_TRAFFIC, "Sent %d RXed %d Queued %d", sprintf(TNC->WEB_TRAFFIC, "Sent %d RXed %d Queued %d",
STREAM->BytesTXed, STREAM->BytesRXed,STREAM->BytesOutstanding); STREAM->BytesTXed, STREAM->BytesRXed,STREAM->BytesOutstanding);

View File

@ -10,14 +10,14 @@
#endif #endif
#define KVers 6,0,24,42 #define KVers 6,0,24,38
#define KVerstring "6.0.24.42\0" #define KVerstring "6.0.24.38\0"
#ifdef CKernel #ifdef CKernel
#define Vers KVers #define Vers KVers
#define Verstring KVerstring #define Verstring KVerstring
#define Datestring "August 2024" #define Datestring "January 2024"
#define VerComments "G8BPQ Packet Switch (C Version)" KVerstring #define VerComments "G8BPQ Packet Switch (C Version)" KVerstring
#define VerCopyright "Copyright © 2001-2024 John Wiseman G8BPQ\0" #define VerCopyright "Copyright © 2001-2024 John Wiseman G8BPQ\0"
#define VerDesc "BPQ32 Switch\0" #define VerDesc "BPQ32 Switch\0"

View File

@ -70,9 +70,8 @@
// Allow /History to be shortened to /Hi (45) // Allow /History to be shortened to /Hi (45)
// Fix extra r charater in Chat Config Web Page // Fix extra r charater in Chat Config Web Page
//.25
// Increase size of status display buffers (7) // Increase sise of status display buffers (7)
#include "BPQChat.h" #include "BPQChat.h"
#include "Dbghelp.h" #include "Dbghelp.h"

View File

@ -43,7 +43,7 @@
#define NEWROUTING #define NEWROUTING
extern int FOURCHARCONT;
// Standard __except handler for try/except // Standard __except handler for try/except
@ -1194,7 +1194,8 @@ int CountMessagestoForward(struct UserInfo * user);
VOID * GetMultiLineDialogParam(HWND hDialog, int DLGItem); VOID * GetMultiLineDialogParam(HWND hDialog, int DLGItem);
#define LIBCONFIG_STATIC
#include "libconfig.h"
VOID * GetMultiStringValue(config_setting_t * hKey, char * ValueName); VOID * GetMultiStringValue(config_setting_t * hKey, char * ValueName);
VOID * RegGetMultiStringValue(HKEY hKey, char * ValueName); VOID * RegGetMultiStringValue(HKEY hKey, char * ValueName);

1
debian/bpq32.cfg vendored
View File

@ -34,7 +34,6 @@ PORT
LOGGING=1 LOGGING=1
CMS=1 CMS=1
DisconnectOnClose=1 DisconnectOnClose=1
SECURETELNET=1
TCPPORT=8010 TCPPORT=8010
FBBPORT=8011 FBBPORT=8011
HTTPPORT=8008 HTTPPORT=8008

22
debian/changelog vendored
View File

@ -1,25 +1,3 @@
linbpq (6.0.24.42-1~bpo11+1) bullseye; urgency=medium
* Rebuild for bullseye.
-- Dave Hibberd <hibby@debian.org> Wed, 25 Sep 2024 01:41:01 +0100
linbpq (6.0.24.42-1) unstable; urgency=medium
* Install config to /etc
* New upstream update
* Add in new repo for continued updates
-- Dave Hibberd <hibby@debian.org> Wed, 25 Sep 2024 01:36:59 +0100
linbpq (6.0.24.40-1) unstable; urgency=medium
* Fresh upstream release
- Patches refreshed
* Secure by default patch
-- Dave Hibberd <hibby@debian.org> Sun, 07 Jul 2024 16:09:28 +0100
linbpq (6.0.24.38-1~bpo11+1) bullseye; urgency=medium linbpq (6.0.24.38-1~bpo11+1) bullseye; urgency=medium
* Rebuild for bullseye. * Rebuild for bullseye.

2
debian/control vendored
View File

@ -11,7 +11,7 @@ Rules-Requires-Root: no
Package: linbpq Package: linbpq
Architecture: linux-any Architecture: linux-any
Depends: ${shlibs:Depends}, ${misc:Depends}, adduser, hibbian-archive-keyring Depends: ${shlibs:Depends}, ${misc:Depends}, adduser
Description: Packet node and ax25 stack Description: Packet node and ax25 stack
LINBPQ is a Linux version of the BPQ32 Node, BBS and Chat Server components. LINBPQ is a Linux version of the BPQ32 Node, BBS and Chat Server components.
It is actively developed by John G8BPQ and contains a complete, independent It is actively developed by John G8BPQ and contains a complete, independent

1
debian/install vendored
View File

@ -1 +0,0 @@
debian/bpq32.cfg etc/

View File

@ -1,66 +0,0 @@
--- a/Multicast.c
+++ b/Multicast.c
@@ -620,7 +620,7 @@
int r;
UINT rlen;
- UINT outlen;
+ size_t outlen;
memcpy(&rlen, &Decoded[5], 4);
--- a/MBLRoutines.c
+++ b/MBLRoutines.c
@@ -23,7 +23,7 @@
#include "bpqmail.h"
-void SendMessageReadEvent(struct UserInfo * user, struct MsgInfo * Msg);
+void SendMessageReadEvent(char * Call, struct MsgInfo * Msg);
VOID ProcessMBLLine(CIRCUIT * conn, struct UserInfo * user, UCHAR* Buffer, int len)
--- a/bpqmail.h
+++ b/bpqmail.h
@@ -695,8 +695,8 @@
unsigned char Type;
unsigned char changed;
unsigned short seen;
- long long last_modif;
- long long last_seen;
+ time_t last_modif;
+ time_t last_seen;
char first_homebbs[41];
char secnd_homebbs[41];
char first_zip[9];
--- a/AGWAPI.c
+++ b/AGWAPI.c
@@ -128,7 +128,7 @@
int AGWGetSessionKey(char * key, struct AGWSocketConnectionInfo * sockptr);
int ProcessAGWCommand(struct AGWSocketConnectionInfo * sockptr);
int SendDataToAppl(int Stream, byte * Buffer, int Length);
-int InternalAGWDecodeFrame(char * msg, char * buffer, int Stamp, int * FrameType, int useLocalTime, int doNodes);
+int InternalAGWDecodeFrame(char * msg, char * buffer, time_t Stamp, int * FrameType, int useLocalTime, int doNodes);
int AGWDataSocket_Disconnect( struct AGWSocketConnectionInfo * sockptr);
int SendRawPacket(struct AGWSocketConnectionInfo * sockptr, char *txmsg, int Length);
int ShowApps();
--- a/AGWMoncode.c
+++ b/AGWMoncode.c
@@ -68,7 +68,7 @@
static UCHAR * DISPLAYARPDATAGRAM(UCHAR * Datagram, UCHAR * Output);
-int InternalAGWDecodeFrame(MESSAGE * msg, char * buffer, int Stamp, int * FrameType, int useLocalTime, int DoNodes)
+int InternalAGWDecodeFrame(MESSAGE * msg, char * buffer, time_t Stamp, int * FrameType, int useLocalTime, int DoNodes)
{
UCHAR * ptr;
int n;
@@ -364,7 +364,7 @@
}
if (Output == NULL)
- return NULL;
+ return 0;
if (Output[-1] != 13)
Output += sprintf((char *)Output, "\r");

View File

@ -1,258 +0,0 @@
--- /dev/null
+++ b/bpqheaders.h
@@ -0,0 +1,8 @@
+//Header for an easier build under debian GCC-14
+#include <stdio.h>
+#include <time.h>
+#include <fcntl.h>
+
+int CanPortDigi(int Port);
+
+int KissEncode(unsigned char * inbuff, unsigned char * outbuff, int len);
--- a/cMain.c
+++ b/cMain.c
@@ -29,9 +29,10 @@
//#include "windows.h"
//#include "winerror.h"
-#include "time.h"
-#include "stdio.h"
+#include <time.h>
+#include <stdio.h>
#include <fcntl.h>
+#include "bpqheaders.h"
#include "kernelresource.h"
#include "CHeaders.h"
--- a/CHeaders.h
+++ b/CHeaders.h
@@ -93,7 +93,7 @@
char * MOVEANDCHECK(TRANSPORTENTRY * Session, char * Bufferptr, char * Source, int Len);
VOID DISPLAYCIRCUIT(TRANSPORTENTRY * L4, char * Buffer);
char * FormatUptime(int Uptime);
-char * strlop(char * buf, char delim);
+char * strlop(const char * buf, char delim);
BOOL CompareCalls(UCHAR * c1, UCHAR * c2);
VOID PostDataAvailable(TRANSPORTENTRY * Session);
@@ -427,4 +427,4 @@
extern int MinCounter[MaxBPQPortNo + 1]; // Interval Countdown
extern BOOL SendFromFile[MaxBPQPortNo + 1];
-DllExport uint64_t APIENTRY GetPortFrequency(int PortNo, char * FreqStringMhz);
\ No newline at end of file
+DllExport uint64_t APIENTRY GetPortFrequency(int PortNo, char * FreqStringMhz);
--- a/WinRPR.c
+++ b/WinRPR.c
@@ -63,7 +63,6 @@
static RECT Rect;
VOID __cdecl Debugprintf(const char * format, ...);
-char * strlop(char * buf, char delim);
char NodeCall[11]; // Nodecall, Null Terminated
--- a/bpqmail.h
+++ b/bpqmail.h
@@ -877,7 +877,6 @@
};
VOID __cdecl nprintf(CIRCUIT * conn, const char * format, ...);
-char * strlop(char * buf, char delim);
int rt_cmd(CIRCUIT *circuit, char * Buffer);
CIRCUIT *circuit_new(CIRCUIT *circuit, int flags);
VOID BBSputs(CIRCUIT * conn, char * buf);
--- a/APRSCode.c
+++ b/APRSCode.c
@@ -63,7 +63,6 @@
VOID __cdecl Consoleprintf(const char * format, ...);
BOOL APIENTRY Send_AX(PMESSAGE Block, DWORD Len, UCHAR Port);
VOID Send_AX_Datagram(PDIGIMESSAGE Block, DWORD Len, UCHAR Port);
-char * strlop(char * buf, char delim);
int APRSDecodeFrame(char * msg, char * buffer, time_t Stamp, uint64_t Mask); // Unsemaphored DecodeFrame
APRSHEARDRECORD * UpdateHeard(UCHAR * Call, int Port);
BOOL CheckforDups(char * Call, char * Msg, int Len);
--- a/FLDigi.c
+++ b/FLDigi.c
@@ -101,8 +101,6 @@
VOID ReleaseOtherPorts(struct TNCINFO * ThisTNC);
VOID WritetoTrace(struct TNCINFO * TNC, char * Msg, int Len);
-char * strlop(char * buf, char delim);
-
extern UCHAR BPQDirectory[];
#define MAXMPSKPORTS 16
--- a/MULTIPSK.c
+++ b/MULTIPSK.c
@@ -71,8 +71,6 @@
static VOID DoMonitorHddr(struct TNCINFO * TNC, struct AGWHEADER * RXHeader, UCHAR * Msg);
VOID SendRPBeacon(struct TNCINFO * TNC);
-char * strlop(char * buf, char delim);
-
extern UCHAR BPQDirectory[];
#define MAXMPSKPORTS 16
--- a/AGWMoncode.c
+++ b/AGWMoncode.c
@@ -61,7 +61,6 @@
#define NODES_SIG 0xFF
-char * strlop(char * buf, char delim);
UCHAR * DisplayINP3RIF(UCHAR * ptr1, UCHAR * ptr2, int msglen);
static UCHAR * DISPLAY_NETROM(MESSAGE * ADJBUFFER, UCHAR * Output, int MsgLen, int DoNodes);
--- a/Bpq32.c
+++ b/Bpq32.c
@@ -1406,7 +1406,6 @@
VOID FindLostBuffers();
BOOL InitializeTNCEmulator();
VOID TNCTimer();
-char * strlop(char * buf, char delim);
DllExport int APIENTRY Get_APPLMASK(int Stream);
DllExport int APIENTRY GetStreamPID(int Stream);
--- a/CMSAuth.c
+++ b/CMSAuth.c
@@ -31,7 +31,7 @@
#include <windows.h>
#endif
-char * strlop(char * buf, char delim);
+char * strlop(const char * buf, char delim);
VOID APIENTRY md5 (char *arg, unsigned char * checksum);
--- a/FLDigi64.c
+++ b/FLDigi64.c
@@ -102,8 +102,6 @@
VOID SuspendOtherPorts(struct TNCINFO * ThisTNC);
VOID ReleaseOtherPorts(struct TNCINFO * ThisTNC);
-char * strlop(char * buf, char delim);
-
extern UCHAR BPQDirectory[];
#define MAXBPQPORTS 32
--- a/HTTPcode.c
+++ b/HTTPcode.c
@@ -102,7 +102,6 @@
extern UCHAR ConfigDirectory[260];
-char * strlop(char * buf, char delim);
VOID sendandcheck(SOCKET sock, const char * Buffer, int Len);
int CompareNode(const void *a, const void *b);
int CompareAlias(const void *a, const void *b);
--- a/MULTIPSK64.c
+++ b/MULTIPSK64.c
@@ -74,8 +74,6 @@
static VOID DoMonitorHddr(struct TNCINFO * TNC, struct AGWHEADER * RXHeader, UCHAR * Msg);
VOID SendRPBeacon(struct TNCINFO * TNC);
-char * strlop(char * buf, char delim);
-
extern UCHAR BPQDirectory[];
#define MAXBPQPORTS 32
--- a/Moncode.c
+++ b/Moncode.c
@@ -59,7 +59,6 @@
#define NODES_SIG 0xFF
-char * strlop(char * buf, char delim);
UCHAR * DisplayINP3RIF(UCHAR * ptr1, UCHAR * ptr2, unsigned int msglen);
char * DISPLAY_NETROM(MESSAGE * ADJBUFFER, UCHAR * Output, int MsgLen);
--- a/NodeMapTest.c
+++ b/NodeMapTest.c
@@ -201,7 +201,6 @@
int ConvFromAX25(unsigned char * incall, char * outcall);
void GenerateOutputFiles(time_t Now);
void UpdateHeardData(struct NodeData * Node, struct NodeData * Call, char * Freq, char * LOC, char * Flags);
-char * strlop(char * buf, char delim);
void ProcessChatUpdate(char * From, char * Msg);
void ProcessNodeUpdate(char * From, char * Msg);
--- a/SCSTracker.c
+++ b/SCSTracker.c
@@ -52,7 +52,6 @@
static RECT Rect;
VOID __cdecl Debugprintf(const char * format, ...);
-char * strlop(char * buf, char delim);
char NodeCall[11]; // Nodecall, Null Terminated
--- a/TelnetV6.c
+++ b/TelnetV6.c
@@ -127,8 +127,6 @@
static int ProcessLine(char * buf, int Port);
VOID __cdecl Debugprintf(const char * format, ...);
-char * strlop(char * buf, char delim);
-
int DisplaySessions(struct TNCINFO * TNC);
int DoStateChange(int Stream);
--- a/UIARQ.c
+++ b/UIARQ.c
@@ -78,7 +78,6 @@
VOID Send_AX_Datagram(PDIGIMESSAGE Block, DWORD Len, UCHAR Port);
int DoScanLine(struct TNCINFO * TNC, char * Buff, int Len);
VOID ProcessARQPacket(struct PORTCONTROL * PORT, MESSAGE * Buffer);
-char * strlop(char * buf, char delim);
extern UCHAR BPQDirectory[];
extern char MYALIASLOPPED[10];
--- a/bpqchat.h
+++ b/bpqchat.h
@@ -603,7 +603,6 @@
VOID nputs(ChatCIRCUIT * conn, char * buf);
#endif
BOOL matchi(char * p1, char * p2);
-char * strlop(char * buf, char delim);
int rt_cmd(ChatCIRCUIT *circuit, char * Buffer);
ChatCIRCUIT *circuit_new(ChatCIRCUIT *circuit, int flags);
void makelinks(void);
@@ -775,4 +774,4 @@
struct ConsoleInfo * ConsHeader[2];
-extern BOOL LogCHAT;
\ No newline at end of file
+extern BOOL LogCHAT;
--- a/SCSTrackeMulti.c
+++ b/SCSTrackeMulti.c
@@ -48,7 +48,6 @@
static RECT Rect;
VOID __cdecl Debugprintf(const char * format, ...);
-char * strlop(char * buf, char delim);
BOOL KAMStartPort(struct PORTCONTROL * PORT);
BOOL KAMStopPort(struct PORTCONTROL * PORT);
--- a/SCSTrackeMulti64.c
+++ b/SCSTrackeMulti64.c
@@ -52,7 +52,6 @@
struct TNCINFO * TNCInfo[34]; // Records are Malloc'd
VOID __cdecl Debugprintf(const char * format, ...);
-char * strlop(char * buf, char delim);
BOOL KAMStartPort(struct PORTCONTROL * PORT);
BOOL KAMStopPort(struct PORTCONTROL * PORT);
--- a/CommonCode.c
+++ b/CommonCode.c
@@ -568,7 +568,7 @@
return ptr;
}
-char * strlop(char * buf, char delim)
+char * strlop(const char * buf, char delim)
{
// Terminate buf at delim, and return rest of string

View File

@ -1,10 +0,0 @@
--- a/TelnetV6.c
+++ b/TelnetV6.c
@@ -429,6 +429,7 @@
TCP->IPV4 = TRUE;
TCP->SecureTelnet = 1;
strcpy(TCP->CMSServer, "cms.winlink.org");
+ TCP->SecureTelnet = 1;
}
TNC = TNCInfo[Port];

View File

@ -1,5 +1,2 @@
headers.patch
ftbfs-gcc14.patch
spelling-errors.patch spelling-errors.patch
makefile makefile
secure-by-default.patch

View File

@ -22,7 +22,7 @@
--- a/BPQMail.rc --- a/BPQMail.rc
+++ b/BPQMail.rc +++ b/BPQMail.rc
@@ -1045,7 +1045,7 @@ @@ -1042,7 +1042,7 @@
CONTROL "Delete Log and Message Files to Recycle Bin", CONTROL "Delete Log and Message Files to Recycle Bin",
IDC_DELETETORECYCLE,"Button",BS_AUTOCHECKBOX | IDC_DELETETORECYCLE,"Button",BS_AUTOCHECKBOX |
BS_LEFTTEXT | BS_MULTILINE | WS_TABSTOP,5,142,115,20 BS_LEFTTEXT | BS_MULTILINE | WS_TABSTOP,5,142,115,20
@ -108,7 +108,7 @@
goto SeeifMore; // SEE IF ANYTHING ELSE goto SeeifMore; // SEE IF ANYTHING ELSE
--- a/templatedefs.c --- a/templatedefs.c
+++ b/templatedefs.c +++ b/templatedefs.c
@@ -1165,7 +1165,7 @@ @@ -1158,7 +1158,7 @@
"Send Non-delivery Notifications<br>\r\n" "Send Non-delivery Notifications<br>\r\n"
"for P and T messages <input %sname=\"SendND\" value=\"SendND\" type=\"checkbox\" /><br>\r\n" "for P and T messages <input %sname=\"SendND\" value=\"SendND\" type=\"checkbox\" /><br>\r\n"
" <br />\r\n" " <br />\r\n"
@ -117,7 +117,7 @@
"Housekeeping Result <input %sname=\"NoMail\" value=\"Yes\" type=\"checkbox\"><br><br>\r\n" "Housekeeping Result <input %sname=\"NoMail\" value=\"Yes\" type=\"checkbox\"><br><br>\r\n"
"Generate Traffic Report<input %sname=\"GenTraffic\" value=\"Yes\" type=\"checkbox\"><br><br>\r\n" "Generate Traffic Report<input %sname=\"GenTraffic\" value=\"Yes\" type=\"checkbox\"><br><br>\r\n"
"<div style=\"text-align: center;\"><input class='btn' name=RunNow value=\"Run Housekeeping\" type=submit class='btn'></div>\r\n" "<div style=\"text-align: center;\"><input class='btn' name=RunNow value=\"Run Housekeeping\" type=submit class='btn'></div>\r\n"
@@ -1454,7 +1454,7 @@ @@ -1446,7 +1446,7 @@
"<div style=\"text-align: left; width: 680px; margin: auto;\">The Nodes to link to box defines which other Chat Nodes should be connected to, or from which " "<div style=\"text-align: left; width: 680px; margin: auto;\">The Nodes to link to box defines which other Chat Nodes should be connected to, or from which "
"connections may be accepted. The format is ALIAS:CALL, eg BPQCHT:G8BPQ-4. If the node is not directly " "connections may be accepted. The format is ALIAS:CALL, eg BPQCHT:G8BPQ-4. If the node is not directly "
"connectable (ie is not in your NODES table) you can add a connect script. This consists of a series of commands " "connectable (ie is not in your NODES table) you can add a connect script. This consists of a series of commands "

2
debian/rules vendored
View File

@ -1,6 +1,6 @@
#!/usr/bin/make -f #!/usr/bin/make -f
export DEB_BUILD_MAINT_OPTIONS=hardening=+all #export DEB_BUILD_MAINT_OPTIONS=hardening=+all
CFLAGS = $(shell dpkg-buildflags --get CFLAGS) CFLAGS = $(shell dpkg-buildflags --get CFLAGS)
CFLAGS += -fcommon CFLAGS += -fcommon

View File

@ -101,7 +101,7 @@ char * FwdPagetxt()
"{" "{"
"position: absolute;" "position: absolute;"
"width:290px;" "width:290px;"
"height:550px;" "height:510px;"
"border:0px solid;" "border:0px solid;"
"overflow: auto;" "overflow: auto;"
"}" "}"
@ -109,7 +109,7 @@ char * FwdPagetxt()
"{" "{"
"position: absolute;" "position: absolute;"
"width:180px;" "width:180px;"
"height:540px;" "height:500px;"
"border:2px solid;" "border:2px solid;"
"overflow: auto;" "overflow: auto;"
"}" "}"
@ -118,7 +118,7 @@ char * FwdPagetxt()
"position: absolute;" "position: absolute;"
"width:95px;" "width:95px;"
"left:190px;" "left:190px;"
"height:540px;" "height:500px;"
"border:2px solid;" "border:2px solid;"
"overflow: auto;" "overflow: auto;"
"}" "}"
@ -255,7 +255,6 @@ char * FwdPagetxt()
" <td><a href=\"/Mail/Wel?%s\">Welcome Msgs &amp; Prompts</a></td>" " <td><a href=\"/Mail/Wel?%s\">Welcome Msgs &amp; Prompts</a></td>"
" <td><a href=\"/Mail/HK?%s\">Housekeeping</a></td>" " <td><a href=\"/Mail/HK?%s\">Housekeeping</a></td>"
" <td><a href=\"/Mail/WP?%s\">WP Update</a></td>" " <td><a href=\"/Mail/WP?%s\">WP Update</a></td>"
"<td><a href=/Webmail>WebMail</a></td>"
" <td><a href=\"/\">Node Menu</a></td>" " <td><a href=\"/\">Node Menu</a></td>"
" </tr>" " </tr>"
" </tbody>" " </tbody>"
@ -280,8 +279,7 @@ char * FwdPagetxt()
" <br />" " <br />"
"Send P Msgs to more than one BBS&nbsp;<input %sname=SendPtoMultiple type=checkbox /><br />" "Send P Msgs to more than one BBS&nbsp;<input %sname=SendPtoMultiple type=checkbox /><br />"
" <br />" " <br />"
"Use 4 Char Continent Codes&nbsp;<input %sname=FourCharCont type=checkbox /><br />"
" <br />"
"Aliases<br />" "Aliases<br />"
" <br />" " <br />"
" <textarea rows=8 cols=12 name=Aliases>%s</textarea><br><br>" " <textarea rows=8 cols=12 name=Aliases>%s</textarea><br><br>"
@ -402,7 +400,6 @@ char * WebMailPagetxt()
"<td><a href=/WebMail/WMAuto?%s>Auto Refresh</a></td>\r\n" "<td><a href=/WebMail/WMAuto?%s>Auto Refresh</a></td>\r\n"
"<td><a href=\"#\" onclick=\"newmsg('%s'); return false;\">Send Message</a></td>\r\n" "<td><a href=\"#\" onclick=\"newmsg('%s'); return false;\">Send Message</a></td>\r\n"
"<td><a href=/WebMail/WMLogout?%s>Logout</a></td>\r\n" "<td><a href=/WebMail/WMLogout?%s>Logout</a></td>\r\n"
"<td><a href=/Mail/Header>Mail Mgmt</a></td>\r\n"
"<td><a href=/>Node Menu</a></td></tr></table>\r\n" "<td><a href=/>Node Menu</a></td></tr></table>\r\n"
"<br>\r\n" "<br>\r\n"
"<div align=left id=\"main\" style=\"overflow:scroll;\">\r\n" "<div align=left id=\"main\" style=\"overflow:scroll;\">\r\n"
@ -455,7 +452,6 @@ char * MainConfigtxt()
" <td><a href=\"/Mail/Wel?%s\">Welcome Msgs &amp; Prompts</a></td>\r\n" " <td><a href=\"/Mail/Wel?%s\">Welcome Msgs &amp; Prompts</a></td>\r\n"
" <td><a href=\"/Mail/HK?%s\">Housekeeping</a></td>\r\n" " <td><a href=\"/Mail/HK?%s\">Housekeeping</a></td>\r\n"
" <td><a href=\"/Mail/WP?%s\">WP Update</a></td>\r\n" " <td><a href=\"/Mail/WP?%s\">WP Update</a></td>\r\n"
"<td><a href=/Webmail>WebMail</a></td>"
" <td><a href=\"/\">Node Menu</a></td>\r\n" " <td><a href=\"/\">Node Menu</a></td>\r\n"
"</tr></table>\r\n" "</tr></table>\r\n"
"<br>\r\n" "<br>\r\n"
@ -705,7 +701,6 @@ char * MsgPagetxt()
" <td><a href=\"/Mail/Wel?%s\">Welcome Msgs &amp; Prompts</a></td>\r\n" " <td><a href=\"/Mail/Wel?%s\">Welcome Msgs &amp; Prompts</a></td>\r\n"
" <td><a href=\"/Mail/HK?%s\">Housekeeping</a></td>\r\n" " <td><a href=\"/Mail/HK?%s\">Housekeeping</a></td>\r\n"
" <td><a href=\"/Mail/WP?%s\">WP Update</a></td>\r\n" " <td><a href=\"/Mail/WP?%s\">WP Update</a></td>\r\n"
"<td><a href=/Webmail>WebMail</a></td>"
" <td><a href=\"/\">Node Menu</a></td>\r\n" " <td><a href=\"/\">Node Menu</a></td>\r\n"
" </tr>\r\n" " </tr>\r\n"
" </tbody>\r\n" " </tbody>\r\n"
@ -1065,7 +1060,6 @@ char * UserPagetxt()
"<td><a href=/Mail/Wel?%s>Welcome Msgs & Prompts</a></td>\r\n" "<td><a href=/Mail/Wel?%s>Welcome Msgs & Prompts</a></td>\r\n"
"<td><a href=/Mail/HK?%s>Housekeeping</a></td>\r\n" "<td><a href=/Mail/HK?%s>Housekeeping</a></td>\r\n"
"<td><a href=/Mail/WP?%s>WP Update</a></td>\r\n" "<td><a href=/Mail/WP?%s>WP Update</a></td>\r\n"
"<td><a href=/Webmail>WebMail</a></td>"
"<td><a href=/>Node Menu</a></td></tr></table>\r\n" "<td><a href=/>Node Menu</a></td></tr></table>\r\n"
"<br>\r\n" "<br>\r\n"
"<div id=\"outer\">\r\n" "<div id=\"outer\">\r\n"
@ -1122,7 +1116,6 @@ char * Housekeepingtxt()
"<td><a href=/Mail/Wel?%s>Welcome Msgs & Prompts</a></td>\r\n" "<td><a href=/Mail/Wel?%s>Welcome Msgs & Prompts</a></td>\r\n"
"<td><a href=/Mail/HK?%s>Housekeeping</a></td>\r\n" "<td><a href=/Mail/HK?%s>Housekeeping</a></td>\r\n"
"<td><a href=/Mail/WP?%s>WP Update</a></td>\r\n" "<td><a href=/Mail/WP?%s>WP Update</a></td>\r\n"
"<td><a href=/Webmail>WebMail</a></td>"
"<td><a href=/>Node Menu</a></td></tr></table>\r\n" "<td><a href=/>Node Menu</a></td></tr></table>\r\n"
"<br>\r\n" "<br>\r\n"
"<div style=\"text-align: center;\"><font size=\"+1\"><span style=\"font-family: monospace; font-weight: bold;\">Housekeeping</span></font></div>\r\n" "<div style=\"text-align: center;\"><font size=\"+1\"><span style=\"font-family: monospace; font-weight: bold;\">Housekeeping</span></font></div>\r\n"
@ -1371,7 +1364,6 @@ char * WPtxt()
" <td><a href=\"/Mail/Wel?%s\">Welcome Msgs &amp; Prompts</a></td>\r\n" " <td><a href=\"/Mail/Wel?%s\">Welcome Msgs &amp; Prompts</a></td>\r\n"
" <td><a href=\"/Mail/HK?%s\">Housekeeping</a></td>\r\n" " <td><a href=\"/Mail/HK?%s\">Housekeeping</a></td>\r\n"
" <td><a href=\"/Mail/WP?%s\">WP Update</a></td>\r\n" " <td><a href=\"/Mail/WP?%s\">WP Update</a></td>\r\n"
"<td><a href=/Webmail>WebMail</a></td>"
" <td><a href=\"/\">Node Menu</a></td>\r\n" " <td><a href=\"/\">Node Menu</a></td>\r\n"
" </tr>\r\n" " </tr>\r\n"
" </tbody>\r\n" " </tbody>\r\n"

View File

@ -225,8 +225,6 @@ struct STREAMINFO
char AGWKey[21]; // Session Key for AGW Session Based Drivers char AGWKey[21]; // Session Key for AGW Session Based Drivers
time_t ConnectTime; // Time connection made time_t ConnectTime; // Time connection made
time_t AttachTime;
int BytesTXed; int BytesTXed;
int BytesAcked; int BytesAcked;
int BytesRXed; int BytesRXed;
@ -260,7 +258,6 @@ struct STREAMINFO
HWND xIDC_DIRN; HWND xIDC_DIRN;
int RelaySyncStream; int RelaySyncStream;
int VaraACMode;
}; };
typedef struct AGWINFO typedef struct AGWINFO
@ -412,7 +409,7 @@ struct FreeDataINFO
char * SSIDS[16]; char * SSIDS[16];
}; };
struct sixPackInfo;
typedef struct TNCINFO typedef struct TNCINFO
{ {
@ -430,9 +427,6 @@ typedef struct TNCINFO
time_t SessionTimeLimit; // Optional limit to total session time time_t SessionTimeLimit; // Optional limit to total session time
time_t DefaultSessionTimeLimit; // Configured value time_t DefaultSessionTimeLimit; // Configured value
time_t AttachTimeLimit; // to trap port left attached for a long time without other activity
time_t AttachTime;
int Hardware; // Hardware Type int Hardware; // Hardware Type
#define H_WINMOR 1 #define H_WINMOR 1
@ -455,7 +449,6 @@ typedef struct TNCINFO
#define H_WINRPR 17 #define H_WINRPR 17
#define H_HSMODEM 18 #define H_HSMODEM 18
#define H_FREEDATA 19 #define H_FREEDATA 19
#define H_SIXPACK 20
int Port; // BPQ Port Number int Port; // BPQ Port Number
@ -846,8 +839,6 @@ typedef struct TNCINFO
char * NRNeighbour; char * NRNeighbour;
int NRCloseTimer; int NRCloseTimer;
struct _LINKTABLE * DummyLink; // Simulated link to simplify interface to ax,25 netrom code struct _LINKTABLE * DummyLink; // Simulated link to simplify interface to ax,25 netrom code
struct sixPackPortInfo * sixPack;
int VaraACMode;
} *PTNCINFO; } *PTNCINFO;

9
upnp.c
View File

@ -85,7 +85,6 @@ char * leaseDuration = NULL;
struct UPNPDev * devlist = 0; struct UPNPDev * devlist = 0;
char lanaddr[64] = "unset"; /* my ip address on the LAN */ char lanaddr[64] = "unset"; /* my ip address on the LAN */
char wanaddr[64] = "unset"; /* my ip address on the LAN */
struct UPNPUrls urls; struct UPNPUrls urls;
struct IGDdatas data; struct IGDdatas data;
@ -127,11 +126,7 @@ int upnpInit()
return 0; return 0;
} }
#if MINIUPNPC_API_VERSION == 18
i = UPNP_GetValidIGD(devlist, &urls, &data, lanaddr, sizeof(lanaddr), wanaddr, sizeof(wanaddr));
#else
i = UPNP_GetValidIGD(devlist, &urls, &data, lanaddr, sizeof(lanaddr)); i = UPNP_GetValidIGD(devlist, &urls, &data, lanaddr, sizeof(lanaddr));
#endif
} }
AddMap(devlist->descURL, Config->LANport, Config->WANPort, Config->Protocol); AddMap(devlist->descURL, Config->LANport, Config->WANPort, Config->Protocol);
@ -158,11 +153,7 @@ int upnpClose()
return 0; return 0;
} }
#if MINIUPNPC_API_VERSION == 18
i = UPNP_GetValidIGD(devlist, &urls, &data, lanaddr, sizeof(lanaddr), wanaddr, sizeof(wanaddr));
#else
i = UPNP_GetValidIGD(devlist, &urls, &data, lanaddr, sizeof(lanaddr)); i = UPNP_GetValidIGD(devlist, &urls, &data, lanaddr, sizeof(lanaddr));
#endif
} }
DeleteMap(devlist->descURL, Config->LANport, Config->WANPort, Config->Protocol); DeleteMap(devlist->descURL, Config->LANport, Config->WANPort, Config->Protocol);