Re: CVS and Jar files: Should you import Jar into the Repository? Why or why not

2002-03-06 Thread Ralph Mack

 >If  only Sun's Java team understood  the importance of
 >version  tracking in  JAR  files and  in  RMI definitions.

Sun has a version standard that defines at the package
level the format of an interface specification version
(major.minor.edit), the format of an implementation version
(a string, comparable for equality but not for less than/
greater than), and the names of the appropriate labels to
use for them in the MANIFEST.MF. I think it even showed a
set of methods on one of the system classes to look all this
data up and compare interface versions. It has been out
there for some time; I have a dog-eared hard copy at the
office that I printed over a year ago and I don't think it
was recent then. A search on the http://java.sun.com site
should scare it up.

Of course, Jar versioning doesn't help you particularly for
RMI, does it? Or does it?

It would be very nice if the version tab in Windows and the
version checking logic in InstallShield were smart enough to
pick up jar versions, but I don't see that happening any
time soon.

Ralph


___
Info-cvs mailing list
[EMAIL PROTECTED]
http://mail.gnu.org/mailman/listinfo/info-cvs



Re: cvs commit as root

2001-12-09 Thread Ralph Mack

> Let me clear something up here.  First off, I'm not debating the value
> of your technique.  Like I said, it is well beyond my level of operation.
>
> Only descibed my home grown technique as strictly amatuer hour.  Just
> filled in a little to show how it actualy works.
>
> > For example how would you manage per-user crontab files?  I did it quite
> > simply in my makefile with this kind of rule:
>
> In my setup, its not the kind of thing I would be concerned with.
> I don't expect to cause mass harm with crontab settings. Although
> possible I'm sure.  My crontab usage is rather low level.
> I'm more concerned with keeping tabs on things that effect the system
> in a basic way.  Things like /etc/fstab /etc/profile /etc/syslog. Or
> on freeBSD things like /etc/rc.conf  The heart of the config setup.
> rc.firewall and others of similar importance.

One of the implications of CVS managing your files as source files rather
than as deployed files is that CVS assumes a certain latitude in how it
uses file system "attribute" information like permissions and ownership
and such. CVS tends to do this sort of thing a directory at a time, which
is a very broad brush, particularly when you are talking about something
like the /etc directory. CVS updates also, I believe, recreate files in
working directories without respect to their prior attributes.

Keeping a layer of makefile/script between your source control system and
your deployment areas gives you a greater control of file system attributes
of deployed files. If you are concerned about security you may want this
layer in place, as there are some files (e.g. /etc/profile) that, in order
to be used on a day-to-day basis, need different permissions than you would
willingly place on other files like, say, /etc/shadow.

There is always a continuum between convenience and security that any
system admin needs to weigh. I won't intrude on your prerogative with
arguments or suggestions in this regard beyond thinking about the
hassles involved if a third party used your system as a staging platform
for an attack on somebody with something valuable to lose and the
habit of pushing their weight around.

On one front I agree with you: most shell script looks a bit like line
noise. :-) However, it can be learned with surprisingly little effort.
The base rules are very simple and shell script is very idiomatic. Some
combinations of syntax and commands are so useful that they tend to get
used quite a lot. Once you've learned a few of the common idioms, it
becomes very easy to read scripts like /etc/rc.local or /etc/profile
and nothing that you are likely to use for this purpose will be more
complicated than those. Besides you will need a good command of shell
script in order to manage a Unix-influenced operating system effectively
anyway. Without it you are severely hampered.

If makefiles make you uncomfortable, start out with a few simple shell
scripts and learn make later. All make really gives you over a well-written
shell script is convenience and run-time efficiency (since it inherently
checks file dates before doing anything).

Ralph


___
Info-cvs mailing list
[EMAIL PROTECTED]
http://mail.gnu.org/mailman/listinfo/info-cvs



Re: .doc file concerns

2001-06-26 Thread Ralph Mack

I also need to store and version my design documentation with the code 
that implements the design.

I have some rather strong requirements for meaningful use - 
1) The most important content will be pictures - class and ladder 
   diagrams - with explanatory text. I also use sidebars, i.e. 
   multiple content streams.
2) I don't want to have to remember and enter tags - I'd prefer a 
   pull-down of predefined styles, with some automation of which 
   paragraph style follows which header style, etc.
