HISTORY.TXT
(for DosLynx v0.39b, May 2009)
by Fred C. Macall
Introduction
In this document, I'll try to take up where I left off in the last
history.txt and not rehash the history of the previous versions.
However, there is a cumulative list of unresolved bugs, issues, and To Do(s)
at the end. If you want to know everything else there is to know about my
previous releases of DosLynx, you can get that history from:
http://users.ohiohills.com/fmacall/dlx2xdoc.zip
and
http://users.ohiohills.com/fmacall/dlx3xdoc.zip .
dlx2xdoc.zip collects the info.htm and history.txt documents for all eight
of my DosLynx v0.2xb releases. dlx3xdoc.zip does likewise for all nine of
my DosLynx v0.3xb releases.
Cookies Support for Short FQHNs
Of course, we won't share cookies we've received from sourceforge.net with
(any of the many) other hosts in the net top level domain. But, we may want
to support sourceforge.net's cookies when we contact sourceforge.net.
And, we may want to do that, in general, for any host. Even those, like
sourceforge.net, with a fully qualified host name (FQHN) that is too short
to include a related domain (name) part. DosLynx wasn't allowing that.
(Though it wasn't issuing a reject message for sourceforge.net's cookies,
either.)
This limitation came from assumptions backed up by checks for short FQHNs,
made in ckypname( ), getckies( ), and savecky( ) in CKIESRCV.CPP.
These routines and this module were introduced in the history.txt document
for DosLynx v0.34b. Removing the limitation was mostly a matter of
adjusting the checks to allow host names one qualification level shorter
than before. And, adjusting the code to eliminate a couple of assumptions
about the minimum length of the host names being processed in cookies.
The code that makes "domain match" checks has not been so adjusted.
So, if a sourceforge.net cookie should ever include a domain=.net attribute,
DosLynx will (still) reject it.
While in there, it was easy to add HTTPOnly to the list of recognized but
unused cookie attribute names. Thinking this through also prompted a small
extension in readcky( ), also in CKIESRCV.CPP. Now, while processing saved
cookies, it will check for a match with the (present) list of recognized
cookie attribute names. Any saved "cookie" found matching an attribute name
will be ignored.
DHCP Regression
Roberto, who uses a spanish ISP with domain ono.es, wrote to tell me that
the DHCP support in DosLynx quit working for him in version 0.38b.
Tests he ran for me, with the released version of TCPINFO and an
experimental version, pretty much established that the trouble was due to
adding DHCP option(s) to the DosLynx DHCP discover message.
Meanwhile, no one wrote to say that DosLynx v0.38b had fixed a DHCP issue
for them. So, I decided to grandfather the DosLynx v0.36b flavor DHCP
support, for my_ip=DHCP configuration. And, add a new my_ip=EDHCP
configuration for specifying the extended DHCP discover message.
If you found the DosLynx v0.38b style DHCP support to your liking, you will
need to change your DosLynx configuration to specify my_ip=EDHCP, with
version 0.39b.
The changes for this fix came in _dobootp( ), in PCBOOTP.C.
set_values( ), in PCCONFIG.C. main( ), in TCPINFO.C. And, in DOSLYNX.CFG.
Form Submission And Recognition
Walter Scott wrote to tell me of trouble that came upon submitting (search)
Form(s) found in document(s) from:
http://news.google.com .
(Walter's comments and reports have provided a number of new items for my
informal DosLynx issues list.) The trouble started with the Form tag's
action="/news?pz=1&ned=us&hl=en" and method="get"
attributes. The Form's first three "controls" are:
and
.
So, the URL resulting from this Form's submission looked like:
http://news.google.com/news?pz=1&ned=us&hl=en?pz=1&ned=us&hl=en&q= . . .
The Navigate|Show Destination URL (Alt-U) menu entry or command applied
to the Form's Submit Button demonstrated that result. In turn, Google acted
as though it wasn't prepared to process a request containing two query
parts. (The parts beginning with question marks.) I can only guess about
how or why this situation has developed.
I have seen one other Web site with a similar problem. The troublesome Form
from that site has an action= attribute ending in a question mark.
So, that Form's submission results in a doubled question mark.
And, that's something that site's server doesn't handle.
In both cases, the first query part is completely matched by the beginning
of the second query part. So, a bypass seems pretty easy and safe:
When a URL resulting for Form submission with method=get contains two query
parts, delete the first query part if it is matched by the beginning of the
second query part. I have implemented this bypass in TURLView::getChild( ),
in TURLVI18.CPP.
The Navigate|Show Destination URL (Alt-U) menu entry or command gets its
information from 'getChild( ). So, once you have DosLynx v0.39b installed,
you won't be aware of this issue in any case where it gets bypassed
successfully. Unless your use of some other browser or viewer discloses
a Form with an action= attribute containing a question mark.
Documents carrying Form tag(s) lacking an action= attribute pose a somewhat
related issue. What default should be provided for a missing action=
attribute? Well, action="" seems to represent a relative URL that is empty.
We take it to mean the containing document's URL. By extension, a missing
action= attribute might be taken to mean the same thing.
DosLynx had been ignoring such Forms. Sometimes robbing their containing
document of its central essence. So, I decided to correct that.
The needed change has been made in HTML_start_element( )'s case HTML_FORM,
in HTML.C.
Secure Connections for the E-mail Sending Client
Last fall, my ISP "transitioned" its e-mail service to make it a
full-fledged "Google App", based on the Gmail service. Since then, I
haven't been able to use my old DOS e-mail tools nor the DosLynx e-mail
client. Because, Gmail's SMTP and post office server(s) require that their
clients use secure (i.e.: TLS/SSL) connections. That is something the old
DOS e-mail clients, including the DosLynx e-mail client, have never done
before.
I didn't want to tackle this issue in DosLynx v0.38. But, in the end, it
seems as though I probably could have. The main complication is that there
seem to be two protocol variations being used for secure SMTP sessions:
The SSL Protocol defined by Netscape, beginning in 1995.
And, Secure SMTP Over TLS defined in RFCs 2487 and 3207, beginning in 1999.
Netscape's protocol usually is used on an SMTP host's or server's port 465.
In essence, the client simply makes a TCP/IP connection with the server.
And, then uses OpenSSL, via an SSL_connect( ) call, to negotiate a secure
TLS/SSL session.
The RFCs define some additional negotiation to be performed in the clear
before making the same SSL_connect( ) call. The principal component of this
negotiation is an ESMTP STARTTLS command. Apparently, SMTP servers may opt
to perform this protocol on either port 25 or port 587. This negotiation is
like the ESMTP AUTH LOGIN negotiation: The ESMTP server advertises STARTTLS
in response to the client's EHLO command. Seeing that advertisement, the
secure SMTP client issues a STARTTLS command. If all is well, the server
gives a 220 go ahead response. Then, the client makes its SSL_connect( )
call.
Once an SSL connection has been established, the session continues with a
220 go ahead from the server, in the Netscape protocol case.
Then, for all cases, the session continues with the client's usual EHLO.
And, likely, with an AUTH LOGIN negotiation. Though, of course, these are
encrypted once an SSL connection has been established.
The smtphost= configuration extension made in DosLynx v0.34b provides for
the port number configuration needed. I thought of trying to overload that
port number configuration for selecting a security protocol.
But, decided against that. Instead, a new smtpsec= configuration item
provides that. Its settings may be None (the default), LegacySSL, or
STARTTLS. Any one of those possibilities may be used together with any
smtphost= port number specification or its default (port 25).
These things are repeated in comments, in a new section for smtpsec=
configuration, in the updated example DOSLYNX.CFG file.
As usual, the new smtpsec= configuration item gets recognized in
TDosLynx::EvalConfigFile( ), in TDOSLY14.CPP. 'EvalConfigFile( ) leaves its
result, for smtpsec= configuration, in a new smtpsec global.
The smtpsec global is declared in GLOBALS.H and instantiated in GLOBALS.CPP.
All the rest of this enhancement is implemented, in #ifdef USE_SSL clauses,
in TDOSLY15.CPP. The global declarations, there, consist of:
#include
extern SSL * SSLphand ;
extern SSL_CTX * ssl_ctx ;
extern "C"
{
SSL * HTGetSSLHandle( ) ;
void HTSSLInitPRNG( ) ;
}
These refer to objects instantiated in the OpenSSL routines and in HTTP.C.
The objects in HTTP.C were introduced in the history.txt document for
DosLynx v0.38b.
Next, as in HTTP.C, there are #defines for HTTP_NETREAD( ),
HTTP_NETWRITE( ), and HTTP_NETCLOSE( ). Calls to these replace all the
existing s_read( ), s_write( ), and s_close( ) calls. They allow all the
code following the SSL_connect( ) call to do without explicit tests for
whether or not an SSL connection is in process.
Declarations and initialization added to TDosLynx::mailDeveloper( ), for
secure connections, consist of:
int status ;
BOOL try_tls = TRUE ;
SSLphand = 0 ;
Next, after a TCP/IP connection has been made, comes the possible STARTTLS
negotiation. Then, as in HTTP.C, a possible sequence of HTGetSSLHandle( ),
SSL_set_fd( ), HTSSLInitPRNG( ), and SSL_connect( ) calls.
The SSL_connect( ) call's return is handled just as in HTTP.C.
So, an initial SSL_connect( ) call tries to set up a TLS connection.
If that fails, another SSL_connect( ) call will get made, to try to set up
an SSL connection.
I now have sent DosLynx e-mail via Gmail, with each of the following two
configuration arrangements:
smtphost=smtp.gmail.com:465
smtpsec=LegacySSL
smtphost=smtp.gmail.com:587
smtpsec=STARTTLS
Updated Score
As explained under the heading: Keeping Score, in the history.txt for
DosLynx v0.20b, I am maintaining an informal written list of DosLynx issues
and their resolutions. In addition to the issues it's always had, this list
now includes issues that have come along in connection with the DosLynx
Protected Mode versions. At the time of this writing, for the release of
DosLynx v0.39b (late in April 2009), my list has about 631 issues.
Of these, about 443 (over two thirds) have been resolved or ameliorated.
This leaves a total of about 188 issues pending.
If you will look ahead to the next section for a moment, you may note that
several of the pending issues include the parenthetical observation:
"This is hardly an issue with the DosLynx Protected Mode versions."
For the most part, these are memory management issues that may be important
with the DosLynx Real Mode version. However, since the DosLynx
Protected Mode versions have memory to spare, these aren't significant
issues with them. As far as users of a DosLynx Protected Mode version are
concerned, the issues to which these observations apply have been resolved.
On the other hand, the DosLynx Protected Mode versions do have a few issues,
of their own, that don't apply to the Real Mode version.
A study identifying issues that don't apply to all three versions finds
about 169 issues pending for the Real Mode version. About 164 issues
pending for the 16-bit Protected Mode version. And, about 168 issues
pending for the 32-bit Protected Mode version. (These figures tend to be a
bit "noisy". They depend on how we count issues that pertain to the
OpenSSL support that only the 32-bit Protected Mode version has.)
In the next section, I'll list a few of the 188 pending issues that haven't
been mentioned above.
To Do
With both https/SSL support and secure e-mail support working in the
DosLynx 32-bit Protected Mode version, I feel that I have reached all of
my higher priority goals for DosLynxS. Whether either of the 16-bit
versions will ever be able to incorporate OpenSSL support still remains to
be seen. As the previous section indicates, my informal DosLynx issues
list still has a lot of pending issues. But, few of those seem to me to be
"burning" issues. If DosLynx has a burning issue, I think it is to find
some way to give it some support for Java Scripts! However, right now, I
can't plan on having that ready in the next release.
So, for the immediate future, I am going to spend less time on DosLynx.
And focus on developing a PMSMTP version for working with SMTP hosts that
require secure connections. After that is done, I hope to develop a PMPOP
replacement that will work with POP hosts that require secure connections.
If you use DosLynx at least occasionally, I hope you will write and tell me
what feature(s) or fix(es) would make it more useful for you.
Here is a summary of some of the pending DosLynx issues not discussed
anywhere above:
- Provide https/SSL/TLS support for the DosLynx 16-bit version(s).
(This is expected by many Web servers that support data entry.)
- Provide Login (original AUTHINFO) support for the news client?
- Support the HTML Form