v1.0.6 Release - 2015-08-03 - Andrew Leary

This commit is contained in:
Andrew Leary 2015-08-03 07:44:14 -04:00
parent 72d6daa978
commit bef52679ae
7 changed files with 86 additions and 35 deletions

View File

@ -1,4 +1,15 @@
v1.0.5 02-Nov-2014 - Andrew Leary v1.0.6 03-Aug-2015 - Andrew Leary
1. Added support for specifying a literal IPv6 address
encased in square brackets for a node. Previously, IPv6 was
only supported for nodes having an AAAA record for their
hostname in DNS.
2. The BBS now allows alphanumeric and punctuation
characters in user passwords. Previously, only alphanumeric
characters were permitted.
3. Several minor grammar and punctuation corrections.
v1.0.5 02-Nov-2014 - Andrew Leary (Never officially released)
1. Adjusted mbcico's .flo file logic to support a space 1. Adjusted mbcico's .flo file logic to support a space
character as the first character of the .flo file line. character as the first character of the .flo file line.

6
configure vendored
View File

@ -2309,10 +2309,10 @@ SUBDIRS="lib mbcico mbfido mbmon mbsebbs mbutils mbnntp mbtask mbsetup unix lang
PACKAGE="mbsebbs" PACKAGE="mbsebbs"
MAJOR="1" MAJOR="1"
MINOR="0" MINOR="0"
REVISION="5" REVISION="6"
VERSION="$MAJOR.$MINOR.$REVISION" VERSION="$MAJOR.$MINOR.$REVISION"
COPYRIGHT="Copyright (C) 1997-2014 Michiel Broek, All Rights Reserved" COPYRIGHT="Copyright (C) 1997-2015 Michiel Broek, All Rights Reserved"
SHORTRIGHT="Copyright (C) 1997-2014 M. Broek" SHORTRIGHT="Copyright (C) 1997-2015 M. Broek"
GROUP="bbs" GROUP="bbs"
OWNER="mbse" OWNER="mbse"
ROWNER="`id -un root`" ROWNER="`id -un root`"

View File

@ -12,10 +12,10 @@ AC_SUBST(SUBDIRS)
PACKAGE="mbsebbs" PACKAGE="mbsebbs"
MAJOR="1" MAJOR="1"
MINOR="0" MINOR="0"
REVISION="5" REVISION="6"
VERSION="$MAJOR.$MINOR.$REVISION" VERSION="$MAJOR.$MINOR.$REVISION"
COPYRIGHT="Copyright (C) 1997-2014 Michiel Broek, All Rights Reserved" COPYRIGHT="Copyright (C) 1997-2015 Michiel Broek, All Rights Reserved"
SHORTRIGHT="Copyright (C) 1997-2014 M. Broek" SHORTRIGHT="Copyright (C) 1997-2015 M. Broek"
GROUP="bbs" GROUP="bbs"
OWNER="mbse" OWNER="mbse"
ROWNER="`id -un root`" ROWNER="`id -un root`"

View File

