ChangeLog   [plain text]

2011-01-18  Todd C. Miller  <>

	* term.c:
	Clear, don't set, OPOST in c_oflag as was intended in e26055d17b72.

2011-01-11  Todd C. Miller  <>

	* check.c:
	If the user is running sudo as himself but as a different group we
	need to prompt for a password.

2011-01-10  Todd C. Miller  <>

	* pwutil.c:
	If user has no supplementary groups, fall back on checking the group
	file explicitly.

2011-01-04  Todd C. Miller  <>

	* match.c:
	Fix NULL dereference with "sudo -g group" when the sudoers rule has
	no runas user or group listed. Fixes RedHat bug Bug 667103.

2010-12-21  Todd C. Miller  <>

	* term.c:
	Clear OPOST from c_oflag like we used to. Fixes screen-based
	editors such as vi.

	* sudoers.pod:
	Clarify umask option description. From Reuben Thomas.

2010-11-24  Todd C. Miller  <>

	* pp:
	Add support for RHEL 6 file modes that include a trailing dot on
	files with an SELinux security context

2010-11-22  Todd C. Miller  <>

	* sudoers.pod:
	fix typo; from Michael T Hunter

2010-10-07  Todd C. Miller  <>

	* check.c:
	Having a timestamp file defined is no longer indicative of tty
	tickets being enabled. Check def_tty_tickets directly.

2010-10-01  Todd C. Miller  <>

	* set_perms.c:
	Sync set_project() with trunk.

	* set_perms.c, sudo.c:
	Move set_project() into runas_setup(). Fixes a NULL deref when
	project support is enabled and sudo's -g flag is used without the
	-u flag.

2010-09-21  Todd C. Miller  <>

	* linux_audit.c:
	Ignore ECONNREFUSED from audit_log_user_command() which will occur
	if auditd is not running.

2010-09-13  Todd C. Miller  <>

	* install-sh:
	Use sed instead of expr to split a flag from its argument. Fixes a
	problem with expr interpreting its arguments as a flag when they
	start with a dash.

2010-09-08  Todd C. Miller  <>

	* bsm_audit.c:
	Solaris BSM audit return EINVAL when auditing is not enabled,
	whereas OpenBSM returns ENOSYS.

2010-09-07  Todd C. Miller  <>

	* toke.c, toke.l:
	Add missing LOG_INPUT/LOG_OUTPUT support in the lexer.

	* sudo.c:
	Set NewArgv[0] to the name of the pseudo-command we are running.
	Fixes a problem with "sudo -l" when auditing is enabled and the user
	is not allowed to run any commands on the host. Adapted from a patch
	from Daniel Kopecek.

2010-09-06  Todd C. Miller  <>

	* match.c:
	When matching the runas user and runas group (-u and -g command line
	options), keep track of runas group and runas user matches
	separately. Only return a positive match if we have a match for
	both runas user and runas group (if specified).

2010-09-04  Todd C. Miller  <>

	* ldap.c, parse.c:
	Do not return -1 on error from the display functions; the call
	expects a return value >= 0.

	* ldap.c:
	display_bound_defaults now returns a count so make the stub return
	0, not 1.

2010-09-03  Todd C. Miller  <>

	* get_pty.c:
	It looks like AIX doesn't need to push STREAMS modules for ptys.

2010-08-30  Todd C. Miller  <>

	Install sudoers file from the build dir not hte src dir.

2010-08-26  Todd C. Miller  <>

	* set_perms.c:
	If runas_pw changes, reset the stashed runas aux group vector.
	Otherwise, if runas_default is set in a per-command Defaults
	statement, the command runs with root's aux group vector (i.e. the
	one that was used when locating the command).

	Add target to generate sudoers file Remove generated sudoers file as
	part of distclean

2010-08-23  millert  <>

	* exec.c:
	When not logging I/O install a handler for SIGCONT and deliver it to
	the command upon resume. Fixes bugzilla #431

2010-08-21  Todd C. Miller  <>

	* sudo.c:
	Don't need to fork and wait when compiled with --disable-pam-session

2010-08-20  Todd C. Miller  <>

	* lbuf.c:
	Convert a remaining puts() and putchar() to use the output function.

2010-08-18  Todd C. Miller  <>

	Replace sudoers with in DISTFILES

	* env.c:
	Set dupcheck to TRUE when setting new HOME value if !env_reset but
	always_set_home is true. Prevents a duplicate HOME in the
	environment (old value plus the new one) introduced in 9f97e4b43a4b.

	* configure,, sudoers,
	Substitute sysconfdir in the installed sudoers file to get the
	correct path for sudoers.d.

2010-08-17  Todd C. Miller  <>

	* boottime.c, get_pty.c:
	Fix typos that prevented compilation on Irix; Friedrich Haubensak

2010-08-14  Todd C. Miller  <>

	* auth/pam.c:
	If the user hits ^C while a password is being read, error out before
	reading any further passwords in the pam conversation function.
	Otherwise, if multiple PAM auth methods are required, the user will
	have to hit ^C for each one.

2010-08-09  Todd C. Miller  <>

	* exec.c:
	Fix waitpid() loop termination condition.

	* exec_pty.c:
	Use sudo_waitpid() instead of bare waitpid()

2010-08-07  Todd C. Miller  <>

	* sudo.pp:
	Set pp_kit_version and strip off patchlevel

	* sudo.pp:
	Better handling of versions with a patchlevel. For rpm and deb, use
	the patchlevel+1 as the release. For AIX, use the patchlevel as the
	4th version number. For the rest, just leave the patchlevel in the
	version string.

2010-08-06  Todd C. Miller  <>

	* auth/sudo_auth.c:
	For non-standalone auth methods, stop reading the password if the
	user enters ^C at the prompt.

	* check.c:
	When removing/resetting the timestamp file ignore the tty ticket

2010-08-04  Todd C. Miller  <>

	Fix typo

2010-08-03  Todd C. Miller  <>

	* check.c:
	Do not produce a warning for "sudo -k" if the ticket file does not

2010-08-02  Todd C. Miller  <>

	* aclocal.m4, configure:
	Add cross-compile defaults for remaining AC_TRY_RUN usage.

2010-07-31  Todd C. Miller  <>

	* aclocal.m4,, configure,, snprintf.c:
	and AC_CHECK_SIZEOF([long int]) instead of rolling our own.

2010-07-30  Todd C. Miller  <>

	* .hgtags:
	Added tag SUDO_1_7_4 for changeset 2920a3b9d568

	* pp:
	Debian: Remove dots from decoded release number AIX: looser matching
	of file command output for AIX 5.1
	[2920a3b9d568] [SUDO_1_7_4]

	* .hgtags:
	Added tag SUDO_1_7_4 for changeset 0d844aa34c1d

2010-07-29  Todd C. Miller  <>

	* exec_pty.c:
	exec_monitor is static

	* pp:
	Update to latest version

2010-07-28  Todd C. Miller  <>

	* sudo.pp:
	Let pp determine pp_aix_version itself.

	* INSTALL,, configure,, mkpkg, sudo.c:
	Add support for Ubuntu admin flag file and enable it when building
	Ubuntu packages.

	* sudo.pp, sudoers:
	Add commented out SuSE-like targetpw settings

	* configure,
	Only try to use +DAportable for non-GCC on hppa Check the value of
	$pic_flag insteaf of whether the compiler is ANSI C when detecting
	the HP-UX bundled C compiler.

	* configure,
	Prevent configure from adding the -g flag unless in devel mode

2010-07-27  Todd C. Miller  <>

	* sudo.pp:
	Go back to sudo-flavor to match existing packages and only use an
	underscore for those that need it.

	* sudo.pp:
	Use sudo_$flavor instead of sudo-$flavor since that causes the least
	amount of trouble for the various package managers.

	* mkpkg:
	Fix handling of the ldap flavor Remove destdir unless --debug was
	specified Make distclean before running configure if there is a
	Makefile present

	* configure,
	Back out version change in 5baf2187a138

	* mkpkg:
	Pass extra args on to configure on HP-UX, if we don't have the HP C
	compiler, disable zlib to prevent gcc from finding it in

	* configure,, mkpkg:
	Use the HP ANSI C compiler on HP-UX if possible

	* sudoreplay.c:
	Some getline() implementations (FreeBSD 8.0) do not ignore the
	length pointer when the line pointer is NULL as they should.

	* sudoreplay.c:
	Don't need to check for *cp being non-zero, isdigit() will do that.

	* sudoreplay.c:
	Add setlocale() so the command line arguments that use floating
	point work in different locales. Since sudo now logs the timing
	data in the C locale we must Parse the seconds in the timing file
	manually instead of using strtod(). Furthermore, sudo 1.7.3 logged
	the number of seconds with the user's locale so if the decimal point
	is not '.' try using the locale-specific version.

	* exec.c:
	Do I/O logging in the C locale so the floating point numbers in the
	timing file are not locale-dependent.

	* sudoreplay.c:
	Use errorx() not error() for thingsthat don't set errno.

2010-07-26  Todd C. Miller  <>

	* sudo.pp:
	Add Tru64 kit support

	* pp:
	Better support for 1.2.3 style versions in Tru64 kits

	* pp:
	Remove apparently unnecessary use of sudo

	Create timedir as part of install-dirs target.

	* exec_pty.c:
	Handle ENXIO from read/write which can occur when reading/writing a
	pty that has gone away. Fixes bugzilla 422

	* pwutil.c:
	sudo_pwdup() was not expanding an empty pw_shell to _PATH_BSHELL

	* mkpkg:
	platform is a pp flag not a variable

	*, mkpkg, sudo.pp:
	Add simple arg parsing for mkpkg so we can set debug, flavor or

	* pp:
	Make rpm backend work on AIX 5.x

2010-07-25  Todd C. Miller  <>

	* sudoers:
	Add commented out Defaults entry for log_output

2010-07-23  Todd C. Miller  <>

	Install binary files with -b~ to make a backup. Fixes "text file
	busy" error on HP-UX during install.

	* install-sh:
	"mv -f" on HP-UX doesn't unlink the destination first so add an
	explicit rm before moving the temporary into place.

	* configure,
	Some more ${foo} -> $(foo) conversion for consistent Makefiles.

2010-07-22  Todd C. Miller  <>

	Add missing include of maillock.h for Solaris

	Change the default syslog facility from local2 to authpriv (or auth
	if the operating system doesn't support authpriv).

	*, configure,, sudo.pp:
	Install sudoers as /etc/sudoers on RPM and debian systems where the
	package manager will not replace a user-modified configuration file.
	This fixes upgrades from the vendor sudo packages.

	* pp:
	RPM: use %config(noreplace) instead of %config for volatile This
	results in the new file being installed with a .rpmnew suffix
	instead of the file being replaced and the old one renamed with a
	.rpmsave suffix.

2010-07-21  Todd C. Miller  <>

	* boottime.c, mkstemps.c:
	Include time.h for struct timeval.

	* exec_pty.c:
	The return value of strsignal() may be const and should be treated
	as const regardless.

	*,, sudoers.pod:
	Mention that will not match, nor will localhost unless
	that is the actual host name.

	fix typo


	* pp:
	Updated pp with latest patches

	* WHATSNEW, exec.c, exec_pty.c, set_perms.c, sudo.c, sudo.h:
	If pam is in use, wait until the process has finished before calling

	regen sudoers manual

	* UPGRADE, sudoers, sudoers.pod:
	Add commented out line to add HOME to env_keep and add a warning to
	the note about the HOME change in UPGRADE.

2010-07-20  Todd C. Miller  <>

	* sudoreplay.c:
	Add LINE_MAX define for those without it.

	Mention that tty_tickets is now the default.

	* INSTALL, UPGRADE,, configure,, defaults.c,,, sudoers.pod:
	The tty_tickets option is now on by default.

	Mention that AIX authdb support has been fixed.

	* aix.c:
	setauthdb() only sets the "old" registry if it was set by a previous
	call to setauthdb(). To restore the original value, passing NULL
	(or an empty string) to setauthdb() is sufficient.

2010-07-19  Todd C. Miller  <>

	*,, sudoers.pod:
	Mention new handling of HOME in always_set_home and set_home

	*,, sudo.pod:
	fix typo

	* UPGRADE, WHATSNEW, env.c,,, sudo.pod:
	Reset HOME when env_reset is enabled unless it is in env_keep

	*,, sudoers.pod:
	The default for set_logname has been "true" for some time now.

	*,, sudoers.pod:
	Document that MAIL it set in env_reset mode.

	* boottime.c:
	Add missing include of time.h

	* defaults.c, sudo.c:
	Check return value of setdefs() but don't stop setting defaults if
	we hit an unknown one.

	* logging.c:
	Fix check for dup2() return value.

	* visudo.c:
	Treat an unknown defaults entry as a parse error.

	* env.c:
	Check KEPT_MAIL not DID_MAIL when determining whether to set MAIL in
	-i and env_reset mode.

	* env.c:
	Add PYTHONUSERBASE to initial_badenv_table

	* WHATSNEW, aclocal.m4,, configure,, env.c,,,, sudo.pod:
	If env_reset is enabled, set the MAIL environment variable based on
	the target user unless MAIL is explicitly preserved in sudoers.

2010-07-17  Todd C. Miller  <>

	* pp:
	decode debian code names

	fix typo

2010-07-16  Todd C. Miller  <>

	Add entry about SuSE bash script fix.

	* sudo.c:
	Restore RLIMIT_NPROC after the uid switch if it appears that
	runas_setup() did not do it for us. Fixes a bash script problem on

2010-07-15  Todd C. Miller  <>

	* mkpkg, pp, sudo.pp:
	Restore the dot removal in the os version reported by polypkg. Adapt
	mkpkg and sudo.pp to the change.

2010-07-16  Todd C. Miller  <>

	Mention polypkg

	Update for sudo 1.7.4

	document --with-pam-login

	*,, sudoers.pod:
	The tag is NOSETENV, not UNSETENV. From Petr Uzel.

2010-07-15  Todd C. Miller  <>

	* sudo.pp:
	Include flavor in solaris package name

	* mkpkg:
	Older shells don't support IFS= so set explictly to space, tab,

	* mkpkg:
	Use '=' not '==' in test

	* mkpkg:
	Fix typo that prevented debian from matching

	* mkpkg:
	Add missing prefix setting for debian

	* sudo.pp:
	Use tab indents to reduce the chance of problem with <<- Uncomment
	some env_keep lines for RHEL, SLES and Debian to more closely match
	the vendor sudoers files.

	* sudo.pp:
	Fix indentation Fix the debian %set section, pp does not set
	pp_deb_distro Uncomment %sudo line in sudoers for debian Add pam.d
	to %files for debian Remove the /etc/sudo-ldap.conf symlink on
	debian for ldap flavor

	* sudoers:
	Add commented out env_keep entries, sample Aliases and a %sudo line
	for debian.

	* configure,
	Remove check for egrep; configure has its own

	Use enable_zlib instead of enableval for consistency

2010-07-14  Todd C. Miller  <>

	* mkpkg:
	Enable zlib for linux distros

	* mkpkg:
	Add ldap flavor to default build

	* mkpkg, sudo.pp:
	Simplify rpm linux distro settings

	* UPGRADE, aclocal.m4, configure,,,,
	Move time stamp files from /var/run/sudo to /var/{db,lib,adm}/sudo.

	*, mkpkg, sudo.pp:
	Add ldap "flavor" for debian, controlled by the SUDO_FLAVOR
	environment variable.

	* sudo.pp:
	Create sudo group on debian

	* mkpkg, sudo.pp:
	Add debian 4/5/6 and use the dot when doing version matches

	*,, sudoers.pod:
	Remove spurious "and"; from debian

	* aclocal.m4, configure:
	Use a loop when searching for mv, sendmail and sh

	* aclocal.m4, configure,,,,
	sudoers.pod,,, visudo.pod:
	Substitute the value of EDITOR into the sudoers and visudo manuals.

2010-07-13  Todd C. Miller  <>

	* mkpkg, pp, sudo.pp:
	Initial debian 4.0 support

	* mkpkg:
	Some platforms need -fPIE instead of -fpie

	Add packaging bits to DISTFILES

	* auth/pam.c:
	Only set PAM_RHOST for Solaris, where it is needed to avoid a bug.
	On Linux it causes a DNS lookup via libaudit.

	* sudo.psf:
	We now use pp to generate HP-UX packages

2010-07-12  Todd C. Miller  <>

	* auth/pam.c:
	Fix indentation

	isntall-man -> install-doc

	* configure,,,,,,,,,,,
	Bump version to 1.7.4

	* INSTALL.binary,,
	Remove remaining bits of the old binary package

	* sudo.pp:
	Use for packaging

	*, mkpkg, pp:
	Use for packaging

	* install-sh:
	Just ignore the -c option, it is the default Add support for -d

	* env.c, logging.c,

	Do not strip binaries.

	* INSTALL, configure,
	Add --insults=disabled configure option to allow people to build in
	insult support but have the insults disabled unless explicitly
	enabled in sudoers.

2010-07-10  Todd C. Miller  <>

	* env.c, sudoreplay.c:
	Fix K&R compilation

2010-07-09  Todd C. Miller  <>

	* auth/pam.c,, configure,, env.c, sudo.c,
	Add support for a sudo-i pam.d file to be used for "sudo -i".
	Adapted from a RedHat patch.

	Fix installation of

	*,, configure,, missing.h,
	mkstemp.c, mkstemps.c, sudo_edit.c:
	Use mkstemps() instead of mkstemp() in sudoedit. This allows
	sudoedit to preserve the file extension (if any) which may be used
	by the editor (like emacs) to choose the editing mode.

2010-07-08  Todd C. Miller  <>

	* ldap.c,,, sudoers.ldap.pod:
	TLS_CACERT is now an alias for TLS_CACERTFILE. OpenLDAP uses
	TLS_CACERT, not TLS_CACERTFILE in its ldap.conf. Other LDAP client
	code, such as nss_ldap, uses TLS_CACERTFILE. Also document why you
	should avoid disabling TLS_CHECKPEER is possible.

2010-07-07  Todd C. Miller  <>

	* toke.c, toke.l:
	Add suport for negated user/host/command lists in a Defaults entry.
	E.g. Defaults:!baduser noexec

2010-07-01  Todd C. Miller  <>

	* sudoers.ldap.pod:
	fix typo.

2010-06-29  Todd C. Miller  <>

	* .hgtags:
	Added tag SUDO_1_7_3 for changeset 72fd1f510a08

	* configure,,,,,,,,,,,
	Sudo 1.7.3 GA
	[72fd1f510a08] [SUDO_1_7_3]

	* alias.c, alloc.c, auth/afs.c, auth/aix_auth.c, auth/bsdauth.c,
	auth/dce.c, auth/fwtk.c, auth/kerb4.c, auth/kerb5.c, auth/pam.c,
	auth/passwd.c, auth/rfc1938.c, auth/secureware.c, auth/securid.c,
	auth/securid5.c, auth/sia.c, auth/sudo_auth.c, boottime.c, check.c,
	defaults.c, env.c, exec.c, exec_pty.c, fileops.c, find_path.c,
	fnmatch.c, get_pty.c, getcwd.c, getdate.c, getdate.y, getline.c,
	getspwuid.c, glob.c, goodpath.c, gram.c, gram.y, interfaces.c,
	iolog.c, lbuf.c, ldap.c, logging.c, match.c, parse.c, parse_args.c,
	pwutil.c, set_perms.c, snprintf.c, sudo.c, sudo_edit.c, sudo_nss.c,
	sudoreplay.c, term.c, testsudoers.c, tgetpass.c, toke.c, toke.l,
	tsgetgrpw.c, visudo.c:
	Include strings.h even if string.h exists since they may define
	different things. Fixes warnings on AIX and others.

	* env.c:
	Do not rely on env.env_len when unsetting a variable, just use the
	NULL terminator.

	* env.c:
	In unsetenv() check for NULL or empty name as per POSIX 1003.1-2008

2010-06-28  Todd C. Miller  <>

	*,, sudoers.ldap.pod:
	Mention that multiple URI lines are merged into a single one.

	Document AIX fixes

2010-06-26  Todd C. Miller  <>

	* env.c, sudo.c, sudo.h:
	For env_init() just use environ not the envp from main().

2010-06-25  Todd C. Miller  <>

	* configure,,,,,,,,,,,
	Update version to 1.7.3rc1

	* TODO:
	fqdn issue is resolved

	* env.c:
	In unsetenv(), assign ep in the for loop instead of doing it
	earlier. This version of the code does not change env.envp in
	between when ep is assigned and when it is used but older versions
	(e.g. 1.7.2) do.

	* aix.c:
	Use S_REGISTRY instead of S_AUTHSYSTEM as the argument to
	getuserattr() when fetching the administrative domain to be used by
	setauthdb(). This was suggested by AIX support and is consistent
	with what OpenSSH does.

	* vasgroups.c:
	Use warningx() instead of log_error() since the latter is not
	available to visudo or testsudoers. This does mean that they don't
	end up in syslog.

	* sudo.c:
	Defer call to sudo_nonunix_groupcheck_cleanup() until after we have
	closed the sudoers sources. From Quest sudo.

	* pwutil.c:
	Ignore case when matching user/group names in the cache. From Quest

2010-06-24  Todd C. Miller  <>

	*, configure,, selinux.c:
	Add check for setkeycreatecon() when --with-selinux is specified.

	* configure,
	Bump version to 1.7.3b5 Error out if libaudit.h is missing or
	ununable when --with-linux-audit was specified

	* aix.c:
	K&R function declaration for aix_setauthdb()

	* env.c, sudo.c, sudo.h:
	If env_init() was called implicitly via getenv(), setenv() or
	putenv() just use the specified envp instead of mallocing a new
	copy. This prevents an infinite loop on OpenBSD which calls
	getenv() from malloc() to get MALLOC_OPTIONS.

	* ldap.c:
	Add support for multiple URI lines by joining the contents and
	passing the result to ldap_initialize.

2010-06-23  Todd C. Miller  <>

	* pwutil.c, set_perms.c, sudo_nss.c:
	Bracket initgroups with calls to aix_setauthdb() and

	* aix.c:
	Include compat.h before alloc.h to get __P

	* auth/aix_auth.c:
	Include usersec.h for authenticate() prototype

	* aix.c:
	Add missing includes Add missing trailing NUL in userinfo string

2010-06-22  Todd C. Miller  <>

	* HISTORY, history.pod:
	Mention when LDAP was incorporated.

2010-06-21  Todd C. Miller  <>

	* configure:
	Define _LINUX_SOURCE_COMPAT on AIX for strsignal() prototype, it is
	not covered by _ALL_SOURCE.

	* pwutil.c:
	Include usersec.h on AIX to get IDtouser() prototype.

	Define _LINUX_SOURCE_COMPAT on AIX for strsignal() prototype, it is
	not covered by _ALL_SOURCE.

2010-06-18  Todd C. Miller  <>

	* iolog.c:
	Add a cast to quiet a compiler warning.

	* boottime.c:
	Use memset() instead of zero_bytes() since we don't include sudo.h

	getline.o is already in LIB_OBJS, do not need it in COMMON_OBJS

	* getdate.c, getdate.y:
	Quiet a compiler warning.

	* defaults.c, sudo.c:
	Call set_fqdn() after sudoers has parsed instead of inline as a

	Do not call set_fqdn() until sudoers parses (where is gets run as a

	* sudo.c:
	Do not call set_fqdn() until sudoers parses (where is gets run as a
	callback). Otherwise, if sudo is built --with-fqdn the fqdn will be
	set even if !fqdn is set in sudoers.

	* configure,,,,,,,,,,,
	Bump version to 1.7.3b4

	mention the change in tty ticket behavior when there is no tty

	* TODO:
	remove done items

	* aix.c:
	Remove comment; NAME in usrinfo should be user name.

	* check.c:
	Do not update tty ticket if there is no tty.

	*,, sudo.pod:
	No longer need to use -- with the -s flag

	Add missing $(srcdir) to target

	Do not rely on BSD make's $>

	* configure,
	Set timedir to /var/db/sudo for darwin to match Apple sudo's

2010-06-16  Todd C. Miller  <>

	*, configure,
	Move aix.o from SUDO_OBJS to COMMON_OBJS

	*, configure,, defaults.c, iolog.c,
	Check for zlib.h in addition to libz.

	*, exec.c, exec_pty.c, sudo.h, sudo_exec.h:
	Move functions and symbols shared between exec.c and exec_pty.c into

	* sudo.h:
	Add missing prototypes for aix_setauthdb and aix_restoreauthdb

	Comment out rules to build and .cat files unless --with-

	* aix.c, pwutil.c, set_perms.c, sudo.h:
	Fix AIX compilation problems.

	* sudo.c:
	Cast isalnum() arg to unsigned char.

	Add Linux audit support.

	* sudo.c:
	Quote any non-alphanumeric characters other than '_' or '-' when
	passing a command to be run via the shell for the -s and -i options.

	* sudo.c:
	Add missing braces that broke -i mode.

	* linux_audit.c:
	Fix linux_audit_command() return value

2010-06-15  Todd C. Miller  <>

	*, linux_audit.c, linux_audit.h:
	Add Linux audit support.

2010-06-16  Todd C. Miller  <>

	* INSTALL, audit.c, bsm_audit.c,, configure,,
	logging.h, selinux.c:
	Add Linux audit support.

2010-06-15  Todd C. Miller  <>

	* sudoreplay.c,,, sudoreplay.pod:
	Sync sudoreplay with trunk

	* exec_pty.c:
	Remove an XXX

	* aix.c, configure,, pwutil.c, set_perms.c, sudo.h:
	Set usrinfo for AIX Set adminstrative domain for the process when
	looking up user's password info and when preparing for execve().

	* ldap.c, parse.c:
	Better prefix determination now that we can't rely on len==0 to tell
	the beginning on an entry.

	* WHATSNEW, ldap.c,,,
	Add support for multiple sudoers_base entries in ldap.conf. From
	Joachim Henke

	* configure,
	Remove duplicate setsid check

	*,, configure,, exec_pty.c,
	logging.c, missing.h, setsid.c:
	Move setsid emulation into setsid.c

	* exec_pty.c, logging.c, selinux.c, sudo.c, tgetpass.c:
	Check for dup2() failure.

	*, configure,
	Remove dup2 check, it is not optional.

2010-06-14  Todd C. Miller  <>

	Add mbr_check_membership support and SELinux fixes

	Sync SRCS and DISTFILES with reality

	Update OS specific notes. Delete some really ancient ones and move
	older ones to the end of the list.

	Bump for sudo 1.7.3 Merge some changes from trunk

	* selinux.c, sudo.c:
	Call selinux_restore_tty() as part of cleanup() so it gets called
	from error()/errorx()

	* compat.h:
	No longer use SA_NOCLDSTOP

	* interfaces.h, match.c:
	Move union sudo_in_addr_un into interfaces.h

	Update copyright year

	* HISTORY, LICENSE, aix.c, alias.c, alloc.h, boottime.c, bsm_audit.h,
	compat.h, defaults.c, defaults.h, env.c, fileops.c, find_path.c,
	gettime.c, gram.y, history.pod, lbuf.h, license.pod, logging.c,
	match.c, missing.h, nanosleep.c, parse.h, set_perms.c,,, sudoers.ldap.pod,
	sudoreplay.c, term.c, tgetpass.c, toke.l, visudo.c,,, visudo.pod:
	Update copyright year

	Remove varsub as part of clean

	* match.c:
	Quiet a compiler warning.

	* getdate.c, getdate.y:
	Quiet a compiler warning.

	* ldap.c, sudo.h:
	Make the remaining functions in ldap.c static

	* ldap.c:
	Make private functions static. Diff from Joachim Henke

	* schema.ActiveDirectory:
	Updates from Alain Roy to provide better examples for importing the
	schema and to fix problems caused by Windows validating attributes
	which have not yet been added before committing the changes.

2010-06-12  Todd C. Miller  <>

	*, configure,,,
	Generate .cat files directly from instead of .man using
	default values in

2010-06-11  Todd C. Miller  <>

	* configure,, sudo.c,
	Print configure args with verbose version information.

	* visudo.c:
	Remove tfd from struct sudoersfile; it is not used. Add prev pointer
	to struct sudoersfile. Declare list of sudoersfile using TQ_DECLARE.
	Use tq_append to append sudoers entries to the tail queue.

2010-06-10  Todd C. Miller  <>

	Describe tty timestamp improvements

	* toke.c, toke.l:
	A comment character may not be part of a command line argument
	unless it is quoted with a backslash. Fixes parsing of:
	testuser ALL=NOPASSWD: /usr/bin/wl #comment foo bar closes bz #441


	* sudoers.pod:
	Make this read a little bit better when passwd_timeout is 0.

	Use the --file argument to config.status instead of setting

	*, sudo.pod:
	Attempt to handle a default password prompt timeout of zero more

	* toke.c, toke.l:
	Do not override value of keepopen global, instead restore it to the
	value we pushed onto the stack when popping.

	* exec.c, exec_pty.c, logging.c, mon_systrace.c, tgetpass.c:
	Use SA_INTERRUPT in sa_flags

	* getdate.c, getdate.y, ldap.c, sudoreplay.c:
	Silence some compiler warnings

2010-06-09  Todd C. Miller  <>

	* exec.c, exec_pty.c, sudo.c, sudo.h:
	Implement background mode. If I/O logging we use pipes instead of a

	* compat.h, exec.c, exec_pty.c, mksiglist.c, strsignal.c, tgetpass.c:
	Move compat definition of NSIG to compat.h

	* tgetpass.c:
	Ignore SIGPIPE for "sudo -S"

	* tgetpass.c:
	Properly handle TGP_ECHO again. Print a newline if the user
	interrupted password input.

	* exec_pty.c:
	Use POSIX tcgetpgrp() instead of BSD TIOCGPGRP ioctl

2010-06-08  Todd C. Miller  <>

	* exec.c, exec_pty.c, selinux.c, sudo.c, sudo.h:
	Return an error from selinux_setup() instead of exiting. Call
	selinux_setup() from exec_setup().

	* compat.h:
	Add definition of WCOREDUMP for systems without it. This is known
	to work on AIX and SunOS 4, but may be incorrect on other systems
	that lack WCOREDUMP.

	* check.c, compat.h,, configure,, iolog.c,
	nanosleep.c, sudo_edit.c, visudo.c:
	Replace timerfoo macros with timevalfoo since the timer macros are
	known to be busted on some systems.

	* toke.c, toke.l:
	If a file in a #includedir has improper permissions or owner just
	skip it. This prevents packages that incorrectly install a file
	into /etc/sudoers.d from breaking sudo so easily. Syntax errors in
	#includedir files still result in a parse error (for now).

	* TODO, auth/pam.c, exec.c, exec_pty.c, set_perms.c, sudo.c, sudo.h:
	Defer call to pam_close_session() until after the command finishes
	if there is a monitor process.

	* WHATSNEW, def_data.c, def_data.h,, exec.c,,, sudoers.pod:
	Add use_pty sudoers option to force use of a pty even when not
	logging I/O.

	* env.c, sudo.c, sudo.h:
	Instead of trying to keep the global environment in sync with our
	private copy, provide our own getenv() that returns values from the
	private environment and use env_get() to pass the environment in to

	* set_perms.c:
	Fix typo

2010-06-07  Todd C. Miller  <>

	* sudo.h:
	Rename pty.c -> get_pty.c

	* iolog.c:
	Add #define for maximum session id

	*, configure,, exec.c, exec_pty.c, iolog.c,
	selinux.c, sudo.c, sudo.h, sudo_edit.c:
	Split exec.c into exec.c and exec_pty.c Pass a flag in to
	sudo_execve to indicate whether we need to wait for the command
	to finish (fork + execve vs. execve).

	*, configure,, get_pty.c, pty.c:
	Rename pty.c -> get_pty.c

	* aclocal.m4, configure,
	Fix --without-iologdir

2010-06-06  Todd C. Miller  <>

	* iolog.c:
	Only use I/O input log file if def_log_input is set and output file
	if def_log_output is set.

2010-06-05  Todd C. Miller  <>

	* parse_args.c, sudo.c:
	Include sudo_usage.h after sudo.h now that it has function
	prototypes to guarantee that __P is defined.

2010-06-04  Todd C. Miller  <>

	* tgetpass.c:
	Do signal setup after turning off echo, not before. If we are using
	a tty but are not the foreground pgrp this will generate SIGTTOU so
	we want the default action to be taken (suspend process). Use an
	array for signals received instead of a single variable so we don't
	lose any when there are multiple different signals.

	* defaults.h, lbuf.h, sudo.h:
	Reorg function prototypes a bit

	*, parse_args.c, sudo.c, sudo.h,
	Move argument parsing into parse_args.c

	*,, configure,, missing.h,
	mksiglist.c, mksiglist.h,, strsignal.c:
	Build our own sys_siglist for systems that lack it.

	* exec.c, iolog.c, missing.h, sudo_edit.c:
	K&R fixes

	* exec.c, pty.c, sudo.c, sudo.h, sudo_edit.c:
	Log sudoedit sessions as well; adapted from trunk

	* configure:

	* INSTALL,, WHATSNEW, aclocal.m4, configure,,
	def_data.c, def_data.h,, defaults.c, exec.c, gram.c,
	gram.h, gram.y, iolog.c, parse.c, parse.h,, pty.c,
	script.c, selinux.c, sudo.c, sudo.h,,,
	sudoers.pod, sudoreplay.c,,,
	sudoreplay.pod, term.c:
	Merge I/O logging changes from trunk. Disabling I/O log support at
	compile time does not currently work. Sudoedit is not yet hooked up
	to I/O logging.

2010-06-03  Todd C. Miller  <>

	* INSTALL, configure,
	Add --enable-warnings configure option

	* check.c, lbuf.h, script.c, sudo.c, sudo_nss.c:
	Fix K&R compilation issues on HP-UX.

	* lbuf.c, lbuf.h, ldap.c, parse.c, sudo.c, sudo_nss.c:
	Pass in output function to lbuf_init() instead of writing to stdout.
	A side effect is that the usage info can now go to stderr as it
	should. Add support for embedded newlines in lbuf and use that
	instead of multiple calls to lbuf_print.

	* configure,,,
	Use numeric registers to handle conditionals instead of trying to do
	it all with text processing.

	* sudoers.pod:
	Document per-command SELinux settings

	* sudo.pod:
	timestamp -> time stamp

	* tsgetgrpw.c:
	Set close on exec flag in private versions of setpwent() and

	* logging.c:
	Make send_mail() take a printf-style argument list

	*,, aclocal.m4, acsite.m4,
	config.guess,, config.sub, configure,,, m4/libtool.m4, m4/ltoptions.m4, m4/ltsugar.m4,
	m4/ltversion.m4, m4/lt~obsolete.m4:
	Update to autoconf 2.65 and libtool 2.2.6b

	* boottime.c:
	Don't use TRUE/FALSE which may not be defined.

	*,, sudo.pod:
	Document new tty_ticket behavior

	* find_path.c, sudo.c, sudo.h, visudo.c:
	Make find_path() a little more generic by not checking def_foo
	variables inside it. Instead, pass in ignore_dot as a function

	* check.c:
	Store info from stat(2)ing the tty in the tty ticket when tty
	tickets are in use. If the tty lives on a devpts (Linux) or devices
	(Solaris) filesystem, stash the ctime in the tty ticket file, as it
	is not updated when the tty is written to. This helps us determine
	when a tty has been reused without the user authenticating again
	with sudo.

	* boottime.c, check.c, sudo.h:
	get_boottime() now fills in a timeval struct

2010-06-02  Todd C. Miller  <>

	* check.c, compat.h,, configure,, fileops.c,
	gettime.c, sudo.h, sudo_edit.c, visudo.c:
	Use timeval directly instead of converting to timespec when dealing
	with file times and time of day.

	* auth/pam.c:
	Fix OpenPAM detection for newer versions.

	* vasgroups.c:
	Sync with Quest sudo git repo

	* aclocal.m4, configure,
	HP-UX ld uses +b instead or -R or -rpath Fix typo in libvas check
	libvas may need libdl for dlopen() Add missing template for
	ENV_DEBUG Adapted from Quest sudo

	Fix typos; from Quest Sudo

	Use value of SHELL from configure in Makefile

2010-05-28  Todd C. Miller  <>

	* env.c:
	Handle duplicate variables in the environment. For unsetenv(), keep
	looking even after remove the first instance. For sudo_putenv(),
	check for and remove dupes after we replace an existing value.

2010-04-29  Todd C. Miller  <>

	* visudo.c:
	Fix a crash when checking a sudoers file that has aliases that
	reference themselves. Based on a diff from David Wood.

2010-04-15  Todd C. Miller  <>

	* alias.c:
	Fix use after free in error message when a duplicate alias exists.

2010-04-14  Todd C. Miller  <>

	* visudo.c:
	Set errorfile to the sudoers path if we set parse_error manually.
	This prevents a NULL dereference in printf() when checking a sudoers
	file in strict mode when alias errors are present.

2010-04-12  Todd C. Miller  <>

	* TODO,,, sudoers.pod:
	Fix typo

2010-04-09  Todd C. Miller  <>

	* find_path.c:
	Qualify the command even if it is in the current working directory,
	e.g. "./foo" instead of just returning "foo". This removes an
	ambiguity between real commands and possible pseudo-commands in
	command matching.

2010-04-07  Todd C. Miller  <>

	*,, sudoers.pod:
	Add a note about the security implications of the fast_glob option.

	* memrchr.c:
	Remove duplicate includes

2010-03-22  Todd C. Miller  <>

	* configure,
	Fix installation of sudoers.ldap in "make install" when --with-ldap
	was specified without a directory. From Prof. Dr. Andreas Mueller

2010-03-09  Todd C. Miller  <>

	* match.c:
	When doing a glob match, short circuit if gl.gl_pathc is 0. From
	Mark Kettenis.

2010-03-08  Todd C. Miller  <>

	* script.c:
	Use parent process group id instead of parent process id when
	checking foreground status and suspending parent. Fixes an issue
	when running commands under /usr/bin/time and others.

	* env.c:
	In setenv(), if the var is empty, return 1 and set errno to EINVAL
	instead of returning EINVAL directly.

2010-02-22  Todd C. Miller  <>

	* match.c:
	Check for pseudo-command by looking at the first character of the
	command in sudoers instead of checking the user-supplied command for
	a slash.

2010-02-09  Todd C. Miller  <>

	* toke.l:
	Avoid a duplicate fclose() of the sudoers file.

	* toke.l:
	Fix size arg when realloc()ing include stack. From Daniel Kopecek

2010-02-06  Todd C. Miller  <>

	* aix.c,, configure,
	Use setrlimit64(), if available, instead of setrlimit() when setting
	AIX resource limits since rlim_t is 32bits.

	* logging.c:
	Fix use after free when sending error messages. From Timo Juhani

2010-01-18  Todd C. Miller  <>

	* ChangeLog,
	Generate the ChangeLog as part of "make dist" instead of having it
	in the repo.

2010-01-17  Todd C. Miller  <>

	Generate correct ChangeLog for 1.7 branch.

2010-01-17  Todd C. Miller  <>

	*,, aix.c, alias.c, alloc.c, alloc.h,
	auth/afs.c, auth/aix_auth.c, auth/bsdauth.c, auth/dce.c,
	auth/fwtk.c, auth/kerb4.c, auth/kerb5.c, auth/pam.c, auth/passwd.c,
	auth/rfc1938.c, auth/secureware.c, auth/securid.c, auth/securid5.c,
	auth/sia.c, auth/sudo_auth.c, auth/sudo_auth.h, check.c,
	closefrom.c, compat.h,, defaults.c, defaults.h,
	emul/charclass.h, emul/timespec.h, env.c, error.c, error.h,
	fileops.c, find_path.c, getcwd.c, getprogname.c, getspwuid.c,
	gettime.c, goodpath.c, gram.c, gram.y, ins_2001.h, ins_classic.h,
	ins_csops.h, ins_goons.h, insults.h, interfaces.c, interfaces.h,
	isblank.c, lbuf.c, lbuf.h, ldap.c, list.c, list.h, logging.c,
	logging.h, match.c, memrchr.c, missing.h, mkinstalldirs, mkstemp.c,
	mon_systrace.c, nanosleep.c, parse.c, parse.h,,
	pty.c, pwutil.c, redblack.c, redblack.h, sample.pam, sample.sudoers,
	sample.syslog.conf, script.c, selinux.c, sesh.c, set_perms.c,
	sigaction.c, snprintf.c, strcasecmp.c, strerror.c, strlcat.c,
	strlcpy.c, strsignal.c, sudo.c, sudo.h,, sudo.pod,
	sudo_edit.c, sudo_noexec.c, sudo_nss.c, sudo_nss.h,,, sudoers.ldap.pod,, sudoers.pod,
	sudoers2ldif, sudoreplay.c,, sudoreplay.pod,
	term.c, testsudoers.c, tgetpass.c, timestr.c, toke.c, toke.l,
	utimes.c, visudo.c,, visudo.pod, zero_bytes.c:
	Remove CVS $Sudo$ tags.

2009-12-26  Todd C. Miller  <>

	make this match sudoers SYNOPSIS

	* lbuf.c, parse.c:
	Print a newline between Runas and Command-specific defaults in sudo

	* term.c:
	Use SET and CLR macros in term_raw

	* sudoreplay.c:
	Set stdin to non-blocking mode early instead of in check_input. Use
	term_raw instead of term_cbreak since the data we get has already
	been expanded via OPOST.

2009-12-23  Todd C. Miller  <>

	* script.c, term.c:
	Enable/disable all postprocessing instead of just nl->crnl
	processing since things like tab expansion matter too. However, if
	stdout is a tty leave postprocessing on in the pty since we run into
	problems doing it only on the real stdout with .e.g nvi.

2009-12-19  Todd C. Miller  <>

	* check.c:
	If tty_tickets is enabled and there is no tty, prompt for a
	password. Do not lecture user for "sudo -k command" if user has a

	Document missing options: --with-efence and --with-bsm-audit

	*,, sudo.pod,,,, sudoers.ldap.pod,, sudoers.pod,,, sudoreplay.pod,,, visudo.pod:
	username -> user name groupname -> group name hostname -> host name

	* INSTALL, README.LDAP, sudoers.pod:
	filename -> file name like the rest of the docs

2009-12-17  Todd C. Miller  <>

	* parse.c:
	Fix printing of entries with multiple host entries on a single line.

2009-12-14  Todd C. Miller  <>

	* sudoers.pod:
	Mention that targetpw affects the timestamp file name.

	* def_data.c, def_data.h,, defaults.c, script.c,
	Add compress_transcript option.

2009-12-13  Todd C. Miller  <>

	* configure,
	bump to 1.7.3b2

	* pwutil.c, set_perms.c, sudo.c, sudo_nss.c:
	Better split of membership vs. traditional group check in
	user_in_group(). Allow user_ngroups to be < 0 if getgroups() fails.

2009-12-12  Todd C. Miller  <>

	* pwutil.c:
	Fix pasto and add default return value.

	* check.c, match.c, pwutil.c, sudo.h:
	refactor group member checking into user_in_group()

	* check.c,, configure,, match.c, sudo.c,
	Add support for mbr_check_membership() as present in darwin.

2009-12-10  Todd C. Miller  <>

	* match.c:
	Rename label to be accurate

	*, boottime.c, check.c,, configure,, sudo.h:
	Treat timestamp files from before we booted as old. Idea from and
	Apple patch.

2009-12-09  Todd C. Miller  <>

	* sudo.c, sudo.pod,
	Allow the -u flag to be used in conjunction with the -v flag as per
	older versions of sudo.

	* logging.c:
	fix typo in last commit

2009-12-08  Todd C. Miller  <>

	* logging.c:
	Convert fmt_first and fmt_confd into macros.

	* sudoers.pod:
	timeouts can be floats now

	* WHATSNEW, def_data.c, def_data.h,, defaults.c,
	defaults.h, mkdefaults:
	Add support for floating point timeout values (e.g. 2.5 minutes).

2009-12-07  Todd C. Miller  <>

	* sudo.pod:
	The -L flag will be removed in sudo 1.7.4

2009-12-06  Todd C. Miller  <>

	* sudoreplay.c:
	Fix a bug due to order of operators.

2009-11-23  Todd C. Miller  <>

	* match.c:
	cmnd_matches() already deals with negation so _cmndlist_matches()
	does not need to do so itself. Fixes a bug with negated entries in
	a Cmnd_List.

2009-11-22  Todd C. Miller  <>

	* sudo.c:
	Don't exit() from open_sudoers, just return NULL for all errors.

	* script.c:
	Can't rely on the shell sending us SIGCONT when transitioning from
	backgroup to foreground process.

	* toke.c, toke.l:
	Add missing extern def for parse_error

2009-11-21  Todd C. Miller  <>

	* toke.c, toke.l:
	Avoid a parse error when #includedir doesn't find any files. Closes
	bug #375

	Include and in the distribution tarball.

2009-11-15  Todd C. Miller  <>

	* script.c:
	Start command out in foreground mode if stdout is a tty. Works
	around issues with some curses-based programs that don't handle
	tcsetattr getting interrupted by a signal. Still allows us to avoid
	hogging the tty if the command is part of a pipeline.

	* script.c, sudo.c, sudo.h, sudoreplay.c, term.c, tgetpass.c:
	Use a socketpair to pass signals from parent to child. Child will
	now pass command status change info back via the socketpair. This
	allows the parent to distinguish between signals it has been sent
	directly and signals the command has received. It also means the
	parent can once again print the signal notifications to the tty so
	all writes to the pty master occur in the parent. The command is
	now always started in background mode with tty signals handled by
	the parent.

2009-11-04  Todd C. Miller  <>

	* configure,
	Fix a few typos in the descriptions; from Jeff Makey Only do the
	check for krb5_get_init_creds_opt_free() taking two arguments if we
	find krb5_get_init_creds_opt_alloc(). Otherwise we will get a false
	positive when using our own krb5_get_init_creds_opt_free which takes
	only a single argument.

2009-11-03  Todd C. Miller  <>

	* configure,
	Remove a spurious comma in the kerb5 bits.

	* auth/kerb5.c:
	Call krb5_get_init_creds_opt_init() in our emulated
	krb5_get_init_creds_opt_alloc() for MIT kerberos.

2009-11-01  Todd C. Miller  <>


	* script.c:
	Need to ignore SIGTT{IN,OU} in child when running the command in the
	background. Also some minor cleanup.

2009-10-31  Todd C. Miller  <>

	* script.c:
	Instead of calling sigsuspend when waiting for SIGUSR[12] from
	parent, install the signal handlers w/o SA_RESTART and let them
	interrupt waitpid().

	* script.c:
	Pass along SIGHUP and SIGTERM from parent to child.

	* script.c:
	Close unused bits of script_fds in processes that don't need them.
	Restore default SIGCONT handler in child.

	* script.c:
	Update foreground/background status in SIGCONT handler in parent

2009-10-25  Todd C. Miller  <>

	* script.c:
	Defer setting terminal into raw mode until just before we fork() and
	only do it if sudo is the foreground process. If we get SIGTT{IN,OU}
	and sudo is already in the foreground be sure to set raw mode before
	continuing the child.

2009-10-24  Todd C. Miller  <>

	* script.c:
	Fix handling of SIGTTOU/SIGTTIN in program being run. We now only
	give the command the controlling tty if the main sudo process is the
	foreground process.

	* script.c:
	Don't bother with sudo_waitpid() here for now.

	* script.c:
	fix non-zlib case

2009-10-23  Todd C. Miller  <>

	* script.c:
	Remove non-wroking code that crept into rev 1.55

2009-10-22  Todd C. Miller  <>

	* INSTALL, configure,, script.c, sudoreplay.c:
	First pass at zlib support for transcript data files

	remove vestiges of ZLDFLAGS

	* script.c:
	Add missing variable declaration for when TIOCSCTTY is not defined.
	Need to include sys/termio.h for TIOCSCTTY on some systems.

	* script.c:
	when resuming command, send SIGCONT to its pgrp not just pid

	* selinux.c:
	remove unused variable

	* script.c:
	include selinux.h for is_selinux_enabled() proto

	* script.c:
	Don't use log_error() in the child process.

	* script.c:
	Do I/O in parent instead of child since the parent can have both
	/dev/tty as well as the pty fds open. The child just sets things up
	and waits for its grandchild and writes the signal description to
	the pty master if the command was killed by a signal.

2009-10-18  Todd C. Miller  <>

	* missing.h, sudo.h:
	Move two struct forward declarations from sudo.h to missing.h

	* script.c:
	Make comment at the top of script_exec() match reality.

	* sudo.c:
	if neither stdin nor stdout is a tty, check stderr

	Add back dependecy of gram.h on gram.y

	* script.c:
	Make transcript mode work as long as we can figure out our tty, even
	if it is not stdin. We'd like to use /dev/tty but that won't be
	valid after the setsid().

2009-10-17  Todd C. Miller  <>

	*, configure,, pty.c:
	Add support for IRIX-style dynamic ptys

	*, alloc.h, getline.c, sudo.h, sudoreplay.c:
	Move alloc.c protos into alloc.h

	* missing.h:
	Move prototypes for missing libc functions to missing.h

	*, sudo.h, sudoreplay.c:
	Move prototypes for missing libc functions to missing.h

2009-10-16  Todd C. Miller  <>

	*, configure,
	Disable transcript support if no tcsetpgrp until we support older
	BSD-style job control.

	* configure,, pty.c, script.c:
	Break out pty code into pty.c

	* compat.h,, configure,
	add killpg macro if no killpg function

	*, configure,, script.c:
	Push ptem and ldterm for STERAMS-based systems when allocating a

2009-10-15  Todd C. Miller  <>

	* script.c:
	Sprinkle some more O_NOCTTY and call grantpt() before unlockpt()

	* script.c:
	Call tcgetpgrp() in the parent, not the child and have the child
	spin until it is granted. Fixes a race on darwin.

	* script.c:
	Only use TIOCNOTTY in the non-setsid case. If no TIOCSCTTY, just
	reopen slave.

2009-10-14  Todd C. Miller  <>

	* script.c:
	In script mode, if the command is killed by a signal, print the
	signal description as well as a core dump notification like the
	shell does.

	*,, configure,, strsignal.c,
	Add check for strsignal() and a simple implementation if it is not
	there but sys_siglist is

	* script.c:
	Add missing WUNTRACED and store the signal that stopped the
	grandchild in suspended, not signo.

	* script.c:
	g/c unused code

	* script.c:
	Associate the grandchild's pgrp with the tty instead of the child's
	and just get suspend notifications via SIGCHLD instead of directly.
	This fixes a hang with programs that try to set terminal attributes
	and is more consistent with how the shell handles things.

2009-10-12  Todd C. Miller  <>

	* script.c:
	Move setpgid() of child into the parent side of the fork() where it

2009-10-11  Todd C. Miller  <>

	* script.c:
	fix typo

	* script.c:
	Run command in its own pgrp (like the shell does) for easier
	signalling. No need to relay SIGINT or SIGQUIT to parent, just send
	to grandchild. Don't want grandchild stopped events in the child
	(only termination). Flush output after suspending grandchild before
	signalling parent.

	* script.c:
	Back out revision 1.34; the problem lies elsewhere.

	* script.c:
	Don't set stdout to blocking mode when flushing remaining output.
	It can cause us to hang when trying to exit. Need to investigate

	* script.c:
	Handle SIGTTOU and remove some debugging.

	* term.c:
	Back out revision 1.10 as the signal that interrupts us may be
	SIGTTOU or SIGTTIN which the caller must handle.

	* script.c:
	Apparently we need to send SIGSTOP to the command as well as ourself
	when we get SIGTSTP, the kernel doesn't automatically stop the
	process for us.

	* script.c:
	Use an extra process to act as the glue bewteen the sessions
	associated with the user's controlling tty (what the shell uses) and
	the tty that sudo is using to do its logging. Basically, this means
	that if we get, e.g. SIGTSTP from the process sudo is running, we
	relay the signal to the parent so it's shell can do the job control.

	* term.c:
	Handle getting/setting terminal attributes when the fd is in non-
	blocking mode.

2009-10-07  Todd C. Miller  <>

	* sudoreplay.c,,, sudoreplay.pod:
	Add support for pausing and changing the speed in interactive mode.

	* script.c:
	Already define O_NOCTTY in compat.h, don't need it here

2009-10-06  Todd C. Miller  <>

	* sudoreplay.c:
	Add missing protos

2009-09-30  Todd C. Miller  <>

	* sudo_edit.c:
	Always update the stashed mtime of the temp file instead of using
	what we have for the original because the time resolution of the
	filesystem the temporary is on may not match that of the filesystem
	that holds the original. Should fix bz #371 found by Philippe Levan.

	* sudoreplay.c:
	Use cbreak mode instead of raw mode and add signal handlers to
	restore the tty on interrupt.

	* script.c, sudo.h, term.c:
	Retain NL to NLCR conversion on the real tty and skip it on the pty
	we allocate. That way, if stdout is not a pty there are no extra
	carriage returns.

	* script.c:
	Fix log_output(); just pass in a string and a length.

2009-09-28  Todd C. Miller  <>

	* script.c:
	do not use errno when complaining out lack of a tty

2009-09-27  Todd C. Miller  <>

	*, sudoreplay.c, term.c:
	Instead of messing with line endings, just set terminal to raw mode
	in sudoreplay.

	* term.c:
	When copying the terminal attributes to the pty, be sure not to set
	ONLCR. This prevents extra carriage returns from ending up in the
	script output file.

	* script.c:
	Convert a do {} while into a while

	Use if then instead of test && when installing binaries that may not

	* script.c:
	Add O_NOCTTY when opening a tty device. Explicitly disconnect from
	old tty before associatng with new one.

	* script.c, selinux.c, sudo.c, sudo.h:
	First cut at refactoring some of the selinux code so it can be used
	in conjunction with sudo's transcript support.

2009-09-26  Todd C. Miller  <>

	* aclocal.m4, configure,
	Fix default case of transcript_enabled being unset.

	* script.c, sudoreplay.c:

	* INSTALL,, aclocal.m4, configure,, sudo.c:
	Hook up --disable-transcript and --enable-transcript=DIR

2009-09-25  Todd C. Miller  <>

	* aclocal.m4, configure,,
	transcript=DIR option to specify the directory


	* configure,,, sudoers.pod:
	Substitute in default value for secure_path

	* sudo.pod:
	Mention that the password must be followed by a newline with the -S

2009-09-20  Todd C. Miller  <>

	* script.c:
	Go back to dropping out of the select() loop when the process dies;
	Linux ptys apparently don't behave the same as BSD in regards to
	select(). No need to flush remaining output to the transcript, only
	to stdout. Add back code to check the master pty for additional data
	when we exit the main select loop.

2009-09-19  Todd C. Miller  <>

	Add getline.o to COMMON_OBJS

	sudoreplay depends on libsudo.a

	More pwutil.o into COMMON_OBJS

	* pwutil.c, testsudoers.c, tsgetgrpw.c:
	Remove my_* redirection in pwutil.c for testsudoers and just use the
	normal libc get{pw,gr}* names.

	*,, sudoreplay.pod:
	More time and date examples

	*, configure,, nanosleep.c, sudoreplay.c:
	Move nanosleep() emulation into its own file Check librt.a for
	nanosleep if we don't find it in libc

	*, configure,
	Build libsudo with the common bits and link things against that.

	* script.c:
	Fix final flush.

	* script.c:
	Keep reading from the pty master -> log file until read returns <=
	0. Do our best to write everything to stdout when flushing any
	remaining bits.

	* sudoreplay.c:
	Use unbuffered I/O when writing to stdout and make sure we write the
	entire buffer.

2009-09-18  Todd C. Miller  <>

	* sudoreplay.c:
	Only use max_wait if it is non-zero

	* getdate.c, getdate.y, getline.c:
	Need compat.h here

	* sudoreplay.c:
	Fix nanosleep emulation

	* script.c:
	Fix comment after #endif

	* sudoreplay.c:
	Add protos for missing libc bits

	* configure,
	add missing line continuation char

	*, configure,, getline.c:
	Implement getline() in terms of fgetln() if we have it.

	* sudoreplay.c:
	Print year when formatting log line

	* sudoreplay.pod:
	Document cwd, attempt to document time/date formats.

	* sudoreplay.c:
	Fix getline return value check.

	*,, configure,, getline.c,
	Use getline() if the system has it, else use provide our own for

	* script.c:
	Refactor code to update output and timing files.

2009-09-17  Todd C. Miller  <>

	* sudoreplay.c:
	Make sudo_getln() behave more like glibc getline.

	* script.c:
	When flushing remaining output, also update timing file.

	* sudoreplay.c:
	Use get_timestr() and make the -l output look like the regular sudo

	* logging.c, sudo.h, timestr.c:
	Make get_timestr() take a time_t so we can use it properly in

	* script.c:
	Create session dir earlier now that we update the seq number early.

2009-09-16  Todd C. Miller  <>

	* sudoreplay.c:
	Use fromdate and todate as the keywords instead of from and to; the
	short forms will still be accepted.

	* sudoreplay.c:
	Fix reading long liensin sudo_getln()

	* script.c, sudoreplay.c:
	Log the cwd in the script log file. Add sudo_getln() to read
	arbitrarily long lines.

	*, logging.c, sudo.h, timestr.c:
	Move get_timestr() into its own source file so sudoreplay can use

2009-09-15  Todd C. Miller  <>

	* sudoreplay.c:
	Add to and from perdicates (date ranges); needs documentation

2009-09-14  Todd C. Miller  <>

	*, getdate.c, getdate.y:
	Fix warning and add generated getdate.c

	*, getdate.y:
	Add getdate.y to be used for sudoreplay date parsing.

2009-09-13  Todd C. Miller  <>

	* sudoreplay.c:
	Check more than just the first character of a predicate

	*,, sudoreplay.pod:
	Add examples, sort predicates

	*, sudoreplay.c,,,
	Implement search expressions in sudoreplay similar in concept to
	what find or tcpdump uses. TODO: date ranges

2009-09-07  Todd C. Miller  <>

	* script.c:
	Remove vhangup as it was hanging up the wrong tty. Should really
	vhangup in the child after it as set its tty.

	* sudoers.pod:
	Fix cut at documenting transcript support.

	* logging.c:
	ID= -> TSID= for transcript ID

2009-09-06  Todd C. Miller  <>

	* sudoers.pod:
	Move fast_glob description to where it belongs in sorted order

	* def_data.c, def_data.h,, gram.c, gram.h, gram.y,
	parse.c, parse.h, sudo.c:
	Rename script -> transcript

2009-09-03  Todd C. Miller  <>

	* compat.h:
	Add timeradd and timersub for those without them

	* script.c:
	Sanity check sessid before using it.

	* sudo.c:
	Only set the session id if we are running a command or editing a

	* script.c:
	Actually. qsort is fine since most versions fal back to a cheaper
	sort when the number of elements to sort is small (like in our

	*, configure,, script.c:
	Check for dup2 and use dup instead if we don't have it.

	* script.c, sudo.c, sudo.h:
	Move the code to dup2 the script fds to low numbered descriptors
	into script_duplow() and fix the fd sorting.

	* script.c, sudo.c, sudo.h:
	Move script_setup() back to immediately before we drop privs and
	call the new script_nextid() in its place, which will set
	sudo_user.sessid for the logging functions.

2009-09-01  Todd C. Miller  <>

	Install sudoreplay

	* sudoreplay.c:
	remove unused variable

2009-08-30  Todd C. Miller  <>

	* logging.c, script.c, sudo.c, sudo.h:
	Log the session ID, if there is one. Currently logs ID=XXXXXX,
	perhaps should be SESSIONID or SESSID.

	*, configure,,,, sudoreplay.pod:
	Add sudoreplay docs

	* sudoreplay.c:
	add -V (version) flag

	* sudoreplay.c:
	Hook up max_wait.

	* script.c, sudoreplay.c:
	Use base36 number for the ID and store script files with paths like
	/var/log/sudo-session/00/00/00{,.tim,.scr}. This gives us 36^6
	(2,176,782,336) unique IDs.

2009-08-23  Todd C. Miller  <>

	Add check for regcomp

	* sudoreplay.c:
	Add support for selecting by pattern and tty when listing.

2009-08-17  Todd C. Miller  <>

	* sudoreplay.c:
	The beginnings of a list mode.

2009-08-16  Todd C. Miller  <>

	fix pasto

	Add scaffolding for building sudoreplay

	* sudoreplay.c:
	include error.h first arg to nanotime is const

	* sudoreplay.c:
	Initial cut at sudoreplay; replay a sudo session.

2009-08-08  Todd C. Miller  <>

	* script.c:
	Fix wait() usage and use correct wait status.

	* sudo.c, sudo.h, tgetpass.c:
	Add protos for term_* to sudo.h

	* script.c:
	Fix detection of the child process exiting. Since the child is in
	its own session we should only ever get SIGCHLD for that process but
	better safe than sorry.

	Add UNIX98 pty support.

	* configure,, script.c:
	Add UNIX98 pty support.

2009-08-07  Todd C. Miller  <>

	* term.c:
	For raw mode, don't bother clearing BRKINT or PARMRK and clear IUCLC
	if it is defined.

	* auth/pam.c:
	Set PAM_RUSER and PAM_RHOST early so they can be used during
	authentication. Based on a patch from Jamie Beverly.

	* match.c:
	Close dir before returning if strlcpy() reports overflow. From
	Martynas Venckus.

	*, configure,, script.c:
	On Linux, the openpty proto libes in pty.h

	* script.c:
	Call vhangup on exit if the system has it Use setpgrp() if no

2009-08-06  Todd C. Miller  <>

	*, configure,
	Add checks for revoke and vhangup if we don't have openpty

	* script.c:
	Session logging guts that got forgotten in the previous commit.

	*, aclocal.m4, compat.h,, configure,, def_data.c, def_data.h,, gram.c, gram.h,
	gram.y, parse.c, parse.h,, sudo.c, sudo.h, term.c,
	First cut at session logging for sudo. Still need to write
	get_pty() for Unix 98 and old-style BSD ptys. Also needs
	documentation and general cleanup.

2009-08-05  Todd C. Miller  <>

	* sudo.c, sudo_edit.c:
	Fix a bug introduced with def_closefrom. The value of def_closefrom
	already includes the +1.

2009-07-29  Todd C. Miller  <>

	Generate sudo distributions with pax in ustar mode. No longer need
	to use a temp file or have the source dir name match the version.

2009-07-18  Todd C. Miller  <>

	* toke.c, toke.l:
	Fix expansion of %h in #include names. Fixes bugzilla 363

2009-07-12  Todd C. Miller  <>

	* mkdefaults:
	If no arg assume

	Update for 1.7.2
	[f5ad45f69f05] [SUDO_1_7_2]

	* ChangeLog:

2009-06-30  Todd C. Miller  <>

	*,, sudoers.pod:
	Add missing single quotes around a colon in Runas_Spec definition.
	From Elias Benali.

2009-06-29  Todd C. Miller  <>


	* redblack.c:
	In rbrepair, re-color the root or the first non-block node we find
	to be black. Re-coloring the root is probably not needed but won't


2009-06-26  Todd C. Miller  <>

	* redblack.c:
	When repairing the tree, don't touch the root node.

2009-06-25  Todd C. Miller  <>

	* set_perms.c:
	Protect call to setegid in runas_setup with #ifdef HAVE_SETEUID.
	Reported by Josef Schmid.

2009-06-23  Todd C. Miller  <>

	* sudoers.pod:
	Document that we accept env_pam-style environment files

	* env.c:
	Adapt to accept pam_env-style /etc/environment which allows shell-
	style lines such as: export EDITOR="/usr/bin/vi"

	* sudoers.pod:
	Make it clear that env_delete only works when !env_reset. From Lo??c

2009-06-15  Todd C. Miller  <>

	* sudo.pod, sudoers.pod:
	Add non-unix group bits, adapted from Quest

	build the .cat page in the current working dir, not the src dir

	* env.c:
	Return EINVAL in setenv() if var is NULL or the empty string to
	match glibc behavior.

2009-06-13  Todd C. Miller  <>

	* configure,

2009-06-11  Todd C. Miller  <>


2009-06-09  Todd C. Miller  <>

	Document --with-libvas and --with-libvas-rpath

2009-05-29  Todd C. Miller  <>

	* ldap.c, sudoers.ldap.pod:
	For netscape-derived LDAP SDKs the cert and key paths may be a
	directory or a file. However, version 5.0 of the SDK only seems to
	support using a directory. If ldapssl_clientauth_init fails and the
	cert or key paths look like they could be files, strip off the last
	path element and try again.

	Add non-Unix group .o to COMMON_OBJS and substitute in path to flex.

2009-05-27  Todd C. Miller  <>

	* configure,, match.c, sudo.c, vasgroups.c:
	Update non-Unix group support from Quest, as reworked by me.

	* toke.c:

	* toke.l:
	Add support for escaped hex chars in names, e.g. \x20 for space.

2009-05-25  Todd C. Miller  <>

	* LICENSE,, aclocal.m4, alias.c, auth/aix_auth.c,
	auth/pam.c, auth/sudo_auth.c, auth/sudo_auth.h, check.c, env.c,
	fileops.c, glob.c, gram.y, interfaces.c, lbuf.c, ldap.c, logging.c,
	logging.h, match.c, parse.c, parse.h,, pwutil.c,
	set_perms.c, sudo.c, sudo.h, sudo.pod, sudo_nss.c, sudo_nss.h,, sudoers.ldap.pod, sudoers.pod, testsudoers.c,
	tgetpass.c, toke.l, visudo.c:
	Update copyright years.

2009-05-24  Todd C. Miller  <>

	* interfaces.c, lbuf.c:
	Minor fixes for Minix-3

2009-05-22  Todd C. Miller  <>

	* set_perms.c:
	Handle getgroups() returning 0. Also add missing check for

2009-05-19  Todd C. Miller  <>

	*,, configure,, sudo.c,
	version.h, visudo.c:
	Replace version.h with PACKAGE_VERSION set via AC_INIT in configure.

2009-05-18  Todd C. Miller  <>

	* set_perms.c:
	Remove group setting code in setusercontext case, we will do it
	ourselves later on in runas_setup. Set the gid after
	initgroups/setgroups is called, since on Mac OS X it seems to change
	the egid.

2009-05-17  Todd C. Miller  <>

	* LICENSE,,, match.c, nonunix.h, sudo.c,
	Initial bits of non-unix group support using Quest Authentication

	* toke.c, toke.l:
	Accept %:foo as a non-Unix group

	* toke.c, toke.l:
	Allow user/group to be double quoted in the case of non-Unix groups
	which contain spaces.

2009-05-11  Todd C. Miller  <>

	* match.c:
	Don't allow the user to specify the default runas user if their
	sudoers entry only allows them to run as a group.

2009-05-10  Todd C. Miller  <>

	* sudo.c:
	Must call audit_success before we change uids.

	* logging.c, set_perms.c, sudo.h, testsudoers.c:
	Add option for set_perm to not exit on failure and use this in the
	logging routines.

	* parse.c:
	In -l mode, if the user is only allowed to run as a group, display
	the user's name, not root's before the allowed group.

	* sudo.c:
	Fix -g mode, broken by rev 1.503 which had the side effect of
	setting the runas user to root unilaterally.

2009-05-08  Todd C. Miller  <>

	* fileops.c:
	When unlocking a file with fcntl, use F_SETLK, not F_SETLKW.

	* pwutil.c:
	Only cache by the method we fetched for pwd and grp lookups.
	Previously we cached both by namd and id but this can cause problems
	for entries that share the same id. Also add more info in the error
	message in case the insert fails (which should now be impossible).

2009-04-30  Todd C. Miller  <>

	* sudoers.pod:
	Add a clarification from Nick Sieger

2009-04-25  Todd C. Miller  <>

	* env.c:
	Inline the setting of the environment string.

2009-04-24  Todd C. Miller  <>

	* env.c:
	setenv(3) in Linux treats a NUL value as the empty string setenv(3)
	in BSD doesn't return an error if the name has '=' in it, it just
	treats the '=' as end of string.

2009-04-22  Todd C. Miller  <>

	* toke.c, toke.l:
	Not all systems have d_namlen

2009-04-20  Todd C. Miller  <>

	* sudoers.pod:
	Fix up some pod2html issues.

2009-04-19  Todd C. Miller  <>

	* interfaces.c:
	Check for NULL ifa_addr and ifa_netmask. Adapted from a diff from
	Quest Software.

	* sudoers.pod:
	Ignore files ending in '~' in sudo.d (emacs backup files)

	* toke.c, toke.l:
	Ignore files ending in '~' in sudo.d (emacs backup files)

2009-04-18  Todd C. Miller  <>

	*,, sudoers.pod, toke.c, toke.l:
	For #includedir, ignore any file containing a dot

	*, version.h:
	Bump version

	* gram.c, gram.y, parse.c, parse.h, sudo.c, sudo.h,,, sudoers.pod, testsudoers.c, toke.c, toke.l,
	Implement #includedir directive. Files in an includedir are not
	edited by visudo unless they contain a syntax error.

	* ChangeLog:
	[8741ed61a78b] [SUDO_1_7_1]

	Forgot umask_override

	* ChangeLog, TODO:

2009-04-16  Todd C. Miller  <>

	* visudo.c:
	Rewind stream if we fdopen sudoers since it may not be at the
	beginning. Set the keepopen flag on already-open files too so the
	lexer doesn't close them out from under us.

	* visudo.c:
	Print the proper file name when there is a parse error in an include

2009-04-11  Todd C. Miller  <>


2009-04-10  Todd C. Miller  <>

	* configure,
	Fix a warning when --without-ldap is specified.

2009-04-05  Todd C. Miller  <>

	* alias.c, parse.h, visudo.c:
	Store aliases that we remove during check_aliases in a freelist and
	free them at the end so we don't leak memory.

2009-03-28  Todd C. Miller  <>

	* visudo.c:
	Check aliases in -c mode too.

	* alias.c, parse.h, visudo.c:
	Make alias_remove return the alias struct instead of freeing it
	directly. Fixes a use after free in alias_remove_recursive, the only

	* alias.c, match.c, parse.c, parse.h, visudo.c:
	Rename find_alias -> alias_find for consistency.

2009-03-27  Todd C. Miller  <>

	* visudo.c:
	When checking for unused aliases, recurse if the alias points to
	another alias.

2009-03-16  Todd C. Miller  <>

	* ldap.c:
	Back out rev 1.105 for now. Real ldapux_client.conf support will be
	done later after some refactoring.

2009-03-14  Todd C. Miller  <>

	* ldap.c:
	Treat ldap_hostport the same as "host" for ldapux.

	* configure,
	Only check for ldap_sasl_interactive_bind_s if we can find sasl.h.
	Fixes compilation with ldapux.

2009-03-12  Todd C. Miller  <>

	* fileops.c:
	fix char subscript

2009-03-11  Todd C. Miller  <>

	remove errant carriage returns

	* audit.c, env.c:
	fix K&R compilation


2009-03-10  Todd C. Miller  <>

	Add missing HAVE_BSM_AUDIT

	Add 1.7.1 features

	Mention --with-netsvc

	* sudoers.ldap.pod:
	Document netsvc.conf support

	* configure,,, sudo.c, sudo_nss.c,
	Add support for AIX netsvc.conf (like nsswitch.conf).

2009-03-08  Todd C. Miller  <>

	*, configure,, env.c:
	Add --enable-env-debug flag to enable environment sanity checks.

	* sudoers.ldap.pod, sudoers.pod:
	Work around some pod2html issue.

2009-03-07  Todd C. Miller  <>

	* env.c:
	Only sync environ for putenv, setenv, and unsetenv. We need to make
	sure that sudo_putenv and sudo_setenv only modify env.envp, not

2009-03-02  Todd C. Miller  <>

	* env.c:

	* env.c:
	Fix unsetenv when UNSETENV_VOID

	* aclocal.m4, configure:

	* ldap.c:
	tivoli-based ldap does not have ldapssl_err2string

	* configure:

2009-03-01  Todd C. Miller  <>

	*, configure,, ldap.c:
	Add support for Tivoli-based LDAP start TLS as seen in AIX.

	* env.c:
	Add sanity checks for setenv/unsetenv

	Include bsm_audit.h in the tarball

	*, version.h:
	bump version for sudo 1.7.1

	* aclocal.m4, auth/aix_auth.c,, configure,,
	env.c, ldap.c, sudo.h:
	Replace sudo_setenv/sudo_unsetenv with calls to setenv/unsetenv and
	provide our own setenv/unsetenv/putenv that operates on own env
	pointer. Make sync_env() inline in setenv/unsetenv/putenv functions.

2009-02-25  Todd C. Miller  <>

	* sudo.c:
	Make "sudoedit -h" work as expected

	* auth/pam.c:
	Make sure def_prompt is always defined. This is a workaround for
	pam configs that prompt for a password in the session but don't have
	an auth line. A better fix is to expand the sudo prompt earlier and
	set def_prompt to that when initializing.

	* sudo.pod:
	Mention that the helper for -A may be graphical.

	Document what happens if there is no tty.

	* sudo.c:
	cosmetic changes

	* term.c:
	Fix term_restore

	* sudo.c:
	Fix "sudo -k" with no other args

2009-02-24  Todd C. Miller  <>

	* check.c, sudo.c, sudo.pod,
	Allow the -k flag to be specified in conjunction with a command or
	another option that may require authentication.

2009-02-23  Todd C. Miller  <>

	* configure,
	Remove unneeded AC_CANONICAL_TARGET; from Diego E. 'Flameeyes'

	Parallel make fix. From Diego E. 'Flameeyes'

2009-02-21  Todd C. Miller  <>

	* def_data.c, def_data.h,, sudo.c, sudoers.pod:
	Implement umask_override

	* toke.c:

	* sudoers.pod, toke.l, visudo.c:
	Implement %h escape in sudoers include filenames.

	* audit.c:
	Need to include compat.h

	*, audit.c, bsm_audit.c, bsm_audit.h, logging.h, sudo.c:
	Make audit_success and audit_failure generic functions in
	preparation for integrating linux audit support.

	* term.c:
	remove duplicate include

2009-02-20  Todd C. Miller  <>

	* bsm_audit.c:
	Add missing include

	* sudo.c:
	May need to update the runas user after parsing command-based

2009-02-18  Todd C. Miller  <>

	* glob.c:
	Add missing pair of braces introduced with character class support.

2009-02-15  Todd C. Miller  <>

	* def_data.c, def_data.h,, sudoers.pod, tgetpass.c:
	Rename pwstars to pwfeedback

2009-02-11  Todd C. Miller  <>

	* bsm_audit.c, bsm_audit.h:
	Add const to make MacOS happy.

	*, auth/sudo_auth.c, bsm_audit.c, bsm_audit.h, configure,, sudo.c:
	Add bsm audit support from Christian S.J. Peron

	* term.c:
	This is new code, no DARPA notice.

2009-02-10  Todd C. Miller  <>

	* def_data.c, def_data.h,, match.c, sudoers.pod:
	Rename simple_glob -> fast_glob

	* match.c:
	g/c unused var

	* def_data.c, def_data.h,, match.c, sudoers.pod:
	Add simple_glob option to use fnmatch() instead of glob(). This is
	useful when you need to specify patterns that reference network file

	* tgetpass.c:
	add term_* proto

	* sudoers.pod:
	mention glob()

2009-02-09  Todd C. Miller  <>

	* tgetpass.c:
	Delete any pwstars we wrote after the user hits return. That way
	there is no record on screen as to the user's password length.

2009-02-08  Todd C. Miller  <>

	* term.c:
	Move terminal setting bits from tgetpass.c to term.c

	*, def_data.c, def_data.h,, sudoers.pod,
	Add pwstars sudoers option that causes sudo to print a star every
	time the user presses a key.

2009-02-03  Todd C. Miller  <>

	Fix up F<> brokenness for and

2009-01-27  Todd C. Miller  <>

	* ldap.c:
	For ldap_search_ext_s() the sizelimit param should be 0, not -1, to
	indicate no limit. From Mark Janssen.

2009-01-17  Todd C. Miller  <>

	* toke.c, toke.l:
	Comments that begin with #- should not be parsed as uids.

2009-01-09  Todd C. Miller  <>

	* sudo.c:
	Do not try to set the close on exec flag if we didn't actually open

2008-12-19  Todd C. Miller  <>

	* ChangeLog:
	[e11f0e4c1bdd] [SUDO_1_7_0]

2008-12-14  Todd C. Miller  <>

	* TODO:

2008-12-09  Todd C. Miller  <>

	* auth/pam.c:
	Return PAM_AUTH_ERR instead of PAM_CONV_ERR if user enters ^C at the
	password prompt.

	* configure,
	Don't try to build on HP-UX with the bundled compiler
	as it cannot generate shared objects.

	* emul/charclass.h, glob.c, lbuf.c, tgetpass.c:
	K&R compilation fixes

	* parse.c:
	Use tq_foreach_fwd when checking pseudo-commands to make it clear
	that we are not short-circuiting on last match. When pwcheck is
	'all', initialize nopass to TRUE and override it with the first non-
	TRUE entry.

2008-12-08  Todd C. Miller  <>

	* parse.c:
	Do not short circuit pseudo commands when we get a match since,
	depending on the settings, we may need to examine all commands for

2008-12-03  Todd C. Miller  <>


	* sudoers.pod:
	hostnames may also contain wildcards

	remove stamp-* files and linux core files in clean target

2008-12-02  Todd C. Miller  <>

	* auth/sudo_auth.h,, configure,
	Use HAVE_SIA_SES_INIT instead of HAVE_SIA for Digital UNIX

2008-11-26  Todd C. Miller  <>

	* configure,
	correctly enable SIA on Digital UNIX

	* TODO:

	* ChangeLog:

2008-11-25  Todd C. Miller  <>

	* check.c, sudo.h, tgetpass.c:
	Even if neither stdin nor stdout are ttys we may still have /dev/tty
	available to us.

2008-11-24  Todd C. Miller  <>


	* sudoers.pod:
	fix typos; Markus Lude

	* ChangeLog:

	* toke.c:

	* toke.l:
	Fix matching of a line that only consists of a comment char

2008-11-22  Todd C. Miller  <>

	* auth/pam.c:
	MacOS pam will retry conversation function if it fails so just treat
	^C as an empty password.

	* visudo.c:
	When checking for alias use, also check defaults bindings.

	* redblack.c:
	unused var

	* redblack.c:
	Replace my rbdelete with Emin's version (which actually works ;-)

2008-11-19  Todd C. Miller  <>

	* testsudoers.c:
	malloc debugging

	* visudo.c:
	malloc options in devel mode for visudo too

2008-11-18  Todd C. Miller  <>

	* sudo.c:
	fix compilation on non-C99; from Theo

	* visudo.c:
	fix check_aliases

	* alias.c:
	when destroying an alias, free the correct data pointer

	* auth/sudo_auth.h:
	add proto for aixauth_cleanup; from Dale King

2008-11-15  Todd C. Miller  <>


	* sudo.pod, sudoers.pod, visudo.pod:
	standardize on the term 'option' for command line options (not flag)

2008-11-14  Todd C. Miller  <>

	Add note on configuring HP-UX pam

2008-11-11  Todd C. Miller  <>

	* check.c, sudo.c:
	Move tty checks into check_user() so we only do them if we actually
	need a password.

	* sudo.c:
	Don't error out if no tty or askpass unless we actually need to

2008-11-10  Todd C. Miller  <>

	* ChangeLog:

	*, sudo.c:
	s/overriden/overridden/; from Tobias Stoeckmann

2008-11-09  Todd C. Miller  <>

	* WHATSNEW, visudo.c:
	check sudoers owner and mode in strict mode

	* gram.c, toke.c:

	Update copyright years.

	* LICENSE, alias.c, alloc.c, auth/afs.c, auth/aix_auth.c,
	auth/bsdauth.c, auth/fwtk.c, auth/kerb4.c, auth/kerb5.c, auth/pam.c,
	auth/securid.c, auth/securid5.c, auth/sia.c, auth/sudo_auth.h,
	closefrom.c, compat.h, defaults.c, defaults.h, env.c, fileops.c,
	gettime.c, gram.y, ins_csops.h, insults.h, interfaces.c,
	interfaces.h, lbuf.c, license.pod, list.c, logging.c, logging.h,
	parse.c, parse.h, pwutil.c, redblack.c, redblack.h, snprintf.c,
	sudo.c, sudo.pod, sudo_edit.c, sudo_nss.h, sudoers.pod,
	testsudoers.c, toke.l, tsgetgrpw.c, utimes.c, version.h, visudo.c,
	visudo.pod, zero_bytes.c:
	Update copyright years.

	* emul/charclass.h, fnmatch.c, glob.c:
	add my copyright

2008-11-08  Todd C. Miller  <>

	* toke.c, toke.l:
	The loop in fill_cmnd() was going one byte too far past the end,
	resulting in a NUL being written immediately after the buffer end.

	add sections on tgetpass changes

	* tgetpass.c:
	Treat EOF w/o newline as an error.

2008-11-07  Todd C. Miller  <>

	* parse.c:
	Fix "sudo -v" when NOPASSWD is set.

	* auth/bsdauth.c, auth/fwtk.c, auth/pam.c, auth/sudo_auth.c,
	No longer treat an empty password at the prompt as special. To quit
	out of sudo you now need to hit ^C at the password prompt.


	* def_data.c, def_data.h,, sudo.c, sudoers.pod:
	Sudo will now refuse to run if no tty is present unless the new
	visiblepw sudoers flag is set.

2008-11-06  Todd C. Miller  <>

	* aix.c:

	* aix.c:
	fix fallback value for RLIM_SAVED_MAX

	* auth/aix_auth.c, auth/sudo_auth.h:
	Move clearing of AUTHSTATE into aixauth_cleanup.

	* auth/aix_auth.c, env.c:
	Unset AUTHSTATE after calling authenticate() as it may not be
	correct for the user we are running the command as.

	* isblank.c:
	Add isblank() function for systems without it. Needed for POSIX
	character class matching in fnmatch.c and glob.c.

2008-11-05  Todd C. Miller  <>

	expound on sudo and cd

2008-11-04  Todd C. Miller  <>

	* ChangeLog:


	* sudoers.pod:
	mention defauts parse order

2008-11-03  Todd C. Miller  <>

	*, aclocal.m4, compat.h, configure:
	Add isblank() function for systems without it. Needed for POSIX
	character class matching in fnmatch.c and glob.c.

	add emul/charclass.h to HDRS

2008-11-02  Todd C. Miller  <>

	* TODO:

	* defaults.c, parse.c, testsudoers.c, visudo.c:
	Move update_defaults into defaults.c and call it properly from
	visudo and testsudoers.

	* defaults.c, interfaces.c, pwutil.c, sudo.c, sudo_edit.c, tgetpass.c,
	use zero_bytes() instead of memset() for consistency

	* logging.c, mon_systrace.c, parse.c, sudo.c, sudo_edit.c, tgetpass.c,
	Zero out sigaction_t before use in case it has non-standard entries.

	* match.c:
	quiet gcc

	* match.c:
	Short circuit glob() checks if basename(pattern) !=
	basename(command). Refactor code that checks for a command in a
	directory and use it in the glob case if the resolved pattern ends
	in a '/'.

2008-11-01  Todd C. Miller  <>

	* defaults.h, parse.c, sudo.c, testsudoers.c, visudo.c:
	Defer setting runas defaults until after runaspw/gr is setup.

2008-10-29  Todd C. Miller  <>

	* match.c, sudo.c, testsudoers.c:
	Use MAXHOSTNAMELEN+1 when allocating host/domain name since some
	systems do not include space for the NUL in the size. Also manually
	NUL-terminate buffer from gethostname() since POSIX is wishy-washy
	on this.

2008-10-26  Todd C. Miller  <>

	* sudo.c, sudoers.pod:
	When setting the umask, use the union of the user's umask and the
	default value set in sudoers so that we never lower the user's umask
	when running a command.

	* sudo.c:
	Don't try to read from a zero-length sudoers file. Remove the bogus
	Solaris work-around for EAGAIN. Since we now use fgetc() it should
	not be a problem.

2008-10-25  Todd C. Miller  <>

	* parse.c:
	In update_defaults() check the return value of user*_matches against
	ALLOW so we don't inadvertantly match on UNSPEC.

2008-10-24  Todd C. Miller  <>

	regen man pages; no more hyphenation

	* sudo.c:
	Don't error out on a zero-length sudoers file. With the advent of
	#include the user could create a situation where sudo is unusable.

2008-10-23  Todd C. Miller  <>

	* auth/kerb5.c,, configure,
	Newer heimdal has 2-argument krb5_get_init_creds_opt_free() like MIT
	krb5. Really old heimdal has no krb5_get_init_creds_opt_alloc() at
	all. Add configure tests to handle all the cases.

2008-10-08  Todd C. Miller  <>

	* sudo.pod:

	* sudoers.pod:
	document sudoers_locale

	* sudo.pod, sudo_edit.c:
	add SUDO_EDITOR variable that sudoedit uses in preference to VISUAL

	* toke.c, toke.l:
	In fill_cmnd(), collapse any escaped sudo-specific characters.
	Allows character classes to be used in pathnames.

2008-10-03  Todd C. Miller  <>

	* lbuf.c:
	fix typo in non-C89 function declaration

	* sudoers.pod:
	Mention POSIX characters classes now that out fnmatch() and glob()
	support them.

	* sample.sudoers, sudoers.pod:
	Replace [A-z] (which won't match in UTF8) with [A-Za-z] which is
	locale agnostic.

	* parse.h:
	use __signed char if we are going to assign a negative value since
	on Power, char is unsigned by default

	*, configure,
	Add tests for __signed char and signed char.

	* aix.c:
	Fix AIX limit setting. getuserattr() returns values in disk blocks
	rather than bytes. The default hard stack size in newer AIX is
	RLIM_SAVED_MAX. From Dale King.

2008-09-26  Todd C. Miller  <>

	* emul/charclass.h, fnmatch.c, glob.c:
	Add character class support to included glob(3) and fnmatch(3).

2008-09-16  Todd C. Miller  <>

	* emul/fnmatch.h:
	Remove UCB advertising clause and some compatibility defines.

2008-09-14  Todd C. Miller  <>

	* sudo_edit.c:
	Check EDITOR/VISUAL to make sure sudoedit is not re-invoking itself
	or sudo. This allows one to set EDITOR to sudoedit without getting
	into an infinite loop of sudoedit running itself until the path gets
	too big.

	* def_data.c, def_data.h,, defaults.c, sudo.c:
	Add sudoers_locale Defaults option to override the default sudoers
	locale of "C".

2008-09-13  Todd C. Miller  <>

	* sudo.c:
	Set locale to system default except for during sudoers parse.

2008-09-12  Todd C. Miller  <>

	* match.c:
	Redo change in 1.34 to use pointer arithmetic.

2008-09-11  Todd C. Miller  <>

	* match.c:
	Fix a dereference (read) of a freed pointer. Reported by Patrick

2008-08-23  Todd C. Miller  <>

	* sudo.c:
	Set locale to "C" to avoid interpretation issues with character
	ranges in sudoers. May want to make the locale a sudoers option in
	the future.

2008-08-20  Todd C. Miller  <>

	we no longer use setproctitle

	* sudo.h:
	remove #if 1

	* LICENSE, mkstemp.c:
	Use my replacement mkstemp() from the mktemp package.

2008-07-12  Todd C. Miller  <>

	* gram.c:
	regen with yacc skeleton bug fixed

	* sudoers.pod:
	Remove duplicate "as root". From Martin Toft.

2008-07-02  Todd C. Miller  <>

	* pwutil.c, sudo.c, sudo.h, testsudoers.c:
	Flesh out the fake passwd entry used for running commands as a uid
	not listed in the passwd database. Fixes an issue with some PAM

2008-07-01  Todd C. Miller  <>

	* sudo.c:
	Error out in -i mode if the user has no shell. This can happen when
	running commands as a uid with no password entry.

2008-06-26  Todd C. Miller  <>

	* toke.c, toke.l:
	Better fix for line continuation inside double quotes. Now accepts
	whitespace between the backslash and the newline like the main

2008-06-25  Todd C. Miller  <>

	* toke.c, toke.l:
	Fix line continuation in strings. It was only being honored if
	preceded by whitespace.

2008-06-22  Todd C. Miller  <>

	*, configure,, logging.c:
	Replace the double fork with a fork + daemonize.

2008-06-21  Todd C. Miller  <>

	* env.c, sudo.c:
	The -i flag should imply env_reset. This got broken in sudo 1.6.9.

	* logging.c, sudo.c, sudo_edit.c, visudo.c:
	Change how the mailer is waited for. Instead of having a SIGCHLD
	handler, use the double fork trick to orphan the child that opens
	the pipe to sendmail. Fixes a problem running su on some Linux

2008-06-20  Todd C. Miller  <>

	* configure,
	Fix configure test for dirfd() on Linux where DIR is opaque.

2008-06-17  Todd C. Miller  <>

	* tgetpass.c:
	Get rid of the QNX TCSAFLUSH -> TCSADRAIN hack. If QNX still has
	this problem we'll need to revisit this again.

2008-06-11  Todd C. Miller  <>

	* logging.c:
	Ignore SIGPIPE instead of blocking it when piping to the mailer. If
	we only block the signal it may be delivered later when we unblock.
	Also, there is no need to block SIGCHLD since we no longer do the
	double fork. The normal SIGCHLD handler is sufficient.

2008-06-08  Todd C. Miller  <>

	* configure,
	Add description for NO_PAM_SESSION, from a redhat patch.

2008-06-06  Todd C. Miller  <>

	*,, sudo.pod:
	Fix typos in -i usage

2008-05-18  Todd C. Miller  <>

	* configure,
	Redo the test for dgettext() in a way that hopefully will work
	around the libintl_dgettext() undefined problem.

2008-05-11  Todd C. Miller  <>

	* schema.ActiveDirectory:
	change filename in comment

2008-05-10  Todd C. Miller  <>

	Reference schema.ActiveDirectory

2008-05-09  Todd C. Miller  <>

	* schema.OpenLDAP, schema.iPlanet:
	Mark sudoRunAs as deprecated.

	* schema.ActiveDirectory:
	add sudoRunAsUser and sudoRunAsGroup

	* schema.ActiveDirectory:
	Active Directory schema by Chantal Paradis and Eric Paquet

2008-05-08  Todd C. Miller  <>

	* parse.c:
	remove an XXX that was fixed

	* ChangeLog:

	* parse.c:
	Initialize tags to UNSPEC instead of def_* in "sudo -l" mode. This
	fixes a problem where the tag value printed was influenced by
	defaults set in the first pass through the parser.

2008-05-04  Todd C. Miller  <>

	*, sudo.psf:
	No point in packaging the TODO file

	* ChangeLog:

2008-05-03  Todd C. Miller  <>

	* WHATSNEW, def_data.c, def_data.h,, env.c, sudo.c,
	sudo.h,,, sudoers.pod:
	Add env_file Defaults option that is similar to /etc/environment on
	some systems.

2008-05-02  Todd C. Miller  <>

	change version to 1.7.0

	initial valgrind pass done

2008-04-23  Todd C. Miller  <>

	* ldap.c:
	Fix typo/think in sudo_ldap_read_secret() when storing the secret.

2008-04-11  Todd C. Miller  <>

	* ldap.c:
	define LDAPS_PORT if the system headers do not

2008-04-10  Todd C. Miller  <>

	* gram.c, gram.y:
	Fix another memory leak in init_parser().

	* configure,
	There was a missing space before the ldap libs in SUDO_LIBS for some

	* alias.c, gram.c, gram.y, toke.c, toke.l:
	Clean up some memory leaks pointed out by valgrind.

2008-04-07  Todd C. Miller  <>

	* sudo.c:
	fix "sudo -s" broken by mode/flags breakout

	* configure,
	remove duplicate check for dgettext

2008-04-05  Todd C. Miller  <>

	* aix.c:
	Fall back to default stanza if no user-specific limit is found.

2008-04-02  Todd C. Miller  <>

	* snprintf.c:
	include stdint.h if present

	* snprintf.c:
	Use LLONG_MAX, not the old QUAD_MAX

2008-04-01  Todd C. Miller  <>

	* sudoers.ldap.pod:
	fix cut and pasto

2008-03-31  Todd C. Miller  <>

	* pwutil.c:
	Add #ifdef PURITY

2008-03-30  Todd C. Miller  <>

	* auth/bsdauth.c:
	remove useless cast

2008-03-27  Todd C. Miller  <>

	* ChangeLog:

	* TODO:

	* sudo.h:
	Split MODE_* defines into primary and flags.

2008-03-26  Todd C. Miller  <>

	* aix.c:
	It turns out the logic for getting AIX limits is more convoluted
	than I realized and differs depending on whether the soft and/or
	hard limits are defined.

2008-03-23  Todd C. Miller  <>

	*, configure,
	Back out AIX-specific change to set the sudo_noexec path to the .a
	file, we do really want to use the .so file. Since libtool doesn't
	do that correctly, just install the .so file ourselves in the

	* install-sh:
	If the file given to install is a path, only use the basename of the
	file when building the destination path.

2008-03-18  Todd C. Miller  <>

	* sudo.c:
	parse_args() cleanup: Sort command line options in the getopt()
	switch The -U option requires a parameter Normalize a few ISSET
	calls Split mode into mode and flags and retire the now-obsolete
	excl variable

	* WHATSNEW, check.c, sudo.c,, sudo.h,, sudo.pod,
	Add -n (non-interactive) flag.

	* sudo.c:
	Move version printing, etc. into a separate function.

	* sudo.c:
	Don't try to cleanup nsswitch if it has not been initialized.

2008-03-17  Todd C. Miller  <>

	* logging.c:
	Block SIGPIPE in send_mail() so sudo is not killed by a problem
	executing the mailer.

2008-03-14  Todd C. Miller  <>

	* configure,
	AIX shared libs end in .a, not .so.

2008-03-13  Todd C. Miller  <>

	* env.c:
	Preserve HOME by default too. Matches documentation and previous

2008-03-12  Todd C. Miller  <>

	* sudo.c:
	Use getopt() to parse the command line. We need to be able to
	intersperse env variables and options yet still honor "--"" which
	complicates things slightly.

2008-03-06  Todd C. Miller  <>

	* ChangeLog:

	* acsite.m4, configure,
	update to libtool-1.5.26

	* config.guess, config.sub:
	update from libtool-1.5.26 distribution

	* aix.c, sudo.h:
	attempt to fix compilation errors on AIX

	fix typo in last commit

	Add WHATSNEW file to the distribution

	* visudo.c:
	use warningx instead of fprintf(stderr, ...)

	* list.c:
	add DEBUG to list2tq

	* ChangeLog, TODO:

	mention mailfrom

	*, aix.c,, configure,,
	set_perms.c, sudo.h:
	Add aix_setlimits() to set resource limits on AIX using a
	combination of getuserattr() and setrlimit(). Currently untested.

2008-03-05  Todd C. Miller  <>

	* def_data.c, def_data.h,, logging.c,,, sudoers.pod:
	Add mailfrom Defaults option that sets the value of the From: field
	in the warning/error mail. If unset the login name of the invoking
	user is used.

	* defaults.c:
	store a copy of _PATH_SUDO_ASKPASS in def_askpass that is freeable

	* gram.c, gram.y:
	When adding a default, only call list2tq() once to do the list to tq
	conversion. It is not legal to call list2tq multiple times on the
	same list since list2tq consumes and modifies the list argument.

	*,, sudoers.ldap.pod:
	comment out XXXs for now

	mention askpass

2008-03-04  Todd C. Miller  <>

	* sudo.c:
	Error out if both -A and -S are specified Error out if -A is
	specified but no askpass is configured

	* configure,
	we are not going to ship a sudo-specific askpass

2008-03-03  Todd C. Miller  <>

	* sudo.h:
	fix definition of TGP_ASKPASS

	* def_data.c,
	make askpass boolean-capable

	document --with-askpass


2008-03-02  Todd C. Miller  <>

	* sudo.pod,, sudoers.pod:
	document -A and askpass

	* auth/sudo_auth.c, check.c, configure,, def_data.c,
	def_data.h,, defaults.c,, sudo.c, sudo.h,, tgetpass.c:
	Add support for running a helper program to read the password when
	no tty is present (or when specified with the -A flag). TODO: docs.

	* def_data.c,
	add missing printf format to SELinux role and type strings

2008-02-27  Todd C. Miller  <>

	* INSTALL, configure,
	Disable use of gss_krb5_ccache_name() by default and add
	--enable-gss-krb5-ccache-name configure option to enable it. It
	seems that gss_krb5_ccache_name() doesn't work properly with some
	combinations of Heimdal and OpenLDAP.

2008-02-22  Todd C. Miller  <>

	* selinux.c:
	Ignore setexeccon() failing in permissive mode. Also add a call to
	setkeycreatecon() (though this is probably insufficient). From Dan

	* auth/pam.c:
	Only set std_prompt for the PAM_PROMPT_* cases. The conversation
	function may be called for non-password reading purposes so we must
	be careful not to use def_prompt in cases where it may not be set.

2008-02-20  Todd C. Miller  <>

	* selinux.c:
	Don't free the new tty context, we need to keep it around when we
	restore the tty context after the command completes

2008-02-19  Todd C. Miller  <>

	* selinux.c:

	*, sudo.pod:
	Only put login_cap(3) in SEE ALSO section if we have login.conf

2008-02-18  Todd C. Miller  <>


	* sudoers.pod:
	Substitute in comment characters for lines partaining to login.conf,
	BSD auth and SELinux and only enable them if pertinent.

	Substitute in comment characters for lines partaining to login.conf,
	BSD auth and SELinux and only enable them if pertinent.

	* sudo.pod:
	Substitute in comment characters for lines partaining to login.conf,
	BSD auth and SELinux and only enable them if pertinent.

	Substitute in comment characters for lines partaining to login.conf,
	BSD auth and SELinux and only enable them if pertinent.

	*, configure,
	Substitute in comment characters for lines partaining to login.conf,
	BSD auth and SELinux and only enable them if pertinent.

	*, sudo.pod, sudoers.ldap.pod, sudoers.pod, visudo.pod:
	Remove the =cut on the first line (above the copyright notice) to
	quiet pod2man. Also remove the hackery in the FILES section and
	just deal with the fact that there will a newline between each

2008-02-17  Todd C. Miller  <>

	run when generating

	* configure,,
	comment out SELinux manual bits unless --with-selinux was specified

	* sudoers.pod:
	document role and type defaults for SELinux

	* sudo.c,,, sudo.pod,
	Document "sudo -ll" and make "sudo -l -l" be equivalent.

2008-02-15  Todd C. Miller  <>

	* configure,
	Treat k*bsd*-gnu like Linux, not BSD. Fixes compilation problems on
	Debian GNU/kFreeBSD.

2008-02-13  Todd C. Miller  <>

	* auth/kerb5.c:
	Avoid Heimdal'isms introduced in the rev 1.32 rewrite of

	* logging.c, logging.h, sudo.c:
	Remove dependence on VALIDATE_NOT_OK in logging functions. Split
	log_auth() into log_allowed() and log_denial() Replace mail_auth()
	with should_mail() and a call to send_mail()

2008-02-10  Todd C. Miller  <>

	* ldap.c:
	Add debugging so we can tell if the krb5 ccache is accessible

	mention --with-selinux

2008-02-09  Todd C. Miller  <>

	* configure:

	* selinux.c:
	add Sudo tag

	* sudo.c,, sudo.h,, sudo.pod,,,, sudoers.ldap.pod,
	testsudoers.c, toke.c, toke.l:
	Add support for SELinux RBAC. Sudoers entries may specify a role
	and type. There are also role and type defaults that may be used.
	To make sure a transition occurs, when using RBAC commands are
	executed via the new sesh binary. Based on initial changes from Dan

	* sesh.c:
	Add support for SELinux RBAC. Sudoers entries may specify a role
	and type. There are also role and type defaults that may be used.
	To make sure a transition occurs, when using RBAC commands are
	executed via the new sesh binary. Based on initial changes from Dan

	*,,, def_data.c, def_data.h,, gram.c, gram.h, gram.y, ldap.c, parse.c, parse.h,, selinux.c:
	Add support for SELinux RBAC. Sudoers entries may specify a role
	and type. There are also role and type defaults that may be used.
	To make sure a transition occurs, when using RBAC commands are
	executed via the new sesh binary. Based on initial changes from Dan

2008-02-08  Todd C. Miller  <>

	* lbuf.c, ldap.c, parse.c, sudo.c, sudo.h, sudo_nss.c:
	Add long list (sudo -ll) support for printing verbose LDAP and
	sudoers file entries. Still need to update manual.

2008-02-03  Todd C. Miller  <>

	* ldap.c, parse.c, sudo.h, sudo_nss.c, sudo_nss.h:
	Unify the -l output for file and ldap based sudoers and use lbufs
	for both. The ldap output does not currently include options that
	cannot be represented as tags. This will be remedied in a long list
	output mode to come.

2008-01-27  Todd C. Miller  <>

	* set_perms.c:
	Use a specific error message for errno == EAGAIN when setuid() et al
	fails. On Linux systems setuid() will fail with errno set to EAGAIN
	if changing to the new uid would result in a resource limit

	* sudo.c:
	Unlimit nproc on Linux systems where calling the setuid() family of
	syscalls causes the nroc resource limit to be checked. The limits
	will be reset by when PAM is used. In the non-PAM
	case the nproc limit will remain unlimited but there doesn't seem to
	be a way around that other than having sudo parse
	/etc/security/limits.conf directly.

	* env.c, sudo.c, sudo.pod:
	Only read /etc/environment on Linux and AIX

2008-01-23  Todd C. Miller  <>

	* configure,
	ldap.conf and ldap.secret paths from going into config.h. Avoid
	single quotes in variable expansion when using SUDO_DEFINE_UNQUOTED
	since in some versions of bash they will end up literally in the
	resulting define.

2008-01-21  Todd C. Miller  <>

	mention --with-nsswitch=no

	* configure,
	ldap_ssl.h depends on ldap.h being included first

	*, configure,, ldap.c:
	Include ldap_ssl.h if we can find it. Needed for the
	ldapssl_set_strength defines on HP-UX at least.

	* sudoers.ldap.pod:

	* TODO:


	Use 78n line length when formatting cat pages.

	Remove redundant info that is now in sudoers.ldap.pod

2008-01-20  Todd C. Miller  <>

	*,, sudoers.ldap.pod:
	Reorganize the first section a bit. Substitute the proper path for

	*,, sudoers.ldap.pod:
	Substitute values for ldap.conf, ldap.secret and nsswitch.conf Move
	schema into EXAMPLES

	* configure,
	Substitute values for ldap.conf, ldap.secret and nsswitch.conf into

	* configure,
	substitute for

	Fix cut & pasto introduced when adding sudoers.ldap man page.

	*,, sudoers.ldap.pod:
	Fill in some of the missing pieces. Still needs some reorganization
	and editing.

2008-01-19  Todd C. Miller  <>

	Beginnings of a sudoers.ldap man page. Currently, much of the
	information is adapted from README.LDAP.

2008-01-18  Todd C. Miller  <>

	* pwutil.c:
	When copying gr_mem we must guarantee that the storage space for
	gr_mem is properly aligned. The simplest way to do this is to
	simply store gr_mem directly after struct group. This is not a
	problem for gr_passwd or gr_name as they are simple strings.

	* ldap.c:
	Fix a typo/thinko in one of the calls to
	sudo_ldap_check_user_netgroup(). From Marco van Wieringen.

2008-01-17  Todd C. Miller  <>

	*, configure,, ldap.c:
	include <mps/ldap_ssl.h> in ldap.c if available

2008-01-16  Todd C. Miller  <>

	* gram.c, gram.y:
	Make sure we define SIZE_MAX for yacc's skeleton.c

	* tgetpass.c:
	Use TCSAFLUSH when restoring terminal settings (and echo) to
	guarantee that any pending output is discarded

2008-01-15  Todd C. Miller  <>

	* sudoers:
	no longer need to specify SETENV when user has sudo ALL

	* testsudoers.c:
	sync user_args size calculation with sudo.c Add -g group option,
	renaming old -g to -G Add set_runasgr() and set_runaspw() and use

	* sudo.c, sudo.h:
	Make set_runaspw static void

	* testsudoers.c, visudo.c:
	g/c set_runaspw stub

	* configure,
	Don't add -llber twice.

2008-01-14  Todd C. Miller  <>

	* ldap.c:
	fix typo

2008-01-13  Todd C. Miller  <>

	* gram.c:

	* configure,
	Fix check that determines whether -llber is required.

	* README.LDAP,, configure,, ldap.c:
	For netscape-based LDAP, use ldapssl_set_strength() to implement the
	checkpeer ldap.conf option.

	* auth/kerb5.c:
	Delay krb5_cc_initialize() until we actually need to use the cred
	cache, which is what krb5_verify_user() does. Better cleanup on

2008-01-12  Todd C. Miller  <>

	* auth/kerb5.c:
	Rewrite verify_krb_v5_tgt() based on what heimdal's
	krb5_verify_user() does.

2008-01-09  Todd C. Miller  <>

	* gram.c:
	The U suffix on constants is an ANSI feature

	* configure,
	Add check for ber_set_option() in -llber

2008-01-07  Todd C. Miller  <>

	default if no nsswitch.conf is files only

2008-01-06  Todd C. Miller  <>

	don't tell people to mail aaron about LDAP stuff

	timelimit and bind_timelimit

	* ChangeLog:

	* ldap.c:
	Move ldap.secret reading into a separate function.

	* check.c:
	user_runas -> runas_pw

2008-01-05  Todd C. Miller  <>

	* TODO:

	* check.c, sudo.pod, sudoers.pod:
	Add and document the %p escape in the password prompt. Based on a
	patch from Patrick Schoenfeld.

	* ldap.c:
	Check strlcpy() return values.

	* ldap.c:
	refactor ldap binding code into sudo_ldap_bind_s()

	Make it clear that host and uri can take multiple parameters. URI is
	now supported for more than just openldap nsswitch.conf does't
	accept "compat"

	* sudo.c:
	comment cleanup and update (c) year

	* parse.c, sudo_nss.c:
	Move display_privs() and display_cmnd() from parse.c to sudo_nss.c.
	This should make it possible to build an LDAP-only sudo binary.

	* ldap.c, parse.c, sudo.c, sudo.h, sudo_nss.h:
	Improve chaining of multiple sudoers sources by passing in the
	previous return value to the next in the chain

	* gram.y:
	Free up parser data structures in sudo_file_close().

	* gram.c, parse.c:
	Free up parser data structures in sudo_file_close().

	* ldap.c:
	Parse uri ourself if no ldap_initialize() is present Use
	ldap_create() instead of deprecated ldap_init() Use
	ldap_sasl_bind_s() instead of deprecated ldap_simple_bind_s()

	*, configure,
	Add check for ldap_sasl_bind_s() Remove -DLDAP_DEPRECATED from

2008-01-04  Todd C. Miller  <>

	*, configure,
	add check for ldap_create

2008-01-03  Todd C. Miller  <>

	*, configure,, ldap.c:
	Add sudo_ldap_get_first_rdn() to return the first rdn of an entry's
	dn using the mechanism appropriate for the LDAP SDK in use. Use
	ldap_unbind_ext_s() instead of deprecated ldap_unbind_s(). Emulate
	ldap_unbind_ext_s() and ldap_search_ext_s() for SDK's without them.

	* lbuf.c:
	include unistd.h

	fix typo in mtim_getnsec

2008-01-02  Todd C. Miller  <>

	*, configure,
	add check for st__tim in struct stat as used by SCO

	* ldap.c:
	use ldap_search_ext_s instead of deprecated ldap_search_s

	*, TODO,,
	add sudo_nss.h to HDRS

	* ldap.c:
	Replace deprecated ldap_explode_dn() with calls to ldap_str2dn() and

2008-01-01  Todd C. Miller  <>

	* ldap.c:
	Use ldap_get_values_len()/ldap_value_free_len() instead of the
	deprecated ldap_get_values()/ldap_value_free().

	* ChangeLog:

	* TODO:

	* gettime.c, sudo.c:
	Remove some already fixed XXXs

	* ldap.c:
	Same return value as non-existent sudoers if LDAP was unable to

	* sudo.pod:
	mention /etc/environment

	Update to reflect recent developments.

	* sudo.c:
	Print nsswitch.conf, ldap.conf and ldap.secret paths in -V output.

	* ldap.c:
	When building up a query don't list groups in the aux group vector
	that are the same as the passwd file group. On most systems the
	first gid in the group vector is the same as the passwd entry gid.

	* env.c, ldap.c:
	Define LDAPNOINIT before calling ldap_init(), etc. to disable user
	ldaprc and system defaults that could affect how LDAP works.

	* INSTALL, configure,,, sudo.c,
	sudo_nss.c, sudo_nss.h:
	Rename read_nss -> sudo_read_nss Add --with-nsswitch to allow users
	to specify nsswitch.conf path or disable it. If --with-nsswitch=no
	but --with-ldap, order is LDAP, then sudoers. Fix --with-ldap-conf-
	file and --with-ldap-secret-file

	* parse.c:
	Honor def_ignore_local_sudoers

2007-12-31  Todd C. Miller  <>

	* ldap.c:
	no longer need to check def_ignore_local_sudoers here

	* parse.c:
	Refactor group vector resetting into a function and also call it
	from display_cmnd. Stop after the first sucessful match in
	display_cmnd. Print a newline between each display_privs method.

	* parse.c:
	fix double free introduced in rev 1.218

	* ldap.c:
	belt and suspenders; zero out result after freeing it

	* env.c, fileops.c, ldap.c, sudo.h, sudo_nss.c:
	Refactor line reading into a separate function, sudo_parseln(),
	which removes comments, leading/trailing whitespace and newlines.
	May want to rethink the use of sudo_parseln() for /etc/ldap.secret

	* parse.c, sudo.c:
	Make the inability to read the sudoers file a non-fatal error if
	there are other sudoers sources available. sudoers_file_lookup now
	returns "not OK" if sudoers was not present

	* ldap.c:
	make it clear that the global options are from LDAP

	* logging.c:
	allocate proper amount of space for error string

	* sudo_nss.c, sudo_nss.h:
	actual sudo nss code

	* ldap.c, parse.c, sudo.c, sudo.h:
	nss-ify display_privs and display_cmnd.

	* defaults.c, parse.c, testsudoers.c, visudo.c:
	move update_defaults() to parse.c

	*, ldap.c, list.c, parse.c, parse.h, sudo.c, sudo.h:
	Use nsswitch to hide some sudoers vs. ldap implementation details
	and reduce the number of #ifdef LDAP TODO: fix display routines and
	error handling

2007-12-28  Todd C. Miller  <>

	*, README.LDAP, ldap.c,, sudo.c, sudo.h:
	First cut at nsswitch.conf support. Further reorganizaton and
	related changes are forthcoming.

2007-12-21  Todd C. Miller  <>

	* env.c,, sudo.c, sudo.h:
	Add support for reading and /etc/environment file. Still needs to
	be documented and should probably only applies to OSes that have it
	(AIX and Linux, maybe others).

	* ldap.c:
	include limits.h

2007-12-20  Todd C. Miller  <>

	reword LDAP SASL

2007-12-19  Todd C. Miller  <>

	* TODO:

	Add an example sudoRole, clarify netscape vs. openldap a bit more

	Be clear on what is OpenLDAP vs. Netscape-derived

	*, configure,, ldap.c:
	Use ldapssl_init() for ldaps support instead of trying to do it
	manually with ldap_init() + ldapssl_install_routines(). Use tls_cert
	and tls_key for cert7.db and key3.db respectively. Don't print
	debugging info for options that are not set. Add warning if
	start_tls specified when not supported.

	* ldap.c:
	fix compilation on solaris

	add missing .h and .c files for missing lib objs

2007-12-18  Todd C. Miller  <>

	* ldap.c:

	* ldap.c:
	fix compilation on Solaris

2007-12-17  Todd C. Miller  <>

	* configure,
	fix typo

	try to clear up which variables are for OpenLDAP and which are for
	netscape-derived SDKs

	*, configure,, ldap.c:
	Add support for "ssl on" in both netscape and openldap flavors. Only
	the OpenLDAP flavor has been tested.

	* logging.c, sudo.c, sudo.h:
	Call cleanup() before exit in log_error() instead of calling
	sudo_ldap_close() directly. ldap_conn can now be static to sudo.c

	* sudo.c:
	ld -> ldap_conn

2007-12-16  Todd C. Miller  <>

	* logging.c, sudo.c, sudo.h:
	Better ldap cleanup.

	* ldap.c:
	Distinguish between LDAP conf settings that are connection-specific
	(which take an ld pointer) and those that are default settings
	(which do not).

2007-12-14  Todd C. Miller  <>

	* ldap.c:
	Improved warnings on error.

	* ldap.c:
	Make ldap config table driven and set the config *after* we open the

2007-12-13  Todd C. Miller  <>

	* ldap.c:
	fix LDAP_OPT_X_CONNECT_TIMEOUT compat define

	* configure,
	some operating systems need to link with -lkrb5support when using

2007-12-10  Todd C. Miller  <>

	minor update


2007-12-08  Todd C. Miller  <>

	* ChangeLog, TODO:

	* ldap.c, schema.OpenLDAP, schema.iPlanet, sudoers2ldif:
	add -g support for LDAP

2007-12-03  Todd C. Miller  <>

	* WHATSNEW, sudo.c, sudo.pod,
	The -i and -s flags can now take an optional command.

2007-12-02  Todd C. Miller  <>

	* auth/pam.c, def_data.c, def_data.h,, sudo.c, sudo.pod,
	Add passprompt_override flag to sudoers that will cause the prompt
	to be overridden in all cases. This flag is also set when the user
	specifies the -p flag.

	* sudo.c:
	Move setting of login class until after sudoers has been parsed. Set
	NewArgv[0] for -i after runas_pw has been set.

	* configure,
	Move the dgettext check.

2007-12-01  Todd C. Miller  <>

	* auth/pam.c,, configure,
	Add basic support for looking up the string "Password: " in the PAM
	localized text db. This allows us to determine whether the PAM
	prompt is the default "Password: " one even if it has been

	TODO: concatenate non-std PAM prompts and user-specified sudo

2007-11-27  Todd C. Miller  <>

	*,, configure,, parse.c,
	set_perms.c, sudo.c, sudo.h:
	Use AC_FUNC_GETGROUPS instead of a home-grown attempt that was

	* acsite.m4, configure, interfaces.c, memrchr.c:
	Fix typos; Martynas Venckus

2007-11-26  Todd C. Miller  <>

	* set_perms.c:
	Don't assume runas_pw is set; it may not be in the -g case.

2007-11-25  Todd C. Miller  <>

	* logging.c, set_perms.c:
	Set aux group vector for PERM_RUNAS and restore group vector for
	PERM_ROOT if we previously changed it. Stash the runas group vector
	so we don't have to call initgroups more than once. Also add no-op
	check to check_perms.

2007-11-21  Todd C. Miller  <>

	* WHATSNEW, check.c,, defaults.c, gram.c, gram.h, gram.y,
	ldap.c, logging.c, match.c, mon_systrace.c, parse.c, parse.h,
	pwutil.c, set_perms.c, sudo.c,, sudo.h,,
	sudo.pod,,,, sudoers.pod,
	testsudoers.c, visudo.c,,
	Add support for runas groups. This allows the user to run a command
	with a different effective group. If the -g option is specified
	without -u the command will be run as the current user (only the
	group will change). the -g and -u options may be used together.
	TODO: implement runas group for ldap improve runas group
	documentation add testsudoers support

	* configure,
	fix setting of mandir

	* sudo.pod, sudoers.pod:
	document that ALL implies SETENV

	* ldap.c:

	* ldap.c:
	hostname_matches() returns TRUE on match in sudo 1.7.

	* ldap.c:
	use strcmp, not strcasecmp when comparing ALL

	* ldap.c:
	Make sudo ALL imply setenv. Note that unlike with file-based
	sudoers this does affect all the commands in the sudoRole.

	* gram.c, gram.y, parse.c, parse.h:
	sudo "ALL" now implies the SETENV tag but, unlike an explicit tag,
	it is not passed on to other commands in the list.

	* visudo.c:
	Add missing sudo_setpwent() and sudo_setgrent() calls. Also use
	sudo_getpwuid() instead of getpwuid().

2007-11-15  Todd C. Miller  <>

	* sudoers:
	Expand on the dangers of not using visudo to edit sudoers.

2007-11-08  Todd C. Miller  <>

	* parse.c:
	Don't quote *?[]! on output since the lexer does not strip off the
	backslash when reading those in.

2007-11-07  Todd C. Miller  <>

	* glob.c:
	expand "u_foo" types to "unsigned foo" to avoid compatibility

2007-11-04  Todd C. Miller  <>

	* logging.c:
	Refactor log line generation in to new_logline().

2007-10-25  Todd C. Miller  <>

	fix typo

2007-10-24  Todd C. Miller  <>

	*, configure,, interfaces.c, interfaces.h,
	Add configure check for struct in6_addr instead of relying on
	AF_INET6 since some systems define AF_INET6 but do not include IPv6

2007-10-21  Todd C. Miller  <>

	* configure,
	Fix block to add -lutil for FreeBSD and NetBSD when logincap is in

2007-10-20  Todd C. Miller  <>

	* configure,
	POSIX states that struct timespec be declared in time.h so check
	there regardless of the value of TIME_WITH_SYS_TIME.

2007-10-17  Todd C. Miller  <>

	* tgetpass.c:
	Instead of defining a macro to call the appropriate method for
	turning on/off echo, just define tc[gs]etattr() and the related
	defines that use the correct terminal ioctls if needed. Also go back
	to using TCSAFLUSH instead of TCSADRAIN on all but QNX.

2007-10-09  Todd C. Miller  <>

	g/c @ALLOCA@

	* configure:

	* INSTALL, auth/pam.c,,
	Add --disable-pam-session configure option to disable calling
	pam_{open,close}_session. May work around bugs in some PAM

2007-10-08  Todd C. Miller  <>

	* tgetpass.c:
	quiet gcc warnings

	* tgetpass.c:
	Avoid printing the prompt if we are already backgrounded. E.g. if
	the user runs "sudo foo &" from the shell. In this case, the call
	to tcsetattr() will cause SIGTTOU to be delivered.

2007-09-15  Todd C. Miller  <>

	* def_data.c, def_data.h,
	Reorder things such that the definition of env_reset come right
	before the env variable lists.

	* parse.h:
	Shrink type and seqno in struct alias from int to u_short

	* alias.c, match.c, parse.c, parse.h:
	Add a sequence number in the aliases for loop detection. If we find
	an alias with the seqno already set to the current (global) value we
	know we've visited it before so ignore it.

2007-09-13  Todd C. Miller  <>

	* TODO, auth/pam.c, sudo.c, sudo.h:
	PAM wants the full tty path so add user_ttypath which holds the full
	path to the tty or is NULL if no tty was present.

	* auth/pam.c:
	Set PAM_RHOST to work around a bug in Solaris 7 and lower that
	results in a segv.

2007-09-11  Todd C. Miller  <>

	* gram.c:

	* alias.c, defaults.c, gram.y, list.c, list.h, match.c, parse.c,
	parse.h, testsudoers.c, visudo.c:
	rename lh_ -> tq_

2007-09-10  Todd C. Miller  <>

	* alloc.c:
	remove some useless casts

	* alloc.c:
	pull in inttypes.h for SIZE_MAX; we avoid stdint.h since inttypes.h
	predates the final C99 spec and the standard specifies that it shall
	include stdint.h anyway

2007-09-06  Todd C. Miller  <>

	*, alloca.c,
	Since we ship with a pre-generated parser there is no need to ship a
	bogus alloca implementation.

	* configure:

	remove initial setting of CHECKSIA, we require that it be unset if
	not used

	add list.c to SRCS

	* configure:

	only do SIA checks on Digital Unix

2007-09-05  Todd C. Miller  <>


	* ChangeLog, TODO:

	* auth/kerb5.c:
	Remove call to krb5_cc_register() as it is not needed for modern

	* configure:

	* aclocal.m4,
	New method for setting the default authentication type and avoiding
	conflicts in auth types.

	* match.c, parse.c, testsudoers.c:
	Each entry in a cmndlist now has an associated runaslist so no need
	to keep track of the most recent non-NULL one.

2007-09-04  Todd C. Miller  <>

	* ldap.c:
	back out partial ldaps support mistakenly committed

	* ldap.c:
	Add support for unix groups and netgroups in sudoRunas

2007-09-03  Todd C. Miller  <>

	* sudo_edit.c:
	Fix sudoedit of a non-existent file. From Tilo Stritzky.

2007-09-02  Todd C. Miller  <>

	* configure:

	update --passprompt escape info

	remove now-bogus comment and update copyright date

	Fix up use of with_passwd

	* acsite.m4, config.guess, config.sub,,
	Update to autoconf-2.61 andf libtool-1.5.24

	"cmp -s" not just cmp Add @datarootdir@ to quiet autoconf-2.61

2007-09-01  Todd C. Miller  <>

	* gram.c:

	* gram.y:
	move tags and runaslist propagation to be earlier

	* visudo.c:
	If -f flag given use the permissions of the original file as a

	* gram.y:
	prevent a double free() when re-initing the parser

2007-08-31  Todd C. Miller  <>

	* configure:

	* aclocal.m4, alias.c, alloc.c, auth/API, auth/afs.c, auth/bsdauth.c,
	auth/kerb4.c, auth/kerb5.c, auth/pam.c, auth/securid.c,
	auth/securid5.c, auth/sia.c, auth/sudo_auth.h,,, env.c, ldap.c, list.c, list.h, memrchr.c, parse.c,
	parse.h, pwutil.c, redblack.c, redblack.h, snprintf.c, sudo.c,
	sudo.h, testsudoers.c, visudo.c, zero_bytes.c:
	Remove support for compilers that don't support void *

	* gram.c:

	*, alias.c, defaults.c, gram.y, list.c, list.h, match.c,
	parse.c, parse.h, testsudoers.c, visudo.c:
	Move list manipulation macros to list.h and create C versions of the
	more complex ones in list.c. The names have been down-cased so they
	appear more like normal functions.

	Fix cmp command when regenerating parser. Make gram.o the first
	dependency for all programs so gram.h will be generated before
	anything that needs it.

	* gram.y, parse.h:
	Convert NEW_DEFAULT anf NEW_MEMBER into static functions.

	* match.c, parse.c, testsudoers.c:
	Use LH_FOREACH_REV when checking permission and short-circuit on the
	first non-UNSPEC hit we get for the command. This means that
	instead of cycling through the all the parsed sudoers entries we
	start at the end and work backwards and quit after the first
	positive or negative match.

	* gram.c:

	* defaults.c, gram.y, parse.c, parse.h, testsudoers.c, visudo.c:
	Change list head macros to take a pointer, not a struct.

	* gram.c:

	* gram.y:
	Propagate the runasspec from one command to the next in a cmndspec.

2007-08-30  Todd C. Miller  <>

	* match.c:
	Replace has_meta() with a macro that calls strpbrk().

	* regen

	* alias.c, defaults.c, gram.y, match.c, parse.c, parse.h,
	testsudoers.c, visudo.c:
	Use a list head struct when storing the semi-circular lists and
	convert to tail queues in the process. This will allow us to
	reverse foreach loops more easily and it makes it clearer which
	functions expect a list as opposed to a single member.

	Add macros for manipulating lists. Some of these should become

	When freeing up a list, just pop off the last item in the queue
	instead of going from head to tail. This is simpler since we don't
	have to stash a pointer to the next member, we always just use the
	last one in the queue until the queue is empty.

	Rename match functions that take a list to have list in the name.
	Break cmnd_matches() into cmnd_matches() and cmndlist_matches.

	* parse.c:
	Fix pasto, append "!" not negated (which is an int) for sudo -l

	Remove the dependency of gram .h on gram.y, the .c dependency is
	enough. Only move to gram.h if it is different; avoids
	needless rebuilding.

2007-08-27  Todd C. Miller  <>

	* sudoers.pod:
	Defaults lines may be associated with lists of users, hosts,
	commands and runas users, not just single entries.

2007-08-26  Todd C. Miller  <>

	Revert the "cmp" portion of the last diff, it doesn't make sense.

	Remove *.lo for clean: When generating the parser, only move the
	generated files into place if they differ from the existing ones.

2007-08-25  Todd C. Miller  <>

	* toke.c, toke.l:
	Replace IPV6 regexp with a much simpler (readable) one and add an
	extra check when it matches to make sure we have a valid address.

	* match.c:
	Fix thinko introduced when merging IPV6 support.

2007-08-24  Todd C. Miller  <>


	* license.pod:
	add 2007

	mention #uid vs. comment pitfall

	* acsite.m4:
	Merge in a patch from the libtool cvs that fixes a problem with the
	latest autoconf. From Stepan Kasal.

	* parse.h:
	Back out he XOR swap trick, it is slower than a temp variable on
	modern CPUs.

	* gram.c:

	* gram.y, parse.h:
	Convert the tail queue to a semi-circle queue and use the XOR swap
	trick to swap the prev pointers during append.

2007-08-23  Todd C. Miller  <>

	* parse.h:
	remove useless statement

	* toke.c, toke.l:
	Refactor #include parsing into a separate function and return
	unparsed chars (such as newline or comment) back to the lexer.

2007-08-22  Todd C. Miller  <>

	mention better uid support

	* sudoers.pod:
	Users may now consist of a uid.

	* gram.c, gram.h, toke.c:

	* parse.c:
	Use lbuf_append_quoted() for sudo -l output to quote characters that
	would require quoting in sudoers.

	* lbuf.c, lbuf.h:
	Add lbuf_append_quoted() which takes a set of characters which
	should be quoted with a backslash when displayed.

	* toke.l:
	Require that the first character after a comment not be a digit or a
	dash. This allows us to remove the GOTRUNAS state and treat
	uid/gids similar to other words. It also means that we can now
	specify uids in User_Lists and a User_Spec may now contain a uid.

	* gram.y, toke.l:
	Replace RUNAS token with '(' and ')' tokens to make the runas
	portion of the grammar more natural.

	* BUGS:
	The BUGS file is history

	The BUGS file is history

2007-08-21  Todd C. Miller  <>

	* toke.c, toke.l:
	Allow comments after a RunasAlias as long as the character after the
	pound sign isn't a digit or a dash.

	Glob support was back-ported to 1.6.9

2007-08-20  Todd C. Miller  <>

	remove sudo_usage.h in distclean

	* parse.c:
	If a Defaults value contains a blank, double-quote the string.

	* toke.c, toke.l:
	Properly deal with Defaults double-quoted strings that span multiple
	lines using the line continuation char. Previously, the entire
	thing, including the continuation char, newline, and spaces was
	stored as-is.

	* sudo.c:
	Be consistent when using single quotes and backticks.

2007-08-19  Todd C. Miller  <>

	*, configure,, lbuf.c, lbuf.h, parse.c,
	Add new linebuf code to do appends of dynamically allocated strings
	and word-wrapped output. Currently used for sudo's usage() and sudo
	-l output. Sudo usage strings are now in sudo_usage.h which is
	generated at configure time.

2007-08-18  Todd C. Miller  <>

	* parse.c, sudo.c, sudo.h:
	Fix line wrapping in usage() and use the actual tty width instead of
	assuming 80.

2007-08-17  Todd C. Miller  <>

	* history.pod:
	some more info

	* history.pod:
	Mentioned Chris Jepeway's parser and also the new one that is in
	sudo 1.7.

2007-08-16  Todd C. Miller  <>

	* sudo.pod, visudo.pod:
	For the options list, add flag args where appropriate and increase
	the indent level so there is room for them.

2007-08-15  Todd C. Miller  <>

	* parse.c:
	Fix some spacing in "sudo -l" and add a comment about some bogosity
	in the line wrapping.


	def_data.c, def_data.h,, gram.c, gram.h, gram.y,
	parse.c, parse.h,, sudo.c, sudo.h, sudoers.pod,
	testsudoers.c, toke.c, toke.l:
	Remove monitor support until there is a versino of systrace that
	uses a lookaside buffer (or we have a better mechanism to use).

	*, configure,, sudo.c:
	use getaddrinfo() instead of gethostbyname() if it is available

2007-08-14  Todd C. Miller  <>

	* parse.c, sudo.c:
	Deal with OSes where sizeof(gid_t) < sizeof(int).

	* interfaces.c:
	repair non-getifaddrs() code after ipv6 integration

	* sudo.c:
	If we can open sudoers but fail to read the first byte, close the
	file stream before trying again.

2007-08-13  Todd C. Miller  <>

	* toke.c:

	* gram.y, interfaces.c, interfaces.h, match.c, sudoers.pod, toke.l:
	Add IPv6 support; adapted from patches by YOSHIFUJI Hideaki

	* sudo.pod, sudoers.pod, visudo.pod:
	Add some missing markup Update copyright

2007-08-12  Todd C. Miller  <>

	* configure,
	fix sudo_noexec extension which got broken in the libtool update

2007-08-10  Todd C. Miller  <>

	explicitly specify -Tascii to nroff

2007-08-08  Todd C. Miller  <>

	* logging.c:
	remove an ANSI-ism that crept in

2007-08-07  Todd C. Miller  <>

	* sudo.pod:
	Adjust list indents Prevent -- from being turned into an em dash Use
	a list for the environment instead of a literal paragraph

	* visudo.pod:
	Use a list for the environment instead of an indented literal

	* sudoers.pod:
	Adjust list indentation

	* license.pod:
	add =head3

2007-08-06  Todd C. Miller  <>

	* sudo.pod:
	mention that when specifying a uid for the -u option the shell may
	require that the # be escaped

2007-08-02  Todd C. Miller  <>

	* match.c:
	Fix off by one in group matching.

2007-07-31  Todd C. Miller  <>

	* env.c:
	Fix typo: PYTHONINSPEC should be PYTHONINSPECT. From David Krause.

2007-07-30  Todd C. Miller  <>

	* configure,
	Add missing define of HAVE_GSS_KRB5_CCACHE_NAME for the
	-lgssapi_krb5 case.

	* aclocal.m4, configure,
	Fix link tests such that new gcc doesn't optimize away the test.

2007-07-29  Todd C. Miller  <>

	* sudo.pod, sudoers.pod, visudo.pod:
	add missing over/back

	* sudo.pod, sudoers.pod, visudo.pod:
	Change FILES section to use =item

	* env.c:
	Add back allocation of the env struct in rebuild_env but save a copy
	of the old pointer and free it before returning.

	* env.c:
	Don't init the private environment in rebuild_env() since it may
	have already been done implicitly sudo_setenv/sudo_unsetenv.

	Multiply length by sizeof(char *) in memcpy/memmove when copying the
	environment so we copy the full thing.

	Add missing set of parens so we deref the right pointer in
	sudo_unsetenv when searching for a matching variable.

2007-07-26  Todd C. Miller  <>

	* sudo.pod, sudoers.pod, visudo.pod:
	Use file markup for paths in the FILES section

	* sudo.pod, sudoers.pod, visudo.pod:
	Don't capitalize sudo/visudo

	* sudoers.pod:
	Sort sudoers options; based on a diff from Igor Sobrado.

2007-07-25  Todd C. Miller  <>

	* sudo.pod, sudoers.pod, visudo.pod:
	Use 8 and 5 instead of @mansectsu@ and @mansectform@ since the
	latter confuses pod2man. The Makefile rules for the file
	will add @mansectsu@ and @mansectform@ back in after pod2man is done

2007-07-22  Todd C. Miller  <>

	* LICENSE,, license.pod:
	Move license info to pod format

	* configure,, sudoers.pod:
	Substitute value of path_info into sudoers man page.

	remove features that were back-ported to 1.6.9

	* sudo.c, sudo.pod, visudo.c, visudo.pod:
	Sort SYNOPSIS and sync usage. From Igor Sobrado.

	* env.c:
	Only need sudo_setenv/sudo_unsetenv if we are going to use
	ldap_sasl_interactive_bind_s() but don't have

	* ChangeLog:
	rebuild without branch info

	Add ChangeLog target

	* auth/pam.c:
	Run cleanup code if the user hits ^C at the password prompt.

	* auth/pam.c:
	Some versions of pam_lastlog have a bug that will cause a crash if
	PAM_TTY is not set so if there is no tty, set PAM_TTY to the empty

2007-07-20  Todd C. Miller  <>

	ChageLog not Changelog

	* ChangeLog:

	CHANGE -> Changelog

	* TODO:

2007-07-19  Todd C. Miller  <>

	*, configure,, ldap.c:
	Add configure hooks for gss_krb5_ccache_name() and the gssapi

2007-07-18  Todd C. Miller  <>

	* env.c, sudo.c:
	rebuild_env() and insert_env_vars() no longer return environment
	pointer, they set environ directly.

	No longer need to pass around an envp pointer since we just operate
	on environ now.

	Add dosync argument to insert_env() that indicates whether it should
	reset environ when realloc()ing env.envp.

	Use an initial size of 128 for the environment.

	* env.c:
	Split sudo_setenv() into an external version and a version only for
	use by rebuild_env().

2007-07-16  Todd C. Miller  <>

	* ldap.c:
	Add support for using gss_krb5_ccache_name() instead of setting
	KRB5CCNAME. Also use sudo_unsetenv() in the non-
	gss_krb5_ccache_name() case if there was no KRB5CCNAME in the
	original environment. TODO: configure setup for

	add krb5_ccname

	* README.LDAP, ldap.c:
	Add support for sasl_secprops in ldap.conf

	* env.c, sudo.h:
	Add sudo_unsetenv() and refactor private env syncing code into

	* README.LDAP, ldap.c:
	The ldap.conf variable is sasl_auth_id not sasl_authid.

2007-07-15  Todd C. Miller  <>

	* ldap.c, sudo.c, sudo.h:
	Add support for krb5_ccname in ldap.conf. If specified, it will
	override the default value of KRB5CCNAME in the environment for the
	duration of the call to ldap_sasl_interactive_bind_s().

	* env.c, sudo.h:
	Remove format_env() Add sudo_setenv() to replace most format_env() +
	insert_env() combinations. insert_env() no longer takes a struct
	environment *

	* ldap.c:
	Fix use_sasl vs. rootuse_sasl logic.

	* README.LDAP,, configure,, ldap.c:
	Add support for SASL auth when connecting to an LDAP server. Adapted
	from a diff by Tom McLaughlin.

2007-07-14  Todd C. Miller  <>

	* configure,
	Only enable AIX or BSD auth if no other exclusive auth method has
	been chosen. Allows people to e.g., use PAM on AIX without adding
	--without-aixauth. A better solution is needed to deal with default
	authentication since if a non-exclusive method is chosen we will
	still get an error.

2007-07-11  Todd C. Miller  <>

	* HISTORY,, history.pod:
	Generate HISTORY from history.pod (which is also used for web pages)

2007-07-09  Todd C. Miller  <>


	* sudo.pod:
	Better explanation of environment handling in the sudo man page.

	* env.c, sudo.c:
	Defer setting user-specified env vars until after authentication.

	* env.c:
	honor def_default_path for PATH set on the command line

	* env.c, sudo.c, sudo.pod, sudoers.pod:
	Allow user to set environment variables on the command line as long
	as they are allowed by env_keep and env_check. Ie: apply the same
	restrictions as normal environment variables. TODO: deal with

2007-07-08  Todd C. Miller  <>

	* sudo.c, sudo_edit.c:
	Call rebuild_env() in call cases. Pass original envp to sudo_edit().
	Don't allow -E or env var setting in sudoedit mode. More accurate
	usage() when called as sudoedit.

	* ldap.c:
	warn -> warning

	* sudo.pod:
	add -c option to sudoedit synopsis

	* TODO:
	udpate to reality

	* parse.c:
	Use ALLOW/DENY instead of TRUE/FALSE when dealing with the return
	value from {user,host,runas,cmnd}_matches(). Rename *matches
	variables -> *match. Purely cosmetic.

	* parse.c:
	Move setting of FLAG_NO_CHECK into the if(pwflag) block. No change
	in behavior.

	* sudoers:
	add SETENV tag

2007-07-06  Todd C. Miller  <>

	* parse.c:
	Make pwcheck local to the pwflag block. Use pwcheck even if user
	didn't match since Defaults options may still apply.

	* check.c, sudo.c:
	Do not update timestamp if user not validated by sudoers.

	* set_perms.c:
	for PERM_RUNAS, set the egid to the runas user's gid and restore to
	the user's original in PERM_ROOT

	* logging.c, mon_systrace.c, set_perms.c, sudo.h:
	PERM_FULL_ROOT is now no different than PERM_ROOT so remove

	* check.c:
	don't check timestamp mtime if we are just going to remove it

	* sudoers.pod:
	Move sudoers defaults parameters into their own section.

	* testsudoers.c:
	Reduce a level of indent by a few placed continue statements.

	* parse.c:
	Make matching but negated commands/hosts/runas entries override a
	previous match as expected. Also reduce some levels of indent by a
	few placed continue statements.

2007-07-05  Todd C. Miller  <>

	* parse.c:
	Print default runas in "sudo -l" if sudoers don't specify one.

	* match.c:
	Less hacky way of testing whether the domain was set.

2007-07-04  Todd C. Miller  <>

	Mention pam-devel and openldap-devel for Linux

2007-07-03  Todd C. Miller  <>

	or vs. are

2007-07-01  Todd C. Miller  <>

	* sudo.c:
	fix typo in Solaris project support


	* sudo.c:
	Make -- on the command line match the manual page. The implied shell
	case has been simplified as a result.

2007-06-28  Todd C. Miller  <>

	* sudoers2ldif:
	add simplistic support for sudoRunas; note that if a sudoers entry
	contains multiple Runas users, all will apply to the sudoRole

	* sudoers2ldif:
	honor SETENV and NOSETENV tags

2007-06-24  Todd C. Miller  <>

	* mon_systrace.c:
	Redo setting of user_args. We now build up a private copy of argv
	first and then replace the NULs?with spaces.

	* mon_systrace.c:
	getcwd() returns NULL on failure, not 0 on success

	* mon_systrace.c:
	allow chunksiz to reach 1 before erroring out


2007-06-23  Todd C. Miller  <>

	* def_data.c, def_data.h,, env.c, gram.c, gram.h, gram.y,
	logging.c, parse.c, parse.h, sudo.c, sudo.h, sudo.pod, sudoers.pod,
	toke.c, toke.l:
	Add support for setting environment variables on the command line.
	This is only allowed if the setenv sudoers options is enabled or if
	the command is prefixed with the SETENV tag.

	replace Aaron's email address with the sudo-workers list

	* configure:

2007-06-22  Todd C. Miller  <>

	* schema.OpenLDAP, schema.iPlanet:
	Break schema out into separate files.

	Break schema out into separate files.

2007-06-21  Todd C. Miller  <>

	* auth/aix_auth.c:
	free message if set by authenticate()

	* match.c:
	deal with NULL gr_mem

2007-06-20  Todd C. Miller  <>


	add template for HAVE_PROJECT_H

	* closefrom.c:
	include fcntl.h

2007-06-19  Todd C. Miller  <>

	mention --with-project

	*,, sudo.c:
	Add Solaris 10 "project" support. From Michael Brantley.

	* sudoers.pod:
	fix typo

	* configure:

	Fix preservation of LDFLAGS in the LDAP case.

	* memrchr.c:
	Remove dependecy on NULL

	* configure:

	* aclocal.m4,
	Can't use the regular autoconf fnmatch() check since we need
	FNM_CASEFOLD so go back to our custom one.

	* env.c:
	Fix preserving of variables in env_keep.

	* env.c:

	expand upon env resetting and mention that it began in 1.6.9 not

	* sudoers.pod:
	Update descriptions of env_keep and env_check to match current

2007-06-18  Todd C. Miller  <>

	* env.c:
	Add LINGUAS to initial_checkenv_table. Add COLORS, HOSTNAME,
	LS_COLORS, MAIL, PS1, PS2, XAUTHORITY to intial_keepenv_table.

	* env.c, logging.c:
	Treat USERNAME environemnt variable like LOGNAME/USER

	* env.c:
	Don't need to populate keepenv table with the contents of the
	checkenv table.

	* sudo.c:
	Don't force sudo into the C locale.

	* env.c:
	Make env_check apply when env_reset it true. Environment variables
	are passed through unless they contain '/' or '%'. There is no need
	to have a variable in both env_check and env_keep.

2007-06-16  Todd C. Miller  <>

	* visudo.c:
	Remove an duplicate lock_file() call and add a comment.

	Add sudo 1.6.9 upgrade note.

2007-06-14  Todd C. Miller  <>

	* interfaces.c:
	Solaris will return EINVAL if the buffer used in SIOCGIFCONF is too
	small. From Klaus Wagner.

	* logging.c, sudo.h:
	Redo the long syslog line splitting based on a patch from Eygene
	Ryabinkin. Include memrchr() for systems without it.

	* memrchr.c:
	Redo the long syslog line splitting based on a patch from Eygene
	Ryabinkin. Include memrchr() for systems without it.

	*,, configure,
	Redo the long syslog line splitting based on a patch from Eygene
	Ryabinkin. Include memrchr() for systems without it.

	Since we need to be able to convert timespec to timeval for utimes()
	the last 3 digits in the tv_nsec are not significant. This makes the
	sudoedit file date comparison work again.

2007-06-13  Todd C. Miller  <>

	* aclocal.m4, configure,
	Add SUDO_ADD_AUTH macro to deal with adding things to AUTH_OBJS.
	This deals with exclusive authentication methods in a simple way.

2007-06-12  Todd C. Miller  <>

	mkstemp.c is BSD code too.

	* sudo.pod, sudoers.pod, visudo.pod:
	No commercial support for now.

2007-06-11  Todd C. Miller  <>

	* sudo.c:
	cleanenv() is no more.

2007-06-10  Todd C. Miller  <>

	* ChangeLog:
	Display branch info in Changelog

	* utimes.c:
	Include config.h early so we have it for TIME_WITH_SYS_TIME

	* ChangeLog:
	Fix Changelog generation and update.

2007-06-09  Todd C. Miller  <>

	* closefrom.c:
	Use /proc/self/fd instead of /proc/$$/fd

	Move old-style fd closing into closefrom_fallback() and call that if
	/proc/self/fd doesn't exist or the F_CLOSEM fcntl() fails

	* auth/kerb5.c,,
	o use krb5_verify_user() if available instead of doing it by hand o
	use krb5_init_secure_context() if we have it o pass an encryption
	type of 0 to krb5_kt_read_service_key() instead of
	ENCTYPE_DES_CBC_MD5 to let kerberos choose.

	* env.c:
	Check TERM and COLORTERM for '%' and '/' characters. From Debian.

	Fix closefrom() substitution in the Makefile

	Mention alternate sudo pronunciation.

2007-06-07  Todd C. Miller  <>

	* env.c:
	Remove KRB5_KTNAME from environment. Allow COLORTERM.

	* auth/kerb5.c:
	If we cannot get a valid service key using the default keytab it is
	a fatal error. Fixes a bug where sudo could be tricked into
	allowing access when it should not by a fake KDC. From Thor Lancelot

2007-05-12  Todd C. Miller  <>

	* aclocal.m4, configure,
	Update long long checks to use AC_CHECK_TYPES and to cache values.

	* aclocal.m4,
	Use AC_FUNC_FNMATCH instead of a homebrew fnmatch checker. We can't
	use AC_REPLACE_FNMATCH since that assumes replacing with GNU

2007-05-11  Todd C. Miller  <>

	* configure,
	Add closefrom() to LIB_OBJS not SUDO_OBJS if it is missing since we
	need it for visudo now too.

2007-04-24  Todd C. Miller  <>

	* sudoers.pod:
	Attempt to clarify the bit talking about network numbers w/o

	* sudo.pod:
	Clarify timestamp dir ownership sentence.

2007-04-20  Todd C. Miller  <>

	* auth/pam.c:
	Linux PAM now defines __LINUX_PAM__, not __LIBPAM_VERSION. From
	Dmitry V. Levin.

2007-04-16  Todd C. Miller  <>

	* sudo.c:
	-i is also one of the mutually exclusive options to list it in the
	warning message. Noted by Chris Pepper.

2007-04-12  Todd C. Miller  <>

	* visudo.pod:
	The sudoers variable is env_editor, not enveditor. From Jean-
	Francois Saucier.

2007-03-29  Todd C. Miller  <>

	* redblack.c:
	I tracked down the original author so credit him and include his
	license info.

2007-02-06  Todd C. Miller  <>

	*,, sudo.pod,,,
	Fix typos; from Jason McIntyre.

	* logging.c:
	Restore signal mask before calling reapchild(). Fixes a possible
	race condition that could prevent sudo from properly waiting for the

2007-01-31  Todd C. Miller  <>

	* pwutil.c:
	Don't declare pw_free() if we are not going to use it.

	* env.c:
	Add NOEXEC support for AIX 5.3 which supports LDR_PRELOAD and
	LDR_PRELOAD64. The 64-bit version is not currently supported.
	Remove zero_env() prototype as it no longer exists.

2006-12-11  Todd C. Miller  <>

	* logging.c:
	Add "Auto-Submitted: auto-generated" line to sudo mail for rfc 3834.

2006-09-29  Todd C. Miller  <>

	* auth/pam.c:
	If the user enters ^C at the password prompt, abort instead of
	trying to authenticate with an empty password (which causes an
	annoying delay).

2006-08-17  Todd C. Miller  <>

	* closefrom.c,, configure,
	Add fcntl F_CLOSEM support to closefrom(); adapted from a diff by
	Darren Tucker.

	* pwutil.c:
	pw_free() is only used by sudo_freepwcache() so ifdef it out too.

2006-08-04  Todd C. Miller  <>

	* config.guess, config.sub:
	Update to latest versions from

2006-07-31  Todd C. Miller  <>

	* pwutil.c, sudo_edit.c:
	Move password/group cache cleaning out of sudo_end{pw,grp}ent() so
	we can close the passwd/group files early.

	*, configure,, set_perms.c:
	Add seteuid() flavor of set_perms() for systems without setreuid()
	or setresuid() that have a working seteuid(). Tested on Darwin.

2006-07-30  Todd C. Miller  <>

	* mon_systrace.c:
	systrace_read() returns ssize_t

	* configure,
	Fix typo, -lldap vs. -ldap; from Tim Knox.

2006-07-28  Todd C. Miller  <>

	Fix typo; Matt Ackeret

2006-07-17  Todd C. Miller  <>

	* sudo.c:
	Print sudoers path in -V mode for root.

2006-06-15  Todd C. Miller  <>

	* ldap.c:
	Do a sub tree search instead of a base search (one level in the tree
	only) for sudo right objects. This allows system administrators to
	categorize the rights in a tree to make them easier to manage.

2005-12-28  Todd C. Miller  <>

	* sudo.pod:
	fix typo

2005-12-04  Todd C. Miller  <>

	* ldap.c:
	Convert GET_OPT and GET_OPTI to use just 2 args. Add timelimit and
	bind_timelimit support; adapted from gentoo.

2005-11-23  Todd C. Miller  <>

	* ldap.c:
	Support comments that start in the middle of a line

	* configure,
	Define LDAP_DEPRECATED until we start using ldap_get_values_len()

2005-11-18  Todd C. Miller  <>

	* closefrom.c:
	Silence gcc -Wsign-compare;

	* error.c, sudo.c, sudo.h, testsudoers.c, visudo.c:
	cleanup() now takes an int as an arg so it can be used as a signal
	handler too.

	* sudo.c:
	Make a copy of the shell field in the passwd struct for NewArgv to
	avoid a use after free situation after sudo_endpwent() is called.

2005-11-17  Todd C. Miller  <>

	*, configure,
	Add mkstemp() for those poor souls without it.

	* mkstemp.c:
	Add mkstemp() for those poor souls without it.

	Add mkstemp() for those poor souls without it.

2005-11-15  Todd C. Miller  <>

	* env.c:
	Add PERL5DB to list of environment variables to remove.

2005-11-13  Todd C. Miller  <>

	* mon_systrace.c, mon_systrace.h:
	Instead of calling the check function twice with a state cookie use
	separate check/log functions.

	Check more ioctl() calls for failure.

	systrace_{read,write} now return the number of bytes read/written or
	-1 on error.

	* env.c:
	Add more environment variables to remove; from gentoo linux Add some
	comments about what bad env variables go to what (more to do)

2005-11-11  Todd C. Miller  <>

	* sudo.c, sudo_edit.c:
	Move sudo_end{gr,pw}ent() until just before the exec since they free
	up our cached copy of the passwd structs, including sudo_user and
	sudo_runas. Fixes a use-after-free bug.

	* visudo.c:
	Close all fd's before executing editor.

	* sudo.c:
	Enable malloc debugging on OpenBSD when SUDO_DEVEL is set.

	* check.c:
	Fix fd leak when lecture file option is enabled. From Jerry Brown

2005-11-07  Todd C. Miller  <>

	* env.c:
	Add PERLLIB, PERL5LIB and PERL5OPT to the default list of
	environment variables to remove. From Charles Morris

2005-11-01  Todd C. Miller  <>

	* env.c:
	add JAVA_TOOL_OPTIONS to initial_badenv_table for java 5

2005-10-28  Todd C. Miller  <>

	* env.c:
	add PS4 and SHELLOPTS to initial_badenv_table for bash

2005-08-15  Todd C. Miller  <>

	* sudoers.pod:
	Fix typo; Toby Peterson

2005-08-02  Todd C. Miller  <>

	* tsgetgrpw.c:
	Make return buffers static so they don't get clobbered

2005-07-28  Todd C. Miller  <>

	* auth/securid5.c:
	Fix securid5 authentication, was not checking for ACM_OK. Also add
	default cases for the two switch()es. Problem noted by ccon at

2005-06-27  Todd C. Miller  <>

	* ldap.c:
	Remove ncat() in favor of just counting bytes and pre-allocating
	what is needed.

2005-06-26  Todd C. Miller  <>

	* ldap.c:
	Fix up some comments Add missing fclose() for the rootbinddn case

	* ldap.c:
	align struct ldap_config

	* ldap.c:
	use LINE_MAX for max conf file line size


	Mention rootbinddn Give example ou=SUDOers container

2005-06-25  Todd C. Miller  <>

	* INSTALL, configure,, ldap.c:
	Support rootbinddn in ldap.conf

	* env.c, sudo.pod, sudoers.pod:
	Preserve DISPLAY environment variable by default.

	* acsite.m4, configure:
	set need_lib_prefix=no for all cases; this is safe for LD_PRELOAD

	* acsite.m4, configure:
	set need_version=no for all cases; this is safe for LD_PRELOAD

	* aclocal.m4:

	* configure,
	Add dragonfly

	* auth/pam.c:
	Fix call to pam_end() when pam_open_session() fails.

	* configure:

	* acsite.m4:
	rebuild acsite.m4 from libtool 1.9f libtool.m4 ltoptions.m4
	ltsugar.m4 ltversion.m4

	* config.guess, config.sub,
	merge in local changes: config.guess: o better openbsd support
	config.sub: o hiuxmpp support o remove requirement that
	libs must begin with "lib" o don't print a bunch of crap about
	library installs o don't run ldconfig

	* config.guess, config.sub,
	libtool 1.9f

	Update with autoupdate and make minor changes for libtool 1.9f

2005-06-23  Todd C. Miller  <>

	* parse.c:
	don't call sudo_ldap_display_cmnd if ldap not setup

	* sudo_edit.c, visudo.c:
	Move declatation of struct timespec to its own include files for
	systems without it since it needs time_t defined.

	* gettime.c:
	Move declatation of struct timespec to its own include files for
	systems without it since it needs time_t defined.

	* fileops.c:
	Move declatation of struct timespec to its own include files for
	systems without it since it needs time_t defined.

	* emul/timespec.h:
	Move declatation of struct timespec to its own include files for
	systems without it since it needs time_t defined.

	* check.c, compat.h:
	Move declatation of struct timespec to its own include files for
	systems without it since it needs time_t defined.

	* ldap.c:
	Don't set safe_cmnd for the "sudo ALL" case.

2005-05-27  Todd C. Miller  <>

	* auth/pam.c:
	Call pam_open_session() and pam_close_session() to give pam_limits a
	chance to run. Idea from Karel Zak.

2005-04-24  Todd C. Miller  <>

	* check.c, sudo.c:
	Add explicit cast from mode_t -> u_int in printf to silence warnings
	on Solaris

	* parse.c:
	include grp.h to silence a warning on Solaris

2005-04-23  Todd C. Miller  <>

	* parse.c:
	Fix printing of += and -= defaults.

2005-04-17  Todd C. Miller  <>

	* mon_systrace.c:
	Sanity check number of syscall args with argsize. Not really needed
	but a little paranoia never hurts.

	* mon_systrace.c, mon_systrace.h:
	Don't do pointer arithmetic on void * Use int, not size_t/ssize_t
	for systrace lengths (since it uses int)

2005-04-16  Todd C. Miller  <>

	* mon_systrace.c:
	Add some memsets for paranoia Fix namespace collsion w/ error Check
	rval of decode_args() and update_env() Remove improper setting of
	validated variable

2005-04-12  Todd C. Miller  <>

	* parse.c, sudo.c, sudo.h:
	In -l mode, only check local sudoers file if def_ignore_sudoers is
	not set and call LDAP versions from display_privs() and
	display_cmnd() instead of directly from main(). Because of this we
	need to defer closing the ldap connection until after -l processing
	has ocurred and we must pass in the ldap pointer to display_privs()
	and display_cmnd().

	* ldap.c:
	Reorganize LDAP code to better match normal sudoers parsing.
	Instead of storing strings for later printing in -l mode we do
	another query since the authenticating user and the user being
	listed may not be the same (the new -U flag). Also add support for
	"sudo -l command".

	There is still a fair bit if duplicated code that can probably be

2005-04-11  Todd C. Miller  <>

	* ldap.c:
	Replace pass variable with do_netgr for better readability.

	* ldap.c:
	use DPRINTF macro

	* ldap.c:
	estrdup, not strdup

2005-04-10  Todd C. Miller  <>

	* parse.c:
	Add macro to test if the tag changed to improve readability.

	* parse.c:
	Avoid printing defaults header if there are no defaults to print...

	* glob.c:
	Fix a warning on systems without strlcpy().

	* pwutil.c:
	Use macros where possible for sudo_grdup() like sudo_pwdup().

2005-04-08  Todd C. Miller  <>

	* utimes.c:
	It is possible for tv_usec to hold >= 1000000 usecs so add in
	tv_usec / 1000000.

2005-03-30  Todd C. Miller  <>

	* auth/kerb5.c:
	The component in krb5_principal_get_comp_string() should be 1, not 0
	for Heimdal. From Alex Plotnick.

2005-03-29  Todd C. Miller  <>

	* alias.c, alloc.c, check.c, defaults.c, find_path.c, gram.c, gram.y,
	interfaces.c, ldap.c, logging.c, match.c, mon_systrace.c, pwutil.c,
	redblack.c, sudo.c, sudo.h, toke.c, toke.l, visudo.c:
	Add efree() for consistency with emalloc() et al. Allows us to rely
	on C89 behavior (free(NULL) is valid) even on K&R.

	* parse.c, sudo.c:
	Move initgroups() for -U option into display_privs() so group
	matching in sudoers works correctly.

2005-03-27  Todd C. Miller  <>

	* ldap.c:
	Removed duplicate call to ldap_unbind_s introduced along with

	* parse.c:
	Add missing space in Defaults printing

2005-03-25  Todd C. Miller  <>

	* pwutil.c:
	Sync sudo_pwdup with OpenBSD changes: use macros for size computaton
	and string copies.

2005-03-19  Todd C. Miller  <>

	* pwutil.c:
	Zero old pw_passwd before replacing with version from shadow file.

	* configure,
	Only attempt shadow password detection if PAM is not being used Add
	shadow_* variables to make shadow password detection more generic.

	Use OSDEFS for os-specific -D_FOO_BAR stuff rather than CPPFLAGS

2005-03-13  Todd C. Miller  <>

	* sudoers.pod:
	use a non-breaking space to avoid a double space after e.g.

	* sudo.pod:
	commna, not colon after e.g.

2005-03-12  Todd C. Miller  <>

	* sudo_noexec.c:
	Add __ variants of the exec functions. GNU libc at least uses
	__execve() internally.

	Match reality a bit more.

	* pwutil.c:
	Missed piece from rev. 1.6, fix sudo_getpwnam() too.

	* pwutil.c:
	Store shadow password after making a local copy of struct passwd in
	case normal and shadow routines use the same internal buffer in

2005-03-11  Todd C. Miller  <>

	* alloc.c, logging.c:
	Make varargs usage consistent with the rest of the code.

2005-03-10  Todd C. Miller  <>

	* sudo_noexec.c:
	Wrap more of the exec family since on Linux the others do not appear
	to go through the normal execve() path.

	* visudo.c:
	make print_unused static like proto says

	* glob.c:
	silence a warning on K&R systems

	* alias.c, error.c:
	make this build in K&R land

	* parse.c:
	make this build in K&R land

2005-03-08  Todd C. Miller  <>

	* toke.c:

2005-03-06  Todd C. Miller  <>

	* ldap.c:
	return(foo) not return foo optimize _atobool() slightly

	* ldap.c:

	* ldap.c:
	Reformat to match the rest of sudo's code.

	* sudo.pod:
	I am the primary author

2005-02-23  Todd C. Miller  <>

	The RUNSON file is toast--it confused too many people and really
	isn't needed in a configure-oriented world.

	alternate -> alternative

	* tgetpass.c:
	Use TCSADRAIN instead of TCSAFLUSH since some OSes have issues with

	* toke.l:
	Allow leading blanks before Defaults and Foo_Alias definitions

	fix rules to build toke.o and gram.o in devel mode

2005-02-20  Todd C. Miller  <>

	* sudoers.pod:
	env_keep overrides set_logname

	* env.c:
	Fix disabling set_logname and make env_keep override set_logname.

	* compat.h,, configure,
	No longer need memmove()

	* env.c, sudo.c:
	Just clean the environment once. This assumes that any further
	setenv/putenv will be able to handle the fact that we replaced
	environ with our own malloc'd copy but all the implementations I've
	checked do.

2005-02-16  Todd C. Miller  <>

	* env.c, sudo.c:
	In -i mode, base the value of insert_env()'s dupcheck flag on
	DID_FOO flags. Move checks for $HOME resetting into rebuild_env()

2005-02-13  Todd C. Miller  <>

	* env.c, sudo.c:
	Move setting of user_path, user_shell, user_prompt and prev_user
	into init_vars() since user_shell at least is needed there.

2005-02-12  Todd C. Miller  <>

	fix devel builds

	* sudo.c:
	Fix some printf format mismatches on error.

	* check.c:
	Fix some printf format mismatches on error.

	* configure, gram.c, toke.c:

	*, aclocal.m4, alias.c, alloc.c, auth/afs.c,
	auth/aix_auth.c, auth/bsdauth.c, auth/dce.c, auth/fwtk.c,
	auth/kerb4.c, auth/kerb5.c, auth/pam.c, auth/passwd.c,
	auth/rfc1938.c, auth/secureware.c, auth/securid.c, auth/securid5.c,
	auth/sia.c, auth/sudo_auth.c, auth/sudo_auth.h, check.c,
	closefrom.c, compat.h,, defaults.c, defaults.h,
	emul/utime.h, env.c, error.c, fileops.c, find_path.c, getprogname.c,
	getspwuid.c, gettime.c, goodpath.c, gram.y, interfaces.c,
	interfaces.h, ldap.c, logging.c, logging.h, match.c, mon_systrace.c,
	parse.c, redblack.c, redblack.h, set_perms.c, sigaction.c,
	snprintf.c, strcasecmp.c, strerror.c, strlcat.c, strlcpy.c, sudo.c,
	sudo.h, sudo.pod, sudo_edit.c, sudo_noexec.c, sudoers.pod,
	testsudoers.c, tgetpass.c, toke.l, utimes.c, version.h, visudo.c,
	visudo.pod, zero_bytes.c:
	Update copyright years.

	Update copyright years.

	Update copyright years.

	version 1.7

	What's new in sudo 1.7, based on the 1.7 CHANGES entries.

2005-02-11  Todd C. Miller  <>

	* compat.h, logging.h, sudo.h:
	Add __printflike and use it with gcc to warn about printf-like
	format mismatches

2005-02-10  Todd C. Miller  <>

	* CHANGES, ChangeLog:
	Replaced CHANGES file with ChangeLog generated from cvs logs

	* set_perms.c:
	Use warning/error instead of perror/fatal.

	* config.guess:
	Update OpenBSD section

	Add upgrading noted for 1.7

	* env.c, sudo.c, sudoers.pod:
	Instead of zeroing out the environment, just prune out entries based
	on the env_delete and env_check lists. Base building up the new
	environment on the current environment and the variables we removed

	*, configure,, sudo.c:
	Set locale to "C" if locales are supported, just to be safe.

	* toke.c, toke.l:
	Cast?argument to ctype functions to unsigned char.

2005-02-08  Todd C. Miller  <>

	* env.c:
	correct value for DID_USER

	* error.c, fnmatch.c, getcwd.c, glob.c, snprintf.c:
	#include <compat.h> not "compat.h"

	* defaults.c:
	Reset the environment by default.

	* sudo.c:
	Alloc an extra slot in NewArgv. Removes the need to malloc an new
	vector if execve() fails.

2005-02-07  Todd C. Miller  <>

	* INSTALL,, configure,, sudo.c:
	Use execve(2) and wrap the command in sh if we get ENOEXEC.

2005-02-06  Todd C. Miller  <>

	* sudo_noexec.c:
	Only include time.h on systems that lack struct timespec which gets
	defind in compat.h (using time_t).

	* sudo_noexec.c:
	Include time.h for time_t in compat.h for systems w/o struct

	* compat.h,, configure,
	use bcopy on systems w/o memmove

	* compat.h:
	__attribute__((__unused__)) doesn't work in gcc so limit its
	use to gcc >= 2.8.

	Add explicit rule to build sudo_noexec.lo

2005-02-05  Todd C. Miller  <>

	* INSTALL.configure,
	No longer depend on VPATH; pointed out a bunch of missed

	Help for PAM when account section is missing

	* auth/pam.c:
	Give user a clue when there is a missing "account" section in the
	PAM config.

	* auth/pam.c:
	Better error handling.

	*, configure,
	Move _FOO_SOURCE to CPPFLAGS so it takes effect as early as
	possible. Silences a warning about isblank() on linux.

	* auth/pam.c:
	Fix typo (missing comma) that caused an incorrect number of args to
	be passed to log_error().

2005-02-01  Todd C. Miller  <>

	* pwutil.c:
	Don't try to destroy a tree we didn't create.

2005-01-27  Todd C. Miller  <>

	* alias.c, alloc.c, auth/afs.c, auth/aix_auth.c, auth/bsdauth.c,
	auth/dce.c, auth/fwtk.c, auth/kerb4.c, auth/kerb5.c, auth/pam.c,
	auth/passwd.c, auth/rfc1938.c, auth/secureware.c, auth/securid.c,
	auth/securid5.c, auth/sia.c, auth/sudo_auth.c, check.c, closefrom.c,
	compat.h, defaults.c, env.c, error.c, fileops.c, find_path.c,
	fnmatch.c, getcwd.c, getprogname.c, getspwuid.c, gettime.c,
	goodpath.c, gram.c, gram.y, interfaces.c, ldap.c, logging.c,
	match.c, mon_systrace.c, parse.c, pwutil.c, set_perms.c,
	sigaction.c, snprintf.c, strcasecmp.c, strerror.c, strlcat.c,
	strlcpy.c, sudo.c, sudo_edit.c, sudo_noexec.c, testsudoers.c,
	tgetpass.c, toke.c, toke.l, utimes.c, visudo.c, zero_bytes.c:
	Add __unused to rcsids

2005-01-21  Todd C. Miller  <>

	* configure,
	Fix error message when mixing invalid auth types

	PAM, AIX auth, BSD auth and login_cap are now on by default if the
	OS supports them.

	* auth/sudo_auth.h,

	Better checking for conflicting authentication methods Display the
	authentication methods used at the end of configure Rename --with-
	authenticate -> --with-aixauth Use --with-aixauth, --with-bsdauth,
	--with-pam, --with-logincap by default on systems that support them
	unless disabled. Add OSMAJOR variable that replaces old OSREV; now
	OSREV has full version number

2005-01-18  Todd C. Miller  <>

	* def_data.c,, sudo.c, sudoers.pod:

2005-01-14  Todd C. Miller  <>

	Replace: test -n "$FOO" || FOO="bar"

	With: : ${FOO='bar'}

2005-01-09  Todd C. Miller  <>

	* pwutil.c, testsudoers.c, tsgetgrpw.c:
	Use function pointers to only call private passwd/group routines
	when using a nonstandard passwd/group file.

2005-01-06  Todd C. Miller  <>


	* tsgetgrpw.c:
	Can't use strtok() since it doesn't handle empty fields so add
	getpwent()/getgrent() functions and call those.

2005-01-05  Todd C. Miller  <>

	Fix dummied out toke.c and gram.c dependencies.

	Rename PARSESRCS -> GENERATED since it is only used in the clean
	target Add devdir variable and use it to specify the path to parser

	* configure:

	Add a devdir variables that defaults to $(srcdir) and is set to . if
	--devel was specified. Allows for proper dependecies building the

	* testsudoers.c:
	Add support for custom passwd/group files.

	Build private copy of pwutil.o for testsudoers with MYPW defined so
	it uses our own passwd/group routines.

	* visudo.c:
	Remove sudo_*{pw,gr}* stubs and add sudo_setspent/sudo_endspent
	stubs instead. We can now just use the caching sudo_*{pw,gr}*
	functions in pwutil.c Add comment about wanting to call
	sudo_endpwent/sudo_endgrent in cleanup()

	* tsgetgrpw.c:
	Remove caching; we will just use what is in pwutil.c Use global
	buffers for passwd/group structs Rename functions from sudo_* to

	* logging.c, sudo.c:
	g/c pwcache_init/pwcache_destroy

	* sudo.h:
	Undo last commit and add sudo_setspent and sudo_endspent instead.

	* getspwuid.c, pwutil.c:
	Move all but the shadow stuff from getspwuid.c to pwutil.c and
	pwcache_get and pwcache_put as they are no longer needed. Also add
	preprocessor magic to use private versions of the passwd and group
	routines if MYPW is defined (for use by testsudoers).

	* tsgetgrpw.c:
	zero out struct passwd/group before filling it in so if there are
	fields we don't handle they end up as 0.

	* logging.c, sudo.c, sudo.h, testsudoers.c, visudo.c:
	Adapt to pwutil.c

	Add tsgetgrpw.c and pwutil.c Rename the *OBJ variables for better

	* tsgetgrpw.c:
	Passwd and group lookup routines for testsudoers that support
	alternate passwd and group files.

	* getspwuid.c, pwutil.c:
	Split off pw/gr cache and dup code into its own file. This allows
	visudo and testsudoers to use the pw/gr cache too.

2005-01-02  Todd C. Miller  <>

	* parse.c:
	Print Defaults info in "sudo -l" output and wrap lines based on the
	terminal width.

2005-01-01  Todd C. Miller  <>

	* match.c, testsudoers.c, visudo.c:
	Only check group vector in usergr_matches() if we are matching the
	invoking or list user. Always check the group members, even if
	there was a group vector.

2004-12-17  Todd C. Miller  <>

	* LICENSE,, fnmatch.3:
	No longer bundle fnmatch.3


2004-12-16  Todd C. Miller  <>

	* sudo.c:
	sort usage

	* sudo.pod:
	Sort command line options

	* def_data.c, def_data.h,, defaults.c, logging.c, sudo.c,
	sudo.pod, sudoers.pod:
	Add closefrom sudoers option to start closing at a point other than
	3. Add closefrom_override sudoers option and -C sudo flag to allow
	the user to specify a different closefrom starting point.

	Add _PATH_DEVNULL for those without it.

	no more UCB strcasecmp

	* strcasecmp.c:
	replace BSD licensed one with version derived from pdksh

2004-12-10  Todd C. Miller  <>

	* sudo.c:
	Fix last commit.

	* sudo.c:
	Make sure stdin, stdout and stderr are open and dup them to
	/dev/null if not.

2004-12-03  Todd C. Miller  <>

	* ldap.c, mon_systrace.c, sudo.c, sudo.h:
	add sudo_ldap_close

	* fileops.c, gettime.c, sudo.c, sudo_edit.c, utimes.c, visudo.c:

	*, configure,

2004-12-02  Todd C. Miller  <>

	* env.c:
	Add missing braces to avoid DYLD_FORCE_FLAT_NAMESPACE being set
	unconditionally on darwin. From Toby Peterson.

	* getspwuid.c:
	Check rbinsert() return value. In the case of faked up entries
	there is usually a negative response cached that we need to

	In pwfree() don't try to zero out a NULL pw_passwd pointer.

	* mon_systrace.c:
	Use the double fork trick to avoid the monitor process being waited
	for by the main program run through sudo.

2004-11-29  Todd C. Miller  <>

	* sudo.c:
	Call initgroups() in -U mode so group matches work normally.

	* def_data.h, mkdefaults:
	Don't print a trailing comma for the last entry in enum def_tupple

2004-11-28  Todd C. Miller  <>

	*,, sudoers.pod:
	Mention values when lecture, listpw and verifypw are used in boolean

	* def_data.c,
	verifypw when used in a boolean TRUE context should be "all", not

2004-11-26  Todd C. Miller  <>

	*, defaults.c:
	Allow tuples that can be used as booleans to be used as boolean
	TRUE. In this case the 2nd possible value of the tuple is used for

2004-11-25  Todd C. Miller  <>

	* configure,
	Correct the test for 2-parameter timespecsub

	* sudo.h:
	Add strub struct definitions for passwd, timeval and timespec

	*, configure,, sudo_edit.c, visudo.c:
	Add check for 2-argument form of timespecsub (FreeBSD and BSD/OS)
	and fix a typo in the gettimeofday check.

2004-11-24  Todd C. Miller  <>

	* match.c, testsudoers.c:
	Deal with user_stat being NULL as it is for visudo and testsudoers.

	* parse.c, sudo.c,, sudo.h,, sudo.pod:
	Add -U option to use in conjunction with -l instead of -u. Add
	support for "sudo -l command" to test a specific command.

	* gram.c, gram.y, sudo.c:
	Set safe_cmnd after sudoers_lookup() if it has not been set.
	Previously it was set by sudo "ALL" in the parser but at that point
	the fully-qualified pathname has not yet been found.

2004-11-23  Todd C. Miller  <>

	* parse.c, testsudoers.c:
	Correctly handle multiple privileges per userspec and runas

2004-11-21  Todd C. Miller  <>

	* defaults.c:
	Zero out sd_un for each entry in sudo_defs_table in init_defaults.

2004-11-19  Todd C. Miller  <>

	* toke.c, toke.l:
	make per-command defaults work with sudoedit

	* ldap.c, parse.c, sudo.c, sudo.h:
	Instead, we just set the approriate defaults variable.

	* sample.sudoers,,, sudoers.pod:
	Document per-command Defaults.

	* defaults.c, defaults.h, gram.c, gram.h, gram.y, mon_systrace.c,
	sudo.c, testsudoers.c, toke.c, toke.l, visudo.c:
	Add support for command-specific Defaults entries. E.g.
	Defaults!/usr/bin/vi noexec

	* defaults.c, match.c, parse.c, parse.h, testsudoers.c:
	Change an occurence of user_matches() -> runas_matches() missed
	previously runas_matches(), host_matches() and cmnd_matches() only
	really need to pass in a list of members. user_matches() still
	needs to pass in a passwd struct because of "sudo -l"

	* parse.c:
	Check def_authenticate, def_noexec and def_monitor when setting
	return flags. XXX May be better to just set the defaults directly
	and get rid of those flags.

	* alias.c, alloc.c, auth/afs.c, auth/aix_auth.c, auth/bsdauth.c,
	auth/dce.c, auth/fwtk.c, auth/kerb4.c, auth/kerb5.c, auth/pam.c,
	auth/passwd.c, auth/rfc1938.c, auth/secureware.c, auth/securid.c,
	auth/securid5.c, auth/sia.c, auth/sudo_auth.c, check.c, closefrom.c,
	defaults.c, env.c, error.c, fileops.c, find_path.c, fnmatch.c,
	getcwd.c, getprogname.c, getspwuid.c, gettime.c, glob.c, goodpath.c,
	gram.c, gram.y, interfaces.c, ldap.c, logging.c, match.c,
	mon_systrace.c, parse.c, redblack.c, set_perms.c, snprintf.c,
	strcasecmp.c, strerror.c, strlcat.c, strlcpy.c, sudo.c, sudo_edit.c,
	sudo_noexec.c, testsudoers.c, tgetpass.c, toke.c, toke.l, utimes.c,
	visudo.c, zero_bytes.c:
	Use: #include <config.h> Not: #include "config.h" That way we get
	the correct config.h when build dir != src dir

	Back out part of rev 1.263; fix -I order

	* toke.c, toke.l:
	More robust parsing if #include; could be much better still.

	* sudo_edit.c, visudo.c:
	Make arg splitting in visudo and sudoedit consistent.

	*, alias.c, gram.c, gram.y, parse.h:
	Split alias routines out into their own file.

	* error.h:
	__attribute__ is already defined in compat.h

	* visudo.c:
	quit() should not be __noreturn__ as it is non-void on some

	* auth/fwtk.c, auth/rfc1938.c, auth/securid.c, auth/securid5.c:
	Add local error/warning functions like err/warn but that call an
	additional cleanup routine in the error case. This means we no
	longer need to compile a special version of alloc.o for visudo.

	* parse.h:
	Clarify comments about the data structures

2004-11-18  Todd C. Miller  <>

	* visudo.c:
	Add support for VISUAL and EDITOR containing command line args. If
	env_editor is not set any args in VISUAL and EDITOR are ignored.
	Arguments are also now supported in def_editor.

2004-11-17  Todd C. Miller  <>

	* parse.h:
	alias_matches() is no more


	When regenerating the parser, don't replace gram.h unless it has

	remove Makefile.binary for distclean

	* env.c:
	Preserve KRB5CCNAME in zero_env() and add a paranoia check to make
	sure we can't overflow new_env.

	* sudo_edit.c:
	paranoia when stripping trailing slashes from tempdir.

	* sudo.c:
	Set user_ngroups to 0 if getgroups() returns an error.

2004-11-16  Todd C. Miller  <>

	*, configure,, sudo.c:
	Add configure check for getgroups()

	* ldap.c:
	Use supplementary group vector in struct sudo_user.

	* match.c:
	Only do string comparisons on the group members if there is no
	supplemental group list.


	* sudo_edit.c:
	On Digital UNIX _PATH_VAR_TMP doesn't end with a trailing slash so
	chop off any trailing slashes we see and add an explicit one.

	* match.c:
	remove bogus XXX comment

	* match.c:
	Get rid of alias_matches and correctly fall through to the non-alias
	cases when there is no alias with the specified name.

	* getspwuid.c:
	Cache non-existent passwd/group entries too.

	* gram.c:

	* getspwuid.c:
	fix typo

	* check.c, getspwuid.c, glob.c, ldap.c, logging.c, match.c,
	mon_systrace.h, sudo.c, sudo.h, testsudoers.c, visudo.c:
	Implement group caching and use the passwd and group caches

2004-11-15  Todd C. Miller  <>

	* match.c:
	Properly negate the return value of alias_matches() when

	* match.c:
	Make hostname_matches() return TRUE for a match, else FALSE like the
	caller expects.

	Add missing dependencies on gram.h

	* match.c:
	Use runas_matches in alias_matches() now that we have it.

	* parse.c, parse.h:
	Expand aliases in "sudo -l" mode

	* gram.y, match.c:
	Use ALIAS for the member type when storing an alias instead of
	more generic type. Expand runas_matches instead of calling
	user_matches() inside of it since user_matches() looks up

	* CHANGES, getspwuid.c:
	Paranoia; zero out pw_passwd before freeing passwd entry.

	* LICENSE,, alloc.c, check.c,, configure,, defaults.c, emul/err.h, env.c, err.c, error.c,
	error.h, find_path.c, interfaces.c, logging.c, mon_systrace.c,
	sudo.c, sudo.h, sudo_edit.c, testsudoers.c, visudo.c:
	Add local error/warning functions like err/warn but that call an
	additional cleanup routine in the error case. This means we no
	longer need to compile a special version of alloc.o for visudo.

	* match.c:
	Use userpw_matches() to compare usernames, not strcmp(), since the
	latter checks for "#uid".

	* getspwuid.c, mon_systrace.c, mon_systrace.h, sudo.c:
	Cache passwd db entries in 2 reb-black trees; one indexed by uid,
	the other by user name. The data returned from the cache should be
	considered read-only and is destroyed by sudo_endpwent().

	* match.c:
	add cast to uid_t

	* gram.y:
	missing free in alias_destroy

	* redblack.c:
	Can't use rbapply() for rbdestroy since the destructor is passed a
	data pointer, not a node pointer.

	* getspwuid.c, logging.c, sudo.c, sudo.h:
	Create and use private versions of setpwent() and endpwent() that
	set/end the shadow password file too.

	* gram.c, gram.h, gram.y, match.c, parse.h, testsudoers.c, visudo.c:
	Store aliases in a red-black tree.

	*, redblack.c, redblack.h:
	red-black tree implementation

	* visudo.c:
	Edit all sudoers file if there were unused or undefined aliases and
	we are in strict mode.

2004-11-12  Todd C. Miller  <>

	* CHANGES, def_data.c, def_data.h,, defaults.c, env.c,
	find_path.c,,, sudoers.pod, visudo.c:
	Bring back the "secure_path" Defaults option now that Defaults take
	effect before the path is searched.

2004-11-11  Todd C. Miller  <>

	* logging.c, parse.c:
	A user can always list their own entries, even with -u. Better error
	message when failing to list another user's entries.

	* parse.c, sudo.c, sudo.h:
	The syntax to list another user's entries is now "-u otheruser -l".
	Only root or users with sudo "ALL" may list other user's entries.

	*,, sudo.pod:
	Update env variable info in SECURITY NOTES

	* env.c:
	strip CDPATH too

	* env.c:
	strip exported bash functions from the environment.

2004-10-27  Todd C. Miller  <>

	* sudo.c:
	Only reset based on SUDO_USER environment variables for
	real commands and sudoedit. This avoids a confusing message when a
	user tries "sudo -l" or "sudo -v" and is denied.

	* gram.c, gram.y, parse.h:
	Extend LIST_APPEND to deal with appending lists too

2004-10-26  Todd C. Miller  <>

	* logging.c:
	Convert some bitwise AND to ISSET

	* lex.yy.c, toke.c:
	toke.c replaces lex.yy.c


	* BUGS:
	new parser fixes most of the outstanding bugs

	* configure:

	* visudo.c:
	Rework for the new parser. Now checks for unused aliases in sudoers.

	* testsudoers.c:
	Rewrite for the new parser. Now supports a -d flag (dump) and adds
	a -h flag (host). It now defaults to the local hostname unless
	otherwise specified.

	* sudo.h:
	Add new prototypes. Remove NOMATCH/UNSPEC (now in parse.h)

	* sudo.c:
	Update for new parse. We now call find_path() *after* we have
	updated the global defaults based on sudoers. Also adds support for
	listing other user's privs if you are root.

	* mon_systrace.c:
	Working LDAP support; also remove a now-unneeded rewind().

	* logging.c, logging.h:
	Add NO_STDERR flag.

	* ldap.c:
	Split sudo_ldap_check() into three pieces: sudo_ldap_open(),
	udo_ldap_update_defaults() and sudo_ldap_check(). This allows us to
	connecto to LDAP, apply the default options, find the command in the
	user's path, and then check whether the user is allowed to run it.
	The important thing here is that the default runas user may be
	specified as a default option and that needs to be set before we
	search for the command.

	* ldap.c:
	Add casts to unsigned char for isspace() to quiet a gcc warning.

	* defaults.h:
	Add prototype for update_defaults()

	* defaults.c:
	Don't warn about line numbers now that we operate on a set of data
	structures (or LDAP) and not a file.

	No long use lsearch()

	Update for new and changed file names.

	no more BSD lsearch.c

	* match.c:
	foo_matches() routines now live in match.c Added user_matches(),
	runas_matches(), host_matches(), cmnd_matches() and alias_matches()
	that operate on the parsed sudoers file.

	* parse.lex, toke.l:
	Move parse.lex -> toke.l Rename buffer_frob() -> switch_buffer()
	WORD no longer needs to exclude '@' kill yywrap()

	* gram.c, gram.h, gram.y, parse.c, parse.h, parse.yacc,,
	Rewritten parser that converts sudoers into a set of data
	structures. This eliminates ordering issues and makes it possible to
	apply sudoers Defaults entries before searching for the command.

	*, emul/search.h, lsearch.c:
	We won't be using lsearch() any longer.

	* ldap.c:
	sudo should not send mail if someone who runs 'sudo -l' has no


	* visudo.pod:
	Update warnings to match new visudo

	* sudoers.pod:
	The new parser doesn't have the old ordering constraints.

	* sudo.pod:
	Document that -l now takes an optional username argument

2004-10-25  Todd C. Miller  <>

	AIX works

	* ldap.c:
	If LDAP_OPT_SUCCESS is not defined, use LDAP_SUCCESS instead. Fixes
	a compilation problem with Solaris 9's native LDAP.

	Set FLAG_MONITOR when needed.

2004-10-23  Todd C. Miller  <>

	* mon_systrace.c:
	Call sudo_goodpath() *after* changing the cwd to match the traced
	process. Fixes relative paths.

2004-10-21  Todd C. Miller  <>

	* testsudoers.c:
	Kill set_perms() stub--it is no longer needed.

2004-10-13  Todd C. Miller  <>

	*,, sudoers.pod:
	stay_setuid now requires set_reuid() or setresuid()

	* INSTALL, PORTING, TROUBLESHOOTING,, configure,, set_perms.c, sudo.c, sudo.h:
	Kill use of POSIX saved uids; they aren't worth bothering with.

2004-10-07  Todd C. Miller  <>

	* glob.c:
	remove call to issetugid()

	*,, sudoers.pod:
	Remove warning about wildcards. Now that we use glob() the bug is

	* parse.c:
	Use glob(3) instead of fnmatch(3) for matching pathnames and stat
	each result that matches the basename of the user's command. This
	makes "cd /usr/bin ; sudo ./blah" work when sudoers allows
	/usr/bin/blah. Fixes bug #143.

	*, configure,
	Define HAVE_EXTENDED_GLOB for extended glob (GLOB_TILDE and

	*, configure,
	Check for a glob() that supports GLOB_BRACE and GLOB_TILDE

	reference glob

	* glob.c:
	4.4BSD glob(3) with fixes from OpenBSD and some unneeded extensions

	* emul/glob.h:
	4.4BSD glob(3) with fixes from OpenBSD and some unneeded extensions

2004-10-05  Todd C. Miller  <>

	* mon_systrace.c:
	Just return if STRIOCINJECT or STRIOCREPLACE fail. It probably
	means we are out of space in the stack gap...


	* mon_systrace.c:
	Take a stab at ldap sudoers support here.

	* mon_systrace.c, mon_systrace.h:
	Detach from tracee on SIGHUP, SIGINT and SIGTERM. Now "sudo reboot"
	doesn't cause reboot to inadvertanly kill itself.

	* mon_systrace.c:
	put "monitor" in the proctitle, not "systrace"

	* mon_systrace.c:
	When modifying the environment, don't replace envp when we can get
	away with just rewriting pointers in the traced process.

	* mon_systrace.c, mon_systrace.h:
	Add environment updating via STRIOCINJECT (if available).


2004-10-04  Todd C. Miller  <>

	* lex.yy.c:

	* parse.lex:
	Fix bug introduced in unput() removal; want yyless(0) not yyless(1)

	* mon_systrace.c:
	Include file is now mon_systrace.h

	*, configure,, def_data.c, def_data.h,, lex.yy.c, parse.c, parse.h, parse.lex, parse.yacc,
	sudo.c, sudo.h,,, sudoers.pod:
	No longer call it tracing, it is now "monitoring" which should be
	more a obvious name to non-hackers.

2004-10-01  Todd C. Miller  <>

	* mon_systrace.c, mon_systrace.h:
	Fix some XXX

	* mon_systrace.c, mon_systrace.h:
	No need to include syscall.h, use 1024 as the max # of entries (the
	max that systrace(4) allows).

	Only need to use SYSTR_POLICY_ASSIGN once

	Change check_syscall() -> find_handler() and have it return the
	handler instead of just running it. We need this since handler now
	have two parts: one part that generates and answer and another that
	gets called after the answer is accepted (to do logging).

	Add some missing check_exec for emul execv

	* sample.pam, sample.sudoers, sample.syslog.conf, sudoers:
	Add $Sudo$ tags.


	add trace_systrace.o dependency

2004-09-30  Todd C. Miller  <>

	* configure,
	Also look for systrace.h in /usr/include/linux

	* mon_systrace.c, mon_systrace.h:
	Move all struct defs and prototypes into trace_systrace.h and mark
	all but systace_attach() static.

	* mon_systrace.c, mon_systrace.h:
	Add support for tracing emulations. At the moment, all emulations
	are compiled in. It might make sense to #ifdef them in the future,
	though this impeeds readability.

	*, configure,
	rename systrace.c -> trace_systrace.c

	* parse.yacc,
	Allow this to build with a K&R compiler again

	* TODO:

	* compat.h, sudo.c, visudo.c:
	Use __attribute__((__noreturn__))

	* visudo.c:
	Exit() takes a negative value to indicate it was not called via


	*, visudo.c:
	Define Err() and Errx() that are like err() and errx() but call
	Exit() instead of exit(). Build private copy of alloc.o for visudo
	that calls Err() and Errx().

2004-09-29  Todd C. Miller  <>

	* lex.yy.c,


	* visudo.c:
	Overhaul visudo for editing multiple files: o visudo has been
	broken out into functions (more work needed here) o each file is
	now edited before sudoers is re-parsed o if a #include line is
	added that file will be edited too

	TODO: o cleanup temp files when exiting via err() or errx() o
	continue breaking things out into separate functions

	* parse.lex, sudo.c, sudo.h, testsudoers.c, visudo.c:
	Add keepopen arg to open_sudoers that open_sudoers can use to
	indicate to the caller that the fd should not be closed when it is
	done with it. To be used by visudo to keep locked fds from being
	closed prematurely (and thus losing the lock).

	* parse.yacc, sudo.c:
	Add errorfile global that contains the name of the file that caused
	the error.

	* parse.lex:
	return COMMENT to yacc grammar for a #include line

	* parse.lex:
	Remove us of unput() in favor of yyless() which is cheaper.

	* parse.yacc:
	Allow an empty sudoers file.

2004-09-28  Todd C. Miller  <>

	* mon_systrace.c:
	Rewind sudoers_fp now that sudoers_lookup() doesn't do it for us.

	* lex.yy.c,

	* visudo.c:
	Do signal setup before calling edit_sudoers(). Don't shadow the
	"quiet" global.

	* visudo.c:
	If a sudoers file includes other files, edit those too. Does not yes
	deal with creating the new includes files itself.

	* testsudoers.c:
	init_parser now takes a path

	* parse.c, parse.h, parse.lex, parse.yacc:
	More scaffolding for dealing with multiple sudoers files: o
	init_parser() now takes a path used to populate the sudoers global
	o the sudoers global is used to print the correct file in yyerror()
	o when switching to a new sudoers file, perserve old file name and
	line number

	Kill _PATH_SUDOERS_TMP; it is not meaningful now that we can have
	multiple sudoers files.

	* parse.c, sudo.c:
	Rewind sudoers_fp in open_sudoers() instead of sudoers_lookup() so
	we start at the right file position when reading include files.

	* sudoers.pod:
	document #include

	* lex.yy.c:

	* parse.lex:
	Add max depth of 128 for the include stack to avoid loops.

	Since yyerror() doesn't stop parsing, pass return values back to
	yylex and call yyterminate() on error.

2004-09-27  Todd C. Miller  <>

	* sudoers.pod:
	document tracing

	* sudo.pod:
	Mention PREVENTING SHELL ESCAPES section of sudoers man page

	* lex.yy.c,

	* parse.lex:
	Add support for #include in sudoers (visudo support TBD)

	* parse.yacc:
	make yyerror()'s argument const

	* testsudoers.c, visudo.c:
	Add open_sudoers() stubs.

	* sudo.c, sudo.h:
	Rename check_sudoers() open_sudoers() and make it return a FILE *

2004-09-26  Todd C. Miller  <>

	Crank version

	*, sudo.psf:
	Better HP-UX depot construction

2004-09-25  Todd C. Miller  <>

	* mon_systrace.c:
	o Made children global so check_exec() can lookup a child. o
	Replaced uid in struct childinfo with struct passwd * (for runas) o
	new_child() now takes a parent pid so the runas info can be
	inherited o Added find_child() to lookup a child by its pid o
	update_child() now fills in a struct passwd o Converted the big
	if/else mess in set_policy to a switch o Syscalls that change uid
	are now "ask" so we get SYSTR_MSG_UGID events

	* getspwuid.c:
	Add flag to sudo_pwdup that indicates whether or not to lookup the
	shadow password. Will be used to a struct passwd that has the
	shadow password already filled in.

	* mon_systrace.c:
	add missing increment of addr in read_string()

	* mon_systrace.c:
	Remove bogus call to update_child() and some cosmetic fixes

	* mon_systrace.c:
	Don't leak /dev/systrace fd to tracee Make initialized global for
	simplicity If STRIOCATTACH returns EBUSY we are already being traced
	Check for user_args == NULL in setproctitle() call Add missing calls

	* sudo.c:
	g/c sudo_pwdup proto

	*, sudo.psf:
	Add target for building a depot file

	* mon_systrace.c:
	trim includes

2004-09-24  Todd C. Miller  <>

	* lex.yy.c,,

	document --with-systrace

	*, configure,
	Add check for setproctitle

	* mon_systrace.c:
	pass struct str_msg_ask in to syscall checker so it can set the
	error code

	* mon_systrace.c:
	systrace(4) support for sudo. On systems with the systrace(4)
	kernel facility (OpenBSD, NetBSD, Linux w/ patches) sudo can
	intercept exec calls and check the exec args against the sudoers
	file. In other words, sudo can now control subcommands and shell

	* sudo.c, sudo.h:
	Call systrace_attach() if FLAG_TRACE is set.

	* parse.c, parse.h, parse.lex, parse.yacc, sudo.h:
	Add trace Defaults option and TRACE/NOTRACE tags and set FLAG_TRACE

	* parse.c, sudo.c:
	Don't close sudoers_fp, keep it open and set close on exec flag

	* def_data.c, def_data.h,
	Add trace option

	Add systrace

	SunOS /bin/sh blows up with configure

	* configure,
	Include sys/param.h before systrace.h

	* configure:


	line up options in --help

	Add --with-systrace

2004-09-23  Todd C. Miller  <>

	* configure:

	* aclocal.m4,
	make this work with autoconf-2.59

2004-09-16  Todd C. Miller  <>

	* sudo_edit.c:
	Simplify logic around open & stat of files and do sanity on edited
	file even if we lack fstat (still racable but worth doing).

2004-09-15  Todd C. Miller  <>

	Add support url

	versino 1.6.8p1
	[b84ebfaf1552] [SUDO_1_6_8p1]

	more changes for 1.6.8p1

	* version.h:

	* CHANGES, sudo_edit.c:
	Add sanity check so we don't try to edit something other than a
	regular file.

2004-09-15  Aaron Spangler  <>


	document --with-ldap-conf-file

2004-09-14  Todd C. Miller  <>

	* CHANGES, ins_csops.h:
	political correctness strikes again


2004-09-12  Todd C. Miller  <>

	Install sudoedit man link

	Update PAM note and mention where HP-UX users can download gcc

	libtool wants to install stuff from .libs so fake one up for binary

	rm -f old sudoedit link instead of using ln -f set LIBTOOL correctly

	Deal with "uname -m" having slashes in it rm -f old sudoedit link
	instead of using ln -f

	* Makefile.binary,
	Makefile.binary -> for config.status substitution
	Add support for installing noexec bits

	Copy noexec bits into binary dists too No longer use my old arch
	script for making binary dists

	* Makefile.binary:
	Install sudoedit link.

2004-09-11  Todd C. Miller  <>

	* emul/utime.h:
	avoid __P so there is no need for compat.h to be included

	* utimes.c:
	Don't use HAVE_UTIME_H before including config.h.

2004-09-10  Todd C. Miller  <>

	* compat.h:
	Fix Solatis futimes macro

2004-09-09  Todd C. Miller  <>

	* sudo_edit.c:
	Rename ots -> omtim for improved readability.

2004-09-08  Todd C. Miller  <>

	* sudo_edit.c:
	Redo changes in revision 1.7. Don't really need to keep the temp
	file open; re-opening it with the invoking user's euid is



	* sudo.pod:
	back out revision 1.70; it is no long applicable

	* env.c:
	Let the loader initialize nep

	*, configure,
	Removed unneed check for fchown Add check for gettimeofday Move
	autoheader template stuff into separate AH_TEMPLATE lines

	* check.c, compat.h, fileops.c, sudo.h, sudo_edit.c, visudo.c:
	Use timespec throughout.


	* gettime.c:
	function to return the current time in a struct timespec

	* utimes.c:
	Not a darpa-sponsored file.

2004-09-07  Todd C. Miller  <>

	* compat.h,, configure,
	Add a check for struct timespec and provide it for those without.

	*, configure,, sudo_edit.c:
	Add checks for st_mtim and st_mtimespec and add macros for pulling
	the mtime sec and nsec out of struct stat. These are used in
	sudo_edit() to better tell whether or not the file has changed.

	* check.c, fileops.c, sudo.h, sudo_edit.c, visudo.c:
	Add an extra param to touch() for nsec

	* sudo_edit.c:
	Call mkstemp() as the in invoking user so we don't have to chown the
	file later. Only touch() the temp file if we can do it via the file
	descriptor. Don't check for modification of the temp file if we lack
	fstat(). Catch errors read()ing the temp file.

	* fileops.c:
	If path is NULL and fd == -1 return -1.

	* sudo_edit.c:
	closefrom() is overkill, the only extra fds are the ones we opened
	so just close those in the child.

	*, aclocal.m4, check.c, compat.h,, configure,, fileops.c, sudo.h, sudo_edit.c, utime.c, utimes.c,
	Use utimes() and futimes() instead of utime() in touch(), emulating
	as needed. Not all systems are able to support setting the times of
	an fd so touch() takes both an fd and a file name as arguments.

2004-09-07  Aaron Spangler  <>

	* env.c:
	Rare SEGV

2004-09-06  Todd C. Miller  <>


	* sudo.pod, sudoers.pod, visudo.pod:
	Add SUPPORT section and re-order some of the sections to match the
	order we use in OpenBSD.

2004-09-06  Aaron Spangler  <>

	* env.c:
	Openldap ~/.ldaprc fix

2004-09-06  Todd C. Miller  <>

	* sudo.pod:
	Talk about how the editor must write its changes to the original
	file and not just use rename(2).


	* sudo_edit.c:
	Keep the temp file open instead of re-opening after the editor has

	* sample.pam:
	Update for current redhat/fedora core.

2004-09-03  Aaron Spangler  <>

	tls_ examples

2004-09-02  Aaron Spangler  <>

	* ldap.c:
	config tls_* options

2004-08-29  Todd C. Miller  <>

	* configure,
	No need for -lcrypt when using pam.

2004-08-27  Todd C. Miller  <>

	* configure:

2004-08-27  Aaron Spangler  <>

	*, ldap.c,
	Allow --with-ldap-conf-file option to override LDAP_CONF

	* ldap.c:
	cleanup debug message

2004-08-26  Aaron Spangler  <>

	more config info

2004-08-24  Todd C. Miller  <>

	* TODO, find_path.c, goodpath.c, parse.c, sudo.c, sudo.h, visudo.c:
	Add cmnd_base to struct sudo_user and set it in init_vars(). Add
	cmnd_stat to struct sudo_user and set it in sudo_goodpath(). No
	longer use gross statics in command_matches(). Also rename some
	variables for improved clarity.

2004-08-21  Todd C. Miller  <>

	document HP's crippled compiler deficiency.

	Fix some thinkos in --with-editor and --with-env-editor
	descriptions. Noticed by Norihiko Murase.

	* configure,
	--with-noexec takes an optional PATH argument.

	document --with-noexec

2004-08-17  Todd C. Miller  <>

	[f2503bd13373] [SUDO_1_6_8]

	* sudo_edit.c:
	Better warning message when sudoedit is unable to write to the
	destination file.


	* sudo.pod:
	Don't italicize the string "sudoedit"

2004-08-16  Todd C. Miller  <>

	Mention GratiSoft.

2004-08-11  Todd C. Miller  <>


	* parse.yacc:
	Reset used_runas to FALSE when re-intializing the parser.

2004-08-09  Todd C. Miller  <>

	* config.guess:
	Correct OpenBSD mips support

	* config.guess:
	Add OpenBSD/mips

2004-08-07  Aaron Spangler  <>

	More behavior notes

	Updates on current behavior

2004-08-06  Todd C. Miller  <>

	* sudoers.pod:
	=back does not take an indentlevel (makes no difference to formatted

	* sudo.pod:
	=back does not take an indentlevel (makes no difference to formatted


	* sudo.c:
	Consistency. Use same error for bad -u #uid when targetpw is set as
	we do when a bad -u username is specified.

	* TODO:
	Add checksum idea from Steve Mancini



	* sudo.pod, sudoers.pod:
	Document the restriction on uids specified via -u when targetpw is

	* sudo.c:
	Error out when targetpw is enabled and sudo is run with -u #uid but
	#uid does not exist in the passwd database. We can't do target
	authentication when the target is not in passwd!


	* TODO:
	Some more todo for the next release.

	Make it clear that PAM should be used for DCE support when possible.

	* sudoers.pod:
	o Document problems with wildcards and relative paths. o Make the
	order requirements more prominent. o Change a "set" to "reset" for

2004-08-05  Todd C. Miller  <>

	* sudo.pod:
	Mention --with-secure-path, not SECURE_PATH.

2004-08-03  Aaron Spangler  <>

	* ldap.c:
	reflect changes to parse.c

2004-08-02  Todd C. Miller  <>


	* parse.c, parse.h, testsudoers.c, visudo.c:
	Don't pass user_cmnd and user_args to command_matches(), just use
	the globals there. Since we keep state with statics anyway it is
	misleading to pretend that passing in different cmnd and cmnd_args
	will work.

	* parse.yacc:
	Don't pass user_cmnd and user_args to command_matches(), just use
	the globals there. Since we keep state with statics anyway it is
	misleading to pretend that passing in different cmnd and cmnd_args
	will work.

	* parse.c:
	Fix a bug introduced in rev. 1.149. When checking for pseudo-
	commands check for a '/' anywhere in cmnd, not just the first

2004-07-31  Aaron Spangler  <>

	*, sudo.pod:
	Clarification thanks to Olivier Blin <>

	*, sudoers.pod:
	Add ignore_local_sudoers

	Sun One schema definition by and

2004-07-29  Todd C. Miller  <>


2004-07-23  Todd C. Miller  <>


	* parse.c:
	Parse sudoers file as PERM_RUNAS not PERM_ROOT and remove a useless
	PERM_SUDOERS. Restore to PERM_ROOT upon exit of the parse.

2004-07-08  Todd C. Miller  <>

	PAM change

2004-07-08  Aaron Spangler  <>

	* ldap.c:
	Better debugging of ALL command

2004-07-08  Todd C. Miller  <>

	* parse.c:
	When matching for "sudoedit" in sudoers check both the command the
	user typed *and* the command that is listed in the sudoers entry.

2004-07-04  Aaron Spangler  <>

	* ldap.c:
	Added !command feature

2004-06-28  Todd C. Miller  <>

	* auth/pam.c:
	Use pam_acct_mgmt() to check for disabled accounts; Brian Farrell

2004-06-11  Todd C. Miller  <>

	License is ISC-style, not BSD-style


2004-06-10  Todd C. Miller  <>


	* sudo.pod:
	o Update some out of date bits to reality o Change the shell promt
	in examples to bourne-shell style o Clarify some details o Add a
	CAVEAT about "sudo cd /foo"

	* check.c:
	Don't ask for a password if invoking user == target user.

	* sudo.c:
	typo in comment

2004-06-08  Todd C. Miller  <>


	* sudoers.pod:
	Expand on NOEXEC a little.

	* TODO:



	* visudo.pod:
	Add a check in visudo for runas_default being set after it has
	already been used.

	* CHANGES, parse.yacc, visudo.c:
	Add a check in visudo for runas_default being set after it has
	already been used.


	* parse.yacc:
	Add a MATCHED macro for testing whether foo_matches has been set to
	TRUE or FALSE. This is more readable than checking for >=0 or < 0.
	Doesn't change the actual code generated.

2004-06-07  Todd C. Miller  <>



	* sudoers.pod:
	Correct description of where Defaults specs should go.

	* sudoers:
	Correct description of where Defaults specs should go.

	* testsudoers.c, visudo.c:
	update (c) year

	* logging.h:
	update (c) year

	* ldap.c:
	update (c) year

	* find_path.c:
	update (c) year

	* auth/pam.c:
	update (c) year

	* auth/bsdauth.c, auth/kerb5.c:
	update (c) year

2004-06-06  Todd C. Miller  <>


	* auth/bsdauth.c, auth/kerb5.c, auth/pam.c, visudo.c:
	Remove trailing spaces, no actual code changes.

	* tgetpass.c:
	Remove trailing spaces, no actual code changes.

	* ldap.c, logging.h, parse.c, parse.yacc, sudo.c, testsudoers.c:
	Remove trailing spaces, no actual code changes.

	* getcwd.c:
	Remove trailing spaces, no actual code changes.

	* find_path.c:
	Remove trailing spaces, no actual code changes.

	* compat.h, defaults.c, env.c:
	Remove trailing spaces, no actual code changes.

	* check.c:
	Remove trailing spaces, no actual code changes.


	* parse.yacc:
	Fix a >=0 that should be <0 that was improperly converted when
	UNSPEC was added.

	* parse.yacc:
	Add do {} while(0) around pop macro Set cmnd_matches to UNSPEC, not
	NOMATCH when resetting it.

	* parse.yacc:
	Fix pastos introduced in SETNMATCH addition.

2004-06-05  Todd C. Miller  <>

	Update for configure changes


	* sudo.h:
	Add NOMATCH and UNSPEC defines (-1 and -2 respectively) and use
	these in parse.yacc. Also in parse.yacc initialize the *_matches
	vars to UNSPEC and add two macros, SETMATCH and SETNMATCH for use
	when setting *_matches to a value that may be

	* parse.yacc:
	Add NOMATCH and UNSPEC defines (-1 and -2 respectively) and use
	these in parse.yacc. Also in parse.yacc initialize the *_matches
	vars to UNSPEC and add two macros, SETMATCH and SETNMATCH for use
	when setting *_matches to a value that may be

	* parse.yacc:
	Initialize runas to -2, not -1 since we need to be able to
	distinguish between the initialized value and the value of a non-
	match when passing along the runas value to multiple commands.

	The result of this is that an unmatched runas is now set to -1, not
	0. This is required now that parse.c treats a FALSE value for runas
	as being explicitly denied.

2004-06-03  Todd C. Miller  <>

	* sudo.c, visudo.c:
	Error out if argc < 1.

	* getprogname.c:
	Error out if argc < 1.

	* configure,
	Add tests for what libs we need to link with for ldap and for
	whether or not lber.h needs to be explicitly included.

2004-06-03  Aaron Spangler  <>

	* ldap.c:
	Solaris native LDAP build fix

2004-06-01  Todd C. Miller  <>

	* ldap.c:
	Set edn to NULL is ldap_get_dn() fails to avoid potential use of an
	unset variable.

	* sudo.h:
	Add prototype for sudo_ldap_list_matches

	* configure,
	Better check for dirfd macro--we now set HAVE_DIRFD for the macro
	version too. Added check for dd_fd in `DIR' if no dirfd is found;
	this is now used to confitionally define the dirfd macro in

	Better check for dirfd macro--we now set HAVE_DIRFD for the macro
	version too. Added check for dd_fd in `DIR' if no dirfd is found;
	this is now used to confitionally define the dirfd macro in

	* compat.h:
	Better check for dirfd macro--we now set HAVE_DIRFD for the macro
	version too. Added check for dd_fd in `DIR' if no dirfd is found;
	this is now used to confitionally define the dirfd macro in

	* closefrom.c:
	Only check /proc/$$/fd if we have the dirfd function/macro.

	* compat.h,, configure,
	Add a check for a dirfd() function (like Linux) and add a dirfd
	macro in compat.h if there is no dirfd() function or macro.

	* closefrom.c, getcwd.c:
	dirfd() is now defined in compat.h as needed.

	Clarify closefrom() note.

	* parse.c:
	When checking for a command in the directory, only copy the base dir

	* closefrom.c:
	If there is a /proc/$$/fd directory, behave like the Solaris
	closefrom() and only close the descriptors listed therein.

	* alloc.c:
	compat.h guarantees INT_MAX is defined.

	* compat.h:
	Add definitions of OPEN_MAX and INT_MAX for those without it and
	remove definition of RLIM_INFINITY (now unused).

	* CHANGES, alloc.c, check.c, compat.h, find_path.c, getcwd.c, parse.c,
	sudo.c, sudo.h, visudo.c:
	Use PATH_MAX, not MAXPATHLEN since the former is standardized.

2004-05-31  Todd C. Miller  <>


	Add some entries that were mailed in a while ago

	* closefrom.c:
	o sysconf returns a long, not an int. o check for negative return
	value from sysconf/getdtablesize and use OPEN_MAX in this case. o
	define OPEN_MAX to 256 for those without it (a fair guess...)

2004-05-30  Todd C. Miller  <>

	Mention change in parse order for RunAs entries.

	* configure:

2004-05-29  Todd C. Miller  <>

	o --with-ldap now takes an optional dir as a parameter o added
	check for ldap_initialize() and start_tls_s()

	Fix some typos, word choice and formatting issues.

2004-05-28  Todd C. Miller  <>

	* tgetpass.c:
	Use SA_INTERRUPT so SunOS works correctly, avoid stdio and just use
	read/write as it is simpler.

	* configure,
	Remove hack overriding cross-compiler check. It should no longer be

	* compat.h:
	Remove select() compat bits since we no longer use select().

	* CHANGES, tgetpass.c:
	Use alarm() instead of select() for the timeout for systems that
	don't fully/properly implement select().

2004-05-27  Todd C. Miller  <>



	* set_perms.c:
	Deal with systems that have no way of setting the effective uid such
	as nsr-tandem-nsk.

	* configure,
	Define NO_SAVED_IDS if we don't find seteuid()

	*, configure,
	Add back check for setreuid() since NSK doesn't have it.



	* BUGS:

	* parse.c:
	In sudoers_lookup() return VALIDATE_NOT_OK if the runas user was
	explicitly denied and the command matched. This fixes a long-
	standing bug and makes: foo machine = (ALL) /usr/bin/blah
	foo machine = (!bar) /usr/bin/blah

	equivalent to: foo machine = (ALL, !bar) /usr/bin/blah

	* sudoers.pod:
	Clarify mail_noperm

2004-05-20  Aaron Spangler  <>

	Missing DESTDIR in make install for

2004-05-17  Todd C. Miller  <>


	* TODO:

	* sudoers.pod:
	Remove fastboot/fasthalt (who still remembers these?) and add a
	minimal sudoedit example.

	* sample.sudoers:
	Remove fastboot/fasthalt (who still remembers these?) and add a
	minimal sudoedit example.

	* UPGRADE, sudo.c, visudo.c:
	filesystem -> file system

	filesystem -> file system

	filesystem -> file system

	* sudo.pod, sudoers.pod:
	Fix some minor typos and formatting goofs

	* lex.yy.c:

	* visudo.pod:
	remove my email addr

	* sudo.pod, sudoers.pod, visudo.pod:
	Use @mansectform@ and @mansectsu@ everywhere Make man page
	references links with L<>

	* parse.lex:
	Accept quoted globbing characters and pass them verbatim for

	Document that /tmp/.odus is gone.

	No longer use /tmp/.odus as a possible timestamp dir unless
	specifically configured to do so. Instead, if no /var/run exists,
	use /var/adm/sudo or /usr/adm/sudo.

	* configure:
	No longer use /tmp/.odus as a possible timestamp dir unless
	specifically configured to do so. Instead, if no /var/run exists,
	use /var/adm/sudo or /usr/adm/sudo.

	* aclocal.m4:
	No longer use /tmp/.odus as a possible timestamp dir unless
	specifically configured to do so. Instead, if no /var/run exists,
	use /var/adm/sudo or /usr/adm/sudo.

	No longer use /tmp/.odus as a possible timestamp dir unless
	specifically configured to do so. Instead, if no /var/run exists,
	use /var/adm/sudo or /usr/adm/sudo.

	* set_perms.c, sudo.c, tgetpass.c, visudo.c:
	Preliminary changes to support nsr-tandem-nsk. Based on patches
	from Tom Bates.

	* logging.c:
	Preliminary changes to support nsr-tandem-nsk. Based on patches
	from Tom Bates.

	* check.c, compat.h:
	Preliminary changes to support nsr-tandem-nsk. Based on patches
	from Tom Bates.

2004-05-16  Todd C. Miller  <>

	There was no 1.6.7p6.


	add missing files to DISTFILES



	Fix some line wrap and update (c) year

2004-04-28  Aaron Spangler  <>

	Build Note

2004-04-07  Aaron Spangler  <>

	Fix install-dirs

2004-04-05  Todd C. Miller  <>


	* visudo.c:
	In Exit() when used as a signal handler, emsg is a pointer so
	sizeof() is wrong so make it a #define instead. Also avoid using a
	negative exit value. Found by Aaron Campbell

2004-03-24  Todd C. Miller  <>

	* sudoers.pod:
	Remove bogus sentence about uids in a User_List. Document usernames
	vs. uid parsing in a Runas_List.

	* parse.c, parse.h, parse.yacc, sudo.c, testsudoers.c, visudo.c:
	If the user specified a uid with the -u flag and the uid exists in
	the passwd file, set runas_user to the name, not the uid.

	When comparing usernames in sudoers, if a name is really a uid
	(starts with '#') compare it numerically to pw_uid.

2004-03-22  Todd C. Miller  <>

	* auth/kerb5.c:
	krb5_mcc_ops should be const; Johnny C. Lam

2004-02-28  Aaron Spangler  <>

	* CHANGES,, ldap.c:
	Added start_tls support

2004-02-14  Todd C. Miller  <>

	Clean up libtool stuff for 'make distclean' and add def_data.c,
	def_data.h to PARSESRCS.

2004-02-14  Aaron Spangler  <>

	* strlcat.c, strlcpy.c:
	Un-Fix last license munge

2004-02-13  Todd C. Miller  <>

	* configure:


	* lex.yy.c,

	* auth/passwd.c, auth/rfc1938.c, auth/secureware.c, auth/securid.c,
	auth/securid5.c, auth/sia.c, auth/sudo_auth.c, auth/sudo_auth.h,
	emul/search.h, emul/utime.h:
	More to a less restrictive, ISC-style license.

	* auth/kerb5.c, auth/pam.c:
	More to a less restrictive, ISC-style license.

	* auth/dce.c, auth/fwtk.c, auth/kerb4.c:
	More to a less restrictive, ISC-style license.

	* auth/bsdauth.c:
	More to a less restrictive, ISC-style license.

	* auth/afs.c, auth/aix_auth.c, zero_bytes.c:
	More to a less restrictive, ISC-style license.

	*, sudoers.pod, testsudoers.c, tgetpass.c, visudo.c,, visudo.pod:
	More to a less restrictive, ISC-style license.

	* sudo_noexec.c:
	More to a less restrictive, ISC-style license.

	* strlcat.c, strlcpy.c, sudo.c, sudo.h,, sudo.pod,
	More to a less restrictive, ISC-style license.

	* sigaction.c, strerror.c:
	More to a less restrictive, ISC-style license.

	* ldap.c, logging.c, logging.h, parse.c, parse.h,,
	More to a less restrictive, ISC-style license.

	* getspwuid.c, goodpath.c, ins_2001.h, ins_classic.h, ins_csops.h,
	ins_goons.h, insults.h, interfaces.c, interfaces.h:
	More to a less restrictive, ISC-style license.

	* find_path.c, getprogname.c:
	More to a less restrictive, ISC-style license.

	* fileops.c:
	More to a less restrictive, ISC-style license.

	* env.c:
	More to a less restrictive, ISC-style license.

	* defaults.h:
	More to a less restrictive, ISC-style license.

	* LICENSE,, alloc.c, check.c, closefrom.c, compat.h,
	More to a less restrictive, ISC-style license.

	* utime.c, version.h:
	More to a less restrictive, ISC-style license.

	* parse.lex, parse.yacc:
	More to a less restrictive, ISC-style license.

	* Makefile.binary:
	More to a less restrictive, ISC-style license.

2004-02-13  Aaron Spangler  <>

	* sudoers2ldif:
	Merged in LDAP Support

	* ldap.c, sudo.c, sudo.h:
	Merged in LDAP Support

	* def_data.c, def_data.h,
	Merged in LDAP Support

	Merged in LDAP Support

2004-02-08  Todd C. Miller  <>

	* sudo.h, sudo_noexec.c:
	Only do "extern int errno" if errno is not a macro.

2004-02-06  Todd C. Miller  <>

	* set_perms.c:
	setreuid(0, 0) fails on QNX if the euid is not already 0 so set the
	euid first, then just call setuid(0) to set the real uid too.

	* set_perms.c:
	Use setresuid() and setreuid() for PERM_RUNAS when appropriate
	instead of seteuid() which may not exist.

2004-02-04  Todd C. Miller  <>


	* INSTALL,, configure,, ins_classic.h:
	Add --with-pc-insults configure option

	Prefer VISUAL over EDITOR like old vipw did.

2004-02-01  Todd C. Miller  <>


	* sudoers.pod:
	Add a note that noexec is not a cure-all.

	* sudoers.pod:
	Mention that disabling "root_sudo" is pretty pointless.

	* configure,
	Substitute for root_sudo in sudoers.pod

	* sudo.pod:
	Add sudoedit to the NAME section

	* sudoers.pod:
	Document that fact that setting ignore_dot in sudoers has no effect
	due to the fact that find_path() is called *before* sudoers is read.

2004-01-30  Todd C. Miller  <>

	* sudo_edit.c:
	Do not require _PATH_USRTMP to be set.



	* sudo.pod:
	Clarify that when sudo is run by root with the SUDO_USER variable
	set, the sudoers lookup happens for root and not the SUDO_USER user.

2004-01-29  Todd C. Miller  <>

	* auth/pam.c, auth/sudo_auth.c, interfaces.c, logging.c, parse.c,
	set_perms.c, sigaction.c, sudo.c, tgetpass.c:
	Use the SET, CLR and ISSET macros.

	* fnmatch.c:
	Use the SET, CLR and ISSET macros.

	* defaults.c, env.c:
	Use the SET, CLR and ISSET macros.

	* interfaces.h:
	MAIN was replaced with _SUDO_MAIN some time ago.

	* sudo.c:
	Don't look at prev_user until after we've parsed sudoers and done
	the password check. That way, if sudo/sudoedit is run from a root
	process that was invoked by sudo, we check sudoers for root, not the
	previous user. This makes sudoedit much more useful and means that
	for the sudo case, we get correct logging on who actually ran the

2004-01-23  Todd C. Miller  <>

	* sudo_edit.c:
	Add a comment describing why we need to be notified about our child

2004-01-22  Todd C. Miller  <>

	* def_data.c,
	Update the noexec variable descriptions

	*, sudoers.pod:
	noexec now replaces more than just execve()

	* sudo_noexec.c:
	Alas, all the world does not go through execve(2). Many systems
	still have an execv(2) system call, Linux 2.6 provides fexecve(2)
	and it is not uncommon for libc to have underscore ('_') versions of
	the functions to be used internally by the library. Instead of
	stubbing all these out by hand, define a macro and let it do the
	work. Extra exec functions pointed out by Reznic Valery.

	* sudo.c, sudo_edit.c:
	Fix suspending the editor in -e mode. Because we do a fork() first
	we need to be notified when the child has been stopped and then send
	that same signal to ourself so the shell can do its job control

	* visudo.c:
	Use WIFEXITED and WEXITSTATUS macros. If there are systems out
	there that want to run sudo that still don't support these we can
	try to deal with that later.

	* lex.yy.c:

	*, sudo.pod,, sudoers.pod:
	Document sudo -e / sudoedit

	* configure,
	fix typo


2004-01-21  Todd C. Miller  <>

	* sudo.c:
	Allow non-exclusive flags when invoked as sudoedit. Pretty print the
	long usage() line to not wrap (assumes 80 char display)

	*, sudo.c:
	If sudo is invoked as "sudoedit" the -e flag is implied and no other
	flags are permitted.

	* sudo.h:
	Add a new flag, -e, that makes it possible to give users the ability
	to edit files with the editor of their choice as the invoking user,
	not the runas user. Temporary files are used for the actual edit
	and the temp file is copied over the original after the editor is

	*, parse.c, parse.lex, sudo.c, sudo_edit.c:
	Add a new flag, -e, that makes it possible to give users the ability
	to edit files with the editor of their choice as the invoking user,
	not the runas user. Temporary files are used for the actual edit
	and the temp file is copied over the original after the editor is

	* env.c, sudo.c:
	If real uid == 0 and the SUDO_USER environment variables is set, use
	that to determine the invoking user's true identity. That way the
	proper info gets logged by someone who has done "sudo su" but still
	uses sudo to as root. We can't do this for non-root users since
	that would open up a security hole, though perhaps it would be
	acceptable to use getlogin(2) on OSes where this a system call (and
	doesn't just look in the utmp file).


	*, configure,
	Add check for fchown(2)

2004-01-20  Todd C. Miller  <>

	* sudo.c:
	Back out portions of the -i commit that set NewArgv[0] in
	set_runaspw. It is far to late to set NewArgv[0] there and will have
	no effect anyway as cmnd and safe_cmnd have already been set.

	* visudo.c, visudo.pod:
	Prefer VISUAL over EDITOR like old vipw did.

2004-01-19  Todd C. Miller  <>

	* env.c, sudo.c:
	In -i mode always set new environment based on the runas user's
	passwd entry.

2004-01-18  Todd C. Miller  <>

	*, sudo.pod:
	Document the new -i flag and sync SYNOPSIS section with usage() in
	sudo.c. Also sort the flags in the OPTIONS section.

	* sudo.c, sudo.h:
	o Add -i that acts similar to "su -", based on patches from David J.
	MacKenzie o Sort the flags in the usage message

	*, sudoers.pod:
	Add a missing @runas_default@ substitution.

2004-01-17  Todd C. Miller  <>

	* sudo.c:
	Change euid to runas user before calling find_path().
	Unfortunately, though runas_user can be modified in sudoers we
	haven't parsed sudoers yet.

	*, sudoers.pod:
	Add missing defintion of Parameter_List and use single pipes in the
	Defaults EBNF definition.

	* sudo.c:
	Fix a bug when set_runaspw() is used as a callback. We don't want
	to reset the contents of runas_pw if the user specified a user via
	the -u flag.

	Avoid unnecessary passwd lookups in set_authpw(). In most cases we
	already have the info in runas_pw.

2004-01-16  Todd C. Miller  <>

	* check.c:
	Add Stan Lee / Uncle Ben quote to the lecture from RedHat

	* sudo.h:
	Update sudo_getepw() proto and add one for set_runaspw()

	* parse.c:
	If we can't stat the command as root, try as the runas user instead.

	* testsudoers.c, visudo.c:
	Add stub set_runaspw() function

	* sudo.c:
	Add set_runaspw() function to fill in runas_pw. This will be used
	as a callback to update runas_pw when the runas user changes.

	* env.c, sudo.c:

	* set_perms.c, sudo.h:
	Rename PERM_RUNAS -> PERM_FULL_RUNAS and add a PERM_RUNAS that just
	changes the euid.

	* getspwuid.c:
	Make sudo_pwdup() act like OpenBSD pw_dup() and allocate memory in
	one chunk for easy free()ing. Also change it from static to extern.

	* defaults.c, defaults.h:
	Add callback support

	* mkdefaults:
	Add a callback field and use it for runas_default

	* def_data.c,
	Add a callback field and use it for runas_default

2004-01-15  Todd C. Miller  <>

	* auth/fwtk.c:
	Add support for chalnecho and display server responses used by fwtk
	>= 2.0

2004-01-12  Todd C. Miller  <>

	*, sudoers.pod: is on solaris

	*,, configure,, sudo.c, sudo.h:
	Use closefrom() instead of doing the equivalent inline.

	* closefrom.c:
	closefrom(3) for systems w/o it

2004-01-09  Todd C. Miller  <>

	Update from .pod file.

	* configure,
	Substitute noexec_file for the sudoers man page

	*, sudo.pod:
	Mention noexec

	*, sudoers.pod:
	Document noexec

	* auth/pam.c,,
	Move PAM_CONST macro definition from config.h to pam.c where it
	belongs. We can't have this in config.h since that gets included too

	* auth/pam.c,, configure,
	Some PAM implementations put their headers in /usr/include/pam
	instead of /usr/include/security.

	I missed changing the EXEC macro -> EXECV here when I changed this
	in and sudo.c a while ago.

	* acsite.m4:
	OpenBSD vax/m88k/hppa don't do shared libs

	* configure,
	o merge the hpux case entries into a single entry w/ its own sub-
	case statement. o HP-UX >= 11 support getspnam(), use it in
	preference to getprpwuid()

	* configure,
	eval $shrext so that it expands nicely on MacOS X

	Don't lie about making a module, it does the wrong thing on mach

	Remove requirement that libs must begin with "lib". They don't when
	we point directly at the lib using LD_PRELOAD or its equivalent.

	* acsite.m4:
	Disable support for c++, f77 and java. We don't need it, it takes a
	lot of time, and it hosed our check for shared lib support.

	* configure:

	Call AC_ENABLE_SHARED and check the status of enable_shared to know
	when shared libs are available.

	* acsite.m4:
	Duh, OpenBSD suports shared libs too

	Only OpenPAM and Linux PAM use const qualifiers.

	* configure,
	o No need to check for sed, libtool config does that for us o move
	check for --with-noexec until after libtool magic is run so we can
	use $can_build_shared and $shrext

	Don't print a bunch of crap about library installs since we are not
	really installing a library.

	* env.c:
	Make format_env() varargs Add noexec support for Darwin, MacOS X,
	Irix, and Tru64

	* acsite.m4, ltconfig,
	Update to libtool 1.5 with local changes: o no ldconfig in the
	finish step o assume no libprefix or version is needed

	* sudo_noexec.c:
	Fix compilation under K&R

2004-01-06  Todd C. Miller  <>


	* sudo_noexec.c:
	stub execve() that just returns EACCES; used for noexec

	Regen w/ updated byacc from OpenBSD; fixes a gcc 3.2 issue with
	generated code.

	Regen w/ updated byacc from OpenBSD; fixes a gcc 3.2 issue with
	generated code.

2004-01-05  Todd C. Miller  <>

	* def_data.c, def_data.h,
	Move the environment defaults to the end and shorten a few of the

	* configure,
	no shared libs on ultris or convexos

	*, configure,
	Build sudo_noexec shared object using libtool; could use some

	* acsite.m4, ltconfig,
	libtool scaffolding

	* parse.yacc,
	Merge the NOPASSWD/PASSWD and NOEXEC/EXEC rules so that order is not

	* defaults.c, env.c, lex.yy.c, parse.c, parse.h, parse.lex,
	parse.yacc,, sudo.c, sudo.h,
	update copyright year

	* configure,, defaults.c, env.c,
	Add _PATH_SUDO_NOEXEC and corresponding --with-noexec configure
	option. The default value of noexec_file is set to this.

	* def_data.c, def_data.h,, env.c, lex.yy.c, parse.c,
	parse.h, parse.lex, parse.yacc, sudo.c, sudo.h,,
	Add support for preloading a shared object containing a dummy
	execve() function that just sets error and returns -1. This adds a
	"noexec_file" option to load the filename as well as a "noexec" flag
	to enable it unconditionally. There is also a NOEXEC tag that can
	be attached to specific commands and an EXEC tag to disable it.

	* mkdefaults:
	add missing newline to usage statement

	*, sudo.c:
	Rename EXEC macro -> EXECV

	* logging.c:
	Don't truncate usernames to 8 characters in the log message.

	* check.c,, sudoers.pod:
	Update copyright year

	* check.c, def_data.c, def_data.h,,,
	Add a new option, lecture_file, that can be used to point to a
	custom sudo lecture.

2003-12-31  Todd C. Miller  <>

	* auth/aix_auth.c, auth/bsdauth.c, auth/fwtk.c, auth/pam.c,
	Add a zero_bytes() function to do the equivalent of bzero in such a
	way that will heopfully not be optimized away by sneaky compilers.

	* zero_bytes.c:
	Add a zero_bytes() function to do the equivalent of bzero in such a
	way that will heopfully not be optimized away by sneaky compilers.

	*, sudo.h:
	Add a zero_bytes() function to do the equivalent of bzero in such a
	way that will heopfully not be optimized away by sneaky compilers.

	* err.c:
	Use #ifdef __STDC__, not #if __STDC__.

2003-12-30  Todd C. Miller  <>

	* mkdefaults:
	Always put at least one space between the def_* macro name and its

	* configure,
	Adjust code for --without-lecture to match new values.

	regen after pasto fix

	*, sudoers.pod:
	Document that "lecture" has changed from a flag to a tuple.

	* check.c, def_data.c, def_data.h,, defaults.c,
	defaults.h, logging.c, mkdefaults, parse.c, sudo.c, sudo.h:
	Add support for tuples in; these are implemented as an
	enum type. Currently there is only a single tuple enum but in the
	future we may have one tuple enum per T_TUPLE entry in
	Currently listpw, verifypw and lecture are tuples. This avoids the
	need to have two entries (one ival, one str) for pwflags and syslog

	lecture is now a tuple with the following values: never, once,

	We no longer use both an int and string entry for syslog facilities
	and priorities. Instead, there are logfac2str() and logpri2str()
	functions that get used when we need to print the string values.

	* auth/aix_auth.c, auth/bsdauth.c, auth/fwtk.c, auth/pam.c,
	auth/rfc1938.c, auth/securid5.c, auth/sia.c, auth/sudo_auth.c,
	check.c, def_data.h, defaults.c, defaults.h, env.c, find_path.c,
	logging.c, mkdefaults, parse.c, parse.yacc, set_perms.c, sudo.c,, visudo.c:
	Create def_* macros for each defaults value so we no longer need the
	def_{flag,ival,str,list,mode} macros (which have been removed). This
	is a step toward more flexible data types in

	* TODO:

2003-12-23  Todd C. Miller  <>

	* sudo.c:
	If we are in -k/-K mode, just spew to stderr. It is not unusual for
	users to place "sudo -k" in a .logout file which can cause sudo to
	be run during reboot after the YP/NIS/NIS+/LDAP/etc daemon has died.
	Previously, this would result in useless mail and logging.

2003-12-16  Todd C. Miller  <>

	* visudo.pod:
	fix pasto in VISUAL description

2003-12-10  Todd C. Miller  <>

	* configure:


	Some OSes (like Solaris) allow export w/ nosuid too

2003-08-12  Todd C. Miller  <>

	* compat.h:
	We don't use FD_ZERO anymore so just define FD_SET (if not already

2003-06-29  Todd C. Miller  <>

	* auth/pam.c:
	Fix a core dump on Solaris by preserving the pam_handle_t we used
	during authentication for pam_prep_user(). If we didn't
	authenticate (ie: ticket still valid), we call pam_init() from
	pam_prep_user(). This is something of a hack; it may be better to
	change the auth API and add an auth_final() function that acts like

2003-06-21  Todd C. Miller  <>

	* set_perms.c:
	Add explicit declaration of printerr variable in function header
	(was defaulting to int which is OK but oh so K&R :-). From Theo.

2003-06-09  Todd C. Miller  <>


	* logging.c:
	Also exit waitpid() loop when pid == 0. Fixes a problem where the
	sudo process would spin eating up CPU until sendmail finished when
	it has to send mail.

2003-05-30  Todd C. Miller  <>

	* fnmatch.c:
	Remove advertising clause, UCB has disavowed it

	* fnmatch.3:
	Remove advertising clause, UCB has disavowed it

2003-05-22  Todd C. Miller  <>

	* parse.c:
	Don't assume that getgrnam() calls don't modify contents of struct
	passwd returned by getpwnam(). On FreeBSD w/ NIS this can happen.
	Based on a patch from Kirk Webb.

2003-05-06  Todd C. Miller  <>

	missing ;;

	darwin has a broken setreuid() in at least some versions

	* env.c:
	Fix an off by one error when reallocating the environment; Kevin Pye

2003-04-30  Todd C. Miller  <>

	* sudoers.pod:
	Fix User_Spec definition; SEKINE Tatsuo

2003-04-28  Todd C. Miller  <>

	More info on the early days from Coggs.

2003-04-21  Todd C. Miller  <>

	* auth/kerb5.c:
	remove errant semicolon that prevented compilation under heimdal

2003-04-16  Todd C. Miller  <>

	* testsudoers.c, tgetpass.c, visudo.c,, visudo.pod:
	add DARPA credit on affected files

	* sudoers.pod:
	add DARPA credit on affected files

	* sigaction.c, strerror.c, sudo.c, sudo.h,, sudo.pod,
	add DARPA credit on affected files

	* set_perms.c:
	add DARPA credit on affected files

	add DARPA credit on affected files

	* logging.c, parse.c:
	add DARPA credit on affected files

	* auth/passwd.c, auth/rfc1938.c, auth/secureware.c, auth/securid.c,
	auth/securid5.c, auth/sia.c, auth/sudo_auth.c, fileops.c,
	find_path.c, getprogname.c, getspwuid.c, goodpath.c, interfaces.c,
	add DARPA credit on affected files

	* auth/kerb5.c, auth/pam.c:
	add DARPA credit on affected files

	* auth/afs.c, auth/aix_auth.c, auth/bsdauth.c, auth/dce.c,
	auth/fwtk.c, auth/kerb4.c, parse.lex, parse.yacc, utime.c,
	add DARPA credit on affected files

	* env.c:
	add DARPA credit on affected files

	* defaults.c, defaults.h:
	add DARPA credit on affected files

	* compat.h:
	add DARPA credit on affected files

	*, alloc.c, check.c:
	add DARPA credit on affected files

	slightly different wording for the darpa credit

2003-04-15  Todd C. Miller  <>

	Add DARPA credit

2003-04-14  Todd C. Miller  <>

	* auth/kerb5.c:
	Use krb5_princ_component() instead of krb5_princ_realm() for MIT
	Kerberos like we did before I messed things up ;-)

	Use krb5_principal_get_comp_string() to do the same thing w/
	Heimdal. I'm not sure if the component should be 0 or 1 in this

	#define ENCTYPE_DES_CBC_MD5 ETYPE_DES_CBC_MD5 for Heimdal since
	older versions lack ENCTYPE_DES_CBC_MD5. This is gross and there
	should be a configure check for this I guess.

2003-04-13  Todd C. Miller  <>

	* sample.sudoers:
	builtin -> built-in; Jason McIntyre

	* TROUBLESHOOTING,, configure,
	builtin -> built-in; Jason McIntyre

	* sudoers.pod:
	built in -> built-in; Jason McIntyre

2003-04-09  Todd C. Miller  <>

	checkpoint for 1.6.7p3

	Update info on the early years @ SUNY-Buffalo from Cliff Spencer.
	Amazingly, sudo source from 1985 is available via

	* sudo.c:
	Don't change rl.rlim_max for RLIMIT_CORE. We need only set
	rl.rlim_cur to 0 to turn off core dumps. This may be needed for the
	RLIMIT_CORE restoration on some OSes.

2003-04-04  Todd C. Miller  <>

	* auth/kerb5.c:
	Make this compile on Heimdal and MIT Kerberos 5

	*, configure,
	Check for heimdal even if we found krb5-config and define

	* auth/kerb5.c:
	Replace ETYPE_DES_CBC_MD5 with ENCTYPE_DES_CBC_MD5. The former is
	no longer defined by MIT kerb5 (though it used to be and indeed
	remains so in Heimdal).

2003-04-03  Todd C. Miller  <>

	* mkinstalldirs:
	Remove newer stuff that passes multiple (possibly duplicate)
	directories to "mkdir -p" since that seems to break on Tru64 Unix at
	least. This basically brings back what shipped with sudo 1.6.6.

2003-04-02  Todd C. Miller  <>

	* auth/kerb5.c:
	Correct number of args to krb5_principal_get_realm() and fix an
	unclosed comment that hid the bug.

	* configure:




	* INSTALL.binary:


	* CHANGES, version.h:

	* BUGS:

	use krb5-config to determine Kerberos V details if it exists

	* alloc.c, auth/fwtk.c, auth/rfc1938.c, auth/securid.c,
	auth/securid5.c, auth/sia.c, check.c, compat.h, defaults.c, env.c,
	find_path.c, interfaces.c, logging.c, parse.c, sudo.c, sudo.h,
	testsudoers.c, visudo.c:
	Use warn/err and getprogname() throughout. The main exception is
	openlog(). Since the admin may be filtering logs based on the
	program name in the log files, hard code this to "sudo".

	Add getprogname.c and err.c

	* configure:

	Add checks for getprognam(), __progname and err.h

	* emul/err.h:
	For systems withour err/warn functions.

	* err.c:
	For systems withour err/warn functions.

	* getprogname.c:
	For systems neither getprogname() nor __progname; uses Argv[0].

2003-04-01  Todd C. Miller  <>

	checkpoint for 1.6.7p1

	* sudo.c, testsudoers.c:
	fix strlcpy() rval check (innocuous)

	* check.c:
	oflow detection in expand_prompt() was faulty (false positives). The
	count was based on strlcat() return value which includes the length
	of the entire string.

2003-03-31  Todd C. Miller  <>

	checkpoint for the sudo 1.6.7 release
	[096bab4da29a] [SUDO_1_6_7]

	checkpoint for the sudo 1.6.7 release

2003-03-24  Todd C. Miller  <>

	* logging.c:
	g/c unused variable

	* configure:

	use man sections 8 and 5 for csops

2003-03-21  Todd C. Miller  <>

	* configure:

	Add -lskey or -lopie directly to SUDO_LIBS instead of having
	AC_CHECK_LIB() add them to LIBS. Fixes visudo linkage.

	* configure:

	Add --with-blibpath for AIX. An alternate libpath may be specified
	-blibpath support can be disabled. Also change conifgure such that
	-blibpath is not specified if no -L libpaths were added to

	* aclocal.m4:
	Add --with-blibpath for AIX. An alternate libpath may be specified
	-blibpath support can be disabled. Also change conifgure such that
	-blibpath is not specified if no -L libpaths were added to

	Add --with-blibpath for AIX. An alternate libpath may be specified
	-blibpath support can be disabled. Also change conifgure such that
	-blibpath is not specified if no -L libpaths were added to

	add AIX blibpath support

	--with-skey and --with-opie now take an option directory argument
	This obsoletes a --with-csops hack (/tools/cs/skey)

	Also remove the remaining direct uses of "echo"

2003-03-20  Todd C. Miller  <>

	Detect KTH Kerberos IV and deal with it. Also make -lroken optional
	for KTH Kerberos IV and V.

	* aclocal.m4:
	Add SUDO_APPEND_LIBPATH function that add -L/path/to/dir (and
	-R/path/to/dir if $with_rpath) to the specified variable.

	Add -R/path/to/libs for Solaris and SVR4. There is a new configure
	option, --with-rpath to control this behavior.

	for kerb4 put libdes after libkrb on the link line

	* auth/kerb4.c:

	fix kerberos lib check when a path is specified

	* logging.c:
	Fix boolean thinko in SIGCHLD reaper and call reapchild after
	sending mail instead of doing a conditional sudo_waitpid.

2003-03-19  Todd C. Miller  <>

	* configure:

	replace =DIR with [=DIR] where sensible

	o Use AC_MSG_* instead of "echo" o New Kerberos include/lib
	detection based on openssh's

	--with-kerb4 and --with-kerb5 now take an optional argument.

2003-03-16  Todd C. Miller  <>

	* auth/securid.c:
	Kill remaining strcpy(), the programmer's guide says username is 32

	* auth/kerb4.c:
	trat uid_t as unsigned long for printf and use snprintf, not sprintf

	* auth/rfc1938.c:
	use snprintf

2003-03-15  Todd C. Miller  <>

	* auth/afs.c, auth/aix_auth.c, auth/bsdauth.c, auth/dce.c,
	auth/fwtk.c, auth/kerb4.c, auth/kerb5.c, auth/pam.c, auth/passwd.c,
	auth/rfc1938.c, auth/sudo_auth.c:
	update copyright year

	update copyright year

	* LICENSE,, aclocal.m4, alloc.c, check.c, compat.h,, env.c, find_path.c, interfaces.c, logging.c, parse.c,
	parse.lex, parse.yacc, set_perms.c, sudo.c, sudo.h, sudo.pod,
	sudoers.pod, testsudoers.c, version.h, visudo.c, visudo.pod:
	update copyright year

	* check.c, env.c, sudo.c:
	Cast [ug]ids to unsigned long and printf with %lu

	* configure:

	correct error messages for --with-sudoers-{mode,uid,gid}

	* alloc.c:
	make the malloc(0) error specific to each function to aid tracking
	down bugs.

	* alloc.c:
	deal with platforms where size_t is signed and there is no SIZE_MAX

	* auth/kerb5.c:
	Make this compile w/ Heimdal and fix some gcc warnings.

	* sudo.c:
	Use stat_sudoers macro so --with-stow can work

	* INSTALL,, configure,
	Add support for --with-stow based on patches from Robert Uhl

	* env.c:
	fix indentation

	back out rev 1.352

	* lex.yy.c:

	* parse.lex:
	use strlcpy, not strncpy

	* set_perms.c:
	Fix typo; check pw_uid, not pw_gid after setusercontext() failure.

	* logging.c:
	use pid_t

2003-03-14  Todd C. Miller  <>

	* strlcat.c, strlcpy.c:
	Make gcc shutup about unused rcsid

	* interfaces.c:
	Move the n == 0 check for the non-getifaddrs cas

	* auth/rfc1938.c:
	skeychallenge() on NetBSD take a size parameter

	* configure:

	put -ldl after -lpam, not before; fixes static linking on Linux

	* interfaces.c:
	Avoid malloc(0) and fix the loop invariant for the getifaddrs()



	Preserve copyright notice from .pod file in file

	* visudo.pod:
	Add sudoers(5) to SEE ALSO

2003-03-13  Todd C. Miller  <>

	* lex.yy.c:

	* parse.lex:
	Don't assume libc can realloc() a NULL string. If malloc/realloc
	fails, make sure we just return; yyerror() is not terminal.

	* lex.yy.c:

	* parse.lex:
	simplify fill_args a little and use strlcpy for paranoia


	* check.c, env.c, find_path.c, parse.c, parse.yacc, sudo.c,
	Use strlc{at,py} for paranoia's sake and exit on overflow. In all
	cases the strings were either pre-allocated to the correct size of
	length checks were done before the copy but a little paranoia can go
	a long way.

	* sudo.h:
	Add strlc{at,py} protos

	* env.c, interfaces.c:
	Use erealloc3()

	* configure:

	* alloc.c:
	Oflow test of nmemb > SIZE_MAX / size is fine (don't need >=). Use
	memcpy() instead of strcpy() in estrdup() so this is strcpy()-free.

	* sudo.c:
	snprintf() a uid as %lu, not %ld to match the MAX_UID_T_LEN test in

	* aclocal.m4:
	In MAX_UID_T_LEN test cast uid_t to unsigned long, just unsigned.

2003-03-12  Todd C. Miller  <>

	* sudo.c:
	Use snprintf() for paranoia

	* parse.yacc:
	Use emalloc2 and erealloc3

	strlc{at,py} for those w/o it

	* strlcat.c, strlcpy.c:
	stlc{at,py} for those w/o it.

	*, configure,
	Add stlc{at,py} for those w/o it.

	* alloc.c, sudo.h:
	Add erealloc3(), a realloc() version of emalloc2().

	* interfaces.c, sudo.c:
	Use emalloc2() to allocate N things of a certain size.

	* alloc.c, sudo.h:
	Add emalloc2() -- like calloc() but w/o the bzero and with
	error/oflow checking.

	* alloc.c:
	Error out on malloc(0); suggested by theo

2003-03-10  Todd C. Miller  <>

	* configure,
	fix a typo; David Krause

2003-03-07  Todd C. Miller  <>

	* sudo.pod:
	fix typo

2003-03-04  Todd C. Miller  <>

	* env.c:
	Remove DYLD_ from the environment for MacOS X; from bbraun

2003-03-01  Todd C. Miller  <>

	not not; Anil Madhavapeddy

2003-01-23  Todd C. Miller  <>

	* sudo.pod, sudoers.pod, visudo.pod:

2003-01-20  Todd C. Miller  <>

	* parse.yacc:
	Add some missing ';' rule terminators that bison warns about.

	* config.sub:
	fix typo I introduced in last merge

	* configure:
	regenerate with autoconf 2.57

	Add missing "$HOME"

	Add some more square backets to make autoconf 2.57 happy

	* config.sub, mkinstalldirs:
	Updates from autoconf-2.57

	* config.guess:
	Updates from autoconf-2.57

2003-01-17  Todd C. Miller  <>


	* lex.yy.c,

	* parse.lex, parse.yacc, sudoers.pod:
	Add support for Defaults>RunasUser

2003-01-07  Todd C. Miller  <>

	* visudo.c:
	fclose() yyin after each yyparse() is done and use fopen() instead
	of using freopen().

	* parse.lex:
	Better fix for sudoers files w/o a newline before EOF. It looks
	like the issue is that yyrestart() does not reset the start
	condition to INITIAL which is an issue since we parse sudoers
	multiple times.

2003-01-06  Todd C. Miller  <>

	* parse.lex:
	Work around what appears to be a flex bug when dealing with files
	that lack a final newline before EOF. This adds a rule to match EOF
	in the non-initial states which resets the state to INITIAL and
	throws an error.

	* visudo.c:
	o The parser needs sudoers to end with a newline but some editors
	(emacs) may not add one. Check for a missing newline at EOF and
	add one if needed. o Set quiet flag during initial sudoers parse (to
	get options) o Move yyrestart() call and always use freopen() to
	open yyin after initial sudoers parse.

2002-12-15  Todd C. Miller  <>

	* set_perms.c:
	Fix pasto/thinko in setresgid()/setregid() usage. Want to set
	effective gid, not real gid, when reading sudoers.

	* set_perms.c:
	don't compile set_perms_posix if we have setreuid or setresuid

2002-12-14  Todd C. Miller  <>

	* sudo.pod, sudoers.pod:
	document new prompt escapes

	* check.c:
	Add %U and %H escapes and redo prompt rewriting. "%%" now gets
	collapsed to "%" as was originally intended. This also gets rid of
	lastchar (does lookahead instead of lookback) which should simplify
	the logic slightly.

2002-12-13  Todd C. Miller  <>

	* tgetpass.c:
	Write the prompt *after* turning off echo to avoid some password
	characters being echoed on heavily-loaded machines with fast

	* config.sub:
	Add support for mipseb;

	Fix IRIX fallout from name changes in man dir/sect Makefile
	variables. Patch from erici AT motown DOT cc DOT utexas DOT edu

	* auth/pam.c:
	Keep a local copy of tgetpass_flags so we don't add in TGP_ECHO to
	the global copy. Problem noted by Peter Pentchev.

2002-11-28  Todd C. Miller  <>


	* parse.yacc:
	Add missing yyerror() calls; YYERROR does not seem to call this for

2002-11-26  Todd C. Miller  <>

	* sudo.c:
	fix typo in comment; Pedro Bastos

2002-11-22  Todd C. Miller  <>

	document --disable-setresuid

	* auth/aix_auth.c, auth/bsdauth.c, auth/fwtk.c, auth/pam.c,
	Sprinkle some volatile qualifiers to prevent over-enthusiastic
	optimizers from removing memset() calls.

	* logging.c, parse.yacc:
	minor sign fixes pointed out by gcc -Wsign-compare

	* set_perms.c, sudo.c, sudo.h:
	Revamp set_perms. We now use a version based on setresuid() or
	setreuid() when possible since that allows us to support the
	stay_setuid option and we always know exactly what the semantics
	will be (various Linux kernels have broken POSIX saved uid support).

	*, configure:
	regen from

	Add checks for setresuid() and a way to disable using it

	* compat.h:
	No long need to emulate set*[ug]id() via setres[ug]id() or
	setre[ug]id(). The new set_perms stuff only uses things it knows are

	* sudo.c:
	Before exec, restore state of signal handlers to be the same as when
	we were initialy invoked instead of just reseting to SIG_DFL. Fixes
	a problem when using sudo with nohup. Based on a patch from Paul

	* sudo.c:
	o timestamp_uid should be uid_t, not int o clarify error message
	when sudo is run by root and no_root_sudo is set

2002-09-19  Todd C. Miller  <>

	update ftp link for bison

2002-07-20  Todd C. Miller  <>

	* set_perms.c:
	Error out if setusercontext() fails and the runas user is not root.

2002-05-20  Todd C. Miller  <>

	* auth/securid5.c:
	Fix rcsid

	Fix SecurID API test

2002-05-17  Todd C. Miller  <>

	* env.c:
	typo in comment

	securid5 stuff needs pthreads. Just adding -lpthread is suboptimal
	but I don't see a better way at the moment.

	*, auth/securid5.c:
	SecurID API version 5 support from Michael Stroucken

	Add check for SecurID 5.0 API

2002-05-08  Todd C. Miller  <>

	* strerror.c:
	We actually do still need config.h to get the 'const' definition for
	K&R C.

2002-05-05  Todd C. Miller  <>

	* configure:
	regen with autoconf 2.5.3

	Don't set sysconfdir to '/etc' if the user has specified a --prefix.

	Some fixes for autoconf 2.53 from Robert Uhl o don't AC_SUBST
	LIBOBJS o force a 4th arg for AC_CHECK_HEADER() to workaround a bug

	* env.c, sudo.c, sudo.h:
	No need for dump_badenv() now that dump_defaults() knows how to dump


	* sudoers.pod:
	document timestampowner

	* check.c:
	Don't call set_perms() when doing timestamp stuff unless
	timestamp_uid != 0.

	* auth/sudo_auth.c, check.c, logging.c, parse.c, set_perms.c, sudo.c,
	sudo.h, testsudoers.c:
	g/c second arg to set_perms--it is no longer used

2002-05-03  Todd C. Miller  <>

	* check.c, set_perms.c, sudo.c, sudo.h:
	Add support for non-root timestamp dirs. This allows the timestamp
	dir to be shared via NFS (though this is not recommended).

	* def_data.c, def_data.h,
	Add timestampowner, "Owner of the authentication timestamp dir"

2002-05-02  Todd C. Miller  <>

	* env.c:
	Don't try to pre-compute the size of the new envp, just allocate
	space up front and realloc as needed. Changes to the new env
	pointer must all be made through insert_env() which now keeps track
	of spaced used and allocates as needed.

2002-04-26  Todd C. Miller  <>

	* configure:

	Fix two typo/pastos; from

2002-04-25  Todd C. Miller  <>

	* INSTALL.binary, README:
	[a1e33027278c] [SUDO_1_6_6]

	* configure,,,,,,

	Sync with 1.6.6

	* check.c:
	The the loop used to expand %h and %u, the lastchar variable was not
	being initialized. This means that if the last char in the prompt
	is '%' and the first char is 'h' or 'u' a extra copy of the host or
	user name would be copied, for which space had not been allocated.

2002-04-18  Todd C. Miller  <>

	* BUGS, INSTALL,,, version.h:
	crank version to 1.6.6

	* auth/afs.c:
	#undef VOID to get rid of an AFS warning

	* env.c:
	Use easprintf instead of emalloc + sprintf for some things.

2002-03-16  Todd C. Miller  <>

	* lex.yy.c,

	* parse.c, parse.lex, parse.yacc, testsudoers.c:
	Remove Chris Jepeway's email address so people don't bug him ;-)

2002-03-12  Todd C. Miller  <>

	* sudo.c:
	Move endpwent() to be after set_perms(PERM_RUNAS, ...) and also call
	endgrent() at the same time.

2002-02-22  Todd C. Miller  <>

	Make it clear which configure options take arguments.

2002-01-25  Todd C. Miller  <>

	* compat.h:
	HP-UX 9.x has RLIMIT_* but no RLIM_INFINITY. If there is no
	RLIM_INFINITY, just pretend it is -1. This works because we only
	check for RLIM_INFINITY and do not set anything to that value.

2002-01-22  Todd C. Miller  <>

	* auth/pam.c:
	Zero and free allocated memory when there is a conversation error.

	* auth/bsdauth.c:
	Use sigaction() not signal()

	Mention that some linux kernels have broken POSIX saved ID support

	checkpoint for 1.6.5p2

	* configure:

	Add --disable-setreuid flag

	Document new --disable-setreuid option and change description for
	--disable-saved-ids to match new error message.

	* set_perms.c:
	fatal() now takes an argument that determines whether or not to call

	Update for new error messages from set_perms()

	Update for new error messages from set_perms()

2002-01-21  Todd C. Miller  <>

	* auth/pam.c:
	Make this compile w/o warnings

	* auth/pam.c:
	Mention that we can't use pam_acct_mgmt()

	* auth/aix_auth.c, auth/bsdauth.c, auth/fwtk.c, auth/pam.c:
	The user's password was not zeroed after use when AIX
	authentication, BSD authentication, FWTK or PAM was in use.

2002-01-20  Todd C. Miller  <>

	* auth/pam.c:
	Avoid giving PAM a NULL password response, use the empty string
	instead. This avoids a log warning when the user hits ^C at the
	password prompt when PAM is in use.

	* auth/pam.c:
	Don't check the return value of pam_setcred(). In Linux-PAM 0.75
	pam_setcred() returns the last saved return code, not the return
	code for the setcred module. Because we haven't called
	pam_authenticate(), this is not set and so pam_setcred() returns

	Don't need a '/' between $(DESTDIR) and a directory.

	* Makefile.binary:
	Don't need a '/' between $(DESTDIR) and a directory.

2002-01-18  Todd C. Miller  <>

	* configure:

	o BSDi also has a bogus setreuid() o Old FreeBSD has a bogus
	setreuid() o new NetBSD has a real setreuid() o add check for
	freeifaddrs() if getifaddrs() exists.

	*, interfaces.c:
	Older BSDi releases lack freeifaddrs() so add a test for that and if
	it is not present just use free().

2002-01-17  Todd C. Miller  <>

	Checkpoint for 1.6.5p1

	* auth/passwd.c:
	Return AUTH_FAILURE in passwd_init() if skeyaccess() denies access
	to normal passwords, not AUTH_FATAL (which just causes an exit).

	* visudo.c:
	Don't use memory after it has been freed.

	* auth/passwd.c:
	skeyaccess() wants a struct passwd * not a char *; Patch from
	Phillip E. Lobbes
	[65a1d3806fcd] [SUDO_1_6_5]

	* BUGS:

	checkpoint for sudo 1.6.5

2002-01-16  Todd C. Miller  <>

	* configure:

	version 1.6.5

	sudo version 1.6.5

	* logging.c:
	o when invoking the mailer as root use a hard-coded environment that
	doesn't include any info from the user's environment. Basically

	o Add support for the NO_ROOT_MAILER compile-time option and run the
	mailer as the user and not root if NO_ROOT_MAILER is defined.

	* set_perms.c, sudo.h:
	Bring back PERM_FULL_USER

	* configure:

	* version.h:
	version 1.6.5

	Add --disable-root-mailer option to run the mailer as the user and
	not root.

	checkpoint for 1.6.4p2

	Mention the "seteuid(0): Operation not permitted" problem here too
	just for good measure.

2002-01-15  Todd C. Miller  <>

	* env.c, getspwuid.c, sudo.c:
	The SHELL environment variable was preserved from the user's
	environment instead of being reset based on the passwd database when
	the "env_reset" option was used. Now it is reset as it should be.

	* configure:

	Add a configure option to turn off use of POSIX saved IDs

	* configure:

	add --with-efence option

	* sudo.c:
	Only OR in MODE_RESET_HOME if MODE_RUN is set. Fixes a problem where
	"sudo -l" would not work if always_set_home was set.

	* lex.yy.c:

	* parse.lex:
	Quoted commas were not being treated correctly in command line

	* sudo.c:
	o Move the call to rebuild_env() until after MODE_RESET_HOME is set.
	Otherwise, the set_home option has no effect.

	o Fix use of freed memory when the "fqdn" flag is set. This was
	introduced by the fix for the "segv when gethostbynam() fails" bug.
	Also, we no longer call set_fqdn() if the "fqdn" flag is not set so
	there is no need to check the "fqdn" flag in set_fqdn() itself.

	* env.c:
	Add 'continue' statements to optimize the switch statement. From

2002-01-13  Todd C. Miller  <>

	Regen from new sudoers.pod
	[6ecc07b3d0e1] [SUDO_1_6_4]

	* sudoers.pod:
	Add caveat about stay_setuid flag

	* sudo.c:
	If set_perms == set_perms_posix and the stay_setuid flag is not set,
	set all uids to 0 and use set_perms_fallback().

	* set_perms.c, sudo.h:
	Remove PERM_FULL_USER (which is no longer used) and add
	PERM_FULL_ROOT (used when exec'ing the mailer).

	* logging.c:
	Use set_perms(PERM_FULL_ROOT, 0) before exec'ing the mailer since we
	never want to run the mailer setuid.

2002-01-12  Todd C. Miller  <>

	*,, sudo.pod,,,
	Use instead of in URLs

	* Makefile.binary,
	Fix mansect substitution

	Substitute man sections in Makefile.binary

	* Makefile.binary:
	Sync install targets with and substitute in man

	version is 1.6.4

	Repair bindist target

	sync for 1.6.4

2002-01-10  Todd C. Miller  <>

	* install-sh:
	Fix case where neither whoami nor id are found

2002-01-09  Todd C. Miller  <>

	* install-sh:
	If neither whoami nor id exists, just assume we are root.

	* alloc.c:
	Add explicit cast to (VOID *) on malloc/realloc. Seems to be needed
	on AIX which for some reason isn't pulling in the malloc prototype.

2002-01-08  Todd C. Miller  <>

	*, aclocal.m4, compat.h, parse.c, sudo.c:
	(c) 2002


	* sudo.c:
	Defer assigning new environment until right before the exec.

	* parse.c:
	kill extra blank line

2002-01-07  Todd C. Miller  <>

	* configure:

	Use -O not -O2 for m88k-motorola-sysv* since motorola gcc-derived
	compiler doesn't recognise -O2.

	Clarify origins of Root Group sudo a bit based on info from

2002-01-03  Todd C. Miller  <>


	checkpoint for 1.6.4rc1

2002-01-02  Todd C. Miller  <>

	now generated via autoheader

	* configure:

	* compat.h:
	Move in some stuff that was previously in config.h.

	* aclocal.m4,
	Add info for autoheader.

2002-01-01  Todd C. Miller  <>

	o Add DESTDIR support o Use -M, -O, and -G instead of -m, -o, and
	-g to facilitate non-root installs

	* install-sh:
	Add -M option (like -m but only for root) If we can't find "whoami",
	use "id" w/ some sed.

	* configure:

	allow user to always override mansectsu and mansectform

2001-12-31  Todd C. Miller  <>

	* mkinstalldirs:
	update from autoconf 2.52

	* config.guess, config.sub:
	Update from autoconf 2.52

	* configure:
	regen with autoconf 2.52

	o Call AC_PROG_CC_STDC to find out how to run the compiler in ANSI
	mode o Remove compiler-specific checks for HP-UX now that we use


	* auth/pam.c:
	o Add pam_prep_user function to call pam_setcred() for the target
	user; on Linux this often sets resource limits. o When calling
	pam_end(), try to convert the auth->result to a PAM_FOO value.
	This is a hack--we really need to stash the last PAM_FOO value
	received and use that instead.

	* set_perms.c, sudo.h:
	o Add pam_prep_user function to call pam_setcred() for the target
	user; on Linux this often sets resource limits.

	* env.c:
	Fix off by one error in number of bytes allocated via malloc (does
	not affected any released version of sudo).

2001-12-30  Todd C. Miller  <>

	* lex.yy.c:

	* parse.lex:
	Allow '@', '(', ')', ':' in arguments to a defaults variable w/o
	requiring that they be quoted.

	*,, sudoers.pod:
	Mention that no double quotes are needed when
	adding/deleting/assigning a single value to a list.

	Don't rely on mkdefaults being executable, call perl explicitly.


	* parse.yacc:
	Remove some XXX that are no longer relevant.

	* defaults.c:
	o Roll our own loop instead of using strpbrk() for better
	grokability o When adding to a list we must malloc() and use
	memcpy(), not strdup() since we must only copy len bytes from str.

2001-12-21  Todd C. Miller  <>


	* parse.yacc:
	typo in comment

2001-12-19  Todd C. Miller  <>


	* configure:

	avoid the -g flag unless --with-devel was specified

	mkdefaults, and sigaction.c were missing from the

	def_data.c was missing

2001-12-18  Todd C. Miller  <>

	* env.c:
	Fix setting of $USER and $LOGNAME in the non-reset_env case. Also
	allow HOME, SHELL, LOGNAME, and USER to be specified in keep_env

	* TODO:
	Another TODO item

	* sudoers:
	Add comment for Default section so folks know where it should go.

2001-12-17  Todd C. Miller  <>

	* tgetpass.c:
	Use TCSETAF, not TCSETA to set terminal in termio case

	regen from sudoers.pod

	* sudoers.pod:
	o Typo, Runas_User_List should be Runas_List o a User_List can not
	contain a uid o mention that the Defaults section should come after
	Alias definitions but before the user specifications

2001-12-15  Todd C. Miller  <>


	* sudoers.pod:
	Fix listpw and verifypw sections, they were not being formatted


	* sudoers.pod:
	fix typos

	* configure:

	use AC_SYS_POSIX_TERMIOS instead of rolling our own

	Reference not

	Add notes on shadow passwords

	* BUGS:
	In list mode (sudo -l), characters escaped with a backslash are
	shown verbatim with the backslash.

	* sudoers:
	Add simple examples from OpenBSD (Marc Espie)

	* tgetpass.c:
	Catch SIGTTIN and SIGTTOU too and treat them like SIGTSTP.

	minor prettyification

	Updated change log

	* testsudoers.c:
	Fix CIDR handling here too.

	* auth/pam.c:
	Apparently a NULL response is OK

	* TODO:
	Checkpoint for upcoming beta release

	Many people believe that adding a runas spec should obviate the need
	for the -u flag. It does not.

	checkpoint update for upcoming 1.6.4 beta

	if HAVE_STRING_H is defined -- this is safe now

	Add signals section

	* configure:

	Fix check for sigaction_t

	* sudo.c:
	XXX - should call find_path() as runas user, not root. Can't do
	that until the parser changes though.

	* sudo.c:
	If find_path() fails as root, try again as the invoking user (useful
	for NFS). Idea from Chip Capelik.

	Regenerate after pod file changes

	* def_data.c, def_data.h,, set_perms.c, sudo.c, sudo.h,
	sudo.pod, sudoers.pod:
	Add new sudoers option "preserve_groups". Previously sudo would not
	call initgroups() if the target user was root. Now it always calls
	initgroups() unless the -P command line option or the
	"preserve_groups" sudoers option is set. Idea from TJ Saunders.

2001-12-14  Todd C. Miller  <>

	* compat.h,
	Use new HAVE_SIGACTION_T define

	* logging.c:
	Fix compilation on K&C

	* configure:

	Add check for sigaction_t -- IRIX already defines this so don't
	redefine it.

	* snprintf.c:
	fix typo

	* interfaces.c:
	need stdlib.h here too

	* configure:

	Remove redundant checks for string.h, strings.h and unistd.h

	Regen from pod files

	* BUGS:
	Update for 1.6.4

	* configure, lex.yy.c,

	* strerror.c:
	Return EINVAL if errnum > sys_nerr

	* auth/sudo_auth.h:
	o Update copyright year

	* LICENSE, Makefile.binary,, aclocal.m4, compat.h,, defaults.h, interfaces.h,, sudo.h,
	o Update copyright year

	o Don't define STDC_HEADERS unconditionally for IRIX o Update
	copyright year

	update version

	* auth/afs.c, auth/aix_auth.c, auth/bsdauth.c, auth/dce.c,
	auth/fwtk.c, auth/kerb4.c, auth/kerb5.c, auth/pam.c, auth/passwd.c,
	auth/rfc1938.c, auth/secureware.c, auth/securid.c, auth/sia.c,
	auth/sudo_auth.c, logging.c, parse.c, parse.lex, parse.yacc,
	set_perms.c, snprintf.c, sudo.c, testsudoers.c, tgetpass.c, utime.c,
	o Reorder some headers and use STDC_HEADERS define properly o Update
	copyright year

	* lsearch.c:
	o Reorder some headers and use STDC_HEADERS define properly o Update
	copyright year

	* getspwuid.c, goodpath.c, interfaces.c:
	o Reorder some headers and use STDC_HEADERS define properly o Update
	copyright year

	* getcwd.c:
	o Reorder some headers and use STDC_HEADERS define properly o Update
	copyright year

	* alloc.c, check.c, defaults.c, env.c, fileops.c, find_path.c,
	o Reorder some headers and use STDC_HEADERS define properly o Update
	copyright year

	* configure:

	* tgetpass.c:
	flags set in signal handlers should be volatile sig_atomic_t

	Add checks for volatile and sig_atomic_t

	* configure, lex.yy.c:

	* def_data.c, def_data.h,, defaults.c, env.c, find_path.c,
	sudo.c, sudoers.pod:
	Remove "secure_path" Defaults option since it cannot work with the
	existing parser.

	* find_path.c, sudo.c:
	Unset "secure_path" if user_is_exempt()

	* env.c,
	o Remove assumption that PATH and TERM are not listed in env_keep o
	If no PATH is in the environment use a default value o If TERM is
	not set in the non-reset case also give it a default value.

	* aclocal.m4,, defaults.c,
	_PATH_SENDMAIL -> _PATH_SUDO_SENDMAIL so --without-sendmail works on
	systems that define in paths.h

	* auth/passwd.c, auth/sudo_auth.c, auth/sudo_auth.h:
	Add support for skeyaccess(3) if it is present in libskey.

2001-12-13  Todd C. Miller  <>

	* sudo.c:
	Only need to do 'lc = login_getclass(NULL)' if lc == NULL

	* parse.lex:
	'\\' is a perfectly legal character to have in a command line

	* sudo.c:
	o Defer call to set_fqdn() until it is safe to use log_error() o
	Don't print errno string value if gethostbyname fails, it is not

	* parse.c:
	Fix CIDR -> in_addr_t conversion.

2001-12-12  Todd C. Miller  <>

	* sudoers.pod:
	Remove an extra "User_List" in the User_Spec definition From
	ybertrand AT

	* parse.c:
	Make 'listpw=never' work for users who are not explicitly mentioned
	in sudoers.

	* sudoers.pod:
	Remove gratuitous '=' in EBNF grammar; era AT

	* sudoers.pod:
	Document new list Defaults type and convert env_keep and env_delete
	to lists. Document new env_check option.

	* lex.yy.c,,
	regen parser

	* parse.lex:
	Don't let '#' appear in a {WORD} and restrict #foo in a Runas spec
	to #[0-9-]+.

	* configure:

	* aclocal.m4:

	Add check for skeyaccess(3)

	* visudo.pod:
	Document new -c, -f, and -q options

	* visudo.c:
	o Add -f option (alternate sudoers file) o Convert to use getopt(3)

	* configure:

	* aclocal.m4,,
	Add check for isblank and a replacement macro if it doesn't exist.

2001-12-11  Todd C. Miller  <>

	* visudo.c:
	In check-only mode, don't create sudoers if it does not already

	* parse.yacc:
	o Add a new token, DEFVAR, to indicate a Defaults variable name o
	Add support for "+=" and "-=" list operators o replace some 1 and 0
	with TRUE and FALSE for greater legibility.

	* parse.lex:
	o Use exclusive start conditions to remove some ambiguity in the
	lexer. Also reorder some things for clarity. o Add support for
	"+=" and "-=" list operators. o Use the new DEFVAR token to denote
	a Defaults variable name.

	* sudo.h:
	Prototype init_envtables()

	* env.c:
	o Convert environment handling to use lists instead of strings.
	This greatly simplifies routines that need to do "foreach" type
	operations. o Add new init_envtables() function to set env_check
	and env_delete defaults based on initial_badenv_table and
	initial_checkenv_table (formerly sudo_badenv_table).

	* defaults.c, defaults.h:
	o Add a new LIST type and functions to manipulate it. o This is for
	use with environment handling variables. o Call new
	init_envtables() routine inside init_defaults() to initialize the
	environment lists.

	* def_data.c, def_data.h,
	Convert environment options to use the new LIST type and add a new
	one, env_check that only deletes if the sanity check fails.

	* testsudoers.c:
	Add dummy version of init_envtables()

	* parse.yacc:
	honor quiet mode

	* visudo.c:
	Add check-only mode

	* mkdefaults:
	Fix generation of entries with NULL descriptions.

2001-12-09  Todd C. Miller  <>

	* tgetpass.c:
	Use sigaction_t and quiet a gcc warning.

	* sudo.c:
	Must reset signal handlers before we exec

	* auth/aix_auth.c, auth/bsdauth.c, auth/fwtk.c, auth/pam.c,
	Be carefule now that tgetpass() can return NULL (user hit ^C). PAM
	version needs testing. Set SIGTSTP to SIG_DFL during password entry
	so user can suspend us.

	* tgetpass.c:
	Add support for interrupting/suspending tgetpass via keyboard input.
	If you suspend sudo from the password prompt and resume it will re-
	prompt you.

	* sudo.c:
	Don't block keyboard interrupt signals, just set them to SIG_IGN.

2001-12-08  Todd C. Miller  <>


	* configure:

	*,, logging.c, sudo.c, visudo.c:
	Kill POSIX_SIGNALS define and old signal support now that we emulate
	POSIX ones Also be sure to correctly initialize struct sigaction.

	* strerror.c:
	Don't need config.h or "#ifndef HAVE_STRERROR" wrapper.

	* compat.h:
	Add scaffolding for POSIX signal emulation

	* sigaction.c:
	o Add missing ';' so this compiles o Can't use NULL since we don't
	include stdio.h

	* sigaction.c:
	Emulate sigaction() using sigvec()

2001-11-13  Todd C. Miller  <>

	* sudoers.pod:
	Document new behavior of negative values of timestamp_timeout Fix a

	* sudo.pod:
	Add security note about command not being logged after 'sudo su' and

	* sudo.pod:
	Mention that -V prints default values when run as root, including
	the list of environment variables to clear.

	Run pod2man with --quotes=none to avoid stupid quoting of C<>

2001-11-12  Todd C. Miller  <>

	* auth/sudo_auth.c, def_data.c, def_data.h,, sudoers.pod:
	Add mail_badpass option Also modify mail_always behavior to also
	send mail when the password is wrong

	* env.c, sudo.c, sudo.h:
	Dump default bad env table when 'sudo -V' is run by root.

	* sudoers.pod:
	document env_delete

	* env.c:
	Add support for '*' in env_keep when not resetting the environment
	(ie: the normal case).

	* env.c:
	Add env_delete variable that lets the user replace/add to the
	bad_env_table. Allow '*' wildcard in env_keep entries.

2001-11-06  Todd C. Miller  <>

	* mkinstalldirs:
	Force umask to 022 to guarantee sane directory permissions.

2001-11-02  Todd C. Miller  <>

	add and to dependency

	* mkdefaults:
	fix breakage in last commit

	acsite.m4 -> aclocal.m4

	* check.c:
	fix I_TS_TIMEOUT vs. I_TIMESTAMP_TIMEOUT pasto in previous commit

	* def_data.c:
	regenerated from

	* check.c, defaults.c, defaults.h:
	Add new T_UINT type that most things use instead of T_INT If
	timestamp_timeout is < 0 then treat the ticket as never expiring (to
	be expired manually by the user).

	change most T_INT -> T_UINT

	* mkdefaults:
	fix warning when no args

	* visudo.c:
	Change 2 Exit() -> exit() Avoid stdio in Exit() and call _exit() if
	we are a signal handler. We no longer print the signal number but
	the user can just check the exit value for that.

2001-10-16  Todd C. Miller  <>

	* logging.c:
	when setting up pipes in child process check for case where stdin ==
	pipe fd 0

2001-10-11  Todd C. Miller  <>

	* visudo.c:
	Ignore editor exit value since XPG4 says vi's exit value is the
	count of editing errors made (failed searches, etc).

2001-10-05  Todd C. Miller  <>

	* configure:

	sco now is identified by config.guess as *-sco-*

	Check for getspnam() in -lgen if not in -lc for UnixWare.

2001-09-18  Todd C. Miller  <>

	* sudoers.pod, visudo.pod:
	"upper case" -> "uppercase"

	* sudoers.pod:
	fix typos and grammar;

2001-08-28  Todd C. Miller  <>

	* sudoers.pod:
	Missing word (specify);

2001-08-23  Todd C. Miller  <>

	* sudo.c:
	If we fail to lookup a login class, apply the default one.

	* logging.c:
	In log_error() free message, not logline unconditionally, then free
	logline if it is not the same as message. No function change but
	this mirrors how they are allocated.

2001-07-17  Todd C. Miller  <>

	* configure:

	remove some backslash quotes that are unneeded

	o Tweaks to make this work with autoconf-2.50 o Use AC_LIBOBJ
	instead of changing LIBOBJS directly o Use AC_REPLACE_FUNCS where we
	can o Use AC_CHECK_FUNCS instead of AC_CHECK_FUNC so we don't have
	to AC_DEFINE things manually.

	* config.guess, config.sub:
	Updated from autoconf-2.50

2001-05-22  Todd C. Miller  <>

	Update mailing list section. We use mailman now, not majordomo.

2001-05-10  Todd C. Miller  <>

	* getspwuid.c, logging.c, sudo.c:
	Use setpwent()/endpwent() + all the shadow variants to make sure we
	don't inadvertantly leak an fd to the child. Apparently Linux's
	shadow routines leave the fd open even if you don't call setspent().
	Reported by; different patch used.

2001-04-13  Todd C. Miller  <>

	* sudoers.pod:

	* tgetpass.c:
	select() may return EAGAIN. If so, continue like we do for EINTR.

	* logging.c:
	Fix a non-exploitable buffer overflow in the word splitting code.
	This should really be rewritten.

	FAQ link goes away

	Tell people to look in sample.syslog.conf for examples, not FAQ

	Update list of env vars that are cleared

	* sudo.c:
	remove struct env_table decl since that stuff has all moved to env.c

2001-04-04  Todd C. Miller  <>

	* fileops.c:
	Fix a pasto in flock-style unlocking and include <sys/file.h> for
	flock on older systems;

	* configure:
	regen to get NeXT lockf/flock fix

	force NeXT to use flock since lockf is broken

2001-03-30  Todd C. Miller  <>

	* check.c:
	Use stashed user_gid when checking against exempt gid since sudo
	sets its gid to a a value that makes sudoers readable. Previously
	if you used gid 0 as the exempt group everyone would be exempt. From
	Paul Kranenburg <>

2001-03-29  Todd C. Miller  <>

	* configure:

	* aclocal.m4:
	#include stdio.h in SUDO_CHECK_TYPE since IRIX 6 aparently defines
	some types (such as ssize_t) therein.

2001-03-02  Todd C. Miller  <>

	* defaults.c:
	Fix negation of paths in a boolean context. Problem found by

2001-02-23  Todd C. Miller  <>

	* visudo.c:

2001-02-17  Todd C. Miller  <>

	* visudo.c:
	SA_RESETHAND means the opposite of what I was thinking--oops To
	block all signals in old-style signals use ~0, not 0xffffffff

2001-02-04  Todd C. Miller  <>

	* defaults.c:
	coerce difference of pointers to int when used in a string length
	printf format;

2001-01-17  Todd C. Miller  <>

	* visudo.c:
	Block all signals in Exit() to avoid a signal race. There is still
	a tiny window but I'm not going to worry about it.

2001-01-07  Todd C. Miller  <>

	* env.c:
	glibc uses the LANGUAGE env var so clear that too; Solar Designer

	* lex.yy.c:
	Regenerate with a fix to flex.skl that preserves errno from
	clobbering by isatty().

2000-12-31  Todd C. Miller  <>

	* auth/aix_auth.c, auth/bsdauth.c, auth/fwtk.c, auth/pam.c,
	auth/sia.c, auth/sudo_auth.c:
	Some defaults I_ defines got renamed.

	*, check.c, def_data.c, def_data.h,,
	defaults.c, defaults.h, env.c, logging.c, mkdefaults, parse.yacc,
	set_perms.c, sudo.c,
	Move defaults info into its own files from which we generate .h and
	.c files. This makes adding or rearranging variables much simpler.

2000-12-30  Todd C. Miller  <>

	* configure,
	fix typo in last commit

	* compat.h,, configure,
	Add check + emulation for setegid (like seteuid).

	* env.c:
	Make env_keep override badenv_table as documented Fix traversal of
	badenv_table (broken in last commit)

	* set_perms.c, sudo.c, sudo.h:
	Don't try and build saved uid version of set_perms on systems w/o
	them. Rename set_perms_saved_uid() -> set_perms_posix() Make
	set_perms_setreuid simply be set_perms_fallback() and simply include
	the appropriate function at compile time (setreuid() vs. setuid()).

	*,, sudoers.pod:
	PATH is also preserved when env_reset is in effect

	* CHANGES,, check.c, compat.h,, configure,, defaults.c, defaults.h, env.c, find_path.c,
	getspwuid.c, set_perms.c, sudo.c,, sudo.h,,
	sudo.pod,,, sudoers.pod, testsudoers.c,
	New Defaults options: o stay_setuid - sudo will remain setuid if
	system has saved uids or setreuid(2) o env_reset - reset the
	environment to a sane default o env_keep - preserve environment
	variables that would otherwise be cleared

	No longer use getenv/putenv/setenv functions--do environment munging
	by hand. Potentially dangerous environment variables can be cleared
	only if they contain '/' pr '%' characters to protect buggy
	programs. Moved environment routines into env.c (new file)

	Clear up --without-passwd description

	* putenv.c, sudo_setenv.c:
	We now build up a new environment from scratch and assign it to

2000-12-19  Todd C. Miller  <>

	* sudo.pod, visudo.pod:
	Grammatical fixes from Paul Janzen

2000-12-15  Todd C. Miller  <>

	* visudo.c:
	If there was a syntax error and the user just wants to quit, unlink
	sudoers if it is zero length.

	* visudo.c:
	'Q' means ignore parse error, not 'q'

	* visudo.c:
	Open sudoers for writing with mode SUDOERS_MODE From Dimitry Andric

2000-12-13  Todd C. Miller  <>

	* set_perms.c:
	Add missing #ifdef HAVE_LOGIN_CAP_H;

2000-12-09  Todd C. Miller  <>

	* config.guess, config.sub:
	Darwin / Mac OS X support from Wilfredo Sanchez <>

2000-11-03  Todd C. Miller  <>

	* sudo.c, visudo.c:
	Use exit(127), not exit(-1)

	*, defaults.c, defaults.h, set_perms.c, sudo.c:
	Move set_perms() to its own file and use POSIX saved uid or
	setreuid() if available.

	Added stay_setuid option for systems that have libraries that
	perform extra paranoia checks in system libraries for setuid
	programs (ie: anything with issetugid(2)).

	* sudo.c:
	strip more bits from the environment and add a facility for
	stripping things only if they contain '/' or '%' to address printf
	format string vulnerabilities in other programs.

2000-11-02  Todd C. Miller  <>

	* configure:

	For NCR, add -lc89 to LIBS, not SUDO_LIBS and cache the existence of

	* configure:

	Check for strcasecmp(3) in -lc89 for NCR Unix

2000-11-01  Todd C. Miller  <>


	* configure:

	* compat.h,,
	Add check for _innetgr(3) since NCR systems have that instead of

2000-10-31  Todd C. Miller  <>

	* auth/securid.c:
	check return value of creadcfg() call sd_close() after sd_auth()
	store username in sd->username so we don't rely on the USER env

2000-10-30  Todd C. Miller  <>

	document --with-bsdauth

	* configure:

	--with-bsdauth assumes --with-logincap

	* auth/bsdauth.c, auth/fwtk.c:
	When prompting for a response to a challenge, if the user just hits
	return then reprompt with echo turned on.

2000-10-29  Todd C. Miller  <>

	* sudo.c:
	Remove debugging code that should not have been committed, oops.

	* auth/bsdauth.c:
	Use lower-level routines and get the password ourselves. Checks for
	a challenge and if there is one echo is not turned off.

	* auth/pam.c, auth/sudo_auth.h:
	minor housekeeping, no real code changes

2000-10-27  Todd C. Miller  <>

	* sudo.c:
	Fix a coredump in the logging functions if gethostname(2) fails by
	deferring the call to log_error() until things are better setup.

	Fix return value of set_loginclass() in non-BSD-auth case.

	Hard-code 'sudo' in the usage message so we can fit more options on
	a line

	* logging.c:
	Fix errant ';' (typo) that broken MSG_ONLY

2000-10-26  Todd C. Miller  <>


	* sudo.pod:
	Document -a flag

	*, auth/bsdauth.c, auth/sudo_auth.h,,
	configure,, getspwuid.c, sudo.c:
	Add support for BSD authentication.

2000-10-19  Todd C. Miller  <>

	* sudoers.pod:
	Fix typo; from

2000-10-12  Todd C. Miller  <>

	* sudoers.pod:
	Mention negating umask

	* defaults.c:
	Allow user to specify umask of 0777 (same as !umask)

2000-10-09  Todd C. Miller  <>

	* sudo.pod, visudo.pod:
	Fix a typo and give a URL for the sudo history.

2000-10-08  Todd C. Miller  <>

	* defaults.c, sudo.pod:
	fix typos;

2000-09-14  Todd C. Miller  <>

	* sudo.c, sudo.h, sudo_setenv.c:
	sudo_setenv() now exits on memory alloc failure instead of returning

2000-09-07  Todd C. Miller  <>

	* sudo.c:
	Strip out NLSPATH and PATH_LOCALE from the environment for FreeBSD
	and possibly others.

	* logging.c:
	Don't use vsyslog(3) since HP-UX (and others?) lack it. This means
	that "%m" won't be expanded but we don't use that anyway since the
	logging routines may splat to stderr as well.

	* defaults.c, defaults.h, sudo.c,,,
	Add always_set_home variable

	* configure,
	Have to hard code default values in help since the defaults are set
	_after_ the help stuff.

2000-08-31  Todd C. Miller  <>

	* lex.yy.c, parse.lex:
	Allow special characters (including '#') to be embedded in pathnames
	if quoted by a '\\'. The quoted chars will be dealt with by
	fnmatch(). Unfortunately, 'sudo -l' still prints the '\\'.

2000-08-13  Todd C. Miller  <>

	* install-sh:
	Better path searching for programs we need.

	Add section on "C compiler cannot create executables" errors.

	* Makefile.binary,, version.h:
	Crank version

	* aclocal.m4, configure,,,,
	sudo.pod,,, sudoers.pod,,, visudo.pod:
	Substitute values from configure into man pages.

2000-08-12  Todd C. Miller  <>

	* parse.c, sudo.c:
	The listpw and verifypw sudoers options would not take effect
	because the value of the default was checked *before* sudoers was
	parsed. Instead of passing in the value of PWCHECK_* to
	sudoers_lookup(), pass in the arg for def_ival() so the check can be
	deferred until after sudoers is parsed.

2000-08-11  Todd C. Miller  <>

	* tgetpass.c:
	When writing prompt, no need to write the NUL as well;

2000-06-09  Todd C. Miller  <>

	* install-sh:
	When looking for chown, check in /sbin too

2000-06-05  Todd C. Miller  <>

	* visudo.c:
	Remove extraneous call to init_defaults() and set runas_user to NULL
	betweem parses so init_defaults will reset it each time, thus
	avoiding a reference to free()d data.

2000-06-04  Todd C. Miller  <>

	*, interfaces.c, interfaces.h, sudo.c:
	Add support for using getifaddrs() to get the list of ip addr /
	netmask pairs. Currently IPv4-only.

	* visudo.c:
	Add a missing check for UserEditor == NULL Add missing '+' before
	line number when invoking editor to fix a syntax error

2000-05-12  Todd C. Miller  <>

	* sudo.c:
	Call clean_env very early in main() for paranoia's sake. Idea from
	Marc Esipovich.

2000-05-10  Todd C. Miller  <>

	* sudo.h:
	Update proto for evasprintf and easprintf

	* alloc.c:
	Make easprintf() and evasprintf() return an int.

	* check.c:
	If the targetpw flag is set, use target username as part of the
	timestamp path. If tty tickets are in effect cat the tty and the
	target username with a ':' as the separator.

2000-05-09  Todd C. Miller  <>

	* auth/pam.c:
	Backout part of last change; setting PAM_USER to the invoking user
	breaks things like targetpw.

	* auth/pam.c:
	set tty and username via pam_set_item

	* auth/sudo_auth.c, check.c, getspwuid.c, sudo.c, sudo.h:
	Fix root, runas, and target authentication for non-passwd file auth

2000-04-22  Todd C. Miller  <>

	*,, sudo.pod,,,
	sudoers.pod,,, visudo.pod:
	Use B<-Z> not C<-Z> for command line flags in all places. This is
	more consistent and works around a bug in Pod::Man.

	*,, sudoers.pod:
	Fix an occurence of 'semicolon' that should be 'colon'

2000-04-19  Todd C. Miller  <>

	* configure,
	Fix --with-badpri help line

2000-04-17  Todd C. Miller  <>

	* defaults.c, logging.c, sudo.c:
	Bracket calls to syslog with an openlog() and closelog() since some
	authentication methods (like PAM) may do their own logging via
	syslog. Since we don't use syslog much (usually just once per
	session) this doesn't really incur a performance penalty. It also
	Fixes a SEGV with pam_kafs.

2000-04-15  Todd C. Miller  <>

	* sudo.c:
	Fix -H flag. runas_homedir is only valid after
	set_perms(PERM_RUNAS, mode)

2000-04-12  Todd C. Miller  <>

	Clarify the fact that insults are not enabled just by including them
	in the binary.

2000-04-07  Todd C. Miller  <>

	Regenerated with perl 5.6.0 pod2man

	Give date string to pod2man since its default is ugly and it ain't
	got no alibi.

	Do section substitution on the output of pod2man and remove hack
	needed for old pod2man.

	* sudo.pod, sudoers.pod, visudo.pod:
	Put back real man sections, we will do the substitution later.

2000-04-02  Todd C. Miller  <>

	* configure,
	Don't bother checking for the path to vi if user specified --with-

2000-04-01  Todd C. Miller  <>

	* CHANGES, visudo.c:
	Visudo now does its own fork/exec instead of calling system(3).

	sudoers.pod, visudo.c:
	Visudo now checks for the existence of an editor and gives a
	sensible error if it does not exist.

	The path to the editor for visudo is now a colon-separated list of
	allowable editors. If the user has $EDITOR set and it matches one
	of the allowed editors that editor will be used. If not, the first
	editor in the list that actually exists is used.

	*,, sudo.pod:
	Clear up confusion wrt sudo's return value.

2000-03-27  Todd C. Miller  <>

	Strip sudo and visudo for bindist target

	*,, sudo.pod,,,
	sudoers.pod,,, visudo.pod:
	Use @mansectsu@ and @mansectform@ in the man page bodies as well.
	[5eb9e60a726f] [SUDO_1_6_3]

	*,, visudo.pod:
	Typo: @sysconf@ -> @sysconfdir@

	'make dist' should not cause any files to be modified so remove its

	Whoops, forgot to add release marker

2000-03-26  Todd C. Miller  <>

	Final change for 1.6.3 (or so I hope)

	Use SYSV man sections since BSD systems will have nroff...

2000-03-24  Todd C. Miller  <>

	* parse.yacc,
	When checking to see if the host/user matches in a defaults spec,
	check against TRUE, not just non-zero since it might be -1.

	* configure,
	OSF/1 puts file formats in section 4, not 5.

	* CHANGES, INSTALL, sudo.c:
	Make login class support work on BSD/OS

	Update for 1.6.3

	* configure,
	If there is no inet_addr but there *is* an __inet_addr that's ok
	since inet_addr is probably just a macro then. The better thing to
	do would be to look for the macro, but this is fine for now.

	* configure,
	Don't use shlicc for BSD/OS 4.x

	*, configure,
	*.man lives in cwd, *.cat lives in $(srcdir), add a @mansrcdir@
	configure variable so we can deal with this. Also, only remove *.man
	for 'distclean' not 'clean'.

	* sudo.c:
	set_loginclass() should be static like the proto says

2000-03-23  Todd C. Miller  <>

	* fnmatch.c:
	Add #ifdef __STDC__ around the rangematch function header to avoid
	promotion of test to int, thus violating the prototype. Gcc handles
	this gracefully but more std ANSI compilers will complain.

	* emul/fnmatch.h:
	Pull in newer fnmatch(3) that supports FNM_CASEFOLD

	* aclocal.m4, configure, fnmatch.3, fnmatch.c:
	Pull in newer fnmatch(3) that supports FNM_CASEFOLD Check for
	FNM_CASEFOLD in configure

	update for 1.6.3

	*,, testsudoers.c, visudo.c:
	Fully qualified hosts w/ wildcards were not matching the FQHOST
	token type. There's really no need for a separate token for fully-
	qualified vs. unqualified anymore so FQHOST is now history and
	hostname_matches now decides which hostname (short or long) to check
	based on whether or not the pattern contains a '.'.

	* parse.h:
	Fully qualified hosts w/ wildcards were not matching the FQHOST
	token type. There's really no need for a separate token for fully-
	qualified vs. unqualified anymore so FQHOST is now history and
	hostname_matches now decides which hostname (short or long) to check
	based on whether or not the pattern contains a '.'.

	* lex.yy.c, parse.c, parse.lex, parse.yacc:
	Fully qualified hosts w/ wildcards were not matching the FQHOST
	token type. There's really no need for a separate token for fully-
	qualified vs. unqualified anymore so FQHOST is now history and
	hostname_matches now decides which hostname (short or long) to check
	based on whether or not the pattern contains a '.'.

	* parse.c, parse.h, parse.yacc,,,, sudoers.pod, testsudoers.c, visudo.c:
	Add support for wildcards in the hostname.

	Add targets for *, using config.status to generate *.man from

	*,, sudoers.pod:
	Document set_logname option and enbolden refs to sudo and visudo.

	* INSTALL,, aclocal.m4, configure,,,, sudo.pod,,, sudoers.pod,,, visudo.pod:
	Add FreeBSD login.conf support (untested on BSD/OS) based on a patch
	from Michael D. Marchionna. configure now does substitution on the
	man pages, allowing us to fix up the paths and set the section
	correctly. Based on an idea from Michael D. Marchionna.

	* auth/passwd.c:
	Better fix for handling HP-UX aging info.

	* sudo.c:
	Add support for set_logname run-time default

	configure does substitution on these to produce *.man

	These files now get generated from * at configure time.

2000-03-22  Todd C. Miller  <>

	* defaults.c, defaults.h:
	Add set_logname option so users can turn off setting of LOGNAME/USER
	environment variables.

	* lsearch.c, parse.c, testsudoers.c:
	kill register

2000-03-13  Todd C. Miller  <>

	* auth/passwd.c:
	HP-UX adds extra info at the end for password aging so when
	comparing the result of crypt to pw_passwd we only compare the first
	len(epass) bytes *unless* the user entered an empty string for a

	* logging.c:
	Get rid of grandchild hack, it was causing problems and there is
	really no need for it. This fixes a bug where we spin eating up CPU
	when the user runs a long-running process like a shell.

2000-03-07  Todd C. Miller  <>

	* sudo.c:
	User can always specify a login class if he/she is already root.

	*, configure,, defaults.c, defaults.h,
	sudo.c, sudo.h:
	FreeBSD login class (login.conf) support.

2000-03-06  Todd C. Miller  <>

	* auth/sudo_auth.c:
	HAVE_SECUREWARE -> HAVE_GETPRPWNAM; fixes secureware support

2000-03-03  Todd C. Miller  <>

	* auth/passwd.c:
	Truncate unencrypted password to 8 chars if encrypted password is
	exactly 13 characters (indicateing standard a DES password). Many
	versions of crypt() do this for you, but not all (like HP-UX's).

2000-03-02  Todd C. Miller  <>

	Mention that gcc on dynix may have problems

2000-02-29  Todd C. Miller  <>

	Link visudo with NET_LIBS since we now call syslog via defaults.c

	* defaults.c:
	Use Argv[0] as the first arg to openlog() since visudo uses this

2000-02-28  Todd C. Miller  <>

	* sudo.c:
	Stash coredumpsize resource limit and retsore it before the exec()
	Otherwise the child ends up with a coredumpsize of 0.

2000-02-27  Todd C. Miller  <>

	*,, sudo.pod:
	document -S flag

	* sudo.c:
	fix usage string

	* CHANGES, RUNSON, TODO, auth/aix_auth.c, auth/fwtk.c, auth/pam.c,
	auth/sudo_auth.c, sudo.c, sudo.h, tgetpass.c:
	Added -S flag (read passwd from stdin) and tgetpass_flags global
	that holds flags to be passed in to tgetpass(). Change echo_off
	param to tgetpass() into a flags field. There are currently 2
	possible flags for tgetpass(): TGP_ECHO and TGP_STDIN. In
	tgetpass(), abstract the echo set/clear via macros and if (flags &
	TGP_ECHO) but echo is not set on the terminal, but sure to set it.

	* tgetpass.c:
	Fixed a bug that caused an infinite loop when the password timeout
	was disabled.

2000-02-18  Todd C. Miller  <>

	* CHANGES, defaults.c, defaults.h, getspwuid.c, sudo.c, sudo.h,,, sudoers.pod, visudo.c:
	Add rootpw, runaspw, and targetpw options.

	* CHANGES, defaults.c,,, sudoers.pod,
	enveditor -> env_editor

2000-02-16  Todd C. Miller  <>

	* BUGS, INSTALL,, README, configure,,,,,, version.h,,
	crank versino to 1.6.3

	* INSTALL, TODO, defaults.c, defaults.h,,,
	sudoers.pod, visudo.c:
	Add 'editor' and 'enveditor' sudoers defaults and make visudo honor
	them. This means that visudo will now parse the sudoers file
	*before* it is edited so a bogus sudoers file will cause a warning
	to go to stderr. Also, visudo checks the variables once--it does not
	check them after each editor run since that could be confusing.

2000-02-15  Todd C. Miller  <>

	1.6.2 -> 1.6.2p1

	* check.c, sudo.c, sudo.h:
	Move user_is_exempt prototype into sudo.h

2000-02-13  Todd C. Miller  <>

	* configure,
	Fix thinko, some && should have been || in the last commit

	* configure,
	Don't initialized Makefile variables to be NULL since the user may
	want to import variables from their environment.

2000-02-04  Todd C. Miller  <>

	* configure,

2000-01-28  Todd C. Miller  <>

	fix a yacc (skeleton.c) warning

2000-01-27  Todd C. Miller  <>

	* INSTALL, RUNSON, configure,
	Make pam work on HP-UX 11.0;

	recent changes; prepare for 1.6.2p1

	* find_path.c:
	Don't apply SECURE_PATH if user is example;

2000-01-26  Todd C. Miller  <>

	Regen with yacc that has a memory leak plugged.

	*,, sudoers.pod:
	Expanded docs on sudoers 'defaults' options based on INSTALL file

	Fix some while lies

2000-01-24  Todd C. Miller  <>

	When making a bindist, link FAQ to TROUBLESHOOTING instead of

	*,, sudoers.pod:
	Add netgroup caveat
	[28d119f466e3] [SUDO_1_6_2]

	Last minute updates

	PAM entry

	* auth/pam.c:
	correct a comment

	update for 1.6.2

	* auth/pam.c:
	Better detection of PAM errors and fix custom prompts with PAM.
	Based on patches from "Cloyce D. Spradling" <>

2000-01-20  Todd C. Miller  <>

	* snprintf.c:
	Cast ULONG_MAX to unsigned long long when comparing to an unsigned
	long long value.

2000-01-19  Todd C. Miller  <>

	* CHANGES,, configure,, visudo.c:
	Fix sudoers locking in visudo. We now lock the sudoers file itself,
	not the temp file (since locking the temp file can foul up editors).
	The previous locking scheme didn't work because the fd was closed
	too early.

	*, configure,
	Don't need test for ftruncate() any more.

	* configure,
	Add a test for the -Aa flag w/ HP-UX's cc. Fixes compilation with
	the unbundled HP-UX cc.

2000-01-18  Todd C. Miller  <>

	*,, sudoers.pod:
	"a a" -> "a"; Aaron Campbell <>

2000-01-17  Todd C. Miller  <>

	* LICENSE,, defaults.c, defaults.h, parse.c, parse.h,
	parse.yacc, sudo.c, sudo.h, sudoers.pod, testsudoers.c, tgetpass.c,
	version.h, visudo.c:
	update copyright year on changed files


	aix fix

	Crank version to 1.6.2

	* configure:
	Crank version to 1.6.2

	* sudo.c:
	When using rlimit check for RLIM_INFINITY When computing the value
	of maxfd, use min(getdtablesize(), RLIMIT_NOFILE)

	recent changes

	* BUGS,, README,,,,,, version.h,,
	Crank version to 1.6.2

	* INSTALL, defaults.c, defaults.h, sudo.c, sudo.h, sudoers.pod:
	Add 'shell_noargs' runtime option back in. We have to defer
	checking until after the sudoers file has been parsed but since
	there are now other options that operate that way this one can too.
	Based on a patch from

	* defaults.c, defaults.h, parse.c, sudo.c, sudo.h:
	Add "listpw" and "verifypw" options.

	*,, sudoers.pod:
	o Fix some typos/omissions o Add section on verifypw and listpw o
	Define how NOPASSWD interacts with the -v and -l flags

2000-01-14  Todd C. Miller  <>

	* configure,
	For HP-UX cc, add -Aa to CPPFLAGS. For HP-UX always add

	* defaults.c, defaults.h:
	In struct sudo_defs_types, move the union to the end and don't
	initialize the union member since that only works with an ANSI
	compiler. We set the value of the union by hand in init_defaults()
	anyway. This allows sudo to compile on a K&R compiler again.

2000-01-11  Todd C. Miller  <>

	* parse.c, parse.h, parse.yacc,, testsudoers.c, visudo.c:
	netgr_matches needs to check shost as well as host since they may be

	* tgetpass.c:
	End on \r as well as \n

2000-01-03  Todd C. Miller  <>

	* sudo.c:
	Update statbuf.st_mode based on SUDOERS_MODE when we are chaning
	from 0400 to whatever SUDOERS_MODE is (converting from the old
	sudoers mode). Assumes that SUDOERS_MODE is less restrictive than
	0400 which should always be the case.

	* parse.c, parse.yacc, sudo.c, sudo.h,
	Make treatment of -l and -v sane wrt NOPASSWD flags. Now allow -l
	w/o a passwd if there is *any* entry for the user on the host with a
	NOPASSWD flag. For -v, only allow w/o a passwd if *all* entries for
	the user on the host w/ the specified runas user have the NOPASSWD
	flag set.

	add check target

1999-12-16  Todd C. Miller  <>

	* visudo.c:
	Treat EOF at whatnow prompt like 'x' instead of looping.

1999-12-10  Todd C. Miller  <>

	recent changes
	[5836a9452568] [SUDO_1_6_1]

1999-12-09  Todd C. Miller  <>

	*, configure,, sudo.c:
	Add check for initgroups() since old SYSV lacks this.

	* CHANGES, RUNSON, aclocal.m4,, configure,,
	parse.c, testsudoers.c:
	o Kill HAVE_FNMATCH_H o Only define HAVE_FNMATCH if <fnmatch.h>

1999-12-06  Todd C. Miller  <>

	* auth/sudo_auth.c:
	Don't allow insults to be enabled if the insults[] array is empty.
	Otherwise there would be division by zero.

	* insults.h:
	Don't allow insults to be enabled if the insults[] array is empty.
	Otherwise there would be division by zero.

	Don't allow insults to be enabled if the insults[] array is empty.
	Otherwise there would be division by zero.

	* insults.h:
	Don't care about USE_INSULTS #define since the insult stuff may be
	overridden at runtime.

	* auth/sudo_auth.c:
	Honor insults flag.

	* CHANGES, parse.c:
	Don't ask the user for a password if the user is not allowed to run
	the command and the authenticate flag (in sudoers) is false.

	* CHANGES, RUNSON, lex.yy.c, parse.lex:
	o Whenever we get a bare newline we change to the INITIAL state. o
	Enter GOTRUNAS when we see Runas_Alias

	This allows #uid to work in a RunasAlias.

1999-12-05  Todd C. Miller  <>

	* CHANGES, parse.yacc,
	fix parsing of runas lists: o oprunasuser and runaslist now return a
	value o in a runasspec, if a runaslist does not return TRUE, set
	runas_matches to FALSE. Normally, a runaslist only returns FALSE
	for explicitly denied users. o since runaslist does not modify the
	stack there is no need for a push/pop in runasalias.

	* check.c, sudo.c:
	Don't kill the user's tickets until after sudoers has been parsed
	since tty_tickets and ticket_dir could be set in sudoers.

	* BUGS, CHANGES, Makefile.binary,, README, RUNSON,
	configure,,,,,, tgetpass.c, version.h,,
	crank version to 1.6

	* testsudoers.c:
	add set_fqdn() stub

1999-12-02  Todd C. Miller  <>

	* INSTALL, defaults.c, defaults.h, sudo.c, sudo.h,,, sudoers.pod, visudo.c:
	o Kill shell_noargs option, it cannot work since the command needs
	to be set before sudoers is parsed. o Fix the "set_home" sudoers
	option (only worked at compile time). o Fix "fqdn" sudoers option.
	We now set host/shost via set_fqdn which gets called when the
	"fqdn" option is set in sudoers. o Move the openlog() to
	store_syslogfac() so this gets overridden correctly from the
	sudoers file.

	* auth/securid.c:
	SecurID support should compile now.

1999-11-29  Todd C. Miller  <>

	*,, sudo.pod,,,,, visudo.pod:
	fix some syntactic goofs

1999-11-28  Todd C. Miller  <>

	*, sudo.html, sudoers.html, visudo.html:
	No longer need the .html files as they are generated automatically
	on the web site.

	kill characters that made wml unhappy


1999-11-25  Todd C. Miller  <>

	* README: ->

	*, configure:
	Wrap script execution w/ /bin/sh for the benefit of ctm

1999-11-24  Todd C. Miller  <>

	* sudo.c:
	Make the -s flag be exclusive too. Also reorder the flags in the
	exclusive usage message so they are alphabetical.

1999-11-23  Todd C. Miller  <>

	* auth/pam.c:
	make pam errors other than PAM_PERM_DENIED fatal

	* auth/API:
	fix typo

	make it clear that /etc/pam.d/sudo is required on linux

	* auth/pam.c:
	fix a warning on redhat and spew an error if pam_authenticate()
	returns an error other than AUTH_SUCCESS or PAM_PERM_DENIED

	*, sudo.html,, sudo.pod:
	Be very clear that the password required is the user's not root's

1999-11-20  Todd C. Miller  <>

	add sample.syslog.conf to DISTFILES and BINFILES

1999-11-19  Todd C. Miller  <>

	updates from Brian Jackson + some formatting

1999-11-18  Todd C. Miller  <>

	* INSTALL.binary, Makefile.binary, README, RUNSON:
	o One RUNSon update o Changes for automating real binary releases

	Add bindist target

1999-11-16  Todd C. Miller  <>

	talk about run-time options in addition to compile-time options
	[1eb813ff0a9a] [SUDO_1_6_0]

	fix typos

	* sudo.c:
	need sys/time.h if HAVE_SETRLIMIT

	* PORTING, README, RUNSON, sudo.c,, sudo.html,,
	sudo.pod,, visudo.html,, visudo.pod:
	get rid of references to sudo-bugs. Now mention the web site or the
	sudo@ alias

	* sudoers.html:
	repair pod2html damage

	Update for 1.6 release

	*, sudoers.html,, sudoers.pod:
	Add warning about using ALL in a command context.

1999-11-09  Todd C. Miller  <>

	* visudo.c:
	Call yyrestart() on a parse error to reset the lexer state.

	* lex.yy.c, parse.lex:
	Don't need YY_FLUSH_BUFFER after all Move yyrestart() into visudo.c
	since it might not get called in yywrap if we get a parse error
	(and we only reread the file on error anyway).

	* lex.yy.c, parse.lex:
	Call YY_FLUSH_BUFFER macro in yywrap() to clean up any buffers that
	might still exist. Call yyrestart() instead of using the deprecated
	YY_NEW_FILE macro.

	* lex.yy.c, parse.lex:
	flex doesn't need %N table size declarations

	*, sudoers.html,, sudoers.pod:
	Mention what characters need to be escaped in names.

1999-11-08  Todd C. Miller  <>

	* configure:

	clarify Mac OS X entry


	o Use AC_MSG_ERROR throughout o Check syslog configure options for

1999-11-05  Todd C. Miller  <>

	* defaults.c:
	Fix printing of type T_MODE in dump_defaults()

	* strcasecmp.c:
	missing sys/types.h

	Break out options that may be overridden at run time into their own
	section. Add a not about Max OS X and correct some lies.

1999-11-04  Todd C. Miller  <>

	* CHANGES,, configure,, sudo.c:
	o Now use getrlimit to find the highest fd when closing all non-std
	fd's o Turn off core dumps via setrlimit for the sake of paranoia


1999-11-01  Todd C. Miller  <>


	* tgetpass.c:
	When read()'ing, do a single character at a time to be sure we don't
	go oast the newline.

	* sudo.c:
	For the sudo_root option, check against user_uid, not getuid() since
	at this point, ruid == euid == 0.

	some updates

	* logging.h:
	Fix compilation problem when --with-logging=file was specified.
	This means that syslog is now required to build sudo but that should
	not be a problem. If it is it can be fixed trivially with a
	configure check for syslog() or syslog.h.

	* tgetpass.c:
	Make this work again for things like "sudo echo hi | more" where the
	tty gets put into character at a time mode. We read until we read
	end of line or we run out of space (similar to fgets(3)).

1999-10-20  Todd C. Miller  <>

	*, sudoers.html,, sudoers.pod:
	change ital to bold


1999-10-16  Todd C. Miller  <>

	* defaults.c:
	Error out if syslog parameters are given without a value. For
	Ultrix or 4.2BSD "syslog" is allowed without a value since there are
	no facilities in the 4.2BSD syslog.

1999-10-15  Todd C. Miller  <>

	* defaults.c:
	Ignore the syslog facility for systems w/ old syslog like Ultrix.

	people with "." early in their path can have problems running sudo
	from the build dir ;-)

1999-10-13  Todd C. Miller  <>

	*, sudo.html,, sudo.pod:
	Remove -r realm option

	* auth/kerb5.c, auth/sudo_auth.c, auth/sudo_auth.h, configure,, sudo.c:
	New krb5 code from Frank Cusack <>.

	update to reality

1999-10-12  Todd C. Miller  <>

	* auth/fwtk.c:
	include <auth.h> to get function prototypes.

	*, sudo.html,, sudo.pod:
	document -L flag

1999-10-11  Todd C. Miller  <>

	* sudo.c:
	in set_perms(), always call setuid(0) before changing the ruid/euid
	so we always know it will succeed.

	* defaults.h:
	#undef T_FOO to avoid conflicts with system defines (like on

	* TODO, sample.sudoers,, sudoers.html,,
	Docuement "Defaults" lines in /etc/sudoers. Still needs some
	fleshing out but this is a start.

1999-10-10  Todd C. Miller  <>

	* use strtol, not strtoul since not everyone has not strtoul

	* defaults.c:
	use strtol, not strtoul since not everyone has not strtoul

	* lex.yy.c, parse.lex:
	last {WORD} rule should only apply in the INITIAL state

	* lex.yy.c, parse.lex:
	o Add support for escaped characters in the WORD macro o Modify
	fill() to squash escape chars

	* defaults.c, defaults.h:
	o Add T_PATH flag to allow simple sanity checks for default values
	that are supposed to be pathnames. o Fix a duplicate free when
	visudo finds an error.

1999-10-09  Todd C. Miller  <>

	* defaults.c, defaults.h, logging.c:
	mail_if_foo -> mail_foo

1999-10-08  Todd C. Miller  <>

	* compat.h, defaults.c, defaults.h, sudo.c, tgetpass.c:
	o Add requiretty option o Move O_NOCTTY to compat.h

	* logging.c:
	The exit() in log_error() was mistakenly removed in a previous
	version. Put it back...

1999-10-07  Todd C. Miller  <>

	* INSTALL, TODO, auth/aix_auth.c, auth/fwtk.c, auth/pam.c,
	auth/rfc1938.c, auth/sia.c, auth/sudo_auth.c, check.c,,
	configure,, defaults.c, defaults.h, find_path.c,
	getspwuid.c, logging.c, parse.yacc, sudo.c,
	o Change defaults stuff to put the value right in the struct. o
	Implement mailer_flags o Store syslog stuff both in int and string
	form. Setting the string form magically updates the int version.
	o Add boolean attribute to strings where it makes sense to say !foo

	* tgetpass.c:
	add O_NOCTTY when opening /dev/tty just in case

1999-10-06  Todd C. Miller  <>

	* auth/API:
	cleanup function no longer takes a status arg

	the the

1999-09-15  Todd C. Miller  <>

	* TODO,, configure,, logging.c:
	Use strftime() instead of ctime() if it is available.

1999-09-14  Todd C. Miller  <>

	* defaults.c:
	fix copyright date

	update ReliantUNIX entry

	* defaults.c, defaults.h, logging.c:
	add log_year option

	* configure,
	add --without-sendmail to help output

	* configure,
	enforce an otctal arg for --with-suoders-mode

1999-09-08  Todd C. Miller  <>

	* BUGS, INSTALL,, TODO, aclocal.m4, auth/aix_auth.c,
	auth/fwtk.c, auth/kerb5.c, auth/pam.c, auth/rfc1938.c, auth/sia.c,
	auth/sudo_auth.c, check.c,, configure,,
	defaults.c, defaults.h, find_path.c, lex.yy.c, logging.c, parse.h,
	parse.lex, parse.yacc, sudo.c, sudo.h,,,
	testsudoers.c, version.c, visudo.c:
	Add support for "Defaults" line in sudoers to make configuration
	variables changable at runtime (and on a global, per-host and per-
	user basis). Both the names and the internal representation are
	still subject to change. It was necessary to make sudo_user.runas
	but a char ** instead of a char * since this value can be changed by
	a Defaults line. There is a similar (but more complicated) issue
	with sudo_user.prompt but it is handled differently at the moment.

	Add a "-L" flag to list the name of options with their descriptions.
	This may only be temporary.

	Move some prototypes to parse.h

	Be much less restrictive on what is allowed for a username.

	* sample.syslog.conf:
	Add more info

1999-09-04  Todd C. Miller  <>

	* LICENSE, fnmatch.3, fnmatch.c, getcwd.c, lsearch.c, snprintf.c,
	UCB has dropped the advertising clause from their license.

1999-08-31  Todd C. Miller  <>

	* auth/sudo_auth.h:
	move dce_verofy proto to correct section

	* auth/dce.c:
	remove XXX

1999-08-28  Todd C. Miller  <>

	* emul/fnmatch.h:
	Add fnmatch() prototype

	* fnmatch.c, parse.c, testsudoers.c:
	Move inclusion of emul/fnmatch.h to be after sudo.h for __P

	* sudo.h:
	add strcasecmp proto

	* auth/sudo_auth.c:
	add check for case where there are no auth methods

	* configure,
	SunOS4 w/ gcc

	* getspwuid.c, lex.yy.c, parse.lex, parse.yacc,
	include strings.h everywhere we include string.h

	* version.c:
	nicer output when showing auth methods

	* version.c:
	Add support for SEND_MAIL_WHEN_NO_HOST

	*, configure,
	Add _GNU_SOURCE for Linux

	* lex.yy.c, parse.lex:
	fix definition of OCTECT

	* configure,
	aix_auth.o not authenticate.o

1999-08-27  Todd C. Miller  <>

	* sudo.c:
	Only block SIGINT, SIGQUIT, SIGTSTP (which can be generated from the
	keyboard). Since we run with ruid/euid == 0 the user can't really
	signal us in nasty ways.

	* visudo.c:
	Don't need to worry about catching too many signals since we do
	locking on the tmp file. If a lockfile is really stale, it will be
	detected and overwritten.

	include auth/API in tarball

	* auth/sudo_auth.c:
	move memset() of plaintext pw outside of verify loop and only do the
	memset if we are *not* in standalone mode.

	* auth/sudo_auth.c, auth/sudo_auth.h:
	DCE is not a standalone method

	* sudo.c:
	fix --enable-noargs-shell

	* snprintf.c:
	"#ifdef __STDC__" not "#if __STDC__" (I missed one)

	* auth/fwtk.c, auth/sia.c:
	_cleanup() function returns an int.

	* auth/dce.c:
	there were still some return(0)'s hanging around, make them

	* parse.c:
	typo in comment

	* version.c:
	add missing semicolon

	* auth/sudo_auth.h:
	missing backslash

1999-08-26  Todd C. Miller  <>

	* CHANGES,, configure,
	Kill _XOPEN_EXTENDED_SOURCE -- causes problems on some OSes

	add parse.h to HDRS

	*, configure,
	LDFLAGS. Common libs go in LIBS, commong ld flags go in LDFLAGS and
	network libs like -lsocket, -lnsl go in NET_LIBS. This allows
	testsudoers to build on Solaris and is a bit cleaner in general.

	mention ptmp -> sudoers.tmp

	*, configure,

	add 2 reports

	* auth/kerb5.c:
	Minor changes, mostly cosmetic. verify_krb_v5_tgt() changed to
	return a value more like a system function

	* auth/dce.c:
	Add an XXX

	* TODO:
	more things todo!

	* sample.sudoers:
	update based on what is in the man page

	* parse.yacc,
	minor change to first line printed in -l mode

	*, sudo.html,, sudo.pod:
	rename "ENVIRONMENT VARIABLES" section to "ENVIRONMENT" to be more
	standard and add "EXAMPLES" section

	*, visudo.html,, visudo.pod:
	rename "ENVIRONMENT VARIABLES" section to "ENVIRONMENT" to be more

	* logging.c, parse.c, sudo.h:

	* lex.yy.c, parse.lex:
	make an OCTET really be limited to 0-255

	mention timestamp changes

	cosmetic cleanup

	*, sudoers.html,, sudoers.pod:
	new sudoers(8) man page

1999-08-24  Todd C. Miller  <>

	* version.c:
	Update comments about syslog name tables

	* CHANGES, LICENSE,, configure,, parse.yacc,
	include strcasecmp() for those without it

	* sample.sudoers:
	Use the : operator some more and fix a typo

	update the history of sudo

	* parse.c, parse.lex, testsudoers.c:
	CIDR-style netmask support

	recent changes

	these should be generated with byacc, not bison

	* lex.yy.c:

	* parse.h, parse.yacc,,
	In "sudo -l" mode, the type of the stored (expanded) alias was not
	stored with the contents. This could lead to incorrect output if
	the sudoers file had different alias types with the same name.
	Normal parsing (ie: not in '-l' mode) is unaffected.

1999-08-23  Todd C. Miller  <>

	* configure,
	define _XOPEN_SOURCE to get at crypt() proto on some systems

1999-08-22  Todd C. Miller  <>

	* snprintf.c:
	fix comment

	* tgetpass.c:
	don't need limits.h

	* snprintf.c:
	kill bogus reference to vfprintf

	* sample.sudoers, sudoers:
	better examples

	* snprintf.c:
	Add some const in the K&R defs. This is safe since we define const
	away if the compiler doesn't grok it.

	* aclocal.m4, configure:
	Better test for working long long support. Ultrix compiler supports
	basic long long but not all operations on them.

	* aclocal.m4, auth/secureware.c,, configure, getspwuid.c,
	snprintf.c, sudo.c:
	Add check for LONG_IS_QUAD #undef MAXINT before including
	hpsecurity.h to silence an HP-UX warning Check for U?LONG_LONG_MAX
	in snprintf.c and use LONG_IS_QUAD

1999-08-21  Todd C. Miller  <>

	* LICENSE, aclocal.m4,, configure,,
	UCB-derived snprintf + asprintf support. Supports quads if the
	compiler does. No floating point yet, perhaps later...

1999-08-20  Todd C. Miller  <>

	* auth/API, auth/sudo_auth.c, auth/sudo_auth.h, check.c, find_path.c,
	goodpath.c, logging.c, parse.c, sudo.c:
	Run most of the code as root, not the invoking user. It doesn't
	really gain us anything to run as the user since an attacker can
	just have an setuid(0) in their egg. Running as root solves
	potential problems wrt signalling.


1999-08-19  Todd C. Miller  <>

	* logging.c, sudo.c:
	Don't wait for child to finish in log_error(), let the signal
	handler get it if we are still running, else let init reap it for
	us. The extra time it takes to wait lets the user know that mail is
	being sent.

	Install SIGCHLD handler in main() and for POSIX signals, block
	*except* SIGCHLD.

	* INSTALL,, configure,, logging.c, parse.c,
	parse.yacc, sudo.c, sudo.h:
	sudoers_lookup() now returns a bitmap instead of an int. This makes
	it possible to express things like "failed to validate because user
	not listed for this host". Some thigns that were previously
	VALIDATE_FOO are now FLAG_FOO. This may change later on.

	Reorganized code in log_auth() and sudo.c to deal with above

	Safer versions of push/pushcp with in the do { ... } while (0) style

	parse.yacc now saves info on the stack to allow parse.c to determine
	if a user was listed, but not for the host he/she tried to run on.

	Added --with-mail-if-no-host option

1999-08-17  Todd C. Miller  <>

	* parse.yacc, sudo.h,, visudo.c,, visudo.html,, visudo.pod:
	o NewArgv and NewArgc don't need to be externally visible. o If
	pedantic > 1, it is a parse error. o Add -s (strict) option to
	visudo which sets pedantic to 2.

	Just have sudo-bugs contact info in one place

	*, sudo.html,, sudo.pod:
	Add BUGS section

	*, configure,
	Add testsudoers to default build target if --with-devel Don't clean
	generated parser files unless "distclean".

	* parse.yacc,
	In pedantic mode we need to save *all* the aliases, not just those
	that match, or we get spurious warnings.

	reference samples.sylog.conf

1999-08-14  Todd C. Miller  <>

	* sample.syslog.conf:
	Sample entries for syslog.conf

	recent changes

	* auth/API, auth/afs.c, auth/aix_auth.c, auth/dce.c, auth/fwtk.c,
	auth/kerb4.c, auth/kerb5.c, auth/pam.c, auth/passwd.c,
	auth/rfc1938.c, auth/secureware.c, auth/securid.c, auth/sia.c,
	auth/sudo_auth.c, auth/sudo_auth.h:
	In struct sudo_auth, turn need_root and configured into flags and
	add a flag to specify an auth method is running alone (the only
	one). Pass auth methods their sudo_auth pointer, not the data
	pointer. This allows us to get at the flags and tell if we are the
	only auth method. That, in turn, allows the method to be able to
	decide what should/should not be a fatal error. Currently only
	rfc1938 uses it this way, which allows us to kill the OTP_ONLY
	define and te hackery that went with it. With access to the
	sudo_auth struct, methods can also get at a string holding their
	cannonical name (useful in error messages).

	* INSTALL,, README,, configure,,
	getspwuid.c, lex.yy.c, parse.lex, parse.yacc,,
	o --with-otp deprecated, use --without-passwd instead o real
	dependencies in the Makefile o --with-devel option to enable yacc,
	lex, and -Wall o style -- "foo -> bar" becomes "foo->bar" o ALL goes
	back to being a token, not a string but don't leak memory o rename
	hsotspec -> host in parse.yacc

1999-08-12  Todd C. Miller  <>

	recent changes

	* auth/sudo_auth.c, configure,, interfaces.c, snprintf.c,
	sudo.c, sudo.h:
	o Digital UNIX needs to check for *snprintf() before -ldb is added
	to LIBS since -ldb includes a bogus snprintf(). o Add forward refs
	for struct mbuf and struct rtentry for Digital UNIX. o Reorder some
	functions in snprintf.c to fix -Wall o Add missing includes to fix
	more -Wall

	* INSTALL, auth/sudo_auth.c, check.c,, configure,, parse.yacc,, testsudoers.c, version.c,
	o Add a "pedentic" flag to the parser. This makes sudo warn in
	cases where an alias may be used before it is defined. Only turned
	on for visudo and testsudoers. o Add --disable-authentication option
	that makes sudo not require authentication by default. The PASSWD
	tag can be used to require authentication for an entry. We no
	longer overload --without-passwd.

	* lex.yy.c, parse.lex:
	Break 'WORD' regexp def into HOSTNAME and USERNAME. These days a
	username can contain just about anything so be very permissive. Also
	drop the unused \. punctuation.

1999-08-09  Todd C. Miller  <>

	* parse.yacc,
	o add a 'val' element to aliasinfo struct and move -> parse.h o
	find_alias() now returns an aliasinfo * instead of boolean o
	add_alias() now takes a value parameter to store in the
	aliasinfo.val o The cmnd, hostspec, runasuser, and user rules now
	return: 1) positive match 0) negative match (due to '!')
	-1) no match This means setting $$ explicitly in all cases, which I
	should have done in the first place. It also means that we always
	store a value that is != -1 and when we see a '!' we can set
	*_matches to !rv if rv != -1. The upshot of all of this is that '!'
	now works the way it should in lists and some of the rules are more
	uniform and sensible.

	add parse.h dependency

	* parse.h:
	kill unused *_matched macros

	* parse.yacc:
	Allow a list of users as the first thing in a user spec, not just a
	single entry. This makes things more uniform, though it does allow
	you to write user specs that are hard to read.


	* configure:

	fix check for crypt() in libufc

1999-08-07  Todd C. Miller  <>

	sudo-users list now exists

	Update to reality.

	* CHANGES,, TODO, TROUBLESHOOTING, check.c, compat.h,, configure,, fileops.c, logging.c, sudo.h,
	version.c, visudo.c:
	o Move lock_file() and touch() into fileops.c so visudo can use them
	o Visudo now locks the sudoers temp file instead of bailing when the
	temp file already exists. This fixes the problem of stale temp
	files but it does *require* that you not try to put the temp file in
	a world-writable directory. This shoud not be an issue as the temp
	file should live in the same dir as sudoers. o Visudo now only
	installs the temp file as sudoers if it changed.

1999-08-06  Todd C. Miller  <>

	* logging.c:
	add fcntl locking

	*, configure,, logging.c:
	Lock the log file.

	*, TROUBLESHOOTING, parse.c,, sudo.c,
	visudo.c,, visudo.html,, visudo.pod:
	o /etc/stmp -> /etc/sudoers.tmp since solaris uses stmp as shadow

1999-08-05  Todd C. Miller  <>

	* INSTALL, check.c,, configure,, version.c:
	o Kill *_MESSAGE and replace with NO_LECTURE o Add more things to
	root sudo -V config reporting

	* configure,
	aix_auth.o not authenticate.o

	Add --with-goodpri and --with-badpri configure options to specify
	the syslog priority to use.

	* INSTALL, configure,, logging.h:
	Add --with-goodpri and --with-badpri configure options to specify
	the syslog priority to use.

	* compat.h:
	kill crufty AIX stuff

	Sigh, some versions of make (like Solaris's) don't deal with $< like
	I would expect. Both GNU and BSD makes get this right but... So, we
	just expand $< inline at the cost of some ugliness.

	* version.c:
	If the invoking user is root, sudo will now print configure info in
	-V mode. Currently just prints logging info, to be expanded later.

	* logging.c, logging.h, sudo.c, sudo.h:
	o new defines for syslog facility and priority o use new
	print_version() functino for -V mode

	* check.c:
	Don't need version.c

	* aclocal.m4,, configure,
	Add check for syslog facilities and priorities tables in syslog.h

	o authenticate -> aix_auth o add version.c

	* auth/sudo_auth.c:
	Missed a prompt -> user_prompt conversion

1999-08-04  Todd C. Miller  <>

	* TODO:
	sudo should lock its logfile

	* parse.yacc,
	o Add '!' correctly when expanding Aliases. o Add shortcut macros
	for append() to make things more readable. o The separator in
	append() is now a string instead of a char. o In append(), only
	prepend the separator if the last char is not a '!'. This is a
	hack but it greatly simplifies '!' handling. o In -l mode, Runas
	lists and NOPASSWD/PASSWD tags are now inherited across entries in
	a list (matches current behavior). o Fix formatting in -l mode such
	that items in a list are separated by a space. Greatlt improves
	readability. o Space for name field in struct aliasinfo is now
	allocated dyanically instead of using a (big) buffer. o In
	add_alias(), only search the list once (lsearch instead of lfind +

	* lex.yy.c,,

	* configure,
	Solais pam doesn't require anye xtra setup

	* parse.yacc:
	o Simpler '!' support now that the lexer deals with multiple !'s for
	us. o In the case of opFOO, have FOO give a boolean return value and
	set foo_matches in opFOO, not FOO. o Treat 'ALL' as a string since
	it gets fill()'d in parse.lex--fixes a small memory leak. In the
	long run it may be better to just fix parse.lex and make ALL back
	into a token. However, having it be a string is useful since it
	can be easily passed back to the parent rule if we so desire.

	* parse.lex:
	o Remove some unnecessary backslashes o collapse multiple !'s by
	using !+ and checking if yyleng is even or odd. this allows us to
	simplify ! handling in parse.yacc

	* sudo.c:
	-u flag was being ignored

1999-08-01  Todd C. Miller  <>

	correct fix

	work around pod2man stupididy

	correct dependencies for .cat


	* sudo.pod, visudo.pod:
	Add copyright Update to reality

	* parse.c, sudo.c, sudo.h:
	rename validate() to the more descriptive sudoers_lookup()

	* auth/aix_auth.c:
	use tgetpass

1999-07-31  Todd C. Miller  <>


	configure,, sudo.c:
	Sudo, not CU Sudo

	add 4th term to license similar to term 5 in the apache license

	* emul/search.h, emul/utime.h:
	add 4th term to license similar to term 5 in the apache license

	* auth/afs.c, auth/aix_auth.c, auth/dce.c, auth/fwtk.c, auth/kerb4.c,
	auth/kerb5.c, auth/pam.c, auth/passwd.c, auth/rfc1938.c,
	auth/secureware.c, auth/securid.c, auth/sia.c, auth/sudo_auth.c,
	auth/sudo_auth.h, insults.h, interfaces.c, interfaces.h, lex.yy.c,
	logging.c, logging.h, parse.c, parse.h, parse.lex, parse.yacc,, putenv.c, strerror.c, sudo.c, sudo.h,,
	sudo_setenv.c, testsudoers.c, tgetpass.c, utime.c, version.h,
	add 4th term to license similar to term 5 in the apache license

	* ins_2001.h, ins_classic.h, ins_csops.h, ins_goons.h:
	add 4th term to license similar to term 5 in the apache license

	*, alloc.c, check.c, compat.h,, find_path.c,
	getspwuid.c, goodpath.c:
	add 4th term to license similar to term 5 in the apache license

	* LICENSE, aclocal.m4, auth/rfc1938.c, check.c,,
	insults.h, logging.c, sudo.c, sudo.h:
	there was a 1995 release too

1999-07-28  Todd C. Miller  <>


	* check.c:
	Use dirs instead of files for timestamp. This allows tty and non-
	tty schemes to coexist reasonably. Note, however, that when you
	update a tty ticket, the mtime on the user dir gets updated as well.

	* configure,
	Fix getprpwnam() checking on SCO. Need to link with "-lprot -lx"
	when linking test program, not just -lprot. Also add check for
	getspnam(). The SCO docs indicate that /etc/shadow can be used but
	this may be a lie.

1999-07-24  Todd C. Miller  <>

	* auth/API:
	first cut at auth API description

1999-07-22  Todd C. Miller  <>

	* auth/fwtk.c, auth/kerb4.c, auth/kerb5.c, auth/pam.c, auth/rfc1938.c,
	auth/secureware.c, auth/securid.c, auth/sudo_auth.c,
	auth API change. There is now an init method that gets run before
	the main loop. This allows auth routines to differentiate between
	initialization that happens once vs. setup that needs to run each
	time through the loop.

	* auth/kerb5.c, logging.c:
	use easprintf() and evasprintf()

	* alloc.c, sudo.h:
	add easprintf() and evasprintf(), error checking versions of
	asprintf() and vasprintf()

	* TODO:
	remove 2 items. One done, one won't do.

	* lex.yy.c,

	* configure,, sudo.html,, sudoers.html,,

	new changes

	* sudo.pod:
	o Document -K flag and update meaning of -k flag. o BSD-style
	copyright o Document clearing of BIND resolver environment variables
	o Clarify bit about shared libs o suggest rc files create /tmp/.odus
	if your OS gives away files

	* visudo.pod:
	BSD license

	* version.h:
	BSD-style copyright

	* tgetpass.c:
	o BSD copyright o no need to block signals, we now do that in main()
	o cosmetic changes

	* testsudoers.c, visudo.c:
	o BSD-style copyright o Use "struct sudo_user" instead of old
	globals. o some cometic cleanup

	* sudo_setenv.c:
	BSD-style copyright

	* sudo.h:
	o BSD copyright o logging and parser bits moved to their own .h
	files o new "struct sudo_user" to encapsulate many of the old

	* sudo.c:
	o no longer contains sudo 1.1/1.2 code o BSD copyright o use new
	logging routines o simplified flow of control o BIND resolver
	additions to badenv_table

	* strerror.c:
	BSD-style copyright

	* snprintf.c:
	Now compiles on more K&R compilers

	* putenv.c:
	BSD-style copyright, cosmetic changes

	BSD-style copyright

	* parse.c, parse.h, parse.lex, parse.yacc:
	BSD-style copyright. Move parser-specific defines and structs into
	parse.h + other cosmetic changes

	* logging.h:
	defines for logging routines

	* find_path.c, getspwuid.c, goodpath.c, interfaces.c:
	BSD-style copyright, cosmetic changes

	* ins_2001.h, ins_classic.h, ins_csops.h, ins_goons.h, insults.h,
	BSD-style copyright

	o tgetpass.c is no longer optional o kill DCE_OBJS, add AUTH_OBJS o
	kill --disable-tgetpass o add --without-passwd o changes to fill in
	AUTH_OBJS for new auth api o check for strerror(), v?snprintf() and
	v?asprintf() o replace --with-AuthSRV with --with-fwtk

	BSD-style copyright. Remove USE_GETPASS and HAVE_UTIME_NULL. Add

	* compat.h:
	BSD-style copyright; Add S_IFLNK and MIN/MAX id they are missing.

	* alloc.c:
	BSD-style copyright

	no more --with-getpass

	* TODO:
	Take out things I've done...

	Refer to LICENSE

	--with-getpass no longer exists

	BSD-style copyright. Update to reflect reality wrt new files and
	new auth modules.

	Remove --with-AuthSRV and --disable-tgetpass. Add --with-fwtk and

	Update history a bit

	Now distributed under a BSD-style license

	* auth/sudo_auth.c:
	o BSD-style copyright o Add support for NO_PASSWD/WITHOUT_PASSWD
	options. o skey/opie replaced by rfc1938 code o new struct sudo_user

	* auth/pam.c, auth/sia.c:
	BSD-style copyright and use new log functions

	* auth/kerb5.c:
	o BSD-style copyright o Use new log functiongs o Use asprintf() and
	snprintf() where sensible.

	* check.c:
	Rewrote all the old sudo 1.1/1.2 code. Timestamp handling is now
	done more reasonably--better sanity checks and tty-based stamps are
	now done as files in a directory with the same name as the invoking
	user, eg. /var/run/sudo/millert/ttyp1. It is not currently possible
	to mix tty and non-tty based ticket schemes but this may change in
	the future (it requires sudo to use a directory instead of a file in
	the non-tty case). Also, ``sudo -k'' now sets the ticket back to
	the epoch and ``sudo -K'' really deletes the file. That way you
	don't get the lecture again just because you killed your ticket in
	.logout. BSD-style copyright now.

	* logging.c:
	o rewritten logging routines. log_error() now takes printf-style
	varargs and log_auth() for the return value of validate(). o BSD-
	style copyright

	* auth.c, check_sia.c, dce_pwent.c, secureware.c:
	superceded by new auth API

	* auth/kerb4.c:
	BSD-style copyright

	* auth/fwtk.c:
	Use snprintf() where it makes sense and add a BSD-style copyright

	* auth/afs.c, auth/aix_auth.c, auth/dce.c, auth/passwd.c,
	auth/rfc1938.c, auth/secureware.c, auth/securid.c, auth/sudo_auth.h:
	BSD-style copyright

	* emul/utime.h, utime.c:
	BSD-style copyright

	* emul/search.h:
	this has been rewritten so use my BSD-style copyright

1999-07-15  Todd C. Miller  <>

	* snprintf.c:
	include malloc.h if no stdlib.h

	* snprintf.c:
	KTH snprintf()/asprintf() for systems w/o them

	* strerror.c:
	strerror() for systems w/o it

1999-07-12  Todd C. Miller  <>

	* visudo.c:
	stylistic changes

	* parse.c, parse.lex, parse.yacc:
	Add contribution info in the main comment

1999-07-11  Todd C. Miller  <>

	* auth/pam.c:
	remove missed ref to PAM_nullpw

	* auth/sudo_auth.h:

	* auth/kerb5.c:
	more or less complete now--still untested

	* auth/afs.c, auth/pam.c:
	don't use user_name macro, it will go away

	* auth/opie.c, auth/rfc1938.c, auth/skey.c, auth/sudo_auth.h:
	combine skey/opie code into rfc1938.c

	* auth/dce.c, auth/sudo_auth.h:
	DCE authentication method; basically unchanged from dce_pwent.c

	* auth/aix_auth.c, auth/sudo_auth.h:
	AIX authenticate() support. Could probably be much better

	* auth/sia.c:
	Fix an uninitialized variable and some cleanup. Now works (tested)

	* auth/sia.c, auth/sudo_auth.h:
	SIA support for digital unix

	* auth/pam.c:
	don't use prompt global, it will go away

	* auth/secureware.c:
	correct copyright years

	* auth/afs.c, auth/fwtk.c, auth/kerb4.c, auth/kerb5.c, auth/opie.c,
	auth/pam.c, auth/passwd.c, auth/secureware.c, auth/securid.c,
	auth/skey.c, auth/sudo_auth.c, auth/sudo_auth.h:
	New authentication API and methods

1999-07-08  Todd C. Miller  <>


	* parse.yacc:
	only save an entry if user_matches && host_matches, even if the
	stack is empty (fix for previous commit)


	* parse.yacc:
	1) Always save an entry on the stack if it is empty. This fixes the
	-l and -v flags that were broken by earlier parser changes.

	2) In a Runas list, don't negate FALSE -> TRUE since that would make
	!foo match any time the user specified a runas user (via -u) other
	than foo.

	* testsudoers.c:
	interfaces and num_interfaces are now auto, not extern

1999-07-07  Todd C. Miller  <>

	* auth.c:
	use a static global to keep stae about empty passwords

	* check_sia.c:
	make PASSWORD_NOT_CORRECT logging consistent with other modules

1999-07-05  Todd C. Miller  <>

	* auth.c:
	PAM prompt code was wrong, looks like we have to kludge it after

	* auth.c:
	In the PAM code, when a user hits return at the first password
	prompt, exit without a warning just like the normal auth code

	* configure,
	kludge around cross-compiler false positives

	* auth.c, check.c, check_sia.c, logging.c, sudo.h, tgetpass.c:
	New (correct) PAM code Tgetpass now takes an echo flag for use with
	PAM_PROMPT_ECHO_ON Block SIGINT and SIGTSTP during auth remove a
	useless umask setting Change error from BAD_ALLOCATION ->
	BAD_AUTH_INIT (for use with sia/PAM) Some cosmetic changes to auth.c
	for consistency

	* sudo.c:
	Some -Wall and kill some trailing spaces

	define -D__EXTENSIONS__ for solaris so we get crypt() proto

1999-06-22  Todd C. Miller  <>

	add Dynix 4.4.4

	* INSTALL,, configure,
	for kerberos V < version, fall back on old kerb4 auth code

	clarify some things

	* UPGRADE,,, sudoers.pod:

1999-06-14  Todd C. Miller  <>

	* sudo.c:
	mention why DONT_LEAK_PATH_INFO is not the default

1999-06-03  Todd C. Miller  <>

	* tgetpass.c:
	Fix open(2) return value checking, was NULL for fopen, should be -1
	for open

	* configure:

	better wording for solaris pam notice

	document recent changes

	Update shadow password section

	* auth.c:
	move authentication code from check.c to auth.c

	*, check.c, sudo.h:
	move authentication code to auth.c

1999-05-17  Todd C. Miller  <>

	*, check.c, check_sia.c, compat.h, find_path.c,
	getspwuid.c, goodpath.c, interfaces.c, interfaces.h, lex.yy.c,
	logging.c, parse.c, parse.lex, parse.yacc, secureware.c, sudo.c,
	sudo.h,, sudo_setenv.c, testsudoers.c, tgetpass.c,
	Move interface-related defines to interfaces.h so we don't have to
	include <netinet/in.h> everywhere.

1999-05-14  Todd C. Miller  <>

	* CHANGES, INSTALL, TODO, check.c, compat.h, getspwuid.c, logging.c,
	parse.yacc, sudo.c,, tgetpass.c:
	o Replace _PASSWD_LEN braindeath with our own SUDO_MAX_PASS. It
	turns out the old DES crypt does the right thing with passwords
	longert than 8 characters. o Fix common typo (necesary ->
	necessary) o Update TODO list

1999-05-03  Todd C. Miller  <>

	* sudo.c:
	set $LOGNAME when we set $USER

1999-04-27  Todd C. Miller  <>

	add comment about digital unix and interfaces.c warning with gcc

1999-04-15  Todd C. Miller  <>

	* sample.sudoers:
	use modern paths and give examples for some of the new parser

1999-04-10  Todd C. Miller  <>

	* parse.c:
	fix comment

	* alloc.c, check.c, check_sia.c, dce_pwent.c, find_path.c,
	getspwuid.c, goodpath.c, interfaces.c, lex.yy.c, logging.c, parse.c,
	parse.lex, parse.yacc, putenv.c, secureware.c, sudo.c,,
	sudo_setenv.c, testsudoers.c, tgetpass.c, utime.c, visudo.c:
	Function names should be flush with the start of the line so they
	can be found trivially in an editor and with grep

	* find_path.c, interfaces.c, lex.yy.c, parse.c, parse.lex, parse.yacc,
	sudo.c,, testsudoers.c, tgetpass.c, visudo.c:
	free(3) is already void, no need to cast it

	* logging.c, sudo.c, sudo.h:
	catch case where cmnd_safe is not set (this should not be possible)

	* CHANGES, logging.c, parse.c, parse.yacc, sudo.c, sudo.h,,
	testsudoers.c, visudo.c:
	Stash the "safe" path (ie: the one listed in sudoers) to the command
	instead of stashing the struct stat. Should be safer.

1999-04-08  Todd C. Miller  <>

	notes on updating from an earlier release


1999-04-07  Todd C. Miller  <>

	* parse.yacc,,,, sudoers.html,, sudoers.pod:
	You can now specifiy a host list instead of just a host or alias.
	Ie: user = host1,host2,ALIAS,!host3 my_command now works.

	* testsudoers.c:
	Quiet -Wall

	* parse.yacc,
	Move the push from the beginning of cmndspec to the end. This means
	we no longer have to do a push at the end of privilege, just reset
	some values.

	*, sudoers.html,, sudoers.pod:
	runas-lists and NOPASSWD/PASSWD modifiers are now sticky and you can
	use "!" most everywhere

1999-04-06  Todd C. Miller  <>

	* sudoers.pod:
	modernize paths and update su example based on sample.sudoers one

	* sample.sudoers:
	New runas semantics

	* CHANGES,, alloc.c,, configure,,
	strdup.c, sudo.h:
	In estrdup(), do the malloc ourselves so we don't need to rely on
	the system strdup(3) which may or may not exist. There is now no
	need to provide strdup() for those w/o it. Also, the prototype for
	estrdup() was wrong, it returns char * and its param is const.

	* getcwd.c:
	$Sudo tag

	* check.c:
	buf should be prompt; Michael Robokoff <>

	* CHANGES, TODO, parse.yacc,
	It is now possible to use the '!' operator in a runas list as well
	as in a Cmnd_Alias, Host_Alias and User_Alias.

	* logging.c, sudo.h:
	Kill GLOBAL_NO_SPW_ENT (not used) and crank GLOBAL_PROBLEM

	* sudo.h:
	Definitions of *_matched were wrong--user top, not top-2 as

	* logging.c, parse.c, parse.yacc, sudo.c, sudo.h,
	Add VALIDATE_NOT_OK_NOPASS for when user is not allowed to run a
	command but the NOPASSWD flag was set. Make runasspec, runaslist,
	runasuser, and nopasswd typeless in parse.yacc Add support for '!'
	in the runas list Fix double printing of '%' and '+' for groups and
	netgroups respectively Add *_matched macros (no need for local stack
	variable). Should only be used directly after a pop (since top must
	be >= 2).

	* aclocal.m4,
	Add copyright, somewhat silly

1999-04-05  Todd C. Miller  <>

	* BUGS, INSTALL,, README, alloc.c, check.c, check_sia.c,
	compat.h,, configure,, dce_pwent.c,
	emul/utime.h, find_path.c, getspwuid.c, goodpath.c, ins_2001.h,
	ins_classic.h, ins_csops.h, ins_goons.h, insults.h, interfaces.c,
	lex.yy.c, logging.c, parse.c, parse.lex, parse.yacc,,
	putenv.c, secureware.c, strdup.c, sudo.c,, sudo.h,,, sudo_setenv.c,,,
	testsudoers.c, tgetpass.c, utime.c, version.h, visudo.c,,
	Crank version to 1.6 and combine copyright statements

	* sample.sudoers:
	Use ! not ^ to do negation

	* lex.yy.c,

	* parse.lex, parse.yacc:
	Make runas and NOPASSWD tags persistent across entris in a command
	list. Add a PASSWD tag to reverse NOPASSWD. When you override a
	runas or *PASSWD tag the value given becomes the new default for the
	rest of the command list.

1999-04-02  Todd C. Miller  <>

	update for 1.5.9
	[a1ae9d4a7d54] [SUDO_1_5_9]

	* visudo.c:
	Shift return value of system(3) by 8 to get real exit value and if
	it is not 1 or 0 print the retval along with the error message.

1999-03-30  Todd C. Miller  <>

	testsudoers needs LIBOBJS too

	* parse.c, parse.yacc,
	Fix another parser bug. For a sudoers entry like this: millert
	ALL=/bin/ls,(daemon) !/bin/ls sudo would not allow millert to run ls
	as root.

	new change

	* parse.yacc,
	Save entries that match a ! command on the matching stack too

	* sudo.c:
	Make sudo's usage info better when mutually exclusive args are given
	and don't rely on argument order to detect this;

1999-03-29  Todd C. Miller  <>

	updates from CU

	use gzip

	* parse.yacc,
	Fix off by one error introduced in *alloc changes

	* BUGS, CHANGES, INSTALL,, README, alloc.c, check.c,
	check_sia.c, compat.h,, configure,,
	dce_pwent.c, emul/utime.h, find_path.c, getspwuid.c, goodpath.c,
	ins_2001.h, ins_classic.h, ins_csops.h, ins_goons.h, insults.h,
	interfaces.c, lex.yy.c, logging.c, parse.c, parse.lex, parse.yacc,, putenv.c, secureware.c, strdup.c, sudo.c,,
	sudo.h,,, sudo_setenv.c,,, testsudoers.c, tgetpass.c, utime.c, version.h,
	visudo.c,, visudo.html,, visudo.pod:

	*, check.c, find_path.c, getspwuid.c, goodpath.c,
	interfaces.c, lex.yy.c, logging.c, parse.c, parse.lex, parse.yacc,
	putenv.c, secureware.c, strdup.c, sudo.c, sudo.h,,
	sudo_setenv.c, testsudoers.c, utime.c, visudo.c:
	Use emalloc/erealloc/estrdup

	* alloc.c:
	error checking memory allocation routines

	* parse.yacc,
	Still not right, this fixes it for real

	* parse.yacc,
	Fix for previous commit

	* CHANGES, INSTALL, parse.yacc:
	Fix a parser bug that was exposed when mixing different runas specs
	and ! commands. For example: millert ALL=(daemon)
	/usr/bin/whoami,!/bin/ls would allow millert to run whoami as root
	as well as daemon when it should just allow daemon. The problem was
	that comma-separated commands in a list shared the same entry on the
	matching stack. Now they get their own entry iff there is a full
	match. It may be better to just make the runas spec persistent
	across all commands in a list like the user and host entries of the
	matching stack. However, since that is a fairly major change it
	should gets its own minor rev increase.

1999-03-28  Todd C. Miller  <>

	* check.c,
	Simplify PAM code and fix a PAM-related warning on Linux

1999-03-26  Todd C. Miller  <>


	* sample.sudoers:
	better su entry

	* configure:

	* check.c,
	new pam code that works on solaris, should work on linux too;

1999-03-19  Todd C. Miller  <>

	more entries

	only include strings.h if there is no string.h

1999-03-17  Todd C. Miller  <>

	* config.guess:
	Sinix is now being called ReliantUNIX;

1999-03-13  Todd C. Miller  <>

	* sudo.c:
	shost must be set before log functions are called #ifdef HOST_IN_LOG

1999-03-07  Todd C. Miller  <>

	* CHANGES, lex.yy.c, parse.lex:
	Fix a bug wrt quoting characters in command args. Stop processing
	an arg when you hit a backslash so the quoted-character detection
	can catch it.

1999-02-26  Todd C. Miller  <>

	* interfaces.c:
	include sys/time.h; aparently AIX needs it.

1999-02-24  Todd C. Miller  <>

	* configure,
	add missing case statement so --without-sendmail works

1999-02-23  Todd C. Miller  <>


1999-02-22  Todd C. Miller  <>

	* configure,
	only search for -lsun in irix <= 4.x

	* configure,
	back out last change now that I've hacked autoconf to
	fix the real problem and add a missing newline


	* getcwd.c:
	add def of dirfd() for those without it

	* configure,
	When falling back to checking for socket() when linking with
	"-lsocket -lnsl" check for main() instead since autoconf has already
	cached the results of checking for socket() in -lsocket. This is
	really an autoconf bug as it should use the extra libs as part of
	the cache variable name.


1999-02-21  Todd C. Miller  <>

	fix occurrence of $with_timeout that should be

1999-02-17  Todd C. Miller  <>

	*, sudo.html,, sudo.pod:
	fix grammar;
	[7031d9dfbc3e] [SUDO_1_5_8]

1999-02-11  Todd C. Miller  <>

	* parse.yacc, sudo.c, testsudoers.c:
	add cast for strdup in places it does not have it

1999-02-09  Todd C. Miller  <>

	* configure,
	define for_BSD_TYPES irix

1999-02-07  Todd C. Miller  <>

	*,, sudo.html,, sudo.pod:
	Make it clear that it is the user's password, not root's, that we

	* check.c, sudo.h:
	If the user enters an empty password and really has no password,
	accept the empty password they entered. Perviously, they could
	enter anything
	*but* an empty password. Also, add GETPASS macro that calls either
	tgetpass() or getpass() depending on how sudo was configured.
	Problem noted by

1999-02-03  Todd C. Miller  <>

	*, check.c, check_sia.c, compat.h,,
	dce_pwent.c, emul/utime.h, find_path.c, getspwuid.c, goodpath.c,
	ins_2001.h, ins_classic.h, ins_csops.h, ins_goons.h, insults.h,
	interfaces.c, logging.c, parse.c, parse.lex, parse.yacc,, putenv.c, secureware.c, strdup.c, sudo.c, sudo.h,
	sudo_setenv.c, testsudoers.c, tgetpass.c, utime.c, version.h,
	add explicate copyright

	mention -lsocket, -lnsl configure changes

1999-02-02  Todd C. Miller  <>

	* sudo.c:
	Don't clobber errno after calling check_sudoers().

1999-02-01  Todd C. Miller  <>

	* configure,
	When linking with both -lsocket and -lnsl be sure to do so in that
	order. Also, when we can't find socket() or inet_addr() and have to
	try linking with both libs, issue a warning.

	*,, sudo.pod:
	clarify bad timestamp and fmt

1999-01-23  Todd C. Miller  <>

	be clear that pam is linux-only and add a RUNSON entry

1999-01-22  Todd C. Miller  <>

	* CHANGES, INSTALL, configure,
	fix and correctly document --with-umask; problem noted by

1999-01-20  Todd C. Miller  <>

	* configure,
	only use /usr/{man,catman}/local to store man pages if suer didn't
	override prefix or mandir

	* INSTALL, configure,
	fix typo, make --with-SecurID take an arg

1999-01-19  Todd C. Miller  <>

	updates from users

	* CHANGES, INSTALL, check.c, configure,
	FWTK 'authsrv' support from Kevin Kadow <kadow@MSG.NET>

	* configure,
	better fix for the problem of unresolved symbols in -lnsl or

	* configure,
	when checking for functions in -lnsl and -lsocket link with both of
	them to avoid unresolved symbols on some weirdo systems

1999-01-18  Todd C. Miller  <>

	old changes that didn't make it into RCS before the RCS->CVS switch

1999-01-17  Todd C. Miller  <>

	*, check.c, check_sia.c, compat.h,,, dce_pwent.c, emul/search.h, emul/utime.h, find_path.c,
	getspwuid.c, goodpath.c, ins_2001.h, ins_classic.h, ins_csops.h,
	ins_goons.h, insults.h, interfaces.c, lex.yy.c, logging.c,
	lsearch.c, parse.c, parse.lex, parse.yacc,, putenv.c,
	secureware.c, strdup.c, sudo.c, sudo.pod, sudo_setenv.c,
	sudoers.pod, testsudoers.c, tgetpass.c, utime.c, visudo.c,
	add sudo tags

	* sudo.h:
	testing Sudo tag

	* version.h:
	testing Sudo tag

	* BUGS, INSTALL,, README, check.c, check_sia.c, compat.h,, configure,, dce_pwent.c, emul/utime.h,
	find_path.c, getspwuid.c, goodpath.c, ins_2001.h, ins_classic.h,
	ins_csops.h, ins_goons.h, insults.h, interfaces.c, lex.yy.c,
	logging.c, parse.c, parse.lex, parse.yacc,, putenv.c,
	secureware.c, strdup.c, sudo.c,, sudo.h,,
	sudo_setenv.c,,, testsudoers.c, tgetpass.c,
	utime.c, version.h, visudo.c,,
	crank version and regen files

	kill rcs goop in update_version and fix now that version is a const

	* INSTALL, check.c,, configure,, logging.c,
	sudo.c, sudo.h, sudo.pod:
	kerb5 support from

	* realpath.c, sudo_realpath.c:
	we no longer use realpath

	* qualify.c:
	replaced by find_path.c

	* options.h:
	all options are now configure flags

	* lex.yy.c:

	* getwd.c:
	superceded by getcwd.c

	* getpass.c:
	superceded by tgetpass.c

	superceded by RUNSON

	No longer used now that we have configure options for everything.

	* configure:
	regen based on

	*, sudo.html,,, sudoers.html,,, visudo.html,
	regen based on sudo.pod, sudoers.pod, and visudo.pod

1998-12-11  Todd C. Miller  <>

	* check.c:
	fix tty tickets in remove_timestamp (didn't use ':')

1998-12-07  Todd C. Miller  <>

	* interfaces.c:
	close sock when we are done with it

1998-11-28  Todd C. Miller  <>

	* parse.yacc:
	never say "error on line -1"

1998-11-24  Todd C. Miller  <>

	check for -lnsl before -lsocket

	quote '[', ']' used in ranges correctly

1998-11-21  Todd C. Miller  <>

	add missing NO_ROOT_SUDO noted by

1998-11-20  Todd C. Miller  <>

	* version.h:

	more info for 1.5.7

	update for 1.5.7

	* parse.yacc:
	make increases of cm_list_size and ga_list_size be similar to
	increases of stacksize (ie: >= not > in initial compare).

	* parse.yacc:
	when we get a syntax error, report it for the previous line since
	that's generally where the error occurred.

1998-11-18  Todd C. Miller  <>

	*,, interfaces.c:
	add back check for sys/sockio.h but only use it if SIOCGIFCONF is
	not defined
	[d197f31fd1e4] [SUDO_1_5_7]

	define BSD_COMP for svr4

	* check.c, check_sia.c, find_path.c, getcwd.c, getspwuid.c,
	goodpath.c, interfaces.c, logging.c, lsearch.c, parse.c, parse.lex,
	parse.yacc, putenv.c, secureware.c, strdup.c, sudo.c, sudo_setenv.c,
	testsudoers.c, tgetpass.c, utime.c, visudo.c:
	more -Wall

	kill check for sockio,h


	* check.c, check_sia.c, find_path.c, getcwd.c, getspwuid.c,
	goodpath.c, interfaces.c, logging.c, lsearch.c, parse.c, parse.lex,
	parse.yacc, putenv.c, secureware.c, strdup.c, sudo.c, sudo_setenv.c,
	testsudoers.c, tgetpass.c, utime.c, visudo.c:

1998-11-16  Todd C. Miller  <>

	* sudo.c:
	add missing inform_user()

1998-11-14  Todd C. Miller  <>

	* find_path.c:
	return NOT_FOUND if given fully qualified path and it does not exist
	previously it would perror(ENOENT) which bypasses the option to not
	leak path info

	for kerb5, check for -lkerb4, fall back on -lkrb for kerb, check for

1998-11-13  Todd C. Miller  <>

	tty tickets are user:tty now

	* check.c:
	when using tty tickets make it user:tty not user.tty as a username
	could have a '.' in it

1998-11-10  Todd C. Miller  <>

	* sudo.c:
	add "ignoring foo found in ." for auth successful case

1998-11-09  Todd C. Miller  <>

	* sudo.c:
	add missing printf param

1998-11-08  Todd C. Miller  <>

	* INSTALL,,, find_path.c, sudo.c, sudo.h:
	go back to printing "command not found" unless --disable-path-info
	specified. Also, tell user when we ignore '.' in their path and it
	would have been used but for --with-ignore-dot.

	* check.c, sudo.c:
	Only one space after a colon, not two, in printf's

1998-11-05  Todd C. Miller  <>

	* sudo.pod:
	document setting $USER

	* check.c:
	fix bugs with prompt expansion

	* sudo.c:
	set $USER for root too

1998-11-04  Todd C. Miller  <>

	* getspwuid.c:

	HP-UX's iscomsec is in -lsec, not libc

	remove some entries in the OS case statement that did nothing

	add "cd" section and flush out syslog section

	no more sudo-lex.yy.c

	* check_sia.c:
	add custom prompt support

	* testsudoers.c:
	kill perror("malloc") since we already have a good error messages
	pw_ent -> pw for brevity

	* sudo.c:
	kill perror("malloc") since we already have a good error messages
	pw_ent -> pw for brevity set $USER if -u specified

	* parse.yacc:
	kill perror("malloc") since we already have a good error messages

	* parse.c:
	kill perror("malloc") since we already have a good error messages
	pw_ent -> pw for brevity when checking if %group matches, look up
	user in password file so that %groups works in a RunAs spec.

	* logging.c:
	kill perror("malloc") since we already have a good error messages

	* check.c, getspwuid.c, interfaces.c:
	kill perror("malloc") since we already have a good error messages
	pw_ent -> pw for brevity

1998-11-03  Todd C. Miller  <>

	* tgetpass.c:
	the prompt is expanded before tgetpass is called

	* sudo.h:
	tgetpass now has the same args as getpass again

	* getspwuid.c:
	add iscomsec, issecure support

	* check.c:
	we now expand any %h or %u in the prompt before passing to tgetpass

	add check for syslog(3) in -lsocket, -lnsl, -linet


	add check for iscomsec in HP-UX

	check for issecure if we have getpwanam on SunOS some options are
	incompatible with DUNIX SIA check for dispcrypt on DUNIX

1998-10-25  Todd C. Miller  <>


	* secureware.c:
	add back support for non-dispcrypt based checking for older DUNIX

	sia changes

	SIA becomes the default on Digital UNIX now havbe --disable-sia to
	turn it off...

	* check.c:
	move local includes after system ones

1998-10-24  Todd C. Miller  <>

	* check.c, check_sia.c, sudo.h:
	add pass_warn() which prints out INCORRECT_PASSWORD or an insult to

	* check_sia.c:
	fix while loop in sia_attempt_auth() that checks the password. Only
	the first iteration was working.

1998-10-22  Todd C. Miller  <>

	* aclocal.m4:
	don't trust UID_MAX or MAXUID

	fix two pastos

	fix typo

	* getspwuid.c, secureware.c:
	init crypt_type to INT_MAX since it is legal to be negative in DUNX

	for secureware on dunix, use -lsecurity -ldb -laud -lm but check for
	-ldb since DUNX < 4.0 lacks it

1998-10-21  Todd C. Miller  <>

	* check.c, compat.h,,, getspwuid.c,
	secureware.c, sudo.c, tgetpass.c:
	getprpwuid is broken in HP-UX 10.20 at least (it sleeps for 2
	minutes if the shadow files don't exist).

1998-10-20  Todd C. Miller  <>

	updated --with-editor blurb

	tell how to put sudoers in a different dir

	add missing quotes around $with_editor

	typo in --with-editor bits

	I don't expect it to work on Solaris

	* check.c:
	add back security/pam_misc.h

1998-10-19  Todd C. Miller  <>

	remove dunix note since configure checks for this now

	add check for broken dunix prot.h (4.0 < 4.0D is bad)

	* getspwuid.c, secureware.c, tgetpass.c:
	new dunix shadow code, use dispcrypt(3)


	* sudo.c:
	call initprivs() if we have it for getprpwuid later on

	clean pathnames.h too

	quote "Sorry, try again." with [] since it has a comma in it set
	LIBS when we add stuff to SUDO_LIBS set SECUREWARE when we find
	getprpwuid() so we can check for bigcrypt, set_auth_parameters, and
	initprivs later.

	update Digital UNIX note about acl.h

	add --with-sia
	--without-root-sudo -> --disable-root-sudo some reordering

	* secureware.c:
	add whitespace

	*, check.c,,, logging.c, sudo.h:
	add SIA support

	* check_sia.c:
	Initial revision

1998-10-18  Todd C. Miller  <>

	when checking for -lsocket, -lnsl, and -linet, check for the
	specific functions we need from them.

	*, sudo.h:
	move Syslog_* defs into sudo.h

	*, sudo.h:
	added check_secureware

	finished adding AC_MSG_CHECKING and AC_MSG_RESULT bits

	* insults.h:
	don't define CLASSIC_INSULTS and CSOPS_INSULTS if no other sets
	defined. configure now does that for us

	move some --with options around change a bunch of echo's to

	change $with_foo-bar -> $with_foo_bar kill extra " that caused a
	syntax error add some echo verbage

1998-10-17  Todd C. Miller  <>

	* check.c:
	moved SecureWare stuff into secureware.c

	* secureware.c:
	Initial revision

	update url to solaris gcc bins

	change option formatter and flesh out someentries

	* TROUBLESHOOTING, sudo.pod, visudo.pod:
	environmental variable -> environment variable

	* BUGS:
	everything is now done via configure

	prev rev was 1.5.6


	SUDOERS_MODE, SUDOERS_UID, SUDOERS_GID now come from the Makefile

	merge OSDEFS and OPTIONS into DEFS get sudoers_uid, sudoers_gid,
	sudoers_mode from configure

	SUDOERS_MODE, SUDOERS_UID, and SUDOERS_GID now get substituted into
	the Makefile, not config.h

	document all --with/--enable options

1998-10-15  Todd C. Miller  <>

	* insults.h:
	options.h is no more

	assimilated options.h

	moved options from options.h to configure

	* check.c, find_path.c, getspwuid.c, goodpath.c, interfaces.c,
	logging.c, parse.c, parse.lex, parse.yacc, sudo.c, sudo.pod,
	sudo_setenv.c, visudo.c:
	no more options.h

	remove references to options.h

	* dce_pwent.c, interfaces.c, sudo.c:
	kill sys/time.h

	* tgetpass.c:
	if select return < -1 still prompt for pw

	* options.h:
	configure options

	* parse.c:
	FAST_MATCH is no longer an optino

	* check.c:
	remove_timestamp() if timestamp is preposterous

	* options.h:
	convert more options to --with/--enable

	* INSTALL, aclocal.m4:
	logfile -> logpath

	convert more options into --with and --enable

	* tgetpass.c:
	catch EINTR in select and restart

	* logging.c:
	sys/errno -> errno

1998-09-24  Todd C. Miller  <>

	* sudo.c:

	* check.c, logging.c:
	time.h, not sys/time.h

1998-09-21  Todd C. Miller  <>

	* logging.c:

	no more --with-C2, now it is --disable-shadow

	* aclocal.m4, check.c, compat.h,,,
	getspwuid.c, sudo.c, tgetpass.c:
	new shadow password scheme. Always include shadow support if the
	platform supports it and the user did not disable it via configure

1998-09-20  Todd C. Miller  <>

	--with-getpass -> --{enable,disable}-tgetpass

	pathnames.h ->

	* check.c:
	fix version string

	* check.c:
	move pam_conv to be static to auth function remove pam_misc.h
	(solaris doesn't have one)

	* aclocal.m4:

	munge -> pathnames.h kill SUDO_PROG_PWD

	convert to

1998-09-19  Todd C. Miller  <>

	fix typo in sysv4 matching case /.

1998-09-18  Todd C. Miller  <>

	* check.c:
	pam stuff needs to run as root, not user, for shadow passwords

1998-09-17  Todd C. Miller  <>

	updated version

	*, check.c, compat.h,, dce_pwent.c,
	emul/utime.h, find_path.c, getspwuid.c, goodpath.c, ins_2001.h,
	ins_classic.h, ins_csops.h, ins_goons.h, insults.h, interfaces.c,
	logging.c, options.h, parse.c, parse.lex, parse.yacc,, putenv.c, strdup.c, sudo.c, sudo.h, sudo_setenv.c,
	testsudoers.c, tgetpass.c, utime.c, visudo.c:
	updated version

	* check.c:
	user version.h for long message

	* check.c:
	this is version 1.5.6

1998-09-16  Todd C. Miller  <>

	remove errant backslash

1998-09-15  Todd C. Miller  <>

	* options.h, parse.yacc,
	fix version string
	[fdee73255d64] [SUDO_1_5_6]

	updtaed for 1.5.6

	updated for 1.5.6

1998-09-14  Todd C. Miller  <>

	* interfaces.c:
	kill unused localhost_mask var copy if name to ifr_tmp after we zero

1998-09-13  Todd C. Miller  <>

	Better description of new vs. old sudoers modes fix some typos
	better description of /usr/ucb/cc gotchas on slowaris

	add sample.pam

	* sudo.c:
	set NewArgv[0] to user_shell, not basename(user_shell)

1998-09-12  Todd C. Miller  <>

	mention TROUBLESHOOTING more fix some typos

	move --enable/--disable to be after --with

	document --enable/--disable

	document --with-pam

1998-09-11  Todd C. Miller  <>

	Add message for pam users

	* sample.pam:
	Initial revision


	* check.c,,
	pam support, from Gary Calvin <>

1998-09-10  Todd C. Miller  <>


	* logging.c:

	add --enable-log-host and --enable-log-wrap

	* aclocal.m4:
	use AC_DEFINE_UNQUOTED for --with-logfile and --with-timedir

1998-09-09  Todd C. Miller  <>

	* compat.h:
	add howmany macro

	* tgetpass.c:
	include sys/param.h to get howmany macro

1998-09-08  Todd C. Miller  <>

	* OPTIONS, options.h, parse.yacc, sudo.c, testsudoers.c, visudo.c:

1998-09-07  Todd C. Miller  <>

	* fnmatch.c:
	bring in stdio.h for NULL

	* aclocal.m4:
	allow /bin/{ksh,bach} and /usr/bin/{ksh,bash} as sh

	* sudo.c:


	add *-*-hiuxmpp* add test for set_auth_parameters() if secureware

	* config.sub:
	add support for HI-UX/MPP SR220001 02-03 0 SR2201

	* interfaces.c:
	initialize previfname

	* interfaces.c:
	Don't use SIOCGIFADDR, we don't need it Use SIOCGIFFLAGS if we have
	it check ifr_flags against IFF_UP and IFF_LOOPBACK instead of
	kludging it


	don't need special build line for

	don't clean[ch]

	* sudo.c:
	Sudo should prompt for a password before telling the user that a
	command could not be found.

	* BUGS:
	for 1.5.6

	no longer require yacc


	* -> include pre-yacc'd parse.yacc

	* parse.lex:
	include, not don't break out of command args if
	you get a '='

	* insults.h:
	fix version ,

	* ins_2001.h, ins_classic.h, ins_csops.h, ins_goons.h:
	fix version

	* compat.h:
	fix version

	* getcwd.c:
	getcwd(3) from OpenBSD for those without it.

	* sudo.h:

	pretend sunos doesn't have getcwd(3) since it opens a pipe to

	* parse.c:
	use NAMLEN() macro

	* fnmatch.c:
	remove duplicate include of string.h


	* aclocal.m4:

	add dev_t and ino_t

1998-07-28  Todd C. Miller  <>

	* check.c:
	fix OTP_ONLY for opie

1998-06-24  Todd C. Miller  <>

	* testsudoers.c, tgetpass.c:
	include stdlib.h for malloc proto

1998-05-19  Todd C. Miller  <>

	make update_version saner

	add HAVE_WAITPID, HAVE_WAIT3, and sudo_waitpid()

	check for waitpid and wait3 or no waitpid

	* logging.c:
	used waitpid or wait3 if we have 'em

1998-05-02  Todd C. Miller  <>

	* visudo.c:
	fix some fprintf args, (Ariel Faigon)

1998-04-28  Todd C. Miller  <>

	don't need to explicately mention -lsocket -lnsl for sequent

1998-04-25  Todd C. Miller  <>

	dynix should not link with -linet

1998-04-10  Todd C. Miller  <>

	mention that HP-UX doesn't ship with yacc

1998-04-07  Todd C. Miller  <>

	* check.c:
	ignore kerberos if we can't get the local realm

1998-04-06  Todd C. Miller  <>


	* version.h:

	*, check.c,, dce_pwent.c, emul/utime.h,
	find_path.c, getcwd.c, getspwuid.c, goodpath.c, interfaces.c,
	logging.c, parse.c, parse.lex, putenv.c, strdup.c, sudo.c, sudo.h,
	sudo_setenv.c, testsudoers.c, tgetpass.c, utime.c, visudo.c:
	updated version

	* check.c, sudo.h:
	fix version

	* getcwd.c:
	don't use popen/pclose. Do it inline.

	* lsearch.c:
	add rcsid

	* sudo.c:

	* check.c, compat.h, ins_2001.h, ins_classic.h, ins_csops.h,
	ins_goons.h, insults.h, options.h, parse.yacc,,
	updated version

	* check.c, find_path.c, parse.c, sudo.c, testsudoers.c:
	MAX* + 1 -> MAX*

	getwd.c -> getcwd.c


	getcwd, not getwd

	* getcwd.c:
	use MAX* not MAX* + 1 always run pwd as using getwd() defeats the

1998-03-31  Todd C. Miller  <>

	* OPTIONS, options.h:

	*, check.c, compat.h,, dce_pwent.c,
	emul/utime.h, find_path.c, getspwuid.c, getwd.c, goodpath.c,
	ins_2001.h, ins_classic.h, ins_csops.h, ins_goons.h, insults.h,
	interfaces.c, logging.c, options.h, parse.c, parse.lex, parse.yacc,, putenv.c, strdup.c, sudo.c, sudo.h, sudo_setenv.c,
	testsudoers.c, tgetpass.c, utime.c, visudo.c:
	updated version

	support *-ccur-sysv4 and fix two typos

1998-03-28  Todd C. Miller  <>

	don't echo about with_logfile and with_timedir

	document --with-logfile and --with-timedir

	* aclocal.m4:
	support --with-logfile and --with-timedir

	Add --with-logfile and --with-timedir

	* sudo.c:
	change size computation of NewArgv for UNICOS

1998-02-19  Todd C. Miller  <>

	treate -*-sysv4* like *-*-svr4

1998-02-18  Todd C. Miller  <>

	fix spacing for --with-authenticate help

	*, check.c, compat.h,, dce_pwent.c,
	emul/utime.h, find_path.c, getspwuid.c, getwd.c, goodpath.c,
	ins_2001.h, ins_classic.h, ins_csops.h, ins_goons.h, insults.h,
	interfaces.c, logging.c, options.h, parse.c, parse.lex, parse.yacc,, putenv.c, strdup.c, sudo.c, sudo.h, sudo_setenv.c,
	testsudoers.c, tgetpass.c, utime.c, visudo.c:
	updated version

	* parse.yacc:
	fix off by one error in push macro

1998-02-17  Todd C. Miller  <>

	removed bogus alloca hack

	* check.c:
	added AIX 4.x authenticate() support

	* parse.yacc:
	include alloca.h if using bison and not gcc and it exists. fixes an
	alloca problem on hpux 10.x

	mention --with-authenticate

	added AIX authenticate() support


	* interfaces.c:
	dynamically size ifconf buffer

	quote '[' and ']'

	*, check.c, compat.h,, dce_pwent.c,
	emul/utime.h, find_path.c, getspwuid.c, getwd.c, goodpath.c,
	ins_2001.h, ins_classic.h, ins_csops.h, ins_goons.h, insults.h,
	logging.c, options.h, parse.c, parse.lex, parse.yacc,, putenv.c, strdup.c, sudo.c, sudo.h, sudo_setenv.c,
	testsudoers.c, tgetpass.c, utime.c, visudo.c:
	updated version

	* visudo.pod:
	add ERRORS section

1998-02-16  Todd C. Miller  <>

	add busy stmp file explanation

1998-02-15  Todd C. Miller  <>

	the name of the cached var that signals whether or not you are cross
	compiling changed. It is now ac_cv_prog_cc_cross

1998-02-11  Todd C. Miller  <>

	mention glibc 2.07 is fixed wrt lsearch()\.

1998-02-07  Todd C. Miller  <>

	* sample.sudoers, sudoers.pod:
	better example of su but not root su

1998-02-06  Todd C. Miller  <>

	*, check.c, compat.h,, dce_pwent.c,
	emul/utime.h, find_path.c, getspwuid.c, getwd.c, goodpath.c,
	ins_2001.h, ins_classic.h, ins_csops.h, ins_goons.h, insults.h,
	interfaces.c, logging.c, options.h, parse.c, parse.lex, parse.yacc,, putenv.c, strdup.c, sudo.c, sudo.h, sudo_setenv.c,
	testsudoers.c, tgetpass.c, utime.c, visudo.c:
	updated version

	correct regexp for updating version

	* tgetpass.c:
	remove bogus flush of stderr spew prompt before turning off echo.
	Seems to fix a weird problem where if sudo complained about a bogus
	stamp file the user would sometimes not have a chance to enter a

	* check.c:
	fix bogus flush of stderr

	* sudo.c:
	close fd's <=2 not <=3 and move that chunk of code up

	support hpux1[0-9] not just hpux10

1998-01-30  Todd C. Miller  <>

	* parse.c:
	set sudoers_fp to nil after closing

1998-01-24  Todd C. Miller  <>

	* config.guess, config.sub:
	updated from autoconf 2.12

	add *-*-svr4 rule

1998-01-23  Todd C. Miller  <>

	* tgetpass.c:
	fix select usage for high fd's (dynamically allocate readfds)

	* check.c:
	kill extra whitespace

	* sudo.c:
	do an initgroups() before running a command, unless the target user
	is root.

1998-01-22  Todd C. Miller  <>

	tell people to use tabs, not spaces, in syslog.conf

1998-01-21  Todd C. Miller  <>

	*,, dce_pwent.c, emul/utime.h, getwd.c,
	parse.lex, putenv.c, strdup.c, testsudoers.c, utime.c:
	updated version

	* check.c, find_path.c, getspwuid.c, goodpath.c, interfaces.c,
	logging.c, parse.c, sudo.c, sudo_setenv.c, tgetpass.c, visudo.c:
	updated version

	* compat.h, ins_2001.h, ins_classic.h, ins_csops.h, ins_goons.h,
	insults.h, options.h, parse.yacc,, sudo.h:
	updated version

	more tweaks to update_version

	fixed up update_version rule


	removed supe of check.c

	++version I missed


	* BUGS, INSTALL,, README, check.c, compat.h,,
	dce_pwent.c, emul/utime.h, find_path.c, getspwuid.c, getwd.c,
	goodpath.c, ins_2001.h, ins_classic.h, ins_csops.h, ins_goons.h,
	insults.h, interfaces.c, logging.c, options.h, parse.c, parse.lex,
	parse.yacc,, putenv.c, strdup.c, sudo.c, sudo.h,
	sudo_setenv.c, testsudoers.c, tgetpass.c, utime.c, version.h,
	updated version

	updated for 1.5.5

	add rules to update version stuff in files so I don't need to do it
	by hand

	* sudo.h:
	sudoers_fp is now extern

	* sudo.c:
	in check_sudoers, cache the sudoers file handle in sudoers_fp so we
	don't have to open it again in the parse. This may help with weird
	solaris problems where EAGAIN sometime occurrs.

	* parse.c:
	sudoers file open is now done only in check_sudoers() so we just do
	a rewind() instead of an open. May help people on solaris who were
	getting EAGAIN.

1998-01-16  Todd C. Miller  <>

	mention that newer glibc is fixed

1998-01-13  Todd C. Miller  <>

	* sudo.c:
	newer irix uses _RLDN32_* envariables for 32-bit binaries so ignore
	_RLD* instead of _RLD_*

	* parse.c:

	* parse.c:
	fix that bug for real

	document Linux's libc6 brokenness.

	* parse.yacc:

	[4949a1bbd0a9] [SUDO_1_5_4]

	remind people to HUP syslogd

	add -O flag to tar


	* TODO:

	* sudo.pod:
	remove author's email addr. people should mail sudo-bugs

	fix version

	* README, check.c, compat.h,,, dce_pwent.c,
	find_path.c, getspwuid.c, getwd.c, goodpath.c, ins_2001.h,
	ins_classic.h, ins_csops.h, ins_goons.h, insults.h, interfaces.c,
	logging.c, options.h, parse.c, parse.lex, parse.yacc,, putenv.c, strdup.c, sudo.c, sudo.h, sudo_setenv.c,
	testsudoers.c, tgetpass.c, utime.c, version.h, visudo.c:



	updated fort 1.5.4

	* check.c:
	exit(1) if user enters no passwd

	* BUGS:

	* parse.c:
	commands can start with ./* not just /* -- fixes a serious security

1997-12-21  Todd C. Miller  <>

	* sudo.c:
	Don't set the tty variable to NULL when we lack a tty, leave it as

1997-11-23  Todd C. Miller  <>

	* sample.sudoers:
	fix usage of (username) in conjunction with , and !

	* visudo.c:
	catch the case where the user is not in the passwd file

	* tgetpass.c:
	use fileno(input) + 1 instead of getdtablesize() as the nfds arg to

	* sudo.c:
	define tty global to an initial value to avoid dumping core in
	logging functions when passwd file is unavailable.

	* sudo.c:
	do the set_perms(PERM_USER, sudo_mode) after we have gotten the
	passwd entry

	* sudo.pod:
	talk about problem of ALL

1997-10-10  Todd C. Miller  <>

	new web location

	fdesc bug is fixed in Open/Net BSD

	updates from Nieusma

1997-10-09  Todd C. Miller  <>

	* dce_pwent.c:
	move compat.h after the system includes

1997-08-06  Todd C. Miller  <>

	* logging.c:
	save errno from being clobbered by wait(). From Theo

1997-05-21  Todd C. Miller  <>

	* compat.h:
	fix an occurence of setresuid -> setreuid (typo)

1997-03-19  Todd C. Miller  <>

	* install-sh:
	check for path to strip

1997-01-16  Todd C. Miller  <>

	* logging.c:
	deal with maxfilelen < 0 case

	fixed descriptin

1996-12-12  Todd C. Miller  <>

	* sudo.c:
	correct error message if mode/owner wrong and not statable by owner
	but is statable by root.

1996-11-23  Todd C. Miller  <>

	* config.guess, config.sub:
	autoconf 2.11

1996-11-16  Todd C. Miller  <>

	sudo 1.5.3.

1996-11-14  Todd C. Miller  <>

	* parse.yacc, sudo.h:
	command_alias -> generic_alias
	[c404ca8c510d] [SUDO_1_5_3]

	* sample.sudoers:
	added Runas_Alias example and fixed syntax errors

	* OPTIONS, options.h:

	* logging.c:
	added %h expansion

	* INSTALL,, README, check.c, compat.h,,, dce_pwent.c, find_path.c, getspwuid.c, getwd.c,
	goodpath.c, ins_2001.h, ins_classic.h, ins_csops.h, ins_goons.h,
	insults.h, interfaces.c, logging.c, options.h, parse.c, parse.lex,
	parse.yacc,, putenv.c, strdup.c, sudo.c, sudo.h,
	sudo_setenv.c, testsudoers.c, tgetpass.c, utime.c, version.h,

	* BUGS, emul/utime.h:

	* sudoers.pod:
	document Runas_Alias

	* visudo.pod:
	q (uid) -> Q

	* visudo.c:
	buffer oflow checking q (uit) -> Q if yyparse() fails drop into

	* parse.yacc:
	add size params to sprintf

	* parse.lex:
	allow trailing space after '\\' but before '\n'

	* find_path.c:
	off by one error in path size check

	* check.c:
	sprintf paranoia

1996-11-12  Todd C. Miller  <>

	* parse.yacc:
	fixed more_aliases

	* visudo.c:
	now warns if killed by signal ./

1996-11-11  Todd C. Miller  <>

	* parse.yacc:
	fix Runas_Alias stuff Alias's in runas list now get expanded (but it
	is gross)

	* sudo.c:
	Can now deal with SUDOERS_UID == 0 and SUDOERS_MODE == 0400

	* parse.yacc:
	add Runas_Alias support change FOO to FOO_ALIAS (ie: USER_ALIAS)

	* parse.lex:
	Add Runas_Alias and simplify a rule.

	* parse.yacc:
	always store User_Alias's since they can be used inside of a runas
	list. Sigh. Really need a Runas_Alias instead.

1996-10-30  Todd C. Miller  <>

	* visudo.c:
	deal with case where there is no sudoers file

1996-10-12  Todd C. Miller  <>

	added one

1996-10-11  Todd C. Miller  <>

	* HISTORY, testsudoers.c:
	developement -> development

	added a note

	for 1.5.2


1996-10-10  Todd C. Miller  <>

	removed seteuid() notes
	[1010a60f281d] [SUDO_1_5_2]

1996-10-09  Todd C. Miller  <>

	* compat.h:
	better seteuid() emulatino

	added check for seteuid


1996-10-08  Todd C. Miller  <>

	first stab at sequent support


	* compat.h:
	sequent -> _SEQUENT_

	* compat.h:
	added seteuid() macro for DYNIX

	* tgetpass.c:

1996-10-07  Todd C. Miller  <>

	parse.c, parse.lex, parse.yacc, putenv.c, strdup.c, sudo_setenv.c,
	testsudoers.c, tgetpass.c, utime.c, visudo.c:

	* check.c, compat.h, dce_pwent.c, emul/utime.h, find_path.c,
	getspwuid.c, getwd.c, goodpath.c, ins_2001.h, ins_classic.h,
	ins_csops.h, ins_goons.h, insults.h, interfaces.c, options.h,, version.h:

	* sudo.pod:
	added -H and SUDO_PS1


	* aclocal.m4:

	* sudo.c:
	added -H flag

	* sudo.h:

1996-10-05  Todd C. Miller  <>

	mention OPIE

	* options.h:

	added opie support

	* compat.h,
	added HAVE_OPIE

	* check.c:
	added HAVE_OPIE and changed to *_OTP_*


1996-10-04  Todd C. Miller  <>

	* check.c:
	moved fclose() in skey stuff.

1996-10-03  Todd C. Miller  <>

	* putenv.c:
	index -> strchr remove unnecesary stuff

	* check.c:
	now call skeychallenge() to get challenge instead of making one up
	ourselves. this way, we get extra goodies in the prompt.

1996-09-10  Todd C. Miller  <>

	added one
	[3f5149357e2a] [SUDO_1_5_1]

	* parse.lex:
	allow logins to start with a number (YUCK!)

1996-09-08  Todd C. Miller  <>

	added soalris 2.5 vs 2.4 note

	DUNIX doesn't need -lnsl

	*** empty log message ***

	* check.c, compat.h,, dce_pwent.c, find_path.c,
	getspwuid.c, getwd.c, goodpath.c, ins_2001.h, ins_classic.h,
	ins_csops.h, ins_goons.h, insults.h, interfaces.c, logging.c,
	options.h, parse.c, parse.lex, parse.yacc,, putenv.c,
	strdup.c, sudo.c, sudo.h, sudo_setenv.c, testsudoers.c, tgetpass.c,
	utime.c, version.h, visudo.c:



	* visudo.pod:
	*** empty log message ***

	* sudo.pod, visudo.pod:

1996-09-07  Todd C. Miller  <>

	added courtesan ./

1996-09-06  Todd C. Miller  <>

	* sudo.c:
	added $SUDO_PROMPT support

1996-09-04  Todd C. Miller  <>

	* check.c:
	print long skey challemged to stderr, not stdout

1996-09-01  Todd C. Miller  <>

	updated for 1.5.1

	* emul/utime.h:

1996-08-31  Todd C. Miller  <>

	updated for 1.5.1

1996-08-30  Todd C. Miller  <>

	* check.c:
	use shost, not host for tgetpass

	* sudo.pod:
	documented %u and %h

	documented %u and %h

	fixed typo

	* INSTALL,, README, check.c, compat.h,,
	dce_pwent.c, find_path.c, getspwuid.c, getwd.c, goodpath.c,
	ins_2001.h, ins_classic.h, ins_csops.h, ins_goons.h, insults.h,
	interfaces.c, logging.c, options.h, parse.c, parse.lex, parse.yacc,, putenv.c, strdup.c, sudo.c, sudo.h, sudo_setenv.c,
	testsudoers.c, tgetpass.c, utime.c, version.h, visudo.c:

	* BUGS:

1996-08-29  Todd C. Miller  <>

	*,, version.h:

	* sudo.h:
	new tgetpass() params

	* check.c:
	pass use and host to tgetpass

	* tgetpass.c:
	added %u and %h escapes

	* OPTIONS, check.c, options.h:

	added cray (unicos) support

1996-08-27  Todd C. Miller  <>

	* OPTIONS, options.h, sudo.c:

1996-08-25  Todd C. Miller  <>

	added note about "make install"

	* parse.yacc:
	changed length/size params from int to size_t

	now get CSOPS insults as well by default

	* insults.h:
	use csops insults too by default

	* INSTALL,, README,,, version.h:
	version = 1.5

	* sudo.c:
	added runas_homedir

	* TODO:
	updated for 1.5

	updated for 1.5

	1.5 release

	added "upgrading" notes

1996-08-22  Todd C. Miller  <>

	* visudo.c:
	now do chmod and chown after edit of temp file and before rename
	[de174e34faa7] [SUDO_1_5_0]

1996-08-18  Todd C. Miller  <>

	++version added INSTALL.configure

	*, version.h:

	*** empty log message ***

	* parse.yacc:
	added missing cast

	* sudo.c:
	sets $HOME to pw_dir of runas user

	* sudo.pod:
	document $HOME change

1996-08-17  Todd C. Miller  <>

	* sudo.pod:
	fixed up some wording

	* check.c, dce_pwent.c, find_path.c, getspwuid.c, getwd.c, goodpath.c,
	interfaces.c, logging.c, parse.c, parse.lex, parse.yacc, putenv.c,
	strdup.c, sudo.c, sudo_setenv.c, testsudoers.c, tgetpass.c, utime.c,

	* compat.h, ins_2001.h, ins_classic.h, ins_csops.h, ins_goons.h,
	insults.h, options.h,, sudo.h:

	* emul/utime.h:

	* sudo.h:
	name nad type changes

	* testsudoers.c:
	now works with new sudo

	* parse.yacc:
	fixed some XXX

	* parse.yacc:
	some variable name changes + comment headers for functions.

	* tgetpass.c:
	added extra paren's to make compilers happy

	* sudo.c:
	*** empty log message ***

	* parse.c:
	now uses init_parser() if not in sudoers and tries "list" or
	"validate" scold but don't be nasty.

	now can use upper case login names

	* visudo.c:
	now uses init_parser()


	added info about PASSWORD_TIMEOUT

	* INSTALL.configure:
	Initial revision

	* BUGS:
	fixed a bug ,

	* parse.yacc:
	now dynamically allocates memory for the stacks -- no more

	* sudo.pod:
	-l now explands command aliases

	* parse.yacc:
	hacks to expand command aliases for `sudo -l'

	* sudo.c:
	remove $ENV and $BASH_ENV (dangerous in ksh, posix sh, and bash)

	* sudo.h:
	added struct command_alias

	* sudo.pod:
	fixed a bug

	* lsearch.c:
	in compar() key should be first arg

1996-08-15  Todd C. Miller  <>

	* BUGS:
	fixed some bugs

	* parse.yacc:
	can now deal with upcase HOST and USER names

	* sudo.c:
	don't yell too loudly at non-sudoers if they do "sudo -l"

	* sudo.pod:
	fixed thinko

	* parse.c:
	fix comment

1996-08-09  Todd C. Miller  <>

	* parse.c, parse.yacc:
	added support for new `sudo -l' stuff

	* sudo.c:
	now uses list_matches()

	* sudo.h:
	added struct sudo_match

	now more -lgnumalloc

1996-08-01  Todd C. Miller  <>

	* install-sh:
	added more paths for chown and whoami

1996-07-31  Todd C. Miller  <>

	* check.c:

1996-07-30  Todd C. Miller  <>

	* aclocal.m4:
	fixed DUNIX check for shadow pw

	* tgetpass.c:
	now only turn off echo if it is already on. this fixes a race when
	you use sudo in a pipelin


	changed "test -z $foo && do_this" to if; then construct

1996-07-29  Todd C. Miller  <>

	added missing defines of SHADOW_TYPE

1996-07-26  Todd C. Miller  <>

	* check.c:
	protect AUTH_CRYPT_OLDCRYPT and AUTH_CRYPT_C1CRYPT since they are
	only in dunix 4.x

	* getspwuid.c:
	added AUTH_CRYPT_C1CRYPT support

	* parse.c:
	no longer return VALIDATE_NOT_OK if there was a runas that didn't
	match. Now we can have runas stuff on more than one line.

	* getspwuid.c, sudo.c, tgetpass.c:

	got rid of HAVE_C2_SECURITY SHADOW_TYPE is always defined to

	removed HAVE_C2_SECURITY added SPW_BSD

	* compat.h:

	* check.c:
	SHADOW_TYPE is always defined so just against its value

	* aclocal.m4:

1996-07-25  Todd C. Miller  <>

	* sudoers.pod:
	* -> ?* in one example added another instance of (runas) and one of

1996-07-24  Todd C. Miller  <>

	added back check for config.cache from other host type

	* parse.lex:
	removed an instance of \"

	* sample.sudoers:
	added an example

	* sudoers.pod:
	updated wrt new wildcard matching

	new check for shadow passwords if we don't know anything

	* aclocal.m4:

	added back check for -lsocket (oops)

	better (working) check for shadow passwd type if we know to use C2.

	now uses AC_CANONICAL_HOST to figure out os type

	added config.{guess,sub}

	* aclocal.m4:
	removed unused stuff to figure out os type

	* config.sub:
	added openbsd

	* config.sub:
	Initial revision

	* config.guess:
	Initial revision

	* testsudoers.c:
	don't call fnmatch() with FNM_PATHNAME flag unless it can only be a
	pathname. need to check against sudoers_args even if user_args is

	* parse.c:
	don't call fnmatch() with FNM_PATHNAME flag unless it can only be a
	pathname need to check against sudoers_args even if user_args is nil

1996-07-23  Todd C. Miller  <>

	* check.c:
	added support for AUTH_CRYPT_OLDCRYPT w/ DUNIX C2

	* testsudoers.c:
	now takes command line args and uses cmnd_args

	* parse.lex:
	fill_args was adding an extra leading space

1996-07-22  Todd C. Miller  <>

	* visudo.c:
	fixed dummy command_matches()

	* parse.yacc:
	fixed prototype

	* sudo.h:
	added cmnd_args

	* parse.yacc:
	now uses flat args string

	* parse.c, parse.lex:
	now uses flat arg string

	* visudo.c:
	added cmnd_args def

	* sudo.c:
	now sets cmnd_args global

	* logging.c:
	cmnd_args is now exported from sudo.[ch]

1996-07-21  Todd C. Miller  <>

	* parse.yacc:
	can't rely on cmnd_matches as much as I thought -- added some $$
	stuff back in to prevent namespace pollution problems.

	* parse.yacc:
	Simplified parse rules wrt runas and NOPASSWD (more consistent).

1996-07-20  Todd C. Miller  <>

	* parse.lex:
	NOPASSWD may now have blanks before the ':' '(' only starts a
	'runas' if in the initial state to avoid collision with command args

	added checks for specific shadow passwd schemes

	* aclocal.m4:
	added routines to check for specific shadow passwd types

1996-07-18  Todd C. Miller  <>

	added support for ncr boxen

	* aclocal.m4:
	added support for detecting ncr boxen

1996-07-16  Todd C. Miller  <>

	added sinix support

1996-07-14  Todd C. Miller  <>

	added info about "config.cache from other other" error.

	* aclocal.m4:
	now makes sure you don't have a config.cache file from another OS

	now sets $LIBS when needed to configure links with libs when doing
	tests hpux10 now uses SPW_SECUREWARE for C2 added check for
	bigcrypt(3) if SPW_SECUREWARE

	* getspwuid.c:
	fixed typo

	* tgetpass.c:
	now include stuff for SPW_SECUREWARE to get AUTH_MAX_PASSWD_LENGTH

	* getspwuid.c:
	no more SPW_HPUX10

	no more SPW_HPUX10 added HAVE_BIGCRYPT

	* compat.h:

	* check.c:
	SPW_SECUREWARE now uses bigcrypt

1996-07-13  Todd C. Miller  <>

	* sample.sudoers:
	fixed 2 syntax errors

	* sudoers:
	root may now run ALL as ALL

1996-07-12  Todd C. Miller  <>

	* interfaces.c:
	fixed a typo/thinko that broke BSD's with sa_len

1996-07-08  Todd C. Miller  <>

	* check.c,
	updated AFS support

	added entry about /usr/ucb/cc

	prep no longer holds gcc binaries

	updated AFS note

	added @AFS_LIBS@

	* compat.h:
	AFS allows long passwords

	* testsudoers.c:
	fixed -u user support

	* parse.c:
	sudo -v now groks VALIDATE_OK_NOPASS

	* parse.yacc:
	fixed no_passwd vs. runas_matched

	took out stuff about NFS-mounting since it is no longer an issue

	added --with-libraries > --with-libpath --with-incpath

	* parse.yacc:
	was setting runas_matches to -1 in wrong place

	* check.c:
	removed usersec.h which is not present in new AFS versions

	* tgetpass.c:
	now deals with timeout <= 0


	BSD/OS >= 2.0 now uses shlicc instead of just gcc

	* sudo.c:
	fixed backwards compatibility with sudo 1.4 sudoers mode for root
	readable/writable filesystems

	now gives INSTALL -c flag

	* parse.yacc:
	slightly simpler initialization of no_passwd and runas_matches

	* testsudoers.c:
	added -u username support

	improved --with-libraries support

1996-07-07  Todd C. Miller  <>

	added --with-incpath, --with-libpath, --with-libraries

	* parse.yacc:
	now initializes some fields that weren't getting set to -1 pretty
	gross -- need a rewrite.

1996-06-26  Todd C. Miller  <>

	* alloca.c:
	removed emacs'isms

	no longer add -lPW to *_LIBS since we include alloca.c


	added alloca.c

	* alloca.c:
	Initial revision


1996-06-25  Todd C. Miller  <>

	* sudo.c:
	now set uid to 1 instead of nobody for PERM_SUDOERS since nobody is
	not always set to a valid uid.

	fixed entry for SUDO_MODE

	* sudo.c:
	Fixed NFS-mounted sudoers file under solaris both uid *and* gid were
	being set to -2. Now beat NFS to the punch and set uid to "nobody"
	ourselves, preserving group 0 to read sudoers.

	* parse.c:
	moved set_perms(PERM_ROOT) to be before yyparse()

	* logging.c:
	fixed a typo

	no longer need AC_PROG_INSTALL

	always use install-sh to avoid install(1)'s that use get{pw,gr}nam

	make clean -> make distclean

1996-06-20  Todd C. Miller  <>

	* parse.yacc:
	removed some unnecsary if's

	*, version.h:

	* parse.c, testsudoers.c:
	now includes netgroup.h

	* interfaces.c:
	removed cats of ioctl to int since they didn't shut up -Wall

	* interfaces.c:
	explicately cast ioctl() to int since it it not always declared

	* sudo.h:
	added declarations for yyparse() and yylex()

	* parse.yacc:
	fixed an occurence of '==' -> '='

	added check for netgroup.h

	* sudo.c:
	fixed 2 compiler warnings

	* sudo.c:
	SHELL_IF_NO_ARGS caused core dump since NewArg[cv] weren't being

1996-06-19  Todd C. Miller  <>

	* sudo.pod:
	fixed a typo

1996-06-17  Todd C. Miller  <>

	* parse.yacc:
	fixed a formatting thingie

	* parse.c, parse.yacc:
	fixed -u support with multiple user lists on a line

	unixware needs -lgen

	updated ftp location

	* sudoers.pod:
	add net_addr/netmask support

	* sample.sudoers:
	added net_addr/mask example

	* parse.c, parse.lex:
	added support for net_addr/netmask

1996-06-16  Todd C. Miller  <>

	* sudoers.pod:
	^ -> !

1996-06-15  Todd C. Miller  <>

	updated for 1.4.3

	udpated for 1.4.3


	* sample.sudoers:
	updated with examples of new stuff


	* sudoers.pod:
	updated wrt -u and NOPASSWD

	* sudo.pod:
	updated wrt -u and CAVEATS

1996-06-09  Todd C. Miller  <>

	* sudo.c:
	fixed usage()

	* parse.lex:
	now use :foo: character classes (makes no diff for generated lexer)

1996-06-07  Todd C. Miller  <>

	* check.c:
	fixed LONG_SKEY_PROMPT stuff

1996-06-06  Todd C. Miller  <>

	* visudo.c:
	fixed a comment

	* lsearch.c:
	make more like NetBSD one -- now compiles w/o warnings

	* emul/search.h:
	fixed decls of lsearch()

	*,, getspwuid.c:
	added SPW_HPUX10

	* check.c:
	hpux 10 uses bigcrypt() if C2

1996-06-04  Todd C. Miller  <>

	* parse.c:
	now always uses fnmatch to match args

	* tgetpass.c:
	back to using stdio instead of raw i/o since that caused some

1996-05-29  Todd C. Miller  <>

	* sudo.c:
	now give usage warning if use -l,-v,-k with args

1996-05-28  Todd C. Miller  <>

	* sudo.c:
	NewArgc is now set to 1 for -l, -v, -k

	* sudo.c:
	now sets sudoers to correct group if mode is 0400

	* install-sh:
	updated to version used by inn and bind

	now uses -lgnumalloc if it exists

	"make install" now sets uid/gid and mode on sudoers if it exists

	* sudo.c:
	rmeoved debugging statements

	* parse.yacc:
	added a missing free()

	* sudo.c:
	now uses user_gid instead of getegid (which was wrong anyway) to set
	SUDO_GID Now sets command line args in SUDO_COMMAND envariabled
	(logging.c depends on args being in the environment)

	* logging.c:
	now uses SUDO_COMMAND envariable to get command args rather than
	building it up again.

	* parse.c:
	now uses user_gid

	* sudo.c:
	fixed off by one error in allocation NewArgv

	* parse.c:
	in sudoers, 'command ""' now means command with no args

	added check for fnmatch(3) and fnmatch.h


	replaced wildcat.* with fnmatch.*

	* testsudoers.c:
	now uses fnmatch()

1996-05-27  Todd C. Miller  <>

	* parse.c:
	now uses fnmatch() instead of wildmat a trailing star (*) by itself
	now matches multiple args added support for wildcards in the
	pathname in sudoers

1996-05-25  Todd C. Miller  <>

	* fnmatch.c:
	now includes compat.h and config.h


	now checks for alloca() (if needed by bison or dce) and links with
	-lPW if it contains alloca() and libv and compiler do not.

	* emul/fnmatch.h, fnmatch.3, fnmatch.c:
	Initial revision

1996-04-29  Todd C. Miller  <>

	* sudo.c:
	now fixes mode on sudoers if set to 0400 to aid in upgrade

1996-04-28  Todd C. Miller  <>

	fixed pod2man usage

	*,, version.h:

	* testsudoers.c, visudo.c:
	runas_user is now initialized to "root"

	* sudo.h:

	* sudo.c:
	runas_user defaults to "root" so no more need to PERM_RUNAS

	* parse.c:
	will now only running commands as root if there was no runas list
	(or if root is in the runas list)

	* logging.c:
	now logs "USER=%s"

	* parse.yacc:
	runas_matches is now set to false if we get a negative match

	* parse.lex:
	make #uid work + some minor cleanup

	* sample.sudoers:
	added support for NOPASSWD and "runas" from /

	* visudo.c:
	added support for "runas" from replaced

	* testsudoers.c:
	added support for "runas" from

	* sudo.h:
	added support for NO_PASSWD and runas from replaced
	SUDOERS_OWNER with SUDOERS_UID and SUDOERS_GID and added support

	* sudo.c:
	added support for NO_PASSWD and runas from replaced
	SUDOERS_OWNER with SUDOERS_UID and SUDOERS_GID and added support fro

	* parse.yacc:
	added support for NO_PASSWD and runas from

	* parse.c, parse.lex:
	added support for NO_PASSWD and runas from

	* logging.c:
	added support for SUDOERS_WRONG_MODE and "runas"

	added --with-CC only link with -lshadow on linux (with shadow pw) if
	libc lacks getspnam()

	* OPTIONS, options.h:
	removed NO_PASSWD since it is not possible to do this in the sudoers
	file itself. Replaced SUDOERS_OWNER with SUDOERS_UID and


1996-04-27  Todd C. Miller  <>

	added --with-CC

1996-04-06  Todd C. Miller  <>

	* parse.lex:
	added double quote support

	* sudoers.pod:
	documented double quoting

1996-04-05  Todd C. Miller  <>

	* mkinstalldirs:
	Initial revision

	* check.c:
	fixed some indentation

	fixed a typo

	added install-dirs .

1996-04-04  Todd C. Miller  <>

	* dce_pwent.c:
	new version from "Jeff A. Earickson" <>

1996-04-03  Todd C. Miller  <>

	$CSOPS -> $with_csops (whoops, missed one)

	* BUGS:

	* parse.lex:
	FQHOST now has same constraints as non-FQHOST

	added note about OS's w/ shadow passwords turned on by default

1996-04-02  Todd C. Miller  <>

	fixed a typo

	added support for --without-THING sanitized shadow pw situtation by
	adding support for

	* tgetpass.c:
	fixed a typo wrt placement of an end paren

	* check.c:
	was closing an fd that may not have been opened

1996-03-22  Todd C. Miller  <>

	* OPTIONS, options.h, sudo.c:
	added NO_PASSWD

1996-03-20  Todd C. Miller  <>

	now always use shadow pw on some arches

1996-03-19  Todd C. Miller  <>

	added pyramid support

	no longer check for C2 if alternate passwd method is used no longer
	check for some libs twice

	* parse.yacc:
	moved fqdn stuff into parse.lex (FQHOST)

	* parse.lex:
	added FQHOST rules

	* tgetpass.c:
	now define TCSASOFT in necesary

	* tgetpass.c:
	now uses read/write instead of stdio string goop to avoid problems
	with select(2)

	* OPTIONS, find_path.c, options.h:

1996-03-17  Todd C. Miller  <>

	added note about no shadow auto-detect if using alternate auth

	don't check for C2 if AFS or DCE (unless they said --with-C2)

	* testsudoers.c:
	now groks shost

	* OPTIONS, find_path.c, options.h:
	added NO_DOT_PATH

1996-03-16  Todd C. Miller  <>

	* find_path.c:
	checkdot now works correctly

1996-03-12  Todd C. Miller  <>

	can't have DCE and C2 passwords both...

1996-03-11  Todd C. Miller  <>

	* parse.yacc, sudo.c, sudo.h, visudo.c:
	now uses shost even if not FQDN

	now looks for skey in /usr/lib and doesn't require libskey to be in
	/usr/local/lib just because skey.h is (for my netbsd box :-)

	* aclocal.m4,,

	* aclocal.m4, sudo.pod:
	/var/run/.odus -> /var/run/sudo


	udpated FQDN

	* aclocal.m4,


	* sudo.pod:
	updated wrt /var/run/sudo

	* sudo.c, sudo.h:
	added support for shost if FQDN

	* parse.yacc, visudo.c:
	now uses shost if FQDN

	* check.c:
	Now use skeylookup() instead off skeychallenge()

1996-02-28  Todd C. Miller  <>

	* logging.c:
	mail_argv should not contain ALERTMAIL as it includes "-t"

1996-02-22  Todd C. Miller  <>

	* INSTALL,, README,, version.h:

	* compat.h:
	added more _PASSWD_LEN stuff -- now uses PASS_MAX too

	* tgetpass.c:
	now includes limits.h moved _PASSWD_LEN -> compat.h

1996-02-06  Todd C. Miller  <>



	fixed a typo


1996-02-05  Todd C. Miller  <>


	done for 1.4.1 (I hope)

	* sudoers.pod:
	added info on wildcards

	* sample.sudoers:
	added wildcard example

	now uses *.pod to build *.man and *.cat & *.html


	* visudo.pod:
	fixed up some formatting

	* sudoers.pod:
	redid section describing sample sudoers stuff

	* sudo.pod:
	fixed some formatting

	* getspwuid.c:
	now treats "" as bourne shell

	TESTOBJS nwo includes wildmat.o

	* testsudoers.c:
	now works with NewArg[cv]

	* sudo.c:
	removed an XXX (fixed it in getspwuid.c)

	* aclocal.m4:
	added check for bourne shell



1996-02-04  Todd C. Miller  <>

	* visudo.c:
	unixware vi returns 256 instead of 0

	added Linux note

	* logging.c:
	fixed up some XXX's. file log format now looks a little more like
	real syslog(3) format.

	updated wrt lex/flex

	commented out rule to build lex.yy.c from parse.lex since we ship
	with a pre-flex'd parser

	* parse.c, parse.yacc, visudo.c:
	path_matches -> command_matches

	* logging.c:
	eliminated some strcat()'s

	no longer checks for lex/flex (now assumes flex)

	now checks for $kerb_dir_candidate/krb.h instead of just

1996-02-03  Todd C. Miller  <>

	* parse.yacc:
	now use a 'hook' expression instead of an iffy one :-)

1996-02-02  Todd C. Miller  <>

	* visudo.c:
	now works with new sudo arg stuff

	* parse.yacc:
	fixed dereferencing deadbeef

	* sudo.c:
	changed an occurrence of Argv to NewArgv

	* parse.lex:
	took out support for quoted commands since there is no need...

	* parse.c:
	fixed a typo in a for() loop

	* logging.c:
	protected against dereferencing rogue pointers

	* sudo.c:
	now uses NewArgv amd NewArgc so cmnd_aegs is no longer needed this
	also allows us to eliminate some kludges in parse_args() and
	eliminate superfluous code.

	* logging.c:
	no longer uses cmnd_args, now uses NewArgv instead.

	* sudo.h:
	added struct sudo_command, NewArgc, and NewArgv removed cmnd_args
	(no longer used)

	added wildmat.c to SRCS & SUDOBJS

	* parse.yacc:
	COMMAND is now a struct containing the path and args

	* parse.lex:
	replaced append() with fill_cmnd() and fill_args. command args from
	a sudoers entry are now stored in an arrary for easy matching.

	* parse.c:
	command line args from sudoers file are now in an array like ones
	passed in from the command line

1996-02-01  Todd C. Miller  <>

	* parse.c:
	wildwat stuff now works

1996-01-29  Todd C. Miller  <>

	* version.h:

	++version added wildmat.*

1996-01-28  Todd C. Miller  <>

	* parse.lex:
	added support for quoted commands (w/ or w/o args)

1996-01-22  Todd C. Miller  <>

	* sudo.pod, visudo.pod:
	cleaned up formatting

	* sudo.pod, visudo.pod:
	Initial revision

1996-01-21  Todd C. Miller  <>

	* sudoers.pod:
	looks reasonable, could be mroe readable

	* sudoers.pod:
	Initial revision

1996-01-16  Todd C. Miller  <>


	updated NO_ROOT_SUDO entry

1996-01-15  Todd C. Miller  <>

	*** empty log message ***
	[5b63de579ff7] [SUDO_1_4_0]

	* sudo.c:

	udpa`ted for 1.4

	AIX aixcrypt.exp now uses $(srcdir)

	added entry for anal ansi compilers

1996-01-14  Todd C. Miller  <>

	added info on libcrypt_i for SCO

	* TODO:
	*** empty log message ***

	* sample.sudoers:
	added comments

	* TODO:
	1.4 release



	* BUGS:
	++version and fixed ISC

	* check.c, compat.h, dce_pwent.c, find_path.c, getspwuid.c, getwd.c,
	goodpath.c, ins_2001.h, ins_classic.h, ins_csops.h, ins_goons.h,
	insults.h, logging.c, options.h,, putenv.c, strdup.c,
	sudo.c, sudo.h, sudo_setenv.c, testsudoers.c, tgetpass.c, utime.c,

	* interfaces.c:
	added STUB_LOAD_INTERFACES ++version

	*, emul/utime.h, parse.c, parse.lex, parse.yacc,

	added info about fd_set in tgetpass added info on interfaces.c

1996-01-11  Todd C. Miller  <>

	* dce_pwent.c:
	added sudo header

	* tgetpass.c:
	fixed a typo

	tgetpass.o is now only linked in with sudo (not visudo)

1996-01-09  Todd C. Miller  <>


	* emul/utime.h:
	added copyright notice

	* check.c, compat.h, find_path.c, getspwuid.c, getwd.c, goodpath.c,
	ins_2001.h, ins_classic.h, ins_csops.h, ins_goons.h, insults.h,
	interfaces.c, logging.c, options.h, parse.c, parse.lex, parse.yacc,, putenv.c, strdup.c, sudo.c, sudo.h, sudo_setenv.c,
	testsudoers.c, tgetpass.c, utime.c, version.h, visudo.c:

	* tgetpass.c:
	minor cleanup and now includes sys/bsdtypes for svr4'ish boxen

	ISC now gets -lcrypt now check for sys/bsdtypes.h

	added check for sys/bsdtypes.h

1996-01-07  Todd C. Miller  <>

	* parse.yacc:
	removed debugging stuff (setting freed ptr to NULL)

	added 2 entries

	added FAQ

	added section on syslog

	added AC_ISC_POSIX for better ISC support

	fixed typo

	added define for _POSIX_SOURCE

1996-01-04  Todd C. Miller  <>

	fixed check for lsearch()

1995-12-22  Todd C. Miller  <>

	* interfaces.c:
	fixed for AIX now deal if num_interfaces == 0 (should not happen)

1995-12-20  Todd C. Miller  <>

	now only define HAVE_LSEARCH if there is a corresponding search.h

	* interfaces.c:
	works on ISC again

1995-12-18  Todd C. Miller  <>

	now define HAVE_LSEARCH if we find lsearch() in libcompat

	* lsearch.c:
	char * -> const char *

	now looks in -lcompat for lsearch()

	remove sudo.core visudo.core for clan target

	* aclocal.m4:
	added UID_MAX support in check for MAX_UID_T_LEN

	fixed another occurence of sudo_getpwuid.*

	*, getspwuid.c:
	sudo_getpwuid.c -> getspwuid.c

	moved the "echo"

	compat.h,,, find_path.c, getspwuid.c,
	getwd.c, goodpath.c, ins_2001.h, ins_classic.h, ins_csops.h,
	ins_goons.h, insults.h, interfaces.c, logging.c, options.h, parse.c,
	parse.lex, parse.yacc,, putenv.c, strdup.c, sudo.c,
	sudo.h, sudo_setenv.c, testsudoers.c, tgetpass.c, utime.c,
	version.h, visudo.c:

	* testsudoers.c:
	added group support

	* sample.sudoers:
	added group entry

	documented group support

	* parse.c, parse.lex, parse.yacc, visudo.c:
	added group support

1995-12-15  Todd C. Miller  <>

	* check.c:
	tkfile was too short and overflowed the kerberos realm

1995-12-11  Todd C. Miller  <>

	* sudo.c:
	now copy command args directly from Argv

	* sudo.c:
	replaced code to copy cmnd_args so that is does not use realloc
	since most realloc()'s really stink

1995-12-08  Todd C. Miller  <>

	syslog() fixed in hpux 10.01

1995-12-06  Todd C. Miller  <>

	AC_CHECK_LIB() now sets SUDO_LIBS (and VISUDO_LIBS if appropriate)

	better error if cannot find skey incs or libs

	* aclocal.m4:
	now use a temp file for determining max len of uid_t in string form.
	the old hacky way broke on netbsd

	* sudo.c:
	added set of parens and a space

1995-12-05  Todd C. Miller  <>

	* dce_pwent.c:
	fixes from Jeff Earickson <> ,

	* check.c:
	modified a comment

	fixed up testsudoers target

	DCE changes from Jeff Earickson <> LIBS ->


1995-11-28  Todd C. Miller  <>

	fix for C2 on hpux 10 now uses -linet if it exists

	* check.c:
	LONG_SKEY_PROMPT is less of a klusge /

	fixed typos w/ dce stuff

	added dce_pwent.c

1995-11-26  Todd C. Miller  <>

	amended section on combining authentication mechanisms

	minor updates for 1.3.6

	added 2 more entries

	* BUGS:
	updated for 1.3.6


	rewrote for sudo 1.3.6

	added 3 entries

1995-11-25  Todd C. Miller  <>

	* find_path.c, getspwuid.c, sudo.c:
	added explict casts for strdup since many includes don't prototype
	it. gag me.

	* sudo.h:
	removed prototype for sudo_getpwuid() since convex C compiler choked
	on it.

	* sudo.c:
	added prototype for sudo_getpwuid()

	* lsearch.c:
	now compiles on strict ANSI compilers

	* check.c:
	added LONG_SKEY_PROMPT support

	added extra $'s for make to eat up, yum.

	* OPTIONS, options.h:

1995-11-24  Todd C. Miller  <>

	* check.c:
	s/key support now works with normal s/key as well as logdaemon

	* OPTIONS, options.h:
	added SKEY_ONLY

	* compat.h:
	set _PASSWD_LEN to 256 for any of KERB4, DCE, SKEY

	added DCE note added more AIX notes

	* sudo.c:
	now include pthread.h for DCE support

	* check.c:
	dce_pwent() is ok after all .,

	* logging.c:
	now uses SYSLOG() macro that equates to either syslog() or

	* dce_pwent.c:
	minor formatting changes. renamed check() to somthing less generic

	* check.c, logging.c, parse.yacc, sudo.c, sudo.h, testsudoers.c,
	now uses user_pw_ent and simple macros to get at the contents

1995-11-23  Todd C. Miller  <>

	* check.c:
	simpler dec unix C2 support

	* getspwuid.c:
	now sets crypt_type for DEC unix C2

1995-11-21  Todd C. Miller  <>

	added csops paths for skey

	* getspwuid.c:
	now includes string.h for strdup() prototype

	* getspwuid.c:
	fixed a few typos

	* check.c:
	now includes skey.h

	* getspwuid.c:
	fixed up comments

	* check.c:
	moved a lot of the shadow passwd crap to sudo_getpwuid()

	* sudo.c:
	now uses sudo_pw_ent

	* testsudoers.c:
	now uses sudo_pw_ent

	* visudo.c:
	now sets sudo_pw_ent

	* getspwuid.c:
	Initial revision

	* tgetpass.c:
	moved dce stuff into compat.h

	* logging.c, sudo.h:
	now uses sudo_pw_ent

	added sudo_getpwuid.c

	* compat.h:
	added dce support

	* parse.yacc:
	now uses sudo_pw_ent

1995-11-20  Todd C. Miller  <>

	* check.c:
	fixed exempt_group stuff for OS's that don't put base gid in group

	* check.c:
	S/Key support now works with sunos4 shadow passwords

	fixed clean rule

	added DCE support

	* tgetpass.c:
	DCE & KERB support

	* check.c:
	first stab at dce support

	* dce_pwent.c:
	now smells like sudo

	* dce_pwent.c:
	Initial revision

	* check.c:
	skey'd sudo now works w/ normal password as well

1995-11-19  Todd C. Miller  <>

	*, OPTIONS, check.c, compat.h,, find_path.c,
	getwd.c, goodpath.c, ins_2001.h, ins_classic.h, ins_csops.h,
	ins_goons.h, insults.h, interfaces.c, logging.c, options.h, parse.c,
	parse.lex, parse.yacc,, putenv.c, strdup.c, sudo.c,
	sudo.h, sudo_setenv.c, testsudoers.c, tgetpass.c, utime.c,
	version.h, visudo.c:
	updated version number

	updated to reflect version change

	--with options now line up ++version

	* sudo.h:
	removed unecesary S/Key stuff

	fixed S/Key support

	-I stuff now goes in CPPFLAGS

	* check.c:
	fixed SKey support

	updated version

	fixed description of EXEMPTGROUP

	* sudo.c:
	more people use _RLD_ than just alphas...

	replaced $man_prefix with $mandir

	fixed a typo

	now use more GNU'ish dir names

	now set *dir correctly (can override from command line)

	* sudo.c:
	now deal with situations where we getwd() fails

1995-11-17  Todd C. Miller  <>

	added etc_dir, bin_dir, sbin_dir

	added sbin_dir

	now ship a flex-generated lex.yy.c


	_PATH_SUDO_SUDOERS & _PATH_SUDO_STMP are now overridden via Makefile

	* options.h:
	no more error for redefining SUDOERS_OWNER

	expanded SUDOERS_OWNER section

1995-11-16  Todd C. Miller  <>

	* visudo.c:
	now warn if chown(2) failed

	* logging.c:
	better default warning for NO_SUDOERS_FILE

	* sudo.c:
	added missing set_perms() no more cryptic message if the sudoers
	file is zero length, now just give a parse error

	* logging.c:
	better diagnostics if NO_SUDOERS_FILE

	* sudo.c:
	check_sudoers() now catches sudoers files that are not readable (but
	are stat'able).

1995-11-13  Todd C. Miller  <>

	now add -D__STDC__ for convex cc (not gcc)

	MAN_PREFIX -> man_prefix now sets prefix and exec_prefix

	now uses exec_prefix & prefix from configure

	* find_path.c, getwd.c, goodpath.c, interfaces.c, logging.c, parse.c,
	parse.lex, parse.yacc, sudo.c, sudo.h, sudo_setenv.c, tgetpass.c,
	utime.c, visudo.c:
	options.h is now <> instead of "" so shadow build trees can have a
	custom copy of options.h

	* check.c:
	user_is_exempt() is no longer a hack, it now uses getgrnam()

	* options.h:
	EXEMPTGROUP is now "sudo"

	MAN_POSTINSTALL now contains a leading space

	removed leading tab if @MAN_POSTINSTALL@ not defined now removes
	testsudoers in clean:

	* tgetpass.c:
	includes pwd.h to get _PASSWD_LEN definition

1995-10-30  Todd C. Miller  <>

	* sudo.c:
	unset the KRB_CONF envariable if using kerberos so we don't get
	spoofed into using a bogus server

1995-09-29  Todd C. Miller  <>

	* parse.yacc:
	now explicately initialize match[] tp be FALSE

1995-09-23  Todd C. Miller  <>

	* sudo.c:
	removed unused variable now passes -Wall

	* parse.yacc:
	yyerror and dumpaliases are now void's now passes -Wall

	* parse.lex:
	added prototype for yyerror

	* check.c, logging.c, parse.c:
	now passes -Wall

	* interfaces.c:
	rmeoved unused cruft now passes -Wall

	fixed headers that moved to emul dir

	* logging.c:
	fixed deref of nil pointer if no args

1995-09-15  Todd C. Miller  <>

	added a caveat to FQDN section

1995-09-13  Todd C. Miller  <>

	more $srcdir support for install targets

	* find_path.c, interfaces.c, parse.c, parse.lex, parse.yacc, putenv.c,
	strdup.c, sudo.c, sudo_setenv.c, testsudoers.c, visudo.c:
	don't include malloc.h if we include stdlib.h

	* parse.yacc:
	local search.h now lives in emul

	* check.c, utime.c:
	local utime.h now lives in emul dir

	* lsearch.c:
	local search.h now lives in emul

	added support for building in other than the sourcedir

1995-09-10  Todd C. Miller  <>

	annotated CSOPS_INSULTS option

	updated shadow passwords blurb

	* sudo.c:
	if SHELL_IF_NO_ARGS is set, "sudo -- foo" now runs a shell and
	passes along foo as the arguments

1995-09-09  Todd C. Miller  <>

	* parse.lex:
	collapsed pathname and dir sections into one -- its now less

	* parse.lex:
	fixed spacing quoting [,:\\=] now works correctly append() and
	fill() now take args to make the above work

	* sudo.c:
	fixed a typo that caused commands with no tty on fd 0 but a tty on
	fd 1 to erroneously have "none" as their tty

1995-09-04  Todd C. Miller  <>

	* check.c:
	timestampfile is now a global static removed decl of timestampfile
	in remove_timestamp since we can just use the global one

	* check.c:
	created touch() to update timestamps added USE_TTY_TICKETS support
	(bit of a kludge)

	* compat.h:
	added _S_IFDIR and S_ISDIR

	* OPTIONS, options.h:

	* parse.yacc:
	removed const from casts for lsearch() & lfind() to placate irix 4.x
	C compiler

1995-09-03  Todd C. Miller  <>

	* sudo.c:
	now only strip '/dev/' off of a tty if it starts with '/dev/'

	added _PATH_DEV

	AC_HAVE_HEADERS -> AC_CHECK_HEADERS now check for tcgetattr only if
	have termios.h

	* tgetpass.c:
	fixed incorrect #ifdef termio uses "unsigned short" not int for

	* parse.lex, parse.yacc:
	fixed a spelling error

	fixed typo

1995-09-02  Todd C. Miller  <>

	fixed a comment

	* parse.yacc:
	added dotcat() to cat 2 strings w/ a dot effeciently now that we
	dynamically allocate strings they need to be free()'d

	* parse.lex:
	dynamically allocates space for strings

	* sudo.h:

	* sudo.h:
	added decl of tty

	* logging.c, sudo.c:
	moved tty stuff into sudo.c

1995-09-01  Todd C. Miller  <>

	* parse.c:
	fixed a logic bug. Was denying a command if user gave command line
	args but there were none in the sudoers file which is wrong.

	* sudo.h:
	MAXCOMMMANDLEN dropped down to 1K

	* parse.lex:
	return foo; -> return(foo);

	* parse.yacc:
	fixed netgr_matches() prototype

	* parse.lex:
	added support for escaping "termination" characters

	* parse.c:
	buf is now of size MAXPATHLEN+1 since it never holds command args

	* sudo.c:
	fixed comments

	* goodpath.c:
	fixed negation problem (doh!)

	* parse.yacc:
	fixed 2nd parameter to lfind()

	* parse.lex:
	now do bounds checking in fill() and append()

	* sudo.c:
	include netdb.h as we should added a missing void cast added
	SHELL_IF_NO_ARGS support now use realloc() properly. would fail if
	realloc actually moved the string instead of shrinking it

	* sample.sudoers:
	updated with examples of new features

	* goodpath.c:
	now set errno to EACCES if not a regular file or not executable

	* find_path.c:
	if given a fully-qualified or relative path we now check it with
	sudo_goodpath() and error out with the appropriate error message if
	the file does not exist or is not executable

	* emul/search.h, lsearch.c:
	now use correct args for lfind

	* logging.c:
	added a comment

	* insults.h:
	added in CSOps insults

	* ins_csops.h:
	Initial revision

	* tgetpass.c:
	added RCS id

	* sudo.h:


	* sudo.c:
	fixed -k load_interfaces() now gets called if FQDN is set
	-p now works with -s

	* parse.c:
	don't try to stat() "pseudo commands" like "validate"

	* options.h:

	added SecurID support added other insults to --with-csops


	added clobber target added ins_csops.h now gets CFLAGS from

	* aclocal.m4:

	* visudo.c:
	function comment blocks are now in same style as rest of code

	* testsudoers.c:
	added support for command line args in /etc/sudoers

	updated to have command args in the sudoers file

	added -s and -- flags added SHELL to ENVIRONMENT VARIABLES section

1995-08-19  Todd C. Miller  <>

	* parse.yacc:
	PATH renamed to COMMAND

	* parse.lex:
	it is now a parse error for directories to have args attached to

	* logging.c:
	now say command args if telling user to buzz off

	* sudo.c:
	-s no longer indicates end of args sped up loading on cmnd_args in

	* parse.c:
	removed an unreachable statement

	* parse.lex:
	made more efficient by pulling out the terminators when in GOTCMND
	state and making them their own rule

1995-08-14  Todd C. Miller  <>

	* sudo.h:
	removed MAXLOGLEN since it is no longer used

	* parse.lex:
	now allows command args

	* parse.c:
	now groks command arguments

	* logging.c:
	now sets tty correctly when piped input

	* sudo.c:
	fixed loading of cmnd_args (was including command name too)

	* logging.c:
	fixed a core dump due to incorrect if construct

1995-08-13  Todd C. Miller  <>

	only add -lsun is irix < 5 don't look for -lnsl or -lsocket if irix

	* aclocal.m4:
	fixed check for ISC

	* sudo.c:
	now sets cmnd_args used by log_error() and that will be used by the
	parse to check against command args

	* sudo.h:
	added cmnd_args

	* logging.c:
	now dynamically allocate logline since we can guess at its size

1995-08-05  Todd C. Miller  <>

	* logging.c:
	cleaned up a bunch of unnecesary #ifdef's eliminated a buffer remove
	"register" since the compiler knows more than I do now do a
	"basename" of the tty

1995-07-31  Todd C. Miller  <>


	* sudo.h:
	added shell extern changed MODE_* to be bit masks to allow for
	several options together

	* sudo.c:
	added -s (shell) option made MODE_* masks so we can do bitwise & and
	| to see if multiple flags are set.

	* check.c:
	added securid support

1995-07-30  Todd C. Miller  <>

	* logging.c:
	removed a bunch of unnecesary strncpy()'s and replaced with strcat()

1995-07-29  Todd C. Miller  <>

	*, version.h:

1995-07-27  Todd C. Miller  <>

	* parse.yacc:
	fixed free() of an uninitialized pointer (yuck)

	* testsudoers.c:
	added netgr_matches

	* parse.c:
	cleaned up netgr_matches

1995-07-26  Todd C. Miller  <>

	updated for 1.3.4

1995-07-25  Todd C. Miller  <>

	now installs -- really should clean this up though.

	added and

	pulled out stuff on the sudoers file format into a separate man page

	Initial revision

	fixed up my email address

	added checks for innetgr and getdomainname

	* visudo.c:
	added dummy netgr_matches function

	* parse.c:
	added netgr_matches

	* parse.lex, parse.yacc:
	added NETGROUP support


1995-07-24  Todd C. Miller  <>

	* sudo.c:
	rewrote clean_env() that has rm_env() builtin

1995-07-23  Todd C. Miller  <>

	* check.c:
	now cast uid to long in sprintf

	added _INSULTS suffix to HAL & GOONS end

	* options.h:
	added _INSULTS suffix to HAL & GOONS

	* ins_2001.h, ins_classic.h, ins_goons.h, insults.h:
	converted to new scheme of insult "unions" end

	* sudo.c:
	now uses MAX_UID_T_LEN

	added SUDO_UID_T_LEN !l

	added MAX_UID_T_LEN

	* check.c:
	now use MAX_UID_T_LEN

	* aclocal.m4:
	added check for max len of uid_t fixed sco vs. isc check

1995-07-19  Todd C. Miller  <>

	corrected version

	added sco support

	* aclocal.m4:
	hack to check for sco

	* interfaces.c:
	removed #include <net/route.h> since it was hosing some OS's

1995-07-18  Todd C. Miller  <>

	* find_path.c:
	fixed prreadlink() prototype

	* check.c:
	added parens in #if's

	added SPW_ prefix

	* sudo.h:
	moved SPW_* to

	* sudo.c:
	added a set of parens

	added SPW_*

	* sudo.h:
	added SPW_* reordered error codes

	* check.c:
	moved SPW_* to sudo.h

1995-07-17  Todd C. Miller  <>

	* sudo.c:

	* logging.c:


	* check.c:

	* check.c:
	now uses SHADOW_TYPE to make shadow pw support more readable and
	modular. It's a start...

	added autodetection of shadow passwords

	* sudo.c:
	now uses SHADOW_TYPE define

	added SHADOW_TYPE which replaces SUNOS4 & __svr4__ defines

	* aclocal.m4:

1995-07-12  Todd C. Miller  <>

	define SVR4 for ISC define BROKEN_SYSLOG for hpux took out test for
	memmove() since we dno longer use it...


	* logging.c:
	added BROKEN_SYSLOG support


	* check.c:
	now only bitch it timestamp > time_now + 2 * timeout to allow for a
	machine udpating its time from a server

	added 2 security notes updated Nieusma's email addr

	* lsearch.c:
	changed a memmove() to memcpy() since we don't have to worry about
	overlapping segments.

1995-07-11  Todd C. Miller  <>

	* interfaces.c:
	cleanup up the loop when interfaces are groped in so that it is

	*, version.h:

1995-07-09  Todd C. Miller  <>

	annotated 124-126

1995-07-07  Todd C. Miller  <>

	* check.c:
	fixed permissions check on /tmp/.odus

1995-07-06  Todd C. Miller  <>

	* check.c:
	fixed some comments

	* check.c:
	now checks owner & mode of timedir also checks for bogus dates on
	timestamp file

	updated TIMEOUT info

	* logging.c, sudo.h:

	* compat.h:
	added definition of S_IRWXU


1995-07-03  Todd C. Miller  <>

	* interfaces.c:
	added #ifdef to make it compile on strange arches

1995-07-02  Todd C. Miller  <>

	* aclocal.m4:
	fixed check for fulkl void impl.

	* check.c:
	added mssing "static"

	* insults.h:
	replaced #elif with #else #if constructs for ancient C compilers

	updated irix c2 & kerb5 info

	added shadow pw support for irix

1995-07-01  Todd C. Miller  <>


	last changes for sudo 1.3.3

	now calls SUDO_SOCK_SA_LEN

	added HAVE_SA_LEN

	* aclocal.m4:

	* interfaces.c:
	now works with ip implementations that use sa_len in sockaddr

	added note about buggy AIX compiler

	* interfaces.c:
	now include sys/time.h for AIX

1995-06-28  Todd C. Miller  <>

	getcwd -> getwd

	* interfaces.c:
	now works for ISC and others. yay.

1995-06-26  Todd C. Miller  <>

	*, version.h:

1995-06-23  Todd C. Miller  <>

	* aclocal.m4:
	fixed test for full void impl

	* sudo.c:
	now check to see that st_dev is non-zero before assuming that we are
	being spoofed

1995-06-20  Todd C. Miller  <>

	* aclocal.m4,

1995-06-19  Todd C. Miller  <>

	* aclocal.m4:
	fixed include file order for SUDO_FUNC_UTIME_POSIX

	* logging.c:
	added cast for ttyname()

	fixed typo

	* check.c:
	now deal correctly with all known variation of utime() -- yippe


	* aclocal.m4:


	* check.c:
	fixed a typo

	* check.c:
	no longer assume !HAVE_UTIME_NULL means old BSD utime()

	* check.c:
	fixed fascist C compiler warning

	* interfaces.c:
	now set strioctl.ic_timout in STRSET() now initialize num_interfaces
	to 0 (just to be anal)

1995-06-18  Todd C. Miller  <>

	* sudo.h:
	increaed MAXLOGLEN by MAXPATHLEN to account for ttyname

	* logging.c:
	added tty logging

	* interfaces.c:
	reworked the ISC code

	*, version.h:
	updated version

	* check.c:
	now expect old-style utime(3) if utime() can't take NULL as an arg

	added check for utime.h



	now search for kerb libs and includes

	* check.c:
	added support for utime(2)'s that can't take a NULL parameter

	* utime.c:
	moved HAVE_UTIME_NULL stuff to update_timestamp() where t belongs

	added utime(s) stuff

	* check.c:
	now use utime()


1995-06-17  Todd C. Miller  <>

	* utime.c:

	* emul/utime.h, utime.c:
	Initial revision

	* check.c:
	need to setuid(0) to make kerb4 stuff work.

	* tgetpass.c:
	no more special case for kerberos

	took out setreuid and setresuid stuff added kerb5 stuff (use kerb4

	* compat.h:
	no longer need setreuid() emulation now set _PASSWD_LEN to 128 if

	* check.c:
	now use private ticket file for kerberos support to avoid trouncing
	on system one

1995-06-15  Todd C. Miller  <>

	* sudo.h:
	added SPOOF_ATTEMPT & cmnd_st

	* sudo.c:
	added anti-spoofing support

	* parse.c:
	now use global cmnd_st

	* logging.c:
	added SPOOF_ATTEMPT suypport

	* testsudoers.c, visudo.c:
	added void casts where appropriate

	* parse.yacc:
	fixed up spacing and added void casts where appropriate

	* sudo.c:
	fixed problem with "-p prompt" but no args

1995-06-14  Todd C. Miller  <>

	added BUGS and annotated -l description

	* sudo.h:
	validate() now takes a flag

	* sudo.c:
	validate() now takes a flag added -l

	* parse.yacc:
	added support for -l

	* parse.c:
	validate() now takes a flag that says whether or not to check the

1995-06-08  Todd C. Miller  <>

	* logging.c:
	now deals with Argv == 1

	added -p option

	* sudo.c:
	added prompt support reworked parse_args()

	* sudo.h:
	added prompt

	* options.h:

	* check.c:
	now use BUFSIZ as length of kerb password added kpass so pass is
	always a char * now use prompt global when asking for a password

	* tgetpass.c:
	now use BUFSIZ as _PASSWD_LEN if using kerberos


1995-06-07  Todd C. Miller  <>

	only look for -lufc or -lcrypt if crypt() not in libc

	* check.c:
	don't exit on kerb error, just warn if k_errno == KDC_PR_UNKNOWN
	(unknown user) silently fail

	added kerb4 note

	* tgetpass.c:

	* check.c:
	removed debugging printf

	KERBEROS -> KERB4 added checks for setreuid & setresuid


	* compat.h:
	added deif of UID_NO_CHANGE & GID_NO_CHANGE added setreuid emulation
	with setresuid if applic

	* check.c:
	HAVE_KERBEROS -> HAVE_KERB4 now only do the stupid chown() hack if
	no setreuid() or a broken one

1995-06-06  Todd C. Miller  <>

	added kerberos support


	* tgetpass.c:
	added KERBEROS support (long passwords)

	* check.c:
	added kerberos support

1995-06-03  Todd C. Miller  <>

	* sudo.h:

	escaped dashes added -b option

	* sudo.c:
	added -b option

	* check.c:
	added crypt() for osf/1 3.x enhanced secuiry

	now check for -lcrypt

	* interfaces.c:

1995-05-08  Todd C. Miller  <>

	now emulate getwd(), not getcwd()

	* sudo.c:
	getcwd() -> getwd()

	* getwd.c:
	getcwd -> getwd

1995-05-02  Todd C. Miller  <>

	* ins_2001.h, ins_classic.h, ins_goons.h:
	Initial revision

	* insults.h:
	broke out insults into separate include files

	* OPTIONS, options.h:
	added GOONS

	added ins_2001.h ins_classic.h ins_goons.h

	*, version.h:

	* visudo.c:
	moved signal handler setup to setup_signals()

	* sudo.h:
	added load_interfaces()

	* sudo.c:
	moved load_interfaces to interfaces.c

	* parse.yacc:
	added clearaliases

	* OPTIONS, options.h:

	* parse.lex:
	now uses clearaliases variable

	* interfaces.c:
	Initial revision

	added interfaces.[co]

	* testsudoers.c:
	now uses ip addrs and netmasks via load_interfaces()

	* sudo.c:
	now remove IFS instead of setting to "sane" value

1995-05-01  Todd C. Miller  <>

	* parse.c:

1995-04-30  Todd C. Miller  <>

	sudo_goodpath.c-> goodpath.c

	* sudo.c:
	added Andy's new ISC changes

1995-04-14  Todd C. Miller  <>

	added a sentence to SECURE_PATH info

	* BUGS:
	added one



1995-04-13  Todd C. Miller  <>

	updated for beta3

	*, version.h:

	* aclocal.m4:
	sendmail is now looked for in /usr/ucblib

	* sudo.c:
	fixed indentation

	* aclocal.m4:
	fixed a typo

	* sudo.c:
	updated ISC mods

	added unixware case

	* check.c:
	user_is_exempt is no longer hidden


	* aclocal.m4:
	isc and riscos changes

	added NOTE about new interaction of EXEMPTGROUP and SECURE_PATH

	fixed a typo and added testsudoers stuff

	* testsudoers.c:
	Initial revision

1995-04-12  Todd C. Miller  <>

	* parse.yacc:
	applied fixed patch from Chris

1995-04-11  Todd C. Miller  <>

	fixed a typo

	* parse.yacc:
	added a set of braces for bison

	* parse.yacc:
	merged in Chris' changes to dekludge the parser.

	* logging.c:
	send_mail() was calling find_path() which is wrong since find_path()
	stores cmnd in a static var. Anyhow, it doesn't make much sense
	since MAILER should always be fully qualified

1995-04-10  Todd C. Miller  <>

	* sample.sudoers:
	added User_Alias stuff

	* aclocal.m4:
	SUDO_NEXT now looks for /usr/lib/NextStep/software_version

	added DEC UNIX 3.0 w/ gcc

	* visudo.c:
	Exit was being used in places where exit should be used

	* sudoers:
	added "User alias specification"

	* parse.yacc:
	fixed probs caused by making nslots and naliases a size_t

	added KSR, upped rev to 1.3.1b2

	* logging.c, parse.yacc:
	1024 -> BUFSIZ

	* parse.yacc:
	void * -> VOID * naliases and nslots are now size_t to appease
	lsearch on 64-bit machines

1995-04-09  Todd C. Miller  <>

	* TODO:
	did a bunch of things and added a bunch :-)


	closer to BSD manpage style

	closer to standard BSD man format

	* compat.h,, emul/search.h, insults.h, options.h,, sudo.h, version.h:
	added RCS id

	* sudo.h:
	removed crufty #defines that are no longer used

	* BUGS:
	fixed a bug

	updated based on sudo changes

	* parse.yacc:
	now allow ALL keyword in User_Aliases now allow ALL keyword as well
	as a NAME or ALIAS


	* sudo.c:
	now sets SUDO_COMMAND and SUDO_GID envariables.

	* aclocal.m4:
	fixed bug with full void impl check

	* parse.yacc:
	fixed User_Alias supoprt

	* parse.yacc:
	added stubs for User_Alias support

	* sudo.c:
	now sets removes # bogus interfaces from num_interfaces

	* parse.lex:
	added User_Alias support

1995-04-08  Todd C. Miller  <>

	removed extraneous TODO

1995-04-07  Todd C. Miller  <>

	* visudo.c:
	ntwk_matches -> addr_matches

	* parse.yacc:
	ntwk_matches -> addr_matches

	* parse.c:
	ntwk_matches -> addr_matches now use inet_addr() not inet_network()
	(which expects octet boundaries) fixes for OSF (sizeof(int) !=

	* sudo.c:
	took out debugging info

	* aclocal.m4:
	OS was being set to unknown before non-uname based host checks.
	This caused no checks to happen since $OS was not zero-length.

	* sudo.c:
	fixed loading of interfaces struct still has debugging info in

	* parse.c:
	fixed typo

1995-04-06  Todd C. Miller  <>


	* version.h:

	* visudo.c:
	removed extraneous extern decl of "top

	* visudo.c:
	now zeros "top"

	* parse.yacc:
	removed parser_cleanup (no need for it now)

	* parse.lex:
	now calls reset_aliases() directly

1995-04-04  Todd C. Miller  <>

	added a sentence to SECURE_PATH description

	* parse.c:
	fixed my stupid bug where I used NAMLEN on something I wanted to
	just get the name from. argh.

1995-04-03  Todd C. Miller  <>

	* lsearch.c:
	fixed argument order of memmove() that i hosed when converting from
	bcopy(). arghh.

	finally fixed DISTFILES line

	tabs -> spaces

	added missing files to DISTFILES


1995-04-01  Todd C. Miller  <>

	* TODO:

	updated for pl5b1 release


	* check.c:
	fixed bug where if you hit return at first sudo prompt it would
	still log as a failure


	* aclocal.m4:
	better test for bogus void * implementation

	* logging.c:

	* check.c:

	* sudo.h:

	* tgetpass.c:
	moved pathnames.h

	* sudo.c:
	removed some unused vars and fixed up uid2str

	* putenv.c:
	moved compat.h

	* getcwd.c, getwd.c:
	added pathnames.h

1995-03-31  Todd C. Miller  <>

	* parse.yacc:
	fixed a typo I introduced in the last checkin :-(

	* parse.lex:
	can't have #ifdef's where N is defined so just do this the broken
	way for AIX

	* parse.yacc:
	better hack from Chris (but still a hack)

	* parse.lex:
	stupid hack for broken aix lex

	* tgetpass.c:
	now includes compat.h 

	* visudo.c:
	now includes fcntl.h

	* compat.h:
	added FD_SET and FD_ZERO for 4.2BSD

	* parse.yacc:
	dirty hack to fix parser bug. i don't really like this but it works
	for now...

	* sudo.c:
	uid2str is now static like the prototype says

1995-03-30  Todd C. Miller  <>


	Initial revision

	* sudo.c:
	check_sudoers now returns an error code and sudo calls inform_user
	and log_error based on the return value.

	* logging.c, sudo.h:
	added entries for new errors

	* parse.c:
	now set uid to that of SUDOERS_OWNER while parsing sudoers file

	took out testsudoers 

	* sudo.c:
	now explicately checks that it is setuid root

	* sudo.c:
	If a user has no passwd entry sudo would segv (writing to a garbage
	pointer). Now allocate space before writing :-)

	reordered AC_CHECK_FUNCS

	fixed memset macro

	* tgetpass.c, visudo.c:
	bzero -> memset

	* logging.c:
	bzero -> memset when a parse error is logged the line number of the
	error is now logged too

	added Sunos to blurb about c2 security

	added a SUN4 define for C2 security

	bcopy -> memmove bzero -> memset

	* lsearch.c:
	bcopy -> memmove char * -> VOID *

	* check.c:
	added support for sunos with C2 security

	* OPTIONS, options.h:

	_PATH_SUDO_LOGFILE now set based on configure



	* aclocal.m4:
	added SUDO_LOGFILE to find where to put sudo.log added
	SUDO_CHECK_TYPE (just AC_CHECK_TYPE but checks unistd.h too) added

1995-03-29  Todd C. Miller  <>

	Initial revision

	* sudo.c:
	now do set_perms(PERM_ROOT) before the getpwuid() in load_global()
	to work around a problem is trusted hpux shadow passwords. yuck.

	* parse.yacc:
	backed out a change in malloc/realloc

	* parse.yacc:
	now include stdlib.h

	* visudo.c:
	now do an freopen() of the stmp file so that yyin will always point
	to the same thing. This is important for flex since we are doing a

	* parse.yacc:
	replaced yywrap() with parser_cleanup() since yywrap() needs to be
	in parse.lex to be able to use YY_NEW_FILE. sigh.

	* parse.lex:
	now have a rule that matches anything that doesn't match an
	explicite rule. well, you know what i mean (. matches anything not
	yet matched). However, this means that there is input still queued
	up so we need to do a YY_NEW_FILE; in yywrap. So, yywrap has moved
	into parse.lex and it calls parser_cleanup() which is most of the
	old yywrap() sigh.

	no longer used

	* getcwd.c, getwd.c:
	moved compat.h to be the last include file

	* parse.yacc:
	fixed type of aliascmp() args

	* find_path.c:
	NULL -> '\0'

	* parse.yacc:
	added casts to lfind and lsearch args for irix

	bsdinstall -> install-sh

	added info about make realclean

	updated VERSION added dependencies for

	* version.h:
	-> pl5b1

	* sudo.c:
	took out -l

	now there is a real and

	took out visudo stuff

	Initial revision

	* parse.c, parse.lex, parse.yacc:
	updated copyright

	updated for pl5

	updated Nieusma & Hieb email addresses

	updated to include options.h and OPTIONS


	* BUGS:
	eliminated bug #1 (yay)

	sunos no longer gets linked statically

1995-03-28  Todd C. Miller  <>

	* parse.lex:
	prototype now uses __P()

	* parse.lex:
	make fill() non-ansi

	* parse.c:
	made -v (validate) work

	* logging.c:
	now gives host

	* find_path.c:
	don't check for execute/statable if fq or relative path given

	* parse.c:
	added a cast

	* visudo.c:
	now include ctype.h for islower and tolower macros

	* goodpath.c:
	moved _S_IFMT & _S_ISREG to compat.h

	* sudo.c:
	moved a set of parens

	* strdup.c:
	now include compat.h

	* emul/search.h:
	void * -> VOID *

	* parse.yacc:
	now cast malloc & realloc return vals added search for HAVE_LSEARCH
	now use strcmp if no strcasecmp available

	* lsearch.c:
	void * -> VOID *


	* compat.h:
	added _S_IFMT, _S_IFREG, and S_ISREG

	* aclocal.m4:
	took out SUDO_PROG_INSTALL 1.x to 2.x changes added echo and results
	to most SUDO_* macros

	no more -I.

	various 1.x ro 2.x autoconf changes now check for strcasecmp now use
	AC_INSTALL_PROG instead of custom one added check for fully woorking
	void implementation

	added lsearch & search.h visudo links into $(LIBOBJS)

	* aclocal.m4:
	partial 1.x to 2.x changes added SUDO_FULL_VOID

	* visudo.c:
	whatnow_help was prototyped to be static be was not declared as

	autoconf 2.x changes took out HAVE_FLEX (no longer used) added check
	for dirent/dir/ndir.h

	* parse.c:
	now use groovy gnu autoconf macro AC_HEADER_DIRENT

	* getcwd.c, getwd.c:

	* emul/search.h, lsearch.c:
	Initial revision

1995-03-27  Todd C. Miller  <>

	* parse.yacc:
	eliminated bison warnings

	* parse.lex:
	added missing case

	* visudo.c:
	now iincludes signal.h

	* parse.yacc:
	only clear data structures on a parse error

	* visudo.c:
	whatnow() now gives help on invalid input

	* visudo.c:
	added a whatnow() function (sort of like mh)

	* parse.yacc:
	kill_aliases -> reset_aliases yywrap() now cleans up by calling
	reset_aliases() and clearing top took reset stuff out of yyerror()
	since it doesn't beling there (and doesn't work anyway). errorlineno
	is now initially set to -1 so we can set it to the first error that
	occurrs (it was getting set to the last)

	* parse.lex:
	added a void cast

	* visudo.c:
	rewrote from scratch based on 4.3BSD vipw.c

1995-03-26  Todd C. Miller  <>

	* sudo.c, sudo.h:
	removed ocmnd

	* sudo.h:
	no more sudo_realpath() and find_path() changed params

	* sudo.c:
	find_path() changed since no more realpath()

	* parse.yacc:
	on error, errorlineno is set to the line where the error occurred
	added kill_aliases() to free the aliases struct now clean up in
	yyerror() so we can reparse cleanly

	* options.h, parse.c:

	* logging.c:
	changed to use new find_path()

	* find_path.c:
	removed all the realpath() stuff

	sudo_realpath.c -> sudo_goodpath.c

	* visudo.c:
	now works correctly with utk parser

	* goodpath.c:
	Initial revision

	* sudo_realpath.c:
	eliminated a compiler warning

	* sudo.c:
	elinated compiler warning

	* sudo_realpath.c:
	added sudo_goodpath()

	* sudo.h:
	added prototype for sudo_goodpath

	* parse.c:
	added support for /sys/dir.h

	* options.h:
	USE_REALPATH turned off

	* find_path.c:
	added calls to sudo_goodpath()

	added check for dirent.h


	added in linux shadow pass stuff 

1995-03-24  Todd C. Miller  <>

	* visudo.c:
	added back host, user, cmnd, parse_error

	* visudo.c:
	added in utk changes plus some minor cosmetic changes

	* sudo.c, sudo_realpath.c:
	added void casts for printf's

	* options.h:
	added a define of USE_REALPATH

	there is no more visudoers/Makefile

	added in utk changes (visudo is now built from the toplevel)

	* find_path.c:
	added (void) casts to printf's

	* parse.c, parse.lex, parse.yacc, sudo.h, sudo_realpath.c:
	merged in utk changes

1995-03-23  Todd C. Miller  <>

	* find_path.c:
	now check to see that what we are trying to run is a file (or a link
	to a file, we do a stat(2) so there is no diff)

1995-03-13  Todd C. Miller  <>


	aclocal.m4 -> acsite.m4 make realclean updated for new autoconf 

	added myself as maintainer

1995-02-17  Todd C. Miller  <>

	* sudo.c:
	changed setegid -> setgid

1995-02-06  Todd C. Miller  <>

	fixed the test for irix 5.x to skip bad libs

	* aclocal.m4:
	now initialize OS and OSREV

1995-01-27  Todd C. Miller  <>

	irix5 changes

	AC_WITH -> AC_ARG_WITH changes other misc changes for autoconf 2.1

1995-01-19  Todd C. Miller  <>

	* visudo.c:
	use YY_NEW_FILE, not yyrestart since OSF flex doesn't do the righ
	thing wrt yyrestart (grrrr)

1995-01-16  Todd C. Miller  <>

	added visudoers/compat.h to DISTFILES

	fixed an echo

	* sudo.c:
	added ocmnd declaration adjusted for find_path()'s new parameters

	* sudo.h:
	added ocmnd extern adjusted find_path() prototype

	* parse.c:
	cmndcmp() now takes 3 arguments and checks against the qualified as
	well as the unqualified pathname. more code that should use
	cmndcmp() but did not, now does

	* options.h:
	added to a comment

	* logging.c:
	changed to use new find_path() parameter passing

	* find_path.c:
	find_path() now takes 2 copyout parameters (one for the qualified
	pathname and one for the unqualified pathname). The third parameter
	may be NULL.

	no longer munge pathnames.h

	changed _PATH_* to use _SUDO_PATH_* (which are defined in config.h)
	as a result, pathnames.h does not need to be run through configure
	and the user can override the configured values easily.

	added _SUDO_PATH_* entries

	* aclocal.m4:

	updated DISTFILES and HDRS .o's now depend on config.h

1995-01-13  Todd C. Miller  <>

	* compat.h:
	removed extraneous #endif

	* aclocal.m4:

	added SUDO_PROG_MV added riscos and isc os types took out
	-DSHORT_MESSAGE from --with-csops since it is now the default

	* sudo.c:
	move the include of id.h to compat.h now includes options.h

	* sudo.h:
	moved compatibility #defines to compat.h

	added _PATH_MV

	move __P to compat.h

	* getcwd.c, getwd.c, putenv.c:
	now includes compat.h

	* compat.h:
	Initial revision

1995-01-12  Todd C. Miller  <>

	* sudo.h:
	pull user-configurable stuff out and put in options.h

1995-01-11  Todd C. Miller  <>

	* parse.lex, parse.yacc, visudo.c:
	now includes options.h

	* check.c, find_path.c, logging.c, parse.c, sudo_realpath.c,
	now includes options.h

	added visudoers/options.h

	* OPTIONS, options.h:
	Initial revision

	added OPTIONS and options.h

	* logging.c:
	changed #ifdef's to use LOGGING and SLOG_SYSLOG/SLOG_FILE

	* check.c, sudo.h:
	changed PASSWORD_TIMEOUT to minutes

1994-12-17  Todd C. Miller  <>

	* visudo.c:
	now only do Editor +line_num if line_num != 0

1994-12-16  Todd C. Miller  <>

	* visudo.c:
	now use mv if rename(2) fails

	* BUGS:
	added a visudo bug

	* check.c:
	expanded comment

1994-11-12  Todd C. Miller  <>

	* check.c:
	fixed user_is_exempt to return 0 if EXEMPTGROUP is not set

1994-11-10  Todd C. Miller  <>

	* sudo.c:
	added mips & isc support

	* parse.c:
	added support for non-root owned sudoers file

	* check.c:
	added exempt group support

	* sudo.h:
	added set_perms() support added SUDOERS_OWNER so can have non-root
	own sudoers file added exempt group support added isc support

	* visudo.c:
	now copy sudoers to temp file via read/write (not stdio) now chown
	new sudoers file to SUDOERS_OWNER

1994-11-08  Todd C. Miller  <>

	added skey support

	* sudo_realpath.c:
	be_* -> setperms()

	* sudo.h:
	fixed typo added set_perms support added skey support added
	seteuid()/setegid() emulation for AIX

	* sudo.c:
	be_* -> setperms() now check to make sure sudoers file is owned by
	root nread/write by only root

	* logging.c, parse.c:
	be_* -> setperms()

	* check.c:
	be_* -> set_perms() added skey support

1994-11-06  Todd C. Miller  <>


	* version.h:

1994-10-21  Todd C. Miller  <>

	* sudo.c:
	now sets IFS

	* insults.h:
	fixed typo

1994-10-15  Todd C. Miller  <>

	added HAVE_SKEY

1994-10-04  Todd C. Miller  <>



	* version.h:

	* sudo.c:
	now bail if ARgv[1] > MAXPATHLEN

	added function check for tcgetattr(3)

	only define HAVE_TERMIOS_H if you have tcgetattr(3)

	added check for tcgetattr

1994-09-26  Todd C. Miller  <>


1994-09-22  Todd C. Miller  <>

	* parse.lex:
	now only include unistd.h for linux

1994-09-21  Todd C. Miller  <>

	added visudo.8 generation

	added -Wl,-bI:./aixcrypt.exp to aix flags

1994-09-20  Todd C. Miller  <>

	* BUGS:
	added one


	added mailing list info

	* parse.yacc:
	now use sudolineno instead of yylineno fixed bison warnings

	now use -no_library_replacement for osf don't make a static binary
	for hpux >= 9.0

	* tgetpass.c:
	added string.h/strings.h inclusion

	added ssize_t def

	* parse.lex:
	added inclusion of string.h/strings.h

	* aclocal.m4:
	fixed uname | sed (needed to quote the '[')

	* parse.lex:
	replaced yylineno with sudolineno fixed bison syntax errors

	* visudo.c:
	changed yylineno to sudolineno since yylineno cannot be counted

	* TODO:

	* parse.c:
	added code to support command listings

	* sudo.c:
	added code for -l flag

	fixed typo added info for -l flag


	* aclocal.m4:

	* sudo.h:
	added MODE_LIST

	added AC_SSIZE_T

	* find_path.c, sudo_realpath.c:
	readlink() is now declared as returning ssize~_t

	added -laud for OSF c2

1994-09-02  Todd C. Miller  <>

	*, visudo.c:
	changed ->

	*, parse.lex, parse.yacc,
	changed ->

	* check.c, find_path.c, getcwd.c, getwd.c, insults.h, logging.c,
	parse.c, putenv.c, strdup.c, sudo.c, sudo.h, sudo_realpath.c,
	sudo_setenv.c, tgetpass.c, version.h:
	changed -> sudo-bugs@cs.colorado.ed

1994-09-01  Todd C. Miller  <>


	* version.h:

	* logging.c:
	added host to alertmail messages


	* logging.c:
	fixed logging problem where mail would not say which user it was

	added -laud for gcc if osf & c2

	* check.c:
	moved set_auth_parameters to sudo.c

	* sudo.c:
	added set_auth_parameters for osf

	cleaned up -static stuff


	* version.h:

	* sudo.c:
	changed setenv() to sudo_setenv()

	* check.c:
	fixed osf problem

	added OSF C2 stuff


	* check.c:
	added osf auth support & removed some extra spaces

	added osf C2 stuff

1994-08-31  Todd C. Miller  <>

	* TODO:
	added 2 suggestions

	removed README.v1.3.1 and added VERSION stuff

	* version.h:

1994-08-30  Todd C. Miller  <>

	* version.h:

	added HISTORY

	mention HISTPRY file

	* sudo.c:
	use sizeof instead of a constant in 1 place

	* parse.yacc:
	added unistd.h

	* parse.lex:
	added unistd.h


	Initial revision

1994-08-17  Todd C. Miller  <>

	* version.h:
	[7dfbb4a810bb] [SUDO_1_3_1]


	* sudo_setenv.c:
	added unistd.h include

1994-08-16  Todd C. Miller  <>

	* sudo.c:
	added sys/time.h for AIX

1994-08-15  Todd C. Miller  <>

	added check for -lsocket and sys/sockio.h

	took out libshadow check and added in sys/sockio.h check

	* sudo.c:
	now include sockio.h instead of ioctl.h if it exists "sudo -" now
	gets a better error message

	* sample.sudoers:
	now has a dir and subnet entry

1994-08-13  Todd C. Miller  <>

	* sudo.c:
	removed if_ether.h

	* TODO:
	added an item

	added network and ip addresses to man page

	* sudo.c:
	no error if can't get interfaces or netmask since networking may not
	be in the kernel.

	* parse.c:
	nwo check for interfaces == NULL

	* parse.c:
	fixed a bug that caused directory specs in a Cmnd_Alias to fail if
	the last entry in the spec failed (ie: it was only looking at the
	last entry). CLeaned things up by adding the cmndcmp() function--all
	neat & tidy

	added one

1994-08-12  Todd C. Miller  <>

	* sudo.c:
	now do two passes to skip bogus interfaces (lo0, etc)

	* parse.lex, parse.yacc, visudo.c:
	added include of netinet/in.h

	* logging.c, sudo_realpath.c, sudo_setenv.c:
	added ninclude of netinet/in.h

	* check.c, find_path.c, getcwd.c, getwd.c:
	added include of netinet/in.h

	* version.h:

	* sudo.h:
	added interfaces global

	* parse.c:
	now uses new interfaces global

	* sudo.c:
	now ip addresses are gleaned fw/o dns

1994-08-10  Todd C. Miller  <>

	* sudo.c:
	added load_ip_addrs() to load the ip_addrs global var

	* parse.c:
	added hostcmp() to compare hostnames, ip addrs, and network addrs

	* sudo.h:
	added ip_addrs def added load_ip_addrs prototype

1994-08-08  Todd C. Miller  <>


	removed multiple entries in DISTFILES

	* visudo.c:
	ansified the !STDC_HEADERS decls

	* find_path.c, getcwd.c, getwd.c, putenv.c, strdup.c:
	don't do malloc decl if gnuc

	* sudo.c:
	can't use getopt(3) since it munges args to the command to be run as
	root don't do malloc decl if gnuc

	* find_path.c, getcwd.c, getwd.c, putenv.c, strdup.c, sudo.c,
	sudo_realpath.c, sudo_setenv.c:
	ansi-fied !STDC_HEADER function prottypes

	* getcwd.c, getwd.c:
	added missing paren

	added putenv.c to DISTFILES

	* sudo_setenv.c:
	added params to func decls when STDC_HEADERS is not defined now can
	count on putenv() being there

	* sudo_realpath.c:
	took out errno decl since sudo.h does it for us fixed up a next cc
	warning added params to func decls when STDC_HEADERS is not defined

	* sudo.h:
	took out environ extern added local declaratio of putenv() if local
	version is needed

	* find_path.c, getcwd.c, getwd.c, strdup.c, sudo.c:
	added params to func decls when STDC_HEADERS is not defined

	added memcpy check check to see that ansi vs bsd macros are ntot
	already defiend before defining (ie: avoid redefinition)

	removed fluff setenv check plus check w/ replace for putenv if also
	no setenv

	* putenv.c:
	Initial revision

1994-08-06  Todd C. Miller  <>

	* sudo_setenv.c:
	Initial revision

	* sudo.h:
	rm'd s realp[ath added sudo_realpath and sudo_setenv

	* sudo.c:
	now use sudo_setenvc

	added puteenv and setenv, removed realpath

	added putenv & setenv

	added sudo_setenv

	* version.h:

1994-08-05  Todd C. Miller  <>

	added MAN_POSTINSTALL and /usr/share/catman for irix



	added SUDO_* plus new options

	added one

	took out shadow lib

	* TODO:
	adde done

	* visudo.c:
	now use yyrestart() if flex now reset yylineno to 0

	support for installing a cat page instead of a man page if no nroff

	now defines HAVE_FLEX fixed up man stuff so that it looks for nroff
	to determine whether or not to install a cat or man page

	added HAVE_FLEX

	* sudo.c:
	not set ret to MODE_RUN initially

	* find_path.c:
	made command (and therefor cmnd dynamically allocated)

	* TODO:
	did #8

	* version.h:

	* sudo_realpath.c:
	changed bufs from MAXPATHLEN to MAXPATHLEN+1

	* sudo.h:
	added MODE_ removed validate_only and added remove_timestamp()

	* sudo.c:
	usage() now takes an int (exit value) added parse_args() to parse
	command line arguments moved call to find_path() from load_globals
	to new function load_cmnd() removed validate_only global -- now use
	the concept of "modes" added -h and -k options

	* parse.c:
	no longer use global validate_only now checks for command called
	"validate" removed check for non-fully qualified commands since that
	is done by find_path

	* find_path.c:

	* find_path.c:
	fixed off by one error with MAXPATHLEN and fixed a comment

	* check.c:
	check_timestamp no longer runs reminder(), it is implied in the
	return val added remove_timestamp()


1994-08-04  Todd C. Miller  <>

	* BUGS:
	fixed on

	* sudo_realpath.c:
	took out old_errno


1994-08-03  Todd C. Miller  <>

	* logging.c:
	moved send_mail to after syslog

	* sudo.c:
	now set SUDO_ envariables

1994-08-01  Todd C. Miller  <>

	* version.h:

	* sudo_realpath.c:
	now print error if chdir fails

	* find_path.c:
	removed an XXX

1994-07-26  Todd C. Miller  <>


	no more static binaries for aix

1994-07-25  Todd C. Miller  <>

	fixed typo

	* sudo_realpath.c:
	took out stuff not needed for sudo now does be_root/be_user itself
	now uses cwd global

	* version.h:

	* logging.c, sudo.c:
	be_root/be_user is now down in sudo_realpath()

	* logging.c, sudo.h:
	now works with 4.2BSD syslog (blech)

	* find_path.c:
	now use sudo_realpath()

	took out realpth() stuff since we now use sudo_realpath()

	ultrix enhanced sec

	added ultrix enhanced sec.


	* check.c:
	ultrix enhanced security suport

	added sudo_realpath.c


	* tgetpass.c:
	increased passwd len to 24 for c2 security

	* BUGS:
	updated BUGS

1994-07-15  Todd C. Miller  <>

	* check.c:
	now use user global var

	took out -ls

1994-07-14  Todd C. Miller  <>

	added AFS libs

	* sudo.h:
	user is now a char * added epasswd

	* sudo.c:
	added tzset() to load_globals added epasswd (encrypted password)
	global made user dynamically allocated

	added tzset test


	* check.c:
	cleaned up encrypted passwd grab somewhat

	fixed AFS typo

	added AFS not


	* logging.c:
	can now log to both syslog & a file

	* sudo.h:
	added BOTH_LOGS



	added HAVE_AFS

	* check.c:
	added afs changes

	* sudo.h:
	removed AFS stuff :-)

	* tgetpass.c:
	include sys/select for AIX

	* sudo.h:
	added AFS

	* version.h:

1994-07-07  Todd C. Miller  <>


	* logging.c:
	can now have MAILER undefined

	new sub-note about MAILER

	added blurb about password timeout

	convex c2 changes

	* aclocal.m4:
	took out duplicate define of _CONVEX_SOURCE

	added OSDEFS

	added spaces

	* tgetpass.c:
	added a goto if fgets fails

	* sudo.h:
	use __hpux not hpux convex c2 stuff

	* sudo.c:
	use __hpux not hpux

	* logging.c:
	convex c2 stuff

	define ansi-ish cpp os defines if non-ansi are defined for hpux &

	updated to say we support sonvex C2

	* check.c:
	added convex c2 support

1994-07-01  Todd C. Miller  <>

	* tgetpass.c:
	no more ioctl never returns NULL uses fgets() and select() to

1994-06-29  Todd C. Miller  <>

	things were testing -n "$GCC" instead of -z "$GCC"

	* tgetpass.c:
	now works + uses fgets()

1994-06-28  Todd C. Miller  <>

	* tgetpass.c:
	select doesn't seem to recognize a single '\n' as input waiting so
	we can;t use it, sigh.

1994-06-26  Todd C. Miller  <>

	updated tgetpass() blurb

	added --with-getpass

	added tgetpass stuff

	* tgetpass.c:
	now uses stdio

	* version.h:

1994-06-24  Todd C. Miller  <>

	updated ,.


	fixed a test aded --with-C2 and --with-tgetpass

	* check.c:
	added hpux C2 shit

	took out tgetpass.*

	added C2 blurb

1994-06-13  Todd C. Miller  <>

	no termio(s) for ultrix since it is broken

	* check.c:
	added a space (yeah, anal)

	* realpath.c, sudo_realpath.c:
	fixed it (duh, rtfm)

1994-06-08  Todd C. Miller  <>

	took out bsd signal stuff for irix

	* visudo.c:
	comments in #endif

	don't define BSD signals for irix

	* TODO:
	did some...


	* realpath.c, sudo_realpath.c:
	took out unneeded code by changing where a strings was terminated

1994-06-07  Todd C. Miller  <>

	* realpath.c, sudo_realpath.c:
	fix bug where /dirname would return NULL

	* sudo.h:
	move __P to config.h

	* getcwd.c, getwd.c, realpath.c, sudo_realpath.c:
	added errno definition

	added __P


	* strdup.c:
	now include stdio

	* realpath.c, sudo_realpath.c:
	now works if no fchdir

	* visudo.c:
	define SA_RESETHAND to null if not defined

	added check & replace

	took out -static for nextstep -- it doesn't work

1994-06-06  Todd C. Miller  <>

	* logging.c:
	moved #endif to where it belongs


	now checks for strdup realpath getcwd bzero

	emulate bzero

	* visudo.c:
	added posic signals

	* tgetpass.c:
	bzero cast

	* logging.c:
	added posix signals

	removed BROKEN_GETPASS added new srcs toreplace missing functions

	added posix signal stuff

	added new srcs

	* visudo.c:
	updated useag

	* tgetpass.c:
	now uses posix signals

	updated sto reflect major changes


	* tgetpass.c:
	uses sysconf() if available

	* sudo.h:
	added PASSWORD_TIMEOUT + prototypes for new functions

	* realpath.c, sudo_realpath.c:
	for those w/o this in libc

	* getcwd.c, getwd.c:
	Initial revision

	* find_path.c:
	rewrote to use realpath(3) - nis now all my code


	* check.c:
	now use tgetpass

	added LIBOBJS use tgetpass.c

1994-06-05  Todd C. Miller  <>

	* tgetpass.c:
	works now :-)

	* tgetpass.c:
	Initial revision

	added /dev/tty

1994-06-04  Todd C. Miller  <>

	* version.h:

	* sudo.c:
	always use getcwd

	added check for getwd

	replace strdup & realpath & getcwd if missing

	added _PATH_PWD

	* aclocal.m4:

	* strdup.c:
	Initial revision

	* realpath.c, sudo_realpath.c:
	Initial revision

1994-06-03  Todd C. Miller  <>

	quoted quare brackets

1994-06-02  Todd C. Miller  <>

	* sudo.c:
	no need to strdup() a constant


	added validate

	* sudo.c:
	added -v to usage

	* parse.c, sudo.c, sudo.h:
	added validate_only stuff

1994-05-30  Todd C. Miller  <>

	now finds sed

	* aclocal.m4:
	$OSREV is now an int

1994-05-29  Todd C. Miller  <>

	added mtxinu to caser

	* sudo.h:
	added EXEC macro

	* sudo.c:
	now use the EXEC nmacro now only do a gethostbyname() if FQDN is set

	* logging.c:
	changed mail_argv[] def now use EXEC() macro

	* check.c:
	took out crypt() definition

	* version.h:
	upped the version

	always look for -lnsl

	* aclocal.m4:
	added an echo

	* sudo.h:
	SHORT_MESSAGE is now the default

	fixed typo

	added missing AC_DEFINE(SVR4) for solaris

	documented the -v flag


	* check.c:
	proto-ized crypt()

	added LIBSHADOW undef

	nwo set OS to be lowercase

1994-05-28  Todd C. Miller  <>

	now use SUDO_OSTYPE to set $OS

	* aclocal.m4:
	now use uname to determine os

	* visudo.c:
	added prototypes & moved sig handler around

	* sudo.h:
	added prototyppes

	* check.c, logging.c, sudo.c:
	added prototypes

	* parse.c:
	added comment


	* aixcrypt.exp:
	Initial revision

	added aixcrypt.exp

	* parse.lex, parse.yacc:
	moved config.h to top of includes

1994-05-25  Todd C. Miller  <>

	* find_path.c:
	now don't bitch if get EACCESS (treat like EPERM)

	* visudo.c:
	added -v flag and usage()

	* version.h:
	fixed a typo

	* sudo.c:
	cast Argv to a const for exec added -v flag

	* logging.c:
	mail_argv is now a const

	only set RETSIGTYPE if it is not set already

	* aclocal.m4:
	now defines & STDC_HEADERS for Irix

	added version.h

	* insults.h, sudo.h:
	prevent multiple inclusion

	* version.h:
	Initial revision

	* parse.lex, parse.yacc:
	now includes config.h

	* aclocal.m4:
	now talks about sunos 4.x

	* visudo.c:
	calls to Exit now pass an arg

1994-05-24  Todd C. Miller  <>

	* visudo.c:
	signal handler now takes an int argument


	* sudo.c:
	ok, the getcwd() is now *really* done as the user


	* aclocal.m4:
	solaris now defines SVR4

	* sudo.h:
	added cwd and fixed stupid core dump that makes no sense. sigh.

	* sudo.c:
	moved getcwd stuff into load_globals

	* parse.c:
	took out externs that are in suod.h

	* logging.c:
	moved cwd into load_globals

	* find_path.c:
	moved cwd stuff

	fixed make distclean & realclean

	* TODO:
	updated .,

	added solaris changes

	* aclocal.m4:
	added solaris changes, need to rework

	cleaned up for solaris

	* logging.c:
	reinstall reapchild signal handler for non-bsd signals

	* sudo.h:
	took out getdtablesize() emulation for HP-UX (no longer needed)

	* sudo.c:
	support for HAVE_SYSCONF

	* visudo.c:
	added <fcntl.h> for solaris & reorg'd the includes + minor prettying
	up /


1994-05-16  Todd C. Miller  <>

	now tells you what os you are running /.

	* aclocal.m4:
	took out extra ','

1994-05-14  Todd C. Miller  <>

	added _BSD_COMPAT

	* aclocal.m4:
	fixed for irix5


	* sudo.c:
	uid seinitialized to -2

1994-04-28  Todd C. Miller  <>

	* sudo.c:
	now removes LIBPATH for AIX

1994-03-13  Todd C. Miller  <>

	now uses ufc if it finds it

1994-03-12  Todd C. Miller  <>

	* sudo.h:
	no longer define yyval & yylval since yacc does it

	* parse.lex:
	now defines yylval as extenr



	took out big comment


	took out README.beta

	Initial revision

	now reference SUPPORTED .,

	now check for convex OR __convex__

	* aclocal.m4:
	now check for convex or __convex__

	added dist target

	* aclocal.m4:
	use __convex__

	* find_path.c:
	now use _S_* stat stuff to be ansi-like

	updated for configure directions

	distclean now removes config.h and pathnames.h


	* TODO:
	fixed typoe

	* visudo.c:
	updated version

	updated version

	added copyright header

	* check.c, find_path.c, insults.h, logging.c, parse.c, parse.lex,
	parse.yacc, sudo.c, sudo.h:
	udpated version

	* visudo.c:
	udpated to use configure + pathnames.h

	* aclocal.m4:


	* sudo.h:
	now works with configure

	* check.c, find_path.c, getpass.c, logging.c, parse.c, sudo.c:
	updated to work with configure + pathnames.h

	added LEXLIB

1994-03-10  Todd C. Miller  <>

	updated gnu general licence to versio 2

	Initial revision

	* sudo.h:
	changed to work with configure

1994-03-09  Todd C. Miller  <>

	*, aclocal.m4,
	Initial revision

	* visudo.c:
	now uses defines used by configure

1994-03-01  Todd C. Miller  <>

	* find_path.c:
	sudo won't bitch about EPERM now, for real

1994-02-28  Todd C. Miller  <>

	* logging.c:
	renamed exec_argv to eliminate a libc name clash with ksros


	* logging.c, sudo.c, sudo.h:
	execve -> execv

	* TODO:

	added 2 mroe items


	* sudo.h:
	added UMASK and mode_t declaration

	* sudo.c:
	added UMASK

	* logging.c:
	now opens log file with mode 077

	* check.c:
	saved current umask ans restores it

	* sudo.h:

	* logging.c:
	split long log lines. FOr syslog, split into multiple entries, for
	a log file, indent the extra for readability

1994-02-27  Todd C. Miller  <>

	added changes

	* sudo.h:
	MAXLOGLEN & MAXSYSLOGLEN are now different (as they should be)

1994-02-25  Todd C. Miller  <>

	* TODO:
	added input from Brett M Hogden <>

1994-02-16  Todd C. Miller  <>

	* sudo.c:
	added rmenv() to remove stuff from environ. can now uses execvp()
	OR execve() becuase of this.

	* logging.c:
	now uses execvp() OR execve()

	* sudo.h:

	* sudo.h:
	added environ

	* find_path.c:
	now ignore EPERM

	* sudo.h:
	moved some func decls out of sudo.h and into sudo.c as statics /.


	* sudo.h:
	took out Envp

1994-02-14  Todd C. Miller  <>

	* BUGS:
	Initial revision

1994-02-10  Todd C. Miller  <>


	* sudo.c, sudo.h:

	* sudo.h:

	added sample.sudoers note

	* sudoers:
	Initial revision

1994-02-09  Todd C. Miller  <>

	* find_path.c:
	fixed typo

	took out SAVED_UID garbage
	[b7c2d3469661] [SUDO_1_3_0]

	mentioned HAL

	* sudo.h:
	added HAL line

	* insults.h:
	added HAL insults

	* TODO:

	* logging.c:
	more verbose error if mailer not found

	* check.c:
	now do getpwent as root for soem shadow password systems (bsdi)

1994-02-08  Todd C. Miller  <>

	* sudo.h:
	took out SAVED_UID garbade

	* sudo.c:
	took out SAVED_UID garbage since it don't work

1994-02-06  Todd C. Miller  <>


	* insults.h:
	added a missing space :-)

	* sudo.c, sudo.h:
	took out multimax cruft

	minor update


	* sudo.c:
	fixed a typo + indentation

1994-02-05  Todd C. Miller  <>

	* sudo.h:
	took outumoved some defines to the config file ,. ,.

	Initial revision

	* TODO:
	did #6

	* sudo.h:

	* sudo.c:
	put back AIX cruft

1994-02-03  Todd C. Miller  <>

	* sudo.c:
	aix changes

1994-02-02  Todd C. Miller  <>


	* check.c, logging.c, parse.c, sudo.c, sudo.h:
	now is only root when abs necesary

	* check.c:
	added missing %s\n

1994-01-31  Todd C. Miller  <>

	* install-sh:
	Initial revision

	* TODO:


	* sudo.c:
	now removed _RLD_* for alphas

	updated for new config scheme

	* find_path.c:
	more verbose eror messages

1994-01-27  Todd C. Miller  <>

	* TODO:
	now have solaris

	* sudo.h:
	define __svr4__ for SOLARIS

	* check.c:
	added svr4 junk for shadow pws for solaris 2.x

	* check.c, sudo.c:
	took out setuid(0) and setreuid(udi) garbage. Its not needed since
	we start out setuid with the correct perms.

	* check.c, sudo.c, sudo.h:
	now use setreuid()

1994-01-26  Todd C. Miller  <>

	revised AUTHORS secrtion & added ENV_EDITOR stuff to VARIABLES

	* visudo.c:
	now uses ENV_EDITOR if you want to use the EDITOR envar

	* sudo.h:
	now uses ENV_EDITOR if you want to use the EDITOR envar >> .

1993-12-07  Todd C. Miller  <>

	rewrote most of this

	minor update + spell fix

	* sudo.h:
	added all options that are in the Makefile

	* getpass.c:
	now use USE_TERMIO #define for sgi & hpux

	* TODO:
	todo: posix sigs

1993-12-06  Todd C. Miller  <>

	* check.c, find_path.c:
	always include strings.h

	* visudo.c:

	* sudo.h:
	sgi has vi in /usr/bin too

	added VISUAL

1993-12-03  Todd C. Miller  <>

	* sudo.h:
	sue /usr/bin/vi on some systems

	* sudo.c:
	fixed warning (include strings.h)

	added's changes (new features)

	changes from

	* visudo.c:
	added EDITOR envar

	* check.c, find_path.c, parse.c, sudo.c:
	added patches from John_Rouillard directory spec
	uses EDITOR

1993-12-02  Todd C. Miller  <>

	* getpass.c:
	added flush for hpux

1993-11-30  Todd C. Miller  <>

	* sudo.c:
	no longer assume malloc returns a char *

	* sudo.c:
	alpha change to remove LD_-like thing fixed SHLIB_PATH stuff -- now
	gets removed correctly

	* sudo.h:
	added STD_HEADERS macro

	* sudo.c:
	now uses STD_HEADERS macor for ansi

	* find_path.c:
	now uses STD_HEADERS macro

	* check.c:
	niceties for C compiler bitches -- no real change

1993-11-29  Todd C. Miller  <>

	* visudo.c:
	now doesn't fclose a file never opened.

1993-11-28  Todd C. Miller  <>

	added visudo line

	added error stuff added me in there...

	noted insults

	added blurb about reading stuff

	* sudo.h:
	added insults

	* insults.h:
	corrected somments and removed newlines

	* check.c:
	now uses insults

	* insults.h:
	Initial revision

	added dec syslog note

	* sample.sudoers:
	added real stuff in there

	* TODO:
	added a todo

	* TODO:
	added one

1993-11-27  Todd C. Miller  <>

	* sample.sudoers:
	Initial revision

	updated with changes

	Initial revision

	Initial revision

	Initial revision

	* visudo.c:
	updated version number and took out jeff's old addr since it is no

	* check.c, find_path.c, logging.c, parse.c, parse.lex, parse.yacc,
	sudo.c, sudo.h:
	updated version number and took out jeff's email (since it is

1993-10-28  Todd C. Miller  <>

	* check.c:
	added fflush()

1993-10-23  Todd C. Miller  <>

	* find_path.c:
	now return NULL instead pfof exiting for nopnn-fatal errors

1993-10-21  Todd C. Miller  <>

	* check.c:
	new banner

	* parse.lex:
	now sudo.h gets included first

1993-10-18  Todd C. Miller  <>

	* parse.lex:
	now can use flex

	* sudo.h:
	linux patch

	* sudo.c:
	hpux 9 fix, removes SHLIB_PATH linux patch

	* check.c:
	linux diff

1993-10-15  Todd C. Miller  <>

	* find_path.c:
	stat now ignores EINVAL

1993-10-06  Todd C. Miller  <>

	* find_path.c, sudo.c:
	now declare strdup as extern

1993-10-04  Todd C. Miller  <>

	* visudo.c:
	reformatted with indent + by hand

	* check.c, find_path.c, getpass.c, logging.c, parse.c, sudo.c, sudo.h:
	used indent to "fix" coding style

	* find_path.c:
	now checks '.' or '.' or '' in PATH -- but does it LAST should maybe
	move the code that does this into the loop body. makes it messier
	tho. hmmm.

1993-09-08  Todd C. Miller  <>

	* find_path.c:
	redid the fix for non-executable files in an easier to read way plus
	some minor aethetic changes

	* find_path.c:
	fixed bug with non-executable tings of same name in path introduced
	by checkig errno after stat(2).

1993-09-05  Todd C. Miller  <>

	* sudo.c:
	fixed off by one error

	* find_path.c:
	now handles decending below '/' correctly

	* sudo.c:
	now actually builds Envp instead of munging envp

1993-09-04  Todd C. Miller  <>

	* parse.yacc:
	now includes sys/param.h

	* visudo.c:
	now includes sys/param.h

	* sudo.h:
	fixed ifndef -> ifdef

	* qualify.c:
	make more like find_path.c

	* find_path.c:
	rewritten by millert

	* sudo.h:
	fixed MAXCOMMANDLENGTH now uses USE_CWD and NEED_STRDUP added info
	about new defines in the comment

	* logging.c:
	now uses USE_CWD

	* sudo.h:
	added delc for clean_envp() and Envp

	* sudo.c:
	now rips LD_* env vars out of envp and passed sanitized Envp to exec

	* logging.c:
	now uses execve()

	* find_path.c:
	ENOTDIR is ok now too (in case part of the path is bogus)

	* qualify.c:
	now works correctly (ttaltotal rewrite)

	* parse.lex:
	now includes sys/param.h didn't match trailing / -- fix from

1993-06-11  Todd C. Miller  <>

	* sudo.c:
	moved around the #ifndef _AIX

	* check.c, logging.c, parse.c:
	Initial revision

1993-03-20  Todd C. Miller  <>

	* qualify.c:
	Initial revision

1993-03-13  Todd C. Miller  <>

	* find_path.c:
	now works if you do sudo bin/test

	* find_path.c:

1993-03-02  Todd C. Miller  <>

	* sudo.h:
	Initial revision

	* visudo.c:
	Initial revision

	* parse.lex, parse.yacc:
	Initial revision

1993-02-16  Todd C. Miller  <>

	* sudo.c:
	took out errno.h

	* sudo.c:
	now spews error if exec fails and exits with -1

	* sudo.c:
	Initial revision

	* find_path.c:
	now only execs files with (an) executable bit set.

	* find_path.c:
	Initial revision

1993-02-15  Todd C. Miller  <>

	* getpass.c:
	added nice comment

	* getpass.c:
	now works on sgi's

	* getpass.c:
	Initial revision