Installation instructions for Sudo 1.7
======================================

Sudo uses a `configure' script to probe the capabilities and type
of the system in question.  In this release, `configure' takes many
more options than it did before.  Please read this document fully
before configuring and building sudo.  You may also wish to read the
file INSTALL.configure which explains more about the `configure' script.

Simple sudo installation
========================

For most systems and configurations it is possible simply to:

    0) If you are upgrading from a previous version of sudo
       please read the info in the UPGRADE file before proceeding.

    1) Read the `OS dependent notes' section for any particular
       "gotchas" relating to your operating system.

    2) `cd' to the source or build directory and type `./configure'
       to generate a Makefile and config.h file suitable for
       building sudo.  Before you actually run configure you
       should read the `Available configure options' section
       to see if there are any special options you may want
       or need.

    3) Edit the configure-generated Makefile if you wish to
       change any of the default paths (alternatively, you could
       have changed the paths via options to `configure'.

    5) Type `make' to compile sudo.  If you are building sudo
       in a separate build tree (apart from the sudo source)
       GNU make will probably be required.  If `configure' did
       its job properly (and you have a supported configuration)
       there won't be any problems.  If this doesn't work, take
       a look at the files TROUBLESHOOTING and PORTING for tips
       on what might have gone wrong.  Please mail us if you have a
       fix or if you are unable to come up with a fix (address at EOF).

    6) Type `make install' (as root) to install sudo, visudo, the
       man pages, and a skeleton sudoers file.  Note that the install
       will not overwrite an existing sudoers file.  You can also
       install various pieces the package via the install-binaries,
       install-doc, and install-sudoers make targets.

    7) Edit the sudoers file with `visudo' as necessary for your
       site.  You will probably want to refer the sample.sudoers
       file and sudoers man page included with the sudo package.

    8) If you want to use syslogd(8) to do the logging, you'll need
       to update your /etc/syslog.conf file.  See the sample.syslog.conf
       file included in the distribution for an example.

Available configure options
===========================

This section describes flags accepted by the sudo's `configure' script.
Defaults are listed in brackets after the description.

Configuration:
  --cache-file=FILE
	Cache test results in FILE

  --config-cache, -C
	Alias for `--cache-file=config.cache'

  --help, -h
	Print the usage/help info

  --no-create, -n
	Do not create output files

  --quiet, --silent, -q
	Do not print `checking...' messages

