Subject: cvs -- carriage return problems with cygwin 1.3.9 and interaction with setup's text file default
From: "Jeff Greif" <[email-masked]>
To: <[email-masked]>
Cc: "Jeff Greif" <[email-masked]>
Date: Thu, 14 Feb 2002 22:41:06 -0800

After getting new Norton Antivirus virus definitions last night, NAV
suddenly reported this morning that my old cygwin1.dll was infected with
what appears to be a new trojan program, and aborted a cvs checkin I was
doing to a remote server.  This was almost certainly a false positive but I
didn't figure that out until later.  Being in a hurry, I started a
download/install of the latest cygwin and went off for a couple of hours.
When I got back, I went through the virus description in detail, a full
virus scan etc (which found problems with various old cygwin1.dll files
embedded in the .tar.gz packages for the old releases).  As none of the
expected symptoms of infection appeared, I decided the alarm was false, but
now cvs didn't work.

After a cosmic struggle, including running the debugger on cvs 1.11, it
turns out that cvs was opening all its admin files, such as CVS/Root or
CVS/Repository in text mode ("r" not "rb"), and stripping off '\n' and
trailing spaces from the lines containing directories, but not '\r'.  So
when it sent its value of $CVSROOT, it sent something like
":ext:....../home/cvspub\r/CVSROOT"
and lookups would fail.  Something would be wrong with every directory
reference concatenated out of information in these files as it walked the
tree for any cvs command.  By reinstalling cvs but specifying Default Text
File Type = DOS in the main setup dialog, and making sure that binmode was
not set in the CYGWIN environment variable, cvs now had the right behavior
when it read its files.

Clearly, the various cvs administrative files had been produced in DOS text
mode using the earlier cygwin releases, but the new release, which I had
originally installed without changing any default settings, apparently uses
Unix mode by default.  Apparently if you read a DOS text mode file in a DOS
text mode environment, the '\r' characters automatically are removed before
they reach the program buffer, but if you read such a file in Unix text
mode, the '\r' characters are not treated specially.  Has there been a
recent change of this default?  If so, its consequences should be pointed
out to people who might be victimized in an upgrade.

I think it would be useful to update the cygwin faq with some well-chosen
advice about how to deal with DOS vs. Unix text file formats, particularly
pointing out that some of the programs in the cygwin release will only work
in DOS text mode if they were ever installed in DOS Text mode and wrote any
files.  It would also be helpful if there was a better explanation than what
I've found so far about the meaning of this setting in the setup dialogs.
What is actually changed by altering it?

The first time I tried to fix the problem by starting setup, changing the
setting from Unix text mode to DOS text mode, and continuing, I was told
"There is nothing to install."  I had to explicitly select cvs and specify
Reinstall to cause a change.

Presumably what I've done is partly bogus.  I should reinstall everything
with a consistent text mode setting, right, or some other programs will be
broken similarly to the way cvs was?

Jeff
--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Bug reporting:         http://cygwin.com/bugs.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/