3) I need to be able to see what the *printed* result will look like 
   while I'm authoring it (WYSIWYG or near-WYSIWYG). 

CVS has some rather strong requirements for efficient storage and 
meaningful versioning - 
1) The content, including any figures, must be stored in a 100% text 
   representation.
2) The process of editing must produce differencable changes in the 
   stored document, i.e. opening, editing, and saving a document should
   produce differences only in the area edited.
3) The raw text view has to be meaningfully editable to resolve merge
   conflicts.

I will gladly use a document editor that satisfies both sets of 
requirements. The requirements seem to recommend a dual-view editor 
(where you can edit in either the raw or cooked view). The dual-view 
editors I've seen for HTML are kind of primitive w.r.t their handling 
of styles. Are there such editors for any of the traditional Unix 
document formats, like *roff or LATEX? I think the latest version of 
Word might do what I want (moment of weakness: will it?), but I'd 
rather not get into Word and line Bill's pockets much more than I 
already have. 

Ralph A. Mack


___
Info-cvs mailing list
[EMAIL PROTECTED]
http://mail.gnu.org/mailman/listinfo/info-cvs



repository surfing

2001-06-21 Thread Ralph Mack

> I've got two engineers here who want to be able to just view the files 
> in the repository without checking them out.  These are ex-ClearCase 
> users and, let me quote  "I could do that in ClearCase."  Yes, they are 
> aware they can checkout read-only.  They don't want to have to checkout 
> to view files.

The nature of the quote suggests that they were users of ClearCase but
not involved in its administration nor aware of how it works. What they 
are looking for is not direct access to the repository (vob in ClearCase 
terms) but an equivalent to ClearCase "dynamic views", where a view is 
implemented as a file system. By varying a short text configuration spec, 
the versions of files in the view auto-magically change. CVS's approach 
is similar to ClearCase "snapshot views", or the sandbox mechanism 
supported by virtually every other source control system on the planet.

AFAIK, ClearCase is the only SCM that implements views of versions of
data as a file system. Most other SCMs require you to specify how it 
should determine the version you want and then copies the files to a 
sandbox. MVFS is a neat feature, but ClearCase's implementation requires 
a company to pay a full-time staff to administer and maintain it. (I've 
never been in an organization running ClearCase with less than two such 
people.) This isn't generally necessary for PVCS or SourceSafe or CVS.

Ralph A. Mack


___
Info-cvs mailing list
[EMAIL PROTECTED]
http://mail.gnu.org/mailman/listinfo/info-cvs



Re: BRANCH LABEL FOR DIRECTORIES

2001-06-20 Thread Ralph Mack

"Greg A. Woods" wrote:

> Ah, but in this case I can.  Everything I've described about tracking
> the renaming/moving of files using "cvs rm" and "cvs add" with magically
> meaningful comment strings can be easily automated by a front-end.  No
> change is necessary in CVS itself to achieve this functionality,
> therefore it is provably not a necessary feature of the basic CVS
> functionality.

I guess I'm ok with this as long as the format that is used permits
both a machine-automatable comment and a human-to-human comment.
Tactful political commentary is sometimes necessary to explain why
an otherwise competent programmer did something patently stupid:
"RENAME/MOVE -> fubar/coolfeature : Files moved to fubar project due
to management insistance"

My philosophy around merges is that the more frequently they are done
the smaller and therefore safer they are. Any system in which merges are
difficult to get right, where even simple merges require judgement not
only about the source code and what you are merging but what version to
use as a base, will encourage people to do as few of them as possible.

In my view, a version control system should capture and use what
information it can about the versions to make merges no larger or
more dangerous than they need to be. I believe that the smallest,
safest merges generally occur when the version control system uses
for its base version the most recent common ancestor of both the
versions being merged. CVS currently fails to track two types of
historical events critical to making this determination (file
migration and past merges).

They could be collected by a scripting layer above CVS. This layer
could contain the intelligence to query CVS about the merge-relevant
information that it holds and combine it with this collected information
to calculate for each file the optimal base version to use for a merge.
It seems more natural to me that CVS, which already has most of the
merge-relevant information, track the other two pieces of merge-
relevant information and perform the calculation to identify the
optimal base itself as a part of default behavior. Then all of the
merge-relevant information is being tracked together in the repository.

There has been good talk about technical feasibility of keeping the
information in CVS. We've established that there is a place where the
data could be kept in the rcs files without messing up rcs compatibility.
Someone came up with a general work list - a prodigious general work list.

