home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Professional
/
OS2PRO194.ISO
/
os2
/
prgramer
/
unix
/
doc
/
cio.man
< prev
next >
Wrap
Text File
|
1990-12-07
|
12KB
|
282 lines
NAME
cio - a pair of RCS user interface programs
SYNOPSIS
cii [cii options] [ci options] [filename ...] [dirname ... ]
coo [coo options] [co options] [filename ...] [dirname ... ]
DESCRIPTION
Cii and coo are two programs that will provide an interface
to the RCS programs ci and co. They add: Recursively check
in/out directory structures, Store RCS files in a separate
directory structure, Default stores only ASCII files, ena-
bling program to be run on directories with both source and
binary.
Command line options include:
-A All files. Forces a "cp" of files that are non-ASCII.
-H Insert RCS header. If a valid RCS header not found, a
template header will be inserted at the beginning of
the file being checked in.
-N No operation. Causes cii or coo to display the action
that would have resulted. Nothing is executed.
-R Recursively walk down directories to check in/out
-T Force title request at start of program (Default only
gets title when required.)
-U Update source directory. During a check-in, a copy is
made to the directory structure specified by $RCSSRC.
If $RCSSRC is not defined, $HOME will be used instead.
-V Verbose. Be real talkative about the work being done.
[all ci/co options]
Passes all other options on to ci or co.
filename
Optional file names. If not provided, the cii program
will take all files in the current directory, or coo
will take all files saved in the RCS directory.
(Binary files only if -A was also specified.)
dirname
Both programs will take a directory name as an argu-
ment, however: the -R option must also be specified for
it to work.
ENVIRONMENT
RCSDIR
If defined, names a path that will be used to store the
RCS files. Default is $HOME/RCS. Final path is com-
puted by removing $HOME and/or $RCSWORK from current
path.
RCSWORK
If defined, an alternate prefix for current working
directory. Allows having multiple directory structures
with different prefix's.
HOME Must be defined as the users home directory.
RCSSRC
If defined and -U flag is specified, during a cii pro-
cedure, a copy of what's being checked in will be made
in the directory structure starting at $RCSSRC. If not
specified, cii uses $HOME instead.
RCSHEAD
If -H flag is specified, cii finds template header from
$RCSHEAD directory.
SAMPLES
A user with a home directory of /usr/bog, has a directory
structure called sample/arix. He want's to store all of the
files in /usr/bog/sample/arix into the RCS system. If nei-
ther RCSDIR or RCSWORK is defined, the RCS path defaults to
his home directory, followed by RCS, followed by the current
path. So:
Current directory : /usr/bog/sample/arix
Home directory : /usr/bog
RCSDIR :
RCSWORK :
RCSSRC :
Final RCS storage : /usr/bog/RCS/sample/arix
Final source storage: /usr/bog/sample/arix
The net effect of this command is to create the RCS
directory, then to duplicate the directory structure in a
defined place. In this case, since the RCSDIR was not
defined, it defaulted to the users home directory. It is not
necessary to build the directories in RCS, the program will
build all necessary directories (Including the RCS dir, if
needed). Another example: All RCS files should reside in
/usr/RCS, so the above example turns into:
Current directory : /usr/bog/sample/arix
Home directory : /usr/bog
RCSDIR : /usr/RCS
RCSWORK :
RCSSRC :
Final RCS storage : /usr/RCS/sample/arix
Final source storage: /usr/bog/sample/arix
Here is an example showing use of the RCSWORK variable. Some
sys- tems may have more than one person working on file. In
this case, the path names will have to be similar, but only
to a point. Example, /usr/tog is also working in a directory,
called sample/arix. His system would look like:
Current directory : /usr/tog/sample/arix
Home directory : /usr/tog
RCSDIR : /usr/RCS
RCSWORK :
RCSSRC :
Final RCS storage : /usr/RCS/sample/arix
Final source storage: /usr/tog/sample/arix
Note that the RCS dir is the same for him. Now, let's take a
user who has decided to work somewhere other than his home
directory.
Current directory : /usr/src/rog/sample/arix
Home directory : /usr/rog
RCSDIR : /usr/RCS
RCSWORK : /usr/src/rog
RCSSRC :
Final RCS storage : /usr/RCS/sample/arix
Final source storage: /usr/rog/sample/arix
If RCSSRC is specified to keep the current source (very
useful to when one wants to browse through the current source
files) in a directory other than his HOME.
Current directory : /usr/src/rog/sample/arix
Home directory : /usr/rog
RCSDIR : /usr/RCS
RCSWORK : /usr/src/rog
RCSSRC : /usr/group
Final RCS storage : /usr/RCS/sample/arix
Final source storage: /usr/group/sample/arix
The RCSWORK variable was removed from the current path,
before the directory structure was defined. Thus, it is
possible to be working in just about anywhere on the system
and still use the same directory structure and RCS files.
If you want to recover a directory (or multiple ones) into a
new working directory, simply create whatever part of the
path you need, set the RCSWORK variable to be the first part
of the path, and type "coo [-R]". Example: A new user
(/usr/log) has decided to examine the sample/* files. Here
are the steps:
Current working directory: /usr/llog
mkdir sample
chdir sample
RCSDIR=/usr/RCS export RCSDIR
RCSWORK=/usr/log export RCSWORK
This is the final setup:
Current directory: /usr/log/sample
Home directory : /usr/llog
RCSDIR : /usr/RCS
RCSWORK : /usr/log
Final RCS storage: /usr/RCS/sample/arix
SECURITY
Secure archives
Cii/coo will also secure archives. Changing ownership of
the cii or coo program to root, and making it suid will
allow private archives. With this option, an additional
environment variable is searched for: "RCSOWN". If this is
not found, the default name "rcsfiles" is used in the fol-
lowing step. The user name is searched for in the
/etc/password. If not found, the real users UID will be
used instead. In this fashion, the ci and co programs will
be called with the appropriate uses abilities to create
directories, and save files. Only the user who owns the RCS
files has write ability without going through the cii or coo
programs. The only condition that allows the program to
remain in the root owned mode is to have the rcsfiles have a
root account. Otherwise, it moves out of the root as soon
as it's found the user.
OTHER NOTES
Cii will not unlink files not owned by the user who is
checking in the files. This prevents users from deleting
files not owned by them, possibly causing harm. (I.E.,
checking in the /etc/passwd file.) coo does not run as root,
it runs as the real user. Hence, it is not possible for a
user to overwrite files or directories they normally do not
have write access to. Cii/coo only will allow extraction of
code by the users in the same group as the user who checked
the sources in.
We highly suggest that you exmine the code in the security
area if you plan on running it secure. We've tried it
secure, and it seems to work. However... We are by no
means the "great U*IX hackers", so there is probably some
way to run the program that we missed that can allow others
access to restricted files. Check it out! If you *do* find
something we missed, please send us mail.
EDITOR COMMANDS
The input editor for the logfile entries and title file
entries have tilde (~) command options available. These
are:
? - Print a help menu.
. - End of input.
! - Invoke a user shell. Note: Shell is invoked
as the real user-id; No arguments are passed
or allowed. The ENV variable "SHELL" is
searched for, if not present /bin/sh will be
invoked.
e - Edit the message using a default editor.
Searches for the ENV variable VISUAL or
EDITOR. If not found, /usr/bin/vi is the
default editor.
p - Print message buffer. Displays the current
contents of the message buffer.
r - Read in a file. Requires file name as an
argument. Named file will be appended to
current buffer.
w - Write message to a file. Requires file name
as an argument. Appends message buffer to
file name given. If file does not exist,
creates file. Does not create directories.
AUTHORS
Jason P. Winters (jason@grinch.uucp) and Craig J. Kim
(cjkim@aeras.uucp)
FILES
The following template files can be created to insert RCS
header into source files during cii process with -H option.
The location for these files is specified by setting
$RCSHEAD environment variable. If $RCSHEAD is not set,
$HOME will be used instead. File types are determined by
examining the content via file(1) program and by file exten-
sions (e.g. .c for C programs, .mk for makefiles, .1 for
nroff, and .s for assembly).
.rcshead - default template
.rcshead.c - C program template
.rcshead.s - Assembly source template
.rcshead.sh - Shell script template
.rcshead.f - Fortran program template
.rcshead.mk - makefile template
.rcshead.h - C header file template
.rcshead.roff - nroff, troff, man file template
DIAGNOSTICS
Linking cio to ciitest or cootest will cause the program to
parse the directory paths, and print out the final path-
names. Nothing else happens. Using the -N option will
cause the program to execute as normal, except that no files
or directories will be created.
BUGS
On some systems, the Control-D as end of input to a log or
title entry can cause problems with STDIN. We've added a
call to clearerr(), but have not tested if that fixes it. (
It doesn't break it, so... ) Any other bugs we would like to
hear about. We might even make a new release, if people
actually use this. :)
AUTHOR
Jason Winters, grinch!jason