Directory and file names:
  --prefix=PREFIX
	Install architecture-independent files in PREFIX This really only
	applies to man pages.  [/usr/local]

  --exec-prefix=EPREFIX
	Install architecture-dependent files in EPREFIX This includes the
	sudo and visudo executables.  [same as prefix]

  --bindir=DIR
	Install `sudo' in DIR [EPREFIX/bin]

  --sbindir=DIR
	Install `visudo' in DIR [EPREFIX/sbin]

  --sysconfdir=DIR
	Install `sudoers' file in DIR [/etc]

  --mandir=DIR
	Install man pages in DIR [PREFIX/man]

  --srcdir=DIR
	Find the sources in DIR [configure dir or ..]

Special features/options:
  --with-CC=PATH
	Specifies path to C compiler you wish to use.

  --with-incpath=DIR
	Adds the specified directory (or directories) to CPPFLAGS
	so configure and the compiler will look there for include
	files.  Multiple directories may be specified as long as
	they are space separated.
	Eg: --with-incpath="/usr/local/include /opt/include"

  --with-libpath=DIR
	Adds the specified directory (or directories) to LDFLAGS
	so configure and the compiler will look there for libraries.
	Multiple directories may be specified as with --with-incpath.

  --with-rpath
	Tells configure to use -Rpath in addition to -Lpath when
	passing library paths to the loader.  This option is on
	by default for Solaris and SVR4.

  --with-blibpath[=PATH]
	Tells configure to construct a -blibpath argument to the
	loader.  If a PATH is specified, it will be used as the
	base.  Otherwise, "/usr/lib:/lib:/usr/local/lib" will be
	used for gcc and "/usr/lib:/lib" for non-gcc.  Additional
	library paths will be appended as needed by configure.
	This option is only valid for AIX where it is on by default.

  --with-libraries=LIBRARY
	Adds the specified library (or libaries) to SUDO_LIBS and
	and VISUDO_LIBS so sudo will link against them.  If the
	library doesn't start with `-l' or end in `.a' or `.o' a
	`-l' will be prepended to it.  Multiple libraries may be
	specified as long as they are space separated.

  --with-efence
	Link with the "electric fence" debugging malloc.

  --with-bsm-audit
	Enable support for sudo BSM audit logs on systems that support
	it.  Currently only supported under FreeBSD and Mac OS X.

  --with-linux-audit
	Enable audit support for Linux systems.  Audits attempts
	to run a command as well as SELinux role changes.

  --with-csops
	Add CSOps standard options.  You probably aren't interested in this.

  --with-skey[=DIR]
	Enable S/Key OTP (One Time Password) support.  If specified,
	DIR should contain include and lib directories with skey.h
	and libskey.a respectively.

  --with-opie[=DIR]
	Enable NRL OPIE OTP (One Time Password) support.  If specified,
	DIR should contain include and lib directories with opie.h
	and libopie.a respectively.

  --with-SecurID[=DIR]
	Enable SecurID support.  If specified, DIR is directory containing
	sdiclient.a, sdi_athd.h, sdconf.h, and sdacmvls.h.

  --with-fwtk[=DIR]
	Enable TIS Firewall Toolkit (FWTK) 'authsrv' support. If specified,
	DIR is the base directory containing the compiled FWTK package
	(or at least the library and header files).

  --with-kerb4[=DIR]
	Enable Kerberos IV support.  If specified, DIR is the base
	directory containing the Kerberos IV include and lib dirs.
	This uses Kerberos passphrases for authentication but does
	not use the Kerberos cookie scheme.

  --with-kerb5[=DIR]
	Enable Kerberos V support.  If specified, DIR is the base
	directory containing the Kerberos V include and lib dirs.
	This This uses Kerberos passphrases for authentication but
	does not use the Kerberos cookie scheme.  Will not work for
	Kerberos V older than version 1.1.

  --with-ldap[=DIR]
	Enable LDAP support.  If specified, DIR is the base directory
	containing the LDAP include and lib directories.  Please see
	README.LDAP for more information.

  --with-ldap-conf-file=PATH
	Path to LDAP configuration file.  If specified, sudo reads
	this file instead of /etc/ldap.conf to locate the LDAP server.

  --with-ldap-secret-file=PATH
	Path to LDAP secret password file.  If specified, sudo uses
	this file instead of /etc/ldap.secret to read the secret password
	when rootbinddn is specified in the ldap config file.

  --with-nsswitch[=PATH]
	Path to nsswitch.conf or "no" to disable nsswitch support.
	If specified, sudo uses this file instead of /etc/nsswitch.conf.
	If nsswitch is disabled but LDAP is enabled, sudo will check
	LDAP first, then the sudoers file.

  --with-netsvc[=PATH]
        Path to netsvc.conf or "no" to disable netsvc.conf support.
        If specified, sudo uses this file instead of /etc/netsvc.conf
        on AIX systems.

  --with-aixauth
	Enable support for the AIX 4.x general authentication function.
	This will use the authentication scheme specified for the user
	on the machine.  It is on by default for AIX systems that
	support it.

  --with-pam
	Enable PAM support.  This is on by default for Darwin, FreeBSD,
	Linux, Solaris and HP-UX (version 11 and higher).

	NOTE: on RedHat Linux and Fedora you *must* have an /etc/pam.d/sudo
	file install.  You may either use the sample.pam file included with
	sudo or use /etc/pam.d/su as a reference.  The sample.pam file
	included with sudo may or may not work with other Linux distributions.
	On Solaris and HP-UX 11 systems you should check (and understand)
	the contents of /etc/pam.conf.  Do a "man pam.conf" for more
	information and consider using the "debug" option, if available,
	with your PAM libraries in /etc/pam.conf to obtain syslog output
	for debugging purposes.

  --with-pam-login
        Enable a specific PAM session when sudo is given the -i option.
	This changes the PAM service name when sudo is run with the -i
	option from "sudo" to "sudo-i", allowing for a separate pam
	configuration for sudo's initial login mode.

  --with-AFS
	Enable AFS support with Kerberos authentication.  Should work under
	AFS 3.3.  If your AFS doesn't have -laudit you should be able to
	link without it.

  --with-DCE
	Enable DCE support for systems without PAM.  Known to work on
	HP-UX 9.X, 10.X, and 11.0; other systems may require source
	code and/or `configure' changes.  On systems with PAM support
	(such as HP-UX 11.0 and higher, Solaris, FreeBSD and Linux), the
	DCE PAM module (usually libpam_dce) should be used instead.

  --with-logincap
	This adds support for login classes specified in /etc/login.conf.
	It is enabled by default on BSD/OS, Darwin, FreeBSD, OpenBSD and
	NetBSD (where available).  By default, a login class is not applied
	unless the 'use_loginclass' option is defined in sudoers or the user
	specifies a class on the command line.

  --with-bsdauth
	Enable support for BSD authentication.  This is the default
	for BSD/OS and OpenBSD systems that support it.
	It is not possible to mix BSD authentication with other
	authentication methods (and there really should be no need
	to do so).  Note that only the newer BSD authentication API
	is supported.  If you don't have /usr/include/bsd_auth.h
	then you cannot use this.

  --with-project
	Enable support for Solaris project resource limits.
	This option is only available on Solaris 9 and above.

  --with-noexec[=PATH]
	Enable support for the "noexec" functionality which prevents
	a dynamically-linked program being run by sudo from executing
	another program (think shell escapes).  Please see the
	"PREVENTING SHELL ESCAPES" section in the sudoers man page
	for details.  If specified, PATH should be a fully qualified
	path name, e.g. /usr/local/libexec/sudo_noexec.so.  If PATH
	is "no", noexec support will not be compiled in.  The default
	is to compile noexec support if libtool supports building
	shared objects on your OS.

  --disable-pam-session
        Disable sudo's PAM session support.  This may be needed on
        older PAM implementations or on operating systems where
        opening a PAM session changes the utmp or wtmp files.  If
        PAM session support is disabled, resource limits may not
        be updatedin for command being run.

  --disable-root-mailer
	By default sudo will run the mailer as root when tattling
	on a user so as to prevent that user from killing the mailer.
	With this option, sudo will run the mailer as the invoking
	user which some people consider to be safer.

  --disable-setreuid
	Disable use of the setreuid() function for operating systems
	where it is broken.  Mac OS X has setreuid() but it doesn't
	really work.

  --disable-setresuid
	Disable use of the setresuid() function for operating systems
	where it is broken (none currently known).

  --disable-sia
	Disable SIA support.  This is the "Security Integration
	Architecture" on Digital UNIX. If you disable SIA sudo will
	use its own authentication routines.

  --disable-shadow
	Disable shadow password support.  Normally, sudo will compile
	in shadow password support and use a shadow password if it
	exists.

  --with-sudoers-mode=MODE
	File mode for the sudoers file (octal).  Note that if you
	wish to NFS-mount the sudoers file this must be group
	readable.  Also note that this is actually set in the
	Makefile.  The default mode is 0440.

  --with-sudoers-uid=UID
	User id that "owns" the sudoers file.  Note that this is
	the numeric id, *not* the symbolic name.  Also note that
	this is actually set in the Makefile.  The default is 0.

  --with-sudoers-gid=GID
	Group id that "owns" the sudoers file.  Note that this is
	the numeric id, *not* the symbolic name.  Also note that
	this is actually set in the Makefile.  The default is 0.

  --without-interfaces
	This option keeps sudo from trying to glean the ip address
	from each attached ethernet interface.  It is only useful
	on a machine where sudo's interface reading support does
	not work, which may be the case on some SysV-based OS's
	using STREAMS.

  --without-passwd
	This option excludes authentication via the passwd (or
	shadow) file.  It should only be used when another, alternative,
	authentication scheme is in use.

  --with-otp-only
	This option is now just an alias for --without-passwd.

  --with-stow
	Properly handle GNU stow packaging.  The sudoers file will
	physically live in ${prefix}/etc and /etc/sudoers will be
	a symbolic link.

  --with-selinux 
	Enable support for role based access control (RBAC) on
	systems that support SELinux.

  --with-libvas=[NAME]
        Enable non-Unix group support using Quest Authentication
        Services.  If NAME is specified, it should be the name of
	the shared library providing QAS support (libvas.so by default).

  --with-libvas-rpath=[PATH]
	The path to search when loading libvas.so (or an alternate
	name as specified by --with-libvas).  This option only has
	an effect when --with-libvas is specified.

The following options are also configurable at runtime:

  --with-long-otp-prompt
	When validating with a One Time Password scheme (S/Key or
	OPIE), a two-line prompt is used to make it easier to cut
	and paste the challenge to a local window.  It's not as
	pretty as the default but some people find it more convenient.

  --with-logging=TYPE
	How you want to do your logging.  You may choose "syslog",
	"file", or "both".  Setting this to "syslog" is nice because
	you can keep all of your sudo logs in one place (see the
	sample.syslog.conf file).  The default is "syslog".

  --with-logfac=FACILITY
	Determines which syslog facility to log to.  This requires
	a 4.3BSD or later version of syslog.  You can still set
	this for ancient syslogs but it will have no effect.  The
	following facilities are supported: authpriv (if your OS
	supports it), auth, daemon, user, local0, local1, local2,
	local3, local4, local5, local6, and local7.

  --with-goodpri=PRIORITY
	Determines which syslog priority to log successfully
	authenticated commands.  The following priorities are
	supported: alert, crit, debug, emerg, err, info, notice,
	and warning.

  --with-badpri=PRIORITY
	Determines which syslog priority to log unauthenticated
	commands and errors.  The following priorities are supported:
	alert, crit, debug, emerg, err, info, notice, and warning.

  --with-logpath=PATH
	Override the default location of the sudo log file and use
	"path" instead.  By default will use /var/log/sudo.log if
	there is a /var/log dir, falling back to /var/adm/sudo.log
	or /usr/adm/sudo.log if not.

  --with-loglen=NUMBER
	Number of characters per line for the file log.  This is only used if
	you are to "file" or "both".  This value is used to decide when to wrap
	lines for nicer log files.  The default is 80.  Setting this to 0
	will disable the wrapping.

  --with-ignore-dot
	If set, sudo will ignore '.' or '' (current dir) in $PATH.
	The $PATH itself is not modified.

  --with-mailto=USER|MAIL_ALIAS
	User (or mail alias) that mail from sudo is sent to.
	This should go to a sysadmin at your site.  The default is "root".

  --with-mailsubject="SUBJECT OF MAIL"
	Subject of the mail sent to the "mailto" user. The token "%h"
	will expand to the hostname of the machine.
	Default is "*** SECURITY information for %h ***".

  --without-mail-if-no-user
	Normally, sudo will mail to the "alertmail" user if the user invoking
	sudo is not in the sudoers file.  This option disables that behavior.

  --with-mail-if-no-host
	Send mail to the "alermail" user if the user exists in the sudoers
	file, but is not allowed to run commands on the current host.

  --with-mail-if-noperms
	Send mail to the "alermail" user if the user is allowed to use sudo but
	the command they are trying is not listed in their sudoers file entry.

  --with-passprompt="PASSWORD PROMPT"
	Default prompt to use when asking for a password; can be overridden
	via the -p option and the SUDO_PROMPT environment variable. Supports
	the "%H", "%h", "%U" and "%u" escapes as documented in the sudo
	manual page.  The default value is "Password:".

  --with-badpass-message="BAD PASSWORD MESSAGE"
	Message that is displayed if a user enters an incorrect password.
	The default is "Sorry, try again." unless insults are turned on.

  --with-fqdn
	Define this if you want to put fully qualified hostnames in the sudoers
	file.  Ie: instead of myhost you would use myhost.mydomain.edu.  You may
	still use the short form if you wish (and even mix the two).  Beware
	that turning FQDN on requires sudo to make DNS lookups which may make
	sudo unusable if your DNS is totally hosed.  Also note that you must
	use the host's official name as DNS knows it.  That is, you may not use
	a host alias (CNAME entry) due to performance issues and the fact that
	there is no way to get all aliases from DNS.

  --with-timedir=PATH
	Override the default location of the sudo timestamp directory and
	use "path" instead.

  --with-sendmail=PATH
	Override configure's guess as to the location of sendmail.

  --without-sendmail
	Do not use sendmail to mail messages to the "mailto" user.
	Use only if don't run sendmail or the equivalent.

  --with-umask=MASK
	Umask to use when running the root command.  The default is 0022.

  --without-umask
	Preserves the umask of the user invoking sudo.

  --with-runas-default=USER
	The default user to run commands as if the -u flag is not specified
	on the command line.  This defaults to "root".

  --with-exempt=GROUP
	Users in the specified group don't need to enter a password when
	running sudo.  This may be useful for sites that don't want their
	"core" sysadmins to have to enter a password but where Jr. sysadmins
	need to.  You should probably use NOPASSWD in sudoers instead.

  --with-passwd-tries=NUMBER
	Number of tries a user gets to enter his/her password before sudo logs
	the failure and exits.  The default is 3.

  --with-timeout=NUMBER
	Number of minutes that can elapse before sudo will ask for a passwd
	again.  The default is 5, set this to 0 to always prompt for a password.

  --with-password-timeout=NUMBER
	Number of minutes before the sudo password prompt times out.
	The default is 5, set this to 0 for no password timeout.

  --without-tty-tickets
	By default, sudo uses a different ticket file for each user/tty combo.
	With this option disabled, a single ticket will be used for all
	of a user's login sessions.

  --with-insults
	Define this if you want to be insulted for typing an incorrect password
	just like the original sudo(8).  This is off by default.

  --with-insults=disabled
        Include support for insults but disable them unless explicitly
        enabled in sudoers.

  --with-all-insults
	Include all the insult sets listed below.  You must either specify
	--with-insults or enable insults in the sudoers file for this to
	have any effect.

  --with-classic-insults
	Uses insults from sudo "classic."  If you just specify --with-insults
	you will get the classic and CSOps insults.  This is on by default if
	--with-insults is given.

  --with-csops-insults
	Insults the user with an extra set of insults (some quotes, some
	original) from a sysadmin group at CU (CSOps).  You must specify
	--with-insults as well for this to have any effect.  This is on by
	default if --with-insults is given.

  --with-hal-insults
	Uses 2001-like insults when an incorrect password is entered.
	You must either specify --with-insults or enable insults in the
	sudoers file for this to have any effect.

  --with-goons-insults
	Insults the user with lines from the "Goon Show" when an incorrect
	password is entered.  You must either specify --with-insults or
	enable insults in the sudoers file for this to have any effect.

  --with-pc-insults
	Replace politically incorrect insults with less objectionable ones.

  --with-secure-path[=PATH]
	Path used for every command run from sudo(8).  If you don't trust the
	people running sudo to have a sane PATH environment variable you may
	want to use this.  Another use is if you want to have the "root path"
	be separate from the "user path."  You will need to customize the path
	for your site.  NOTE: this is not applied to users in the group
	specified by --with-exemptgroup.  If you do not specify a path,
	"/bin:/usr/ucb:/usr/bin:/usr/sbin:/sbin:/usr/etc:/etc" is used.

  --without-lecture
	Don't print the lecture the first time a user runs sudo.

  --with-editor=PATH
	Specify the default editor path for use by visudo.  This may be a
	single path name or a colon-separated list of editors.  In the latter
	case, visudo will choose the editor that matches the user's VISUAL
	or EDITOR environment variables or the first editor in the list that
	exists.  The default is the path to vi on your system.

  --with-env-editor
	Makes visudo consult the VISUAL and EDITOR environment variables before
	falling back on the default editor list (as specified by --with-editor).
	Note that this may create a security hole as it allows the user to
	run any arbitrary command as root without logging.  A safer alternative
	is to use a colon-separated list of editors with the --with-editor
	option.  visudo will then only use the VISUAL or EDITOR variables
	if they match a value specified via --with-editor.

  --with-askpass=PATH
        Set PATH as the "askpass" program to use when no tty is
        available.  Typically, this is a graphical password prompter,
        similar to the one used by ssh.  The program must take a
        prompt as an argument and print the received password to
        the standard output.

  --disable-authentication
	By default, sudo requires the user to authenticate via a
	password or similar means.  This options causes sudo to
	*not* require authentication.  It is possible to turn
	authentication back on in sudoers via the PASSWD attribute.

  --disable-root-sudo
	Don't let root run sudo.  This can be used to prevent people from
	"chaining" sudo commands to get a root shell by doing something
	like "sudo sudo /bin/sh".

  --enable-gss-krb5-ccache-name
        Use the gss_krb5_ccache_name() function to set the Kerberos
        V credential cache file name.  By default, sudo will use
        the KRB5CCNAME environment variable to set this.  While
        gss_krb5_ccache_name() provides a better API to do this it
        is not supported by all Kerberos V and SASL combinations.

  --enable-log-host
	Log the hostname in the log file.

  --enable-noargs-shell
	If sudo is invoked with no arguments it acts as if the "-s" flag had
	been given.  That is, it runs a shell as root (the shell is determined
	by the SHELL environment variable, falling back on the shell listed
	in the invoking user's /etc/passwd entry).

  --enable-shell-sets-home
	If sudo is invoked with the "-s" flag the HOME environment variable
	will be set to the home directory of the target user (which is root
	unless the "-u" option is used).  This option effectively makes the
	"-s" flag imply "-H".

  --disable-path-info
	Normally, sudo will tell the user when a command could not be found
	in their $PATH.  Some sites may wish to disable this as it could
	be used to gather information on the location of executables that
	the normal user does not have access to.  The disadvantage is that
	if the executable is simply not in the user's path, sudo will tell
	the user that they are not allowed to run it, which can be confusing.

  --disable-iologdir
	Disable sudo's I/O logging support.  This can be used to allow sudo
	to be compiled on systems without pseudo-tty support.

  --enable-iologdir[=DIR]
	By default, sudo stores I/O log files in either /var/log/sudo-io,
	/var/adm/sudo-sudo-io or /usr/log/sudo-io.  If DIR is
	specified, I/O logs will be stored in the indicated directory
	instead.

  --enable-zlib[=DIR]
	Enable the use of the zlib compress library when storing
	I/O log files.  If specified, DIR is the base directory
	containing the zlib include and lib directories.  By default
	zlib is used if it is found on the system and I/O logging
	support is not disabled.

  --disable-zlib
        Disable the use of the zlib compress library when storing
        I/O log files.

  --enable-warnings
	Enable compiler warnings when building sudo with gcc.

  --enable-admin-flag
	Enable the creation of an Ubuntu-style admin flag file
	the first time sudo is run.

Shadow password and C2 support
==============================

Shadow passwords (also included with most C2 security packages) are
supported on most major platforms for which they exist.  The
`configure' script will attempt to determine if your system can use
shadow passwords and include support for them if so.  Shadow password
support is now compiled in by default (it doesn't hurt anything if you
don't have them configured).  To disable the shadow password support,
use the --disable-shadow option to configure.

Shadow passwords are known to work on the following platforms:

    SunOS 4.x
    Solaris 2.x
    HP-UX >= 9.x
    Ultrix 4.x
    Digital UNIX
    IRIX >= 5.x
    AIX >= 3.2.x
    Linux
    SCO >= 3.2.2
    Pyramid DC/OSx
    UnixWare
    SVR4 (and variants using standard SVR4 shadow passwords)
    4.4BSD based systems (including OpenBSD, NetBSD, FreeBSD, and Mac OS X)
    Systems using SecureWare's C2 security.

OS dependent notes
==================

Linux:
    PAM and LDAP headers are not installed by default on most Linux
    systems.  You will need to install the "pam-dev" package if
    /usr/include/security/pam_appl.h is not present on your system.
    If you wish to build with LDAP support you will also need the
    openldap-devel package.

    Versions of glibc 2.x previous to 2.0.7 have a broken lsearch().
    You will need to either upgrade to glibc-2.0.7 or use sudo's
    version of lsearch().  To use sudo's lsearch(), comment out
    the "#define HAVE_LSEARCH 1" line in config.h and add lsearch.o
    to the LIBOBJS line in the Makefile.

    If you are using a Linux kernel older than 2.4 it is not possible
    to access the sudoers file via NFS.  This is due to a bug in
    the Linux client-side NFS implementation that has since been
    fixed.  There is a workaround on the sudo ftp site, linux_nfs.patch,
    if you need to NFS-mount sudoers on older Linux kernels.

Solaris 2.x:
    You need to have a C compiler in order to build sudo.  Since
    Solaris 2.x does not come with one by default this means that
    you either need to install the Sun Studio compiler suite,
    available for free from www.sun.com, or have a copy of the GNU
    C compiler (gcc) which is distributed on the Solaris Companion
    CD.  You can also get them from various places on the net,
    including http://www.sunfreeware.com/
    NOTE: sudo will *not* build with the sun C compiler in BSD
	  compatibility mode (/usr/ucb/cc).  Sudo is designed to
	  compile with the standard C compiler (or gcc) and will
	  not build correctly with /usr/ucb/cc.  You can use the
	  `--with-CC' option to point `configure' to the non-ucb
	  compiler if it is not the first cc in your path.  Some
	  sites link /usr/ucb/cc to gcc; configure will not notice
	  this and still refuse to use /usr/ucb/cc, so make sure gcc
	  is also in your path if your site is setup this way.
    Also: Older versions of Solaris come with a broken syslogd.
	  If you have having problems with sudo logging you should
	  make sure you have the latest syslogd patch installed.
	  This is a problem for Solaris 2.4 and 2.5 at least.

Mac OS X:
    The pseudo-tty support in the Mac OS X kernel has bugs related
    to its handling of the SIGTSTP, SIGTTIN and SIGTTOU signals.
    It does not restart reads and writes when those signals are
    delivered.  This may cause problems for some commands when I/O
    logging is enabled.  The issue has been reported to Apple and
    is bug id #7952709.

HP-UX:
    The default C compiler shipped with HP-UX does not support
    creating position independent code and so is unable to support
    sudo's "noexec" functionality.  You must use either the HP ANSI
    C compiler or gcc for noexec to work.  Binary packages of gcc
    are available http://hpux.connect.org.uk/.

    To prevent PAM from overriding the value of umask on HP-UX 11,
    you will need to add a line like the following to /etc/pam.conf:

    sudo	session	required	libpam_hpsec.so.1 bypass_umask

Digital UNIX:
    By default, sudo will use SIA (Security Integration Architecture)
    to validate a user.  If you want to use an alternative authentication
    method that does not go through SIA, you need to use the
    --disable-sia option to configure.  If you use gcc to compile
    you will get warnings when building interfaces.c.  These are
    harmless but if they really bug you, you can edit
    /usr/include/net/if.h around line 123, right after the comment:
	/* forward decls for C++ */
    change the line:
	#ifdef __cplusplus
    to:
	#if defined(__cplusplus) || defined(__GNUC__)
    If you don't like the idea of editing the system header file
    you can just make a copy in gcc's private include tree and
    edit that.

AIX 3.2.x:
    I've had various problems with the AIX C compiler producing
    incorrect code when the -O flag was used.  When optimization
    is not used, the problems go away.  Gcc does not appear
    to have this problem.

SCO ODT:
    You'll probably need libcrypt_i.a available via anonymous ftp
    from sosco.sco.com.  The necessary files are /SLS/lng225b.Z
    and /SLS/lng225b.ltr.Z.

SunOS 4.x:
    The /bin/sh shipped with SunOS blows up while running configure.
    You can work around this by installing bash or zsh.  If you
    have bash or zsh in your path, configure will use it instead
    automatically.

ULTRIX 4.x:
    The /bin/sh shipped with ULTRIX blows up while running configure.
    You can work around this by installing bash or zsh.  If you
    have bash or zsh in your path, configure will use it instead
    automatically.

    ULTRIX ships with the 4.2BSD syslog(3) which does not
    allow things like logging different facilities to different
    files, redirecting logs to a single loghost and other niceties.
    You may want to just grab and install:
	ftp://www.sudo.ws/pub/sudo/misc/jtkohl-syslog-complete.tar.gz
    (available via anonymous ftp) which is a port if the 4.3BSD
    syslog/syslogd that is backwards compatible with the Ultrix version.
    I recommend it highly.  If you do not do this you probably want
    to run configure with --with-logging=file