@ -533,7 +533,7 @@ node *getnlent(faddr *addr)
static char buf[MAXNLLINELEN], ebuf[MAXNLLINELEN], *p, *q, tbuf[256]; static char buf[MAXNLLINELEN], ebuf[MAXNLLINELEN], *p, *q, tbuf[256];
struct _ixentry xaddr; struct _ixentry xaddr;
int i, Found = FALSE, ixflag, stdflag, ndrecord = FALSE; int i, Found = FALSE, ixflag, stdflag, ndrecord = FALSE;
char *mydomain, *path, *r; char *mydomain, *path, *r, *s;
struct _nlfil fdx; struct _nlfil fdx;
struct _nlidx ndx; struct _nlidx ndx;
int lowest, highest, current; int lowest, highest, current;
@ -1092,6 +1092,25 @@ node *getnlent(faddr *addr)
*/ */
snprintf(tbuf, 256, ":%u", tport); snprintf(tbuf, 256, ":%u", tport);
nodebuf.url = xstrcat(nodebuf.url, tbuf); nodebuf.url = xstrcat(nodebuf.url, tbuf);
} else if (tbuf[0] == '[') {
/*
* Literal IPv6 address, check for port number after
* ending bracket.
*/
s = strchr(tbuf, ']');
if (s == NULL) {
Syslog('+', "getnlent: invalid IPv6 address, cannot call");
if (nodebuf.url)
free(nodebuf.url);
nodebuf.url = NULL;
}
if (strchr(s, ':') == NULL) {
/*
* No port number given; add default.
*/
snprintf(tbuf, 256, ":%u", tport);
nodebuf.url = xstrcat(nodebuf.url, tbuf);
}
} }
} else if (nodebuf.dflags & myisdn) { } else if (nodebuf.dflags & myisdn) {

View File

@ -69,7 +69,7 @@ int opentcp(char *servname)
struct servent *se; struct servent *se;
struct sockaddr_in server; struct sockaddr_in server;
int rc, GotPort = FALSE; int rc, GotPort = FALSE;
char *portname, *ipver = NULL, servport[20], ipstr[INET6_ADDRSTRLEN]; char *tservname, *portname, *ipver = NULL, servport[20], ipstr[INET6_ADDRSTRLEN];
u_int16_t portnum; u_int16_t portnum;
struct addrinfo hints, *res=NULL, *p; struct addrinfo hints, *res=NULL, *p;
@ -80,10 +80,31 @@ int opentcp(char *servname)
Syslog('+', "Open TCP connection to \"%s\"", MBSE_SS(servname)); Syslog('+', "Open TCP connection to \"%s\"", MBSE_SS(servname));
tcp_is_open = FALSE; tcp_is_open = FALSE;
if ((tservname = strchr(servname,'['))) {
/* /*
* Literal IPv6 address; check for port after ending bracket.
*/
tservname++; /* Strip left bracket. */
portname = strchr(tservname,']'); /* Find end of IPv6 address. */
*portname++='\0'; /* Strip right bracket. */
if ((portname = strchr(portname,':'))) {
*portname++='\0';
if ((portnum = atoi(portname))) {
server.sin_port = htons(portnum);
GotPort = TRUE;
} else if ((se = getservbyname(portname, "tcp"))) {
server.sin_port= se->s_port;
GotPort = TRUE;
}
servname = tservname;
}
} else if ((portname = strchr(servname,':'))) {
/*
* Hostname or IPv4 address.
* Get port number from name argument if there is a : part * Get port number from name argument if there is a : part
*/ */
if ((portname = strchr(servname,':'))) {
*portname++='\0'; *portname++='\0';
if ((portnum = atoi(portname))) { if ((portnum = atoi(portname))) {
server.sin_port = htons(portnum); server.sin_port = htons(portnum);

View File

@ -104,14 +104,14 @@ int Ping(faddr *f, faddr *t, FILE *fp, int intransit)
fprintf(np, "\001PID: MBSE-FIDO %s (%s-%s)\r", VERSION, OsName(), OsCPU()); fprintf(np, "\001PID: MBSE-FIDO %s (%s-%s)\r", VERSION, OsName(), OsCPU());
fprintf(np, "\001TZUTC: %s\r", gmtoffset(Now)); fprintf(np, "\001TZUTC: %s\r", gmtoffset(Now));
fprintf(np, " Dear %s\r\r", MBSE_SS(f->name)); fprintf(np, " Dear %s,\r\r", MBSE_SS(f->name));
if (intransit) { if (intransit) {
fprintf(np, "You did send a PING to %s\r", ascfnode(t, 0x1f)); fprintf(np, "You sent a PING request to %s.\r", ascfnode(t, 0x1f));
fprintf(np, "This is a TRACE response from \"%s\" aka %s\r", CFG.bbs_name, ascfnode(from, 0x1f)); fprintf(np, "This is a TRACE response from \"%s\" (AKA %s).\r", CFG.bbs_name, ascfnode(from, 0x1f));
fprintf(np, "The time of arrival is %s\r", rfcdate(Now)); fprintf(np, "The time of arrival is %s.\r", rfcdate(Now));
} else } else
fprintf(np, "Your Ping arrived here at %s\r", rfcdate(Now)); fprintf(np, "Your PING request arrived here at %s.\r", rfcdate(Now));
fprintf(np, "Here are all the detected Via lines of the message from you:\r\r"); fprintf(np, "Here are all the detected VIA lines from your message:\r\r");
fprintf(np, "======================================================================\r"); fprintf(np, "======================================================================\r");
rewind(fp); rewind(fp);
@ -123,10 +123,10 @@ int Ping(faddr *f, faddr *t, FILE *fp, int intransit)
} }
fprintf(np, "======================================================================\r"); fprintf(np, "======================================================================\r");
fprintf(np, "\rWith regards, %s\r\r", CFG.sysop_name); fprintf(np, "\rAll the best,\r%s\r\r", CFG.sysop_name);
fprintf(np, "%s\r", TearLine()); fprintf(np, "%s\r", TearLine());
Now = time(NULL) - (gmt_offset((time_t)0) * 60); Now = time(NULL) - (gmt_offset((time_t)0) * 60);
rc = postnetmail(np, from, f, NULL, (char *)"Re: Ping", Now, 0x0000, FALSE, from->zone, f->zone); rc = postnetmail(np, from, f, NULL, (char *)"Re: Your PING Request", Now, 0x0000, FALSE, from->zone, f->zone);
tidy_faddr(from); tidy_faddr(from);
fclose(np); fclose(np);

View File

@ -758,11 +758,11 @@ void Getpass(char *theword)
continue; continue;
} /* Don't Backtrack as we are at the begining of the passwd field */ } /* Don't Backtrack as we are at the begining of the passwd field */
if (isalnum(c)) { if (((isalnum(c)) || (ispunct(c)))) {
password[counter] = c; password[counter] = c;
counter++; counter++;
printf("%c", CFG.iPasswd_Char); printf("%c", CFG.iPasswd_Char);
} } /* Allow alphanumeric and punctuation, but not CTRL characters or spaces */
} }
password[counter] = '\0'; /* Make sure the string has a NULL at the end */ password[counter] = '\0'; /* Make sure the string has a NULL at the end */