This is Sudo version 1.7.4

The sudo philosophy
===================
Sudo is a program designed to allow a sysadmin to give limited root privileges
to users and log root activity.  The basic philosophy is to give as few
privileges as possible but still allow people to get their work done.

Where to find sudo
==================
Before you try and build sudo, *please* make sure you have the current
version.  The latest sudo may always be gotten via anonymous ftp from
ftp.sudo.ws in the directory /pub/sudo/ or from the sudo web site,
http://www.sudo.ws/

The distribution is sudo-M.m.tar.gz where `M' is the major
version number and `m' is the minor version number.
BETA versions of sudo may also be available.  If you join
the `sudo-workers' mailing list you will get the BETA announcements
(see the `Mailing lists' section below).

What's new
==========
See the NEWS file for a list of major changes in this release.
For a complete list of changes, see the ChangeLog file.  For a
summary of major changes to the current stable release, see the web
page, http://www.sudo.ws/sudo/stable.html.

If you are upgrading from an earlier version of Sudo, please see
the UPGRADE file.

For a history of sudo please see the HISTORY file.

System requirements
===================
To build sudo from the source distribution you need a machine running
Unix (most flavors of BSD, SYSV, or POSIX will do), a working C
compiler, and the make utility.

If you wish to modify the parser then you will need flex version
2.5.2 or later and either bison or byacc (sudo comes with a pre-flex'd
tokenizer and pre-yacc'd grammar parser).  You'll also have to
uncomment a few lines from the Makefile or run configure with the
--with-devel option.  You can get flex via anonymous ftp from
ftp://ftp.ee.lbl.gov/pub/flex* as well as any GNU mirror.  You can
get GNU bison from ftp://ftp.gnu.org/pub/gnu/bison/ or any GNU
mirror.

Building the release
====================
Please read the installation guide in the `INSTALL' file before
trying to build sudo.  Pay special attention to the "OS dependent notes"
section.

Copyright
=========
Sudo is distributed under an ISC-style license.
Please refer to the `LICENSE' file included with the release for details.

Mailing lists
=============
sudo-announce	This list receives announcements whenever a new version
		of sudo is released.
		http://www.sudo.ws/mailman/listinfo/sudo-announce

sudo-users	This list is for questions and general discussion about sudo.
		http://www.sudo.ws/mailman/listinfo/sudo-users

sudo-workers	This list is for people working on and porting sudo.
		http://www.sudo.ws/mailman/listinfo/sudo-workers

sudo-commits	This list receives a message for each commit made to
		the sudo source repository.
		http://www.sudo.ws/mailman/listinfo/sudo-commits

To subscribe to a list, visit its url (as listed above) and enter
your email address to subscribe.  Digest versions are available but
these are fairly low traffic lists so the digest versions are not
a significant win.

Mailing list archives are also available.  See the mailing list web sites
for the appropriate links.

Web page
========
There is a sudo web page at http://www.sudo.ws/ that contains
an overview of sudo, documentation, downloads, information about
beta versions and other useful info.

Bug reports
===========
If you have found what you believe to be a bug, you can file a bug
report in the sudo bug database, on the web at http://www.sudo.ws/bugs/.

Please read over the `TROUBLESHOOTING' file *before* submitting a bug
report.  When reporting bugs, please be sure to include the version of
sudo you are using as well as the platform you are running it on.