I'm not particularly "religious" about binary files, locking, or empty
directories, the other recently-hot topics on here. I think that hooks
for external diff-merge tools for binary file formats would be a good
move likely to spawn a cottage industry in such things that could only
be good for everyone, since they could be used by all kinds of tools.
Beyond that, I wouldn't want to see CVS go overboard over binaries.
It is a *source* control system based on differencing.

OK. I've expressed my views and have commenced to repeat myself, so it
is time for me to stop talking and put up or shut up. I started
contributing to the ArgoUML project a year and a half ago and then had
to bail a couple of months later due to work; I hated to do it, but I
learned a valuable lesson. I can't pull a passionate four-hour worknight
after pulling a passionate nine-to-ten-hour workday.

If I cared less about my work than I do or did less of it, I could
eagerly pour my heart into authoring the appropriate patches. But I
already have a wife, a son, and a mistress (my work), and I've learned
I haven't the stamina for two mistresses. If I've lit a spark for
anyone else, I will be delighted to encourage them and to test their
patches.

I will continue to comment from time to time in this group (albeit more
briefly - I promise :-)) but I suspect I would be of greater service to
the open source community if I spent an hour or two a night testing some
worthy open-source project and filing bugs or picking up filed bugs and
fixing them. If I lack the stamina to do what I would like, at least I
should do what I can. Maybe ArgoUML will take me back on that basis...

Ralph A. Mack


___
Info-cvs mailing list
[EMAIL PROTECTED]
http://mail.gnu.org/mailman/listinfo/info-cvs



Re: BRANCH LABEL FOR DIRECTORIES

2001-06-19 Thread Ralph Mack

>> cp olddir/oldfile.c newdir/newfile.c
>> cp olddir/oldfile2.c newdir/newfile2.c
>> cvs rm -f olddir/*
>> cvs add newdir/newfile.c newdir/newfile2.c
>> cvs commit -m 'reorganized source to be better'
>> cvs update -P

> However I can't let that sit.  What a downright stupid and misleading
> example.  

This doesn't seem like a manufactured scenario to me - more like something
that comes up every so often, although I'll admit it has fewer files than 
the normal case. It looks like what I would do if you had to move the 
contents of a directory from one place in the directory tree to another? 
How would you do it, Greg? 

It isn't enough to say that you simply wouldn't let this happen to you.
Migrations, even mass migrations, are a fact of life; demands of logistics
often place their prevention beyond our control; since they cannot be 
prevented, they need to be supported without damaging continuity.

> CVS isn't a market driven product -- it's a freeware niche product.

I don't see CVS as a niche product at all. CVS is as mainstream as Linux
or Java. Most of what most people need is easy to learn and use, with 
the exception of branches and merges. Set up is kind of fragmentary, as
for many Linux services, but it seems to have all the right hooks in all 
the right places for integration into corporate build mechanisms. Its
support for Windows clients is adequate. As companies become more 
accustomed to shareware, I could see it become the preferred version 
control system for corporate Unix/Linux. If the Windows version could 
register out of the box as a Win2000 service, I could see it becoming 
popular for Windows shops, too.

Its biggest drawback as a mainstream product is that branching and 
merging require you to know a lot more than with other products and
require certain voluntary behaviors that aren't immediately obvious,
like tagging on both branches when doing merges. A few enhancements, 
like tracking moves, renames, and merges will permit reasonable default 
behavior in most situations for those developers who do not have a 
passionate interest in revision control.

Ralph A. Mack


___
Info-cvs mailing list
[EMAIL PROTECTED]
http://mail.gnu.org/mailman/listinfo/info-cvs



Re: BRANCH LABEL FOR DIRECTORIES

2001-06-19 Thread Ralph Mack

> Greg's comments generally fall under the "That's by design" category 
> but it's not obvious that that design is good.

Every team needs someone who is passionate about protecting the elegance 
of the original design and not succumbing to creaping-feeturitis. For this 
reason, I'm very, very glad that Greg is here. 

However, I do tend toward the notion that a revision control system
should automatically track important events in the lives (plural, 
given branching) of every file it contains, including merges, moves, 
and renames. Not supporting these affects the continuity of the history,
which in turn affects automated operations like subsequent merges.

> I've been working lately with a SCM tool that versions directories and
> I've found that it makes life much easier (at least with regards to 
> renames and branching).
 
If it is possible to truly track directory changes by inference from 
file changes, I'm all for it. Directory tracking is problematic in a 
variety of ways, as it is in some sense a second view of some of the
same data. I suspect that the imperfections in directory tracking 
you've experienced may a side-effect of imperfections in tracking file 
movement and renaming. If these are done correctly, it should be possible 
to infer directory behavior from them. 

The two directory changes that I can think of that can't be inferred 
from properly tracked file activity are creation and deletion; the only
effect of this is that an empty directory is indistinguishable from an
absent one. I think accurately tracking the existence of empty directories 
is the least of CVS's limitations, so I'm willing to let that one go. 

Ralph A. Mack


___
Info-cvs mailing list
[EMAIL PROTECTED]
http://mail.gnu.org/mailman/listinfo/info-cvs



Re: BRANCH LABEL FOR DIRECTORIES

2001-06-17 Thread Ralph Mack

>> you can't reorganize your sources (e.g. rename a file).

> Yes, you CAN.  All rename operations, in all facets of computing, is
> simply a deletion and an addition in whatever order is appropriate (and
> sometimes it's an atomic operation from the point of view of the user,
> and sometimes, as currently in CVS, it's not).

Well, that depends upon what you mean by "an addition", doesn't it,
Greg? If you mean the deletion of the old object with all of its baggage
and the creation of a new object _with all of the old object's baggage_,
I would tend to agree that the sequence implements the concepts of
renaming or moving an object.

In a Unix file system, that baggage consists of a set of permissions,
owner and group assignments, and perhaps a couple of things that I
forget, but is nonetheless a relatively light bundle.

A file under revision control has a history of revisions (and - one hopes -
ancestors and migrations) that describe all the important events of its
colorful life. Does moving or renaming a file by deletion and addition
retain the file's family history? It sounds to me as if it reduces it to a
Unix file with none of these attributes and then recreates it as if it were
newborn. All connection to the past is lost.

Do you regard this loss as a frivolous concern? To me the power of source
control lies not just in its ability to store all the versions of software
but to accurately reflect the historic relationships of those versions.
After corporate restructurings, when there is nobody to ask, sometimes only
the source control system can give any clue as to what really happened -
and sometimes we can even infer why.

Ralph A. Mack


___
Info-cvs mailing list
[EMAIL PROTECTED]
http://mail.gnu.org/mailman/listinfo/info-cvs



Re: Maintaining branches...

2001-06-13 Thread Ralph Mack

[Quoth I... :-)]
> 0. select a reference version and a from and to version
> 1. make a diff from the reference version to the "from" version
> 2. make a diff from the reference version to the "to" version
> 3. merge the diffs (preferably with optional user input), and
> 4. apply the result to the "to" version.

As I lay in bed thinking about all this, it suddenly occurred to me 
that, since CVS is always using the root as its reference version, 
CVS (and its ancestor RCS) can get away with not recalculating any 
diffs at all during an update but merely selecting from among the 
diffs calculated during prior commits. This is a significant time 
savings. A commit becomes the only operation that actually 
calculates a diff as a side-effect.

Is this true? If so, it seriously restricts the kind of merge 
behavior that CVS can support, but I can see why it was done. 
Lots of other things about CVS that seemed a little odd also 
suddenly become comprehensible.

How hard is it to extract three different revisions of the same 
file to a temp area outside of the normal checkout tree using 
CVS? (I'm contemplating what a seperate graphical merge utility 
layered on CVS might need to do.) This approach would be slow, 
of course, as it would have to extract and diff twice for every 
file in the covered area to determine if there is any work to 
do for each one. The result of the merge would be copied back 
to the checkout tree.

By the way - step 4 should have read "apply the result to the 
reference version" (not the "to" version). I'm going back to bed. :-)

Ralph A. Mack


___
Info-cvs mailing list
[EMAIL PROTECTED]
http://mail.gnu.org/mailman/listinfo/info-cvs



Re: Maintaining branches...

2001-06-13 Thread Ralph Mack

[Quoth Stephen Cameron...]
> There is no merge history.

OUCH! That should probably be mentioned when people are comparing
CVS to things like ClearCase. Merge history is an important feature.
In ClearCase, you can get a version tree for each file showing every 
branch and merge that ever occurred, which I have found essential 
when trying to figure out precisely what happened. Knowing the merge
history also enables the findmerge tool to know the best reference
version to use for merges, which generally keeps merges very small.

I am a little puzzled that people aren't having more problems with
merges in CVS. When there is pipelined development going on, it seems 
inevitable that you are going to be copying changes across at least 
three versions of a product on a relatively frequent basis. Do CVS 
developers really do all these parallel updates by hand-editing with 
cut/paste?

Maybe the term "merge" is ambiguous. My concept of a merge is:
0. select a reference version and a from and to version
1. make a diff from the reference version to the "from" version
2. make a diff from the reference version to the "to" version
3. merge the diffs (preferably with optional user input), and
4. apply the result to the "to" version.
Does CVS use a different merge concept entirely? 

Assuming that the answer is "no", how much of this is user-accessible?
Does CVS support a command to do a merge of two revisions of a single 
file from a user-specified reference revision? This is the fundamental 
user-controlled merge operation. From your comments, it sounded like 
the answer is "no", that it always merges from the root of the oldest
branch or some such thing. 

I would like to see CVS support, at least for individual files, a 
means to specify the "from", "to", and "reference" revisions on an 
update. CVS could generalize this to directories and trees by 
permitting the user to specify branches or labels for "from" and 
"to" and a label for the reference revision. With this support, 
everything else (e.g. labeling important merge points) could then be 
done through customary disciplines, like "always label after checking 
in a merge", possibly supported through scripts. 

This approach seems to be in harmony with the CVS philosophy of 
providing the raw mechanics without dictating how they are to be 
used. Did I miss something?

Ralph A. Mack


___
Info-cvs mailing list
[EMAIL PROTECTED]
http://mail.gnu.org/mailman/listinfo/info-cvs



Maintaining branches...

2001-06-12 Thread Ralph Mack

Hello, all,

I have a couple of questions.

First a question for my home environment - has anybody managed
to integrate CVS into Visual Age for Java? I got the Zeus-SCC
stuff and I tried to use it from VAJ but it killed the VAJ
environment. I may have had it set up wrong, though. If I at
least know that it is supposed to work, it will help me focus
my efforts.

Next about branches...

At the office we use (or are used by) ClearCase (I'm never quite
sure which). We have a mainline that is only used for releases.
We have an integration branch that is used to collect various developers'
stuff during development, and, for most parts of
the project, each developer has their own working branch. There
are a lot of merges back and forth between the integration branch
and the developers' branches.

That seems like a lot of branching activity - I think they do it
partly because only datacenter systems are backed up and developers
store all views on their own PCs so no file is "safe" until it is
checked in. My part of the project does things a little differently.
We make a branch for each task or bugfix and then merge back into
the integration branch. That way we know exactly what files were
changes for each fix. We only have to merge back from integration
and then merge new changes to integration if a bug is reopened.

What I'm reading about branching and merging makes me think that
a branch-merge pair on CVS is a one-way trip, that once you have
merged from a branch you can't merge to that branch from the
updated mainline and then merge back again. Another interpretation
is that you have to specify your merge "control points" (from, to,
last common ancestor) manually.

Does CVS branching and merging allow the developer to do the kind
of rev-up/promote merge pattern that we do routinely with ClearCase?
If you have to specify all three control points, shouldn't CVS be
able to figure out the last common ancestor from the merge history?
Is this another situation complicated by directories not being
versioned?

Ralph A. Mack


___
Info-cvs mailing list
[EMAIL PROTECTED]
http://mail.gnu.org/mailman/listinfo/info-cvs



Re: Use of CVS on large scales

2001-06-08 Thread Ralph Mack

[Quoth Donald Sharp...]
> Go with Clearcase if you have 100+ developers.

> CVS starts to break down( ie become unuseable ) with
> over a 100 developers actively developing at a single time.
> This is related to how cvs does file locking inside of
> the repository when people commit/update/checkout in the
> repository.

If you deploy all of your source control for a large project through
one repository, your concerns may be true, but there is an alternative
when this becomes a problem: Put major divisions of the projects in
different repositories to distribute the load. Even ClearCase uses
multiple vobs on multiple servers, but ClearCase doesn't require the
users to know what server their vob is on. They do have to know what
vob they are using, though, when creating branches and labels.

> Another good advantage of Clearcase is the multisite capabilities.
> If you have developers working at a large number of remote
> sites, you might want to think seriously about this.

Here I might suggest that the first strategy should be to serve
repositories closest to the majority of people that are using them.
If a few people have to snarf sources over a distance, it generally
isn't a major problem. FWIW, you run into these issues with ClearCase
multisite as well. It isn't as seamless a distributed VOB as one would
hope - the term "VOB mastership" may ring a bell with some.

> Especially if they are connected at a relatively slow ethernet speeds
> or their connection can be unreliable

The source pool for even a large body of code is surprisingly small.
Development-time binaries like icons and bitmaps likewise tend to be small.
What gets big are the binaries built from these little bits and pieces.
Solution - don't store derivative files under source control. In extremis,
tarballs of nightly builds on appropriate platforms can save a lot of time
once the interfaces between components are relatively stable. But don't
store these under source control - put them in a directory somewhere.

Ralph A. Mack


___
Info-cvs mailing list
[EMAIL PROTECTED]
http://mail.gnu.org/mailman/listinfo/info-cvs



Re: Use of CVS on large scales

2001-06-08 Thread Ralph Mack

One thing which has been alluded to but not expanded on adequately -

I have been in a couple of organizations that use ClearCase and in 
both cases it has been necessary to have a team *dedicated* to 
supporting it. It has a definite MIS/central management flavor to it. 
It is too complex to effectively distribute control to the teams.
I generally see CVS as something which the development teams using 
it can support. 

Some things need to be centrally managed - things that nobody sees
except when they aren't done, like backups or maintaining the 
corporate email system. Other things need to be centrally managed
because they coordinate the activities of the corporation as a whole.
Customer problem reporting and resolution are arguably in this category
if the corporation is large and geographically diverse. But source 
control is something which can be effectively distributed among the 
organizations that need it. This is both cheaper and more effective 
than centralizing it.

So, in management buzzwords, provided you do sensible things to keep
control of repositories local to the development teams that use them, 
my sense is that CVS has better Total Cost of Ownership (TCO). 
Of course, CVS has a $30 head start in TCO over ClearCase right 
out of the gate :-).

Ralph A. Mack


___
Info-cvs mailing list
[EMAIL PROTECTED]
http://mail.gnu.org/mailman/listinfo/info-cvs



Re: Linux security issues as they pertain to CVS

2001-05-31 Thread Ralph Mack

[Greg Woods wrote...]

> By allowing *anyone* to use CVS on your machine you are very nearly
> granting them shell access anyway!  If you do so in a totally
> unaccountable way (i.e. with pserver) then you've just lost the
> integrity (and thus the security) of your repository.

> I.e. CVS cannot guarantee that it will not allow a remote user to
> execute any arbitrary command (and indeed maybe even any arbitrary code
> whatsoever).  There is no inherent security in CVS -- anyone who can
> execute it can probably do anything as the user it executes as.

Perhaps this is what I am missing, then. How does CVS access "very
nearly grant them shell access"? By what mechanism do you see this 
happening? 

Are you assuming that there is a risk worthy of consideration that, 
since no service can be proven to not possess program bugs, and since
some bugs allow code to be injected into programs, any running service 
must be assumed to contain code that was not a part of its original 
design, code "contributed" by a hacker at runtime that may run in any 
account to which the service has access? 

The implication of this would be that no restriction in the design of 
a program is of any significance to security, since no assumptions can 
be made about the actual contents of the running code. The only factor
about a running server that is of any significance is the set of accounts 
to which it is may acquire access during execution. 

Of course, this would apply to the code implementing tunneling services
or ssh or any of a dozen other services as well, no? The fundamental 
paradox of security is that you have to trust someone in order to know 
whom to trust. :-) If we aren't worried about those services, then the
argument is really "I trust these coders not to screw up (perhaps only
because I have to) but not those coders." That's fine; but if that is 
the substance of your argument, it needs to be stated plainly. 

Or is there something more specific to CVS that I am missing? Let us
presume from the outset that reasonable precautions have been made about 
the CVSROOT directory that prevent it from being modified except in a 
local account on the system. This is a known vulnerability, dealt with 
easily enough. Is there something else in CVS that permits its users to
affect files outside of the repository?

Once we're past this point in the discussion, I'll bring up the notion of
what is or isn't considered "acceptable risk" and why.

Ralph A. Mack


___
Info-cvs mailing list
[EMAIL PROTECTED]
http://mail.gnu.org/mailman/listinfo/info-cvs



RE: Linux security issues as they pertain to CVS

2001-05-25 Thread Ralph Mack

Greg,

> Some of the systems that allow this are buggy. Others are broken by 
> design (the system will not let a process permanently discharge its 
> privileged state).  I have made changes to my NetBSD kernel which I 
> believe prevent this from ever happening (at the expense of totally
> eliminating the ill-designed system calls which allow it in the first
> place), but even with those changes I would still not feel safe 
> enough to run CVS as root from inetd (i.e. as a non-anonymous 
> pserver).

This is interesting and you obviously have a lot of experience in this 
area - can you elaborate either here or via private eMail? What system 
calls? What design flaws? Is Linux one of the systems to which you refer? 
I want to understand the mechanism well enough to avoid problems in  
coding wherever possible and to identify and correct problems in other 
folks' code that I encounter. Forewarned is forearmed.

> Worst of all of course is the fact that CVS does not need pserver 
> junk. It works entirely perfectly with any external remote job 
> execution tool.

And any external remote job execution tool will also presumably be 
using setuid() to ensure that it follows the rules because that is
how any daemon does it, right? Its chief advantage is that rje tools 
tend to be more closely examined because the cost (and benefit, I
suppose, to some) of a hole in such a tool is proportionally higher.

However, I am beginning to understand Mr. Price's argument...

It occurs to me that :pserver brings one valuable thing to the table 
that other mechanisms do not. It recognizes that there are two kinds 
of CVS user identity - the user identity through which source changes 
as tracked by CVS, and the operating system user account used to 
determine permissions. 

In other modes of access, the operating system user identity becomes 
the sole user identity tracked by CVS, since there is no other 
identity to be found. This "identity of identities" :-) is a problem 
for many environments. 

System administrators want exclusive control of system user account 
creation. They don't want to deal with user accounts for individual 
CVS users - CVS users come and go at an alarming rate especially on 
open source projects - the road to Linux was paved with good 
intentions - and system administrators aren't equipped to deal with 
user account management at faster than the typical corporate hire/fire 
rate. 

They would rather delegate CVS user identity management to someone 
closely associated with the repository they are serving, someone who 
can't create user accounts or groups, only assign CVS users to 
existing user accounts. CVS users under the same system account have 
the same access to the same files and belong to the same groups. 

However, CVS is open source and can change. An access mode that uses 
something external and well-examined to secure the connection and 
verify account access safely (or better yet provides hooks to do so) 
but separately manages and secures the user identity within CVS would 
be of great value. It could even continue to use the familiar 
CVSROOT/passwd file for the latter role.

Now is that what Mr. Price did or did he do something else?

Ralph


___
Info-cvs mailing list
[EMAIL PROTECTED]
http://mail.gnu.org/mailman/listinfo/info-cvs



Linux security issues as they pertain to CVS

2001-05-25 Thread Ralph Mack

Hello,

I've been following the discussion between Messrs. Price and Woods
with some interest but with little comprehension. 

I know what setuid() is and does fundamentally - it lets a privileged
user act as another user. It is used to perform services in behalf of
another user and actually exists for a security purpose - to ensure 
that the program can't perform actions that the user is not ordinarily 
permitted to perform. That's one edge of the sword. The other edge is 
that if the program can be induced to improperly identify the user for 
whom it is performing an action, it may inadvertently permit some other 
user to perform actions they are not ordinarily permitted to perform.

I suppose one approach (perhaps I should call it the Woods 
approach :-)) would be to treat me as a child and say "setuid() baaad - 
you aren't wise enough to manage that kind of power - forget it". Of 
course, I never liked that kind of treatment even when I was a child. 
What I much preferred, both then and now, is to understand the 
circumstances under which a powerful tool can be harmful and how to 
mitigate the risks to an acceptable level. (Yes, there is ALWAYS such 
a thing as an acceptable level of risk.)

Now it seems to me that when looking at a program I have to ask "What
actions can this program perform in a setuid() environment?" 

CVS can edit files in CVSROOT, which include some scripts that will be 
executed in the server context. This is an interesting risk, but one 
that can be more easily tightened down, at least to some extent. 
For instance, these files can be restricted fairly easily to only be 
written to by a group whose members have individual login ids and no 
pserver access.

CVS can also do what it is meant to do - edit source files under revision
control. Assuming that somebody got somebody else's pserver password by
sniffing, etc., I fail to see how this permits the user to do anything
except checkout, edit, checkin, tag, and remove files from the source 
control system, i.e typical CVS user actions. There is a risk of rogue
code getting slipped in, but this can be managed by other means. I am
assuming that the source code isn't seen as a major "trade secret" by
the owner of the CVS repository. This is pretty limited in scope.

Of course, the last 50 or 100 Linux patches I've seen from RedHat have
been from exposures where buffer overflows could be exploited to execute 
a statement from a setuid() environment. I'm sure there've probably been
a few of those fixed in CVS and I'm sure there may eventually be a few
more. This sort of thing is the security risk (deemed acceptable by most)
of working in any software environment these days. 

That's my child's-eye view of setuid(). What gaping hole did I miss?

Ralph A. Mack


___
Info-cvs mailing list
[EMAIL PROTECTED]
http://mail.gnu.org/mailman/listinfo/info-cvs



RE: problem with LF <--> CRLF trasnlation

2001-05-19 Thread Ralph Mack

My current favorite for editing files of uncertain parentage on Windows 
is Textpad (http://www.textpad.com). It's shareware, so no source, but 
it's cheap and solid and starts up fast - and, of course, it supports 
Windows key bindings (unlike VI :-)). It has some programmer-friendly 
stuff like syntax-highlighting. I use it as a notepad replacement for 
those times when I want to glance through some code and don't want to 
wait for a bulky IDE to come up.

What makes it relevant here is that it not only properly displays LF-
delimited files and preserves the dominant existing line ending style 
of files, but it has explicit commands for tweaking the line termination 
on existing files one way or the other. This can help if a file has been 
damaged and has mixed line terminators, which is guaranteed to happen 
from time to time if you're developing in a mixed-OS environment. 

Ralph

> From: "Echlin, Michael" <[EMAIL PROTECTED]>
>
> Mike, 
> 
> Suggesting to a windows user to use VI???
> 
> That's scary :-)
> 
> Mike.


___
Info-cvs mailing list
[EMAIL PROTECTED]
http://mail.gnu.org/mailman/listinfo/info-cvs



Setting up repository - very odd - help!

2001-05-11 Thread Ralph Mack

Hello all,

I finally got on broadband, so I picked up a cheap PC to use as my Linux
server,
and started setting up services on it, including setting up CVS for
:pserver:
access from my Win2000 box.

At first things were going great. I got it set up and was able to login from
my Windows 2000 box and use the CVS command line and WinCVS on Win2000 to
import all of my projects into the repository.

I look and everything is there - only the files were set with my personal
group instead of the "cvs" group and they had a username of "ralph" rather
than "root". Strange...

Then I say to myself "OK, now let's get these files back out so I can work
on them."
I do a cvs checkout and I get:

cvs server: cannot open /root/.cvsignore: Permission denied
cvs [server aborted]: can't chdir(/root): Permission denied

OK, now this really doesn't seem right. Any clues?
My config is:

SystemAuth=no
PreservePermissions=no
TopLevelAdmin=no

My passwd has ralph and anonymous with working passwords.

I don't want to loosen the permissions on root for obvious reasons.
Where else can I look? It is almost as if cvs is not operating as root.
Is there some other bit I need to set? (I know I need to tighten up my
CVSROOT before I open up 2401 on my firewall so I can get at my sources
from the office. Everything I've done so far is on my local LAN.)

drwxrwxr-x3 root cvs  4096 May 10 01:59 CVSROOT
drwxrwxr-x3 ralphcvs  4096 May  9 02:17 CharMaster
drwxrwxr-x5 anonymou cvs  4096 May  9 03:34 Desktop
drwxrwxr-x2 ralphcvs  4096 May  9 02:13 LANSwap
drwxrwxr-x2 ralphcvs  4096 May  9 02:24 OrderOfBattle
drwxrwxr-x2 ralphcvs  4096 May 10 01:48 OrderOfBattle-PPC

Oh - yeah - versions - server is RedHat 6.2 (CVS 1.0.7) and client is
1.10. (I'll go to 1.11 when I upgrade my RedHat box to 7.1.)

Thanks,

Ralph A. Mack


___
Info-cvs mailing list
[EMAIL PROTECTED]
http://mail.gnu.org/mailman/listinfo/info-cvs