# PaCkAgE DaTaStReAm sudo 1 6341 # end of header 0707010019562e000081a40000000000000000000000014e816d9900000103000000b600010002ffffffffffffffff0000000d00000000sudo/pkginfoPKG=sudo NAME=sudo 1.8.2 i86pc Solaris 11 VERSION=1.8.2 PSTAMP=27th September 2011 VENDOR=Todd C. Miller EMAIL=http://www.gratisoft.us/sudo/ DESC=Priviledge escalation tool ARCH=i386 CATEGORY=utility CLASSES=none BASEDIR=/ ISTATES=S s 1 2 3 RSTATES=S s 1 2 3 0707010019562d000081a40000000000000000000000014e816d9900001505000000b600010002ffffffffffffffff0000000c00000000sudo/pkgmap: 1 6341 1 d none /usr ? ? ? 1 d none /usr/local 0755 root root 1 d none /usr/local/bin 0755 root root 1 l none /usr/local/bin/sudo=/usr/local/bin/sudoedit 1 f none /usr/local/bin/sudoedit 4111 root root 518812 44691 1317105044 1 f none /usr/local/bin/sudoreplay 0111 root root 109280 38981 1317105044 1 d none /usr/local/etc 0755 root root 1 f none /usr/local/etc/sudoers 0440 root root 2869 45583 1317104028 1 d none /usr/local/etc/sudoers.d 0750 root root 1 d none /usr/local/include 0755 root root 1 f none /usr/local/include/sudo_plugin.h 0444 root root 5027 7634 1317105044 1 d none /usr/local/libexec 0755 root root 1 f none /usr/local/libexec/sudo_noexec.so 0755 root root 12464 46325 1317105044 1 f none /usr/local/libexec/sudoers.so 0755 root root 680776 26575 1317105044 1 d none /usr/local/sbin 0755 root root 1 f none /usr/local/sbin/visudo 0111 root root 348616 4438 1317105044 1 d none /usr/local/share 0755 root root 1 d none /usr/local/share/doc 0755 root root 1 d none /usr/local/share/doc/sudo 0755 root root 1 f none /usr/local/share/doc/sudo/CONTRIBUTORS 0444 root root 2612 6185 1317105044 1 f none /usr/local/share/doc/sudo/ChangeLog 0444 root root 746145 12816 1317105044 1 f none /usr/local/share/doc/sudo/HISTORY 0444 root root 2780 49184 1317105044 1 f none /usr/local/share/doc/sudo/LICENSE 0444 root root 3844 46711 1317105044 1 f none /usr/local/share/doc/sudo/NEWS 0444 root root 24966 26728 1317105044 1 f none /usr/local/share/doc/sudo/README 0444 root root 3784 10358 1317105044 1 f none /usr/local/share/doc/sudo/README.LDAP 0444 root root 7312 56653 1317105044 1 f none /usr/local/share/doc/sudo/TROUBLESHOOTING 0444 root root 9440 21417 1317105044 1 f none /usr/local/share/doc/sudo/UPGRADE 0444 root root 12950 65000 1317105044 1 f none /usr/local/share/doc/sudo/sample.pam 0444 root root 1182 39360 1317105044 1 f none /usr/local/share/doc/sudo/sample.sudo.conf 0444 root root 1300 49892 1317105044 1 f none /usr/local/share/doc/sudo/sample.sudoers 0444 root root 4048 7180 1317105044 1 f none /usr/local/share/doc/sudo/sample.syslog.conf 0444 root root 1075 27811 1317105044 1 f none /usr/local/share/doc/sudo/schema.ActiveDirectory 0444 root root 7873 21347 1317105044 1 f none /usr/local/share/doc/sudo/schema.OpenLDAP 0444 root root 2410 41966 1317105044 1 f none /usr/local/share/doc/sudo/schema.iPlanet 0444 root root 2283 41078 1317105044 1 f none /usr/local/share/doc/sudo/sudoers2ldif 0555 root root 3766 27625 1317105044 1 d none /usr/local/share/locale 0755 root root 1 d none /usr/local/share/locale/da 0755 root root 1 d none /usr/local/share/locale/da/LC_MESSAGES 0755 root root 1 f none /usr/local/share/locale/da/LC_MESSAGES/sudo.mo 0644 root root 14327 57566 1317105044 1 f none /usr/local/share/locale/da/LC_MESSAGES/sudoers.mo 0644 root root 34539 10986 1317105044 1 d none /usr/local/share/locale/eu 0755 root root 1 d none /usr/local/share/locale/eu/LC_MESSAGES 0755 root root 1 f none /usr/local/share/locale/eu/LC_MESSAGES/sudo.mo 0644 root root 6748 31116 1317105044 1 f none /usr/local/share/locale/eu/LC_MESSAGES/sudoers.mo 0644 root root 6381 51663 1317105044 1 d none /usr/local/share/locale/fi 0755 root root 1 d none /usr/local/share/locale/fi/LC_MESSAGES 0755 root root 1 f none /usr/local/share/locale/fi/LC_MESSAGES/sudo.mo 0644 root root 15366 22349 1317105044 1 f none /usr/local/share/locale/fi/LC_MESSAGES/sudoers.mo 0644 root root 37072 7719 1317105044 1 d none /usr/local/share/locale/pl 0755 root root 1 d none /usr/local/share/locale/pl/LC_MESSAGES 0755 root root 1 f none /usr/local/share/locale/pl/LC_MESSAGES/sudo.mo 0644 root root 15259 52791 1317105044 1 f none /usr/local/share/locale/pl/LC_MESSAGES/sudoers.mo 0644 root root 36717 44403 1317105044 1 d none /usr/local/share/locale/ru 0755 root root 1 d none /usr/local/share/locale/ru/LC_MESSAGES 0755 root root 1 f none /usr/local/share/locale/ru/LC_MESSAGES/sudo.mo 0644 root root 19687 60998 1317105044 1 d none /usr/local/share/locale/uk 0755 root root 1 d none /usr/local/share/locale/uk/LC_MESSAGES 0755 root root 1 f none /usr/local/share/locale/uk/LC_MESSAGES/sudo.mo 0644 root root 20309 57351 1317105044 1 f none /usr/local/share/locale/uk/LC_MESSAGES/sudoers.mo 0644 root root 48004 50067 1317105044 1 d none /usr/local/share/locale/zh_CN 0755 root root 1 d none /usr/local/share/locale/zh_CN/LC_MESSAGES 0755 root root 1 f none /usr/local/share/locale/zh_CN/LC_MESSAGES/sudo.mo 0644 root root 13332 7876 1317105044 1 f none /usr/local/share/locale/zh_CN/LC_MESSAGES/sudoers.mo 0644 root root 31289 57836 1317105044 1 d none /usr/local/share/man 0755 root root 1 d none /usr/local/share/man/man1m 0755 root root 1 l none /usr/local/share/man/man1m/sudo.1m=/usr/local/share/man/man1m/sudoedit.1m 1 f none /usr/local/share/man/man1m/sudo_plugin.1m 0444 root root 50029 65497 1317105044 1 f none /usr/local/share/man/man1m/sudoedit.1m 0444 root root 33637 25362 1317105044 1 f none /usr/local/share/man/man1m/sudoreplay.1m 0444 root root 15013 39202 1317105044 1 f none /usr/local/share/man/man1m/visudo.1m 0444 root root 12575 38448 1317105044 1 d none /usr/local/share/man/man4 0755 root root 1 f none /usr/local/share/man/man4/sudoers.4 0444 root root 91959 35793 1317105044 1 f none /usr/local/share/man/man4/sudoers.ldap.4 0444 root root 38998 34053 1317105044 1 i checkinstall 790 2505 1317105157 1 i pkginfo 259 19937 1317105049 07070100000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000b00000000TRAILER!!!0707010019562e000081a40000000000000000000000014e816d9900000103000000b600010002ffffffffffffffff0000000800000000pkginfoPKG=sudo NAME=sudo 1.8.2 i86pc Solaris 11 VERSION=1.8.2 PSTAMP=27th September 2011 VENDOR=Todd C. Miller EMAIL=http://www.gratisoft.us/sudo/ DESC=Priviledge escalation tool ARCH=i386 CATEGORY=utility CLASSES=none BASEDIR=/ ISTATES=S s 1 2 3 RSTATES=S s 1 2 3 0707010019562d000081a40000000000000000000000014e816d9900001505000000b600010002ffffffffffffffff0000000700000000pkgmap: 1 6341 1 d none /usr ? ? ? 1 d none /usr/local 0755 root root 1 d none /usr/local/bin 0755 root root 1 l none /usr/local/bin/sudo=/usr/local/bin/sudoedit 1 f none /usr/local/bin/sudoedit 4111 root root 518812 44691 1317105044 1 f none /usr/local/bin/sudoreplay 0111 root root 109280 38981 1317105044 1 d none /usr/local/etc 0755 root root 1 f none /usr/local/etc/sudoers 0440 root root 2869 45583 1317104028 1 d none /usr/local/etc/sudoers.d 0750 root root 1 d none /usr/local/include 0755 root root 1 f none /usr/local/include/sudo_plugin.h 0444 root root 5027 7634 1317105044 1 d none /usr/local/libexec 0755 root root 1 f none /usr/local/libexec/sudo_noexec.so 0755 root root 12464 46325 1317105044 1 f none /usr/local/libexec/sudoers.so 0755 root root 680776 26575 1317105044 1 d none /usr/local/sbin 0755 root root 1 f none /usr/local/sbin/visudo 0111 root root 348616 4438 1317105044 1 d none /usr/local/share 0755 root root 1 d none /usr/local/share/doc 0755 root root 1 d none /usr/local/share/doc/sudo 0755 root root 1 f none /usr/local/share/doc/sudo/CONTRIBUTORS 0444 root root 2612 6185 1317105044 1 f none /usr/local/share/doc/sudo/ChangeLog 0444 root root 746145 12816 1317105044 1 f none /usr/local/share/doc/sudo/HISTORY 0444 root root 2780 49184 1317105044 1 f none /usr/local/share/doc/sudo/LICENSE 0444 root root 3844 46711 1317105044 1 f none /usr/local/share/doc/sudo/NEWS 0444 root root 24966 26728 1317105044 1 f none /usr/local/share/doc/sudo/README 0444 root root 3784 10358 1317105044 1 f none /usr/local/share/doc/sudo/README.LDAP 0444 root root 7312 56653 1317105044 1 f none /usr/local/share/doc/sudo/TROUBLESHOOTING 0444 root root 9440 21417 1317105044 1 f none /usr/local/share/doc/sudo/UPGRADE 0444 root root 12950 65000 1317105044 1 f none /usr/local/share/doc/sudo/sample.pam 0444 root root 1182 39360 1317105044 1 f none /usr/local/share/doc/sudo/sample.sudo.conf 0444 root root 1300 49892 1317105044 1 f none /usr/local/share/doc/sudo/sample.sudoers 0444 root root 4048 7180 1317105044 1 f none /usr/local/share/doc/sudo/sample.syslog.conf 0444 root root 1075 27811 1317105044 1 f none /usr/local/share/doc/sudo/schema.ActiveDirectory 0444 root root 7873 21347 1317105044 1 f none /usr/local/share/doc/sudo/schema.OpenLDAP 0444 root root 2410 41966 1317105044 1 f none /usr/local/share/doc/sudo/schema.iPlanet 0444 root root 2283 41078 1317105044 1 f none /usr/local/share/doc/sudo/sudoers2ldif 0555 root root 3766 27625 1317105044 1 d none /usr/local/share/locale 0755 root root 1 d none /usr/local/share/locale/da 0755 root root 1 d none /usr/local/share/locale/da/LC_MESSAGES 0755 root root 1 f none /usr/local/share/locale/da/LC_MESSAGES/sudo.mo 0644 root root 14327 57566 1317105044 1 f none /usr/local/share/locale/da/LC_MESSAGES/sudoers.mo 0644 root root 34539 10986 1317105044 1 d none /usr/local/share/locale/eu 0755 root root 1 d none /usr/local/share/locale/eu/LC_MESSAGES 0755 root root 1 f none /usr/local/share/locale/eu/LC_MESSAGES/sudo.mo 0644 root root 6748 31116 1317105044 1 f none /usr/local/share/locale/eu/LC_MESSAGES/sudoers.mo 0644 root root 6381 51663 1317105044 1 d none /usr/local/share/locale/fi 0755 root root 1 d none /usr/local/share/locale/fi/LC_MESSAGES 0755 root root 1 f none /usr/local/share/locale/fi/LC_MESSAGES/sudo.mo 0644 root root 15366 22349 1317105044 1 f none /usr/local/share/locale/fi/LC_MESSAGES/sudoers.mo 0644 root root 37072 7719 1317105044 1 d none /usr/local/share/locale/pl 0755 root root 1 d none /usr/local/share/locale/pl/LC_MESSAGES 0755 root root 1 f none /usr/local/share/locale/pl/LC_MESSAGES/sudo.mo 0644 root root 15259 52791 1317105044 1 f none /usr/local/share/locale/pl/LC_MESSAGES/sudoers.mo 0644 root root 36717 44403 1317105044 1 d none /usr/local/share/locale/ru 0755 root root 1 d none /usr/local/share/locale/ru/LC_MESSAGES 0755 root root 1 f none /usr/local/share/locale/ru/LC_MESSAGES/sudo.mo 0644 root root 19687 60998 1317105044 1 d none /usr/local/share/locale/uk 0755 root root 1 d none /usr/local/share/locale/uk/LC_MESSAGES 0755 root root 1 f none /usr/local/share/locale/uk/LC_MESSAGES/sudo.mo 0644 root root 20309 57351 1317105044 1 f none /usr/local/share/locale/uk/LC_MESSAGES/sudoers.mo 0644 root root 48004 50067 1317105044 1 d none /usr/local/share/locale/zh_CN 0755 root root 1 d none /usr/local/share/locale/zh_CN/LC_MESSAGES 0755 root root 1 f none /usr/local/share/locale/zh_CN/LC_MESSAGES/sudo.mo 0644 root root 13332 7876 1317105044 1 f none /usr/local/share/locale/zh_CN/LC_MESSAGES/sudoers.mo 0644 root root 31289 57836 1317105044 1 d none /usr/local/share/man 0755 root root 1 d none /usr/local/share/man/man1m 0755 root root 1 l none /usr/local/share/man/man1m/sudo.1m=/usr/local/share/man/man1m/sudoedit.1m 1 f none /usr/local/share/man/man1m/sudo_plugin.1m 0444 root root 50029 65497 1317105044 1 f none /usr/local/share/man/man1m/sudoedit.1m 0444 root root 33637 25362 1317105044 1 f none /usr/local/share/man/man1m/sudoreplay.1m 0444 root root 15013 39202 1317105044 1 f none /usr/local/share/man/man1m/visudo.1m 0444 root root 12575 38448 1317105044 1 d none /usr/local/share/man/man4 0755 root root 1 f none /usr/local/share/man/man4/sudoers.4 0444 root root 91959 35793 1317105044 1 f none /usr/local/share/man/man4/sudoers.ldap.4 0444 root root 38998 34053 1317105044 1 i checkinstall 790 2505 1317105157 1 i pkginfo 259 19937 1317105049 07070100195679000041ed0000000000000000000000024e816d9900000000000000b600010002ffffffffffffffff0000000800000000install0707010019567a000081ed0000000000000000000000014e816e0500000316000000b600010002ffffffffffffffff0000001500000000install/checkinstall#!/bin/sh # expected_bits="64" expected_release="5.11" expected_platform="i386" # release=`uname -r` platform=`uname -p` bits=`isainfo -b` # if [ ${platform} != ${expected_platform} ]; then echo "\n\n\n\tThis package must be installed on a ${expected_platform} architecture\n" echo "\tAborting installation.\n\n\n" exit 1 fi if [ ${release} != ${expected_release} ]; then echo "\n\n\n\tThis package must be installed on a ${expected_release} machine\n" echo "\tAborting installation.\n\n\n" exit 1 fi #if [ ${bits} != ${expected_bits} ]; then # echo "\n\n\n\tThis package must be installed on a ${expected_bits} bit machine\n" # echo "\tYour machine is running a ${bits} bit O.S. currently\n" # echo "\tAborting installation.\n\n\n" # exit 1 #fi exit 0 0707010019562f000041ed0000000000000000000000034e816d9900000000000000b600010002ffffffffffffffff0000000500000000root07070100195630000041ed0000000000000000000000034e816d9900000000000000b600010002ffffffffffffffff0000000900000000root/usr07070100195631000041ed0000000000000000000000084e816d9900000000000000b600010002ffffffffffffffff0000000f00000000root/usr/local07070100195637000041ed0000000000000000000000024e816d9900000000000000b600010002ffffffffffffffff0000001700000000root/usr/local/include07070100195638000081a40000000000000000000000014e816d94000013a3000000b600010002ffffffffffffffff0000002500000000root/usr/local/include/sudo_plugin.h/* * Copyright (c) 2009-2011 Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _SUDO_PLUGIN_H #define _SUDO_PLUGIN_H /* API version major/minor */ #define SUDO_API_VERSION_MAJOR 1 #define SUDO_API_VERSION_MINOR 1 #define SUDO_API_MKVERSION(x, y) ((x << 16) | y) #define SUDO_API_VERSION SUDO_API_MKVERSION(SUDO_API_VERSION_MAJOR, SUDO_API_VERSION_MINOR) /* Getters and setters for API version */ #define SUDO_API_VERSION_GET_MAJOR(v) ((v) >> 16) #define SUDO_API_VERSION_GET_MINOR(v) ((v) & 0xffff) #define SUDO_API_VERSION_SET_MAJOR(vp, n) do { \ *(vp) = (*(vp) & 0x0000ffff) | ((n) << 16); \ } while(0) #define SUDO_VERSION_SET_MINOR(vp, n) do { \ *(vp) = (*(vp) & 0xffff0000) | (n); \ } while(0) /* Conversation function types and defines */ struct sudo_conv_message { #define SUDO_CONV_PROMPT_ECHO_OFF 0x0001 /* do not echo user input */ #define SUDO_CONV_PROMPT_ECHO_ON 0x0002 /* echo user input */ #define SUDO_CONV_ERROR_MSG 0x0003 /* error message */ #define SUDO_CONV_INFO_MSG 0x0004 /* informational message */ #define SUDO_CONV_PROMPT_MASK 0x0005 /* mask user input */ #define SUDO_CONV_PROMPT_ECHO_OK 0x1000 /* flag: allow echo if no tty */ int msg_type; int timeout; const char *msg; }; struct sudo_conv_reply { char *reply; }; typedef int (*sudo_conv_t)(int num_msgs, const struct sudo_conv_message msgs[], struct sudo_conv_reply replies[]); typedef int (*sudo_printf_t)(int msg_type, const char *fmt, ...); /* Policy plugin type and defines */ struct passwd; struct policy_plugin { #define SUDO_POLICY_PLUGIN 1 unsigned int type; /* always SUDO_POLICY_PLUGIN */ unsigned int version; /* always SUDO_API_VERSION */ int (*open)(unsigned int version, sudo_conv_t conversation, sudo_printf_t sudo_printf, char * const settings[], char * const user_info[], char * const user_env[]); void (*close)(int exit_status, int error); /* wait status or error */ int (*show_version)(int verbose); int (*check_policy)(int argc, char * const argv[], char *env_add[], char **command_info[], char **argv_out[], char **user_env_out[]); int (*list)(int argc, char * const argv[], int verbose, const char *list_user); int (*validate)(void); void (*invalidate)(int remove); int (*init_session)(struct passwd *pwd); }; /* I/O plugin type and defines */ struct io_plugin { #define SUDO_IO_PLUGIN 2 unsigned int type; /* always SUDO_IO_PLUGIN */ unsigned int version; /* always SUDO_API_VERSION */ int (*open)(unsigned int version, sudo_conv_t conversation, sudo_printf_t sudo_printf, char * const settings[], char * const user_info[], char * const command_info[], int argc, char * const argv[], char * const user_env[]); void (*close)(int exit_status, int error); /* wait status or error */ int (*show_version)(int verbose); int (*log_ttyin)(const char *buf, unsigned int len); int (*log_ttyout)(const char *buf, unsigned int len); int (*log_stdin)(const char *buf, unsigned int len); int (*log_stdout)(const char *buf, unsigned int len); int (*log_stderr)(const char *buf, unsigned int len); }; /* Sudoers group plugin version major/minor */ #define GROUP_API_VERSION_MAJOR 1 #define GROUP_API_VERSION_MINOR 0 #define GROUP_API_VERSION ((GROUP_API_VERSION_MAJOR << 16) | GROUP_API_VERSION_MINOR) /* Getters and setters for group version */ #define GROUP_API_VERSION_GET_MAJOR(v) ((v) >> 16) #define GROUP_API_VERSION_GET_MINOR(v) ((v) & 0xffff) #define GROUP_API_VERSION_SET_MAJOR(vp, n) do { \ *(vp) = (*(vp) & 0x0000ffff) | ((n) << 16); \ } while(0) #define GROUP_API_VERSION_SET_MINOR(vp, n) do { \ *(vp) = (*(vp) & 0xffff0000) | (n); \ } while(0) /* * version: for compatibility checking * group_init: return 1 on success, 0 if unconfigured, -1 on error. * group_cleanup: called to clean up resources used by provider * user_in_group: returns 1 if user is in group, 0 if not. * note that pwd may be NULL if the user is not in passwd. */ struct sudoers_group_plugin { unsigned int version; int (*init)(int version, sudo_printf_t sudo_printf, char *const argv[]); void (*cleanup)(void); int (*query)(const char *user, const char *group, const struct passwd *pwd); }; #endif /* _SUDO_PLUGIN_H */ 0707010019563c000041ed0000000000000000000000024e816d9900000000000000b600010002ffffffffffffffff0000001400000000root/usr/local/sbin0707010019563d000081ed0000000000000000000000014e816d94000551c8000000b600010002ffffffffffffffff0000001b00000000root/usr/local/sbin/visudoELFpR4(L4 ($#44o))))%..x/usr/lib/ld.so.1KL  !#$%&*+,./0235679:;<=?ABCEFGHIKLMNOPQSTVWYZ]^acfgijklopstvxz}     !$%()*+-.0126789;>@ACDFHIJK "'()-148>@DJRUX[\_`bdehmnqruwy{|~ "#&',/345:<=?BEG#/:S( @}R F}f Kr X0i e n pgt ~XP ^l Pbn 0h v @fb | q ps @t { `~j :~( $:( 08 AITТp _p j z@    @  p  0   d    0 %:F -S ? R@S ds vP  @>   y U :F , 0N & 2U A, K WH h@U wU : F T M Q `<p =$ 6m EO @F< F: F4 -FT 8 G COW7 Wb@` n` { f f @i :qF :xF { k PT p| @I  0O @x 1 0B " (Pq 0Жq 7 = G SБ #Y NY dry:xP8M(QLp Ntz 8KL0! 9HPB<OKPTN[XQa5 mAPDh xLL.BN8OhMKe (LF0  ƴF;<M9@  EQKAtX ~Ld? v 0N L; 0B ^ $(P,M3*<0{ JPQ [Qc@wy NpPv$ Lf Q:`   (RQP 4N}P A] n Pt :y ? N A 8R 0 p L M B : (M po N @?  @v  ;> h0F :R , X :r :h M xO К  : 8N O o     % M?O* y 3 @d : (R xQ@ Z ] b Mh _ q q ~ N : pR  J f 0uY HL @ q N R D A t0+ P3 9 8 Ppu A PKL e U [ 8Lb l k K* v ; FL0 M HO : A AeM  M&?q 0>JXOO`$ ^LdP0s;zAAMB0 hQ@: |W ":8N;Av L ZNa7 o7 |Zl HP- x>Nw? hNQ"N d 0@ Q)&A k A NNVD d Np n ]XMz(NF*OM8PP(yuZ  hLM:(HRL NXNB (  5 C $ M(OU,N]NhS{ XLn?qL M f N[ P*0 `sN :HQk( XPP` 2 hPP R8QOhOOQ$e 3AQNXAoMu9, JNN B :0N 7 ` O.PO B:`:([K uM{NO)xNr :$ \ P[ M@ `m AHN g Q ^ I@q< * i 7M<MFo O: ; : R@y V\ eB}`a @C Kvisudocrti.scrt1.ocrt1.sfsr.svalues-Xa.cvisudo.c_xmknodusagehelpget_hostnamecheck_syntaxget_editorsetup_signalsedit_sudoersreparse_sudoersinstall_sudoersrun_commandcheck_aliaseswhatnowquitget_argsalias_remove_recursivecheck_aliasprint_unusedvisudo_printfgoodpath.cfind_path.cerror.c_warningalias.cdefaults.clogfac2strlogpri2strstore_syslogfacstore_syslogpristore_strstore_intstore_uintstore_floatstore_modestore_liststore_tuplelist_opgram.cnew_defaultnew_memberadd_defaultsadd_userspecyygrowstackfnmatch.c_userlist_matches_runaslist_matches_hostlist_matches_cmndlist_matchescommand_args_matchcommand_matches_fnmatchcommand_matches_globcommand_matches_normalcommand_matches_diraddr_matches_ifaddr_matches_if_netmaskpwutil.ccmp_pwuidcmp_pwnammake_pwitempw_delref_itemcmp_grgidmake_gritemmake_grlist_itemgr_delref_itemgrlist_delref_itemtoke.cparse_include_push_includepop_includeyy_get_previous_stateyy_try_NUL_transyy_get_next_bufferyy_fatal_erroryy_flex_reallocyy_flex_allocyy_flex_freepl_compareswitch_dirtoke_util.chexcharredblack.crotate_leftrotate_rightrbsuccessor_rbdestroyrbrepairalloc.cfileops.cgetgrouplist.czero_bytes.cglob.cglobexp1glob0g_strchrglobexp2globtildeg_strncmpg_charclassglob1globextendglob2g_lstatg_statglob3g_opendirg_Ctocclassmatchrangematchgetprogname.ccrtn.serrorlinenosudo_getgrgidfstat64futimesatsudo_setpwentvfprintftq_pop_environ.XAKk4DpQ2WgOF1s.yy_meta.XAKk4DpP2WgOFXs.prioritiessudo_setgrent.XAKk4DpQ2WgOF1s.yy_did_buffer_switch_on_eofinet_ptonsudo_endgrentmemcpyfgetsgetprogname.XAKk4DpQ2WgOFps.grlist_cacheyy_scan_string__filbuflseek64_DYNAMIC.XAKk4DpQ2WgOF1s.idepthyysslimereallocstrcmp_exituser_is_exemptlibintl_textdomainalias_addyygindex.XAKk4DpR2WgOFot.sudoerslistsnprintfqsort.XAKk4DpQ2WgOF1s.yy_last_accepting_statefill_txtfwriterbapply_nodesetprogname_lib_versionsudo_defs_tableyycharsudo_goodpathlibintl_bindtextdomain.XAKk4DpR2WgOFot.alias_freelistyy_flush_bufferdump_defaultsinnetgrrenameyydefredgroup_matchesisattyfind_pathisblankgetgrouplistfreadgr_addrefsetlocalesudo_setspentiscntrl.XAKk4DpQ2WgOF1s.yy_initwarningxuserpw_matchesispuncttolower__ctypeeasprintfsudo_freegrcachesudo_userevasprintfisxdigitsudolinenosudo_endpwentfopen64strtodlist_appendsudo_getgrnamwaitpidisalpha.XAKk4DpM2WgO1fp.cclasses.XAKk4DpQ2WgOFps.grcache_bygid.XAKk4DpP2WgOFXs.facilitiessudo_fakepwnam.XAKk4DpQ2WgOF1s.yy_acceptstrtokyytextstrtolchown__fpstartisgraph.XAKk4DpQ2WgOF1s.yy_ecyylval.XAKk4DpQ2WgOFps.pwcache_byuid__fsr_init_valuehtonlyyinyy_switch_to_buffer_end.XAKk4DpQ2WgOFps.pwcache_bynameisspaceinit_parseryycheckunlinkchmodyylenpedanticgettimeofdayyyerrflagcommand_matchestq_remove.XBKk4DpR2WgOlpt.find_path.command___Argvtrace_printyylex.XAKk4DpQ2WgOV7s.arg_size.XAKk4DpM2WgOlcp.cclasses__ctype_maskstrpbrkupdate_defaults.XAKk4DpQ2WgOF1s.yy_startparse_errorclosedirestrdup__1cG__CrunMdo_exit_code6F_v_sudo_freepwcacherpl_globfreefputsrpl_globrbfind.XAKk4DpQ2WgOF1s.yy_nxtlstat64yyparseyyssprbcreatecmnd_matchesuserspecsyyoutsudo_getpwnam__iobsudo_endspentlist2tqlibintl_dgettextyy_create_buffertouchstrerrorisprintyytable.XAKk4DpQ2WgOFps.grcache_byname__longdouble_usedsysconf_finiyyerrorstrcasecmpset_fqdnyylhsgetoptemalloc2init_lexer.XAKk4DpM2WgO1lp.prognameyydgotosigemptysetemalloc.XAKk4DpQ2WgOF1s.yy_current_buffer.XAKk4DpQ2WgOF1s.yy_n_chars.XBKk4DpQ2WgOFjs.netgr_matches.domainalias_freeclosefromyyrestart.XAKk4DpQ2WgOF1s.yy_baseefreegrlist_addreffclose__environ_lock_edata.XAKk4DpQ2WgOF1s.sawspace.XAKk4DpQ2WgOF1s.yy_last_accepting_cposexecv.XBKk4DpM2WgO13p.sudo_parseln.bufalias_findgetgrent.XAKk4DpP2WgOFXs.def_data_lecturecleanup.XAKk4DpQ2WgOV7s.arg_lenyy_delete_bufferalias_comparestrlengrlist_delrefpw_delreftq_appendusergr_matches.XAKk4DpQ2WgOF1s.yy_def__flsbufzero_bytesgetenv_get_exit_frame_monitorstrsignalset_defaultyy_load_buffer_stateisalnum_GLOBAL_OFFSET_TABLE_.XAKk4DpQ2WgOF1s.continuedaddr_matcheslist_pwyy_scan_bytesyystacksizeerealloc3filenoyysindexatoiyydebugsudo_getpwuid.XAKk4DpQ2WgOF1s.yy_chkinit_defaultsgetuidyyvsp.XAKk4DpP2WgOFXs.def_data_verifypwisupperstrrchryylengrewindyy_init_bufferlist_optionsnetgr_matchessudo_fakegrnamno_aliasesinterfaces__fsr.XBKk4DpP2WgOFLs.alias_add.errbufuser_in_groupyyssgroup_plugin_queryyyrindexsudo_parselnerrorfilelockf64open_sudoersrpl_fnmatchislowerutimesstrlcatmemsetmemcmpisdigitinit_envtables.XAKk4DpQ2WgOF1s.yy_hold_charoptind.XAKk4DpQ2WgOFjs.emptyyyval.XBKk4DpP2WgOFXs.init_defaults.firsttimehostname_matchesoptargfork.XAKk4DpQ2WgOF1s.istacksizealias_remove.XAKk4DpQ2WgOF1s.yy_c_buf_palias_seqnogr_delrefinet_addr.XAKk4DpQ2WgOF1s.keepopen.XAKk4DpP2WgOFXs.def_data_listpw_PROCEDURE_LINKAGE_TABLE_errnostrlcpyreaddir64_etextgethostnamelock_fileverbosepw_addreffill_argsfill_cmndyynerrsset_group_list.XAKk4DpQ2WgOF1s.prev_statefdopenrbdeletealias_applyipv6_validinit_aliasesyyvssigactionestrnduperrorxget_group_list.XAKk4DpQ2WgOF1s.istackrbinsertyy_scan_bufferatexitlibc.so.1SUNW_1.23SUNW_1.22SUNW_1.21SUNW_1.19SUNW_1.1SUNW_0.9SUNW_0.7SUNWprivate_1.1SYSVABI_1.3libnsl.so.1SUNW_1.7libintl.so.8libiconv.so.2libsocket.so.1/usr/local/lib yyyy'= (= (= qN 7 '= (=                                                             .   L  PI<y]p()*-',%#&$+.*012346789:;;<=>?@AcVzCDEFGS HIJK{ALRNTRS>^!OxeUWVXYZ2PQO\T^_`abb1g +e"oYjknopqltruxs{ yvwmz}~)j%/4?nW`C'Ks8M3:&FaE9Hrldfv~p0N NJ,M8+M-*-*H)e))K)) )@)0)))))))t))T))))))*$*a*x **Y***d *u$*6(*,*0*4*B8*<*@*!D*XH*L*P*;T*X*\*1`*d*h*l*p*t*x*.|*,+c4+UD+++++++++/,,,(,,,l,$,50,D,T,d,l,|,, ,,-L->-9.I.&\.N`.d.l. t.x...G...Z.;.B..g...F.q..O5)%)%)h%)h%)h%)h%)h %)h(%)h0%)h8p%)h@`%)hHP%)hP@%)hX0%)h` %)hh%)hp%)hx%)h%)h%)h%)h%)h%*h%*h%*hp% *h`%*hP%*h@%*h0%*h % *h%$*h%(*h%,*h%0*h%4*h%8*h%<*h %@*h(%D*h0%H*h8p%L*h@`%P*hHP%T*hP@%X*hX0%\*h` %`*hh%d*hp%h*hx%l*h%p*h%t*h%x*h%|*h%,+h%4+h%D+hp%+h`%+hP%+h@%+h0%+h %+h%+h%+h%,h%,h%,h%,h%,h %,h(%,h0%$,h8p%0,h@`%D,hHP%T,hP@%d,hX0%l,h` %|,hh%,hp%,hx%,h%-h%-h%-h%.h%.h%\.h%`.hp%d.h`%l.hP%t.h@%x.h0%.h %.h%.h%.h%.h%.h%.h%.h%.h %.h(%.h0%.h8p%.h@`%.hHP%.hP@jjR.tShIl0tp0t P+EL0u TL0RU h0RPNPjURQt`|$уx0 D$td$у`tƒ 3fd$f T$tfd$f L$l$YZ]ÐUjjEPE PEPj[EEÐUP]E~ E @E EjEP0MhjhhjhE} jjl)EE܉EEE؋E؉E Eh8E PEP EEh@hMhPPS hXhLj(PS jjE@ENEEo(eE@E[E@EOjjw(>Eh}c} V>؃ctft̃q}htqtsth8E PEP EEE+NENE E Et jj'輠wphNjPEЋEУ*8N.jjOjjQt˃xtҡ8N;EEtU:tU:PBPu jj:PE PEPEPE@EEuEu%hhhС4NPRj " E@EE'hh.ЋE@PR,JHJJ}jhJ(E)JEJ@JE@EEE܋E܉EEEEtpE thJHJJ}jhJE)JEСJ@JE@E؋E؉E̋ẺEԋEԉEEtE ujj:PE PEPEPvE@EE8NEEÐUXE UlPBPu&hhЋE@PRj UEPEPB P t0h$hqȋUjjEPEPB PQK UE%PB P{t-hPh$ȋUE%PB PQ Ejj@ P t8h$hЋEjjjj@ PREEh @ Pt7hPhЋEh @ PRi EUE@PB Pu!Ej@ P/ E@ M2hthȋUE@PB PQ j/h\\t\@\ \E@ `E@dDžh\Phetqhhf؋MUEj@PBPA PhSWEj@ PnEj@ P E@ ErEj@ P E@ KhhȋUE@PB PQ Ej@ PE EEXÐUÐUÐUEEÐUÐUÐUEEÐU,hhh(JPEJHJJ}jhJE*JEJ@JE@EEEEEEEEEE trEtjJHJJ}jhJE+JEءJ@JE@EEEԋEԉE܋E܉EE tEu3ExEEIhhjPJ!Ee} tÃQt̃etxtEÐU j EP?jEPE|EjEPj jEPj jEPj jEPj ÐUhhЋEPRjd tBjjqE PEPqhhЋEPRjj4GEEltjEPEP4 EEu MtًEt E%t EE%EEÐUhEP!uJ:EehEPdd:du5E u!hhЋEPRjjE PEPY@GtE8Nu;E u!hhCЋEPRL8NE:8Nu'E PEP t8NE:8NhE 8Nt]:t+hhС:P:PR #h<hС:PR$hPhaЋEPRbE:=Jj:PЍlPRdEuEt>DžhE u,h`hjjjEPRh8JE%= tADžhE u/hhjjh EPRh8J]hEEÐU ;EEt+E@PEPRuE@EEuՋE7jjEjEPЋEPE@EUPE@Eh h@P ЋEPE@ EU PE@u.E@PhqjEPcE'Ej@Pu&hh7ЋE@PRj Eh@PEEuE@Phjf EPh;uE@ t9Eh@ PEEuE@ Phj EEh@PEEuE@Phj jEP`Et E@EEEÐUDEjh,EEt E@ujhEEtE@u EEt{jEP%EjhjjPjEPEPuEE7P3t&hh[ЋEPRj EEEEEEP3tEtEEEEEPEPt#h hЋEPRj8 jD6PEh0 EPlEjEPEj/EP*uj/EPu E@@PPugXPEPuOp%=u=pIt/X;u!hl;u;u!h0 jPEEEtE@jEPCjD6PEh0 EPEjEPEjEP th0 jEEuEt E@u%h4 hСD6PRj` EUPEEEÐU EEE@tGE@СM@u-E@EE@tE@СM@tӋE@teUBE@EE@tGE@СM@t-E@EE@tE@СM@uӋE@tEEEEEEÐUhPtX `NX \NtEjP\Nj.\NPaEEt/UBj\NP`N.UB \N`NUEE PEPEEt[E@EEtJE@ =u+UjjEPEPE PBPuEE@EEu0N@0NE PEPEEtEP;P8EEEÐU$EE PEPEEt\E@EEtFE@ =u'UjjEPEPE PBPU‰EE@EEu&EMZuBEthd hWEh h=EEE>Eth hEh hEEEE =u  EcE =u EHE =u E*E =u E ( E܋E܉EEEEEEPEPEP E@EEEEÐU(Ejhg;NEEE@EEtRE@ =u30N@0NUjjE PEPhBPU‰E܋E@EEuE@EEOE@EEtRE@ =u30N@0NUjjE PEPhBPLU‰E܋E@EEuE@EEE@EEtRE@ =u30N@0NUjjE PEPhBPU‰E܋E@EEuE@EE@ =u30N@0NUjjE PEPhBPyU‰E܋E@EE>E@EEE@EE$NEEE@EEtVE@ =u70N@0NUjjE PEPhBPuE@E܋E@EEuE@EE[E@EEtVE@ =u70N@0NUjjE PEPhBPuE@E܋E@EEuE@EEE@EEtVE@ =u70N@0NUjjE PEPhBP uE@E܋E@EEuE@EE@ =u70N@0NUjjE PEPhBPuE@E܋E@EE6E@EEE@EENEE9EFE:E.E"E@- w${E@EEttEEEtUE@ =u60N@0NUjjE PEPEPBPuE@E܋E@EEuE@EEuE@EEh;P/ u8E u0Et0 E 8 E؋EPh{} Et E܉E EE؉EE(z4z@zLzUEEE EE@=u  EpE@=u EPE@=u E.E@=u E ( EEEEEEEh@ hЋEjj@PEPEPREEÐU;EEt-E@ tEj@ PE@EEuӋEu zۇÐUjEP$EjEPEjEPPEPj tNjhX j t8jEPXPEPjy tjht jc ujEP`ÐUEt8JE (JE#Phx EPo Et jjÐU]h h@~#PS?jjkh hjPvjjz]ÐU ,(JE18JE%ME2Et؃tݐEEEPE PEP EEÐUjjEPE PEPj EEÐUEt E@u E|lPEPt EYE%=u EIuM E)E thlPE P/ EEEÐUjjEPE PEPj+EEÐU]EEjEP=r4h h -jjNjjPEPSjj/EP=tQhEPh; EPh;tE ;PEEEu EjEP]EEEj:EPEEt UBE@tE@.u!E@uEE@EjEPEPh hh;EE~ E=r4h h jjNYjjPEPSjmEPh;\EEtE@EEjEPnEEjjEPh hh;EE~ E=r4h h jjNjjPEPSjEPh;EEtEt E*EtE UPEEE]ÐUEEEPE Pj jjjEPÐUEEEPE Pje jjYjEPÐUE EEPEPj% UE EEPEPj UMEh8JP E t5h h h8JPEPE Ph8J EtE@PEPu$EEEEE@EE@u‹E@u4(PR荼ЋEPRE[EPEPE P ugE t+,PR0ЋEPE PR5 %0PRЋEPRE EPEPE P ugE t+,PR註ЋEPE PR %0PR}ЋEPREE uLE@%tEt40PR!ЋEPR*E4E@%tHE t@E @/t44PRɺЋEPREEPEPE P/ u7,PR|ЋEPE PR E}E uLE@%tEt40PRЋEPR&E0EPEPE P u7,PRйЋEPE PR EE uLE@%tEt40PRqЋEPRzEEPEPE P u7,PR$ЋEPE PR) E3%E uLE@%tEt40PRŸЋEPREEPEPE P u7,PRxЋEPE PR} EyE uLE@%tEt40PRЋEPR"E,EPEPE P u7,PR̷ЋEPE PR EE t48PR腷ЋEPREEUPE uLE@%tEt40PR!ЋEPR*E4EPEPE P u7,PRԶЋEPE PR EE uDE@%u40PR}ЋEPREEPEPE P u3,PR0ЋEPE PR5 EB8Ep}Nw|UD܋UEE]ux|@tU ]ZUڋ<@EE@tw;Ej@P6E@0jjjEPjjE@%ttӋEjPEEE@uǀǀ,ǀHǀǀǀD@jPDЋDjP%ЋHjPЋhǀǀ@ǀPLjPR PjPR Tj8PR XjPR- \jPR ǀǀP`BB`BBǀǀ,djPЋthPR跲jPЋlPR舲jPUЋpjP6ЋtPR:jPЋ8djPЋpxjPЋ<|jPЋXjPЋǀ<@]ÐU]ZUǎE@EEEt)MUE@PB PAP uEhEtGEPBP3u)MUE@PB PAP uEEt?EjP8u)MUE@PB PAP9 uEEt?EjP;u)MUE@PB PAP uEqEt?EjP<u)MUE@PB PAP uE%E@wUDUE@EEBEEE]?#{oU]ZU𸧌ڋEuE @8j EPEPѱ EE@t E5E UPE @tU jEPBЃE EE]ÐU]ZUڋEuE @@j EPEP1 EE@uE} E5E UPE @tU jEPBЃE EE]ÐU ]ZUWڋEuM BABA?EPEP苰]E]E@t E8U EBEBE @tU jEPBЃEEE]ÐU]ZU𸧊ڋEu'Eu E EE UPfE @ EE@tP@j-@PBPw Ћ$P P@@PBP赼@$@Bjj߲EU싃@@PBPU싃@@PBPEUPE@$UPc@$@B$PfB6@$@B$PfB @h@PЋ$P hjЋ$P @h@PЋ$P @h@PeЋ$Ph @h@P9Ћ$P< P@@PBP@@@u4@H@@@@ЃA ‰A@@@u=@H@@@@ЃANj q@@@uV@@@@t9@H@@@@A%? ‰A@@@u9@H@@@@ A% ‰A@@@u9@H@@@@ A% ‰A@@@@@@u|@@@@u@@@@tN@@P@HBAB A @@P@HBABA@$@B jj 諮E싃@@tXU싃@@@PBPȷU싃@@@PBP詷@j@P袳)E@E@ E@E@@U@B@U@BEUPE@E@@ =u=E@@u.E@uMA%? ‰A$UPd @$@B$PfB6 @$@B$PfB @$@B@$@B$@$@@$@B$@@$@B$@c@$@B@$@B3@$@B@$@B$@@$@BjjЋ$PP$@RP$@@jj蟫Ћ$PP$@RPP$@RPBjjSЋ$P$@@P$@RP$ A% ‰A$ A% ‰A$A%? ‰A$ANj q$A ‰A^$A ‰A@$A ‰A $ANj q$ANj q$A%? ‰A$A%? ‰A$ A% ‰AY$ A% ‰A1$ A% ‰A $ A% ‰AhjЋ$P@h@PЋ$Pjj裨E싃@U@B@U@BhEP;Ћ$P>P@@PhBPD EEtjEPP@@PBP虱@$@BP@@PhBP EEtjEPeP@@PBP @$@B&P@@PhBP, EEtjEPxP@@PhBP EEtjEP(P@@PBP1@$@BJ@$@B$PfB@$@B$PfB@h@PЋ$PhjЋ$P@h@PyЋ$P|@h@PMЋ$PP@h@P!Ћ$P$P@@PBPͮ@$@B@$@B$PfB@$@B$PfB@h@PaЋ$PghjDЋ$PJ@h@PЋ$P#EH_wU܍U⋃UHU+ȋH@@EUH+ȋHU,PEEEE@B@fP@B$HBABA@})%AE싃UPE} @@uzU0PEEt@EEEE|/E=i%U P;EuUPEU4PE@;Br t\@BU@fP@B$HBABA8jP@tj@PX@tj@P6EUPUPEUPUP@E@tj@P轄@tj@P蛄EUPUPEUPUP@EE]؋uÀ<h(T,<h` ( H p (l,T|<h H$t4T@lU ]ZU\jjEPE PEPj EE]ÐU4]ZUܸ\EE @EEE@u E EEEUEjj@PjjBPet"E@u EEEElMUEPBPAP t"E@u EEEE$Eh@P+EEtaEPEPEEt;E@t#Eu E EEEEEEEMUEPBPAP% t"E@u EEEE_E@ E=}E==E=}"EЍw"VU܍DUE=EtE@EEEEE]g{U ]ZUGZڋ@@BE PEP_EE]ÐU4]ZUظYEE@E@u@E @u5P@PBPpP EhE@EE,E@u E EEEU@jj@PjjBPKt$E@u E EEEMP@PBPAP t"E@u EEEE4Eh@PEEteU<PBPREEtE-E PEPEE PEPEE]ÐU ]ZUMڋj@,PEP蚻 t EmE PEP{tK@8tj@8P\rj@,PЋP8E EE]ÐU<Z@QLjEP3qhhUD/tsj/EP\o``tT`@`LP`Pqu,`PB4PzotEqjjDPjh(EPu DujDP蠶E$Tdd@\\wj\P phh\D/u1hP\PVtEj/\Pn``t`@`\``PB4P:nulP\Pmuq@ t0@ @;luN@ P@;Eu;|u2j@8P蝑j\PlЋP8-ddd@\\jDP\u E]E PEP+t?j@8Pj@,PΎЋP8E EE<ÐU\Z`IjEPmddUD/udPEP/Ej/EPlhhu Ehh@hhPB4P-lulPEPku E@ t:@ @;lu@ P@;Eu;|t ETE PEPt7j@8PjjEP<ЋP8EEE\ÐU\Z`GjEPCmdduEhEPhPkl =rjdPmEYjdPlhhU hhhPhPl =rhPB4PKjulPhPjur@ t0@ @;luN@ P@;Eu;|u2j@8P譍jhP|ЋP8&jdPkhhjdPkhEE\ÐU(]ZUܸEڍEPEPjk ~ EEjEPrkE싃l@EEE@;EtE@;EtEU@#B;Eu EUjEPBP k uEEEs8EULEUD#ȋED;tE@EErȋEu E5E@gE@$EE EE]ÐU<]ZUȸDڍEPEPjj ~ EEjEPiEẼutj.E PhtjE PiEFjE Pi؃ EEE؋ME؋E؋MEjEPiEEPE PjQi jE PjiEEE}oEUЍ;}UDAE;EUD"EUЍ+иUD؋E@EE|l@EԋEԃEԋ@;EtvEԋ@#E;EuEEEЃs4EԋUTED#ЋED;tE@EЋEЃr̋EЃu E-ẼttEԋ@$EԋEԃTEE]ÐU]ZUAj/EPlfEEt2UBE@EEPEPGEU/BjEPEEEE]ÐU]ZUAڋLPEPftwj.EPet4jE PEPu u EEEEjEPEPA u EEEEuj.EPMet1EPE Pfu E EEE1EPEPfu E EEEE]ÐU]ZU?ڋEt3E@#u'Ej@PfEEU;Pu EE PEPOcEE]U]ZUg?ڋE@#u'Ej@PeEE U;Pu E U EPBPbEE]ÐU]ZU>EEE@EE@EEEE%tE@:u0dtUEPBPE Pz E|Eu"jE P]EEuVEEEPEPt E1dt EPEPE Pvz tEEtjEPDEEE]ÐU]ZU=ڋE@EE@EEEE+t Erjj@PEPE PEPct E?E ;Et0jj@PEPEPEPct EEE]ÐU ]ZU<jjEPE PEPj_EE]ÐU]EEE EEU@+BEE]ÐU]ZUg<ڋEEE EUE@PBP_EE]ÐU<]ZUȸ<ڋE@ tE@ @u E E@ E̋ẺEEE܉EEEEEEEEEE0E@tEj@P`@EEEE؋E@tEj@Pc`@EEEE؋E@tEj@P:`@EEEE؋E@tEj@P`@EEEEjEP_@E܋EE܉E؋E tjE P_U؍DEjEP|EԋEԃ EEEj$EPEP_ E$EE@t)UEPBPEP_ EЋUPEEEE@t)UEPBPEPX_ EЋUPEEEE@t)UEPBPEP$_ EЋUPEEEE@t)UEPBPEP^ EЋUPEEEEPEPEP^ EЋUP EE܉EE t-jE P^@PE PEP^ EԋUPEUԋ@BEԋUЉPE@EԉEE]ÐU]E EE@U@B]ÐU]ZU8ڋEEE@HEEUPEujEPC]ÐU]ZU8ڋEj Pq]ÐU ]ZUG8ڋEE􋓌EPBPrEEtE@ EjEP^EEtcjEPE싓EPBP{ot5PRHZЋE@jj@PEPRjnjj yEE@EUPE@EPBPnt'PRYЋEPRjq E@U@BE@EE]U$]ZU6ڋEE􋓠EPBPVqEEtE@ EjEP5]EEt[EPEPRE싓EPBPnt'PRXЋEPRj荏 jEP![@EEj PDxEE@EU BUEPEPBPZ E@EPBPtmt'PRAXЋEPRj E@U@BE@EE]ÐU$]ZUW5jEPEEEjEPGwEj0EPVE EEj@P6[ЋEPEU P EU$BUE@PEPBPY E@EU@BU􋃬jPBPY E@UBE@PE@U@BU􋃰jPBPgY E@UB U􋃈jPB P@Y E@EUPEuJEU@BEPBPkEEtEj@ PEUP HEU@BEPBPQkEEtEj@ PEUP E@EEDE@U@BEEE]ÐU]ZU'3Y@ujPhЋP@ujPhЋP]ÐU]ZU2ڋ@t&PBPp@@t&PBPo@]ÐU]ZU2XE]U]EEE EEU@+BEE]ÐU,]ZUظ1EEEEEEE@tEj@PtV@EEEEE@tEj@PKV@EEEEE@ tdEEU@ t9EU@ jPVUDEE@EEU@ uNjE@EUEEE tjE PUUDEjEPrEE EEEjEPEPU EEE@ E܋UP UEEEEU@ thEU@ jP!U@EEMP EPPEP U E܋U@ M EEEE@EEU@ uE܋U@ E@t)UEPBPEPT E܋UPEEEE@t)UEPBPEPT E܋UPEEEE t-jE PBT@PE PEPPT EUPEU@BEU܉PE@EEE]ÐU8]̉uZUи.EjEPS@EEEUEEUEEEU‰EjEPpEE EEEjEP{EEE܋UPUEEE܋UPUEEEPEPEP*S EUPEU܉PE@EEEEE;Es$MU E܋u@E@EE;Er܋E܋UP EE;EUE jPE؋E؃Ej@PbR@EE+E܋U;Ev:EE PEPpEԋEUD EE+E܋U‰EEԉE܋U؋EPBPEPR E܋U@M E@EEEEjEPE@EE;E'E܋UPEEE]̋uÐU]E EE@U@B]ÐU]ZUW,ڋEEE@HEEUPEujEPs]ÐU]ZU+ڋEj Pq]ÐU ]ZU丷+ڋEEEPBP&fEEtE@ EjEP5REEtcjEPE싓EPBPbt2PRMЋEjj@PEPRjTqjj #mEE@EUPE@EPBPmbt'PR:MЋEPRj E@U@BE@EE]U$]ZUW*ڋEEEPBPdEEtE@ EjEPPEEt[EPEP"E싓EPBPat'PRVLЋEPRj jEPN@EEj PkEE@EU BUEPEPBPlN E@EPBP`t'PRKЋEPRjX E@U@BE@EE]ÐU$]ZU(jEPMEEEEE$jEPjEjEPuE EEj@PNЋEPEUBUE@PEPBPJM E@EUPEuLEU@BEPBP_EEtEj@ PiEUP JEU@BEPBPY_EEtEj@ PEUP E@EEE@U@BEEE]ÐU]E EE@U@B]ÐU]ZU'ڋEEE@HEEUPEujEPcn]ÐU]ZU&ڋEj Pq]ÐU]ZUg&BM@ujP\ЋP@ujP[ЋP@ujP[ЋP]ÐU]ZU%ڋ@t&PBP+c@@t&PBPb@@t&PBPb@]ÐU]ZU$K]U,]ZUظ$ڋE@EEPBP#_EEtE@ EjjsKEE܋E܃}E jEPgEMUjjEPEPB PAPqucjEPkjEPfEMUjjEPEPB PAPiqujEPVkE;E܃UEPEPBP EEuE@PRj| jEPjEPBPZtE@PRj| Ej@PH@EEj P5eEE@EU BMUEPBPAPG E@EPBPbZtE@PRj{ E@U@BE@EE]ÐU]ZUW"ڋEEEPBP\EEudEPE PEP' EEuEPRjG{ EPBPYtEPRj{ ]ÐU ]ZU丗!EEjEPEE%E @#unE j@PGEEU;P uEEEU;P }0EU@M; u EE@EEU;P |EEU;P}:EU@PE P*Gu ENE@EEU;P|ƋEj@ PEEtE@PE PFuEEtjEP@jEPEEE]ÐU ]ZU jjEPE PEPj@BEE]ÐU,]ZUظڋ@@ @u @@uP@uB@u"h@@P66ЋP5 @E$@UBEE @E@UPUE@Ћ(EU,Pt0UP4UPU8PUЋ<P;EtLU@PEE=_|U닃DEU8PUЋ<P;EuU8PUЋHPEE@EU8P=QU,PEEu(4@E0@EU,PE싃LUPU+UPPE$@BUB UPW)$@UB4@E0@EIP@~+LP@B@ ҋ@P@tTjPBЃE,(P@~+LP@B@ ҋ@P @(P@~+LP@B@ ҋ@P @ @tXjPBЃLPj@PBP.K uE'E'P@~+LP@B@ ҋ@P @@tTjPBЃE,q'P@~+LP@B@ ҋ@P@t\jPBЃE='P@~+LP@B@ ҋ@P@t`jPBЃE+&P@~+LP@B@ ҋ@P@tdjPBЃE-.&P@~+LP@B@ ҋ@P@thjPBЃ@ @HЋlP @ %P@~+LP@B@ ҋ@P@tpjPBЃLPj@PBP;H uE%E$P@~+LP@B@ ҋ@P@@Bt@$P@~+LP@B@ ҋ@P@txjPBЃl@ EB@u3@t|jPBЃE#l@9@@t$@@:uD@@u2@t|jPBЃE]#@tjPBЃE+#@@u2@t|jPBЃE"@tjPBЃE"@@%+i@tjPBЃE`"P@~+LP@B@ ҋ@P@tjPBЃLP@PBPFu E!!P@~+LP@B@ ҋ@P@tjPBЃLP@PBPiFu EA!6!P@~+LP@B@ ҋ@P@tjPBЃL@PjBPG uE @ P@~+LP@B@ ҋ@P@tjPBЃLP@PjBP}!":Q믐>@j똋P@~+LP@B@ ҋ@Pt@t1@t|jPBЃEEL@E@ȋB@t.E@E苓L@E@ȋB@u@tjPBЃES@tjPBЃE@tjPBЃE@tjPBЃEL@E@R}CFH RtU^pP@~+LP@B@ ҋ@P@tjPBЃE  P@~+LP@B@ ҋ@P@tjPBЃEP@~+LP@B@ ҋ@P@tjPBЃE2P@~+LP@B@ ҋ@P@tjPBЃEP@~+LP@B@ ҋ@P@tjPBЃEZP@~+LP@B@ ҋ@P@tjPBЃEP@~+LP@B@ ҋ@P@tjPBЃEP@~+LP@B@ ҋ@P@tjPBЃEP@~+LP@B@ ҋ@P@tjPBЃEP@~+LP@B@ ҋ@P@tjPBЃE>P@~+LP@B@ ҋ@P@t|jPBЃEP@~+LP@B@ ҋ@PLPj@PBP4 u Eh@tjPBЃE7P@~+LP@B@ ҋ@PLPj@PBP4 u E@tjPBЃEP@~+LP@B@ ҋ@PLPj@PBPh3 u E0@tjPBЃEP@~+LP@B@ ҋ@PLPj@PBP2 u E@tjPBЃEcP@~+LP@B@ ҋ@PLj@P:8u2@t|jPBЃELPj@PBP1 u E@tjPBЃE{P@~+LP@B@ ҋ@PLj@PR7u2@t|jPBЃE LPj@PBP0 u E @tjPBЃE P@~+LP@B@ ҋ@P@tjPBЃE& P@~+LP@B@ ҋ@PvP@~+LP@B@ ҋ@P:P@~+LP@B@ ҋ@PLPj@PBP|/ u ED @tjPBЃE P@~+LP@B@ ҋ@PLP@PBPB1uE @tjPBЃEw P@~+LP@B@ ҋ@P @@tjPBЃLP@PBPt0u E P@~+LP@B@ ҋ@PLP@B@/u`@tjPBЃLP@PBP/uE. E @@tjPBЃLP@PBPY/u E P@~+LP@B@ ҋ@P@thjPBЃ@ @HЋlP @  P@~+LP@B@ ҋ@PLPj@PBP+ u E@tjPBЃEP@~+LP@B@ ҋ@P@tjPBЃE(P@~+LP@B@ ҋ@P@t jPBЃE)P@~+LP@B@ ҋ@P@tTjPBЃE,>P@~+LP@B@ ҋ@P@t\jPBЃE=P@~+LP@B@ ҋ@P@tjPBЃE:fP@~+LP@B@ ҋ@PP@t2@tjPBЃE!P@~+LP@B@ ҋ@P @Hu4@t|jPBЃE_ @@@Bt@@tjPBЃEP@~+LP@B@ ҋ@P@P@~+LP@B@ ҋ@P@@@Bt@@P@~+LP@B@ ҋ@P @@@Bt@@tjPBЃEP@~+LP@B@ ҋ@P@t|jPBЃEB @HtA @@t|jPBЃEuEP@~+LP@B@ ҋ@PLPjj@PjBPAPbYLU+PBE苃$@UB@@$u:@$@B@RP@@$ @$@BQ;LPU苃 PCEjEP E䋃L@EEt+ @ @B @EEEn @EI(@L @B @H=E(@uj@P LPU苃 PVE @EL@E@$HJ HE @EL@E[{ȃw,U؍DU5,jP MBw-U؍UE]+*S+{c [c_ ' _  g WWW/sK#[{c G !;""s##K$$#%%&&C''G(+))((((((UL]ZUڋ@@EL@E @$@BQ@;v0jPS@@ u/ L@+Bu EE L@+BHEEE;E}*E@UBE@EE@EE@EE;E|֋@@$u$$@@@p@@ +EHEE@E U@+BE܋E@tlE@ EE؋E؃UE@ R M‰A E@ UEB UE@ PBPw ЋEP E@E@u4jP EPU܋ P@@ +EHEEE= ~E @@E*EE;E?@@HE؋@U؉PE؃}j@PE-@EЋEЋ@E̋E̋U@BE@EԋEԉEEE @PUM܋E E@E܋E;E@@HEȋ@UȉPEȃ}j@PE/@EE@EEU@BE@EċEĉEEt E LE u@PUM܋E E@E܋Eu&@@ t8jP $U܉Pl@PUjj@PEPjRE$UPEu&@@ t8jP6 $@RP$@uDEu Ej@P@E@@$ E$PU$P@$HJA@$HJA@L@BEEE]ÐU]ZU7ڋ @E@UPUL@E U;PE@tE@Ћ(E EEEU,Pt0UP4UPU8PUЋ<P;EtLU@PEE=_|UDEU8PUЋ<P;EuU8PUЋHPEE@E U;PEEE]U]ZUڋ @EEU,Pt0UP4UPU8PUЋ<P;EtLU@PEE=_|UDEU8PUЋ<P;EuU8PUЋHPEE=^EEt EEEEEE]ÐU]ZUڋ@u"h@@P}ЋPEPBP]ÐU]ZUڋ@;Euo@t@$ @RB @RP$@RPUP(@]ÐU ]ZUgڋ@$@B@@E UPLUP@@B @$@B]ÐU]ZUjj(EEu@jPEU P E@ jPЋEPE@u@jPiE@EPEPEEE]ÐU]ZUڋEuFU;Pu @E@tEj@PjEP]ÐU]ZUڋ@EjEPxEU PE@ E t*jE P jP|E EEUPUP]ÐU]ZUڋEuZE@E@PEPBEU@BE@E@$U;Pu]ÐU]ZUWڋE r E UDuE UDtEjj(_EEuHjPE UB EUPEUPE@E@EU@ BE@E@E@ E@$jEPOEEE]ÐU]ZUGEEE@tE@EEE@uEPEPEE]ÐU]ZUڋE EjEP EEuLjPEE;E }"EEUU@BE@EE;E |ދUU BUU BEPEPEEuPjP&E@EEE]ÐU]ZUڋTEPRA PM jj]ÐU ]ZUjEP EE]ÐU ]ZUWڋE PEPEE]ÐU]ZUjEP]ÐU]ZUڋEEE EEPE@@PBPbEE]ÐU@<ZDkEEDžPDžLjE P EE@X\PRj@PjjPE PVHP t%jHP^jHPN"XdPR%jP^jEPeEE6E@t4EjP9UD~tEj.PthEjjPE PREP=ujEP:XPEPPup%=tjEP3(EUjj#TTuTUPTPPTPE@EjEP/EEjEPEuQEjPLLu=PTEE;E}0ULT T@TE@EE;E|ЋljjPjEPLPL@PULD@EE;E}+uLULDPE@EE;E|jLP&Et;P@E싅P@TjPPb&ETPEjE P>&EEPtKPTT@PTj@PjTPPujLP%jE P%jEP%EE@<ÐU]uZUڋt@pt@tHBxtHRЋBEEtnuxtHRЋFBEj@P$jEP$xtHRЋBEEuxtHRjBP$t@tQxtHRЋBu-xtHRЋBj@PAxtHRjBP?t@xj@P#x@t@|@@@@t@l@]uÐU]uZU츴ڋt|@;Bt@=v0XPR jPXEm|@|Bx|PPAPЋxPx@u.XdPRjPXEE xtHRЋEPREEu EPjEP EEjEP!xtHRЋBEEu E6E@EuxtHRЋFBjEPw!PjEP EE\PjEP EEX\PRj@PjjPEPVEPt!jEPrVjEP$XdPRjP>VExtHRBxtHRЋFBxtHRЋFBxtHRЋFB xtHRЋFBt@t@B@UPh@EPjPEE]uÐU]uZUڋt@uEn@u@j@Pj@P*xt@HRЋBEE&UPjBPQ EEuxt@HRЋFBj@PVE@B@h@EPjP^jEP{uxt@HRЋFBEj@PjEPxt@HRЋBEEEt@tHBxtHRjBPj@P6xtHRЋRPxtHRЋR PxtHRЋRPEE]uÐU4]ZUܸEEEE EE@iu EEE@ȋB@t%E@EE@ȋB@uۋEEE@E@Ћ DusE@%u7E@hu+j@$PEEUDEEE@EE@tE@Ћ DtE+EU‰EEj@PQEEu/XdPR0jPPE>EEEE;EsiE@%u:E@hu.EPB$PEPK EEEEEE@UBE@EE@EE;ErUB"EPEPEP UUBE@tx$LP@EBEAUЈBLU+U@ ‰A @$@B @PU+UPPEEE]ÐU]ZUEEEEEjE EE EE EE EzEEnEEbE@UDЉENE@Ea}EHwҸFUDUEHw^UDUEuEEE@EE@EEEEE]?O_o{?O_o{U$]ZUวڋEtEE @PBPEE j@PEEEEu0PRjPjMEOUPEEEE EE HE EEEE@\E E@xuxE |pE@Ћ D%tQE@Ћ D%t2jEPKUBE@EEEE E )E@EE HE E@UBE@EE@EE@UBE@EE@EE EE HE EEEUBEE]ÐU]ZUE@tj@PEEPE PEP EE]ÐU]ZUGڋ@@E j@PEUPEE@u/PRxjPKEEE;E EE@\E UH;t{EE@,tKEE@:tPR0jPHEUP@BEEt UBE@E􋓐M+HB+PEPEPT ;E t,PRjP&HEUPEE]ÐU ]EE@tRE@:u E@:uE@EE~)E@/uEE@EE@uEEE]ÐU]ZUjj,6 EEUPEEEUP EUPEUPE@(E@$EEEUP EUPEUPE@E@EEE]ÐU]E @EEU @BEUHB;t E@U PE U@BE @U ;PuE @UPE @UPEU PE UP]ÐU]E @EEU @BEUHB;t E@U PE U@BE @U ;PuE @UPE @UPEU PE UP]ÐU ]ZU7ڋE@EEEEU;tdEEUE@ PE PBЃEEu EE^E} E@E E@EEEEU;ujj EEU P EEEUPEUPEUPEU;tUE@ PE PBЃ} EUP EUPE@E@@UE@@R;PE@@@EE@u5E@@E@E@@@E@@EZE@U;PuE@EEPEPE@@E@@@E@@PEPyE@@@EE@u6E@@E@E@@@E@@E[E@U;PuE@EEPEPE@@E@@@E@@PEP9E@@}E@@EE]ÐU]ZUWڋE@EEU;tYUE@ PE PBЃEEuEE7E} E@E E@EEEEU;uEE]ÐU]ZUڋEU ;Eu*U EPB PEЃEEt EEU jEPEPEPBPEP~EEt EEEu(U EPB PEЃEEt EEmU jEPEPEPBPEPEEtEE7Eu(U EPB PEЃEEt EE EE]ÐU ]E @EEU;t-EUHB;tE@EEUHB;uFE @EEU ;PuEE E@EEU ;PtEU;u EEEEE]ÐU]ZUڋEU ;tUU EPBPEP U EPBPEP EtE j@ PEЃjE P ]ÐU]ZUGڋUE PBPEP; jEP ]ÐU ]ZUڋE @ EE UHB;tE UHB;u E EE PEPEEUHB;u E@E E@EEEE@EEUPEU;uEUP+E@U;PuE@UP E@UPE@uEPEPE;E tqE U@BE U@BE U@BE U@BE @UPE @UPE @U ;PuE @UP E @UPjE P1EEE]ÐU ]ZUWڋE @VEU ;EE @U ;P E @@EE@u6E@E @@E @PEPoE @@EE@@u&E@@uE@E @E E@@u3E@@E@EPEPE @@EE @U@BE @@E@@E @PEPEE E @@EE@u6E@E @@E @PEPE @@EE@@u)E@@uE@E @E E@@u3E@@E@EPEPE @@EE @U@BE @@E@@E @PEP2EE E @uEU ;E @]ÐU]ZUڋEu!PR,PjjEPEEu!PRPjEEE]ÐU]ZUڋEtE u!PRPj1+u U;v!PRRPjE EE jE P/EEu!PRPjEEE]ÐU]ZU7ڋE u!PRPjYEtE PEPyEjE PuEEEEu!PRNPjEEE]ÐU]ZUwڋE tEu!PRPj+uU ;v!PRPj_EE EEtEPEPuEjEPqEEEEu!PRJPjEEE]ÐU]ZUwEEtEjEPMEEj@PsEEPEPEPD UUBEEE]ÐU]ZUEEtSjEPEE;E vE EEj@PEEPEPEP UUBEEE]ÐU]ZUGڍEEEPE PEP EEu!PRPjLEEE]ÐU]ZUǸڋEPE PEP EEu!PR%PjEEE]ÐU]ZUWڋEtjEP]ÐU ]ZUjjEPE PEPj@EE]ÐU ]ZUǷڋEtE@EEEE@EEEEt1Et EEEEPjEP EBE t,EtEEEEPE PE EE]ÐU]ZUE&E:E.E"E HwUDU⋃jjP@PREPEPEE]#/f;U]ZU7EEPhR j#PEEt UBjPEEvhEDЋ DtDEHEM Ev$EDЋ DuE􋓘E@ȋB@t%E@E􋓘E@ȋB@uۋEEE]ÐU]EEEE@tKE@EEU@;BuE@E@E@U@BE@@EEE]ÐU ]EEE EEt#EUPEU@BE@E@E@]ÐU]EEE EE@EE@UPEU@BEUP]ÐU]EEE EE@EE@u EUP E@UPEU@BEUP]ÐU ]EEE EE@;Eu$E@;EuE@E@qE@;EuEU@BUE@RPFE@;EuEU@BE@@ UE@RPUE@RP]ÐU ]EEEE EE;EsUBE@EE;Er]ÐU ]ZUWEE@EEE E%EU PEEE@;E uEEU@ t8EU@ PEPzuE@EEU@ uȋEU@ u_EE;E}$EMU@;uE@EE;E|܋E;Eu#E;Eu4EMU@E@EEEEEUPEEE]ÐU ]ZUװjjEPE PEPjEE]ÐU,ZڋEEE u)E@E@E u E@U EP EUPE@EEEE @E;Es}E@EEE@EtLEUfBEEE;Es1E@EEE@EuE;EE@EEE@EE\u[E@EEE@EuE\EHEE @UfBEEEUfBEEE;Es5E@EEE@EMUfBE %tEPP/EEPP EEÐU]ZUڋEEE@{u-E@}u!E@uE PEPEpj{EPUEEtDjjEPE PEPEPNu EE.j{EPEEuE PEP&EE]ÐU<Z!ڍEE EE;Et(E@UfBEEEEE;EuظUfBEEEEEEEE@E@[u_EEEEE@]t-E@t!EEE@]t E@uߋE@uEE:E@{u E@E"E@}uEu"EHEEEE@EEu E@u(EPPЋEPE+EEEEEE;EEEEEE@]t-E@t!EEE@]t E@uߋE@uEEE@EtEt EHE`EtE@,uGEEE;Es(E@UfBEEEEE;Er؋EEE@fUfBEEEEtRE@fUfBEEEEuEPPЋEPEE;6E@{},[6܃{}ȋEEE;EE@EEÐU8]ZU̸WڋE@~uE@ %u EEEPE PEEEE EE;EsUE@tIE@/t=E@UBEEE@EE;EsE@t E@/uøUBE @uNjP@EEu/-jPEEu EE%E@E.jE PEEu EEE@EE EE;Es>E@t2E@UfBE@EEEE;Es E@u΋E;EE@fEEUfBEEEEEEEE܋E܃tEE;Es=E@fEE֋UfBE։E؋EEEEE؉EЋEЃuUfBE EE]ÐU]EEEEHEEEEtdEPE @+ЉUE @E Et@E@EEEEEEuEEEHEEEEuEEE]ÐU ]ZUgڋE@EE @Ej:EPEEt E@]t EE+EE苃EE@tGUEPBPEP uE@E@uEEE@uE@u E_:UfBEEU+Ћ¹UfBEEE UPUEHBUHBEE]ÐU4Z jjE PhPEPsEE @E썅EE@EEEEE@EE!u EEE@tEj]Pu+[UfBEEE!u EEX[UfBEEE!u!UfBEEE@EEEE[E@:u{EPEP:EEt)E@EEEE[u E@:tEuE @ uEE]uE%UfBEEE@-uHE@EE]t6-UfBEEE%UfBEEEEE@EEEE]E P ʀE P ]UfBEEE P ʀE P ?UfBEEE P ʀE P U荅;tE@=*t*UfBEE@E%UfBEE&E?}*tՐ?[[BE@EEEEUfBE PEPP EEt EEE @;Eu1E @ tE PEPEXEME @ u5U E HBu E P+U싃jjPjRP8EEÐU ]ZUڋUE @PBPDEE]ÐU ZQڋE@u E.EPE PEPEPPEPPEEÐUXZ\џDž`E@UfBE PlPEP, t E@E @ E@/E%=@t:E%=ueE PlPEPD uIE%=@u:E;EvE/UfBEEUfBE @U @BE PEPEvEdEhh@h@/h@%t Dž`d;Ev Eh@dfBhhddh@th@/t`uedEhEE@/uCE;Ev EsE@UfBEEEEE@/t:jE PEPhPEPEPEPEPE PEP*(E EXÐU8ZڋE;EvEUfB@E(PEPEEu|E(@tehPEP t EEU(@PPBЃuE(@ t E EEjEPEEE@.uE@.tEE;E@ffB@tm;Esb@ffB@u;ErfBEE PEPEP uUfBEE(PE$PE PEPPE PEPEEtjEPQEE;jEP$EEEÐU0]ZUԸڋE U @BEE @tU EPBPSEjEPMEEEEu5E @tE j@P0E @ExE @uTE @~IE PEEE @EEHEE|"EEE@EHEE}ދE UPEEE@fEދEEEfEE܃t%E@fEڋEEEfEE؃uۋE+EEjEP0EEt]EPEPEPy tjEPEcE E܋E܋@E؋E؋U@BE PU؋EM E U HJEEu E EE܉EE]ÐU(]ZUܸǗڋE ;EE @fEE E jE ;Eu EEPE PEP tEE@EEEEEEuEVE@EEEEEEuE&EE@fEEEEEEEEu EE @%=!EEt E E E @fEE%EE E EEE=]E%=:uEE @%EE s%M䋓EjPDЃtEE E E @%=-u-UE;UE @;EE E UE;uEE @fEE%EE E EEE=]$E;Eu EnE@EEEEEEU;t E^:E%=?}=*}믐=?=[딋E ;E9E@EE]ÐU ]ZU丷ڋE@UEHBEE@EEEEHEEEEt@E@tEj@PEEEEEHEEEEuEj@PĹE@]ÐU ZڋE@u.*hPEP t EjPREEÐU ZAhPEP! t EE PPȺEEÐU ZhPEP t EE PPEEÐU ]E@;E u EE/E@fEEEEfEEuEE]ÐU]EEEHEEEEt_E@EEU BEEEEE @E EEEu E$EEEHEEEEuEE]ÐU,]ZUGڋE EEtE @/u E9E @u E EEEE @u EE @/uEt EE @.u8Et-E ;EtEtE @/uEE @E xE@EE*uE@EE@EE*tE @.u7Et,E ;EtEtE @/u EEuSEt%IAFNKT&REJBGOL"3^`_Z\/#,-]('456789:;<=$[7RR"(,1 R 3<>7 7"R(R,7 V!04&VMNV&!!!! !!,L,,,,,!+!-=:,$&'=,===.=::!:::,(,,)=,=RNT,):)!)oPE+"<gx|tGXUsO:!SQ!:!:!:!!     !    !    !    !    !    !    !    !    !!    !    !!    !:!    !                    &'."$G^<L()/<Gu <C+vBC2* pqW5|!8HwIJADENPRMYHTOQCSUZX[GgL<}opc_eq0CP2H1~a\KFVm;]kf@`HMxdbPPMM  .. ...........!().. *CCCCCCCCCC CCCCCCHHHHHHHHHH HHHHHHuPPvPPPPPPPPwPPPPPPMMMMMMMMMM MMMMMM     +) * +l"  () *)))))))))))))************* ++ +++++++++++! WZ,If;Yv-524   !"  6@"'TX#(%hi,-.#=%yz{jn>?rst603914:7   !"#$$%$&'($)*+,-./0$ 1 234567899:99;<=>99?@AB99999</765.: 01 2////43:**********://7:*****://:::   : /759/" !--//////%**********/8/7/////++/  ""/////%%*'**********/////// //////&&&%%%%%%%********(*)////////&&&%%%%%%%%%%%%%********/////////&%%%%%%%%%%%%%%%%********////###%%%%%%%%%%%%%%%%%%%%%******/////####%%%%%%%%%%%%%%%%%%%%%%%%%******,/+$$$$%%%%%%%%%%%%%%%%%%%%%%****////$$$$%%%%%%%%%%%%%%%%%%%%***///%%%%%%%%%%%%%%%%%%**/////%%%%%%%%*///%%%%%%/////%%%%%######ACHcr$TV}  Q QFQQ Q QQ ! /G&1 D Q 10Q Qw QlQpQ byQ  Q,<by un ` m w.` 9D A 6 * . ' ) Q"  no  5 2 QQW  QQ $ C _g2J?c M'~ Z ; < F A     NOS  sRv` /E7GPX[mfv~:Qy.a23r/PZY<&':,\7Baez ~m1IT#~+QjeQQ8QNxD~D/#  BNMYr|O~ZA)5K i H 1;7N_9s  QPQs'v{} K 2  4 <ktbQY2^ $ H l 2 [ a:   c  QGQKQ w  +/ 9 R u=Z Q 2 V t | QMQG xz Q b QQ  ?' A Q   / ? O U e u      % + 1 8 > D J Q Y _ e k r z "(0@,"g/~"g4,0 ~48/J02[8@@K D2 FHHJDX|F-VK| +++++++++--MM-MXt{rr-t-555555555TTTTTTTTr>>>>}>{>UUUUUUUU>> >} V7777 eeeeeeVWK7WWWWWWWW HV 7YYYFYY Y________\\YY\\ cccccccc\_\dddddddd 8 ##############m#mmmu7######*****%*** %uuu***.uuC .........C.??5????????O4OOO)OOO)ABOOO[[[[B[[[**[[[^^^^*^^9^9A^^^````````8`````p8p``````hhhhhhhhh<shhhhh<++uhhhhhh+0us%#=---=>>DVWDVWXXtXtYY&Y&&&&&&&&333333'x'''''''',,,,,,,,[[x([((((((((22222222000000005055555555NNNNNNKKKKKKKKMMMMMMMMQQQQQQQQfPfPPPPPPPPUUUUUUUSSSSSSSSSZZZZZZZZTlTTTTTTTT^^^^^^^^^''l````````aaaaaacnccccccccvnv~~~~~~~~wwwwwwwww{{{{{{{{;;kk$$$$$$$$$$$$$$$$$$$$...........1111111111111111111111444444444444444444444EEEEEEEEEEFFFFFFFFFFGGGGGGGGGGLLLLLLLLLLLLLLL}LLLLLLOOOOOOOOO|rqOOOOOOOOOOO\\\\\\\\\\\________________k j+M______bbbbbbbbbi"< bbbbb+Mhe"<dRbbbbbbyyyyyyyyyJIyzzzzzzzzzH@?;z>>II:76#6"6! ?? ?                             (((((((())))))))*********.z......////////yxw1.111111112v22222222qpon l        3k3333339j99999999TTTTTTf  b        CCCCCCCCDDDDDDDDEEEEEEEEa ]ZRQPNILLLLLLLLPBPPPPPP;,6,,,,,,,,LRRRRRRRR3PSSSSSSSS1)('&%,-$--------!XXXXXXXXYYYYYYYY -@@@@@@@@@XYZZZZZZZZ\\\\\\\\@AAAAAAAAAZ]]]]]]\ABBBBBBBBB]BNNNNNNNNNNOOOOOOOOOO________________````````````````aaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbcccccccddddddddddddddddeeeeeeeeefffffffgggggggggghhhiiiiiiiiiijjjjjjjjjjllllllllllmmmmmmmmmmmmmmmmnnnnnnnnnnnnnnoooooooooooooooopppppppppppppppqqqqqqqqrrrrrrrrrrsssttttuuuuuuuuuuvvvvvvvvvvvvvvvvwwwxxxxyyyzzz{{{||||}}}~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^__``aabb^c^^^^de^^f^gch^^^ ######cc^d ###^^^icj^j^j^d^kl^l^l^mnnn^^cc^^o^p^e^qeffgrcch````st##########c^c^^^^^^oc`ccc^^^^iuccjj^^^p^kll^^lln^nn^^ov^^qq^ccc`w^x^h###########c^^^^^occcc^c^vccccccyzz{z|^^###########c^^^^^occccccc^}}}~^^^^^########c^^^occcccccc^^^^^.^11^1########c^^occcccc^$^LL^L^^^^^^4\^__^_##^^####^^^^c^^occcccccc^^O^^^^^^b^######c^^occccccc^^^^^^^^^^^^####^^^^^^ooccccccc^^^^^^^^^^^^^^###^oc^ccc^^^^^^^^^^^^##^^o^^ccccc^^^^^^99^^#occc^^^^^^ccccc^^^^^^cccccc^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^   !!!"####$%#&'()#####*++++++,-O4i.54iWO56k76ti7JKLX/0O|1:;}<2o#3#<O##:;Y<s<=<JKL8OM8<=]]s]]>ccccccccWOO]>u?WMdddddesN^bbbbbbbbOvwxOSsyz@AAAAAAAAAAAAAAAAA?aUUUUUUUUUUUUUUUUOsNOUUUUUUUUs@AAAAAAAAAAAAAAAAAC?ODEF^OO^OG^OWHC?~YDEFVVV VV GV]]VV]]OOOSHS]TO UUUUUUUU_S````````a^S bbbbbUUUUUUUUO'bbbbbbNON^NNNNNhhhhhhhhaNhhhhhiiiijiiiiiiiiiiiOibbbbbbNNNNNNNNNNiiiiiiii^iiiiiOOOiu~saNNNNNNrsNNNNNN vwOOxNNNSy]Cz]O T]UUUUUUUUOOu]]>D^^^^^^^^{SSB^^^^^^^^NNNNNNNOO^SONNNZZZZtZZZZZZ\ANN\NNh~\is\\NfOgalSOmO,NN/NN^^N&!!!!!!!!&'(&&&&&O>******S......../////0O^n--------^EFGEEEEE,oONOpOOv,O,OOQZRRRRRRRR]]]]]^QwSSSSSSSS55555555^OOQZTTTTTURR\\\\\\\\&XXXXXX$^,[[[[[[[[O#PPPPPPPPfO"^gQRRRRRR55Q,RRRRRRRRccccccccQlRRRRRRRRUZ?SmUOZ^nOOZo^O********++++++++,O-----wxxxxxx------123111114OGG55555555555Z^~SO~^OOLMNLLLLLOPPPPPPPPPPPXXXXXXXX,YYYYYYYYZ^[[[[[OKO[[[[[[_`a_____bOccccc^Occccccwxxxxxxxx !OwyyyyyyyyO~Owzzzzz{xx^O~~K^Z~S *L<<!  OO==QwxxxxxxxxOK        OwxxxxxxxxO~rqkO~I~^JIJjedK^~@?^=^^^?S<;:98OK^7^6^^$^^^^ gO()))))))) aOg/00000000SO~~/11111111/2222230099999999:::::;^88888888Og))))))))_O~S~S))))))))@AB@@@@@O*++++++CDECCCCC*++++++++/O00000000/00000000O*,,,,,,,,/000000~HHHHHHHHQQQQQQgO*N-----.++QQQQQQQQRRRRRRRRSSSSSTQQgO~66666666~[77777777SQPO88888XYZXXXXXLMMMMMM888888*++++++++OQQQQQQQQOQQQQQQQQ~qponmO*l++++++++ig[[[[[[[[[XXXXXXXXQPO^^^OL^MMMMMMMMO^^^^^^^O\\\\\][[[[[[[[[[OL^NNNNNNNN^^^^^^O[[[[[[^O^^^^^^^^^^OL^OOOOOPMM^^^^O^^^^^^^^^^^^^^^^^^^^OL^MMMMMMMM^^^^^^^^^^^^^^^^^^^^^^^^^OL^MMMMMMMM^^^^^^^^^^^^^^^^^^^^^^^^^O9999999999999999BBBBBBBBBBBBBBBBIIIIIIIIIIIIIIIIN^^^^^^^NNN^^NNNRRRRRRRRRRRRRRRRV^^^^V^^VVVV^VVVZ^^^^^^^ZZZ^^ZZZ\^^\\^\^\\\^^\\\ff^^^f^^^^^^^^^^^^^^^^^^^^^^^^^^^^^]^^]]^]^]]]^^]]]^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  ^^^ ""^^^"##^^^#%%%^^^%))))^^^)HH^^^HII^^^IJJ^^^JVVV^^^VWWWW^^^W||^^^|}}^^^}^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^%%%%%%%%%%%%%%%%44^^^45^55^^^5FF^^^FG^G^^^^GVVVVVVVVVVVVVVVV ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^visudosudoers/usr/local/share/locale/usr/local/etc/sudoersVcf:sq%s version %s 1.8.2%s grammar version %d you do not exist in the %s databasepasswd%spress return to edit %s: unable to stat %s%s.tmpwrite error+%d unable to stat temporary file (%s), %s unchangedzero length temporary file (%s), %s unchangededitor (%s) failed, %s unchanged%s unchangedr+unable to re-open temporary file (%s), %s unchanged.unabled to parse temporary file (%s), unknown errorinternal error, unable to find %s in list!unable to set (uid, gid) of %s to (%d, %d)unable to change mode of %s to 0%o%s and %s not on the same file system, using mv to rename/usr/bin/mvcommand failed: '%s %s %s', %s unchangederror renaming %s, %s unchangedWhat now? Options are: (e)dit sudoers file again e(x)it without saving changes to sudoers file (Q)uit and save changes to sudoers file (DANGER!) unable to execute %sunable to run %s-stdinrunable to open %sfailed to parse %s file, unknown errorparse error in %s near line %d parse error in %s %s: parsed OK %s: wrong owner (uid, gid) should be (%d, %d) %s: bad permissions, should be mode 0%o %s busy, try again laterVISUALEDITORPATHspecified editor (%s) doesn't existunable to stat editor (%s):no editor found (editor path = %s)localhostError: cycle in %s_Alias `%s'Warning: cycle in %s_Alias `%s'Error: %s_Alias `%s' referenced but not definedWarning: %s_Alias `%s' referenced but not definedHostCmndUserRunasUnknownErrorWarning%s: unused %s_Alias %s exiting due to signal: usage: %s [-chqsV] [-f sudoers] %s - safely edit the sudoers file Options: -c check-only mode -f sudoers specify sudoers file location -h display help message and exit -q less verbose (quiet) syntax error messages -s strict syntax checking -V display version information and exitsudoers%s: %s%s/%s./%ssudo: sudoersAlias `%s' already definedsudoers%s %s Available options in a sudoers ``Defaults'' line: %s: %s %s: %.*s unknown defaults entry `%s'value `%s' is invalid for option `%s'no value specified for `%s'values for `%s' must start with a '/'option `%s' does not take a value%{seq}/var/log/sudo-ioCauthnoticealertanyallroot*** SECURITY information for %h ***Sorry, try again./var/db/sudoPassword:/usr/sbin/sendmail-t/usr/bin/vidaemonuserlocal0local1local2local3local4local5local6local7critdebugemergerrinfowarningneveroncealwayssyslogSyslog facility if syslog is being used for logging: %ssyslog_goodpriSyslog priority to use when user authenticates successfully: %ssyslog_badpriSyslog priority to use when user authenticates unsuccessfully: %slong_otp_promptPut OTP prompt on its own lineignore_dotIgnore '.' in $PATHmail_alwaysAlways send mail when sudo is runmail_badpassSend mail if user authentication failsmail_no_userSend mail if the user is not in sudoersmail_no_hostSend mail if the user is not in sudoers for this hostmail_no_permsSend mail if the user is not allowed to run a commandtty_ticketsUse a separate timestamp for each user/tty combolectureLecture user the first time they run sudolecture_fileFile containing the sudo lecture: %sauthenticateRequire users to authenticate by defaultroot_sudoRoot may run sudolog_hostLog the hostname in the (non-syslog) log filelog_yearLog the year in the (non-syslog) log fileshell_noargsIf sudo is invoked with no arguments, start a shellset_homeSet $HOME to the target user when starting a shell with -salways_set_homeAlways set $HOME to the target user's home directorypath_infoAllow some information gathering to give useful error messagesfqdnRequire fully-qualified hostnames in the sudoers fileinsultsInsult the user when they enter an incorrect passwordrequirettyOnly allow the user to run sudo if they have a ttyenv_editorVisudo will honor the EDITOR environment variablerootpwPrompt for root's password, not the users'srunaspwPrompt for the runas_default user's password, not the users'stargetpwPrompt for the target user's password, not the users'suse_loginclassApply defaults in the target user's login class if there is oneset_lognameSet the LOGNAME and USER environment variablesstay_setuidOnly set the effective uid to the target user, not the real uidpreserve_groupsDon't initialize the group vector to that of the target userloglinelenLength at which to wrap log file lines (0 for no wrap): %dtimestamp_timeoutAuthentication timestamp timeout: %.1f minutespasswd_timeoutPassword prompt timeout: %.1f minutespasswd_triesNumber of tries to enter a password: %dumaskUmask to use or 0777 to use user's: 0%ologfilePath to log file: %smailerpathPath to mail program: %smailerflagsFlags for mail program: %smailtoAddress to send mail to: %smailfromAddress to send mail from: %smailsubSubject line for mail messages: %sbadpass_messageIncorrect password message: %stimestampdirPath to authentication timestamp dir: %stimestampownerOwner of the authentication timestamp dir: %sexempt_groupUsers in this group are exempt from password and PATH requirements: %spasspromptDefault password prompt: %spassprompt_overrideIf set, passprompt will override system prompt in all cases.runas_defaultDefault user to run commands as: %ssecure_pathValue to override user's $PATH with: %seditorPath to the editor for use by visudo: %slistpwWhen to require a password for 'list' pseudocommand: %sverifypwWhen to require a password for 'verify' pseudocommand: %snoexecPreload the dummy exec functions contained in 'noexec_file'noexec_fileFile containing dummy exec functions: %signore_local_sudoersIf LDAP directory is up, do we ignore local sudoers fileclosefromFile descriptors >= %d will be closed before executing a commandclosefrom_overrideIf set, users may override the value of `closefrom' with the -C optionsetenvAllow users to set arbitrary environment variablesenv_resetReset the environment to a default set of variablesenv_checkEnvironment variables to check for sanity:env_deleteEnvironment variables to remove:env_keepEnvironment variables to preserve:roleSELinux role to use in the new security context: %stypeSELinux type to use in the new security context: %senv_filePath to the sudo-specific environment file: %ssudoers_localeLocale to use while parsing sudoers: %svisiblepwAllow sudo to prompt for a password even if it would be visisblepwfeedbackProvide visual feedback at the password prompt when there is user inputfast_globUse faster globbing that is less accurate but does not access the filesystemumask_overrideThe umask specified in sudoers will override the user's, even if it is more permissivelog_inputLog user's input for the command being runlog_outputLog the output of the command being runcompress_ioCompress I/O logs using zlibuse_ptyAlways run commands in a pseudo-ttygroup_pluginPlugin for non-Unix group supportiolog_dirDirectory in which to store input/output logsiolog_fileFile in which to store the input/output logset_utmpAdd an entry to the utmp/utmpx file when allocating a ptyutmp_runasSet the user in utmp to the runas user, not the invoking user<*> sudoers>>> %s: %s near line %d <<<syntax erroryacc stack overflow""sudoedit\?*[]/bin/shsudoersunable to cache uid %u (%s), already existsunable to cache uid %u, already existsunable to cache user %s, already exists*/unable to cache gid %u (%s), already existsunable to cache gid %u, already existsunable to cache group %s, already existsunable to parse group list for %sunable to cache group list for %s, already exists, DEFVAR = += -= BEGINSTR WORD(2) ENDSTR ERROR USERGROUP NETGROUP WORD(4) BACKSLASH STRBODY QUOTEDCHAR ARG INCLUDE INCLUDEDIR DEFAULTS_USER DEFAULTS_RUNAS DEFAULTS_HOST DEFAULTS_CMND DEFAULTS HOSTALIAS CMNDALIAS USERALIAS RUNASALIAS NOPASSWD PASSWD NOEXEC EXEC SETENV NOSETENV LOG_OUTPUT NOLOG_OUTPUT LOG_INPUT NOLOG_INPUT NTWKADDR ALL ALIAS COMMAND WORD(5) ( ) : ! # fatal flex scanner internal error--no action foundfatal flex scanner internal error--end of buffer missedfatal error - scanner input buffer overflowinput in flex scanner failedout of dynamic memory in yy_create_buffer()out of dynamic memory in yy_scan_buffer()out of dynamic memory in yy_scan_bytes()bad buffer in yy_scan_bytes()%s sudoers%s: %sunable to allocate memory%s/%stoo many levels of includessudoersunable to allocate memoryfill_args: buffer overflowsudointernal error, tried to emalloc(0)unable to allocate memoryinternal error, tried to emalloc2(0)internal error, emalloc2() overflowinternal error, tried to erealloc(0)internal error, tried to erealloc3(0)internal error, erealloc3() overflowHOMEalnumalphablankcntrldigitgraphlowerprintpunctspaceupperxdigitupper:]lower:]alnumalphablankcntrldigitgraphlowerprintpunctspaceupperxdigitsudo.KKKKKLL.L>LNL^LnL~LLLLLLLLLMM.M>MNM^MnM~MMMMMMMMMNN.N>NNN^NnN~NNNNNNNNN,N0N?  0$ 0, 0 4 < p x      90 8 L P X ` h l  p x       NONOMMN^OMNNFpD N8"BMnOƴ H"A\"`"l"p"~OOOOOOONOOPPA.Px"A>P"""ANP"##^P0nPA~P #8#AP`#PA@PP##::::::ATTAAPx(NN######A$A$$$$0$<$H$T$`$Al$t$$$$$$$$$$$%%%$%,%4%@%L%\%h%x%%%%%%%%%%%PAB%%0&\&P|&P&&' '$','P4'P'FQBB BBX't'|'::'''''$(H(p((Q.Q>QNQB^QnQ(:~QQ()0)L;;QQQQQQQRR.R>RNR^R'5 ȡ DDL( S `| ```C`olo?oXPHHo`o``>)Q`~$hx 0Xh( 0@:\l,8dt8DDP DT,lx0@hp,8X`0@8Dlt `: :(0lxH\ ,Xd0<l|HT  D P x      !!@!L!x!!!!P    (08` @HPX\X dlt|lh l |ll h |(Q(Q(Q(Q(Q(Q(R)R)(R)8R)HR )XR8)Q@)QH)QP)QX)Q`)Qh)Rp)Rx)(R)8R)HR)XR)| L(?p@C H PH K pR ȡ).L0;;; !"#N l0:p0MSx0 ^jL0u;~S( }R }f r 0i n gt XP ^l Pbn 0h v #@fb +| 0q 9ps P@t \{ i`~j u;j0~w~( u;jL0~( u;jL0~ u;jL0~  u?jL0~;$ , 0 Тp p 4 < 4p  x    % (+ 1@ A (G Q [ f@ r } $p  0 0 8 L P X ` h l  p x $        u;j0~ ; "" "%  1d <  I V0 b8"hH"u;j:~;qF yS  @S s P \"`" l"p" @>  1 Ey UU uAjL0~;mF v, 0N  x"U "","("(##,  H @U  #,8#( `#,U ##$*#2uAjL0~;1 F 8#>#D#J#P#V# \$ b$h$n$$ t0$ z<$ H$ T$ `$ l$T t$ M $ $$$$$ $ #$ $ $ % %%$%,%4% @% #L%*\% 1h%8x% ?%F%M% T% [%b%i%p%w%~%Q `<p =$ 6m %4EO %8@F< 0&,\& F: |&,F4 (&,/&,6' = 'DFT O G Z$'a,'h4'oP'vX'uAj:~T;}W7 t'|''u;j:~;@` `  f f @i u;jL0~;''$''($($H((p(((%u;jL0~;qF uBjL0~;&u;jL0~;-u;jL0~;u;jL0~;:xF A{ Jk PPT Yp| b@I l(r |0O @x 1 GB  Pq Жq    Б u;j:~;o Y ()0)u;jL;~;u;j;~; : xP% 8M, (Q$ L6 p D NM tz KU L0!]  v 9H P B O P N XQ 5 A PDh + xL4 L< .E B] Nf 8On hMv K{ e (L 0  ƴF ; M@  Q A X  L d? " v . ; 0K NR  ` Lw ;k0 B ^ (P M * 0{ P  Q @wy @N P $  L f ) Q1 :J `  S  b (Rj Qr { P  4N P 9`Z @% i T M (N O xM KM Q T N A  P: ? N#AC8RK0 Wp_LfMlBr:{(M po N@? @v ;h0: , ::hM*xO2К  B:\8NhOq o y   MOy @d (xQ ] M_ q N:UpR  .J3f A0uY IHLZ@ kq qNzRDAt0P8 z Ppu Pu Ke 8Ll K* ;! FT L0)M6HO=:`A|AM  M?q >XO`$ LP0; A%AMMSBu0 hQ@: |W :E 8NAv  N7 7 Zl $HP- #x>;NDw? OhNVQ"nNx d 0@ Q)A5k  ND  N n XM (NF*O M-8P6P( uZ N \hLcMi:(HRLNXNB     Mt(O,NNS{ F XL? L! /M4 f RN PG* 0 P`sN ]:gHQok( ; XP(P` hP|P R8QOhOOQe ANAM9/, -J@NGNL Bh u:0N7  ` OzPO B`:(K M NO)%xN1r ;:C$ M\ WP[ aMi@ e `m xAHNg Q ^ @q<  i MMo : : @y \ B`a @C &Kvisudocrti.scrt1.ocrt1.s__get_exit_frame_monitor_ptr__do_exit_code_ptrfsr.strap_tablevalues-Xa.cDdata.dataBbss.bssDrodata.rodatavisudo.c_xmknodusagehelpget_hostnamecheck_syntaxget_editorsetup_signalsedit_sudoersreparse_sudoersinstall_sudoersrun_commandcheck_aliaseswhatnowquitget_argsalias_remove_recursivecheck_aliasprint_unusedvisudo_printfgoodpath.cfind_path.cerror.c_warningalias.c.L114.L115Dpicdata.picdatadefaults.c.L219.L233.L246logfac2strlogpri2str.L307.L367.L391.L417.L478store_syslogfac.L502.L507store_syslogpri.L571store_strstore_intstore_uintstore_floatstore_mode.L736store_liststore_tuplelist_op.L867.L869.L871.L11.L28.L22.L33.L34.L_cseg0.L887.L889.L891.L893.L895.L898.L900.L902.L_cseg1gram.c.L49.L67.L68new_defaultnew_memberadd_defaultsadd_userspecyygrowstack.L611.L1349fnmatch.c_userlist_matches_runaslist_matches_hostlist_matches_cmndlist_matchescommand_args_match.L692.L707.L719.L775command_matches_fnmatchcommand_matches_globcommand_matches_normalcommand_matches_diraddr_matches_ifaddr_matches_if_netmaskpwutil.ccmp_pwuidcmp_pwnammake_pwitem.L57pw_delref_item.L316.L317.L335.L378.L433.L438cmp_grgidmake_gritemmake_grlist_itemgr_delref_item.L911.L954grlist_delref_item.L1244.L1254toke.c.L177.L215.L277.L304.L331.L358.L388.L436.L460.L523.L568.L594.L621.L656.L785parse_include.L856_push_include.L926.L1041.L1070.L1099.L1128.L1147.L1225.L1263.L1282.L1316.L1344.L1371.L1398.L1425.L1452.L1479.L1506.L1533.L1560.L1692.L1873.L1932.L1968.L2142.L2169.L2196.L2275.L2308.L2368.L2422pop_includeyy_get_previous_stateyy_try_NUL_transyy_get_next_buffer.L2614yy_fatal_error.L2641yy_flex_realloc.L2735.L2790yy_flex_alloc.L3039yy_flex_free.L3165.L3216.L3239.L3254pl_compareswitch_dir.L3326.L3327.L3339.L3375.L3589toke_util.chexchar.L103.L104.L320redblack.crotate_leftrotate_rightrbsuccessor_rbdestroyrbrepairalloc.c.L24.L25.L55.L64.L92.L125.L134fileops.cgetgrouplist.czero_bytes.cglob.cglobexp1glob0g_strchrglobexp2globtilde.L455g_strncmpg_charclassglob1globextendglob2g_lstatg_statglob3g_opendirg_Ctocclassmatchrangematch.L499.L503getprogname.ccrtn.s_END__START_errorlinenosudo_getgrgidfstat64futimesatsudo_setpwentvfprintftq_pop_environ.XAKk4DpQ2WgOF1s.yy_meta.XAKk4DpP2WgOFXs.prioritiessudo_setgrent.XAKk4DpQ2WgOF1s.yy_did_buffer_switch_on_eofinet_ptonsudo_endgrentmemcpyfgetsgetprogname.XAKk4DpQ2WgOFps.grlist_cacheyy_scan_string__filbuflseek64_DYNAMIC.XAKk4DpQ2WgOF1s.idepthyysslimereallocstrcmp_exituser_is_exemptlibintl_textdomainalias_addyygindex.XAKk4DpR2WgOFot.sudoerslistsnprintfqsort.XAKk4DpQ2WgOF1s.yy_last_accepting_statefill_txtfwriterbapply_nodesetprogname_lib_versionsudo_defs_tableyycharsudo_goodpathlibintl_bindtextdomain.XAKk4DpR2WgOFot.alias_freelistyy_flush_bufferdump_defaultsinnetgrrenameyydefredgroup_matchesisattyfind_pathisblankgetgrouplistfreadgr_addrefsetlocalesudo_setspentiscntrl.XAKk4DpQ2WgOF1s.yy_initwarningxuserpw_matchesispuncttolower__ctypeeasprintfsudo_freegrcachesudo_userevasprintfisxdigitsudolinenosudo_endpwentfopen64strtodlist_appendsudo_getgrnamwaitpidisalpha.XAKk4DpM2WgO1fp.cclasses.XAKk4DpQ2WgOFps.grcache_bygid.XAKk4DpP2WgOFXs.facilitiessudo_fakepwnam.XAKk4DpQ2WgOF1s.yy_acceptstrtokyytextstrtolchown__fpstartisgraph.XAKk4DpQ2WgOF1s.yy_ecyylval.XAKk4DpQ2WgOFps.pwcache_byuid__fsr_init_valuehtonlyyinyy_switch_to_buffer_end.XAKk4DpQ2WgOFps.pwcache_bynameisspaceinit_parseryycheckunlinkchmodyylenpedanticgettimeofdayyyerrflagcommand_matchestq_remove.XBKk4DpR2WgOlpt.find_path.command___Argvtrace_printyylex.XAKk4DpQ2WgOV7s.arg_size.XAKk4DpM2WgOlcp.cclasses__ctype_maskstrpbrkupdate_defaults.XAKk4DpQ2WgOF1s.yy_startparse_errorclosedirestrdup__1cG__CrunMdo_exit_code6F_v_sudo_freepwcacherpl_globfreefputsrpl_globrbfind.XAKk4DpQ2WgOF1s.yy_nxtlstat64yyparseyyssprbcreatecmnd_matchesuserspecsyyoutsudo_getpwnam__iobsudo_endspentlist2tqlibintl_dgettextyy_create_buffertouchstrerrorisprintyytable.XAKk4DpQ2WgOFps.grcache_byname__longdouble_usedsysconf_finiyyerrorstrcasecmpset_fqdnyylhsgetoptemalloc2init_lexer.XAKk4DpM2WgO1lp.prognameyydgotosigemptysetemalloc.XAKk4DpQ2WgOF1s.yy_current_buffer.XAKk4DpQ2WgOF1s.yy_n_chars.XBKk4DpQ2WgOFjs.netgr_matches.domainalias_freeclosefromyyrestart.XAKk4DpQ2WgOF1s.yy_baseefreegrlist_addreffclose__environ_lock_edata.XAKk4DpQ2WgOF1s.sawspace.XAKk4DpQ2WgOF1s.yy_last_accepting_cposexecv.XBKk4DpM2WgO13p.sudo_parseln.bufalias_findgetgrent.XAKk4DpP2WgOFXs.def_data_lecturecleanup.XAKk4DpQ2WgOV7s.arg_lenyy_delete_bufferalias_comparestrlengrlist_delrefpw_delreftq_appendusergr_matches.XAKk4DpQ2WgOF1s.yy_def__flsbufzero_bytesgetenv_get_exit_frame_monitorstrsignalset_defaultyy_load_buffer_stateisalnum_GLOBAL_OFFSET_TABLE_.XAKk4DpQ2WgOF1s.continuedaddr_matcheslist_pwyy_scan_bytesyystacksizeerealloc3filenoyysindexatoiyydebugsudo_getpwuid.XAKk4DpQ2WgOF1s.yy_chkinit_defaultsgetuidyyvsp.XAKk4DpP2WgOFXs.def_data_verifypwisupperstrrchryylengrewindyy_init_bufferlist_optionsnetgr_matchessudo_fakegrnamno_aliasesinterfaces__fsr.XBKk4DpP2WgOFLs.alias_add.errbufuser_in_groupyyssgroup_plugin_queryyyrindexsudo_parselnerrorfilelockf64open_sudoersrpl_fnmatchislowerutimesstrlcatmemsetmemcmpisdigitinit_envtables.XAKk4DpQ2WgOF1s.yy_hold_charoptind.XAKk4DpQ2WgOFjs.emptyyyval.XBKk4DpP2WgOFXs.init_defaults.firsttimehostname_matchesoptargfork.XAKk4DpQ2WgOF1s.istacksizealias_remove.XAKk4DpQ2WgOF1s.yy_c_buf_palias_seqnogr_delrefinet_addr.XAKk4DpQ2WgOF1s.keepopen.XAKk4DpP2WgOFXs.def_data_listpw_PROCEDURE_LINKAGE_TABLE_errnostrlcpyreaddir64_etextgethostnamelock_fileverbosepw_addreffill_argsfill_cmndyynerrsset_group_list.XAKk4DpQ2WgOF1s.prev_statefdopenrbdeletealias_applyipv6_validinit_aliasesyyvssigactionestrnduperrorxget_group_list.XAKk4DpQ2WgOF1s.istackrbinsertyy_scan_bufferatexit%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMIacomp: Sun C 5.10 SunOS_i386 Patch 142363-01 2009/07/15as: Sun Compiler Common 12.1 SunOS_i386 Patch 141858-03 2009/09/21%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMIacomp: Sun C 5.10 SunOS_i386 Patch 142363-01 2009/07/15as: Sun Compiler Common 12.1 SunOS_i386 Patch 141858-03 2009/09/21%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMIacomp: Sun C 5.10 SunOS_i386 Patch 142363-01 2009/07/15as: Sun Compiler Common 12.1 SunOS_i386 Patch 141858-03 2009/09/21%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMIacomp: Sun C 5.10 SunOS_i386 Patch 142363-01 2009/07/15as: Sun Compiler Common 12.1 SunOS_i386 Patch 141858-03 2009/09/21%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMIacomp: Sun C 5.10 SunOS_i386 Patch 142363-01 2009/07/15as: Sun Compiler Common 12.1 SunOS_i386 Patch 141858-03 2009/09/21%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMIacomp: Sun C 5.10 SunOS_i386 Patch 142363-01 2009/07/15as: Sun Compiler Common 12.1 SunOS_i386 Patch 141858-03 2009/09/21%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMIacomp: Sun C 5.10 SunOS_i386 Patch 142363-01 2009/07/15as: Sun Compiler Common 12.1 SunOS_i386 Patch 141858-03 2009/09/21%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMIacomp: Sun C 5.10 SunOS_i386 Patch 142363-01 2009/07/15as: Sun Compiler Common 12.1 SunOS_i386 Patch 141858-03 2009/09/21%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMIacomp: Sun C 5.10 SunOS_i386 Patch 142363-01 2009/07/15as: Sun Compiler Common 12.1 SunOS_i386 Patch 141858-03 2009/09/21%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMIacomp: Sun C 5.10 SunOS_i386 Patch 142363-01 2009/07/15as: Sun Compiler Common 12.1 SunOS_i386 Patch 141858-03 2009/09/21%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMIacomp: Sun C 5.10 SunOS_i386 Patch 142363-01 2009/07/15as: Sun Compiler Common 12.1 SunOS_i386 Patch 141858-03 2009/09/21%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMIacomp: Sun C 5.10 SunOS_i386 Patch 142363-01 2009/07/15as: Sun Compiler Common 12.1 SunOS_i386 Patch 141858-03 2009/09/21%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMIacomp: Sun C 5.10 SunOS_i386 Patch 142363-01 2009/07/15as: Sun Compiler Common 12.1 SunOS_i386 Patch 141858-03 2009/09/21%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMIacomp: Sun C 5.10 SunOS_i386 Patch 142363-01 2009/07/15as: Sun Compiler Common 12.1 SunOS_i386 Patch 141858-03 2009/09/21%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMIacomp: Sun C 5.10 SunOS_i386 Patch 142363-01 2009/07/15as: Sun Compiler Common 12.1 SunOS_i386 Patch 141858-03 2009/09/21%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMIacomp: Sun C 5.10 SunOS_i386 Patch 142363-01 2009/07/15as: Sun Compiler Common 12.1 SunOS_i386 Patch 141858-03 2009/09/21%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMIacomp: Sun C 5.10 SunOS_i386 Patch 142363-01 2009/07/15as: Sun Compiler Common 12.1 SunOS_i386 Patch 141858-03 2009/09/21%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMIacomp: Sun C 5.10 SunOS_i386 Patch 142363-01 2009/07/15as: Sun Compiler Common 12.1 SunOS_i386 Patch 141858-03 2009/09/21%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMIacomp: Sun C 5.10 SunOS_i386 Patch 142363-01 2009/07/15as: Sun Compiler Common 12.1 SunOS_i386 Patch 141858-03 2009/09/21%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMI%Z%%M% %I% %E% SMIacomp: Sun C 5.10 SunOS_i386 Patch 142363-01 2009/07/15as: Sun Compiler Common 12.1 SunOS_i386 Patch 141858-03 2009/09/21ld: Software Generation Utilities - Solaris Link Editors: 5.11-1.1689M:./visudo.c /var/tmp/sudo-1.8.2/plugins/sudoers /opt/sunstudio12.1/prod/bin/cc -c -I../../include -I../.. -I. -I../.. -I/usr/local/include -L/usr/local/lib -I/usr/local/include -I/usr/local/include -g -D__EXTENSIONS__ -D_PATH_SUDOERS='"/usr/local/etc/sudoers"' -DSUDOERS_UID='0' -DSUDOERS_GID='0' -DSUDOERS_MODE='0440' -DLOCALEDIR='"/usr/local/share/locale"' ./visudo.c -W0,-xp.XAKk4DpR2WgOFot.Xa;g;R=Sun C 5.10 SunOS_i386 Patch 142363-01 2009/07/15;G=.XAKk4DpR2WgOFot.;backend;raw;cd;DBG_GEN 5.2.7mknodSSUUUi_path_mode _devintchar\dunsigned longnmode_tndev_t\U U  sudo_printf_t sudo_printf0 mainSXUUUargcargv sp args editor sudoers_path chU checkonlyU quietU strictU oldpermsU\sudoersfilesprev#next#path#tpath# fdU#modifiedU#doeditU#edit_sudoers X^UU=speditor argsUlinenotfdU modifiedU acU av cpbufElinestrXtvtv1tv2orig_mtimorig_sizenreadsbZg[Zg[Zg[wasblankU<long\X=\@i=?=time_t=suseconds_ttimevaltv_seci#tv_usecv#long longoff_tUssize_t= =unsigned long longino_tnnlink_tunsigneduid_tgid_t=T=timespectv_seci#tv_nsec=#Ttimestruc_t=blksize_tblkcnt_t\== =statst_dev#st_pad1#st_ino#st_mode#st_nlink#st_uid+# st_gid7#$st_rdev#(st_pad2C#,st_size#4st_atim#<st_mtim#Dst_ctim#Lst_blksize#Tst_blocks#Xst_fstype#`st_pad4#preparse_sudoers^LbUU editorargs UstrictUquietsplastfp chUunsigned char __FILE _cntU#_ptr #_base #_flag # _magic # __orientation# __ionolock#  __seekable#  __extendedfd#  __xf_nocheck#  __filler#   FILE  install_sudoersPbeUUf spUoldperms sbce$de$de$de2d_e2d_eavf w =set_fqdn8eeUinit_envtables?eeUuser_is_exemptFeeUUsudo_setspentMffUsudo_endspentTffUgroup_plugin_query[ f2fUUu z userZ groupZ 0 pwZ\u \ passwd$ + pw_name#pw_passwd#pw_uid+#pw_gid7# pw_age#pw_comment#pw_gecos#pw_dir#pw_shell#  + whatnowe@fgU\ choiceUfcUfsetup_signalsg$hU sa Ut ==pid_tvoid sigval sival_intU#sival_ptr #  A__uid+#__value #=clock_t __utimeA#__statusU#__stimeA#! __kill#__cldO#=ctid_t=zoneid_t  __pid #__pdata#__ctid#__zoneid#caddr_t R__addr #__trapnoU#__pc#  v__fdU#__band=#short= =U(= X __faddr#__tstamp#__syscallv# __nsysarg\#__fault\#__sysarg#__mstate#0Uint32_t  G__entity #!t __pad #__proc#__fault#__fileR#__prof#__rctl.#siginfo si_signoU#si_codeU#si_errnoU#__dataG# " U  ! G_handler #_sigaction#X= r__sigbitsG#Xsigset_tU=sigaction sa_flagsU#_funcptr#sa_maskr#sa_resv#sigaction_trun_command0h/iUU|pathargv statusUpid rv check_syntax0ikUUsudoers_pathUquiet UstrictsberrorUopen_sudoersknU pathUdoedit keepopenentryfp \Uget_editor% nqUargs$Editor&EditorArgs&EditorPath&UserEditor&UserEditorArgs&opDopDopPopPopeditor_sbKuser_editor_sbLbaseMuserbaseMget_argsqrU:cmndargsget_hostnamerpsUpthost\=alias_remove_recursiveps6tUUFnameUtype UstrictUquietmFa%errorUKmemberprevF#nextF#name#typev# negatedv#unsigned shortmember_listfirstF#lastF#alias%name#type#seqno#members#check_alias@tuUUnameUtype UstrictUquietmFa%errorUMtutututututufmtcheck_aliasesv{UU UstrictUquiet cs mFbindingFprivusd atypeUerrorUsigned intcmndtagnopasswd#noexec#setenv#log_input#log_output#cmndspec prev #next #runasuserlist#runasgrouplist#cmndF#tags#9cmndspec_list9first #last #privilegeprev#next#hostlist#cmndlist#privilege_listfirst#last#userspec prev#next#users#privileges#defaults zprev #next #var#val# binding#typeU#opU#print_unusedd{w|UU v1c v2c a%eprefixf#cleanupt||U-Ugotsignalsspuquit|}UUsignosignamemyname\usage}}UUfatal$help}V~Uvisudo_printf`~~UUVUmsg_type[fmt  ...ap`fp  \V va_list n xU s }rbnodeleft#right#parent#data # color#%rbcolor&red&blackrbtree,Kcompar#root#nil# alias_freelistK;sudoersfile_listfirst#last# sudoerslistm; list_pwNgroup$gr_name#gr_passwd#gr_gid7#gr_mem# 7group_listgroups#gids.#ngroupsU#ngidsU# 3sudo_userh4!pw#_runas_pw#_runas_gr$#cmnd_stat)# name#path#tty#ttypath#host# shost#$prompt#(cmnd#,cmnd_args#0cmnd_base#4cmnd_safe#8class_name#<krb5_ccname#@group_list#Denv_vars#Hcwd#Liolog_file#PclosefromU#TlinesU#XcolsU#\uid+#`gid+#d sudo_user result? checkdotW@ lenWA^long   unsigned long longino_tpnlink_tunsigneduid_tgid_t  long longoff_ttime_t timespecq tv_sec4# tv_nsec#Atimestruc_tblksize_tblkcnt_t ^     stat st_dev# st_pad1# st_ino# st_mode# st_nlink# st_uid# st_gid#$ st_rdev#( st_pad2 #, st_size(#4 st_atimq#< st_mtimq#D st_ctimq#L st_blksize#T st_blocks#X st_fstype#` st_pad4#p^^sudo_goodpath-^-^7libintl_dgettextj2<^jestrdupovoidefree^errorxWlockf64WWW^truncate64W)off64_ttell64)QWWssize_t_pwrite64QQdpread64QQlseek64)W)Wftruncate64W W^ truncate64W9tell64(SWSpwrite64QQXpread64QQlseek64(W(Wlockf64WWWftruncate64W W^^% size_tstrlcpy/ a  * / ^a strchr f W^ strlen/   strerror Wmkstemps64W Wmkstemp64W mkstemps64W- Wmkstemp64WJ rlim64_t rlimit64 rlim_curJ # rlim_maxJ #Y getrlimit64W W Y  setrlimit64W W rlim_t rlimit! rlim_cur # rlim_max # getrlimit64WJ W!  J setrlimit64Wx WO unsigned charx __FILEk _cntW# _ptr # _base # _flagx # _magicx # __orientation# __ionolock#  __seekable#  __extendedfd#  __xf_nocheck#  __filler#   ftello64) k  fseeko64W  W fsetpos64W   fgetpos64W    FILE tmpfile64 ^- ^7 freopen64 h 2 <  ^h ^r fopen64  m w  ftello64(  fseeko64W  W^ snprintfW fsetpos64W@ fgetpos64Wb  ^b^lfreopen64 gq ^^fopen64 tmpfile64 W^_xmknodWpp^lstat64WG"^Gstat64WpLfstat64WW^fstatat64WWW^   ino64_t  blkcnt64_t ^"   3  stat64V st_dev# st_pad1# st_ino# st_mode# st_nlink# st_uid# st_gid#$ st_rdev#( st_pad2#, st_size)#4 st_atimq#< st_mtimq#D st_ctimq#L st_blksize#T st_blocks#X st_fstype#` st_pad4"#p3fstatat64WWVW^lstat64WV^stat64WVfstat64WWVu  ../../src/error.c /var/tmp/sudo-1.8.2/plugins/sudoers /opt/sunstudio12.1/prod/bin/cc -c -I../../include -I../.. -I. -I../.. -I/usr/local/include -L/usr/local/lib -I/usr/local/include -I/usr/local/include -g -D__EXTENSIONS__ -D_PATH_SUDOERS='"/usr/local/etc/sudoers"' -DSUDOERS_UID='0' -DSUDOERS_GID='0' -DSUDOERS_MODE='0440' -DLOCALEDIR='"/usr/local/share/locale"' ../../src/error.c -W0,-xp.XAKk4DpR2WgOVqt.Xa;g;R=Sun C 5.10 SunOS_i386 Patch 142363-01 2009/07/15;G=.XAKk4DpR2WgOVqt.;backend;raw;cd;DBG_GEN 5.2.7error%Uooeval$fmt$ ...$ap&intcharv~void va_listerrorx0:Uoeval/fmt/ .../ap1vwarning;@`UUZfmt:...: ap<vUwarningxD`UfmtC...C apEv _warningMUouse_errnoLfmtL apLserrnooNv cleanup; ov;vEv libintl_dgettextO} @ Jv}getprogname strerrorO o mkstemps64o O o mkstemp64o O mkstemps64o O o mkstemp64o8 Ounsigned long long 8rlim64_trlimit64rlim_curN#rlim_maxN#] getrlimit64o o ] setrlimit64o o  8rlim_trlimit%rlim_cur#rlim_max# getrlimit64oN o %N setrlimit64o| o S exit ounsigned charunsigned__FILE_cnto#_ptr#_base#_flag# _magic# __orientation# __ionolock#  __seekable#  __extendedfd#  __xf_nocheck#  __filler#  long long off64_t ftello64  fseeko64o   o fsetpos64o"   fgetpos64oI  " FILEItmpfile64Tvlvv freopen64T q { Tvv fopen64T   off_t ftello64  fseeko64o.   o __flsbufoO o O fsetpos64o{  T fgetpos64o  "v fputso v vfprintfo  v v freopen64T0  Tv0 v: fopen64Td 5 ? tmpfile64T^./alias.c /var/tmp/sudo-1.8.2/plugins/sudoers /opt/sunstudio12.1/prod/bin/cc -c -I../../include -I../.. -I. -I../.. -I/usr/local/include -L/usr/local/lib -I/usr/local/include -I/usr/local/include -g -D__EXTENSIONS__ -D_PATH_SUDOERS='"/usr/local/etc/sudoers"' -DSUDOERS_UID='0' -DSUDOERS_GID='0' -DSUDOERS_MODE='0440' -DLOCALEDIR='"/usr/local/share/locale"' -KPIC -DPIC -o .libs/alias.o ./alias.c -W0,-xp.XAKk4DpP2WgOFLs.Xa;g;P;R=Sun C 5.10 SunOS_i386 Patch 142363-01 2009/07/15;G=.XAKk4DpP2WgOFLs.;backend;raw;cd;DBG_GEN 5.2.7alias_compare=&Uv1<v2< a1>a2?res@intvoidcharunsigned shortshortmember@ prev# next# name# type# negated#member_listo first# last#alias name# type# seqno# members@#ooalias_findQ0UDDnamePtypeP keyoRnodeISaDToq rbcolorq red blackrbnode leftI# rightI# parentI# dataN# colorS#alias_addp҆U?nameotypeo membersoerrbufGq?aDrlong Z ?alias_apply1UfuncNcookie NNno_aliases@Ualias_freeUKNvaDmcznextNsudo_commandz cmnd# args#Kalias_removeUDnametype nodeIkeyoinit_aliases U 3rbtree,o compar3# rootq# nilq#8aliaseso4,NNrbdestroyorbcreateorbinsertI'oNrbfindIFoN\NNF rbtraversal preorder inorder postorderrbapply_nodeoI\NarbdeleteNoIunsignedalias_seqno50N  libintl_dgettextO  ! list2tqk NNemallocN efree Nlong longlockf64   truncate64    off64_ttell64 " ssize_t0 pwrite64" e " 5  pread64"  " e  lseek64   ftruncate64   truncate64    off_ttell64 0 0 pwrite64" e " 5  pread64"  " e  lseek64   lockf64  ftruncate64    strcmp0   mkstemps64S mkstemp64p mkstemps64 mkstemp64 unsigned long long rlim64_trlimit64 rlim_cur # rlim_max # getrlimit641   1 setrlimit64_ 6  rlim_trlimit rlim_cur_ # rlim_max_ #l getrlimit64  l  setrlimit64  unsigned char __FILE _cnt# _ptr# _base# _flag # _magic # __orientation# __ionolock#  __seekable#  __extendedfd#  __xf_nocheck#  __filler#   ftello64  fseeko643  3fsetpos64_8 fgetpos64_ FILEtmpfile64freopen64fopen64 ftello64 9fseeko64_ _snprintfd fsetpos64fgetpos64_freopen64#fopen64M(tmpfile64L./defaults.c /var/tmp/sudo-1.8.2/plugins/sudoers /opt/sunstudio12.1/prod/bin/cc -c -I../../include -I../.. -I. -I../.. -I/usr/local/include -L/usr/local/lib -I/usr/local/include -I/usr/local/include -g -D__EXTENSIONS__ -D_PATH_SUDOERS='"/usr/local/etc/sudoers"' -DSUDOERS_UID='0' -DSUDOERS_GID='0' -DSUDOERS_MODE='0440' -DLOCALEDIR='"/usr/local/share/locale"' -KPIC -DPIC -o .libs/defaults.o ./defaults.c -W0,-xp.XAKk4DpP2WgOFXs.Xa;g;P;R=Sun C 5.10 SunOS_i386 Patch 142363-01 2009/07/15;G=.XAKk4DpP2WgOFXs.;backend;raw;cd;DBG_GEN 5.2.7char-intstrmaphname5#num:#longAhfacilitiesp<9 A` h facilities<9AhprioritiesO9 AH hprioritiesO9 def_valuesAsval5#ival:#Phdef_data_lectureA@:   hdef_data_lectureo@:hdef_data_listpw`: ( hdef_data_listpw`: hdef_data_verifypw: (; hdef_data_verifypw*: -` :{ejdoubledef_tupleneveroncealwaysanyallunsigned longmode_t list_membervalue5#next#uflag:#ival:#fval#tuple#str5#mode#list# sudo_defs_typesname5#type:#desc5#values[# callback{#sd_un#u hQsudo_defs_table0dump_defaultsuUcurvitemwdef[xdesc5yulist_options Ucurp5desc5set_default U:Z5var5val :opcurnum:init_defaultsx͚Ufirsttime:y9defzupdate_defaultsКܜU::whatdef rc: !short membertprev#next#name5#type# negated# member_listfirst#last# defaults  prev#next#var5#val5# bindingt#type:#op:#store_int2U: 5val1def1 :op1endp53lh4store_uintF7U: 5valEdefE :opEendp5GlhHstore_floatZ@U:v 5valYdefY :opYendp5[d\store_tuplenןU: 5valmdefm :opmv[ostore_stroU:* 5valdef :opstore_listpU: 5strdef :opstart5end5store_syslogfacˢU: 5valdef :opfac Alogfac2strТ@U_ Z :nfac  -Z store_syslogpri@U: 5valdef :oppri logpri2strU  :npri  - store_mode/U: 5valdef :opendp5lhlist_op 0ۦU,5val8len defEopcur prev tmp unsigned,size_tlist_opsoadddeletefreeall,uid_t,gid_t passwd$)pw_name5#pw_passwd5#pw_uido#pw_gid{# pw_age5#pw_comment5#pw_gecos5#pw_dir5#pw_shell5# tuserlist_matches:\).runaslist_matches:..hostlist_matches:.cmndlist_matches:.init_envtablesvoid !zero_bytes, - -libintl_dgettext5P" -Pestrdup5uUemallocu,!efreeu -!warningx"long longlockf64::: -truncate64:,off64_ttell64,T::ssize_t bpwrite64TTg,pread64TT,lseek64,:,:ftruncate64:: -truncate64:<off_ttell64<b: bpwrite64TTg,pread64TT,lseek64<:<:lockf64: ::ftruncate64:/: -/strrchr5Y4: -Y -cstrncmp:^h, - -strcmp: memcpyuu,mkstemps64:5:mkstemp64:35mkstemps64:V5:mkstemp64:s5unsigned long longsrlim64_t rlimit64rlim_cur#rlim_max#getrlimit64:: setrlimit64:":srlim_t rlimit`rlim_cur"#rlim_max"#/getrlimit64::` /setrlimit64:: -5strtolh: -strtodunsigned char __FILE _cnt:#_ptr$#_base$#_flag# _magic# #__orientation,# #__ionolock,#  #__seekable,#  #__extendedfd,#  #__xf_nocheck,#  #__filler,#  )ftello64,')fseeko64:R': Rfsetpos64:~'Wfgetpos64:'~)FILE $tmpfile64 - -freopen64 - - fopen647)ftello64<X7fseeko64:~': ~fsetpos64:'fgetpos64:'~ - -freopen64 - -fopen64; $tmpfile64 ./gram.c /var/tmp/sudo-1.8.2/plugins/sudoers /opt/sunstudio12.1/prod/bin/cc -c -I../../include -I../.. -I. -I../.. -I/usr/local/include -L/usr/local/lib -I/usr/local/include -I/usr/local/include -g -D__EXTENSIONS__ -D_PATH_SUDOERS='"/usr/local/etc/sudoers"' -DSUDOERS_UID='0' -DSUDOERS_GID='0' -DSUDOERS_MODE='0440' -DLOCALEDIR='"/usr/local/share/locale"' -KPIC -DPIC -o .libs/gram.o ./gram.c -W0,-xp.XAKk4DpQ2WgOFds.Xa;g;P;R=Sun C 5.10 SunOS_i386 Patch 142363-01 2009/07/15;G=.XAKk4DpQ2WgOFds.;backend;raw;cd;DBG_GEN 5.2.7*intpedantic!K:verbose!L:errorlineno!M:charrerrorfilezN:yyerror^Us]rshortlong `yylhs `yylen B 3*K yydefred8cFy "yydgotoh  * yysindexF *  yyrindexF " yygindexƴ 8 i yytable%"D Ph i yycheckUp new_default^ Uzvar]zval] !op]d_pmemberAprev#next#namez#type# negated#member_listpfirst#last#defaults prev#next#varz#valz# bindingA#type!#op!# new_memberoU2znamen!typen mpadd_defaults U!typebmem defsdbindingACadd_userspec!U members privs u;signed intcmndtagnopasswd#noexec#setenv#log_input#log_output#cmndspec  prev#next#runasuserlistA#runasgrouplistA#cmnd#tags%#cmndspec_list;first#last#privilegeprev #next #hostlistA#cmndlist #privilege_listfirst #last #userspec prev#next#usersA#privileges#init_parser0$UJ O path!quiet dmbindinguspriv csc Q1qqȪrunasuserrunasgrouprJ sudo_command cmndz#argsz#T yygrowstack0U! newsize!i!newss newvs( runascontainerG runasusers#runasgroups# selinux_info{ rolez#typez# cmndspec#defaults#member#runasG #privilege #commandT #tag%#seinfoL #stringz#tok!#{ YYSTYPE yyparse7U! yym!8yyn!8yystate!8GLL^p ,]csM4c sz\szsz8szA!C yystacksize!x N yyvs( wM yysslim vN yyss uM yylval t N yyval sM yyvsp( rM yyssp qM yychar!pN yyerrflag!oN yynerrs!nM yydebug!mMparse_error!J8Ninit_lexerinit_aliasesalias_addz%z!defaults_listVfirst#last#defaults%PNuserspec_listfirst#last#userspecsnQNyylex!rrlibintl_dgettextzvoidlist2tq-  list_appendM  tq_appendk  tq_pop  restrdupzunsignedemalloc efree rwarningx long longlockf64!;!! r;truncate64!h@  off64_ttell64h!!ssize_tpwrite64 pread64 lseek64h'!h!ftruncate64!K! rKtruncate64!xP  off_ttell64x!pwrite64 pread64 lseek64x"!x!lockf64!G!! ftruncate64!k! unsigned chark__FILE^_cnt!#_ptr|#_base|#_flagk# _magick# __orientation# __ionolock#  __seekable#  __extendedfd#  __xf_nocheck#  __filler#  ftello64h^fseeko64! ! fsetpos64! fgetpos64!FILEtmpfile64r r*freopen64[%/r[refopen64`jftello64xfseeko64! ! fsetpos64!fgetpos64!$r$r.freopen64_)3r_rifopen64dntmpfile64memset  !mkstemps64!z!mkstemp64! zmkstemps64!-z!mkstemp64!Jzunsigned long longJrlim64_trlimit64rlim_cur`#rlim_max`#ogetrlimit64!!osetrlimit64!!Jrlim_trlimit7rlim_cur#rlim_max#getrlimit64!`!7`setrlimit64!!erealloc  malloc  free @( ./match.c /var/tmp/sudo-1.8.2/plugins/sudoers /opt/sunstudio12.1/prod/bin/cc -c -I../../include -I../.. -I. -I../.. -I/usr/local/include -L/usr/local/lib -I/usr/local/include -I/usr/local/include -g -D__EXTENSIONS__ -D_PATH_SUDOERS='"/usr/local/etc/sudoers"' -DSUDOERS_UID='0' -DSUDOERS_GID='0' -DSUDOERS_MODE='0440' -DLOCALEDIR='"/usr/local/share/locale"' -KPIC -DPIC -o .libs/match.o ./match.c -W0,-xp.XAKk4DpQ2WgOFjs.Xa;g;P;R=Sun C 5.10 SunOS_i386 Patch 142363-01 2009/07/15;G=.XAKk4DpQ2WgOFjs.;backend;raw;cd;DBG_GEN 5.2.7^:mknodUrr_path_mode _devintcharyunsigned longmode_tdev_t_userlist_matchesnCUrQpwmlistm m!oaprvalrqmatchedrq ByunsignedVuid_tVgid_t passwd$ pw_nameQ# pw_passwdQ# pw_uidb# pw_gidn# pw_ageQ# pw_commentQ# pw_gecosQ# pw_dirQ# pw_shellQ# z/short member prev!# next!# nameQ# type&# negated&# member_list first!# last!#unsigned short alias nameQ# type# seqno# members# userlist_matchesPUrZpwlist _runaslist_matchesUr&user_listgroup_list m!arvalruser_matchedrgroup_matchedr B runaslist_matches4Ur{user_listgroup_list _hostlist_matches@Urlistm!arvalrmatchedr Bhostlist_matches(UrKlist' _cmndlist_matches3sUrlist2m!4matchedr5cmndlist_matchesAUrlist@cmnd_matchesLAUrs!mKaMcNrvalrOmatchedrO sudo_command cmndQ# argsQ#scommand_args_matchjP7Ur Qsudoers_cmndgQsudoers_argsg flagsrkcommand_matches@Urt Qsudoers_cmndQsudoers_args command_matches_fnmatch<Ur Qsudoers_cmndQsudoers_args command_matches_glob@~Ur Qsudoers_cmndQsudoers_args sudoers_stat dlen ap baseQcpQgl long  unsigned long long ino_tnlink_t   long long off_t time_t timespece tv_sec( # tv_nsec #5 timestruc_t blksize_t blkcnt_ty     stat st_dev# st_pad1 # st_ino # st_mode# st_nlink # st_uidb# st_gidn#$ st_rdev#( st_pad2 #, st_size #4 st_atime #< st_mtime #D st_ctime #L st_blksizew #T st_blocks #X st_fstype #` st_pad4 #pVsize_tQy r  r  gl_pathcr# gl_matchcr# gl_offsr# gl_flagsr# gl_pathv # gl_errfunc # glob_t command_matches_normalUr5Qsudoers_cmndQsudoers_args sudoers_stat baseQdlen   command_matches_dir0UrQsudoers_dir/ dlen/ sudoers_stat 1dentA2bufF3dirp4y dirent A d_ino # d_off # d_reclen# d_name#yY   dd_fdr# dd_locr# dd_sizer# dd_bufQ# YDIR  addr_matches_ifZUr5QnYaddr[ifp\jr^familyr`unsigned char5uint8_t   s_b1F# s_b2F# s_b3F# s_b4F#uint16_t   s_w1# s_w2#Vuint32_t   S_un_bT# S_un_w# S_addr# in_addr " S_un#F3 D  ~ _S6_u8"# _S6_u323# __S6_align# in6_addr  _S6_unD#sudo_in_addr_un  ip4# ip6~# interface(  familyr# addr# netmask# next#$ addr_matches_if_netmaskUrQnQm iraddrmaskifpjrfamilyraddr_matches{UrAQnmQretvalrhostname_matchesUrQshostQlhost Qpatternuserpw_matches0Ur4Qsudoers_userQuser pw   uidbgroup_matches 0UrQsudoers_group gr  Q]]gidn  group gr_nameQ# gr_passwdQ# gr_gidn# gr_mem # usergr_matchesUrQgroupQuser pwmatchedrpw0netgr_matchesIUrQnetgrHQlhostH QshostHQuserHdomainQJAempty\A rpl_globfreeE$yEyOroTrYrpl_globrJro$yyrpl_fnmatchrralias_findQryy zgroup_plugin_queryrMyMuser_in_groupr}Rpw_delrefysudo_getpwnamyestrdupQvoidefreeY ino64_t off64_ty: dirent64  d_ino # d_off# d_reclen# d_name)#:readdir64_rrAreaddir64_rrA::alphasort64r*y*:9rT>C:Y^:hmrcrwscandir64r/4Treaddir64closedirrreaddir64A#(alphasort64rV-yVerjorscandir64r[`yopendirgetdents64r7rAVy7yAyKyUinnetgrr<FPZyVin_addr_tinet_addryinet_ptonrrlockf64rrr ytruncate64rC tell64]rrssize_tkpwrite64]]pV pread64]]V lseek64rrftruncate64rr ytruncate64rE tell64 _r_pwrite64]]dV pread64]]V lseek64 r rlockf64rrr ftruncate64r,r yy1strlcat `,6 y`strlcpy ,e yystrcasecmprystrrchrQryystrpbrkQ$y$strchrQM)ryMyWstrcmprR\memcmprVmkstemps64rQrmkstemp64rQmkstemps64r Qrmkstemp64r8 Q rlim64_t rlimit64z rlim_cur8 # rlim_max8 #G getrlimit64r rz G  setrlimit64r r  rlim_t rlimit! rlim_cur # rlim_max # getrlimit64r8!r! 8!setrlimit64rf!r=!freez!yz!atoir!!5 __FILE~" _cntr# _ptr!# _base!# _flag5# _magic5# __orientationV# __ionolockV#  __seekableV#  __extendedfdV#  __xf_nocheckV#  __fillerV#  !ftello64"~"!fseeko64r"" r "fsetpos64r""" fgetpos64r#""!FILE#tmpfile64(#y@#yJ#freopen64(#{#E#O#(#y{#y#fopen64(####!ftello64 ##fseeko64r#" r #fsetpos64r"$"#fgetpos64rD$""yD$yN$freopen64(#$I$S$(#y$y$fopen64(#$$$tmpfile64(#ry$_xmknodr$$$y$ lstat64r.%% %y.%stat64rW%3% %fstat64rw%r %yw%fstatat64r%r|% %ry% %  %  blkcnt64_ty%  &  stat64/' st_dev# st_pad1%# st_ino # st_mode# st_nlink # st_uidb# st_gidn#$ st_rdev#( st_pad2%#, st_size#4 st_atime #< st_mtime #D st_ctime #L st_blksizew #T st_blocks%#X st_fstype%#` st_pad4%#p &fstatat64r`'r%/'ry`'lstat64r'e'/'y'stat64r''/'fstat64r'r/'htonl'y'strlen (' stat64 (((!stat"readdir647(!readdir$ ./pwutil.c /var/tmp/sudo-1.8.2/plugins/sudoers /opt/sunstudio12.1/prod/bin/cc -c -I../../include -I../.. -I. -I../.. -I/usr/local/include -L/usr/local/lib -I/usr/local/include -I/usr/local/include -g -D__EXTENSIONS__ -D_PATH_SUDOERS='"/usr/local/etc/sudoers"' -DSUDOERS_UID='0' -DSUDOERS_GID='0' -DSUDOERS_MODE='0440' -DLOCALEDIR='"/usr/local/share/locale"' -KPIC -DPIC -o .libs/pwutil.o ./pwutil.c -W0,-xp.XAKk4DpQ2WgOFps.Xa;g;P;R=Sun C 5.10 SunOS_i386 Patch 142363-01 2009/07/15;G=.XAKk4DpQ2WgOFps.;backend;raw;cd;DBG_GEN 5.2.7 ImknodUuu_path_mode _devintchar|unsigned longmode_tdev_tcmp_pwuidc,Uu(v1b2v2b ci1Hdci2Revoid#-unsigned7uid_t7gid_t|  uidC# gidO# name[# passwd$. pw_name[# pw_passwd[# pw_uidC# pw_gidO# pw_age[# pw_comment[# pw_gecos[# pw_dir[# pw_shell[# [ group gr_name[# gr_passwd[# gr_gidO# gr_mem3# 8O group_list groups3# gids# ngroupsu# ngidsu#   pw.# gr# grlist# cache_item C refcnt7# k`# d#CMcmp_pwnamn0~Uuv1mv2m ci1oci2pmake_pwitemuU  pwname cp[pw_shell'nsize,psize,csize,gsize,dsize,ssize,total,item newpw.||"7size_t pw_addrefЀUf.pwpw_delref_itemְUvitem  pw_delrefGU.pwsudo_getpwuidPU.MCuidkeyitem nodeMprbcolorpredblack rbnode leftM# rightM# parentM# data# colorR#sudo_getpwnam9U.O T namekeyitem nodeMlen,|O sudo_fakepwnam?@eU. " user>Ogid> item @pw.AnodeMBlen,Cnamelen,CiuD| sudo_setpwenttpUsudo_freepwcache~~Usudo_endpwentUcmp_grgidUu  v1 v2 ci1 ci2     make_gritemU   gr name cp[nsize,psize,nmem,total,len,item newgr8 | make_grlist_itemU   usergids ungidscp[i,nsize,ngroups,total,len,item grlistgrp88M]]ptr"| gr_addref84U gr7gr_delref_item>@U"v=item ?gr_delrefGUQgrFsudo_getgrgidP@UOgidOkeyQitem QnodeMRsudo_getgrnamt@URWnameskeyuitem unodeMvlen,w|Rsudo_fakegrnam]Ugroupitem grnodeMlen,namelen,iu|grlist_addref`USgrlistgrlist_delref_itemUvitem grlist_delref'Ugrlistsudo_setgrent0Usudo_freegrcacheUsudo_endgrentUget_group_list<U.pwkeyitem nodeMlen,gidsngidsuset_group_list3@Uuser2gids2 ungids2key4item 4nodeM5|user_in_groupF Uuy.pwE~groupE grlistGgrpHiuImatcheduI/q Lq Lq LXXgidOP|yu rbtree, compar# rootp# nilp#grlist_cacheDAgrcache_bynameCAgrcache_bygidCApwcache_bynameBApwcache_byuidBA{rbdestroyurbcreaterbinsertMrbfindM66zero_bytes_;7|_|ilibintl_dgettext[dnerealloc7emalloc277emalloc7efree|errorx4u |47ugetgrouplistuw97>C!setgrent!endgrent|getgrnamgetgrgid7!setpwent!endpwent|getpwnam.getpwuid.37long longlockf64ueuu3|etruncate64uj33off64_ttell64uussize_tpwrite6473pread64,73lseek64Quuftruncate64uuu3|utruncate64uz33off_ttell64ulongsysconfupwrite64 73pread64J73lseek64ouulockf64uuu3ftruncate64uu3||strcasecmpu|strlen,||strcmpuF"FmemcpytK7mkstemps64u[umkstemp64u[mkstemps64u[umkstemp64u[unsigned long longrlim64_t rlimit64L rlim_cur # rlim_max #getrlimit64uuuLusetrlimit64uuzrlim_t rlimit rlim_cur# rlim_max#getrlimit64u u setrlimit64u8u|8atoiuZ=unsigned charZ __FILE M _cntu# _ptrk# _basek# _flagZ# _magicZ# "__orientation7# "__ionolock7#  "__seekable7#  "__extendedfd7#  "__xf_nocheck7#  "__filler7#  pftello64nMpfseeko64un3u3fsetpos64un3fgetpos64unpFILE #tmpfile64||freopen64J|J|Tfopen64~OYpftello64~fseeko64un3u3fsetpos64unfgetpos64un||freopen64N"|N|Xfopen64S]#tmpfile64u|_xmknodu|$ %ino_tnlink_t$ %time_t timespec Q tv_sec # tv_nsec#! timestruc_t blksize_t3blkcnt_t$| %$ % stat ! st_dev# st_pad1# st_ino# st_mode# st_nlink# st_uidC# st_gidO#$ st_rdev#( st_pad2 #, st_size#4 st_atimQ #< st_mtimQ #D st_ctimQ #L st_blksizec #T st_blockss #X st_fstype #` st_pad4 #p lstat64u!!|!stat64u"!!fstat64u3"u!|3"fstatat64ui"u8"!u|i"$ "%ino64_t$"%3blkcnt64_t$|"%$ "% stat64 # st_dev# st_pad1s"# st_ino"# st_mode# st_nlink# st_uidC# st_gidO#$ st_rdev#( st_pad2"#, st_size#4 st_atimQ #< st_mtimQ #D st_ctimQ #L st_blksizec #T st_blocks"#X st_fstype"#` st_pad4"#p"fstatat64u*$un"#u|*$lstat64uT$/$#|T$stat64u}$Y$#&fstat64uu#%*./toke.c /var/tmp/sudo-1.8.2/plugins/sudoers /opt/sunstudio12.1/prod/bin/cc -c -I../../include -I../.. -I. -I../.. -I/usr/local/include -L/usr/local/lib -I/usr/local/include -I/usr/local/include -g -D__EXTENSIONS__ -D_PATH_SUDOERS='"/usr/local/etc/sudoers"' -DSUDOERS_UID='0' -DSUDOERS_GID='0' -DSUDOERS_MODE='0440' -DLOCALEDIR='"/usr/local/share/locale"' -KPIC -DPIC -o .libs/toke.o ./toke.c -W0,-xp.XAKk4DpQ2WgOF1s.Xa;g;P;R=Sun C 5.10 SunOS_i386 Patch 142363-01 2009/07/15;G=.XAKk4DpQ2WgOF1s.;backend;raw;cd;DBG_GEN 5.2.7Wintunsigned char(unsigned__FILE'_cnt!#_ptr9#_base9#_flag(# _magic(# __orientation># __ionolock>#  __seekable>#  __extendedfd>#  __xf_nocheck>#  __filler>#  JFILE'char7>yy_size_t yy_buffer_state(Ayy_input_file2#yy_ch_buf?#yy_buf_pos?#yy_buf_sizeD# yy_n_chars!#yy_is_our_buffer!#yy_is_interactive!#yy_at_bol!#yy_fill_buffer!# yy_buffer_status!#$SAYY_BUFFER_STATE yy_current_bufferF: yy_c_buf_p?: yy_init!: yy_start!: yyin2: yyout2:short long ^yy_accept&T ! .Fyy_ec3mT ! [ rByy_meta`  >yy_base  >yy_defx  (yy_nxt2  (,yy_chkPmknod  U!_path_mode _dev 7unsigned longmode_tdev_t 7!trace_print[:yylex{ 5U!yy_current_state|yy_cp?}yy_bp?}yy_act!~ 5 5 5      yy_c L 5T 5T 5y(path?i(path?ildeftype7'n!(Rn!Op35yy_amount_of_matched_text! 354444yy_next_state !yy_state_type(YY_CHARyy_get_next_buffer 6]<U! dest? source? number_to_move! i! ret_val! 7;$8;$8;num_to_read!D 78/9C8#9C8#9bFO yy_c_buf_p_offset!Q a88l88l88new_size!V @9};U9;U9;c!u n!u yy_get_previous_state `<=UR yy_current_state yy_cp? <=<=<=yy_c  yy_try_NUL_trans =>U yy_current_state yy_is_jam! yy_cp? yy_c  yyrestartY ?q?U 2input_fileT yy_switch_to_bufferh ?%@UV Fnew_bufferc yy_load_buffer_state 0@@Uyy_create_buffer @rAUF 2file !size  bF yy_delete_buffer AAU Fb yy_init_buffer BBUj Fb 2file  oerrno! yy_flush_buffer B:CU Fb yy_scan_buffer @CBDUF ?base Dsize  bF yy_scan_string/ PDDUFJOyy_str* len!0  7Jyy_scan_bytesA DEUFbytes; !len;  bFB buf?C nDD i!E  7yy_fatal_error EEU%*msg  7%yy_flex_alloc F:FUogDsize voidgyy_flex_realloc @F|FUooptr Dsize  yy_flex_free FFUoptr pl_compareFGU!V[v1ev2 p1p2 gV g`path_listpath?#next#j j  j switch_dir GKU?sstack?dirpath diri!count!path?denttsbQplfirstsortedrrG8HG8HG8HG1HG1HG1Herrbuf?include_stacksbsF#path?#more#lineno!# keepopen!#dd_fd!#dd_loc!#dd_size!#dd_buf?# xDIRunsigned long longino_tlong longoff_t unsigned short7)dirent td_ino#d_off#d_reclen#d_name#) nlink_t>uid_t>gid_ttime_ttimespec tv_sec#tv_nsec#timestruc_t blksize_tblkcnt_t7@ Qstat rst_dev#st_pad1y#st_ino#st_mode#st_nlink#st_uid# st_gid#$st_rdev#(st_pad2#,st_size#4st_atim#<st_mtim#Dst_ctim#Lst_blksize#Tst_blocks #Xst_fstype/#`st_pad4@#pinit_lexerKMUpl_push_include MQU!n?path !isdir  pl fp2 NPOPOPOPPPPPerrbuf?-pop_includeGQTU!plHfp2Iparse_includepTxWU??baseocp?qep?qpath?qlen!rsubst!rshost_lens4VV@VV@VVpp?B>size_tkeepopen!BistacksBidepthBistacksize B sawspace!PA prev_state!PA continued!PAsudoers?N4Nsudolineno!MN 7 yyerror 7!ipv6_valid! 7!fill_txt!!! 7!fill_cmnd!1 ! 71!fill_args!b6!! 7b!append!g! 7!!open_sudoers2! 7 7!libintl_dgettext? efreeoxino64_toff64_t 7Hdirent64 d_ino#d_off)#d_reclen#d_name7#H!readdir64_r!t!readdir64_r!t H H !alphasort64!8 78 HG!bLQ Hgl Hv{!q!scandir64!=Bb!readdir64!closedir!!readdir64t" )"' )16!alphasort64!d,; 7d )s!x} ) )!!scandir64!in 7!opendir!getdents64!E!t>!lockf64!j!! 7j!truncate64!o!tell64)!!ssize_t g!pwrite64>g!pread64#>!lseek64)H!)!!ftruncate64!l! 7l!truncate64!q!tell64! g!pwrite64>!pread64>!lseek647!!!lockf64!\!!!ftruncate64!! 7!strchr?! 7!strlen!strerror?! 7 7!strcmp!  g !memcpyoJ o! >!isatty!d !!mkstemps64! ?!!mkstemp64! ?!mkstemps64! ?!!mkstemp64! ?rlim64_t rlimit64 &!rlim_cur #rlim_max # !getrlimit64!O!!&! O!!setrlimit64!}!!T!rlim_t rlimit !rlim_cur}!#rlim_max}!#!!getrlimit64!!!! !!!setrlimit64!"!!!realloco2"o> g2" g<"!\"7"A"F" qsort"o>>\"!malloco"> free"o exit"! ! 7"!_xmknod!#"" 7#Q!lstat64!/## # 7/#!stat64!X#4# #!fstat64!x#! # 7x#!fstatat64!#!}# #! 7# ##blkcnt64_t7# $stat64 0%st_dev#st_pad1##st_ino#st_mode#st_nlink#st_uid# st_gid#$st_rdev#(st_pad2##,st_size)#4st_atim#<st_mtim#Dst_ctim#Lst_blksize#Tst_blocks##Xst_fstype##`st_pad4##p $!fstatat64!a%!#0%! 7a%!lstat64!%f%0% 7%!stat64!%%0%!fstat64!%!0%yy_last_accepting_cpos?qAyy_last_accepting_statepA yytext?z(N yy_did_buffer_switch_on_eof!B yy_n_chars!A yy_hold_char7Ayyleng!NJ!ftello64)&&J!fseeko64!&&! &!fsetpos64!$'&&!fgetpos64!K'&$'"tmpfile642 7^' 7h'!freopen642'c'm'2 7' 7'!fopen642'''J!ftello64''!fseeko64!(&!!fileno!.(&? 73(!asprintf!_(.(8(#!__filbuf!{(& {(!fsetpos64!(&(!fgetpos64!(&$' g(J!fwrite)((g!fread.))( 7.)!fprintf!Y)&3)# 7Y) 7c)!freopen642)^)h)2 7) 7)!fopen642)))!fclose!)&"tmpfile642$stat64* *%stat&readdir64*%readdirg L./toke_util.c /var/tmp/sudo-1.8.2/plugins/sudoers /opt/sunstudio12.1/prod/bin/cc -c -I../../include -I../.. -I. -I../.. -I/usr/local/include -L/usr/local/lib -I/usr/local/include -I/usr/local/include -g -D__EXTENSIONS__ -D_PATH_SUDOERS='"/usr/local/etc/sudoers"' -DSUDOERS_UID='0' -DSUDOERS_GID='0' -DSUDOERS_MODE='0440' -DLOCALEDIR='"/usr/local/share/locale"' -KPIC -DPIC -o .libs/toke_util.o ./toke_util.c -W0,-xp.XAKk4DpQ2WgOV7s.Xa;g;P;R=Sun C 5.10 SunOS_i386 Patch 142363-01 2009/07/15;G=.XAKk4DpQ2WgOV7s.;backend;raw;cd;DBG_GEN 5.2.71sintarg_len08:arg_size09:hexchar=WXUs<i0>result0?Bunsigned charchar fill_txtjXZU0BGsrci0leni 0olenidstLkB appendZL[U0src0len olen0 fill_cmndP[\U0src0len dstLi0 fill_args\^U0s0len 0addspacenew_len0pL ipv6_valid^u_U0snmatch0 yyerror  libintl_dgettextLL  voidL efreen Tlong long lockf640 0 0 n truncate640  n noff64_t tell64 0 0ssize_tLunsigned pwrite64D    nL pread64s  D  n lseek64 0  0 ftruncate640 0 n truncate640  n noff_t tell64 0L pwrite64D    n pread64n  D  n lseek64 0  0 lockf640 0 0 n ftruncate640 0 n size_t strlcpy    strlenA " mkstemps640d L 0 mkstemp640 L mkstemps640 L 0 mkstemp640 Lunsigned long long rlim64_trlimit64 rlim_cur#rlim_max# getrlimit640B 0  B setrlimit640p 0 G rlim_trlimit rlim_curp #rlim_maxp #} getrlimit640 0 }  setrlimit640 0 reallocT% T  mallocT? __FILE! _cnt0#_ptr? #_base? #_flag# _magic# __orientation # __ionolock #  __seekable #  __extendedfd #  __xf_nocheck #  __filler #  D ftello64B ! D fseeko640m B n 0nm fsetpos640 B r n fgetpos640 B D FILE tmpfile64   freopen64   ( fopen64 R # - D ftello64s R fseeko640 B n 0n fsetpos640 B fgetpos640 B   freopen64 " " , fopen64 V ' 1 tmpfile64  U./redblack.c /var/tmp/sudo-1.8.2/plugins/sudoers /opt/sunstudio12.1/prod/bin/cc -c -I../../include -I../.. -I. -I../.. -I/usr/local/include -L/usr/local/lib -I/usr/local/include -I/usr/local/include -g -D__EXTENSIONS__ -D_PATH_SUDOERS='"/usr/local/etc/sudoers"' -DSUDOERS_UID='0' -DSUDOERS_GID='0' -DSUDOERS_MODE='0440' -DLOCALEDIR='"/usr/local/share/locale"' -KPIC -DPIC -o .libs/redblack.o ./redblack.c -W0,-xp.XAKk4DpR2WgOVBt.Xa;g;P;R=Sun C 5.10 SunOS_i386 Patch 142363-01 2009/07/15;G=.XAKk4DpR2WgOVBt.;backend;raw;cd;DBG_GEN 5.2.79wrbcreate[_7`UfucomparZtreef\voidu}uint   rbnode left# right# parent# data # color#u rbcolor/ red black rbtree,f compar# root# nil#/ukuu p zrotate_lefty@``Uftreexnodex childzrotate_right`WaUCftreenode childrbinsert`a8dUftree data nodeparentresbdb db dunclerbfind@ddU^ftree key noderesrbapply_nodedfUftreenode func cookie ordererror   rbtraversal? preorder inorder postorderrbsuccessor3 ffUftree2node2 succ4_rbdestroyHfHgUftreeGnodeG destroyG rbdestroyXPggUDftreeWQdestroyW Q Drbdeleteag8iU ftree`z` xbybdata crbrepair@ikU'ftreenode siblingunsignedemalloc N 'efreec charcmkstemps64 k mkstemp64 kmkstemps64 k mkstemp64 kunsigned long longrlim64_t rlimit64H rlim_cur # rlim_max # getrlimit64q  H  q setrlimit64  v rlim_t rlimit rlim_cur # rlim_max # getrlimit64    setrlimit644  freeH unsigned charH __FILE; _cnt# _ptrY # _baseY # _flagH # _magicH # __orientation'# __ionolock'#  __seekable'#  __extendedfd'#  __xf_nocheck'#  __filler'#  ^ long long@ off64_tftello64M w ; ^ fseeko64 w @ @  fsetpos64 w @ fgetpos64 w ^ FILE tmpfile64 c c" freopen64 S  ' cS c] fopen64  X b ^ @ off_tftello64  fseeko64 w @ @  fsetpos64 w fgetpos64( w c( c2 freopen64 c - 7 cc cm fopen64  h r tmpfile64 : ./alloc.c /var/tmp/sudo-1.8.2/common /opt/sunstudio12.1/prod/bin/cc -c -I../include -I.. -I.. -I/usr/local/include -L/usr/local/lib -I/usr/local/include -I/usr/local/include -g -D__EXTENSIONS__ -KPIC -DPIC -o .libs/alloc.o ./alloc.c -W0,-xp.XAKk4DpM2WgO1xp.Xa;g;P;R=Sun C 5.10 SunOS_i386 Patch 142363-01 2009/07/15;G=.XAKk4DpM2WgO1xp.;backend;raw;cd;DBG_GEN 5.2.7~emallocNkrlUsizeMptrOvoidunsignedsize_temalloc2_lVmU@nmemb^size^ ptr`erealloct`mnUptrssizes erealloc3 noUptrnmemb sizeestrdup ooU/'9srcdst/lenchar''4estrndupoApU/srcmaxlen dst/len'easprintfPppU$$+ret5fmt ...len$ap: int/'0va_listevasprintfp?qU$+retformat :argslen$' efree@q|qUptr'' libintl_dgettext/  ' errorxE $ $ 'E strleni Ji memcpy  n  mkstemps64$ / $ mkstemp64$ / mkstemps64$ / $ mkstemp64$ /unsigned long longrlim64_trlimit64orlim_cur-#rlim_max-#< getrlimit64$ $ o< setrlimit64$ $ rlim_trlimitrlim_cur#rlim_max# getrlimit64$- $ - setrlimit64$[ $ 2 realloc{   malloc  free unsigned char__FILE_cnt$#_ptr#_base#_flag# _magic# __orientation# __ionolock#  __seekable#  __extendedfd#  __xf_nocheck#  __filler#  long longoff64_t ftello64  fseeko64$   $ fsetpos64$/    fgetpos64$V  / FILEV tmpfile64a 'y ' freopen64a  ~ a ' ' fopen64a  off_t ftello64  fseeko64$;   $'; vasprintf$l + @ l fsetpos64$  q fgetpos64$  / ' ' freopen64a  a ' ' fopen64a )  tmpfile64a ./fileops.c /var/tmp/sudo-1.8.2/common /opt/sunstudio12.1/prod/bin/cc -c -I../include -I.. -I.. -I/usr/local/include -L/usr/local/lib -I/usr/local/include -I/usr/local/include -g -D__EXTENSIONS__ -KPIC -DPIC -o .libs/fileops.o ./fileops.c -W0,-xp.XAKk4DpM2WgO13p.Xa;g;P;R=Sun C 5.10 SunOS_i386 Patch 142363-01 2009/07/15;G=.XAKk4DpM2WgO13p.;backend;raw;cd;DBG_GEN 5.2.7mknodqqU_path_mode  _devintcharunsigned longmode_tdev_ttouch>qrUwfd=wpath= tvp= times?long|time_t|suseconds_t timeval tv_sec# tv_usec#  |lock_fileWrEsU<fdVlockitV opXsudo_parseln`stUwfp len cpw bufBunsigned charunsigned __FILE _cnt# _ptr# _base# _flag# _magic# __orientation# __ionolock#  __seekable#  __extendedfd#  __xf_nocheck#  __filler#  FILEsize_t|attropen64openat64Dlong longposix_fallocate64DDposix_fadvise64DDcreat64open64attropen64C Copenat64tHposix_fallocate64DDposix_fadvise64DDcreat64open64)._xmknodb)3b | } |unsigned long long}ino_tnlink_tuid_tgid_t | |Doff_t timespec tv_sec# tv_nsec|#timestruc_t|blksize_tDblkcnt_t T | | e | stat st_dev # st_pad1l# st_ino# st_mode# st_nlink# st_uid# st_gid#$ st_rdev #( st_pad2#, st_size#4 st_atim#< st_mtim#D st_ctim#L st_blksize$#T st_blocks4#X st_fstypeC#` st_pad4T#pelstat64 g  stat64   fstat64   fstatat64*   * | E |}ino64_t |d |Doff64_tDblkcnt64_t  | | | stat64 st_dev # st_pad14 # st_inoE # st_mode# st_nlink# st_uid# st_gid#$ st_rdev #( st_pad2S #, st_sized #4 st_atim#< st_mtim#D st_ctim#L st_blksize$#T st_blocksr #X st_fstype #` st_pad4 #p fstatat64 /   lstat64#   # stat64L (  fstat64l  lockf64 D truncate64  Dtell64d  ssize_tvoid  pwrite64 #   D pread64 R  # Dlseek64d w d ftruncate64 D truncate64  Dtell64   pwrite64   Dpread64 A # Dlseek64flockf64Dftruncate64Dstrchrwstrlenftello64d fseeko64HDDHfsetpos64tMDfgetpos64ttmpfile64freopen64fopen64ftello64>fseeko64dDDdfsetpos64ifgetpos64tfgetswwfreopen64fopen64Dtmpfile64Wautimes\ffutimesatlockf64lockf& B./list.c /var/tmp/sudo-1.8.2/common /opt/sunstudio12.1/prod/bin/cc -c -I../include -I.. -I.. -I/usr/local/include -L/usr/local/lib -I/usr/local/include -I/usr/local/include -g -D__EXTENSIONS__ -KPIC -DPIC -o .libs/list.o ./list.c -W0,-xp.XAKk4DpN2WgO1Aq.Xa;g;P;R=Sun C 5.10 SunOS_i386 Patch 142363-01 2009/07/15;G=.XAKk4DpN2WgO1Aq.;backend;raw;cd;DBG_GEN 5.2.7tq_pop6t*uUvh5hA7last8voidlist_protoprev#next#list_head_protoAfirst#last# list2tqM0uuUvhLvlL hANlO list_appendguuUvl1fvl2f l1hl2itailj tq_appendwu:vUvhvvlv hAxlytailz tq_remove@vvUvhvl hAlcharint mkstemps64   mkstemp646  mkstemps64Y   mkstemp64v unsigned long long vrlim64_t rlimit64rlim_cur#rlim_max# getrlimit64   setrlimit64%   vrlim_t rlimitcrlim_cur%#rlim_max%#2 getrlimit64  c2 setrlimit64  unsigned charunsigned __FILE_cnt#_ptr#_base#_flag# _magic# __orientation# __ionolock#  __seekable#  __extendedfd#  __xf_nocheck#  __filler#  long long off64_t ftello64  fseeko64      fsetpos64L  % fgetpos64s  L FILEstmpfile64~ freopen64~   ~ fopen64~   off_t ftello64 2  fseeko64X   X fsetpos64  ] fgetpos64  L freopen64~   ~ fopen64~  tmpfile64~7./zero_bytes.c /var/tmp/sudo-1.8.2/common /opt/sunstudio12.1/prod/bin/cc -c -I../include -I.. -I.. -I/usr/local/include -L/usr/local/lib -I/usr/local/include -I/usr/local/include -g -D__EXTENSIONS__ -KPIC -DPIC -o .libs/zero_bytes.o ./zero_bytes.c -W0,-xp.XAKk4DpN2WgO1Jq.Xa;g;P;R=Sun C 5.10 SunOS_i386 Patch 142363-01 2009/07/15;G=.XAKk4DpN2WgO1Jq.;backend;raw;cd;DBG_GEN 5.2.7&zero_bytesw?wUv n p$ep$voidunsignedsize_tcharintunsigned char0 __FILE# _cnt)# _ptrA# _baseA# _flag0# _magic0# __orientation#  __ionolock#   __seekable#   __extendedfd#   __xf_nocheck#   __filler#  Flong long(off64_t ftello645_ #F fseeko64) _ ( )( fsetpos64) _ ( fgetpos64) _ FFILEtmpfile64  freopen64;   ;E fopen64o @ JF(off_t ftello64t o fseeko64) _ ( )( fsetpos64) _  fgetpos64) _  freopen64K   KU fopen64 P Ztmpfile64 ./getgrouplist.c /var/tmp/sudo-1.8.2/compat /opt/sunstudio12.1/prod/bin/cc -c -I../include -I.. -I.. -I/usr/local/include -L/usr/local/lib -I/usr/local/include -I/usr/local/include -g -D__EXTENSIONS__ -KPIC -DPIC -o .libs/getgrouplist.o ./getgrouplist.c -W0,-xp.XAKk4DpM2WgOlWp.Xa;g;P;R=Sun C 5.10 SunOS_i386 Patch 142363-01 2009/07/15;G=.XAKk4DpM2WgOlWp.;backend;raw;cd;DBG_GEN 5.2.7ՆgetgrouplistY@wxUhh|nameXbasegidX groupsXngroupspXihZngroupshZgrpsizeh[rvalh\grp]intcharowunsignedgid_tho group gr_name# gr_passwd# gr_gid# gr_mem#  getgrent setgrent endgrento.o8 strcmpha3= mkstemps64hh mkstemp64h mkstemps64hh mkstemp64hunsigned long longrlim64_t rlimit649 rlim_cur# rlim_max# getrlimit64hbh9b setrlimit64hhgrlim_t rlimit rlim_cur# rlim_max# getrlimit64hh setrlimit64h%hunsigned char% __FILE _cnth# _ptr6# _base6# _flag%# _magic%# __orientation# __ionolock#  __seekable#  __extendedfd#  __xf_nocheck#  __filler#  ;long longoff64_t ftello64*T; fseeko64hTh fsetpos64hT fgetpos64hT;FILE tmpfile64oo freopen640o0o: fopen64d5?;off_t ftello64id fseeko64hTh fsetpos64hT fgetpos64hToo freopen64@ o@oJ fopen64tEO tmpfile64%./glob.c /var/tmp/sudo-1.8.2/compat /opt/sunstudio12.1/prod/bin/cc -c -I../include -I.. -I.. -I/usr/local/include -L/usr/local/lib -I/usr/local/include -I/usr/local/include -g -D__EXTENSIONS__ -KPIC -DPIC -o .libs/glob.o ./glob.c -W0,-xp.XAKk4DpM2WgOlcp.Xa;g;P;R=Sun C 5.10 SunOS_i386 Patch 142363-01 2009/07/15;G=.XAKk4DpM2WgOlcp.;backend;raw;cd;DBG_GEN 5.2.7xmknodxyU_path_mode _devintcharunsigned longmode_tdev_t*  cclass[ name# isctype*#long /r [cclassesc:/h[ cclasses:rpl_globy{Upatternflags errfunc^pglobpatnextycbufnextbufendpatbuf    Q gl_pathc# gl_matchc# gl_offs# gl_flags# gl_pathv# gl_errfunc#glob_tQunsigned charctunsigned short~Char[globexp1{h|U pattern^pglob ptr*rv%globexp2p|=Uptrpattern ^pglob#rvilmlspe-pm-pl-patbuf2(E[globtildec@U!patternbpatbufb 2patbuf_lenb^pglobbpwddhepfbgebgunsigned&size_t&uid_t&gid_t passwd$ pw_name# pw_passwd# pw_uid?# pw_gidK# pw_age# pw_comment# pw_gecos# pw_dir# pw_shell# Wg_strncmp-Uhms1ws2 2nrvhrg_charclass0U7 A patternpF bufnextp patternP bufnextcolonZ cc_ len2~7 < K U /glob0U/ 4 pattern^pglob qpatnext> cerroldpathcbufnextpatbufC / 9 V [compare(2U  p' q' void    glob1.@U" pattern-pattern_last- ^pglob-pathbuf" /5 [glob2AU6 pathbuf?pathbuf_last? pathend?pathend_last?pattern@pattern_last@^pglob@ sb1 BpCqCanymetaD[ G [unsigned long longG ino_tnlink_t[ [long long off_t[time_t timespec tv_sec # tv_nsec[# timestruc_t[blksize_t blkcnt_t [[ 1 [ statR st_dev# st_pad16 # st_ino] # st_mode# st_nlinki # st_uid?# st_gidK#$ st_rdev#( st_pad2w #, st_size #4 st_atim #< st_mtim #D st_ctim #L st_blksize #T st_blocks #X st_fstype #` st_pad4 #pglob3~Upathbuf{pathbuf_last{ pathend{pathend_last{pattern|pattern_last|restpattern| restpattern_last}$^pglob}(dp'dirpzerrbufiLLscdc[ dirent ' d_ino] # d_off # d_reclen~# d_name# p dd_fd# dd_loc# dd_size# dd_buf# ,DIR p[cglobextendUX]path^pglob pathvinewsize&len&copypgXbmatchБߔUnamepat patendoknegate_rangeckĔ#3WWWggidxrpl_globfree.U^pglob-i/pp0g_opendir>GUzOstr=^pglob= bufO?b[g_lstatMPUfnLsbL ^pglobLbufN1 [g_statWЖAU?fnVsbV ^pglobVbuf?XR[g_strchraPUstr`ch` g_CtockBUstrjbufj &lenjgetpwnam getpwuid6 &,G ino64_t off64_th[ dirent64  d_ino;# d_offI# d_reclen~# d_nameW#hreaddir64_r 6  'readdir64_r 6 ' hh%*alphasort64X  /Xhg lqhh  scandir64 ] b  readdir64  6closedir% 6readdir64'B 6BGQValphasort64 L [   scandir64    opendirz= getdents64e  ' &isblank isxdigit isupper isspace ispunct isprint islower# isgraph> isdigitY iscntrlt isalpha isalnum lockf64   truncate64  tell64I ssize_t $pwrite64Y  ) &  pread64  Y & lseek64I  I ftruncate64  truncate64  tell64   pwrite64M   & pread64w  Y & lseek64   lockf64   getuid?ftruncate64  strcmp(  mkstemps64K  mkstemp64h mkstemps64  mkstemp64 G rlim64_t rlimit64  rlim_cur# rlim_max#getrlimit64  setrlimit64A  G rlim_t rlimit  rlim_curA# rlim_maxA#Ngetrlimit64  Nsetrlimit64   realloc  &  %  qsortN  & & %malloch &hgetenv mfree  __FILE } _cnt# _ptr# _base# _flagc# _magicc# __orientation&# __ionolock&#  __seekable&#  __extendedfd&#  __xf_nocheck&#  __filler&#  ftello64I }fseeko64   fsetpos64   fgetpos64  FILE  tmpfile64' ? I freopen64' z D N ' z  fopen64'   ftello64  fseeko64    fsetpos64!!  fgetpos64C!  C!M!freopen64' ~! H! R! ' ~!!fopen64' ! ! !tmpfile64' !_xmknod! ! !  !lstat64(" " ("stat64Q" -" fstat64q"  q"fstatat64"  v"  "[ "[["[ blkcnt64_t"[[ #[ stat64)$ st_dev# st_pad1"# st_ino;# st_mode# st_nlinki # st_uid?# st_gidK#$ st_rdev#( st_pad2"#, st_sizeI#4 st_atim #< st_mtim #D st_ctim #L st_blksize #T st_blocks"#X st_fstype"#` st_pad4"#p#fstatat64Z$  " )$ Z$lstat64$ _$ )$$stat64$ $ )$fstat64$  )$stat64$$ statlstat64$$ lstat!readdir64% readdir ./fnmatch.c /var/tmp/sudo-1.8.2/compat /opt/sunstudio12.1/prod/bin/cc -c -I../include -I.. -I.. -I/usr/local/include -L/usr/local/lib -I/usr/local/include -I/usr/local/include -g -D__EXTENSIONS__ -KPIC -DPIC -o .libs/fnmatch.o ./fnmatch.c -W0,-xp.XAKk4DpM2WgO1fp.Xa;g;P;R=Sun C 5.10 SunOS_i386 Patch 142363-01 2009/07/15;G=.XAKk4DpM2WgO1fp.;backend;raw;cd;DBG_GEN 5.2.7Ԗcharintcclassname#isctype#long   cclassesL; h!  cclassesL;rpl_fnmatchHPUpatternGstringG flagsG stringstartI newpJ cK testKBrangematchUpatterntest flagsnewp negate ok rv c c2classmatch Upatterntest foldcaseep cc colon len rvalunsignedsize_tstrchrstrncmp3 3strlenW8isblankrtolowerisxdigitisupperisspaceispunctisprintislower0isgraphKisdigitfiscntrlisalphaisalnumunsigned char__FILE_cnt#_ptr#_base#_flag# _magic# __orientation# __ionolock#  __seekable#  __extendedfd#  __xf_nocheck#  __filler#  long longoff64_tftello64fseeko64fsetpos64=fgetpos64d=FILEdtmpfile64ofreopen64oofopen64ooff_tftello64# fseeko64I I fsetpos64u N fgetpos64 =  freopen64o   o  fopen64o   tmpfile64o./getprogname.c /var/tmp/sudo-1.8.2/compat /opt/sunstudio12.1/prod/bin/cc -c -I../include -I.. -I.. -I/usr/local/include -L/usr/local/lib -I/usr/local/include -I/usr/local/include -g -D__EXTENSIONS__ -KPIC -DPIC -o .libs/getprogname.o ./getprogname.c -W0,-xp.XAKk4DpM2WgO1lp.Xa;g;P;R=Sun C 5.10 SunOS_i386 Patch 142363-01 2009/07/15;G=.XAKk4DpM2WgO1lp.;backend;raw;cd;DBG_GEN 5.2.7`charprogname;setprognameUnamebase getprogname,šU;6@int strrchrQv E Jv strcmpJ { unsigned charunsigned __FILE _cntJ# _ptr# _base# _flag# _magic# __orientation#  __ionolock#   __seekable#   __extendedfd#   __xf_nocheck#   __filler#  long longoff64_t ftello64  fseeko64J   J fsetpos64J;   fgetpos64Jb  ;FILEbtmpfile64m freopen64m   m fopen64m  off_t ftello64!  fseeko64JG   JG fsetpos64Js  L fgetpos64J  ; freopen64m   m fopen64m  tmpfile64mK ./usr/include/sys../../include/usr/include/iso/usr/include/netinetvisudo.cstat_impl.htypes.hsudo_plugin.htime.hstat.htime_impl.hstdio_impl.hstdio_iso.hpwd.hsignal.hsiginfo.htime.hint_types.hselect.hmissing.hparse.hstdarg_iso.hredblack.hsudoers.hgrp.hinterfaces.hin.hresource.hSSS SSSS T T T 'T@T IT mT tT T T T T T T T T T T T U  U U  Uj\U UU U U U U UU U  V VV V :V]V pV ~V V V VVV V V V V gW gW WWxW X*X 5X HX XX|iX|X XXXX X Y!Y    @S i      ɀ π   % ,P b     ǁ Ձ  ! U i y      ../../src/usr/include/iso/usr/include/syserror.cstdarg_iso.hresource.hstdio_impl.htypes.hstdio_iso.hƂ&̂ ނ ނ   1    * 8 @F<L ^ ^ `fl ~ ~    Ƀ ރ   "   ./usr/include/sys/usr/include/isoalias.cparse.hredblack.htypes.hresource.hstdio_impl.hstdio_iso.h= ń Є ؄     0QX ^ e     ̅ م ߅ # , 6 B U p    dž , @a       ) : K \ jxx    ߈     AO h    ./usr/include/sys/usr/include/isodefaults.cdefaults.hdef_data.cdef_data.htypes.hparse.hpwd.hresource.hstdio_impl.hstdio_iso.h̉ ۉ    " ( 3 N e l w    NJ    ' > D g ~     Nj   ~"( < J e h}| IΌ}> Gn        6 = b܎ p} D_ w |~ ͏ ܏   0 U d l    ݐ     9 Hl         = Le     Ē   : H P X p        A Pi     Ք      9 Ha     ݕ   . 8 <ry і       2 4yI Zvn~  Η   + ; K [s  Ƙ  ! ? O _~  ܙ  * I h    Ț К  E L T    ? F H  c Μ!Ԝ  ( = I T ] h    ȝ ݝ     ( / @ai      ʞ    @ T l x |}   ȟ ϟ   ( > I ` g p à ɠ  $     # 08 D    â Т/ 8@aq  أ     1o x   ͤ       ' 0QY j p y  | ̥      , = K Psks     ͦ ֦  ./usr/include/sys/usr/include/isogram.cgram.yy.tab.cparse.htypes.hstdio_impl.hstdio_iso.hresource.h ? ^ l      AP Y b v      Ѩ        AQ_ h w~ Щ       0Qq   ~Ȫ  # 1~Mm x    ~ث    '~CT ` q    _լ#S/L16K R r      έ ߭  y + < Jqj    Ӯ     0Qe p z    ïگ  . 6 < H Z q x ư ΰ а ܰ      . B P d         ( : L c   6 < q   ϳ Գ% 5 < L]p    M }    ʵ е    4 G LyT \ i p   Զ ܶ   / 4 [ `   ÷ ȷ     O T    ޸   # ? H R ^ dy         - 4 Y `   Ⱥ   S  û ݻ  0 iü   & ,; L k    ̽޽   4 Q ] dy     Ѿ ؾ    ) 6 < Q ^ d y     Ŀѿ ؿ    # 3 8 O g      c h            @ H h p        - 4 C U g      F T \d    " 0 8@b w |          E L q x        ! 3 8] ` z |     " :A h     1 D Tr t        % D c p |          6 ./usr/include/sys../../compat/usr/include/netinet/usr/include/isomatch.cstat_impl.htypes.hpwd.hparse.hstat.htime_impl.hglob.hdirent.hdirent.hinterfaces.hin.hint_types.hgrp.hbyteorder.hresource.hstdio_impl.hstdio_iso.h  - 4 Y `        ) 1 l t  i  e5; Pq      , A H m t       ; T \    iNV Xem        ' @ H    q m! I P` l     , @ah }        A H g {     ick pe   !( 9 J R T}ek     % , ? ^ r z      p39 Pqx     ( / @aq       $5 L d w       ( 4 @j~      2 C Pz         Q T   j    - A ` l s      % [ h        :N Y h       @ D   q  1H T[ l        ' ,~;C Poe}z      2 9 D O h       z * 5 < @ N \k  ~ u} * < O \ m s    0 C t       ( 0Q] o z      ! ; @H a d j         ,S \    ./usr/include/sys/usr/include/isopwutil.cstat_impl.htypes.hpwd.hgrp.hsudoers.hredblack.hresource.hstdio_impl.hstdio_iso.hstat.htime_impl.h    $ 0QW ] v   , U~         Q       ; H T ] g m     1B Pqw      $ 3 = F P k      ! 4 O |        ( 1 @ar{           " 1 ? L d s          . 7aJ#W ] p      8 E S l y        D m x           . 7 F O [ s    |  S[ {          , = FL Z c l x          8 M ] v       t / @ag     ( 1 8Q b }       "/ 8 @ag         2 < H _ i        / = F ] i          & /jBO U `i    " 0QV d       ( 5 C \ i w       + 4 <R Z a r       * B P k        + 4 @ag      !( / LX j u |     }     } .  F  M  M U  c  q  w  < ./usr/include/usr/include/iso/usr/include/systoke.cstdio_impl.hstdio_iso.hstat_impl.htypes.htoke.llex.yy.cdirent.hdirent.hstdio.hstat.htime_impl.hresource.h            +  9  H  V  h  v                    ?  O  Y  i |               L T d  p  |    s   )  6  <           * O \ & 4    ( 5 <     $ 1 8       > c p        p;` l    ^      $ 1 8 q      "    , 9 @y       ( 0 i w     ( 0 iw       < c j     0 <    ; ` l    ) 8ml     @ H m |       tRX    "  0      !f! t!! !>" L"" "# $## ## # #5$ X$ d$ $ $$ $ % %% 4%% % % %,& 8& ]& l&& & & '  ' E' T'' ' ' ' ( -( <(( ((() )Y)|) ) ) )) * $* I* X** * * * * 1+ L+ q+ + + + + + +  ,, r, , , , , ,  - - =- L-- -. $.. .. .Z/ h// / // <0 a0 p0 }0 0 0 0 01 1 b1 u1 1 1 1 1 1 2  2~2 22 2 2 2 2 2 3 =3 i3 p3333 3 3 3 44  4 14 =4 E4d4 j4 p4|4 444 4 4 4 44 4 45  5 5 %5 ,5J5 R5 ^5 j5 p5O5355y55 67 7 ,7O7 `7 q7 7777 7 7 78$878 C8O8a8 l8 |8 8 8 888 8 8 9#9Z/9*99 @9};;; ; ; ;; ;; < < :< O< U< `<<< < < < = = = == M= W= g=|==r== === > > #> /> Q> a> k> {>|>> > > ?!?/? Q? g? l? ??? ? ?? ? @@ @ @ 0@Q@f@ @ @ @ @@@ @  A A.A 9A JA TA dA jA AAA A A A A A A B!B-B ;B DB NBBB BBB B BB C C C "C 0C 5C @CaCC C C C C C C C C C D D D &D 4D :D PDqDDD DDD D E E #E 6E EEaE tE |E EE E EEE E F!F2F @FaFtF FFF FFF F  G  GPGWG ^GhG rG G G G G H 1H8H UHH H H H H I I I I .I 9I @I LI [I gI nIkII I II I I I I J J~J?JNJ bJ qJ J J JJ J J J J JK K K 'K 6K JK [K|fKwK K K K KKK K #L HL YL gL}LL L M DMvVM jM wM M M M M M M MNN ,N MN \N qN N N N NN O (O LO ZO O O O O OyO P cP qP P P P PP 'Q OQ wQ Q Q Q Q Q QRR  R .R ER YR R R R R R R  S %S 3S 8S`S qS SrSS S S  T 5T ]T T T TTT TT T T U U 7U =U jU U U U U UzU U V &V 4V @V FV NV fV V V V V VyV V V VV jW pW { ./usr/include/sys/usr/include/isotoke_util.ctypes.hresource.hstdio_impl.hstdio_iso.hWW>W W W WW WW WW WX X X XX X -X 0Xe}XX X X`X#X XYPY XY yY Y YY Y Y*Z HZ QZ \Z cZ jZ ZZrZZ Z Z[[ [ -[ D[ P[q[[ [ [ [ [[ w\ \ \|\\ \ \ \]] &] 0] D] V] ]] ] ^ &^ 4^ @^U^ ]^ o^ ^ ^ ^ ^ ^ ^^_  _ $_ 3_ 8_ D_ K_z^_ m_ N ./usr/include/sys/usr/include/isoredblack.credblack.hresource.hstdio_impl.htypes.hstdio_iso.h___ __ _ _` ` )` /` @`I`R` ^` n` z` ` ` ` ` ` ` ``` ` `  a a $a 4a @a Ia Ra `aaa aa a a a a|bb b 7b @b hb tb }b bb b b b b b b c c c 'c 4c Dc `coc zc c c c c c c c c c  d`d$)d 0d @dadjdwd d d d}dd dee e 8e De pe |e e e e e e e f f f  f)f?f Of Xf lff f f f f f fff g g $g 5g Cg Pgqgg g ggg g g h 3h Rh `h nh |h h h h h h h h h h i i i *i 0i @iaii i i i i i i i i j j "j /j 9j Ij Uj dj qj ~j j jj j j j j j  k k $k 2k ?k Ik Yk ek tk k k k kQk3k ! ./usr/include/sys/usr/include/isoalloc.ctypes.hstdarg_iso.hresource.hstdio_impl.hstdio_iso.hkl l *l Cl dl jl lll l l m m 'm Hm Nm `mmm m m m n n  nAnQn rn n n n n n  o o  oAoHoPo ao so o o o oooo o o o p %p 3p 9p Ppqpwp p p p p p ppq 1q 7q @qaqiq wq   ./usr/include/sys/usr/include/isofileops.cstat_impl.htypes.htime.hstdio_impl.hstdio_iso.hstat.htime_impl.hqqq qqq r rr PrXr r r rrr r r r r r r rws =s `ssss s ss t (t Tt {t {t tt cv ./usr/include/sys/usr/include/isolist.cresource.hstdio_impl.htypes.hstdio_iso.htt6t t t t t t u u u"u 0u9u?u Eu MuVu bu pu zu u uuu u u u u u uuu u u  v v  v ,v 5v @vIvOv Uv kv uv vv v v v v v v vn ./usr/include/sys/usr/include/isozero_bytes.ctypes.hstdio_impl.hstdio_iso.hw w  w +w :w :w  ./usr/include/sys/usr/include/isogetgrouplist.ctypes.hgrp.hresource.hstdio_impl.hstdio_iso.h@wawhw qw xww w w w w w w w w w~x!x $x3x Dx Hx~Wx_x gx lx xmxxx x x X ./usr/include/sys../compat/usr/include/isoglob.cstat_impl.htypes.hcharclass.hglob.hpwd.hstat.htime_impl.hdirent.hdirent.hresource.hstdio_impl.hstdio_iso.hxxx y:y@y Ky Uy _y jy ty y y y y y y y z Dzz z z z z z zx8{ D{ Q{ l{ { {{{{ {  | *| 4|~M|`| p||| | | | |} } D} D} e} q}|} } } } } } }o}} } ~'~ ,~S~ S~ t~ ~~ ~~ ~~ ~ ~~ ~~ ~ ~Y Y  M  !7+ 2 @a}   ƀ ƀ  6 Q \ h    * * o {    Ղ ݂   {% 0Q] f     ~  - R [ p w ӄ ܄  $ . 6 ? a v ~      х     / E T \ d |   dž І   . 4 F [ ` r    H <'I T_ m    ӈ ڈ * @jv     , 8   ъ ݊     < P Z h t {ȋӋ ܋     (}8 p x Œ Ќ ܌    , 8 g t  č ͍ ٍ J J  Ž ю ؎   A I Lhiw } ʏ   + 5 DZ i    א א    & ? M X    Б     , E T u     Ò    # W g v     ړ    s3; H L p | X~Ĕ-ה  " F Q b~  ڕ    ( < Pz   Ж   6 PYe p   ԗ   ~3:  .../compat/usr/include/sys/usr/include/isofnmatch.ccharclass.htypes.hstdio_impl.hstdio_iso.hPqw |   ̘ ؘ   > L S X b k |  șљ ܙ $ 8 Q ` h{     Ú{֚     V d hp v x x Ǜ ̛ כ    W ` g lМ؜ I P [ ls   Ɲ ͝ ޝ       1 : H \ h s   Ş ٞ        4 @ I P z   џ؟     $ - O X l    |Р۠    | ./usr/include/usr/include/sys/usr/include/isogetprogname.cstdio_impl.htypes.hstdio_iso.h1 J T Z u  ,  DD%. : ; @ ' ID I: ;  $> &III: ' ID  I  4I?  : ;  .?  6 : ; @ ' ID  4I : ;    I8 . : ;@ ' ID I: ; 4I : ;  I !I/I !I/  :  I8 .?  : ;@ ' D .?  : ;@ ' ID .?  : ;@ ' ID . : ;@ ' D D  :   : ! : "' D #.?  : ;@ ' D $. : ;@ ' D % : &( '.? < ' D (.? < ' ID ).? < ' ID *.? < ' D +5I,-.< . DD%. : ; @ ' ID I: ;  $> &III: .?  : ; @ ' ID  4I : ;  I  !I/  :  I8 .? < ' ID I I8 .? < ' ID .<  DD%. : ; @ ' ID I: ;  $> &III: .?  : ; @ ' ID  4I : ;  I  !I/  :  I8 I !I/.? < ' ID I.? < ' D  I8 .? < ' ID .? < ' ID  DD%.?  : ; @ ' D I: ;  4I : ;  $> &II I: . : ; @ ' D  .? < ' D  I .? < ' ID .? < ' ID  :  I8  I8  DD%.?  : ; @ ' ID I: ;  4I : ;  $> &II :  I8  :  ( I  !I/.?  : ; @ ' D ' ID I.?  : ; @ ' ID .?  : ; @ ' D 4I?  : ;  ' D .? < ' D .? < ' ID I:  I8 .? < ' ID  DD%$> I  I8 I!I4I : ;  I  !I/  :  &I ' ID I : ( I:  : I 4I?  : ;  .?  : ; @ ' D .?  : ; @ ' ID I: ;  .?  : ;@ ' D 4I : ; .?  : ;@ ' ID I: ; . : ;@ ' ID . : ;@ ' D .? < ' ID .? < ' D 5I!.? < ' D "# I8 $.? < ' ID  DD%$> 4I?  : ;  I.?  : ; @ ' D I: ;  &II  !I/ I  !I/ 4I?  : ; . : ;@ ' ID I: ; 4I : ;  :  I8 . : ;@ ' D D D  I8 .?  : ;@ ' D   : I: .?  : ;@ ' ID .? < ' D .? < ' ID I.? < ' ID .? < ' D  .? < ' D  DD%. : ; @ ' ID I: ;  $> &III: 4I : ;  D D  :  I8 .?  : ; @ ' ID  . : ;@ ' ID I: ; 4I : ; .?  : ;@ ' ID . : ;@ ID I !I/ ' ID I : I !I/ :  :  .? < ' D .? < ' ID  I8 .? < ' ID !.< " DD%. : ; @ ' ID I: ;  $> &III: 4I : ;    I8  :    .?  : ; @ ' D . : ; @ ' D .?  : ; @ ' ID  : ( .?  : ;@ ' ID I: ; 4I : ; .?  : ;@ ' D . : ;@ ' ID  .?  : ;@ ' D . : ;@ ' D ' ID I' D .? < ' D .? < ' ID 5I !.? < ' D " I8 #.? < ' ID $I %!I/ &.? < ' ID  DD%$> I :  I8  I8 I: I   4I : ;  4I?  : ; &I I !I/4I : ; !I/ . : ; @ ' ID I: ;  ' ID I4I?  : ;  .?  : ;@ ' ID  . : ;@ ' ID I: ; .?  : ;@ ' D .?  : ;@ ' D . : ;@ ' D  : I D D .? < ' D !.? < ' ID ".? < ' ID #$%.< & DD%$> 4I : ;  . : ; @ ' ID I: ;  D D &II .?  : ; @ ' ID  .? < ' D  I .? < ' ID  I:  :  I8  I8 .? < ' ID  DD%.?  : ; @ ' ID I: ;  4I : ;  $> &II' ID  I  :  I8  :  ( . : ; @ ' D  .?  : ;@ ' ID I: ; 4I : ; . : ;@ ' ID . : ;@ ' D ' D .?  : ;@ ' D .? < ' ID .? < ' D I:  I8 .? < ' ID  DD%.?  : ; @ ' ID I: ;  4I : ;  $> II: &I  .?  : ; @ ' D  .? < ' ID  I .? < ' D  :  I8  I8 .? < ' ID  DD%. : ; @ ' ID I: ;  $> &III: .?  : ; @ ' ID  4I : ;   :  I8 I  !I/  I8 I !I/.? < ' ID I.? < ' ID .<  DD%.?  : ; @ ' ID I: ;  4I : ;  $> I  I8 .?  : ; @ ' D  .? < ' ID  I I:  : &I I8 .? < ' ID  DD%.?  : ; @ ' D I: ;  4I : ;  $> 5III:  :  I8 I8 .? < ' ID  I&I.? < ' ID  DD%.?  : ; @ ' ID I: ;  4I : ;  $> &III:  :  I8 .? < ' ID .? < ' D .? < ' ID I I8  DD%. : ; @ ' ID I: ;  $> &III: ' ID  I  :  I8 I !I4I : ;  I !I/ .?  : ; @ ' ID  : II !I/. : ;@ ' ID I: ; 4I : ;  .?  : ;@ ' D .? < ' ID .? < ' ID .? < ' D  I8  .< ! DD%$> &II' ID I :  I8 I !I 4I : ;  I  !I/ .?  : ; @ ' ID I: ;  D D . : ; @ ' ID I: .? < ' ID  I8 .? < ' ID  DD%$> &II4I : ;  .?  : ; @ ' D I: ;  .?  : ; @ ' ID .? < ' ID  I  :  I8 I8 I: .? < ' ID Q:sudo_printfmainw set_fqdn init_envtables user_is_exempt sudo_setspent sudo_endspent group_plugin_queryopen_sudoerscleanuplist_pw4!sudo_user%#interfaces Q:6sudo_goodpathHfind_path<Zy errorerrorxwarning_warningxdb$alias_comparealias_findalias_addZalias_applyno_aliasesalias_freealias_removeinit_aliasestaliasesalias_seqno{ZvPsudo_defs_tabledump_defaultslist_optionsset_defaultZinit_defaultsupdate_defaults(pedantic@verboseWerrorlinenoerrorfileyyerroryylhsyylenKyydefredyyydgotoyysindexyyrindexyygindex8yytablehyycheck init_parser- yyparse yystacksize yyvs yysslim yyssyylvalyyval4yyvspJyyssp`yycharwyyerrflagyynerrsyydebugparse_errorVdefaultsuserspecsD(userlist_matches&runaslist_matcheshostlist_matchescmndlist_matchescmnd_matches command_matchesaddr_matchesAhostname_matchesuserpw_matches4group_matches usergr_matchesnetgr_matches$9pw_addrefpw_delrefsudo_getpwuidsudo_getpwnamY sudo_fakepwnam' sudo_setpwentG sudo_freepwcachej sudo_endpwent gr_addref"gr_delrefQsudo_getgrgidsudo_getgrnam\sudo_fakegrnamgrlist_addrefgrlist_delrefsudo_setgrentsudo_freegrcachesudo_endgrent8get_group_listset_group_listuser_in_groupCc)*yyinyyouttrace_printyylex yyrestart yy_switch_to_bufferV yy_load_buffer_state} yy_create_buffer yy_delete_buffer yy_init_bufferj yy_flush_buffer yy_scan_buffer yy_scan_stringTyy_scan_byteswinit_lexer[sudoersrsudolineno!&yytext&yylengQk fill_txtQappendfill_cmndfill_argsipv6_valid_, -rbcreateCrbinsertrbfind^rbapply_noderbdestroyVrbdelete:> emallocemalloc2@ereallocerealloc3estrdup>estrndupeasprintfHevasprintfefree7Etouchlock_file<sudo_parselnQW* ~tq_popFlist2tqlist_appendtq_appendtq_remove`zero_bytes|fgetgrouplist,o%rpl_globrpl_globfree  8rpl_fnmatch.;setprognamegetprogname9Q:mknodsedit_sudoersreparse_sudoers install_sudoers5 whatnow setup_signalsrun_command|check_syntaxget_editorget_args:get_hostnamealias_remove_recursive*check_aliascheck_aliaseszprint_unused-quitusagehelpvisudo_printfQ:6mknodH mknodZy _warningZvP store_int store_uint store_floatv store_tuple store_str* store_list store_syslogfac logfac2strd store_syslogpri logpri2str store_mode list_op_new_defaultnew_member2add_defaultsadd_userspec yygrowstack D($mknod_userlist_matchesZ_runaslist_matches{_hostlist_matchesK_cmndlist_matchescommand_args_matcht command_matches_fnmatch command_matches_glob command_matches_normal5command_matches_diraddr_matches_ifaddr_matches_if_netmask$'mknodcmp_pwuidWcmp_pwnammake_pwitemfpw_delref_item cmp_grgid make_gritem make_grlist_item gr_delref_itemSgrlist_delref_itemc)*Bmknod yy_get_next_buffer yy_get_previous_stateR yy_try_NUL_transyy_fatal_error/yy_flex_alloctyy_flex_reallocyy_flex_freepl_compareswitch_dir_push_includenpop_includeparse_includek dhexchar[, rotate_leftrotate_right?rbsuccessor_rbdestroyrbrepairEmknodo%~mknodglobexp1/globexp2Eglobtildeg_strncmp|g_charclassd glob0V compare glob15 glob2Rglob3globextendlmatchg_opendirbg_lstatg_statRg_strchrg_Ctoc,  rangematchclassmatchQ:mode_tdev_tsudo_printf_tsudoersfileitime_tvsuseconds_ttimevaloff_tssize_tino_tnlink_t+uid_t7gid_tTtimespectimestruc_tblksize_tblkcnt_tstat __FILE FILE passwd pid_t sigvalAclock_tOctid_tzoneid_tcaddr_tR int32_t.GsiginfoXrsigset_tsigactionsigaction_tKmembermember_listaliascmndtagcmndspeccmndspec_list9privilegeprivilege_listuserspecdefaults`va_listrbcolorrbnoderbtreemsudoersfile_listgroup3group_listsudo_userM!uint8_t[!!uint16_t!!uint32_t! "in_addrK""in6_addr"sudo_in_addr_un"interface+off64_t5rlim64_t"5rlimit645rlim_t5rlimitK6size_to7ino64_t7blkcnt64_t7stat64Q:6mode_tdev_t-ino_t9nlink_tSuid_t_gid_toff_ttime_ttimespectimestruc_tblksize_tblkcnt_t%statoff64_tssize_t__FILEa FILE ino64_t& blkcnt64_tY stat640Hmode_tdev_tino_tnlink_tuid_tgid_t(off_t4time_tAtimespecqtimestruc_tblksize_tblkcnt_tstat)off64_tQssize_t/ size_tJ rlim64_tY rlimit64 rlim_t rlimit __FILE FILEino64_tblkcnt64_t3stat64tZy va_listNrlim64_t]rlimit64rlim_trlimit__FILEoff64_tIFILEoff_tdbmember@member_listoaliasSrbcolorqrbnodeKsudo_command8rbtreearbtraversal off64_t" ssize_t off_t rlim64_t rlimit64_ rlim_tl rlimit __FILEFILE/ZvPAstrmapdef_valuesdef_tuplemode_tlist_memberusudo_defs_types!membertmember_listdefaults8size_tElist_opsouid_t{gid_tpasswd,off64_tTssize_t<off_trlim64_trlimit64"rlim_t/rlimit)__FILEFILE_memberAmember_listpdefaults%cmndtagcmndspec cmndspec_list;privilegeprivilege_listuserspecT sudo_command runascontainerL selinux_info{  YYSTYPE%defaults_listnuserspec_listhoff64_tssize_txoff_t__FILEFILE`rlim64_torlimit64rlim_trlimit3D(mode_tdev_tbuid_tngid_tzpasswd/membermember_listaliasssudo_command ino_t nlink_t off_t( time_t5 timespece timestruc_tw blksize_t blkcnt_t stat size_t glob_tdirentYDIRFuint8_tTuint16_tuint32_tin_addrD~in6_addrsudo_in_addr_uninterfacegroup ino64_toff64_t:dirent64in_addr_t]ssize_t8 rlim64_tG rlimit64 rlim_t rlimit!__FILE#FILE%blkcnt64_t &stat64$mode_tdev_tCuid_tOgid_t`passwd8groupgroup_listcache_item,size_tRrbcolorprbnoderbtreeoff64_tssize_toff_t rlim64_trlimit64rlim_trlimitp__FILEFILEino_tnlink_t time_t! timespecQ timestruc_tc blksize_ts blkcnt_t stat"ino64_t"blkcnt64_t"stat64c)*J__FILE'FILEDyy_size_tSyy_buffer_stateFYY_BUFFER_STATEmode_tdev_tyy_state_type YY_CHARjpath_listinclude_stackxDIRino_toff_t)direntnlink_tuid_tgid_ttime_ttimespectimestruc_tblksize_t blkcnt_tQstatsize_tino64_t)off64_tHdirent64ssize_t rlim64_t rlimit64}!rlim_t!rlimit#blkcnt64_t $stat64k off64_tssize_toff_tsize_trlim64_trlimit64p rlim_t} rlimitD __FILE FILE, rbcolorrbnode/rbtree rbtraversal rlim64_t rlimit64 rlim_t rlimit^ __FILEM off64_t FILE off_t:> size_t:va_list-rlim64_t<rlimit64rlim_trlimit__FILEoff64_tV FILE off_tEmode_t dev_ttime_tsuseconds_ttimeval__FILEFILEsize_tino_tnlink_tuid_tgid_toff_ttimespectimestruc_t$blksize_t4blkcnt_testatE ino64_td off64_tr blkcnt64_t stat64 ssize_tW* list_protolist_head_protorlim64_trlimit64%rlim_t2rlimit__FILEoff64_tsFILE off_tC` size_tF__FILE5off64_tFILEtoff_t||fgid_tgrouprlim64_trlimit64rlim_trlimit;__FILE*off64_tFILEioff_to%mode_tdev_t/cclassQglob_tChar2size_t?uid_tKgid_tWpasswd] ino_ti nlink_t off_t time_t timespec timestruc_t blksize_t blkcnt_t1 statdirent,pDIR;ino64_tIoff64_thdirent64ssize_trlim64_trlimit64Arlim_tNrlimit__FILE FILE"blkcnt64_t#stat64N  cclasssize_t__FILEoff64_tdFILEoff_t8;__FILEoff64_tbFILEoff_t1Q:Palias_freelistsudoerslistHcommanddberrbufZvPfacilitiesfacilitiesprioritiesprioritiesPdef_data_lecturedef_data_lecturedef_data_listpwdef_data_listpw def_data_verifypw;def_data_verifypw~firsttime#D(domainemptyi$grlist_cache grcache_byname&grcache_bygidBpwcache_byname_pwcache_byuidpc)*[yy_current_buffer{yy_c_buf_pyy_inityy_startyy_acceptFyy_ecryy_metayy_baseyy_defyy_nxt,yy_chkkeepopenistackidepthistacksizesawspace*prev_stateCcontinued%yy_last_accepting_cpos%yy_last_accepting_state8&yy_did_buffer_switch_on_eofb&yy_n_chars{&yy_hold_char'k 7arg_lenMarg_sizeEbuf(o%rcclassescclasses(  cclasses!cclasses;progname.interp.SUNW_cap.hash.SUNW_ldynsym.dynsym.dynstr.SUNW_version.SUNW_versym.SUNW_dynsymsort.SUNW_reloc.rel.plt.text.init.fini.rodata.rodata1.got.dynamic.data.bssf.picdata.bss.symtab.strtab.comment.debug_loc.debug_info.debug_line.debug_abbrev.debug_pubnames.debug_funcnames.debug_typenames.debug_varnames.shstrtab od o| | ' /"L(L(S7o??Eop@p@RoCCc HHPo BPHPHX sKKxpRpRUO~ȡȡa%))4..xL0L0l ;;;;;;;P,z h-5@TWeD h~ )S.91?FO JY0707010019563e000041ed0000000000000000000000054e816d9900000000000000b600010002ffffffffffffffff0000001500000000root/usr/local/share07070100195670000041ed0000000000000000000000044e816d9900000000000000b600010002ffffffffffffffff0000001900000000root/usr/local/share/man07070100195671000041ed0000000000000000000000024e816d9900000000000000b600010002ffffffffffffffff0000001f00000000root/usr/local/share/man/man1m07070100195673000081a40000000000000000000000014e816d9400008365000000b600010002ffffffffffffffff0000002b00000000root/usr/local/share/man/man1m/sudoedit.1m.\" Copyright (c) 1994-1996, 1998-2005, 2007-2011 .\" Todd C. Miller .\" .\" Permission to use, copy, modify, and distribute this software for any .\" purpose with or without fee is hereby granted, provided that the above .\" copyright notice and this permission notice appear in all copies. .\" .\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES .\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF .\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR .\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES .\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" .\" Sponsored in part by the Defense Advanced Research Projects .\" Agency (DARPA) and Air Force Research Laboratory, Air Force .\" Materiel Command, USAF, under agreement number F39502-99-1-0512. .\" .nr SL 0 .nr BA 0 .nr LC 0 .nr PT 5 .\" .\" Automatically generated by Pod::Man 2.23 (Pod::Simple 3.14) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` . ds C' 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is turned on, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .ie \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . nr % 0 . rr F .\} .el \{\ . de IX .. .\} .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "SUDO 1m" .TH SUDO 1m "August 17, 2011" "1.8.2" "MAINTENANCE COMMANDS" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" sudo, sudoedit \- execute a command as another user .SH "SYNOPSIS" .IX Header "SYNOPSIS" \&\fBsudo\fR [\fB\-D\fR\ \fIlevel\fR] \fB\-h\fR | \fB\-K\fR | \fB\-k\fR | \fB\-V\fR .PP \&\fBsudo\fR \fB\-v\fR [\fB\-AknS\fR] .if \n(BA [\fB\-a\fR\ \fIauth_type\fR] [\fB\-D\fR\ \fIlevel\fR] [\fB\-g\fR\ \fIgroup\ name\fR|\fI#gid\fR] [\fB\-p\fR\ \fIprompt\fR] [\fB\-u\fR\ \fIuser\ name\fR|\fI#uid\fR] .PP \&\fBsudo\fR \fB\-l[l]\fR [\fB\-AknS\fR] .if \n(BA [\fB\-a\fR\ \fIauth_type\fR] [\fB\-D\fR\ \fIlevel\fR] [\fB\-g\fR\ \fIgroup\ name\fR|\fI#gid\fR] [\fB\-p\fR\ \fIprompt\fR] [\fB\-U\fR\ \fIuser\ name\fR] [\fB\-u\fR\ \fIuser\ name\fR|\fI#uid\fR] [\fIcommand\fR] .PP \&\fBsudo\fR [\fB\-AbEHnPS\fR] .if \n(BA [\fB\-a\fR\ \fIauth_type\fR] [\fB\-C\fR\ \fIfd\fR] [\fB\-D\fR\ \fIlevel\fR] .if \n(LC [\fB\-c\fR\ \fIclass\fR|\fI\-\fR] [\fB\-g\fR\ \fIgroup\ name\fR|\fI#gid\fR] [\fB\-p\fR\ \fIprompt\fR] .if \n(SL [\fB\-r\fR\ \fIrole\fR] [\fB\-t\fR\ \fItype\fR] [\fB\-u\fR\ \fIuser\ name\fR|\fI#uid\fR] [\fB\s-1VAR\s0\fR=\fIvalue\fR] [\fB\-i\fR\ |\ \fB\-s\fR] [\fIcommand\fR] .PP \&\fBsudoedit\fR [\fB\-AnS\fR] .if \n(BA [\fB\-a\fR\ \fIauth_type\fR] [\fB\-C\fR\ \fIfd\fR] .if \n(LC [\fB\-c\fR\ \fIclass\fR|\fI\-\fR] [\fB\-D\fR\ \fIlevel\fR] [\fB\-g\fR\ \fIgroup\ name\fR|\fI#gid\fR] [\fB\-p\fR\ \fIprompt\fR] [\fB\-u\fR\ \fIuser\ name\fR|\fI#uid\fR] file ... .SH "DESCRIPTION" .IX Header "DESCRIPTION" \&\fBsudo\fR allows a permitted user to execute a \fIcommand\fR as the superuser or another user, as specified by the security policy. The real and effective uid and gid are set to match those of the target user, as specified in the password database, and the group vector is initialized based on the group database (unless the \fB\-P\fR option was specified). .PP \&\fBsudo\fR supports a plugin architecture for security policies and input/output logging. Third parties can develop and distribute their own policy and I/O logging modules to work seemlessly with the \fBsudo\fR front end. The default security policy is \fIsudoers\fR, which is configured via the file \fI/usr/local/etc/sudoers\fR, or via \&\s-1LDAP\s0. See the \s-1PLUGINS\s0 section for more information. .PP The security policy determines what privileges, if any, a user has to run \fBsudo\fR. The policy may require that users authenticate themselves with a password or another authentication mechanism. If authentication is required, \fBsudo\fR will exit if the user's password is not entered within a configurable time limit. This limit is policy-specific; the default password prompt timeout for the \&\fIsudoers\fR security policy is .ie \n(PT \f(CW\*(C`5\*(C'\fR minutes. .el unlimited. .PP Security policies may support credential caching to allow the user to run \fBsudo\fR again for a period of time without requiring authentication. The \fIsudoers\fR policy caches credentials for \&\f(CW\*(C`5\*(C'\fR minutes, unless overridden in \fIsudoers\fR\|(4). By running \fBsudo\fR with the \fB\-v\fR option, a user can update the cached credentials without running a \fIcommand\fR. .PP When invoked as \fBsudoedit\fR, the \fB\-e\fR option (described below), is implied. .PP Security policies may log successful and failed attempts to use \&\fBsudo\fR. If an I/O plugin is configured, the running command's input and output may be logged as well. .SH "OPTIONS" .IX Header "OPTIONS" \&\fBsudo\fR accepts the following command line options: .IP "\-A" 12 .IX Item "-A" Normally, if \fBsudo\fR requires a password, it will read it from the user's terminal. If the \fB\-A\fR (\fIaskpass\fR) option is specified, a (possibly graphical) helper program is executed to read the user's password and output the password to the standard output. If the \&\f(CW\*(C`SUDO_ASKPASS\*(C'\fR environment variable is set, it specifies the path to the helper program. Otherwise, if \fI/usr/local/etc/sudo.conf\fR contains a line specifying the askpass program, that value will be used. For example: .Sp .Vb 2 \& # Path to askpass helper program \& Path askpass /usr/X11R6/bin/ssh\-askpass .Ve .Sp If no askpass program is available, sudo will exit with an error. .if \n(BA \{\ .IP "\-a \fItype\fR" 12 .IX Item "-a type" The \fB\-a\fR (\fIauthentication type\fR) option causes \fBsudo\fR to use the specified authentication type when validating the user, as allowed by \fI/etc/login.conf\fR. The system administrator may specify a list of sudo-specific authentication methods by adding an \*(L"auth-sudo\*(R" entry in \fI/etc/login.conf\fR. This option is only available on systems that support \s-1BSD\s0 authentication. \} .IP "\-b" 12 .IX Item "-b" The \fB\-b\fR (\fIbackground\fR) option tells \fBsudo\fR to run the given command in the background. Note that if you use the \fB\-b\fR option you cannot use shell job control to manipulate the process. Most interactive commands will fail to work properly in background mode. .IP "\-C \fIfd\fR" 12 .IX Item "-C fd" Normally, \fBsudo\fR will close all open file descriptors other than standard input, standard output and standard error. The \fB\-C\fR (\fIclose from\fR) option allows the user to specify a starting point above the standard error (file descriptor three). Values less than three are not permitted. The security policy may restrict the user's ability to use the \fB\-C\fR option. The \fIsudoers\fR policy only permits use of the \fB\-C\fR option when the administrator has enabled the \fIclosefrom_override\fR option. .if \n(LC \{\ .IP "\-c \fIclass\fR" 12 .IX Item "-c class" The \fB\-c\fR (\fIclass\fR) option causes \fBsudo\fR to run the specified command with resources limited by the specified login class. The \fIclass\fR argument can be either a class name as defined in \fI/etc/login.conf\fR, or a single '\-' character. Specifying a \fIclass\fR of \f(CW\*(C`\-\*(C'\fR indicates that the command should be run restricted by the default login capabilities for the user the command is run as. If the \fIclass\fR argument specifies an existing user class, the command must be run as root, or the \fBsudo\fR command must be run from a shell that is already root. This option is only available on systems with \s-1BSD\s0 login classes. \} .IP "\-D \fIlevel\fR" 12 .IX Item "-D level" Enable debugging of \fBsudo\fR plugins and \fBsudo\fR itself. The \fIlevel\fR may be a value from 1 through 9. .IP "\-E" 12 .IX Item "-E" The \fB\-E\fR (\fIpreserve\fR \fIenvironment\fR) option indicates to the security policy that the user wishes to preserve their existing environment variables. The security policy may return an error if the \fB\-E\fR option is specified and the user does not have permission to preserve the environment. .IP "\-e" 12 .IX Item "-e" The \fB\-e\fR (\fIedit\fR) option indicates that, instead of running a command, the user wishes to edit one or more files. In lieu of a command, the string \*(L"sudoedit\*(R" is used when consulting the security policy. If the user is authorized by the policy, the following steps are taken: .RS 12 .IP "1." 4 Temporary copies are made of the files to be edited with the owner set to the invoking user. .IP "2." 4 The editor specified by the policy is run to edit the temporary files. The \fIsudoers\fR policy uses the \f(CW\*(C`SUDO_EDITOR\*(C'\fR, \f(CW\*(C`VISUAL\*(C'\fR and \f(CW\*(C`EDITOR\*(C'\fR environment variables (in that order). If none of \f(CW\*(C`SUDO_EDITOR\*(C'\fR, \&\f(CW\*(C`VISUAL\*(C'\fR or \f(CW\*(C`EDITOR\*(C'\fR are set, the first program listed in the \&\fIeditor\fR \fIsudoers\fR\|(4) option is used. .IP "3." 4 If they have been modified, the temporary files are copied back to their original location and the temporary versions are removed. .RE .RS 12 .Sp If the specified file does not exist, it will be created. Note that unlike most commands run by \fBsudo\fR, the editor is run with the invoking user's environment unmodified. If, for some reason, \&\fBsudo\fR is unable to update a file with its edited version, the user will receive a warning and the edited copy will remain in a temporary file. .RE .IP "\-g \fIgroup\fR" 12 .IX Item "-g group" Normally, \fBsudo\fR runs a command with the primary group set to the one specified by the password database for the user the command is being run as (by default, root). The \fB\-g\fR (\fIgroup\fR) option causes \&\fBsudo\fR to run the command with the primary group set to \fIgroup\fR instead. To specify a \fIgid\fR instead of a \fIgroup name\fR, use \&\fI#gid\fR. When running commands as a \fIgid\fR, many shells require that the '#' be escaped with a backslash ('\e'). If no \fB\-u\fR option is specified, the command will be run as the invoking user (not root). In either case, the primary group will be set to \fIgroup\fR. .IP "\-H" 12 .IX Item "-H" The \fB\-H\fR (\fI\s-1HOME\s0\fR) option requests that the security policy set the \f(CW\*(C`HOME\*(C'\fR environment variable to the home directory of the target user (root by default) as specified by the password database. Depending on the policy, this may be the default behavior. .IP "\-h" 12 .IX Item "-h" The \fB\-h\fR (\fIhelp\fR) option causes \fBsudo\fR to print a short help message to the standard output and exit. .IP "\-i [command]" 12 .IX Item "-i [command]" The \fB\-i\fR (\fIsimulate initial login\fR) option runs the shell specified by the password database entry of the target user as a login shell. This means that login-specific resource files such as \f(CW\*(C`.profile\*(C'\fR or \f(CW\*(C`.login\*(C'\fR will be read by the shell. If a command is specified, it is passed to the shell for execution via the shell's \fB\-c\fR option. If no command is specified, an interactive shell is executed. \&\fBsudo\fR attempts to change to that user's home directory before running the shell. The security policy shall initialize the environment to a minimal set of variables, similar to what is present when a user logs in. The \fICommand Environment\fR section in the \&\fIsudoers\fR\|(4) manual documents how the \fB\-i\fR option affects the environment in which a command is run when the \fIsudoers\fR policy is in use. .IP "\-K" 12 .IX Item "-K" The \fB\-K\fR (sure \fIkill\fR) option is like \fB\-k\fR except that it removes the user's cached credentials entirely and may not be used in conjunction with a command or other option. This option does not require a password. Not all security policies support credential caching. .IP "\-k [command]" 12 .IX Item "-k [command]" When used alone, the \fB\-k\fR (\fIkill\fR) option to \fBsudo\fR invalidates the user's cached credentials. The next time \fBsudo\fR is run a password will be required. This option does not require a password and was added to allow a user to revoke \fBsudo\fR permissions from a \&.logout file. Not all security policies support credential caching. .Sp When used in conjunction with a command or an option that may require a password, the \fB\-k\fR option will cause \fBsudo\fR to ignore the user's cached credentials. As a result, \fBsudo\fR will prompt for a password (if one is required by the security policy) and will not update the user's cached credentials. .IP "\-l[l] [\fIcommand\fR]" 12 .IX Item "-l[l] [command]" If no \fIcommand\fR is specified, the \fB\-l\fR (\fIlist\fR) option will list the allowed (and forbidden) commands for the invoking user (or the user specified by the \fB\-U\fR option) on the current host. If a \&\fIcommand\fR is specified and is permitted by the security policy, the fully-qualified path to the command is displayed along with any command line arguments. If \fIcommand\fR is specified but not allowed, \&\fBsudo\fR will exit with a status value of 1. If the \fB\-l\fR option is specified with an \fBl\fR argument (i.e. \fB\-ll\fR), or if \fB\-l\fR is specified multiple times, a longer list format is used. .IP "\-n" 12 .IX Item "-n" The \fB\-n\fR (\fInon-interactive\fR) option prevents \fBsudo\fR from prompting the user for a password. If a password is required for the command to run, \fBsudo\fR will display an error messages and exit. .IP "\-P" 12 .IX Item "-P" The \fB\-P\fR (\fIpreserve\fR \fIgroup vector\fR) option causes \fBsudo\fR to preserve the invoking user's group vector unaltered. By default, the \fIsudoers\fR policy will initialize the group vector to the list of groups the target user is in. The real and effective group IDs, however, are still set to match the target user. .IP "\-p \fIprompt\fR" 12 .IX Item "-p prompt" The \fB\-p\fR (\fIprompt\fR) option allows you to override the default password prompt and use a custom one. The following percent (`\f(CW\*(C`%\*(C'\fR') escapes are supported by the \fIsudoers\fR policy: .RS 12 .ie n .IP "%H" 4 .el .IP "\f(CW%H\fR" 4 .IX Item "%H" expanded to the host name including the domain name (on if the machine's host name is fully qualified or the \fIfqdn\fR option is set in \fIsudoers\fR\|(4)) .ie n .IP "%h" 4 .el .IP "\f(CW%h\fR" 4 .IX Item "%h" expanded to the local host name without the domain name .ie n .IP "%p" 4 .el .IP "\f(CW%p\fR" 4 .IX Item "%p" expanded to the name of the user whose password is being requested (respects the \fIrootpw\fR, \fItargetpw\fR and \fIrunaspw\fR flags in \&\fIsudoers\fR\|(4)) .ie n .IP "%U" 4 .el .IP "\f(CW%U\fR" 4 .IX Item "%U" expanded to the login name of the user the command will be run as (defaults to root unless the \f(CW\*(C`\-u\*(C'\fR option is also specified) .ie n .IP "%u" 4 .el .IP "\f(CW%u\fR" 4 .IX Item "%u" expanded to the invoking user's login name .ie n .IP "\*(C`%%\*(C'" 4 .el .IP "\f(CW\*(C`%%\*(C'\fR" 4 .IX Item "%%" two consecutive \f(CW\*(C`%\*(C'\fR characters are collapsed into a single \f(CW\*(C`%\*(C'\fR character .RE .RS 12 .Sp The prompt specified by the \fB\-p\fR option will override the system password prompt on systems that support \s-1PAM\s0 unless the \&\fIpassprompt_override\fR flag is disabled in \fIsudoers\fR. .RE .if \n(SL \{\ .IP "\-r \fIrole\fR" 12 .IX Item "-r role" The \fB\-r\fR (\fIrole\fR) option causes the new (SELinux) security context to have the role specified by \fIrole\fR. \} .IP "\-S" 12 .IX Item "-S" The \fB\-S\fR (\fIstdin\fR) option causes \fBsudo\fR to read the password from the standard input instead of the terminal device. The password must be followed by a newline character. .IP "\-s [command]" 12 .IX Item "-s [command]" The \fB\-s\fR (\fIshell\fR) option runs the shell specified by the \fI\s-1SHELL\s0\fR environment variable if it is set or the shell as specified in the password database. If a command is specified, it is passed to the shell for execution via the shell's \fB\-c\fR option. If no command is specified, an interactive shell is executed. .if \n(SL \{\ .IP "\-t \fItype\fR" 12 .IX Item "-t type" The \fB\-t\fR (\fItype\fR) option causes the new (SELinux) security context to have the type specified by \fItype\fR. If no type is specified, the default type is derived from the specified role. \} .IP "\-U \fIuser\fR" 12 .IX Item "-U user" The \fB\-U\fR (\fIother user\fR) option is used in conjunction with the \&\fB\-l\fR option to specify the user whose privileges should be listed. The security policy may restrict listing other users' privileges. The \fIsudoers\fR policy only allows root or a user with the \f(CW\*(C`ALL\*(C'\fR privilege on the current host to use this option. .IP "\-u \fIuser\fR" 12 .IX Item "-u user" The \fB\-u\fR (\fIuser\fR) option causes \fBsudo\fR to run the specified command as a user other than \fIroot\fR. To specify a \fIuid\fR instead of a \fIuser name\fR, use \fI#uid\fR. When running commands as a \fIuid\fR, many shells require that the '#' be escaped with a backslash ('\e'). Security policies may restrict \fIuid\fRs to those listed in the password database. The \fIsudoers\fR policy allows \fIuid\fRs that are not in the password database as long as the \fItargetpw\fR option is not set. Other security policies may not support this. .IP "\-V" 12 .IX Item "-V" The \fB\-V\fR (\fIversion\fR) option causes \fBsudo\fR to print its version string and the version string of the security policy plugin and any I/O plugins. If the invoking user is already root the \fB\-V\fR option will display the arguments passed to configure when \fIsudo\fR was built and plugins may display more verbose information such as default options. .IP "\-v" 12 .IX Item "-v" When given the \fB\-v\fR (\fIvalidate\fR) option, \fBsudo\fR will update the user's cached credentials, authenticating the user's password if necessary. For the \fIsudoers\fR plugin, this extends the \fBsudo\fR timeout for another \f(CW\*(C`5\*(C'\fR minutes (or whatever the timeout is set to in \fIsudoers\fR) but does not run a command. Not all security policies support cached credentials. .IP "\-\-" 12 The \fB\-\-\fR option indicates that \fBsudo\fR should stop processing command line arguments. .PP Environment variables to be set for the command may also be passed on the command line in the form of \fB\s-1VAR\s0\fR=\fIvalue\fR, e.g. \&\fB\s-1LD_LIBRARY_PATH\s0\fR=\fI/usr/local/pkg/lib\fR. Variables passed on the command line are subject to the same restrictions as normal environment variables with one important exception. If the \fIsetenv\fR option is set in \fIsudoers\fR, the command to be run has the \f(CW\*(C`SETENV\*(C'\fR tag set or the command matched is \f(CW\*(C`ALL\*(C'\fR, the user may set variables that would overwise be forbidden. See \fIsudoers\fR\|(4) for more information. .SH "PLUGINS" .IX Header "PLUGINS" Plugins are dynamically loaded based on the contents of the \&\fI/usr/local/etc/sudo.conf\fR file. If no \fI/usr/local/etc/sudo.conf\fR file is present, or it contains no \f(CW\*(C`Plugin\*(C'\fR lines, \fBsudo\fR will use the traditional \fIsudoers\fR security policy and I/O logging, which corresponds to the following \fI/usr/local/etc/sudo.conf\fR file. .PP .Vb 10 \& # \& # Default /usr/local/etc/sudo.conf file \& # \& # Format: \& # Plugin plugin_name plugin_path \& # Path askpass /path/to/askpass \& # Path noexec /path/to/noexec.so \& # \& # The plugin_path is relative to /usr/local/libexec unless \& # fully qualified. \& # The plugin_name corresponds to a global symbol in the plugin \& # that contains the plugin interface structure. \& # \& Plugin policy_plugin sudoers.so \& Plugin io_plugin sudoers.so .Ve .PP A \f(CW\*(C`Plugin\*(C'\fR line consists of the \f(CW\*(C`Plugin\*(C'\fR keyword, followed by the \&\fIsymbol_name\fR and the \fIpath\fR to the shared object containing the plugin. The \fIsymbol_name\fR is the name of the \f(CW\*(C`struct policy_plugin\*(C'\fR or \f(CW\*(C`struct io_plugin\*(C'\fR in the plugin shared object. The \fIpath\fR may be fully qualified or relative. If not fully qualified it is relative to the \fI/usr/local/libexec\fR directory. Any additional parameters after the \fIpath\fR are ignored. Lines that don't begin with \f(CW\*(C`Plugin\*(C'\fR or \f(CW\*(C`Path\*(C'\fR are silently ignored .PP For more information, see the \fIsudo_plugin\fR\|(1m) manual. .SH "PATHS" .IX Header "PATHS" A \f(CW\*(C`Path\*(C'\fR line consists of the \f(CW\*(C`Path\*(C'\fR keyword, followed by the name of the path to set and its value. E.g. .PP .Vb 2 \& Path noexec /usr/local/libexec/sudo_noexec.so \& Path askpass /usr/X11R6/bin/ssh\-askpass .Ve .PP The following plugin-agnostic paths may be set in the \&\fI/usr/local/etc/sudo.conf\fR file. .IP "askpass" 16 .IX Item "askpass" The fully qualified path to a helper program used to read the user's password when no terminal is available. This may be the case when \&\fBsudo\fR is executed from a graphical (as opposed to text-based) application. The program specified by \fIaskpass\fR should display the argument passed to it as the prompt and write the user's password to the standard output. The value of \fIaskpass\fR may be overridden by the \f(CW\*(C`SUDO_ASKPASS\*(C'\fR environment variable. .IP "noexec" 16 .IX Item "noexec" The fully-qualified path to a shared library containing dummy versions of the \fIexecv()\fR, \fIexecve()\fR and \fIfexecve()\fR library functions that just return an error. This is used to implement the \fInoexec\fR functionality on systems that support \f(CW\*(C`LD_PRELOAD\*(C'\fR or its equivalent. Defaults to \fI/usr/local/libexec/sudo_noexec.so\fR. .SH "RETURN VALUES" .IX Header "RETURN VALUES" Upon successful execution of a program, the exit status from \fBsudo\fR will simply be the exit status of the program that was executed. .PP Otherwise, \fBsudo\fR exits with a value of 1 if there is a configuration/permission problem or if \fBsudo\fR cannot execute the given command. In the latter case the error string is printed to the standard error. If \fBsudo\fR cannot \fIstat\fR\|(2) one or more entries in the user's \f(CW\*(C`PATH\*(C'\fR, an error is printed on stderr. (If the directory does not exist or if it is not really a directory, the entry is ignored and no error is printed.) This should not happen under normal circumstances. The most common reason for \fIstat\fR\|(2) to return \*(L"permission denied\*(R" is if you are running an automounter and one of the directories in your \f(CW\*(C`PATH\*(C'\fR is on a machine that is currently unreachable. .SH "SECURITY NOTES" .IX Header "SECURITY NOTES" \&\fBsudo\fR tries to be safe when executing external commands. .PP To prevent command spoofing, \fBsudo\fR checks \*(L".\*(R" and "" (both denoting current directory) last when searching for a command in the user's \&\s-1PATH\s0 (if one or both are in the \s-1PATH\s0). Note, however, that the actual \f(CW\*(C`PATH\*(C'\fR environment variable is \fInot\fR modified and is passed unchanged to the program that \fBsudo\fR executes. .PP Please note that \fBsudo\fR will normally only log the command it explicitly runs. If a user runs a command such as \f(CW\*(C`sudo su\*(C'\fR or \&\f(CW\*(C`sudo sh\*(C'\fR, subsequent commands run from that shell are not subject to \fBsudo\fR's security policy. The same is true for commands that offer shell escapes (including most editors). If I/O logging is enabled, subsequent commands will have their input and/or output logged, but there will not be traditional logs for those commands. Because of this, care must be taken when giving users access to commands via \fBsudo\fR to verify that the command does not inadvertently give the user an effective root shell. For more information, please see the \f(CW\*(C`PREVENTING SHELL ESCAPES\*(C'\fR section in \fIsudoers\fR\|(4). .SH "ENVIRONMENT" .IX Header "ENVIRONMENT" \&\fBsudo\fR utilizes the following environment variables. The security policy has control over the content of the command's environment. .ie n .IP "\*(C`EDITOR\*(C'" 16 .el .IP "\f(CW\*(C`EDITOR\*(C'\fR" 16 .IX Item "EDITOR" Default editor to use in \fB\-e\fR (sudoedit) mode if neither \f(CW\*(C`SUDO_EDITOR\*(C'\fR nor \f(CW\*(C`VISUAL\*(C'\fR is set .ie n .IP "\*(C`MAIL\*(C'" 16 .el .IP "\f(CW\*(C`MAIL\*(C'\fR" 16 .IX Item "MAIL" In \fB\-i\fR mode or when \fIenv_reset\fR is enabled in \fIsudoers\fR, set to the mail spool of the target user .ie n .IP "\*(C`HOME\*(C'" 16 .el .IP "\f(CW\*(C`HOME\*(C'\fR" 16 .IX Item "HOME" Set to the home directory of the target user if \fB\-i\fR or \fB\-H\fR are specified, \fIenv_reset\fR or \fIalways_set_home\fR are set in \fIsudoers\fR, or when the \fB\-s\fR option is specified and \fIset_home\fR is set in \&\fIsudoers\fR .ie n .IP "\*(C`PATH\*(C'" 16 .el .IP "\f(CW\*(C`PATH\*(C'\fR" 16 .IX Item "PATH" May be overridden by the security policy. .ie n .IP "\*(C`SHELL\*(C'" 16 .el .IP "\f(CW\*(C`SHELL\*(C'\fR" 16 .IX Item "SHELL" Used to determine shell to run with \f(CW\*(C`\-s\*(C'\fR option .ie n .IP "\*(C`SUDO_ASKPASS\*(C'" 16 .el .IP "\f(CW\*(C`SUDO_ASKPASS\*(C'\fR" 16 .IX Item "SUDO_ASKPASS" Specifies the path to a helper program used to read the password if no terminal is available or if the \f(CW\*(C`\-A\*(C'\fR option is specified. .ie n .IP "\*(C`SUDO_COMMAND\*(C'" 16 .el .IP "\f(CW\*(C`SUDO_COMMAND\*(C'\fR" 16 .IX Item "SUDO_COMMAND" Set to the command run by sudo .ie n .IP "\*(C`SUDO_EDITOR\*(C'" 16 .el .IP "\f(CW\*(C`SUDO_EDITOR\*(C'\fR" 16 .IX Item "SUDO_EDITOR" Default editor to use in \fB\-e\fR (sudoedit) mode .ie n .IP "\*(C`SUDO_GID\*(C'" 16 .el .IP "\f(CW\*(C`SUDO_GID\*(C'\fR" 16 .IX Item "SUDO_GID" Set to the group \s-1ID\s0 of the user who invoked sudo .ie n .IP "\*(C`SUDO_PROMPT\*(C'" 16 .el .IP "\f(CW\*(C`SUDO_PROMPT\*(C'\fR" 16 .IX Item "SUDO_PROMPT" Used as the default password prompt .ie n .IP "\*(C`SUDO_PS1\*(C'" 16 .el .IP "\f(CW\*(C`SUDO_PS1\*(C'\fR" 16 .IX Item "SUDO_PS1" If set, \f(CW\*(C`PS1\*(C'\fR will be set to its value for the program being run .ie n .IP "\*(C`SUDO_UID\*(C'" 16 .el .IP "\f(CW\*(C`SUDO_UID\*(C'\fR" 16 .IX Item "SUDO_UID" Set to the user \s-1ID\s0 of the user who invoked sudo .ie n .IP "\*(C`SUDO_USER\*(C'" 16 .el .IP "\f(CW\*(C`SUDO_USER\*(C'\fR" 16 .IX Item "SUDO_USER" Set to the login of the user who invoked sudo .ie n .IP "\*(C`USER\*(C'" 16 .el .IP "\f(CW\*(C`USER\*(C'\fR" 16 .IX Item "USER" Set to the target user (root unless the \fB\-u\fR option is specified) .ie n .IP "\*(C`VISUAL\*(C'" 16 .el .IP "\f(CW\*(C`VISUAL\*(C'\fR" 16 .IX Item "VISUAL" Default editor to use in \fB\-e\fR (sudoedit) mode if \f(CW\*(C`SUDO_EDITOR\*(C'\fR is not set .SH "FILES" .IX Header "FILES" .ie n .IP "\fI/usr/local/etc/sudo.conf\fR" 24 .el .IP "\fI/usr/local/etc/sudo.conf\fR" 24 .IX Item "/usr/local/etc/sudo.conf" \&\fBsudo\fR plugin and path configuration .SH "EXAMPLES" .IX Header "EXAMPLES" Note: the following examples assume a properly configured security policy. .PP To get a file listing of an unreadable directory: .PP .Vb 1 \& $ sudo ls /usr/local/protected .Ve .PP To list the home directory of user yaz on a machine where the file system holding ~yaz is not exported as root: .PP .Vb 1 \& $ sudo \-u yaz ls ~yaz .Ve .PP To edit the \fIindex.html\fR file as user www: .PP .Vb 1 \& $ sudo \-u www vi ~www/htdocs/index.html .Ve .PP To view system logs only accessible to root and users in the adm group: .PP .Vb 1 \& $ sudo \-g adm view /var/log/syslog .Ve .PP To run an editor as jim with a different primary group: .PP .Vb 1 \& $ sudo \-u jim \-g audio vi ~jim/sound.txt .Ve .PP To shutdown a machine: .PP .Vb 1 \& $ sudo shutdown \-r +15 "quick reboot" .Ve .PP To make a usage listing of the directories in the /home partition. Note that this runs the commands in a sub-shell to make the \f(CW\*(C`cd\*(C'\fR and file redirection work. .PP .Vb 1 \& $ sudo sh \-c "cd /home ; du \-s * | sort \-rn > USAGE" .Ve .SH "SEE ALSO" .IX Header "SEE ALSO" \&\fIgrep\fR\|(1), \fIsu\fR\|(1), \fIstat\fR\|(2), .if \n(LC \&\fIlogin_cap\fR\|(3), \&\fIpasswd\fR\|(4), \fIsudoers\fR\|(4), \fIsudo_plugin\fR\|(1m), \fIsudoreplay\fR\|(1m), \fIvisudo\fR\|(1m) .SH "AUTHORS" .IX Header "AUTHORS" Many people have worked on \fBsudo\fR over the years; this version consists of code written primarily by: .PP .Vb 1 \& Todd C. Miller .Ve .PP See the \s-1HISTORY\s0 file in the \fBsudo\fR distribution or visit http://www.sudo.ws/sudo/history.html for a short history of \fBsudo\fR. .SH "CAVEATS" .IX Header "CAVEATS" There is no easy way to prevent a user from gaining a root shell if that user is allowed to run arbitrary commands via \fBsudo\fR. Also, many programs (such as editors) allow the user to run commands via shell escapes, thus avoiding \fBsudo\fR's checks. However, on most systems it is possible to prevent shell escapes with the \&\fIsudoers\fR\|(4) module's \fInoexec\fR functionality. .PP It is not meaningful to run the \f(CW\*(C`cd\*(C'\fR command directly via sudo, e.g., .PP .Vb 1 \& $ sudo cd /usr/local/protected .Ve .PP since when the command exits the parent process (your shell) will still be the same. Please see the \s-1EXAMPLES\s0 section for more information. .PP Running shell scripts via \fBsudo\fR can expose the same kernel bugs that make setuid shell scripts unsafe on some operating systems (if your \s-1OS\s0 has a /dev/fd/ directory, setuid shell scripts are generally safe). .SH "BUGS" .IX Header "BUGS" If you feel you have found a bug in \fBsudo\fR, please submit a bug report at http://www.sudo.ws/sudo/bugs/ .SH "SUPPORT" .IX Header "SUPPORT" Limited free support is available via the sudo-users mailing list, see http://www.sudo.ws/mailman/listinfo/sudo\-users to subscribe or search the archives. .SH "DISCLAIMER" .IX Header "DISCLAIMER" \&\fBsudo\fR is provided ``\s-1AS\s0 \s-1IS\s0'' and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. See the \s-1LICENSE\s0 file distributed with \fBsudo\fR or http://www.sudo.ws/sudo/license.html for complete details. 07070100195675000081a40000000000000000000000014e816d940000311f000000b600010002ffffffffffffffff0000002900000000root/usr/local/share/man/man1m/visudo.1m.\" Copyright (c) 1996,1998-2005, 2007-2011 .\" Todd C. Miller .\" .\" Permission to use, copy, modify, and distribute this software for any .\" purpose with or without fee is hereby granted, provided that the above .\" copyright notice and this permission notice appear in all copies. .\" .\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES .\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF .\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR .\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES .\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" .\" Sponsored in part by the Defense Advanced Research Projects .\" Agency (DARPA) and Air Force Research Laboratory, Air Force .\" Materiel Command, USAF, under agreement number F39502-99-1-0512. .\" .\" Automatically generated by Pod::Man 2.23 (Pod::Simple 3.14) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` . ds C' 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is turned on, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .ie \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . nr % 0 . rr F .\} .el \{\ . de IX .. .\} .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "VISUDO 1m" .TH VISUDO 1m "August 17, 2011" "1.8.2" "MAINTENANCE COMMANDS" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" visudo \- edit the sudoers file .SH "SYNOPSIS" .IX Header "SYNOPSIS" \&\fBvisudo\fR [\fB\-chqsV\fR] [\fB\-f\fR \fIsudoers\fR] .SH "DESCRIPTION" .IX Header "DESCRIPTION" \&\fBvisudo\fR edits the \fIsudoers\fR file in a safe fashion, analogous to \&\fIvipw\fR\|(1m). \fBvisudo\fR locks the \fIsudoers\fR file against multiple simultaneous edits, provides basic sanity checks, and checks for parse errors. If the \fIsudoers\fR file is currently being edited you will receive a message to try again later. .PP There is a hard-coded list of one or more editors that \fBvisudo\fR will use set at compile-time that may be overridden via the \fIeditor\fR \fIsudoers\fR \&\f(CW\*(C`Default\*(C'\fR variable. This list defaults to \f(CW"/usr/bin/vi"\fR. Normally, \&\fBvisudo\fR does not honor the \f(CW\*(C`VISUAL\*(C'\fR or \f(CW\*(C`EDITOR\*(C'\fR environment variables unless they contain an editor in the aforementioned editors list. However, if \fBvisudo\fR is configured with the \fI\-\-with\-env\-editor\fR option or the \fIenv_editor\fR \f(CW\*(C`Default\*(C'\fR variable is set in \fIsudoers\fR, \&\fBvisudo\fR will use any the editor defines by \f(CW\*(C`VISUAL\*(C'\fR or \f(CW\*(C`EDITOR\*(C'\fR. Note that this can be a security hole since it allows the user to execute any program they wish simply by setting \f(CW\*(C`VISUAL\*(C'\fR or \f(CW\*(C`EDITOR\*(C'\fR. .PP \&\fBvisudo\fR parses the \fIsudoers\fR file after the edit and will not save the changes if there is a syntax error. Upon finding an error, \fBvisudo\fR will print a message stating the line number(s) where the error occurred and the user will receive the \&\*(L"What now?\*(R" prompt. At this point the user may enter \*(L"e\*(R" to re-edit the \fIsudoers\fR file, \*(L"x\*(R" to exit without saving the changes, or \*(L"Q\*(R" to quit and save changes. The \&\*(L"Q\*(R" option should be used with extreme care because if \fBvisudo\fR believes there to be a parse error, so will \fBsudo\fR and no one will be able to \fBsudo\fR again until the error is fixed. If \*(L"e\*(R" is typed to edit the \fIsudoers\fR file after a parse error has been detected, the cursor will be placed on the line where the error occurred (if the editor supports this feature). .SH "OPTIONS" .IX Header "OPTIONS" \&\fBvisudo\fR accepts the following command line options: .IP "\-c" 12 .IX Item "-c" Enable \fBcheck-only\fR mode. The existing \fIsudoers\fR file will be checked for syntax and a message will be printed to the standard output detailing the status of \fIsudoers\fR. If the syntax check completes successfully, \fBvisudo\fR will exit with a value of 0. If a syntax error is encountered, \&\fBvisudo\fR will exit with a value of 1. .IP "\-f \fIsudoers\fR" 12 .IX Item "-f sudoers" Specify and alternate \fIsudoers\fR file location. With this option \&\fBvisudo\fR will edit (or check) the \fIsudoers\fR file of your choice, instead of the default, \fI/usr/local/etc/sudoers\fR. The lock file used is the specified \fIsudoers\fR file with \*(L".tmp\*(R" appended to it. In \fBcheck-only\fR mode only, the argument to \fB\-f\fR may be \*(L"\-\*(R", indicating that \fIsudoers\fR will be read from the standard input. .IP "\-h" 12 .IX Item "-h" The \fB\-h\fR (\fIhelp\fR) option causes \fBvisudo\fR to print a short help message to the standard output and exit. .IP "\-q" 12 .IX Item "-q" Enable \fBquiet\fR mode. In this mode details about syntax errors are not printed. This option is only useful when combined with the \fB\-c\fR option. .IP "\-s" 12 .IX Item "-s" Enable \fBstrict\fR checking of the \fIsudoers\fR file. If an alias is used before it is defined, \fBvisudo\fR will consider this a parse error. Note that it is not possible to differentiate between an alias and a host name or user name that consists solely of uppercase letters, digits, and the underscore ('_') character. .IP "\-V" 12 .IX Item "-V" The \fB\-V\fR (version) option causes \fBvisudo\fR to print its version number and exit. .SH "ENVIRONMENT" .IX Header "ENVIRONMENT" The following environment variables may be consulted depending on the value of the \fIeditor\fR and \fIenv_editor\fR \fIsudoers\fR variables: .ie n .IP "\*(C`VISUAL\*(C'" 16 .el .IP "\f(CW\*(C`VISUAL\*(C'\fR" 16 .IX Item "VISUAL" Invoked by visudo as the editor to use .ie n .IP "\*(C`EDITOR\*(C'" 16 .el .IP "\f(CW\*(C`EDITOR\*(C'\fR" 16 .IX Item "EDITOR" Used by visudo if \s-1VISUAL\s0 is not set .SH "FILES" .IX Header "FILES" .ie n .IP "\fI/usr/local/etc/sudoers\fR" 24 .el .IP "\fI/usr/local/etc/sudoers\fR" 24 .IX Item "/usr/local/etc/sudoers" List of who can run what .ie n .IP "\fI/usr/local/etc/sudoers.tmp\fR" 24 .el .IP "\fI/usr/local/etc/sudoers.tmp\fR" 24 .IX Item "/usr/local/etc/sudoers.tmp" Lock file for visudo .SH "DIAGNOSTICS" .IX Header "DIAGNOSTICS" .IP "sudoers file busy, try again later." 4 .IX Item "sudoers file busy, try again later." Someone else is currently editing the \fIsudoers\fR file. .ie n .IP "/usr/local/etc/sudoers.tmp: Permission denied" 4 .el .IP "\f(CW@sysconfdir\fR@/sudoers.tmp: Permission denied" 4 .IX Item "/usr/local/etc/sudoers.tmp: Permission denied" You didn't run \fBvisudo\fR as root. .IP "Can't find you in the passwd database" 4 .IX Item "Can't find you in the passwd database" Your userid does not appear in the system passwd file. .IP "Warning: {User,Runas,Host,Cmnd}_Alias referenced but not defined" 4 .IX Item "Warning: {User,Runas,Host,Cmnd}_Alias referenced but not defined" Either you are trying to use an undeclare {User,Runas,Host,Cmnd}_Alias or you have a user or host name listed that consists solely of uppercase letters, digits, and the underscore ('_') character. In the latter case, you can ignore the warnings (\fBsudo\fR will not complain). In \fB\-s\fR (strict) mode these are errors, not warnings. .IP "Warning: unused {User,Runas,Host,Cmnd}_Alias" 4 .IX Item "Warning: unused {User,Runas,Host,Cmnd}_Alias" The specified {User,Runas,Host,Cmnd}_Alias was defined but never used. You may wish to comment out or remove the unused alias. In \&\fB\-s\fR (strict) mode this is an error, not a warning. .IP "Warning: cycle in {User,Runas,Host,Cmnd}_Alias" 4 .IX Item "Warning: cycle in {User,Runas,Host,Cmnd}_Alias" The specified {User,Runas,Host,Cmnd}_Alias includes a reference to itself, either directly or through an alias it includes. This is only a warning by default as \fBsudo\fR will ignore cycles when parsing the \fIsudoers\fR file. .SH "SEE ALSO" .IX Header "SEE ALSO" \&\fIvi\fR\|(1), \fIsudoers\fR\|(4), \fIsudo\fR\|(1m), \fIvipw\fR\|(1m) .SH "AUTHOR" .IX Header "AUTHOR" Many people have worked on \fIsudo\fR over the years; this version of \&\fBvisudo\fR was written by: .PP .Vb 1 \& Todd Miller .Ve .PP See the \s-1HISTORY\s0 file in the sudo distribution or visit http://www.sudo.ws/sudo/history.html for more details. .SH "CAVEATS" .IX Header "CAVEATS" There is no easy way to prevent a user from gaining a root shell if the editor used by \fBvisudo\fR allows shell escapes. .SH "BUGS" .IX Header "BUGS" If you feel you have found a bug in \fBvisudo\fR, please submit a bug report at http://www.sudo.ws/sudo/bugs/ .SH "SUPPORT" .IX Header "SUPPORT" Limited free support is available via the sudo-users mailing list, see http://www.sudo.ws/mailman/listinfo/sudo\-users to subscribe or search the archives. .SH "DISCLAIMER" .IX Header "DISCLAIMER" \&\fBvisudo\fR is provided ``\s-1AS\s0 \s-1IS\s0'' and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. See the \s-1LICENSE\s0 file distributed with \fBsudo\fR or http://www.sudo.ws/sudo/license.html for complete details. 07070100195674000081a40000000000000000000000014e816d9400003aa5000000b600010002ffffffffffffffff0000002d00000000root/usr/local/share/man/man1m/sudoreplay.1m.\" Copyright (c) 2009-2011 Todd C. Miller .\" .\" Permission to use, copy, modify, and distribute this software for any .\" purpose with or without fee is hereby granted, provided that the above .\" copyright notice and this permission notice appear in all copies. .\" .\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES .\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF .\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR .\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES .\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" .\" Automatically generated by Pod::Man 2.23 (Pod::Simple 3.14) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` . ds C' 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is turned on, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .ie \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . nr % 0 . rr F .\} .el \{\ . de IX .. .\} .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "SUDOREPLAY 1m" .TH SUDOREPLAY 1m "May 22, 2011" "1.8.2" "MAINTENANCE COMMANDS" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" sudoreplay \- replay sudo session logs .SH "SYNOPSIS" .IX Header "SYNOPSIS" \&\fBsudoreplay\fR [\fB\-h\fR] [\fB\-d\fR \fIdirectory\fR] [\fB\-f\fR \fIfilter\fR] [\fB\-m\fR \fImax_wait\fR] [\fB\-s\fR \fIspeed_factor\fR] \s-1ID\s0 .PP \&\fBsudoreplay\fR [\fB\-h\fR] [\fB\-d\fR \fIdirectory\fR] \-l [search expression] .SH "DESCRIPTION" .IX Header "DESCRIPTION" \&\fBsudoreplay\fR plays back or lists the output logs created by \fBsudo\fR. When replaying, \fBsudoreplay\fR can play the session back in real-time, or the playback speed may be adjusted (faster or slower) based on the command line options. .PP The \fI\s-1ID\s0\fR should either be a six character sequence of digits and upper case letters, e.g. \f(CW\*(C`0100A5\*(C'\fR, or a pattern matching the \&\fIiolog_file\fR option in the \fIsudoers\fR file. When a command is run via \fBsudo\fR with \fIlog_output\fR enabled in the \fIsudoers\fR file, a \&\f(CW\*(C`TSID=ID\*(C'\fR string is logged via syslog or to the \fBsudo\fR log file. The \fI\s-1ID\s0\fR may also be determined using \fBsudoreplay\fR's list mode. .PP In list mode, \fBsudoreplay\fR can be used to find the \s-1ID\s0 of a session based on a number of criteria such as the user, tty or command run. .PP In replay mode, if the standard output has not been redirected, \&\fBsudoreplay\fR will act on the following keys: .IP "' ' (space)" 8 .IX Item "' ' (space)" Pause output; press any key to resume. .IP "'<'" 8 Reduce the playback speed by one half. .IP "'>'" 8 Double the playback speed. .SH "OPTIONS" .IX Header "OPTIONS" \&\fBsudoreplay\fR accepts the following command line options: .IP "\-d \fIdirectory\fR" 12 .IX Item "-d directory" Use \fIdirectory\fR to for the session logs instead of the default, \&\fI/var/log/sudo\-io\fR. .IP "\-f \fIfilter\fR" 12 .IX Item "-f filter" By default, \fBsudoreplay\fR will play back the command's standard output, standard error and tty output. The \fI\-f\fR option can be used to select which of these to output. The \fIfilter\fR argument is a comma-separated list, consisting of one or more of following: \&\fIstdout\fR, \fIstderr\fR, and \fIttyout\fR. .IP "\-h" 12 .IX Item "-h" The \fB\-h\fR (\fIhelp\fR) option causes \fBsudoreplay\fR to print a short help message to the standard output and exit. .IP "\-l [\fIsearch expression\fR]" 12 .IX Item "-l [search expression]" Enable \*(L"list mode\*(R". In this mode, \fBsudoreplay\fR will list available session IDs. If a \fIsearch expression\fR is specified, it will be used to restrict the IDs that are displayed. An expression is composed of the following predicates: .RS 12 .IP "command \fIcommand pattern\fR" 8 .IX Item "command command pattern" Evaluates to true if the command run matches \fIcommand pattern\fR. On systems with \s-1POSIX\s0 regular expression support, the pattern may be an extended regular expression. On systems without \s-1POSIX\s0 regular expression support, a simple substring match is performed instead. .IP "cwd \fIdirectory\fR" 8 .IX Item "cwd directory" Evaluates to true if the command was run with the specified current working directory. .IP "fromdate \fIdate\fR" 8 .IX Item "fromdate date" Evaluates to true if the command was run on or after \fIdate\fR. See \*(L"Date and time format\*(R" for a description of supported date and time formats. .IP "group \fIrunas_group\fR" 8 .IX Item "group runas_group" Evaluates to true if the command was run with the specified \&\fIrunas_group\fR. Note that unless a \fIrunas_group\fR was explicitly specified when \fBsudo\fR was run this field will be empty in the log. .IP "runas \fIrunas_user\fR" 8 .IX Item "runas runas_user" Evaluates to true if the command was run as the specified \fIrunas_user\fR. Note that \fBsudo\fR runs commands as user \fIroot\fR by default. .IP "todate \fIdate\fR" 8 .IX Item "todate date" Evaluates to true if the command was run on or prior to \fIdate\fR. See \*(L"Date and time format\*(R" for a description of supported date and time formats. .IP "tty \fItty\fR" 8 .IX Item "tty tty" Evaluates to true if the command was run on the specified terminal device. The \fItty\fR should be specified without the \fI/dev/\fR prefix, e.g. \fItty01\fR instead of \fI/dev/tty01\fR. .IP "user \fIuser name\fR" 8 .IX Item "user user name" Evaluates to true if the \s-1ID\s0 matches a command run by \fIuser name\fR. .RE .RS 12 .Sp Predicates may be abbreviated to the shortest unique string (currently all predicates may be shortened to a single character). .Sp Predicates may be combined using \fIand\fR, \fIor\fR and \fI!\fR operators as well as \f(CW\*(Aq(\*(Aq\fR and \f(CW\*(Aq)\*(Aq\fR for grouping (note that parentheses must generally be escaped from the shell). The \fIand\fR operator is optional, adjacent predicates have an implied \fIand\fR unless separated by an \fIor\fR. .RE .IP "\-m \fImax_wait\fR" 12 .IX Item "-m max_wait" Specify an upper bound on how long to wait between key presses or output data. By default, \fBsudo_replay\fR will accurately reproduce the delays between key presses or program output. However, this can be tedious when the session includes long pauses. When the \&\fI\-m\fR option is specified, \fBsudoreplay\fR will limit these pauses to at most \fImax_wait\fR seconds. The value may be specified as a floating point number, .e.g. \fI2.5\fR. .IP "\-s \fIspeed_factor\fR" 12 .IX Item "-s speed_factor" This option causes \fBsudoreplay\fR to adjust the number of seconds it will wait between key presses or program output. This can be used to slow down or speed up the display. For example, a \&\fIspeed_factor\fR of \fI2\fR would make the output twice as fast whereas a \fIspeed_factor\fR of <.5> would make the output twice as slow. .IP "\-V" 12 .IX Item "-V" The \fB\-V\fR (version) option causes \fBsudoreplay\fR to print its version number and exit. .SS "Date and time format" .IX Subsection "Date and time format" The time and date may be specified multiple ways, common formats include: .IP "\s-1HH:MM:SS\s0 am \s-1MM/DD/CCYY\s0 timezone" 8 .IX Item "HH:MM:SS am MM/DD/CCYY timezone" 24 hour time may be used in place of am/pm. .IP "\s-1HH:MM:SS\s0 am Month, Day Year timezone" 8 .IX Item "HH:MM:SS am Month, Day Year timezone" 24 hour time may be used in place of am/pm, and month and day names may be abbreviated. Note that month and day of the week names must be specified in English. .IP "CCYY-MM-DD \s-1HH:MM:SS\s0" 8 .IX Item "CCYY-MM-DD HH:MM:SS" \&\s-1ISO\s0 time format .IP "\s-1DD\s0 Month \s-1CCYY\s0 \s-1HH:MM:SS\s0" 8 .IX Item "DD Month CCYY HH:MM:SS" The month name may be abbreviated. .PP Either time or date may be omitted, the am/pm and timezone are optional. If no date is specified, the current day is assumed; if no time is specified, the first second of the specified date is used. The less significant parts of both time and date may also be omitted, in which case zero is assumed. For example, the following are all valid: .PP The following are all valid time and date specifications: .IP "now" 8 .IX Item "now" The current time and date. .IP "tomorrow" 8 .IX Item "tomorrow" Exactly one day from now. .IP "yesterday" 8 .IX Item "yesterday" 24 hours ago. .IP "2 hours ago" 8 .IX Item "2 hours ago" 2 hours ago. .IP "next Friday" 8 .IX Item "next Friday" The first second of the next Friday. .IP "this week" 8 .IX Item "this week" The current time but the first day of the coming week. .IP "a fortnight ago" 8 .IX Item "a fortnight ago" The current time but 14 days ago. .IP "10:01 am 9/17/2009" 8 .IX Item "10:01 am 9/17/2009" 10:01 am, September 17, 2009. .IP "10:01 am" 8 .IX Item "10:01 am" 10:01 am on the current day. .IP "10" 8 .IX Item "10" 10:00 am on the current day. .IP "9/17/2009" 8 .IX Item "9/17/2009" 00:00 am, September 17, 2009. .IP "10:01 am Sep 17, 2009" 8 .IX Item "10:01 am Sep 17, 2009" 10:01 am, September 17, 2009. .SH "FILES" .IX Header "FILES" .IP "\fI/var/log/sudo\-io\fR" 24 .IX Item "/var/log/sudo-io" The default I/O log directory. .IP "\fI/var/log/sudo\-io/00/00/01/log\fR" 24 .IX Item "/var/log/sudo-io/00/00/01/log" Example session log info. .IP "\fI/var/log/sudo\-io/00/00/01/stdin\fR" 24 .IX Item "/var/log/sudo-io/00/00/01/stdin" Example session standard input log. .IP "\fI/var/log/sudo\-io/00/00/01/stdout\fR" 24 .IX Item "/var/log/sudo-io/00/00/01/stdout" Example session standard output log. .IP "\fI/var/log/sudo\-io/00/00/01/stderr\fR" 24 .IX Item "/var/log/sudo-io/00/00/01/stderr" Example session standard error log. .IP "\fI/var/log/sudo\-io/00/00/01/ttyin\fR" 24 .IX Item "/var/log/sudo-io/00/00/01/ttyin" Example session tty input file. .IP "\fI/var/log/sudo\-io/00/00/01/ttyout\fR" 24 .IX Item "/var/log/sudo-io/00/00/01/ttyout" Example session tty output file. .IP "\fI/var/log/sudo\-io/00/00/01/timing\fR" 24 .IX Item "/var/log/sudo-io/00/00/01/timing" Example session timing file. .PP Note that the \fIstdin\fR, \fIstdout\fR and \fIstderr\fR files will be empty unless \fBsudo\fR was used as part of a pipeline for a particular command. .SH "EXAMPLES" .IX Header "EXAMPLES" List sessions run by user \fImillert\fR: .PP .Vb 1 \& sudoreplay \-l user millert .Ve .PP List sessions run by user \fIbob\fR with a command containing the string vi: .PP .Vb 1 \& sudoreplay \-l user bob command vi .Ve .PP List sessions run by user \fIjeff\fR that match a regular expression: .PP .Vb 1 \& sudoreplay \-l user jeff command \*(Aq/bin/[a\-z]*sh\*(Aq .Ve .PP List sessions run by jeff or bob on the console: .PP .Vb 1 \& sudoreplay \-l ( user jeff or user bob ) tty console .Ve .SH "SEE ALSO" .IX Header "SEE ALSO" \&\fIsudo\fR\|(1m), \fIscript\fR\|(1) .SH "AUTHOR" .IX Header "AUTHOR" Todd C. Miller .SH "BUGS" .IX Header "BUGS" If you feel you have found a bug in \fBsudoreplay\fR, please submit a bug report at http://www.sudo.ws/sudo/bugs/ .SH "SUPPORT" .IX Header "SUPPORT" Limited free support is available via the sudo-users mailing list, see http://www.sudo.ws/mailman/listinfo/sudo\-users to subscribe or search the archives. .SH "DISCLAIMER" .IX Header "DISCLAIMER" \&\fBsudoreplay\fR is provided ``\s-1AS\s0 \s-1IS\s0'' and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. See the \s-1LICENSE\s0 file distributed with \fBsudo\fR or http://www.sudo.ws/sudo/license.html for complete details. 07070100195672000081a40000000000000000000000014e816d940000c36d000000b600010002ffffffffffffffff0000002e00000000root/usr/local/share/man/man1m/sudo_plugin.1m.\" Copyright (c) 2009-2011 Todd C. Miller .\" .\" Permission to use, copy, modify, and distribute this software for any .\" purpose with or without fee is hereby granted, provided that the above .\" copyright notice and this permission notice appear in all copies. .\" .\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES .\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF .\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR .\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES .\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" .\" Automatically generated by Pod::Man 2.23 (Pod::Simple 3.14) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` . ds C' 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is turned on, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .ie \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . nr % 0 . rr F .\} .el \{\ . de IX .. .\} .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "SUDO_PLUGIN 1m" .TH SUDO_PLUGIN 1m "May 22, 2011" "1.8.2" "MAINTENANCE COMMANDS" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" sudo_plugin \- Sudo Plugin API .SH "DESCRIPTION" .IX Header "DESCRIPTION" Starting with version 1.8, \fBsudo\fR supports a plugin \s-1API\s0 for policy and session logging. By default, the \fIsudoers\fR policy plugin and an associated I/O logging plugin are used. Via the plugin \&\s-1API\s0, \fBsudo\fR can be configured to use alternate policy and/or I/O logging plugins provided by third parties. The plugins to be used are specified via the \fI/usr/local/etc/sudo.conf\fR file. .PP The \s-1API\s0 is versioned with a major and minor number. The minor version number is incremented when additions are made. The major number is incremented when incompatible changes are made. A plugin should be check the version passed to it and make sure that the major version matches. .PP The plugin \s-1API\s0 is defined by the \f(CW\*(C`sudo_plugin.h\*(C'\fR header file. .SS "The sudo.conf File" .IX Subsection "The sudo.conf File" The \fI/usr/local/etc/sudo.conf\fR file contains plugin configuration directives. Currently, the only supported keyword is the \f(CW\*(C`Plugin\*(C'\fR directive, which causes a plugin plugin to be loaded. .PP A \f(CW\*(C`Plugin\*(C'\fR line consists of the \f(CW\*(C`Plugin\*(C'\fR keyword, followed by the \&\fIsymbol_name\fR and the \fIpath\fR to the shared object containing the plugin. The \fIsymbol_name\fR is the name of the \f(CW\*(C`struct policy_plugin\*(C'\fR or \f(CW\*(C`struct io_plugin\*(C'\fR in the plugin shared object. The \fIpath\fR may be fully qualified or relative. If not fully qualified it is relative to the \fI/usr/local/libexec\fR directory. Any additional parameters after the \fIpath\fR are ignored. Lines that don't begin with \f(CW\*(C`Plugin\*(C'\fR or \f(CW\*(C`Path\*(C'\fR are silently ignored. .PP The same shared object may contain multiple plugins, each with a different symbol name. The shared object file must be owned by uid 0 and only writable by its owner. Because of ambiguities that arise from composite policies, only a single policy plugin may be specified. This limitation does not apply to I/O plugins. .PP .Vb 10 \& # \& # Default /usr/local/etc/sudo.conf file \& # \& # Format: \& # Plugin plugin_name plugin_path \& # Path askpass /path/to/askpass \& # \& # The plugin_path is relative to /usr/local/libexec unless \& # fully qualified. \& # The plugin_name corresponds to a global symbol in the plugin \& # that contains the plugin interface structure. \& # \& Plugin sudoers_policy sudoers.so \& Plugin sudoers_io sudoers.so .Ve .SS "Policy Plugin \s-1API\s0" .IX Subsection "Policy Plugin API" A policy plugin must declare and populate a \f(CW\*(C`policy_plugin\*(C'\fR struct in the global scope. This structure contains pointers to the functions that implement the \fBsudo\fR policy checks. The name of the symbol should be specified in \fI/usr/local/etc/sudo.conf\fR along with a path to the plugin so that \fBsudo\fR can load it. .PP .Vb 10 \& struct policy_plugin { \& #define SUDO_POLICY_PLUGIN 1 \& unsigned int type; /* always SUDO_POLICY_PLUGIN */ \& unsigned int version; /* always SUDO_API_VERSION */ \& int (*open)(unsigned int version, sudo_conv_t conversation, \& sudo_printf_t plugin_printf, char * const settings[], \& char * const user_info[], char * const user_env[]); \& void (*close)(int exit_status, int error); \& int (*show_version)(int verbose); \& int (*check_policy)(int argc, char * const argv[], \& char *env_add[], char **command_info[], \& char **argv_out[], char **user_env_out[]); \& int (*list)(int argc, char * const argv[], int verbose, \& const char *list_user); \& int (*validate)(void); \& void (*invalidate)(int remove); \& int (*init_session)(struct passwd *pwd); \& }; .Ve .PP The policy_plugin struct has the following fields: .IP "type" 4 .IX Item "type" The \f(CW\*(C`type\*(C'\fR field should always be set to \s-1SUDO_POLICY_PLUGIN\s0. .IP "version" 4 .IX Item "version" The \f(CW\*(C`version\*(C'\fR field should be set to \s-1SUDO_API_VERSION\s0. .Sp This allows \fBsudo\fR to determine the \s-1API\s0 version the plugin was built against. .IP "open" 4 .IX Item "open" .Vb 3 \& int (*open)(unsigned int version, sudo_conv_t conversation, \& sudo_printf_t plugin_printf, char * const settings[], \& char * const user_info[], char * const user_env[]); .Ve .Sp Returns 1 on success, 0 on failure, \-1 if a general error occurred, or \-2 if there was a usage error. In the latter case, \fBsudo\fR will print a usage message before it exits. If an error occurs, the plugin may optionally call the conversation or plugin_printf function with \f(CW\*(C`SUDO_CONF_ERROR_MSG\*(C'\fR to present additional error information to the user. .Sp The function arguments are as follows: .RS 4 .IP "version" 4 .IX Item "version" The version passed in by \fBsudo\fR allows the plugin to determine the major and minor version number of the plugin \s-1API\s0 supported by \&\fBsudo\fR. .IP "conversation" 4 .IX Item "conversation" A pointer to the conversation function that can be used by the plugin to interact with the user (see below). Returns 0 on success and \-1 on failure. .IP "plugin_printf" 4 .IX Item "plugin_printf" A pointer to a printf-style function that may be used to display informational or error messages (see below). Returns the number of characters printed on success and \-1 on failure. .IP "settings" 4 .IX Item "settings" A vector of user-supplied \fBsudo\fR settings in the form of \*(L"name=value\*(R" strings. The vector is terminated by a \f(CW\*(C`NULL\*(C'\fR pointer. These settings correspond to flags the user specified when running \fBsudo\fR. As such, they will only be present when the corresponding flag has been specified on the command line. .Sp When parsing \fIsettings\fR, the plugin should split on the \fBfirst\fR equal sign ('=') since the \fIname\fR field will never include one itself but the \fIvalue\fR might. .RS 4 .IP "debug_level=number" 4 .IX Item "debug_level=number" A numeric debug level, from 1\-9, if specified via the \f(CW\*(C`\-D\*(C'\fR flag. .IP "runas_user=string" 4 .IX Item "runas_user=string" The user name or uid to to run the command as, if specified via the \&\f(CW\*(C`\-u\*(C'\fR flag. .IP "runas_group=string" 4 .IX Item "runas_group=string" The group name or gid to to run the command as, if specified via the \f(CW\*(C`\-g\*(C'\fR flag. .IP "prompt=string" 4 .IX Item "prompt=string" The prompt to use when requesting a password, if specified via the \f(CW\*(C`\-p\*(C'\fR flag. .IP "set_home=bool" 4 .IX Item "set_home=bool" Set to true if the user specified the \f(CW\*(C`\-H\*(C'\fR flag. If true, set the \&\f(CW\*(C`HOME\*(C'\fR environment variable to the target user's home directory. .IP "preserve_environment=bool" 4 .IX Item "preserve_environment=bool" Set to true if the user specified the \f(CW\*(C`\-E\*(C'\fR flag, indicating that the user wishes to preserve the environment. .IP "run_shell=bool" 4 .IX Item "run_shell=bool" Set to true if the user specified the \f(CW\*(C`\-s\*(C'\fR flag, indicating that the user wishes to run a shell. .IP "login_shell=bool" 4 .IX Item "login_shell=bool" Set to true if the user specified the \f(CW\*(C`\-i\*(C'\fR flag, indicating that the user wishes to run a login shell. .IP "implied_shell=bool" 4 .IX Item "implied_shell=bool" If the user does not specify a program on the command line, \fBsudo\fR will pass the plugin the path to the user's shell and set \&\fIimplied_shell\fR to true. This allows \fBsudo\fR with no arguments to be used similarly to \fIsu\fR\|(1). If the plugin does not to support this usage, it may return a value of \-2 from the \f(CW\*(C`check_policy\*(C'\fR function, which will cause \fBsudo\fR to print a usage message and exit. .IP "preserve_groups=bool" 4 .IX Item "preserve_groups=bool" Set to true if the user specified the \f(CW\*(C`\-P\*(C'\fR flag, indicating that the user wishes to preserve the group vector instead of setting it based on the runas user. .IP "ignore_ticket=bool" 4 .IX Item "ignore_ticket=bool" Set to true if the user specified the \f(CW\*(C`\-k\*(C'\fR flag along with a command, indicating that the user wishes to ignore any cached authentication credentials. .IP "noninteractive=bool" 4 .IX Item "noninteractive=bool" Set to true if the user specified the \f(CW\*(C`\-n\*(C'\fR flag, indicating that \&\fBsudo\fR should operate in non-interactive mode. The plugin may reject a command run in non-interactive mode if user interaction is required. .IP "login_class=string" 4 .IX Item "login_class=string" \&\s-1BSD\s0 login class to use when setting resource limits and nice value, if specified by the \f(CW\*(C`\-c\*(C'\fR flag. .IP "selinux_role=string" 4 .IX Item "selinux_role=string" SELinux role to use when executing the command, if specified by the \f(CW\*(C`\-r\*(C'\fR flag. .IP "selinux_type=string" 4 .IX Item "selinux_type=string" SELinux type to use when executing the command, if specified by the \f(CW\*(C`\-t\*(C'\fR flag. .IP "bsdauth_type=string" 4 .IX Item "bsdauth_type=string" Authentication type, if specified by the \f(CW\*(C`\-a\*(C'\fR flag, to use on systems where \s-1BSD\s0 authentication is supported. .IP "network_addrs=list" 4 .IX Item "network_addrs=list" A space-separated list of \s-1IP\s0 network addresses and netmasks in the form \*(L"addr/netmask\*(R", e.g. \*(L"192.168.1.2/255.255.255.0\*(R". The address and netmask pairs may be either IPv4 or IPv6, depending on what the operating system supports. If the address contains a colon (':'), it is an IPv6 address, else it is IPv4. .IP "progname=string" 4 .IX Item "progname=string" The command name that sudo was run as, typically \*(L"sudo\*(R" or \*(L"sudoedit\*(R". .IP "sudoedit=bool" 4 .IX Item "sudoedit=bool" Set to true when the \f(CW\*(C`\-e\*(C'\fR flag is is specified or if invoked as \&\fBsudoedit\fR. The plugin shall substitute an editor into \fIargv\fR in the \fIcheck_policy\fR function or return \f(CW\*(C`\-2\*(C'\fR with a usage error if the plugin does not support \fIsudoedit\fR. For more information, see the \fIcheck_policy\fR section. .IP "closefrom=number" 4 .IX Item "closefrom=number" If specified, the user has requested via the \f(CW\*(C`\-C\*(C'\fR flag that \fBsudo\fR close all files descriptors with a value of \fInumber\fR or higher. The plugin may optionally pass this, or another value, back in the \&\fIcommand_info\fR list. .RE .RS 4 .Sp Additional settings may be added in the future so the plugin should silently ignore settings that it does not recognize. .RE .IP "user_info" 4 .IX Item "user_info" A vector of information about the user running the command in the form of \&\*(L"name=value\*(R" strings. The vector is terminated by a \f(CW\*(C`NULL\*(C'\fR pointer. .Sp When parsing \fIuser_info\fR, the plugin should split on the \fBfirst\fR equal sign ('=') since the \fIname\fR field will never include one itself but the \fIvalue\fR might. .RS 4 .IP "user=string" 4 .IX Item "user=string" The name of the user invoking \fBsudo\fR. .IP "uid=uid_t" 4 .IX Item "uid=uid_t" The real user \s-1ID\s0 of the user invoking \fBsudo\fR. .IP "gid=gid_t" 4 .IX Item "gid=gid_t" The real group \s-1ID\s0 of the user invoking \fBsudo\fR. .IP "groups=list" 4 .IX Item "groups=list" The user's supplementary group list formatted as a string of comma-separated group IDs. .IP "cwd=string" 4 .IX Item "cwd=string" The user's current working directory. .IP "tty=string" 4 .IX Item "tty=string" The path to the user's terminal device. If the user has no terminal device associated with the session, the value will be empty, as in \&\f(CW\*(C`tty=\*(C'\fR. .IP "host=string" 4 .IX Item "host=string" The local machine's hostname as returned by the \f(CW\*(C`gethostname()\*(C'\fR system call. .IP "lines=int" 4 .IX Item "lines=int" The number of lines the user's terminal supports. If there is no terminal device available, a default value of 24 is used. .IP "cols=int" 4 .IX Item "cols=int" The number of columns the user's terminal supports. If there is no terminal device available, a default value of 80 is used. .RE .RS 4 .RE .IP "user_env" 4 .IX Item "user_env" The user's environment in the form of a \f(CW\*(C`NULL\*(C'\fR\-terminated vector of \&\*(L"name=value\*(R" strings. .Sp When parsing \fIuser_env\fR, the plugin should split on the \fBfirst\fR equal sign ('=') since the \fIname\fR field will never include one itself but the \fIvalue\fR might. .RE .RS 4 .RE .IP "close" 4 .IX Item "close" .Vb 1 \& void (*close)(int exit_status, int error); .Ve .Sp The \f(CW\*(C`close\*(C'\fR function is called when the command being run by \fBsudo\fR finishes. .Sp The function arguments are as follows: .RS 4 .IP "exit_status" 4 .IX Item "exit_status" The command's exit status, as returned by the \fIwait\fR\|(2) system call. The value of \f(CW\*(C`exit_status\*(C'\fR is undefined if \f(CW\*(C`error\*(C'\fR is non-zero. .IP "error" 4 .IX Item "error" If the command could not be executed, this is set to the value of \&\f(CW\*(C`errno\*(C'\fR set by the \fIexecve\fR\|(2) system call. The plugin is responsible for displaying error information via the conversation or plugin_printf function. If the command was successfully executed, the value of \&\f(CW\*(C`error\*(C'\fR is 0. .RE .RS 4 .RE .IP "show_version" 4 .IX Item "show_version" .Vb 1 \& int (*show_version)(int verbose); .Ve .Sp The \f(CW\*(C`show_version\*(C'\fR function is called by \fBsudo\fR when the user specifies the \f(CW\*(C`\-V\*(C'\fR option. The plugin may display its version information to the user via the conversation or plugin_printf function using \&\f(CW\*(C`SUDO_CONV_INFO_MSG\*(C'\fR. If the user requests detailed version information, the verbose flag will be set. .IP "check_policy" 4 .IX Item "check_policy" .Vb 3 \& int (*check_policy)(int argc, char * const argv[] \& char *env_add[], char **command_info[], \& char **argv_out[], char **user_env_out[]); .Ve .Sp The \fIcheck_policy\fR function is called by \fBsudo\fR to determine whether the user is allowed to run the specified commands. .Sp If the \fIsudoedit\fR option was enabled in the \fIsettings\fR array passed to the \fIopen\fR function, the user has requested \fIsudoedit\fR mode. \fIsudoedit\fR is a mechanism for editing one or more files where an editor is run with the user's credentials instead of with elevated privileges. \fBsudo\fR achieves this by creating user-writable temporary copies of the files to be edited and then overwriting the originals with the temporary copies after editing is complete. If the plugin supports \fBsudoedit\fR, it should choose the editor to be used, potentially from a variable in the user's environment, such as \f(CW\*(C`EDITOR\*(C'\fR, and include it in \fIargv_out\fR (note that environment variables may include command line flags). The files to be edited should be copied from \fIargv\fR into \fIargv_out\fR, separated from the editor and its arguments by a \f(CW"\-\-"\fR element. The \f(CW"\-\-"\fR will be removed by \fBsudo\fR before the editor is executed. The plugin should also set \fIsudoedit=true\fR in the \fIcommand_info\fR list. .Sp The \fIcheck_policy\fR function returns 1 if the command is allowed, 0 if not allowed, \-1 for a general error, or \-2 for a usage error or if \fBsudoedit\fR was specified but is unsupported by the plugin. In the latter case, \fBsudo\fR will print a usage message before it exits. If an error occurs, the plugin may optionally call the conversation or plugin_printf function with \f(CW\*(C`SUDO_CONF_ERROR_MSG\*(C'\fR to present additional error information to the user. .Sp The function arguments are as follows: .RS 4 .IP "argc" 4 .IX Item "argc" The number of elements in \fIargv\fR, not counting the final \f(CW\*(C`NULL\*(C'\fR pointer. .IP "argv" 4 .IX Item "argv" The argument vector describing the command the user wishes to run, in the same form as what would be passed to the \fIexecve()\fR system call. The vector is terminated by a \f(CW\*(C`NULL\*(C'\fR pointer. .IP "env_add" 4 .IX Item "env_add" Additional environment variables specified by the user on the command line in the form of a \f(CW\*(C`NULL\*(C'\fR\-terminated vector of \*(L"name=value\*(R" strings. The plugin may reject the command if one or more variables are not allowed to be set, or it may silently ignore such variables. .Sp When parsing \fIenv_add\fR, the plugin should split on the \fBfirst\fR equal sign ('=') since the \fIname\fR field will never include one itself but the \fIvalue\fR might. .IP "command_info" 4 .IX Item "command_info" Information about the command being run in the form of \*(L"name=value\*(R" strings. These values are used by \fBsudo\fR to set the execution environment when running a command. The plugin is responsible for creating and populating the vector, which must be terminated with a \f(CW\*(C`NULL\*(C'\fR pointer. The following values are recognized by \fBsudo\fR: .RS 4 .IP "command=string" 4 .IX Item "command=string" Fully qualified path to the command to be executed. .IP "runas_uid=uid" 4 .IX Item "runas_uid=uid" User \s-1ID\s0 to run the command as. .IP "runas_euid=uid" 4 .IX Item "runas_euid=uid" Effective user \s-1ID\s0 to run the command as. If not specified, the value of \fIrunas_uid\fR is used. .IP "runas_gid=gid" 4 .IX Item "runas_gid=gid" Group \s-1ID\s0 to run the command as. .IP "runas_egid=gid" 4 .IX Item "runas_egid=gid" Effective group \s-1ID\s0 to run the command as. If not specified, the value of \fIrunas_gid\fR is used. .IP "runas_groups=list" 4 .IX Item "runas_groups=list" The supplementary group vector to use for the command in the form of a comma-separated list of group IDs. If \fIpreserve_groups\fR is set, this option is ignored. .IP "login_class=string" 4 .IX Item "login_class=string" \&\s-1BSD\s0 login class to use when setting resource limits and nice value (optional). This option is only set on systems that support login classes. .IP "preserve_groups=bool" 4 .IX Item "preserve_groups=bool" If set, \fBsudo\fR will preserve the user's group vector instead of initializing the group vector based on \f(CW\*(C`runas_user\*(C'\fR. .IP "cwd=string" 4 .IX Item "cwd=string" The current working directory to change to when executing the command. .IP "noexec=bool" 4 .IX Item "noexec=bool" If set, prevent the command from executing other programs. .IP "chroot=string" 4 .IX Item "chroot=string" The root directory to use when running the command. .IP "nice=int" 4 .IX Item "nice=int" Nice value (priority) to use when executing the command. The nice value, if specified, overrides the priority associated with the \&\fIlogin_class\fR on \s-1BSD\s0 systems. .IP "umask=octal" 4 .IX Item "umask=octal" The file creation mask to use when executing the command. .IP "selinux_role=string" 4 .IX Item "selinux_role=string" SELinux role to use when executing the command. .IP "selinux_type=string" 4 .IX Item "selinux_type=string" SELinux type to use when executing the command. .IP "timeout=int" 4 .IX Item "timeout=int" Command timeout. If non-zero then when the timeout expires the command will be killed. .IP "sudoedit=bool" 4 .IX Item "sudoedit=bool" Set to true when in \fIsudoedit\fR mode. The plugin may enable \&\fIsudoedit\fR mode even if \fBsudo\fR was not invoked as \fBsudoedit\fR. This allows the plugin to perform command substitution and transparently enable \fIsudoedit\fR when the user attempts to run an editor. .IP "closefrom=number" 4 .IX Item "closefrom=number" If specified, \fBsudo\fR will close all files descriptors with a value of \fInumber\fR or higher. .IP "iolog_compress=bool" 4 .IX Item "iolog_compress=bool" Set to true if the I/O logging plugins, if any, should compress the log data. This is a hint to the I/O logging plugin which may choose to ignore it. .IP "iolog_path=string" 4 .IX Item "iolog_path=string" Fully qualified path to the file or directory in which I/O log is to be stored. This is a hint to the I/O logging plugin which may choose to ignore it. If no I/O logging plugin is loaded, this setting has no effect. .IP "iolog_stdin=bool" 4 .IX Item "iolog_stdin=bool" Set to true if the I/O logging plugins, if any, should log the standard input if it is not connected to a terminal device. This is a hint to the I/O logging plugin which may choose to ignore it. .IP "iolog_stdout=bool" 4 .IX Item "iolog_stdout=bool" Set to true if the I/O logging plugins, if any, should log the standard output if it is not connected to a terminal device. This is a hint to the I/O logging plugin which may choose to ignore it. .IP "iolog_stderr=bool" 4 .IX Item "iolog_stderr=bool" Set to true if the I/O logging plugins, if any, should log the standard error if it is not connected to a terminal device. This is a hint to the I/O logging plugin which may choose to ignore it. .IP "iolog_ttyin=bool" 4 .IX Item "iolog_ttyin=bool" Set to true if the I/O logging plugins, if any, should log all terminal input. This only includes input typed by the user and not from a pipe or redirected from a file. This is a hint to the I/O logging plugin which may choose to ignore it. .IP "iolog_ttyout=bool" 4 .IX Item "iolog_ttyout=bool" Set to true if the I/O logging plugins, if any, should log all terminal output. This only includes output to the screen, not output to a pipe or file. This is a hint to the I/O logging plugin which may choose to ignore it. .IP "use_pty=bool" 4 .IX Item "use_pty=bool" Allocate a pseudo-tty to run the command in, regardless of whether or not I/O logging is in use. By default, \fBsudo\fR will only run the command in a pty when an I/O log plugin is loaded. .IP "set_utmp=bool" 4 .IX Item "set_utmp=bool" Create a utmp (or utmpx) entry when a pseudo-tty is allocated. By default, the new entry will be a copy of the user's existing utmp entry (if any), with the tty, time, type and pid fields updated. .IP "utmp_user=string" 4 .IX Item "utmp_user=string" User name to use when constructing a new utmp (or utmpx) entry when \&\fIset_utmp\fR is enabled. This option can be used to set the user field in the utmp entry to the user the command runs as rather than the invoking user. If not set, \fBsudo\fR will base the new entry on the invoking user's existing entry. .RE .RS 4 .Sp Unsupported values will be ignored. .RE .IP "argv_out" 4 .IX Item "argv_out" The \f(CW\*(C`NULL\*(C'\fR\-terminated argument vector to pass to the \fIexecve()\fR system call when executing the command. The plugin is responsible for allocating and populating the vector. .IP "user_env_out" 4 .IX Item "user_env_out" The \f(CW\*(C`NULL\*(C'\fR\-terminated environment vector to use when executing the command. The plugin is responsible for allocating and populating the vector. .RE .RS 4 .RE .IP "list" 4 .IX Item "list" .Vb 2 \& int (*list)(int verbose, const char *list_user, \& int argc, char * const argv[]); .Ve .Sp List available privileges for the invoking user. Returns 1 on success, 0 on failure and \-1 on error. On error, the plugin may optionally call the conversation or plugin_printf function with \&\f(CW\*(C`SUDO_CONF_ERROR_MSG\*(C'\fR to present additional error information to the user. .Sp Privileges should be output via the conversation or plugin_printf function using \f(CW\*(C`SUDO_CONV_INFO_MSG\*(C'\fR. .RS 4 .IP "verbose" 4 .IX Item "verbose" Flag indicating whether to list in verbose mode or not. .IP "list_user" 4 .IX Item "list_user" The name of a different user to list privileges for if the policy allows it. If \f(CW\*(C`NULL\*(C'\fR, the plugin should list the privileges of the invoking user. .IP "argc" 4 .IX Item "argc" The number of elements in \fIargv\fR, not counting the final \f(CW\*(C`NULL\*(C'\fR pointer. .IP "argv" 4 .IX Item "argv" If non\-\f(CW\*(C`NULL\*(C'\fR, an argument vector describing a command the user wishes to check against the policy in the same form as what would be passed to the \fIexecve()\fR system call. If the command is permitted by the policy, the fully-qualified path to the command should be displayed along with any command line arguments. .RE .RS 4 .RE .IP "validate" 4 .IX Item "validate" .Vb 1 \& int (*validate)(void); .Ve .Sp The \f(CW\*(C`validate\*(C'\fR function is called when \fBsudo\fR is run with the \&\f(CW\*(C`\-v\*(C'\fR flag. For policy plugins such as \fIsudoers\fR that cache authentication credentials, this function will validate and cache the credentials. .Sp The \f(CW\*(C`validate\*(C'\fR function should be \f(CW\*(C`NULL\*(C'\fR if the plugin does not support credential caching. .Sp Returns 1 on success, 0 on failure and \-1 on error. On error, the plugin may optionally call the conversation or plugin_printf function with \f(CW\*(C`SUDO_CONF_ERROR_MSG\*(C'\fR to present additional error information to the user. .IP "invalidate" 4 .IX Item "invalidate" .Vb 1 \& void (*invalidate)(int remove); .Ve .Sp The \f(CW\*(C`invalidate\*(C'\fR function is called when \fBsudo\fR is called with the \f(CW\*(C`\-k\*(C'\fR or \f(CW\*(C`\-K\*(C'\fR flag. For policy plugins such as \fIsudoers\fR that cache authentication credentials, this function will invalidate the credentials. If the \fIremove\fR flag is set, the plugin may remove the credentials instead of simply invalidating them. .Sp The \f(CW\*(C`invalidate\*(C'\fR function should be \f(CW\*(C`NULL\*(C'\fR if the plugin does not support credential caching. .IP "init_session" 4 .IX Item "init_session" .Vb 1 \& int (*init_session)(struct passwd *pwd); .Ve .Sp The \f(CW\*(C`init_session\*(C'\fR function is called when \fBsudo\fR sets up the execution environment for the command, immediately before the contents of the \fIcommand_info\fR list are applied (before the uid changes). This can be used to do session setup that is not supported by \fIcommand_info\fR, such as opening the \s-1PAM\s0 session. .Sp The \fIpwd\fR argument points to a passwd struct for the user the command will be run as if the uid the command will run as was found in the password database, otherwise it will be \s-1NULL\s0. .Sp Returns 1 on success, 0 on failure and \-1 on error. On error, the plugin may optionally call the conversation or plugin_printf function with \f(CW\*(C`SUDO_CONF_ERROR_MSG\*(C'\fR to present additional error information to the user. .PP \fIVersion macros\fR .IX Subsection "Version macros" .PP .Vb 8 \& #define SUDO_API_VERSION_GET_MAJOR(v) ((v) >> 16) \& #define SUDO_API_VERSION_GET_MINOR(v) ((v) & 0xffff) \& #define SUDO_API_VERSION_SET_MAJOR(vp, n) do { \e \& *(vp) = (*(vp) & 0x0000ffff) | ((n) << 16); \e \& } while(0) \& #define SUDO_VERSION_SET_MINOR(vp, n) do { \e \& *(vp) = (*(vp) & 0xffff0000) | (n); \e \& } while(0) \& \& #define SUDO_API_VERSION_MAJOR 1 \& #define SUDO_API_VERSION_MINOR 0 \& #define SUDO_API_VERSION ((SUDO_API_VERSION_MAJOR << 16) | \e \& SUDO_API_VERSION_MINOR) .Ve .SS "I/O Plugin \s-1API\s0" .IX Subsection "I/O Plugin API" .Vb 10 \& struct io_plugin { \& #define SUDO_IO_PLUGIN 2 \& unsigned int type; /* always SUDO_IO_PLUGIN */ \& unsigned int version; /* always SUDO_API_VERSION */ \& int (*open)(unsigned int version, sudo_conv_t conversation \& sudo_printf_t plugin_printf, char * const settings[], \& char * const user_info[], int argc, char * const argv[], \& char * const user_env[]); \& void (*close)(int exit_status, int error); /* wait status or error */ \& int (*show_version)(int verbose); \& int (*log_ttyin)(const char *buf, unsigned int len); \& int (*log_ttyout)(const char *buf, unsigned int len); \& int (*log_stdin)(const char *buf, unsigned int len); \& int (*log_stdout)(const char *buf, unsigned int len); \& int (*log_stderr)(const char *buf, unsigned int len); \& }; .Ve .PP When an I/O plugin is loaded, \fBsudo\fR runs the command in a pseudo-tty. This makes it possible to log the input and output from the user's session. If any of the standard input, standard output or standard error do not correspond to a tty, \fBsudo\fR will open a pipe to capture the I/O for logging before passing it on. .PP The log_ttyin function receives the raw user input from the terminal device (note that this will include input even when echo is disabled, such as when a password is read). The log_ttyout function receives output from the pseudo-tty that is suitable for replaying the user's session at a later time. The log_stdin, log_stdout and log_stderr functions are only called if the standard input, standard output or standard error respectively correspond to something other than a tty. .PP Any of the logging functions may be set to the \s-1NULL\s0 pointer if no logging is to be performed. If the open function returns \f(CW0\fR, no I/O will be sent to the plugin. .PP The io_plugin struct has the following fields: .IP "type" 4 .IX Item "type" The \f(CW\*(C`type\*(C'\fR field should always be set to \s-1SUDO_IO_PLUGIN\s0 .IP "version" 4 .IX Item "version" The \f(CW\*(C`version\*(C'\fR field should be set to \s-1SUDO_API_VERSION\s0. .Sp This allows \fBsudo\fR to determine the \s-1API\s0 version the plugin was built against. .IP "open" 4 .IX Item "open" .Vb 4 \& int (*open)(unsigned int version, sudo_conv_t conversation \& sudo_printf_t plugin_printf, char * const settings[], \& char * const user_info[], int argc, char * const argv[], \& char * const user_env[]); .Ve .Sp The \fIopen\fR function is run before the \fIlog_input\fR, \fIlog_output\fR or \fIshow_version\fR functions are called. It is only called if the version is being requested or the \fIcheck_policy\fR function has returned successfully. It returns 1 on success, 0 on failure, \-1 if a general error occurred, or \-2 if there was a usage error. In the latter case, \fBsudo\fR will print a usage message before it exits. If an error occurs, the plugin may optionally call the conversation or plugin_printf function with \f(CW\*(C`SUDO_CONF_ERROR_MSG\*(C'\fR to present additional error information to the user. .Sp The function arguments are as follows: .RS 4 .IP "version" 4 .IX Item "version" The version passed in by \fBsudo\fR allows the plugin to determine the major and minor version number of the plugin \s-1API\s0 supported by \&\fBsudo\fR. .IP "conversation" 4 .IX Item "conversation" A pointer to the conversation function that may be used by the \&\fIshow_version\fR function to display version information (see show_version below). The conversation function may also be used to display additional error message to the user. The conversation function returns 0 on success and \-1 on failure. .IP "plugin_printf" 4 .IX Item "plugin_printf" A pointer to a printf-style function that may be used by the \&\fIshow_version\fR function to display version information (see show_version below). The plugin_printf function may also be used to display additional error message to the user. The plugin_printf function returns number of characters printed on success and \-1 on failure. .IP "settings" 4 .IX Item "settings" A vector of user-supplied \fBsudo\fR settings in the form of \*(L"name=value\*(R" strings. The vector is terminated by a \f(CW\*(C`NULL\*(C'\fR pointer. These settings correspond to flags the user specified when running \fBsudo\fR. As such, they will only be present when the corresponding flag has been specified on the command line. .Sp When parsing \fIsettings\fR, the plugin should split on the \fBfirst\fR equal sign ('=') since the \fIname\fR field will never include one itself but the \fIvalue\fR might. .Sp See the \*(L"Policy Plugin \s-1API\s0\*(R" section for a list of all possible settings. .IP "user_info" 4 .IX Item "user_info" A vector of information about the user running the command in the form of \&\*(L"name=value\*(R" strings. The vector is terminated by a \f(CW\*(C`NULL\*(C'\fR pointer. .Sp When parsing \fIuser_info\fR, the plugin should split on the \fBfirst\fR equal sign ('=') since the \fIname\fR field will never include one itself but the \fIvalue\fR might. .Sp See the \*(L"Policy Plugin \s-1API\s0\*(R" section for a list of all possible strings. .IP "argc" 4 .IX Item "argc" The number of elements in \fIargv\fR, not counting the final \f(CW\*(C`NULL\*(C'\fR pointer. .IP "argv" 4 .IX Item "argv" If non\-\f(CW\*(C`NULL\*(C'\fR, an argument vector describing a command the user wishes to run in the same form as what would be passed to the \&\fIexecve()\fR system call. .IP "user_env" 4 .IX Item "user_env" The user's environment in the form of a \f(CW\*(C`NULL\*(C'\fR\-terminated vector of \&\*(L"name=value\*(R" strings. .Sp When parsing \fIuser_env\fR, the plugin should split on the \fBfirst\fR equal sign ('=') since the \fIname\fR field will never include one itself but the \fIvalue\fR might. .RE .RS 4 .RE .IP "close" 4 .IX Item "close" .Vb 1 \& void (*close)(int exit_status, int error); .Ve .Sp The \f(CW\*(C`close\*(C'\fR function is called when the command being run by \fBsudo\fR finishes. .Sp The function arguments are as follows: .RS 4 .IP "exit_status" 4 .IX Item "exit_status" The command's exit status, as returned by the \fIwait\fR\|(2) system call. The value of \f(CW\*(C`exit_status\*(C'\fR is undefined if \f(CW\*(C`error\*(C'\fR is non-zero. .IP "error" 4 .IX Item "error" If the command could not be executed, this is set to the value of \&\f(CW\*(C`errno\*(C'\fR set by the \fIexecve\fR\|(2) system call. If the command was successfully executed, the value of \f(CW\*(C`error\*(C'\fR is 0. .RE .RS 4 .RE .IP "show_version" 4 .IX Item "show_version" .Vb 1 \& int (*show_version)(int verbose); .Ve .Sp The \f(CW\*(C`show_version\*(C'\fR function is called by \fBsudo\fR when the user specifies the \f(CW\*(C`\-V\*(C'\fR option. The plugin may display its version information to the user via the conversation or plugin_printf function using \&\f(CW\*(C`SUDO_CONV_INFO_MSG\*(C'\fR. If the user requests detailed version information, the verbose flag will be set. .IP "log_ttyin" 4 .IX Item "log_ttyin" .Vb 1 \& int (*log_ttyin)(const char *buf, unsigned int len); .Ve .Sp The \fIlog_ttyin\fR function is called whenever data can be read from the user but before it is passed to the running command. This allows the plugin to reject data if it chooses to (for instance if the input contains banned content). Returns \f(CW1\fR if the data should be passed to the command, \f(CW0\fR if the data is rejected (which will terminate the command) or \f(CW\*(C`\-1\*(C'\fR if an error occurred. .Sp The function arguments are as follows: .RS 4 .IP "buf" 4 .IX Item "buf" The buffer containing user input. .IP "len" 4 .IX Item "len" The length of \fIbuf\fR in bytes. .RE .RS 4 .RE .IP "log_ttyout" 4 .IX Item "log_ttyout" .Vb 1 \& int (*log_ttyout)(const char *buf, unsigned int len); .Ve .Sp The \fIlog_ttyout\fR function is called whenever data can be read from the command but before it is written to the user's terminal. This allows the plugin to reject data if it chooses to (for instance if the output contains banned content). Returns \f(CW1\fR if the data should be passed to the user, \f(CW0\fR if the data is rejected (which will terminate the command) or \f(CW\*(C`\-1\*(C'\fR if an error occurred. .Sp The function arguments are as follows: .RS 4 .IP "buf" 4 .IX Item "buf" The buffer containing command output. .IP "len" 4 .IX Item "len" The length of \fIbuf\fR in bytes. .RE .RS 4 .RE .IP "log_stdin" 4 .IX Item "log_stdin" .Vb 1 \& int (*log_stdin)(const char *buf, unsigned int len); .Ve .Sp The \fIlog_stdin\fR function is only used if the standard input does not correspond to a tty device. It is called whenever data can be read from the standard input but before it is passed to the running command. This allows the plugin to reject data if it chooses to (for instance if the input contains banned content). Returns \f(CW1\fR if the data should be passed to the command, \f(CW0\fR if the data is rejected (which will terminate the command) or \f(CW\*(C`\-1\*(C'\fR if an error occurred. .Sp The function arguments are as follows: .RS 4 .IP "buf" 4 .IX Item "buf" The buffer containing user input. .IP "len" 4 .IX Item "len" The length of \fIbuf\fR in bytes. .RE .RS 4 .RE .IP "log_stdout" 4 .IX Item "log_stdout" .Vb 1 \& int (*log_stdout)(const char *buf, unsigned int len); .Ve .Sp The \fIlog_stdout\fR function is only used if the standard output does not correspond to a tty device. It is called whenever data can be read from the command but before it is written to the standard output. This allows the plugin to reject data if it chooses to (for instance if the output contains banned content). Returns \f(CW1\fR if the data should be passed to the user, \f(CW0\fR if the data is rejected (which will terminate the command) or \f(CW\*(C`\-1\*(C'\fR if an error occurred. .Sp The function arguments are as follows: .RS 4 .IP "buf" 4 .IX Item "buf" The buffer containing command output. .IP "len" 4 .IX Item "len" The length of \fIbuf\fR in bytes. .RE .RS 4 .RE .IP "log_stderr" 4 .IX Item "log_stderr" .Vb 1 \& int (*log_stderr)(const char *buf, unsigned int len); .Ve .Sp The \fIlog_stderr\fR function is only used if the standard error does not correspond to a tty device. It is called whenever data can be read from the command but before it is written to the standard error. This allows the plugin to reject data if it chooses to (for instance if the output contains banned content). Returns \f(CW1\fR if the data should be passed to the user, \f(CW0\fR if the data is rejected (which will terminate the command) or \f(CW\*(C`\-1\*(C'\fR if an error occurred. .Sp The function arguments are as follows: .RS 4 .IP "buf" 4 .IX Item "buf" The buffer containing command output. .IP "len" 4 .IX Item "len" The length of \fIbuf\fR in bytes. .RE .RS 4 .RE .PP \fIVersion macros\fR .IX Subsection "Version macros" .PP Same as for the \*(L"Policy Plugin \s-1API\s0\*(R". .SS "Conversation \s-1API\s0" .IX Subsection "Conversation API" If the plugin needs to interact with the user, it may do so via the conversation function. A plugin should not attempt to read directly from the standard input or the user's tty (neither of which are guaranteed to exist). The caller must include a trailing newline in \f(CW\*(C`msg\*(C'\fR if one is to be printed. .PP A printf-style function is also available that can be used to display informational or error messages to the user, which is usually more convenient for simple messages where no use input is required. .PP .Vb 11 \& struct sudo_conv_message { \& #define SUDO_CONV_PROMPT_ECHO_OFF 0x0001 /* do not echo user input */ \& #define SUDO_CONV_PROMPT_ECHO_ON 0x0002 /* echo user input */ \& #define SUDO_CONV_ERROR_MSG 0x0003 /* error message */ \& #define SUDO_CONV_INFO_MSG 0x0004 /* informational message */ \& #define SUDO_CONV_PROMPT_MASK 0x0005 /* mask user input */ \& #define SUDO_CONV_PROMPT_ECHO_OK 0x1000 /* flag: allow echo if no tty */ \& int msg_type; \& int timeout; \& const char *msg; \& }; \& \& struct sudo_conv_reply { \& char *reply; \& }; \& \& typedef int (*sudo_conv_t)(int num_msgs, \& const struct sudo_conv_message msgs[], \& struct sudo_conv_reply replies[]); \& \& typedef int (*sudo_printf_t)(int msg_type, const char *fmt, ...); .Ve .PP Pointers to the conversation and printf-style functions are passed in to the plugin's \f(CW\*(C`open\*(C'\fR function when the plugin is initialized. .PP To use the conversation function, the plugin must pass an array of \&\f(CW\*(C`sudo_conv_message\*(C'\fR and \f(CW\*(C`sudo_conv_reply\*(C'\fR structures. There must be a \f(CW\*(C`struct sudo_conv_message\*(C'\fR and \f(CW\*(C`struct sudo_conv_reply\*(C'\fR for each message in the conversation. The plugin is responsible for freeing the reply buffer filled in to the \f(CW\*(C`struct sudo_conv_reply\*(C'\fR, if any. .PP The printf-style function uses the same underlying mechanism as the conversation function but only supports \f(CW\*(C`SUDO_CONV_INFO_MSG\*(C'\fR and \&\f(CW\*(C`SUDO_CONV_ERROR_MSG\*(C'\fR for the \fImsg_type\fR parameter. It can be more convenient than using the conversation function if no user reply is needed and supports standard \fIprintf()\fR escape sequences. .PP See the sample plugin for an example of the conversation function usage. .SS "Sudoers Group Plugin \s-1API\s0" .IX Subsection "Sudoers Group Plugin API" The \fIsudoers\fR module supports a plugin interface to allow non-Unix group lookups. This can be used to query a group source other than the standard Unix group database. A sample group plugin is bundled with \fBsudo\fR that implements file-based lookups. Third party group plugins include a \s-1QAS\s0 \s-1AD\s0 plugin available from Quest Software. .PP A group plugin must declare and populate a \f(CW\*(C`sudoers_group_plugin\*(C'\fR struct in the global scope. This structure contains pointers to the functions that implement plugin initialization, cleanup and group lookup. .PP .Vb 8 \& struct sudoers_group_plugin { \& unsigned int version; \& int (*init)(int version, sudo_printf_t sudo_printf, \& char *const argv[]); \& void (*cleanup)(void); \& int (*query)(const char *user, const char *group, \& const struct passwd *pwd); \&}; .Ve .PP The \f(CW\*(C`sudoers_group_plugin\*(C'\fR struct has the following fields: .IP "version" 4 .IX Item "version" The \f(CW\*(C`version\*(C'\fR field should be set to \s-1GROUP_API_VERSION\s0. .Sp This allows \fIsudoers\fR to determine the \s-1API\s0 version the group plugin was built against. .IP "init" 4 .IX Item "init" .Vb 2 \& int (*init)(int version, sudo_printf_t plugin_printf, \& char *const argv[]); .Ve .Sp The \fIinit\fR function is called after \fIsudoers\fR has been parsed but before any policy checks. It returns 1 on success, 0 on failure (or if the plugin is not configured), and \-1 if a error occurred. If an error occurs, the plugin may call the plugin_printf function with \f(CW\*(C`SUDO_CONF_ERROR_MSG\*(C'\fR to present additional error information to the user. .Sp The function arguments are as follows: .RS 4 .IP "version" 4 .IX Item "version" The version passed in by \fIsudoers\fR allows the plugin to determine the major and minor version number of the group plugin \s-1API\s0 supported by \&\fIsudoers\fR. .IP "plugin_printf" 4 .IX Item "plugin_printf" A pointer to a printf-style function that may be used to display informational or error message to the user. Returns the number of characters printed on success and \-1 on failure. .IP "argv" 4 .IX Item "argv" A NULL-terminated array of arguments generated from the \fIgroup_plugin\fR option in \fIsudoers\fR. If no arguments were given, \fIargv\fR will be \&\s-1NULL\s0. .RE .RS 4 .RE .IP "cleanup" 4 .IX Item "cleanup" .Vb 1 \& void (*cleanup)(); .Ve .Sp The \fIcleanup\fR function is called when \fIsudoers\fR has finished its group checks. The plugin should free any memory it has allocated and close open file handles. .IP "query" 4 .IX Item "query" .Vb 2 \& int (*query)(const char *user, const char *group, \& const struct passwd *pwd); .Ve .Sp The \fIquery\fR function is used to ask the group plugin whether \fIuser\fR is a member of \fIgroup\fR. .Sp The function arguments are as follows: .RS 4 .IP "user" 4 .IX Item "user" The name of the user being looked up in the external group database. .IP "group" 4 .IX Item "group" The name of the group being queried. .IP "pwd" 4 .IX Item "pwd" The password database entry for \fIuser\fR, if any. If \fIuser\fR is not present in the password database, \fIpwd\fR will be \f(CW\*(C`NULL\*(C'\fR. .RE .RS 4 .RE .PP \fIVersion Macros\fR .IX Subsection "Version Macros" .PP .Vb 5 \& /* Sudoers group plugin version major/minor */ \& #define GROUP_API_VERSION_MAJOR 1 \& #define GROUP_API_VERSION_MINOR 0 \& #define GROUP_API_VERSION ((GROUP_API_VERSION_MAJOR << 16) | \e \& GROUP_API_VERSION_MINOR) \& \& /* Getters and setters for group version */ \& #define GROUP_API_VERSION_GET_MAJOR(v) ((v) >> 16) \& #define GROUP_API_VERSION_GET_MINOR(v) ((v) & 0xffff) \& #define GROUP_API_VERSION_SET_MAJOR(vp, n) do { \e \& *(vp) = (*(vp) & 0x0000ffff) | ((n) << 16); \e \& } while(0) \& #define GROUP_API_VERSION_SET_MINOR(vp, n) do { \e \& *(vp) = (*(vp) & 0xffff0000) | (n); \e \& } while(0) .Ve .SH "SEE ALSO" .IX Header "SEE ALSO" \&\fIsudoers\fR\|(4), \fIsudo\fR\|(1m) .SH "BUGS" .IX Header "BUGS" If you feel you have found a bug in \fBsudo\fR, please submit a bug report at http://www.sudo.ws/sudo/bugs/ .SH "SUPPORT" .IX Header "SUPPORT" Limited free support is available via the sudo-workers mailing list, see http://www.sudo.ws/mailman/listinfo/sudo\-workers to subscribe or search the archives. .SH "DISCLAIMER" .IX Header "DISCLAIMER" \&\fBsudo\fR is provided ``\s-1AS\s0 \s-1IS\s0'' and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. See the \s-1LICENSE\s0 file distributed with \fBsudo\fR or http://www.sudo.ws/sudo/license.html for complete details. 07070100195676000041ed0000000000000000000000024e816d9900000000000000b600010002ffffffffffffffff0000001e00000000root/usr/local/share/man/man407070100195678000081a40000000000000000000000014e816d9400009856000000b600010002ffffffffffffffff0000002d00000000root/usr/local/share/man/man4/sudoers.ldap.4.\" Copyright (c) 2003-2011 .\" Todd C. Miller .\" .\" Permission to use, copy, modify, and distribute this software for any .\" purpose with or without fee is hereby granted, provided that the above .\" copyright notice and this permission notice appear in all copies. .\" .\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES .\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF .\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR .\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES .\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" .\" Automatically generated by Pod::Man 2.23 (Pod::Simple 3.14) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` . ds C' 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is turned on, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .ie \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . nr % 0 . rr F .\} .el \{\ . de IX .. .\} .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "SUDOERS.LDAP 4" .TH SUDOERS.LDAP 4 "August 17, 2011" "1.8.2" "MAINTENANCE COMMANDS" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" sudoers.ldap \- sudo LDAP configuration .SH "DESCRIPTION" .IX Header "DESCRIPTION" In addition to the standard \fIsudoers\fR file, \fBsudo\fR may be configured via \s-1LDAP\s0. This can be especially useful for synchronizing \fIsudoers\fR in a large, distributed environment. .PP Using \s-1LDAP\s0 for \fIsudoers\fR has several benefits: .IP "\(bu" 4 \&\fBsudo\fR no longer needs to read \fIsudoers\fR in its entirety. When \&\s-1LDAP\s0 is used, there are only two or three \s-1LDAP\s0 queries per invocation. This makes it especially fast and particularly usable in \s-1LDAP\s0 environments. .IP "\(bu" 4 \&\fBsudo\fR no longer exits if there is a typo in \fIsudoers\fR. It is not possible to load \s-1LDAP\s0 data into the server that does not conform to the sudoers schema, so proper syntax is guaranteed. It is still possible to have typos in a user or host name, but this will not prevent \fBsudo\fR from running. .IP "\(bu" 4 It is possible to specify per-entry options that override the global default options. \fI/usr/local/etc/sudoers\fR only supports default options and limited options associated with user/host/commands/aliases. The syntax is complicated and can be difficult for users to understand. Placing the options directly in the entry is more natural. .IP "\(bu" 4 The \fBvisudo\fR program is no longer needed. \fBvisudo\fR provides locking and syntax checking of the \fI/usr/local/etc/sudoers\fR file. Since \s-1LDAP\s0 updates are atomic, locking is no longer necessary. Because syntax is checked when the data is inserted into \s-1LDAP\s0, there is no need for a specialized tool to check syntax. .PP Another major difference between \s-1LDAP\s0 and file-based \fIsudoers\fR is that in \s-1LDAP\s0, \fBsudo\fR\-specific Aliases are not supported. .PP For the most part, there is really no need for \fBsudo\fR\-specific Aliases. Unix groups or user netgroups can be used in place of User_Aliases and Runas_Aliases. Host netgroups can be used in place of Host_Aliases. Since Unix groups and netgroups can also be stored in \s-1LDAP\s0 there is no real need for \fBsudo\fR\-specific aliases. .PP Cmnd_Aliases are not really required either since it is possible to have multiple users listed in a \f(CW\*(C`sudoRole\*(C'\fR. Instead of defining a Cmnd_Alias that is referenced by multiple users, one can create a \f(CW\*(C`sudoRole\*(C'\fR that contains the commands and assign multiple users to it. .SS "SUDOers \s-1LDAP\s0 container" .IX Subsection "SUDOers LDAP container" The \fIsudoers\fR configuration is contained in the \f(CW\*(C`ou=SUDOers\*(C'\fR \s-1LDAP\s0 container. .PP Sudo first looks for the \f(CW\*(C`cn=default\*(C'\fR entry in the SUDOers container. If found, the multi-valued \f(CW\*(C`sudoOption\*(C'\fR attribute is parsed in the same manner as a global \f(CW\*(C`Defaults\*(C'\fR line in \fI/usr/local/etc/sudoers\fR. In the following example, the \f(CW\*(C`SSH_AUTH_SOCK\*(C'\fR variable will be preserved in the environment for all users. .PP .Vb 6 \& dn: cn=defaults,ou=SUDOers,dc=example,dc=com \& objectClass: top \& objectClass: sudoRole \& cn: defaults \& description: Default sudoOption\*(Aqs go here \& sudoOption: env_keep+=SSH_AUTH_SOCK .Ve .PP The equivalent of a sudoer in \s-1LDAP\s0 is a \f(CW\*(C`sudoRole\*(C'\fR. It consists of the following attributes: .IP "\fBsudoUser\fR" 4 .IX Item "sudoUser" A user name, uid (prefixed with \f(CW\*(Aq#\*(Aq\fR), Unix group (prefixed with a \f(CW\*(Aq%\*(Aq\fR) or user netgroup (prefixed with a \f(CW\*(Aq+\*(Aq\fR). .IP "\fBsudoHost\fR" 4 .IX Item "sudoHost" A host name, \s-1IP\s0 address, \s-1IP\s0 network, or host netgroup (prefixed with a \f(CW\*(Aq+\*(Aq\fR). The special value \f(CW\*(C`ALL\*(C'\fR will match any host. .IP "\fBsudoCommand\fR" 4 .IX Item "sudoCommand" A Unix command with optional command line arguments, potentially including globbing characters (aka wild cards). The special value \f(CW\*(C`ALL\*(C'\fR will match any command. If a command is prefixed with an exclamation point \f(CW\*(Aq!\*(Aq\fR, the user will be prohibited from running that command. .IP "\fBsudoOption\fR" 4 .IX Item "sudoOption" Identical in function to the global options described above, but specific to the \f(CW\*(C`sudoRole\*(C'\fR in which it resides. .IP "\fBsudoRunAsUser\fR" 4 .IX Item "sudoRunAsUser" A user name or uid (prefixed with \f(CW\*(Aq#\*(Aq\fR) that commands may be run as or a Unix group (prefixed with a \f(CW\*(Aq%\*(Aq\fR) or user netgroup (prefixed with a \f(CW\*(Aq+\*(Aq\fR) that contains a list of users that commands may be run as. The special value \f(CW\*(C`ALL\*(C'\fR will match any user. .Sp The \f(CW\*(C`sudoRunAsUser\*(C'\fR attribute is only available in \fBsudo\fR versions 1.7.0 and higher. Older versions of \fBsudo\fR use the \f(CW\*(C`sudoRunAs\*(C'\fR attribute instead. .IP "\fBsudoRunAsGroup\fR" 4 .IX Item "sudoRunAsGroup" A Unix group or gid (prefixed with \f(CW\*(Aq#\*(Aq\fR) that commands may be run as. The special value \f(CW\*(C`ALL\*(C'\fR will match any group. .Sp The \f(CW\*(C`sudoRunAsGroup\*(C'\fR attribute is only available in \fBsudo\fR versions 1.7.0 and higher. .IP "\fBsudoNotBefore\fR" 4 .IX Item "sudoNotBefore" A timestamp in the form \f(CW\*(C`yyyymmddHHMMSSZ\*(C'\fR that can be used to provide a start date/time for when the \f(CW\*(C`sudoRole\*(C'\fR will be valid. If multiple \f(CW\*(C`sudoNotBefore\*(C'\fR entries are present, the earliest is used. Note that timestamps must be in Coordinated Universal Time (\s-1UTC\s0), not the local timezone. The minute and seconds portions are optional, but some \s-1LDAP\s0 servers require that they be present (contrary to the \s-1RFC\s0). .Sp The \f(CW\*(C`sudoNotBefore\*(C'\fR attribute is only available in \fBsudo\fR versions 1.7.5 and higher and must be explicitly enabled via the \fB\s-1SUDOERS_TIMED\s0\fR option in \fI/etc/ldap.conf\fR. .IP "\fBsudoNotAfter\fR" 4 .IX Item "sudoNotAfter" A timestamp in the form \f(CW\*(C`yyyymmddHHMMSSZ\*(C'\fR that indicates an expiration date/time, after which the \f(CW\*(C`sudoRole\*(C'\fR will no longer be valid. If multiple \f(CW\*(C`sudoNotBefore\*(C'\fR entries are present, the last one is used. Note that timestamps must be in Coordinated Universal Time (\s-1UTC\s0), not the local timezone. The minute and seconds portions are optional, but some \s-1LDAP\s0 servers require that they be present (contrary to the \s-1RFC\s0). .Sp The \f(CW\*(C`sudoNotAfter\*(C'\fR attribute is only available in \fBsudo\fR versions 1.7.5 and higher and must be explicitly enabled via the \fB\s-1SUDOERS_TIMED\s0\fR option in \fI/etc/ldap.conf\fR. .IP "\fBsudoOrder\fR" 4 .IX Item "sudoOrder" The \f(CW\*(C`sudoRole\*(C'\fR entries retrieved from the \s-1LDAP\s0 directory have no inherent order. The \f(CW\*(C`sudoOrder\*(C'\fR attribute is an integer (or floating point value for \s-1LDAP\s0 servers that support it) that is used to sort the matching entries. This allows LDAP-based sudoers entries to more closely mimic the behaviour of the sudoers file, where the of the entries influences the result. If multiple entries match, the entry with the highest \f(CW\*(C`sudoOrder\*(C'\fR attribute is chosen. This corresponds to the \*(L"last match\*(R" behavior of the sudoers file. If the \f(CW\*(C`sudoOrder\*(C'\fR attribute is not present, a value of 0 is assumed. .Sp The \f(CW\*(C`sudoOrder\*(C'\fR attribute is only available in \fBsudo\fR versions 1.7.5 and higher. .PP Each attribute listed above should contain a single value, but there may be multiple instances of each attribute type. A \f(CW\*(C`sudoRole\*(C'\fR must contain at least one \f(CW\*(C`sudoUser\*(C'\fR, \f(CW\*(C`sudoHost\*(C'\fR and \f(CW\*(C`sudoCommand\*(C'\fR. .PP The following example allows users in group wheel to run any command on any host via \fBsudo\fR: .PP .Vb 7 \& dn: cn=%wheel,ou=SUDOers,dc=example,dc=com \& objectClass: top \& objectClass: sudoRole \& cn: %wheel \& sudoUser: %wheel \& sudoHost: ALL \& sudoCommand: ALL .Ve .SS "Anatomy of \s-1LDAP\s0 sudoers lookup" .IX Subsection "Anatomy of LDAP sudoers lookup" When looking up a sudoer using \s-1LDAP\s0 there are only two or three \&\s-1LDAP\s0 queries per invocation. The first query is to parse the global options. The second is to match against the user's name and the groups that the user belongs to. (The special \s-1ALL\s0 tag is matched in this query too.) If no match is returned for the user's name and groups, a third query returns all entries containing user netgroups and checks to see if the user belongs to any of them. .PP If timed entries are enabled with the \fB\s-1SUDOERS_TIMED\s0\fR configuration directive, the \s-1LDAP\s0 queries include a subfilter that limits retrieval to entries that satisfy the time constraints, if any. .SS "Differences between \s-1LDAP\s0 and non-LDAP sudoers" .IX Subsection "Differences between LDAP and non-LDAP sudoers" There are some subtle differences in the way sudoers is handled once in \s-1LDAP\s0. Probably the biggest is that according to the \s-1RFC\s0, \&\s-1LDAP\s0 ordering is arbitrary and you cannot expect that Attributes and Entries are returned in any specific order. .PP The order in which different entries are applied can be controlled using the \f(CW\*(C`sudoOrder\*(C'\fR attribute, but there is no way to guarantee the order of attributes within a specific entry. If there are conflicting command rules in an entry, the negative takes precedence. This is called paranoid behavior (not necessarily the most specific match). .PP Here is an example: .PP .Vb 5 \& # /etc/sudoers: \& # Allow all commands except shell \& johnny ALL=(root) ALL,!/bin/sh \& # Always allows all commands because ALL is matched last \& puddles ALL=(root) !/bin/sh,ALL \& \& # LDAP equivalent of johnny \& # Allows all commands except shell \& dn: cn=role1,ou=Sudoers,dc=my\-domain,dc=com \& objectClass: sudoRole \& objectClass: top \& cn: role1 \& sudoUser: johnny \& sudoHost: ALL \& sudoCommand: ALL \& sudoCommand: !/bin/sh \& \& # LDAP equivalent of puddles \& # Notice that even though ALL comes last, it still behaves like \& # role1 since the LDAP code assumes the more paranoid configuration \& dn: cn=role2,ou=Sudoers,dc=my\-domain,dc=com \& objectClass: sudoRole \& objectClass: top \& cn: role2 \& sudoUser: puddles \& sudoHost: ALL \& sudoCommand: !/bin/sh \& sudoCommand: ALL .Ve .PP Another difference is that negations on the Host, User or Runas are currently ignored. For example, the following attributes do not behave the way one might expect. .PP .Vb 3 \& # does not match all but joe \& # rather, does not match anyone \& sudoUser: !joe \& \& # does not match all but joe \& # rather, matches everyone including Joe \& sudoUser: ALL \& sudoUser: !joe \& \& # does not match all but web01 \& # rather, matches all hosts including web01 \& sudoHost: ALL \& sudoHost: !web01 .Ve .SS "Sudoers Schema" .IX Subsection "Sudoers Schema" In order to use \fBsudo\fR's \s-1LDAP\s0 support, the \fBsudo\fR schema must be installed on your \s-1LDAP\s0 server. In addition, be sure to index the \&'sudoUser' attribute. .PP Three versions of the schema: one for OpenLDAP servers (\fIschema.OpenLDAP\fR), one for Netscape-derived servers (\fIschema.iPlanet\fR), and one for Microsoft Active Directory (\fIschema.ActiveDirectory\fR) may be found in the \fBsudo\fR distribution. .PP The schema for \fBsudo\fR in OpenLDAP form is included in the \s-1EXAMPLES\s0 section. .SS "Configuring ldap.conf" .IX Subsection "Configuring ldap.conf" Sudo reads the \fI/etc/ldap.conf\fR file for LDAP-specific configuration. Typically, this file is shared amongst different LDAP-aware clients. As such, most of the settings are not \fBsudo\fR\-specific. Note that \&\fBsudo\fR parses \fI/etc/ldap.conf\fR itself and may support options that differ from those described in the \fIldap.conf\fR\|(4) manual. .PP Also note that on systems using the OpenLDAP libraries, default values specified in \fI/etc/openldap/ldap.conf\fR or the user's \&\fI.ldaprc\fR files are not used. .PP Only those options explicitly listed in \fI/etc/ldap.conf\fR as being supported by \fBsudo\fR are honored. Configuration options are listed below in upper case but are parsed in a case-independent manner. .IP "\fB\s-1URI\s0\fR ldap[s]://[hostname[:port]] ..." 4 .IX Item "URI ldap[s]://[hostname[:port]] ..." Specifies a whitespace-delimited list of one or more URIs describing the \s-1LDAP\s0 server(s) to connect to. The \fIprotocol\fR may be either \&\fBldap\fR or \fBldaps\fR, the latter being for servers that support \s-1TLS\s0 (\s-1SSL\s0) encryption. If no \fIport\fR is specified, the default is port 389 for \f(CW\*(C`ldap://\*(C'\fR or port 636 for \f(CW\*(C`ldaps://\*(C'\fR. If no \fIhostname\fR is specified, \fBsudo\fR will connect to \fBlocalhost\fR. Multiple \fB\s-1URI\s0\fR lines are treated identically to a \fB\s-1URI\s0\fR line containing multiple entries. Only systems using the OpenSSL libraries support the mixing of \f(CW\*(C`ldap://\*(C'\fR and \f(CW\*(C`ldaps://\*(C'\fR URIs. The Netscape-derived libraries used on most commercial versions of Unix are only capable of supporting one or the other. .IP "\fB\s-1HOST\s0\fR name[:port] ..." 4 .IX Item "HOST name[:port] ..." If no \fB\s-1URI\s0\fR is specified, the \fB\s-1HOST\s0\fR parameter specifies a whitespace-delimited list of \s-1LDAP\s0 servers to connect to. Each host may include an optional \fIport\fR separated by a colon (':'). The \&\fB\s-1HOST\s0\fR parameter is deprecated in favor of the \fB\s-1URI\s0\fR specification and is included for backwards compatibility. .IP "\fB\s-1PORT\s0\fR port_number" 4 .IX Item "PORT port_number" If no \fB\s-1URI\s0\fR is specified, the \fB\s-1PORT\s0\fR parameter specifies the default port to connect to on the \s-1LDAP\s0 server if a \fB\s-1HOST\s0\fR parameter does not specify the port itself. If no \fB\s-1PORT\s0\fR parameter is used, the default is port 389 for \s-1LDAP\s0 and port 636 for \s-1LDAP\s0 over \s-1TLS\s0 (\s-1SSL\s0). The \fB\s-1PORT\s0\fR parameter is deprecated in favor of the \fB\s-1URI\s0\fR specification and is included for backwards compatibility. .IP "\fB\s-1BIND_TIMELIMIT\s0\fR seconds" 4 .IX Item "BIND_TIMELIMIT seconds" The \fB\s-1BIND_TIMELIMIT\s0\fR parameter specifies the amount of time, in seconds, to wait while trying to connect to an \s-1LDAP\s0 server. If multiple \fB\s-1URI\s0\fRs or \&\fB\s-1HOST\s0\fRs are specified, this is the amount of time to wait before trying the next one in the list. .IP "\fB\s-1NETWORK_TIMEOUT\s0\fR seconds" 4 .IX Item "NETWORK_TIMEOUT seconds" An alias for \fB\s-1BIND_TIMELIMIT\s0\fR for OpenLDAP compatibility. .IP "\fB\s-1TIMELIMIT\s0\fR seconds" 4 .IX Item "TIMELIMIT seconds" The \fB\s-1TIMELIMIT\s0\fR parameter specifies the amount of time, in seconds, to wait for a response to an \s-1LDAP\s0 query. .IP "\fB\s-1TIMEOUT\s0\fR seconds" 4 .IX Item "TIMEOUT seconds" The \fB\s-1TIMEOUT\s0\fR parameter specifies the amount of time, in seconds, to wait for a response from the various \s-1LDAP\s0 APIs. .IP "\fB\s-1SUDOERS_BASE\s0\fR base" 4 .IX Item "SUDOERS_BASE base" The base \s-1DN\s0 to use when performing \fBsudo\fR \s-1LDAP\s0 queries. Typically this is of the form \f(CW\*(C`ou=SUDOers,dc=example,dc=com\*(C'\fR for the domain \&\f(CW\*(C`example.com\*(C'\fR. Multiple \fB\s-1SUDOERS_BASE\s0\fR lines may be specified, in which case they are queried in the order specified. .IP "\fB\s-1SUDOERS_SEARCH_FILTER\s0\fR ldap_filter" 4 .IX Item "SUDOERS_SEARCH_FILTER ldap_filter" An \s-1LDAP\s0 filter which is used to restrict the set of records returned when performing a \fBsudo\fR \s-1LDAP\s0 query. Typically, this is of the form \f(CW\*(C`attribute=value\*(C'\fR or \f(CW\*(C`(&(attribute=value)(attribute2=value2))\*(C'\fR. .IP "\fB\s-1SUDOERS_TIMED\s0\fR on/true/yes/off/false/no" 4 .IX Item "SUDOERS_TIMED on/true/yes/off/false/no" Whether or not to evaluate the \f(CW\*(C`sudoNotBefore\*(C'\fR and \f(CW\*(C`sudoNotAfter\*(C'\fR attributes that implement time-dependent sudoers entries. .IP "\fB\s-1SUDOERS_DEBUG\s0\fR debug_level" 4 .IX Item "SUDOERS_DEBUG debug_level" This sets the debug level for \fBsudo\fR \s-1LDAP\s0 queries. Debugging information is printed to the standard error. A value of 1 results in a moderate amount of debugging information. A value of 2 shows the results of the matches themselves. This parameter should not be set in a production environment as the extra information is likely to confuse users. .IP "\fB\s-1BINDDN\s0\fR \s-1DN\s0" 4 .IX Item "BINDDN DN" The \fB\s-1BINDDN\s0\fR parameter specifies the identity, in the form of a Distinguished Name (\s-1DN\s0), to use when performing \s-1LDAP\s0 operations. If not specified, \s-1LDAP\s0 operations are performed with an anonymous identity. By default, most \s-1LDAP\s0 servers will allow anonymous access. .IP "\fB\s-1BINDPW\s0\fR secret" 4 .IX Item "BINDPW secret" The \fB\s-1BINDPW\s0\fR parameter specifies the password to use when performing \&\s-1LDAP\s0 operations. This is typically used in conjunction with the \&\fB\s-1BINDDN\s0\fR parameter. .IP "\fB\s-1ROOTBINDDN\s0\fR \s-1DN\s0" 4 .IX Item "ROOTBINDDN DN" The \fB\s-1ROOTBINDDN\s0\fR parameter specifies the identity, in the form of a Distinguished Name (\s-1DN\s0), to use when performing privileged \s-1LDAP\s0 operations, such as \fIsudoers\fR queries. The password corresponding to the identity should be stored in \fI/etc/ldap.secret\fR. If not specified, the \fB\s-1BINDDN\s0\fR identity is used (if any). .IP "\fB\s-1LDAP_VERSION\s0\fR number" 4 .IX Item "LDAP_VERSION number" The version of the \s-1LDAP\s0 protocol to use when connecting to the server. The default value is protocol version 3. .IP "\fB\s-1SSL\s0\fR on/true/yes/off/false/no" 4 .IX Item "SSL on/true/yes/off/false/no" If the \fB\s-1SSL\s0\fR parameter is set to \f(CW\*(C`on\*(C'\fR, \f(CW\*(C`true\*(C'\fR or \f(CW\*(C`yes\*(C'\fR, \s-1TLS\s0 (\s-1SSL\s0) encryption is always used when communicating with the \s-1LDAP\s0 server. Typically, this involves connecting to the server on port 636 (ldaps). .IP "\fB\s-1SSL\s0\fR start_tls" 4 .IX Item "SSL start_tls" If the \fB\s-1SSL\s0\fR parameter is set to \f(CW\*(C`start_tls\*(C'\fR, the \s-1LDAP\s0 server connection is initiated normally and \s-1TLS\s0 encryption is begun before the bind credentials are sent. This has the advantage of not requiring a dedicated port for encrypted communications. This parameter is only supported by \s-1LDAP\s0 servers that honor the \f(CW\*(C`start_tls\*(C'\fR extension, such as the OpenLDAP server. .IP "\fB\s-1TLS_CHECKPEER\s0\fR on/true/yes/off/false/no" 4 .IX Item "TLS_CHECKPEER on/true/yes/off/false/no" If enabled, \fB\s-1TLS_CHECKPEER\s0\fR will cause the \s-1LDAP\s0 server's \s-1TLS\s0 certificated to be verified. If the server's \s-1TLS\s0 certificate cannot be verified (usually because it is signed by an unknown certificate authority), \fBsudo\fR will be unable to connect to it. If \fB\s-1TLS_CHECKPEER\s0\fR is disabled, no check is made. Note that disabling the check creates an opportunity for man-in-the-middle attacks since the server's identity will not be authenticated. If possible, the \s-1CA\s0's certificate should be installed locally so it can be verified. .IP "\fB\s-1TLS_CACERT\s0\fR file name" 4 .IX Item "TLS_CACERT file name" An alias for \fB\s-1TLS_CACERTFILE\s0\fR for OpenLDAP compatibility. .IP "\fB\s-1TLS_CACERTFILE\s0\fR file name" 4 .IX Item "TLS_CACERTFILE file name" The path to a certificate authority bundle which contains the certificates for all the Certificate Authorities the client knows to be valid, e.g. \fI/etc/ssl/ca\-bundle.pem\fR. This option is only supported by the OpenLDAP libraries. Netscape-derived \s-1LDAP\s0 libraries use the same certificate database for \s-1CA\s0 and client certificates (see \fB\s-1TLS_CERT\s0\fR). .IP "\fB\s-1TLS_CACERTDIR\s0\fR directory" 4 .IX Item "TLS_CACERTDIR directory" Similar to \fB\s-1TLS_CACERTFILE\s0\fR but instead of a file, it is a directory containing individual Certificate Authority certificates, e.g. \fI/etc/ssl/certs\fR. The directory specified by \fB\s-1TLS_CACERTDIR\s0\fR is checked after \&\fB\s-1TLS_CACERTFILE\s0\fR. This option is only supported by the OpenLDAP libraries. .IP "\fB\s-1TLS_CERT\s0\fR file name" 4 .IX Item "TLS_CERT file name" The path to a file containing the client certificate which can be used to authenticate the client to the \s-1LDAP\s0 server. The certificate type depends on the \s-1LDAP\s0 libraries used. .Sp OpenLDAP: \f(CW\*(C`tls_cert /etc/ssl/client_cert.pem\*(C'\fR .Sp Netscape-derived: \f(CW\*(C`tls_cert /var/ldap/cert7.db\*(C'\fR .Sp When using Netscape-derived libraries, this file may also contain Certificate Authority certificates. .IP "\fB\s-1TLS_KEY\s0\fR file name" 4 .IX Item "TLS_KEY file name" The path to a file containing the private key which matches the certificate specified by \fB\s-1TLS_CERT\s0\fR. The private key must not be password-protected. The key type depends on the \s-1LDAP\s0 libraries used. .Sp OpenLDAP: \f(CW\*(C`tls_key /etc/ssl/client_key.pem\*(C'\fR .Sp Netscape-derived: \f(CW\*(C`tls_key /var/ldap/key3.db\*(C'\fR .IP "\fB\s-1TLS_RANDFILE\s0\fR file name" 4 .IX Item "TLS_RANDFILE file name" The \fB\s-1TLS_RANDFILE\s0\fR parameter specifies the path to an entropy source for systems that lack a random device. It is generally used in conjunction with \fIprngd\fR or \fIegd\fR. This option is only supported by the OpenLDAP libraries. .IP "\fB\s-1TLS_CIPHERS\s0\fR cipher list" 4 .IX Item "TLS_CIPHERS cipher list" The \fB\s-1TLS_CIPHERS\s0\fR parameter allows the administer to restrict which encryption algorithms may be used for \s-1TLS\s0 (\s-1SSL\s0) connections. See the OpenSSL manual for a list of valid ciphers. This option is only supported by the OpenLDAP libraries. .IP "\fB\s-1USE_SASL\s0\fR on/true/yes/off/false/no" 4 .IX Item "USE_SASL on/true/yes/off/false/no" Enable \fB\s-1USE_SASL\s0\fR for \s-1LDAP\s0 servers that support \s-1SASL\s0 authentication. .IP "\fB\s-1SASL_AUTH_ID\s0\fR identity" 4 .IX Item "SASL_AUTH_ID identity" The \s-1SASL\s0 user name to use when connecting to the \s-1LDAP\s0 server. By default, \fBsudo\fR will use an anonymous connection. .IP "\fB\s-1ROOTUSE_SASL\s0\fR on/true/yes/off/false/no" 4 .IX Item "ROOTUSE_SASL on/true/yes/off/false/no" Enable \fB\s-1ROOTUSE_SASL\s0\fR to enable \s-1SASL\s0 authentication when connecting to an \s-1LDAP\s0 server from a privileged process, such as \fBsudo\fR. .IP "\fB\s-1ROOTSASL_AUTH_ID\s0\fR identity" 4 .IX Item "ROOTSASL_AUTH_ID identity" The \s-1SASL\s0 user name to use when \fB\s-1ROOTUSE_SASL\s0\fR is enabled. .IP "\fB\s-1SASL_SECPROPS\s0\fR none/properties" 4 .IX Item "SASL_SECPROPS none/properties" \&\s-1SASL\s0 security properties or \fInone\fR for no properties. See the \&\s-1SASL\s0 programmer's manual for details. .IP "\fB\s-1KRB5_CCNAME\s0\fR file name" 4 .IX Item "KRB5_CCNAME file name" The path to the Kerberos 5 credential cache to use when authenticating with the remote server. .PP See the \f(CW\*(C`ldap.conf\*(C'\fR entry in the \s-1EXAMPLES\s0 section. .SS "Configuring nsswitch.conf" .IX Subsection "Configuring nsswitch.conf" Unless it is disabled at build time, \fBsudo\fR consults the Name Service Switch file, \fI/etc/nsswitch.conf\fR, to specify the \fIsudoers\fR search order. Sudo looks for a line beginning with \f(CW\*(C`sudoers\*(C'\fR: and uses this to determine the search order. Note that \fBsudo\fR does not stop searching after the first match and later matches take precedence over earlier ones. .PP The following sources are recognized: .PP .Vb 2 \& files read sudoers from F \& ldap read sudoers from LDAP .Ve .PP In addition, the entry \f(CW\*(C`[NOTFOUND=return]\*(C'\fR will short-circuit the search if the user was not found in the preceding source. .PP To consult \s-1LDAP\s0 first followed by the local sudoers file (if it exists), use: .PP .Vb 1 \& sudoers: ldap files .Ve .PP The local \fIsudoers\fR file can be ignored completely by using: .PP .Vb 1 \& sudoers: ldap .Ve .PP If the \fI/etc/nsswitch.conf\fR file is not present or there is no sudoers line, the following default is assumed: .PP .Vb 1 \& sudoers: files .Ve .PP Note that \fI/etc/nsswitch.conf\fR is supported even when the underlying operating system does not use an nsswitch.conf file. .SS "Configuring netsvc.conf" .IX Subsection "Configuring netsvc.conf" On \s-1AIX\s0 systems, the \fI/etc/netsvc.conf\fR file is consulted instead of \&\fI/etc/nsswitch.conf\fR. \fBsudo\fR simply treats \fInetsvc.conf\fR as a variant of \fInsswitch.conf\fR; information in the previous section unrelated to the file format itself still applies. .PP To consult \s-1LDAP\s0 first followed by the local sudoers file (if it exists), use: .PP .Vb 1 \& sudoers = ldap, files .Ve .PP The local \fIsudoers\fR file can be ignored completely by using: .PP .Vb 1 \& sudoers = ldap .Ve .PP To treat \s-1LDAP\s0 as authoratative and only use the local sudoers file if the user is not present in \s-1LDAP\s0, use: .PP .Vb 1 \& sudoers = ldap = auth, files .Ve .PP Note that in the above example, the \f(CW\*(C`auth\*(C'\fR qualfier only affects user lookups; both \s-1LDAP\s0 and \fIsudoers\fR will be queried for \f(CW\*(C`Defaults\*(C'\fR entries. .PP If the \fI/etc/netsvc.conf\fR file is not present or there is no sudoers line, the following default is assumed: .PP .Vb 1 \& sudoers = files .Ve .SH "FILES" .IX Header "FILES" .ie n .IP "\fI/etc/ldap.conf\fR" 24 .el .IP "\fI/etc/ldap.conf\fR" 24 .IX Item "/etc/ldap.conf" \&\s-1LDAP\s0 configuration file .ie n .IP "\fI/etc/nsswitch.conf\fR" 24 .el .IP "\fI/etc/nsswitch.conf\fR" 24 .IX Item "/etc/nsswitch.conf" determines sudoers source order .ie n .IP "\fI/etc/netsvc.conf\fR" 24 .el .IP "\fI/etc/netsvc.conf\fR" 24 .IX Item "/etc/netsvc.conf" determines sudoers source order on \s-1AIX\s0 .SH "EXAMPLES" .IX Header "EXAMPLES" .SS "Example ldap.conf" .IX Subsection "Example ldap.conf" .Vb 10 \& # Either specify one or more URIs or one or more host:port pairs. \& # If neither is specified sudo will default to localhost, port 389. \& # \& #host ldapserver \& #host ldapserver1 ldapserver2:390 \& # \& # Default port if host is specified without one, defaults to 389. \& #port 389 \& # \& # URI will override the host and port settings. \& uri ldap://ldapserver \& #uri ldaps://secureldapserver \& #uri ldaps://secureldapserver ldap://ldapserver \& # \& # The amount of time, in seconds, to wait while trying to connect to \& # an LDAP server. \& bind_timelimit 30 \& # \& # The amount of time, in seconds, to wait while performing an LDAP query. \& timelimit 30 \& # \& # Must be set or sudo will ignore LDAP; may be specified multiple times. \& sudoers_base ou=SUDOers,dc=example,dc=com \& # \& # verbose sudoers matching from ldap \& #sudoers_debug 2 \& # \& # Enable support for time\-based entries in sudoers. \& #sudoers_timed yes \& # \& # optional proxy credentials \& #binddn \& #bindpw \& #rootbinddn \& # \& # LDAP protocol version, defaults to 3 \& #ldap_version 3 \& # \& # Define if you want to use an encrypted LDAP connection. \& # Typically, you must also set the port to 636 (ldaps). \& #ssl on \& # \& # Define if you want to use port 389 and switch to \& # encryption before the bind credentials are sent. \& # Only supported by LDAP servers that support the start_tls \& # extension such as OpenLDAP. \& #ssl start_tls \& # \& # Additional TLS options follow that allow tweaking of the \& # SSL/TLS connection. \& # \& #tls_checkpeer yes # verify server SSL certificate \& #tls_checkpeer no # ignore server SSL certificate \& # \& # If you enable tls_checkpeer, specify either tls_cacertfile \& # or tls_cacertdir. Only supported when using OpenLDAP. \& # \& #tls_cacertfile /etc/certs/trusted_signers.pem \& #tls_cacertdir /etc/certs \& # \& # For systems that don\*(Aqt have /dev/random \& # use this along with PRNGD or EGD.pl to seed the \& # random number pool to generate cryptographic session keys. \& # Only supported when using OpenLDAP. \& # \& #tls_randfile /etc/egd\-pool \& # \& # You may restrict which ciphers are used. Consult your SSL \& # documentation for which options go here. \& # Only supported when using OpenLDAP. \& # \& #tls_ciphers \& # \& # Sudo can provide a client certificate when communicating to \& # the LDAP server. \& # Tips: \& # * Enable both lines at the same time. \& # * Do not password protect the key file. \& # * Ensure the keyfile is only readable by root. \& # \& # For OpenLDAP: \& #tls_cert /etc/certs/client_cert.pem \& #tls_key /etc/certs/client_key.pem \& # \& # For SunONE or iPlanet LDAP, tls_cert and tls_key may specify either \& # a directory, in which case the files in the directory must have the \& # default names (e.g. cert8.db and key4.db), or the path to the cert \& # and key files themselves. However, a bug in version 5.0 of the LDAP \& # SDK will prevent specific file names from working. For this reason \& # it is suggested that tls_cert and tls_key be set to a directory, \& # not a file name. \& # \& # The certificate database specified by tls_cert may contain CA certs \& # and/or the client\*(Aqs cert. If the client\*(Aqs cert is included, tls_key \& # should be specified as well. \& # For backward compatibility, "sslpath" may be used in place of tls_cert. \& #tls_cert /var/ldap \& #tls_key /var/ldap \& # \& # If using SASL authentication for LDAP (OpenSSL) \& # use_sasl yes \& # sasl_auth_id \& # rootuse_sasl yes \& # rootsasl_auth_id \& # sasl_secprops none \& # krb5_ccname /etc/.ldapcache .Ve .SS "Sudo schema for OpenLDAP" .IX Subsection "Sudo schema for OpenLDAP" The following schema, in OpenLDAP format, is included with \fBsudo\fR source and binary distributions as \fIschema.OpenLDAP\fR. Simply copy it to the schema directory (e.g. \fI/etc/openldap/schema\fR), add the proper \f(CW\*(C`include\*(C'\fR line in \f(CW\*(C`slapd.conf\*(C'\fR and restart \fBslapd\fR. .PP .Vb 6 \& attributetype ( 1.3.6.1.4.1.15953.9.1.1 \& NAME \*(AqsudoUser\*(Aq \& DESC \*(AqUser(s) who may run sudo\*(Aq \& EQUALITY caseExactIA5Match \& SUBSTR caseExactIA5SubstringsMatch \& SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) \& \& attributetype ( 1.3.6.1.4.1.15953.9.1.2 \& NAME \*(AqsudoHost\*(Aq \& DESC \*(AqHost(s) who may run sudo\*(Aq \& EQUALITY caseExactIA5Match \& SUBSTR caseExactIA5SubstringsMatch \& SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) \& \& attributetype ( 1.3.6.1.4.1.15953.9.1.3 \& NAME \*(AqsudoCommand\*(Aq \& DESC \*(AqCommand(s) to be executed by sudo\*(Aq \& EQUALITY caseExactIA5Match \& SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) \& \& attributetype ( 1.3.6.1.4.1.15953.9.1.4 \& NAME \*(AqsudoRunAs\*(Aq \& DESC \*(AqUser(s) impersonated by sudo\*(Aq \& EQUALITY caseExactIA5Match \& SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) \& \& attributetype ( 1.3.6.1.4.1.15953.9.1.5 \& NAME \*(AqsudoOption\*(Aq \& DESC \*(AqOptions(s) followed by sudo\*(Aq \& EQUALITY caseExactIA5Match \& SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) \& \& attributetype ( 1.3.6.1.4.1.15953.9.1.6 \& NAME \*(AqsudoRunAsUser\*(Aq \& DESC \*(AqUser(s) impersonated by sudo\*(Aq \& EQUALITY caseExactIA5Match \& SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) \& \& attributetype ( 1.3.6.1.4.1.15953.9.1.7 \& NAME \*(AqsudoRunAsGroup\*(Aq \& DESC \*(AqGroup(s) impersonated by sudo\*(Aq \& EQUALITY caseExactIA5Match \& SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) \& \& attributetype ( 1.3.6.1.4.1.15953.9.1.8 \& NAME \*(AqsudoNotBefore\*(Aq \& DESC \*(AqStart of time interval for which the entry is valid\*(Aq \& EQUALITY generalizedTimeMatch \& ORDERING generalizedTimeOrderingMatch \& SYNTAX 1.3.6.1.4.1.1466.115.121.1.24 ) \& \& attributetype ( 1.3.6.1.4.1.15953.9.1.9 \& NAME \*(AqsudoNotAfter\*(Aq \& DESC \*(AqEnd of time interval for which the entry is valid\*(Aq \& EQUALITY generalizedTimeMatch \& ORDERING generalizedTimeOrderingMatch \& SYNTAX 1.3.6.1.4.1.1466.115.121.1.24 ) \& \& attributeTypes ( 1.3.6.1.4.1.15953.9.1.10 \& NAME \*(AqsudoOrder\*(Aq \& DESC \*(Aqan integer to order the sudoRole entries\*(Aq \& EQUALITY integerMatch \& ORDERING integerOrderingMatch \& SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 ) \& \& objectclass ( 1.3.6.1.4.1.15953.9.2.1 NAME \*(AqsudoRole\*(Aq SUP top STRUCTURAL \& DESC \*(AqSudoer Entries\*(Aq \& MUST ( cn ) \& MAY ( sudoUser $ sudoHost $ sudoCommand $ sudoRunAs $ sudoRunAsUser $ \& sudoRunAsGroup $ sudoOption $ sudoNotBefore $ sudoNotAfter $ \& sudoOrder $ description ) \& ) .Ve .SH "SEE ALSO" .IX Header "SEE ALSO" \&\fIldap.conf\fR\|(4), \fIsudoers\fR\|(4) .SH "CAVEATS" .IX Header "CAVEATS" Note that there are differences in the way that LDAP-based \fIsudoers\fR is parsed compared to file-based \fIsudoers\fR. See the \*(L"Differences between \s-1LDAP\s0 and non-LDAP sudoers\*(R" section for more information. .SH "BUGS" .IX Header "BUGS" If you feel you have found a bug in \fBsudo\fR, please submit a bug report at http://www.sudo.ws/sudo/bugs/ .SH "SUPPORT" .IX Header "SUPPORT" Limited free support is available via the sudo-users mailing list, see http://www.sudo.ws/mailman/listinfo/sudo\-users to subscribe or search the archives. .SH "DISCLAIMER" .IX Header "DISCLAIMER" \&\fBsudo\fR is provided ``\s-1AS\s0 \s-1IS\s0'' and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. See the \s-1LICENSE\s0 file distributed with \fBsudo\fR or http://www.sudo.ws/sudo/license.html for complete details. 07070100195677000081a40000000000000000000000014e816d9400016737000000b600010002ffffffffffffffff0000002800000000root/usr/local/share/man/man4/sudoers.4.\" Copyright (c) 1994-1996, 1998-2005, 2007-2011 .\" Todd C. Miller .\" .\" Permission to use, copy, modify, and distribute this software for any .\" purpose with or without fee is hereby granted, provided that the above .\" copyright notice and this permission notice appear in all copies. .\" .\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES .\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF .\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR .\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES .\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" .\" Sponsored in part by the Defense Advanced Research Projects .\" Agency (DARPA) and Air Force Research Laboratory, Air Force .\" Materiel Command, USAF, under agreement number F39502-99-1-0512. .\" .nr SL 0 .nr BA 0 .nr LC 0 .\" .\" Automatically generated by Pod::Man 2.23 (Pod::Simple 3.14) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` . ds C' 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is turned on, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .ie \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . nr % 0 . rr F .\} .el \{\ . de IX .. .\} .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "SUDOERS 4" .TH SUDOERS 4 "August 17, 2011" "1.8.2" "MAINTENANCE COMMANDS" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" sudoers \- default sudo security policy module .SH "DESCRIPTION" .IX Header "DESCRIPTION" The \fIsudoers\fR policy module determines a user's \fBsudo\fR privileges. It is the default \fBsudo\fR policy plugin. The policy is driven by the \fI/usr/local/etc/sudoers\fR file or, optionally in \s-1LDAP\s0. The policy format is described in detail in the \*(L"\s-1SUDOERS\s0 \s-1FILE\s0 \s-1FORMAT\s0\*(R" section. For information on storing \fIsudoers\fR policy information in \s-1LDAP\s0, please see \fIsudoers.ldap\fR\|(4). .SS "Authentication and Logging" .IX Subsection "Authentication and Logging" The \fIsudoers\fR security policy requires that most users authenticate themselves before they can use \fBsudo\fR. A password is not required if the invoking user is root, if the target user is the same as the invoking user, or if the policy has disabled authentication for the user or command. Unlike \fIsu\fR\|(1), when \fIsudoers\fR requires authentication, it validates the invoking user's credentials, not the target user's (or root's) credentials. This can be changed via the \fIrootpw\fR, \fItargetpw\fR and \fIrunaspw\fR flags, described later. .PP If a user who is not listed in the policy tries to run a command via \fBsudo\fR, mail is sent to the proper authorities. The address used for such mail is configurable via the \fImailto\fR Defaults entry (described later) and defaults to \f(CW\*(C`root\*(C'\fR. .PP Note that mail will not be sent if an unauthorized user tries to run \fBsudo\fR with the \fB\-l\fR or \fB\-v\fR option. This allows users to determine for themselves whether or not they are allowed to use \&\fBsudo\fR. .PP If \fBsudo\fR is run by root and the \f(CW\*(C`SUDO_USER\*(C'\fR environment variable is set, the \fIsudoers\fR policy will use this value to determine who the actual user is. This can be used by a user to log commands through sudo even when a root shell has been invoked. It also allows the \fB\-e\fR option to remain useful even when invoked via a sudo-run script or program. Note, however, that the \fIsudoers\fR lookup is still done for root, not the user specified by \f(CW\*(C`SUDO_USER\*(C'\fR. .PP \&\fIsudoers\fR uses time stamp files for credential caching. Once a user has been authenticated, a time stamp is updated and the user may then use sudo without a password for a short period of time (\f(CW\*(C`5\*(C'\fR minutes unless overridden by the \fItimeout\fR option. By default, \fIsudoers\fR uses a tty-based time stamp which means that there is a separate time stamp for each of a user's login sessions. The \fItty_tickets\fR option can be disabled to force the use of a single time stamp for all of a user's sessions. .PP \&\fIsudoers\fR can log both successful and unsuccessful attempts (as well as errors) to \fIsyslog\fR\|(3), a log file, or both. By default, \fIsudoers\fR will log via \fIsyslog\fR\|(3) but this is changeable via the \fIsyslog\fR and \fIlogfile\fR Defaults settings. .PP \&\fIsudoers\fR also supports logging a command's input and output streams. I/O logging is not on by default but can be enabled using the \fIlog_input\fR and \fIlog_output\fR Defaults flags as well as the \&\f(CW\*(C`LOG_INPUT\*(C'\fR and \f(CW\*(C`LOG_OUTPUT\*(C'\fR command tags. .SS "Command Environment" .IX Subsection "Command Environment" Since environment variables can influence program behavior, \fIsudoers\fR provides a means to restrict which variables from the user's environment are inherited by the command to be run. There are two distinct ways \fIsudoers\fR can deal with environment variables. .PP By default, the \fIenv_reset\fR option is enabled. This causes commands to be executed with a minimal environment containing \f(CW\*(C`TERM\*(C'\fR, \&\f(CW\*(C`PATH\*(C'\fR, \f(CW\*(C`HOME\*(C'\fR, \f(CW\*(C`MAIL\*(C'\fR, \f(CW\*(C`SHELL\*(C'\fR, \f(CW\*(C`LOGNAME\*(C'\fR, \f(CW\*(C`USER\*(C'\fR and \f(CW\*(C`USERNAME\*(C'\fR in addition to variables from the invoking process permitted by the \&\fIenv_check\fR and \fIenv_keep\fR options. This is effectively a whitelist for environment variables. .PP If, however, the \fIenv_reset\fR option is disabled, any variables not explicitly denied by the \fIenv_check\fR and \fIenv_delete\fR options are inherited from the invoking process. In this case, \fIenv_check\fR and \fIenv_delete\fR behave like a blacklist. Since it is not possible to blacklist all potentially dangerous environment variables, use of the default \fIenv_reset\fR behavior is encouraged. .PP In all cases, environment variables with a value beginning with \&\f(CW\*(C`()\*(C'\fR are removed as they could be interpreted as \fBbash\fR functions. The list of environment variables that \fBsudo\fR allows or denies is contained in the output of \f(CW\*(C`sudo \-V\*(C'\fR when run as root. .PP Note that the dynamic linker on most operating systems will remove variables that can control dynamic linking from the environment of setuid executables, including \fBsudo\fR. Depending on the operating system this may include \f(CW\*(C`_RLD*\*(C'\fR, \f(CW\*(C`DYLD_*\*(C'\fR, \f(CW\*(C`LD_*\*(C'\fR, \f(CW\*(C`LDR_*\*(C'\fR, \&\f(CW\*(C`LIBPATH\*(C'\fR, \f(CW\*(C`SHLIB_PATH\*(C'\fR, and others. These type of variables are removed from the environment before \fBsudo\fR even begins execution and, as such, it is not possible for \fBsudo\fR to preserve them. .PP As a special case, if \fBsudo\fR's \fB\-i\fR option (initial login) is specified, \fIsudoers\fR will initialize the environment regardless of the value of \fIenv_reset\fR. The \fI\s-1DISPLAY\s0\fR, \fI\s-1PATH\s0\fR and \fI\s-1TERM\s0\fR variables remain unchanged; \fI\s-1HOME\s0\fR, \fI\s-1MAIL\s0\fR, \fI\s-1SHELL\s0\fR, \fI\s-1USER\s0\fR, and \fI\s-1LOGNAME\s0\fR are set based on the target user. On Linux and \s-1AIX\s0 systems the contents of \fI/etc/environment\fR are also included. All other environment variables are removed. .SH "SUDOERS FILE FORMAT" .IX Header "SUDOERS FILE FORMAT" The \fIsudoers\fR file is composed of two types of entries: aliases (basically variables) and user specifications (which specify who may run what). .PP When multiple entries match for a user, they are applied in order. Where there are multiple matches, the last match is used (which is not necessarily the most specific match). .PP The \fIsudoers\fR grammar will be described below in Extended Backus-Naur Form (\s-1EBNF\s0). Don't despair if you don't know what \s-1EBNF\s0 is; it is fairly simple, and the definitions below are annotated. .SS "Quick guide to \s-1EBNF\s0" .IX Subsection "Quick guide to EBNF" \&\s-1EBNF\s0 is a concise and exact way of describing the grammar of a language. Each \s-1EBNF\s0 definition is made up of \fIproduction rules\fR. E.g., .PP .Vb 1 \& symbol ::= definition | alternate1 | alternate2 ... .Ve .PP Each \fIproduction rule\fR references others and thus makes up a grammar for the language. \s-1EBNF\s0 also contains the following operators, which many readers will recognize from regular expressions. Do not, however, confuse them with \*(L"wildcard\*(R" characters, which have different meanings. .ie n .IP "\*(C`?\*(C'" 4 .el .IP "\f(CW\*(C`?\*(C'\fR" 4 .IX Item "?" Means that the preceding symbol (or group of symbols) is optional. That is, it may appear once or not at all. .ie n .IP "\*(C`*\*(C'" 4 .el .IP "\f(CW\*(C`*\*(C'\fR" 4 .IX Item "*" Means that the preceding symbol (or group of symbols) may appear zero or more times. .ie n .IP "\*(C`+\*(C'" 4 .el .IP "\f(CW\*(C`+\*(C'\fR" 4 .IX Item "+" Means that the preceding symbol (or group of symbols) may appear one or more times. .PP Parentheses may be used to group symbols together. For clarity, we will use single quotes ('') to designate what is a verbatim character string (as opposed to a symbol name). .SS "Aliases" .IX Subsection "Aliases" There are four kinds of aliases: \f(CW\*(C`User_Alias\*(C'\fR, \f(CW\*(C`Runas_Alias\*(C'\fR, \&\f(CW\*(C`Host_Alias\*(C'\fR and \f(CW\*(C`Cmnd_Alias\*(C'\fR. .PP .Vb 4 \& Alias ::= \*(AqUser_Alias\*(Aq User_Alias (\*(Aq:\*(Aq User_Alias)* | \& \*(AqRunas_Alias\*(Aq Runas_Alias (\*(Aq:\*(Aq Runas_Alias)* | \& \*(AqHost_Alias\*(Aq Host_Alias (\*(Aq:\*(Aq Host_Alias)* | \& \*(AqCmnd_Alias\*(Aq Cmnd_Alias (\*(Aq:\*(Aq Cmnd_Alias)* \& \& User_Alias ::= NAME \*(Aq=\*(Aq User_List \& \& Runas_Alias ::= NAME \*(Aq=\*(Aq Runas_List \& \& Host_Alias ::= NAME \*(Aq=\*(Aq Host_List \& \& Cmnd_Alias ::= NAME \*(Aq=\*(Aq Cmnd_List \& \& NAME ::= [A\-Z]([A\-Z][0\-9]_)* .Ve .PP Each \fIalias\fR definition is of the form .PP .Vb 1 \& Alias_Type NAME = item1, item2, ... .Ve .PP where \fIAlias_Type\fR is one of \f(CW\*(C`User_Alias\*(C'\fR, \f(CW\*(C`Runas_Alias\*(C'\fR, \f(CW\*(C`Host_Alias\*(C'\fR, or \f(CW\*(C`Cmnd_Alias\*(C'\fR. A \f(CW\*(C`NAME\*(C'\fR is a string of uppercase letters, numbers, and underscore characters ('_'). A \f(CW\*(C`NAME\*(C'\fR \fBmust\fR start with an uppercase letter. It is possible to put several alias definitions of the same type on a single line, joined by a colon (':'). E.g., .PP .Vb 1 \& Alias_Type NAME = item1, item2, item3 : NAME = item4, item5 .Ve .PP The definitions of what constitutes a valid \fIalias\fR member follow. .PP .Vb 2 \& User_List ::= User | \& User \*(Aq,\*(Aq User_List \& \& User ::= \*(Aq!\*(Aq* user name | \& \*(Aq!\*(Aq* #uid | \& \*(Aq!\*(Aq* %group | \& \*(Aq!\*(Aq* %#gid | \& \*(Aq!\*(Aq* +netgroup | \& \*(Aq!\*(Aq* %:nonunix_group | \& \*(Aq!\*(Aq* %:#nonunix_gid | \& \*(Aq!\*(Aq* User_Alias .Ve .PP A \f(CW\*(C`User_List\*(C'\fR is made up of one or more user names, user ids (prefixed with '#'), system group names and ids (prefixed with '%' and '%#' respectively), netgroups (prefixed with '+'), non-Unix group names and IDs (prefixed with '%:' and '%:#' respectively) and \&\f(CW\*(C`User_Alias\*(C'\fRes. Each list item may be prefixed with zero or more \&'!' operators. An odd number of '!' operators negate the value of the item; an even number just cancel each other out. .PP A \f(CW\*(C`user name\*(C'\fR, \f(CW\*(C`uid\*(C'\fR, \f(CW\*(C`group\*(C'\fR, \f(CW\*(C`gid\*(C'\fR, \f(CW\*(C`netgroup\*(C'\fR, \f(CW\*(C`nonunix_group\*(C'\fR or \f(CW\*(C`nonunix_gid\*(C'\fR may be enclosed in double quotes to avoid the need for escaping special characters. Alternately, special characters may be specified in escaped hex mode, e.g. \ex20 for space. When using double quotes, any prefix characters must be included inside the quotes. .PP The actual \f(CW\*(C`nonunix_group\*(C'\fR and \f(CW\*(C`nonunix_gid\*(C'\fR syntax depends on the underlying group provider plugin (see the \fIgroup_plugin\fR description below). For instance, the \s-1QAS\s0 \s-1AD\s0 plugin supports the following formats: .IP "\(bu" 4 Group in the same domain: \*(L"Group Name\*(R" .IP "\(bu" 4 Group in any domain: \*(L"Group Name@FULLY.QUALIFIED.DOMAIN\*(R" .IP "\(bu" 4 Group \s-1SID:\s0 \*(L"S\-1\-2\-34\-5678901234\-5678901234\-5678901234\-567\*(R" .PP Note that quotes around group names are optional. Unquoted strings must use a backslash (\e) to escape spaces and special characters. See \*(L"Other special characters and reserved words\*(R" for a list of characters that need to be escaped. .PP .Vb 2 \& Runas_List ::= Runas_Member | \& Runas_Member \*(Aq,\*(Aq Runas_List \& \& Runas_Member ::= \*(Aq!\*(Aq* user name | \& \*(Aq!\*(Aq* #uid | \& \*(Aq!\*(Aq* %group | \& \*(Aq!\*(Aq* %#gid | \& \*(Aq!\*(Aq* %:nonunix_group | \& \*(Aq!\*(Aq* %:#nonunix_gid | \& \*(Aq!\*(Aq* +netgroup | \& \*(Aq!\*(Aq* Runas_Alias .Ve .PP A \f(CW\*(C`Runas_List\*(C'\fR is similar to a \f(CW\*(C`User_List\*(C'\fR except that instead of \f(CW\*(C`User_Alias\*(C'\fRes it can contain \f(CW\*(C`Runas_Alias\*(C'\fRes. Note that user names and groups are matched as strings. In other words, two users (groups) with the same uid (gid) are considered to be distinct. If you wish to match all user names with the same uid (e.g.\ root and toor), you can use a uid instead (#0 in the example given). .PP .Vb 2 \& Host_List ::= Host | \& Host \*(Aq,\*(Aq Host_List \& \& Host ::= \*(Aq!\*(Aq* host name | \& \*(Aq!\*(Aq* ip_addr | \& \*(Aq!\*(Aq* network(/netmask)? | \& \*(Aq!\*(Aq* +netgroup | \& \*(Aq!\*(Aq* Host_Alias .Ve .PP A \f(CW\*(C`Host_List\*(C'\fR is made up of one or more host names, \s-1IP\s0 addresses, network numbers, netgroups (prefixed with '+') and other aliases. Again, the value of an item may be negated with the '!' operator. If you do not specify a netmask along with the network number, \&\fBsudo\fR will query each of the local host's network interfaces and, if the network number corresponds to one of the hosts's network interfaces, the corresponding netmask will be used. The netmask may be specified either in standard \s-1IP\s0 address notation (e.g.\ 255.255.255.0 or ffff:ffff:ffff:ffff::), or \s-1CIDR\s0 notation (number of bits, e.g.\ 24 or 64). A host name may include shell-style wildcards (see the Wildcards section below), but unless the \f(CW\*(C`host name\*(C'\fR command on your machine returns the fully qualified host name, you'll need to use the \fIfqdn\fR option for wildcards to be useful. Note \fBsudo\fR only inspects actual network interfaces; this means that \s-1IP\s0 address 127.0.0.1 (localhost) will never match. Also, the host name \*(L"localhost\*(R" will only match if that is the actual host name, which is usually only the case for non-networked systems. .PP .Vb 2 \& Cmnd_List ::= Cmnd | \& Cmnd \*(Aq,\*(Aq Cmnd_List \& \& commandname ::= file name | \& file name args | \& file name \*(Aq""\*(Aq \& \& Cmnd ::= \*(Aq!\*(Aq* commandname | \& \*(Aq!\*(Aq* directory | \& \*(Aq!\*(Aq* "sudoedit" | \& \*(Aq!\*(Aq* Cmnd_Alias .Ve .PP A \f(CW\*(C`Cmnd_List\*(C'\fR is a list of one or more commandnames, directories, and other aliases. A commandname is a fully qualified file name which may include shell-style wildcards (see the Wildcards section below). A simple file name allows the user to run the command with any arguments he/she wishes. However, you may also specify command line arguments (including wildcards). Alternately, you can specify \f(CW""\fR to indicate that the command may only be run \fBwithout\fR command line arguments. A directory is a fully qualified path name ending in a '/'. When you specify a directory in a \f(CW\*(C`Cmnd_List\*(C'\fR, the user will be able to run any file within that directory (but not in any subdirectories therein). .PP If a \f(CW\*(C`Cmnd\*(C'\fR has associated command line arguments, then the arguments in the \f(CW\*(C`Cmnd\*(C'\fR must match exactly those given by the user on the command line (or match the wildcards if there are any). Note that the following characters must be escaped with a '\e' if they are used in command arguments: ',', ':', '=', '\e'. The special command \f(CW"sudoedit"\fR is used to permit a user to run \fBsudo\fR with the \fB\-e\fR option (or as \fBsudoedit\fR). It may take command line arguments just as a normal command does. .SS "Defaults" .IX Subsection "Defaults" Certain configuration options may be changed from their default values at runtime via one or more \f(CW\*(C`Default_Entry\*(C'\fR lines. These may affect all users on any host, all users on a specific host, a specific user, a specific command, or commands being run as a specific user. Note that per-command entries may not include command line arguments. If you need to specify arguments, define a \f(CW\*(C`Cmnd_Alias\*(C'\fR and reference that instead. .PP .Vb 5 \& Default_Type ::= \*(AqDefaults\*(Aq | \& \*(AqDefaults\*(Aq \*(Aq@\*(Aq Host_List | \& \*(AqDefaults\*(Aq \*(Aq:\*(Aq User_List | \& \*(AqDefaults\*(Aq \*(Aq!\*(Aq Cmnd_List | \& \*(AqDefaults\*(Aq \*(Aq>\*(Aq Runas_List \& \& Default_Entry ::= Default_Type Parameter_List \& \& Parameter_List ::= Parameter | \& Parameter \*(Aq,\*(Aq Parameter_List \& \& Parameter ::= Parameter \*(Aq=\*(Aq Value | \& Parameter \*(Aq+=\*(Aq Value | \& Parameter \*(Aq\-=\*(Aq Value | \& \*(Aq!\*(Aq* Parameter .Ve .PP Parameters may be \fBflags\fR, \fBinteger\fR values, \fBstrings\fR, or \fBlists\fR. Flags are implicitly boolean and can be turned off via the '!' operator. Some integer, string and list parameters may also be used in a boolean context to disable them. Values may be enclosed in double quotes (\f(CW\*(C`"\*(C'\fR) when they contain multiple words. Special characters may be escaped with a backslash (\f(CW\*(C`\e\*(C'\fR). .PP Lists have two additional assignment operators, \f(CW\*(C`+=\*(C'\fR and \f(CW\*(C`\-=\*(C'\fR. These operators are used to add to and delete from a list respectively. It is not an error to use the \f(CW\*(C`\-=\*(C'\fR operator to remove an element that does not exist in a list. .PP Defaults entries are parsed in the following order: generic, host and user Defaults first, then runas Defaults and finally command defaults. .PP See \*(L"\s-1SUDOERS\s0 \s-1OPTIONS\s0\*(R" for a list of supported Defaults parameters. .SS "User Specification" .IX Subsection "User Specification" .Vb 2 \& User_Spec ::= User_List Host_List \*(Aq=\*(Aq Cmnd_Spec_List \e \& (\*(Aq:\*(Aq Host_List \*(Aq=\*(Aq Cmnd_Spec_List)* \& \& Cmnd_Spec_List ::= Cmnd_Spec | \& Cmnd_Spec \*(Aq,\*(Aq Cmnd_Spec_List \& .ie \n(SL \& Cmnd_Spec ::= Runas_Spec? SELinux_Spec? Tag_Spec* Cmnd .el \& Cmnd_Spec ::= Runas_Spec? Tag_Spec* Cmnd \& \& Runas_Spec ::= \*(Aq(\*(Aq Runas_List? (\*(Aq:\*(Aq Runas_List)? \*(Aq)\*(Aq \& .if \n(SL \{\ \& SELinux_Spec ::= (\*(AqROLE=role\*(Aq | \*(AqTYPE=type\*(Aq) \& \} \& Tag_Spec ::= (\*(AqNOPASSWD:\*(Aq | \*(AqPASSWD:\*(Aq | \*(AqNOEXEC:\*(Aq | \*(AqEXEC:\*(Aq | \& \*(AqSETENV:\*(Aq | \*(AqNOSETENV:\*(Aq | \*(AqLOG_INPUT:\*(Aq | \*(AqNOLOG_INPUT:\*(Aq | \& \*(AqLOG_OUTPUT:\*(Aq | \*(AqNOLOG_OUTPUT:\*(Aq) .Ve .PP A \fBuser specification\fR determines which commands a user may run (and as what user) on specified hosts. By default, commands are run as \fBroot\fR, but this can be changed on a per-command basis. .PP The basic structure of a user specification is `who where = (as_whom) what'. Let's break that down into its constituent parts: .SS "Runas_Spec" .IX Subsection "Runas_Spec" A \f(CW\*(C`Runas_Spec\*(C'\fR determines the user and/or the group that a command may be run as. A fully-specified \f(CW\*(C`Runas_Spec\*(C'\fR consists of two \&\f(CW\*(C`Runas_List\*(C'\fRs (as defined above) separated by a colon (':') and enclosed in a set of parentheses. The first \f(CW\*(C`Runas_List\*(C'\fR indicates which users the command may be run as via \fBsudo\fR's \fB\-u\fR option. The second defines a list of groups that can be specified via \&\fBsudo\fR's \fB\-g\fR option. If both \f(CW\*(C`Runas_List\*(C'\fRs are specified, the command may be run with any combination of users and groups listed in their respective \f(CW\*(C`Runas_List\*(C'\fRs. If only the first is specified, the command may be run as any user in the list but no \fB\-g\fR option may be specified. If the first \f(CW\*(C`Runas_List\*(C'\fR is empty but the second is specified, the command may be run as the invoking user with the group set to any listed in the \f(CW\*(C`Runas_List\*(C'\fR. If no \&\f(CW\*(C`Runas_Spec\*(C'\fR is specified the command may be run as \fBroot\fR and no group may be specified. .PP A \f(CW\*(C`Runas_Spec\*(C'\fR sets the default for the commands that follow it. What this means is that for the entry: .PP .Vb 1 \& dgb boulder = (operator) /bin/ls, /bin/kill, /usr/bin/lprm .Ve .PP The user \fBdgb\fR may run \fI/bin/ls\fR, \fI/bin/kill\fR, and \&\fI/usr/bin/lprm\fR \*(-- but only as \fBoperator\fR. E.g., .PP .Vb 1 \& $ sudo \-u operator /bin/ls .Ve .PP It is also possible to override a \f(CW\*(C`Runas_Spec\*(C'\fR later on in an entry. If we modify the entry like so: .PP .Vb 1 \& dgb boulder = (operator) /bin/ls, (root) /bin/kill, /usr/bin/lprm .Ve .PP Then user \fBdgb\fR is now allowed to run \fI/bin/ls\fR as \fBoperator\fR, but \fI/bin/kill\fR and \fI/usr/bin/lprm\fR as \fBroot\fR. .PP We can extend this to allow \fBdgb\fR to run \f(CW\*(C`/bin/ls\*(C'\fR with either the user or group set to \fBoperator\fR: .PP .Vb 2 \& dgb boulder = (operator : operator) /bin/ls, (root) /bin/kill, \e \& /usr/bin/lprm .Ve .PP Note that while the group portion of the \f(CW\*(C`Runas_Spec\*(C'\fR permits the user to run as command with that group, it does not force the user to do so. If no group is specified on the command line, the command will run with the group listed in the target user's password database entry. The following would all be permitted by the sudoers entry above: .PP .Vb 3 \& $ sudo \-u operator /bin/ls \& $ sudo \-u operator \-g operator /bin/ls \& $ sudo \-g operator /bin/ls .Ve .PP In the following example, user \fBtcm\fR may run commands that access a modem device file with the dialer group. .PP .Vb 2 \& tcm boulder = (:dialer) /usr/bin/tip, /usr/bin/cu, \e \& /usr/local/bin/minicom .Ve .PP Note that in this example only the group will be set, the command still runs as user \fBtcm\fR. E.g. .PP .Vb 1 \& $ sudo \-g dialer /usr/bin/cu .Ve .PP Multiple users and groups may be present in a \f(CW\*(C`Runas_Spec\*(C'\fR, in which case the user may select any combination of users and groups via the \fB\-u\fR and \fB\-g\fR options. In this example: .PP .Vb 1 \& alan ALL = (root, bin : operator, system) ALL .Ve .PP user \fBalan\fR may run any command as either user root or bin, optionally setting the group to operator or system. .if \n(SL \{\ .SS "SELinux_Spec" .IX Subsection "SELinux_Spec" On systems with SELinux support, \fIsudoers\fR entries may optionally have an SELinux role and/or type associated with a command. If a role or type is specified with the command it will override any default values specified in \fIsudoers\fR. A role or type specified on the command line, however, will supercede the values in \fIsudoers\fR. \} .SS "Tag_Spec" .IX Subsection "Tag_Spec" A command may have zero or more tags associated with it. There are eight possible tag values, \f(CW\*(C`NOPASSWD\*(C'\fR, \f(CW\*(C`PASSWD\*(C'\fR, \f(CW\*(C`NOEXEC\*(C'\fR, \&\f(CW\*(C`EXEC\*(C'\fR, \f(CW\*(C`SETENV\*(C'\fR, \f(CW\*(C`NOSETENV\*(C'\fR, \f(CW\*(C`LOG_INPUT\*(C'\fR, \f(CW\*(C`NOLOG_INPUT\*(C'\fR, \&\f(CW\*(C`LOG_OUTPUT\*(C'\fR and \f(CW\*(C`NOLOG_OUTPUT\*(C'\fR. Once a tag is set on a \f(CW\*(C`Cmnd\*(C'\fR, subsequent \f(CW\*(C`Cmnd\*(C'\fRs in the \f(CW\*(C`Cmnd_Spec_List\*(C'\fR, inherit the tag unless it is overridden by the opposite tag (i.e.: \f(CW\*(C`PASSWD\*(C'\fR overrides \&\f(CW\*(C`NOPASSWD\*(C'\fR and \f(CW\*(C`NOEXEC\*(C'\fR overrides \f(CW\*(C`EXEC\*(C'\fR). .PP \fI\s-1NOPASSWD\s0 and \s-1PASSWD\s0\fR .IX Subsection "NOPASSWD and PASSWD" .PP By default, \fBsudo\fR requires that a user authenticate him or herself before running a command. This behavior can be modified via the \&\f(CW\*(C`NOPASSWD\*(C'\fR tag. Like a \f(CW\*(C`Runas_Spec\*(C'\fR, the \f(CW\*(C`NOPASSWD\*(C'\fR tag sets a default for the commands that follow it in the \f(CW\*(C`Cmnd_Spec_List\*(C'\fR. Conversely, the \f(CW\*(C`PASSWD\*(C'\fR tag can be used to reverse things. For example: .PP .Vb 1 \& ray rushmore = NOPASSWD: /bin/kill, /bin/ls, /usr/bin/lprm .Ve .PP would allow the user \fBray\fR to run \fI/bin/kill\fR, \fI/bin/ls\fR, and \&\fI/usr/bin/lprm\fR as \fBroot\fR on the machine rushmore without authenticating himself. If we only want \fBray\fR to be able to run \fI/bin/kill\fR without a password the entry would be: .PP .Vb 1 \& ray rushmore = NOPASSWD: /bin/kill, PASSWD: /bin/ls, /usr/bin/lprm .Ve .PP Note, however, that the \f(CW\*(C`PASSWD\*(C'\fR tag has no effect on users who are in the group specified by the \fIexempt_group\fR option. .PP By default, if the \f(CW\*(C`NOPASSWD\*(C'\fR tag is applied to any of the entries for a user on the current host, he or she will be able to run \&\f(CW\*(C`sudo \-l\*(C'\fR without a password. Additionally, a user may only run \&\f(CW\*(C`sudo \-v\*(C'\fR without a password if the \f(CW\*(C`NOPASSWD\*(C'\fR tag is present for all a user's entries that pertain to the current host. This behavior may be overridden via the verifypw and listpw options. .PP \fI\s-1NOEXEC\s0 and \s-1EXEC\s0\fR .IX Subsection "NOEXEC and EXEC" .PP If \fBsudo\fR has been compiled with \fInoexec\fR support and the underlying operating system supports it, the \f(CW\*(C`NOEXEC\*(C'\fR tag can be used to prevent a dynamically-linked executable from running further commands itself. .PP In the following example, user \fBaaron\fR may run \fI/usr/bin/more\fR and \fI/usr/bin/vi\fR but shell escapes will be disabled. .PP .Vb 1 \& aaron shanty = NOEXEC: /usr/bin/more, /usr/bin/vi .Ve .PP See the \*(L"\s-1PREVENTING\s0 \s-1SHELL\s0 \s-1ESCAPES\s0\*(R" section below for more details on how \f(CW\*(C`NOEXEC\*(C'\fR works and whether or not it will work on your system. .PP \fI\s-1SETENV\s0 and \s-1NOSETENV\s0\fR .IX Subsection "SETENV and NOSETENV" .PP These tags override the value of the \fIsetenv\fR option on a per-command basis. Note that if \f(CW\*(C`SETENV\*(C'\fR has been set for a command, the user may disable the \fIenv_reset\fR option from the command line via the \&\fB\-E\fR option. Additionally, environment variables set on the command line are not subject to the restrictions imposed by \fIenv_check\fR, \&\fIenv_delete\fR, or \fIenv_keep\fR. As such, only trusted users should be allowed to set variables in this manner. If the command matched is \fB\s-1ALL\s0\fR, the \f(CW\*(C`SETENV\*(C'\fR tag is implied for that command; this default may be overridden by use of the \f(CW\*(C`NOSETENV\*(C'\fR tag. .PP \fI\s-1LOG_INPUT\s0 and \s-1NOLOG_INPUT\s0\fR .IX Subsection "LOG_INPUT and NOLOG_INPUT" .PP These tags override the value of the \fIlog_input\fR option on a per-command basis. For more information, see the description of \&\fIlog_input\fR in the \*(L"\s-1SUDOERS\s0 \s-1OPTIONS\s0\*(R" section below. .PP \fI\s-1LOG_OUTPUT\s0 and \s-1NOLOG_OUTPUT\s0\fR .IX Subsection "LOG_OUTPUT and NOLOG_OUTPUT" .PP These tags override the value of the \fIlog_output\fR option on a per-command basis. For more information, see the description of \&\fIlog_output\fR in the \*(L"\s-1SUDOERS\s0 \s-1OPTIONS\s0\*(R" section below. .SS "Wildcards" .IX Subsection "Wildcards" \&\fBsudo\fR allows shell-style \fIwildcards\fR (aka meta or glob characters) to be used in host names, path names and command line arguments in the \fIsudoers\fR file. Wildcard matching is done via the \fB\s-1POSIX\s0\fR \&\fIglob\fR\|(3) and \fIfnmatch\fR\|(3) routines. Note that these are \fInot\fR regular expressions. .ie n .IP "\*(C`*\*(C'" 8 .el .IP "\f(CW\*(C`*\*(C'\fR" 8 .IX Item "*" Matches any set of zero or more characters. .ie n .IP "\*(C`?\*(C'" 8 .el .IP "\f(CW\*(C`?\*(C'\fR" 8 .IX Item "?" Matches any single character. .ie n .IP "\*(C`[...]\*(C'" 8 .el .IP "\f(CW\*(C`[...]\*(C'\fR" 8 .IX Item "[...]" Matches any character in the specified range. .ie n .IP "\*(C`[!...]\*(C'" 8 .el .IP "\f(CW\*(C`[!...]\*(C'\fR" 8 .IX Item "[!...]" Matches any character \fBnot\fR in the specified range. .ie n .IP "\*(C`\ex\*(C'" 8 .el .IP "\f(CW\*(C`\ex\*(C'\fR" 8 .IX Item "x" For any character \*(L"x\*(R", evaluates to \*(L"x\*(R". This is used to escape special characters such as: \*(L"*\*(R", \*(L"?\*(R", \*(L"[\*(R", and \*(L"}\*(R". .PP \&\s-1POSIX\s0 character classes may also be used if your system's \fIglob\fR\|(3) and \fIfnmatch\fR\|(3) functions support them. However, because the \&\f(CW\*(Aq:\*(Aq\fR character has special meaning in \fIsudoers\fR, it must be escaped. For example: .PP .Vb 1 \& /bin/ls [[\e:alpha\e:]]* .Ve .PP Would match any file name beginning with a letter. .PP Note that a forward slash ('/') will \fBnot\fR be matched by wildcards used in the path name. When matching the command line arguments, however, a slash \fBdoes\fR get matched by wildcards. This is to make a path like: .PP .Vb 1 \& /usr/bin/* .Ve .PP match \fI/usr/bin/who\fR but not \fI/usr/bin/X11/xterm\fR. .SS "Exceptions to wildcard rules" .IX Subsection "Exceptions to wildcard rules" The following exceptions apply to the above rules: .ie n .IP """""" 8 .el .IP "\f(CW``''\fR" 8 .IX Item """""" If the empty string \f(CW""\fR is the only command line argument in the \&\fIsudoers\fR entry it means that command is not allowed to be run with \fBany\fR arguments. .SS "Including other files from within sudoers" .IX Subsection "Including other files from within sudoers" It is possible to include other \fIsudoers\fR files from within the \&\fIsudoers\fR file currently being parsed using the \f(CW\*(C`#include\*(C'\fR and \&\f(CW\*(C`#includedir\*(C'\fR directives. .PP This can be used, for example, to keep a site-wide \fIsudoers\fR file in addition to a local, per-machine file. For the sake of this example the site-wide \fIsudoers\fR will be \fI/etc/sudoers\fR and the per-machine one will be \fI/etc/sudoers.local\fR. To include \&\fI/etc/sudoers.local\fR from within \fI/etc/sudoers\fR we would use the following line in \fI/etc/sudoers\fR: .Sp .RS 4 \&\f(CW\*(C`#include /etc/sudoers.local\*(C'\fR .RE .PP When \fBsudo\fR reaches this line it will suspend processing of the current file (\fI/etc/sudoers\fR) and switch to \fI/etc/sudoers.local\fR. Upon reaching the end of \fI/etc/sudoers.local\fR, the rest of \&\fI/etc/sudoers\fR will be processed. Files that are included may themselves include other files. A hard limit of 128 nested include files is enforced to prevent include file loops. .PP The file name may include the \f(CW%h\fR escape, signifying the short form of the host name. I.e., if the machine's host name is \*(L"xerxes\*(R", then .PP \&\f(CW\*(C`#include /etc/sudoers.%h\*(C'\fR .PP will cause \fBsudo\fR to include the file \fI/etc/sudoers.xerxes\fR. .PP The \f(CW\*(C`#includedir\*(C'\fR directive can be used to create a \fIsudo.d\fR directory that the system package manager can drop \fIsudoers\fR rules into as part of package installation. For example, given: .PP \&\f(CW\*(C`#includedir /etc/sudoers.d\*(C'\fR .PP \&\fBsudo\fR will read each file in \fI/etc/sudoers.d\fR, skipping file names that end in \f(CW\*(C`~\*(C'\fR or contain a \f(CW\*(C`.\*(C'\fR character to avoid causing problems with package manager or editor temporary/backup files. Files are parsed in sorted lexical order. That is, \&\fI/etc/sudoers.d/01_first\fR will be parsed before \&\fI/etc/sudoers.d/10_second\fR. Be aware that because the sorting is lexical, not numeric, \fI/etc/sudoers.d/1_whoops\fR would be loaded \&\fBafter\fR \fI/etc/sudoers.d/10_second\fR. Using a consistent number of leading zeroes in the file names can be used to avoid such problems. .PP Note that unlike files included via \f(CW\*(C`#include\*(C'\fR, \fBvisudo\fR will not edit the files in a \f(CW\*(C`#includedir\*(C'\fR directory unless one of them contains a syntax error. It is still possible to run \fBvisudo\fR with the \f(CW\*(C`\-f\*(C'\fR flag to edit the files directly. .SS "Other special characters and reserved words" .IX Subsection "Other special characters and reserved words" The pound sign ('#') is used to indicate a comment (unless it is part of a #include directive or unless it occurs in the context of a user name and is followed by one or more digits, in which case it is treated as a uid). Both the comment character and any text after it, up to the end of the line, are ignored. .PP The reserved word \fB\s-1ALL\s0\fR is a built-in \fIalias\fR that always causes a match to succeed. It can be used wherever one might otherwise use a \f(CW\*(C`Cmnd_Alias\*(C'\fR, \f(CW\*(C`User_Alias\*(C'\fR, \f(CW\*(C`Runas_Alias\*(C'\fR, or \f(CW\*(C`Host_Alias\*(C'\fR. You should not try to define your own \fIalias\fR called \fB\s-1ALL\s0\fR as the built-in alias will be used in preference to your own. Please note that using \fB\s-1ALL\s0\fR can be dangerous since in a command context, it allows the user to run \fBany\fR command on the system. .PP An exclamation point ('!') can be used as a logical \fInot\fR operator both in an \fIalias\fR and in front of a \f(CW\*(C`Cmnd\*(C'\fR. This allows one to exclude certain values. Note, however, that using a \f(CW\*(C`!\*(C'\fR in conjunction with the built-in \f(CW\*(C`ALL\*(C'\fR alias to allow a user to run \*(L"all but a few\*(R" commands rarely works as intended (see \s-1SECURITY\s0 \&\s-1NOTES\s0 below). .PP Long lines can be continued with a backslash ('\e') as the last character on the line. .PP Whitespace between elements in a list as well as special syntactic characters in a \fIUser Specification\fR ('=', ':', '(', ')') is optional. .PP The following characters must be escaped with a backslash ('\e') when used as part of a word (e.g.\ a user name or host name): \&'!', '=', ':', ',', '(', ')', '\e'. .SH "SUDOERS OPTIONS" .IX Header "SUDOERS OPTIONS" \&\fBsudo\fR's behavior can be modified by \f(CW\*(C`Default_Entry\*(C'\fR lines, as explained earlier. A list of all supported Defaults parameters, grouped by type, are listed below. .PP \&\fBBoolean Flags\fR: .IP "always_set_home" 16 .IX Item "always_set_home" If enabled, \fBsudo\fR will set the \f(CW\*(C`HOME\*(C'\fR environment variable to the home directory of the target user (which is root unless the \fB\-u\fR option is used). This effectively means that the \fB\-H\fR option is always implied. Note that \f(CW\*(C`HOME\*(C'\fR is already set when the the \&\fIenv_reset\fR option is enabled, so \fIalways_set_home\fR is only effective for configurations where either \fIenv_reset\fR is disabled or \f(CW\*(C`HOME\*(C'\fR is present in the \fIenv_keep\fR list. This flag is \fIoff\fR by default. .IP "authenticate" 16 .IX Item "authenticate" If set, users must authenticate themselves via a password (or other means of authentication) before they may run commands. This default may be overridden via the \f(CW\*(C`PASSWD\*(C'\fR and \f(CW\*(C`NOPASSWD\*(C'\fR tags. This flag is \fIon\fR by default. .IP "closefrom_override" 16 .IX Item "closefrom_override" If set, the user may use \fBsudo\fR's \fB\-C\fR option which overrides the default starting point at which \fBsudo\fR begins closing open file descriptors. This flag is \fIoff\fR by default. .IP "compress_io" 16 .IX Item "compress_io" If set, and \fBsudo\fR is configured to log a command's input or output, the I/O logs will be compressed using \fBzlib\fR. This flag is \fIon\fR by default when \fBsudo\fR is compiled with \fBzlib\fR support. .IP "env_editor" 16 .IX Item "env_editor" If set, \fBvisudo\fR will use the value of the \s-1EDITOR\s0 or \s-1VISUAL\s0 environment variables before falling back on the default editor list. Note that this may create a security hole as it allows the user to run any arbitrary command as root without logging. A safer alternative is to place a colon-separated list of editors in the \f(CW\*(C`editor\*(C'\fR variable. \fBvisudo\fR will then only use the \s-1EDITOR\s0 or \s-1VISUAL\s0 if they match a value specified in \f(CW\*(C`editor\*(C'\fR. This flag is \fIoff\fR by default. .IP "env_reset" 16 .IX Item "env_reset" If set, \fBsudo\fR will reset the environment to only contain the \&\s-1LOGNAME\s0, \s-1MAIL\s0, \s-1SHELL\s0, \s-1USER\s0, \s-1USERNAME\s0 and the \f(CW\*(C`SUDO_*\*(C'\fR variables. Any variables in the caller's environment that match the \f(CW\*(C`env_keep\*(C'\fR and \f(CW\*(C`env_check\*(C'\fR lists are then added. The default contents of the \&\f(CW\*(C`env_keep\*(C'\fR and \f(CW\*(C`env_check\*(C'\fR lists are displayed when \fBsudo\fR is run by root with the \fI\-V\fR option. If the \fIsecure_path\fR option is set, its value will be used for the \f(CW\*(C`PATH\*(C'\fR environment variable. This flag is \fIon\fR by default. .IP "fast_glob" 16 .IX Item "fast_glob" Normally, \fBsudo\fR uses the \fIglob\fR\|(3) function to do shell-style globbing when matching path names. However, since it accesses the file system, \fIglob\fR\|(3) can take a long time to complete for some patterns, especially when the pattern references a network file system that is mounted on demand (automounted). The \fIfast_glob\fR option causes \fBsudo\fR to use the \fIfnmatch\fR\|(3) function, which does not access the file system to do its matching. The disadvantage of \fIfast_glob\fR is that it is unable to match relative path names such as \fI./ls\fR or \fI../bin/ls\fR. This has security implications when path names that include globbing characters are used with the negation operator, \f(CW\*(Aq!\*(Aq\fR, as such rules can be trivially bypassed. As such, this option should not be used when \fIsudoers\fR contains rules that contain negated path names which include globbing characters. This flag is \fIoff\fR by default. .IP "fqdn" 16 .IX Item "fqdn" Set this flag if you want to put fully qualified host names in the \&\fIsudoers\fR file. I.e., instead of myhost you would use myhost.mydomain.edu. You may still use the short form if you wish (and even mix the two). Beware that turning on \fIfqdn\fR requires \fBsudo\fR to make \s-1DNS\s0 lookups which may make \fBsudo\fR unusable if \s-1DNS\s0 stops working (for example if the machine is not plugged into the network). Also note that you must use the host's official name as \s-1DNS\s0 knows it. That is, you may not use a host alias (\f(CW\*(C`CNAME\*(C'\fR entry) due to performance issues and the fact that there is no way to get all aliases from \&\s-1DNS\s0. If your machine's host name (as returned by the \f(CW\*(C`hostname\*(C'\fR command) is already fully qualified you shouldn't need to set \&\fIfqdn\fR. This flag is \fIoff\fR by default. .IP "ignore_dot" 16 .IX Item "ignore_dot" If set, \fBsudo\fR will ignore '.' or '' (current dir) in the \f(CW\*(C`PATH\*(C'\fR environment variable; the \f(CW\*(C`PATH\*(C'\fR itself is not modified. This flag is \fIoff\fR by default. .IP "ignore_local_sudoers" 16 .IX Item "ignore_local_sudoers" If set via \s-1LDAP\s0, parsing of \fI/usr/local/etc/sudoers\fR will be skipped. This is intended for Enterprises that wish to prevent the usage of local sudoers files so that only \s-1LDAP\s0 is used. This thwarts the efforts of rogue operators who would attempt to add roles to \fI/usr/local/etc/sudoers\fR. When this option is present, \fI/usr/local/etc/sudoers\fR does not even need to exist. Since this option tells \fBsudo\fR how to behave when no specific \s-1LDAP\s0 entries have been matched, this sudoOption is only meaningful for the \&\f(CW\*(C`cn=defaults\*(C'\fR section. This flag is \fIoff\fR by default. .IP "insults" 16 .IX Item "insults" If set, \fBsudo\fR will insult users when they enter an incorrect password. This flag is \fIoff\fR by default. .IP "log_host" 16 .IX Item "log_host" If set, the host name will be logged in the (non-syslog) \fBsudo\fR log file. This flag is \fIoff\fR by default. .IP "log_input" 16 .IX Item "log_input" If set, \fBsudo\fR will run the command in a \fIpseudo tty\fR and log all user input. If the standard input is not connected to the user's tty, due to I/O redirection or because the command is part of a pipeline, that input is also captured and stored in a separate log file. .Sp Input is logged to the directory specified by the \fIiolog_dir\fR option (\fI/var/log/sudo-io\fR by default) using a unique session \s-1ID\s0 that is included in the normal \fBsudo\fR log line, prefixed with \fITSID=\fR. The \fIiolog_file\fR option may be used to control the format of the session \s-1ID\s0. .Sp Note that user input may contain sensitive information such as passwords (even if they are not echoed to the screen), which will be stored in the log file unencrypted. In most cases, logging the command output via \fIlog_output\fR is all that is required. .IP "log_output" 16 .IX Item "log_output" If set, \fBsudo\fR will run the command in a \fIpseudo tty\fR and log all output that is sent to the screen, similar to the \fIscript\fR\|(1) command. If the standard output or standard error is not connected to the user's tty, due to I/O redirection or because the command is part of a pipeline, that output is also captured and stored in separate log files. .Sp Output is logged to the directory specified by the \fIiolog_dir\fR option (\fI/var/log/sudo-io\fR by default) using a unique session \s-1ID\s0 that is included in the normal \fBsudo\fR log line, prefixed with \fITSID=\fR. The \fIiolog_file\fR option may be used to control the format of the session \s-1ID\s0. .Sp Output logs may be viewed with the \fIsudoreplay\fR\|(1m) utility, which can also be used to list or search the available logs. .IP "log_year" 16 .IX Item "log_year" If set, the four-digit year will be logged in the (non-syslog) \fBsudo\fR log file. This flag is \fIoff\fR by default. .IP "long_otp_prompt" 16 .IX Item "long_otp_prompt" When validating with a One Time Password (\s-1OTP\s0) scheme such as \&\fBS/Key\fR or \fB\s-1OPIE\s0\fR, a two-line prompt is used to make it easier to cut and paste the challenge to a local window. It's not as pretty as the default but some people find it more convenient. This flag is \fIoff\fR by default. .IP "mail_always" 16 .IX Item "mail_always" Send mail to the \fImailto\fR user every time a users runs \fBsudo\fR. This flag is \fIoff\fR by default. .IP "mail_badpass" 16 .IX Item "mail_badpass" Send mail to the \fImailto\fR user if the user running \fBsudo\fR does not enter the correct password. This flag is \fIoff\fR by default. .IP "mail_no_host" 16 .IX Item "mail_no_host" If set, mail will be sent to the \fImailto\fR user if the invoking user exists in the \fIsudoers\fR file, but is not allowed to run commands on the current host. This flag is \fIoff\fR by default. .IP "mail_no_perms" 16 .IX Item "mail_no_perms" If set, mail will be sent to the \fImailto\fR user if the invoking user is allowed to use \fBsudo\fR but the command they are trying is not listed in their \fIsudoers\fR file entry or is explicitly denied. This flag is \fIoff\fR by default. .IP "mail_no_user" 16 .IX Item "mail_no_user" If set, mail will be sent to the \fImailto\fR user if the invoking user is not in the \fIsudoers\fR file. This flag is \fIon\fR by default. .IP "noexec" 16 .IX Item "noexec" If set, all commands run via \fBsudo\fR will behave as if the \f(CW\*(C`NOEXEC\*(C'\fR tag has been set, unless overridden by a \f(CW\*(C`EXEC\*(C'\fR tag. See the description of \fI\s-1NOEXEC\s0 and \s-1EXEC\s0\fR below as well as the \*(L"\s-1PREVENTING\s0 \s-1SHELL\s0 \&\s-1ESCAPES\s0\*(R" section at the end of this manual. This flag is \fIoff\fR by default. .IP "path_info" 16 .IX Item "path_info" Normally, \fBsudo\fR will tell the user when a command could not be found in their \f(CW\*(C`PATH\*(C'\fR environment variable. Some sites may wish to disable this as it could be used to gather information on the location of executables that the normal user does not have access to. The disadvantage is that if the executable is simply not in the user's \f(CW\*(C`PATH\*(C'\fR, \fBsudo\fR will tell the user that they are not allowed to run it, which can be confusing. This flag is \fIon\fR by default. .IP "passprompt_override" 16 .IX Item "passprompt_override" The password prompt specified by \fIpassprompt\fR will normally only be used if the password prompt provided by systems such as \s-1PAM\s0 matches the string \*(L"Password:\*(R". If \fIpassprompt_override\fR is set, \fIpassprompt\fR will always be used. This flag is \fIoff\fR by default. .IP "preserve_groups" 16 .IX Item "preserve_groups" By default, \fBsudo\fR will initialize the group vector to the list of groups the target user is in. When \fIpreserve_groups\fR is set, the user's existing group vector is left unaltered. The real and effective group IDs, however, are still set to match the target user. This flag is \fIoff\fR by default. .IP "pwfeedback" 16 .IX Item "pwfeedback" By default, \fBsudo\fR reads the password like most other Unix programs, by turning off echo until the user hits the return (or enter) key. Some users become confused by this as it appears to them that \fBsudo\fR has hung at this point. When \fIpwfeedback\fR is set, \fBsudo\fR will provide visual feedback when the user presses a key. Note that this does have a security impact as an onlooker may be able to determine the length of the password being entered. This flag is \fIoff\fR by default. .IP "requiretty" 16 .IX Item "requiretty" If set, \fBsudo\fR will only run when the user is logged in to a real tty. When this flag is set, \fBsudo\fR can only be run from a login session and not via other means such as \fIcron\fR\|(1m) or cgi-bin scripts. This flag is \fIoff\fR by default. .IP "root_sudo" 16 .IX Item "root_sudo" If set, root is allowed to run \fBsudo\fR too. Disabling this prevents users from \*(L"chaining\*(R" \fBsudo\fR commands to get a root shell by doing something like \f(CW"sudo sudo /bin/sh"\fR. Note, however, that turning off \fIroot_sudo\fR will also prevent root from running \fBsudoedit\fR. Disabling \fIroot_sudo\fR provides no real additional security; it exists purely for historical reasons. This flag is \fIon\fR by default. .IP "rootpw" 16 .IX Item "rootpw" If set, \fBsudo\fR will prompt for the root password instead of the password of the invoking user. This flag is \fIoff\fR by default. .IP "runaspw" 16 .IX Item "runaspw" If set, \fBsudo\fR will prompt for the password of the user defined by the \&\fIrunas_default\fR option (defaults to \f(CW\*(C`root\*(C'\fR) instead of the password of the invoking user. This flag is \fIoff\fR by default. .IP "set_home" 16 .IX Item "set_home" If enabled and \fBsudo\fR is invoked with the \fB\-s\fR option the \f(CW\*(C`HOME\*(C'\fR environment variable will be set to the home directory of the target user (which is root unless the \fB\-u\fR option is used). This effectively makes the \fB\-s\fR option imply \fB\-H\fR. Note that \f(CW\*(C`HOME\*(C'\fR is already set when the the \fIenv_reset\fR option is enabled, so \fIset_home\fR is only effective for configurations where either \fIenv_reset\fR is disabled or \f(CW\*(C`HOME\*(C'\fR is present in the \fIenv_keep\fR list. This flag is \fIoff\fR by default. .IP "set_logname" 16 .IX Item "set_logname" Normally, \fBsudo\fR will set the \f(CW\*(C`LOGNAME\*(C'\fR, \f(CW\*(C`USER\*(C'\fR and \f(CW\*(C`USERNAME\*(C'\fR environment variables to the name of the target user (usually root unless the \fB\-u\fR option is given). However, since some programs (including the \s-1RCS\s0 revision control system) use \f(CW\*(C`LOGNAME\*(C'\fR to determine the real identity of the user, it may be desirable to change this behavior. This can be done by negating the set_logname option. Note that if the \fIenv_reset\fR option has not been disabled, entries in the \fIenv_keep\fR list will override the value of \&\fIset_logname\fR. This flag is \fIon\fR by default. .IP "set_utmp" 16 .IX Item "set_utmp" When enabled, \fBsudo\fR will create an entry in the utmp (or utmpx) file when a pseudo-tty is allocated. A pseudo-tty is allocated by \&\fBsudo\fR when the \fIlog_input\fR, \fIlog_output\fR or \fIuse_pty\fR flags are enabled. By default, the new entry will be a copy of the user's existing utmp entry (if any), with the tty, time, type and pid fields updated. This flag is \fIon\fR by default. .IP "setenv" 16 .IX Item "setenv" Allow the user to disable the \fIenv_reset\fR option from the command line via the \fB\-E\fR option. Additionally, environment variables set via the command line are not subject to the restrictions imposed by \fIenv_check\fR, \fIenv_delete\fR, or \fIenv_keep\fR. As such, only trusted users should be allowed to set variables in this manner. This flag is \fIoff\fR by default. .IP "shell_noargs" 16 .IX Item "shell_noargs" If set and \fBsudo\fR is invoked with no arguments it acts as if the \&\fB\-s\fR option had been given. That is, it runs a shell as root (the shell is determined by the \f(CW\*(C`SHELL\*(C'\fR environment variable if it is set, falling back on the shell listed in the invoking user's /etc/passwd entry if not). This flag is \fIoff\fR by default. .IP "stay_setuid" 16 .IX Item "stay_setuid" Normally, when \fBsudo\fR executes a command the real and effective UIDs are set to the target user (root by default). This option changes that behavior such that the real \s-1UID\s0 is left as the invoking user's \s-1UID\s0. In other words, this makes \fBsudo\fR act as a setuid wrapper. This can be useful on systems that disable some potentially dangerous functionality when a program is run setuid. This option is only effective on systems with either the \fIsetreuid()\fR or \fIsetresuid()\fR function. This flag is \fIoff\fR by default. .IP "targetpw" 16 .IX Item "targetpw" If set, \fBsudo\fR will prompt for the password of the user specified by the \fB\-u\fR option (defaults to \f(CW\*(C`root\*(C'\fR) instead of the password of the invoking user. In addition, the timestamp file name will include the target user's name. Note that this flag precludes the use of a uid not listed in the passwd database as an argument to the \fB\-u\fR option. This flag is \fIoff\fR by default. .IP "tty_tickets" 16 .IX Item "tty_tickets" If set, users must authenticate on a per-tty basis. With this flag enabled, \fBsudo\fR will use a file named for the tty the user is logged in on in the user's time stamp directory. If disabled, the time stamp of the directory is used instead. This flag is \&\fIon\fR by default. .IP "umask_override" 16 .IX Item "umask_override" If set, \fBsudo\fR will set the umask as specified by \fIsudoers\fR without modification. This makes it possible to specify a more permissive umask in \fIsudoers\fR than the user's own umask and matches historical behavior. If \fIumask_override\fR is not set, \fBsudo\fR will set the umask to be the union of the user's umask and what is specified in \&\fIsudoers\fR. This flag is \fIoff\fR by default. .if \n(LC \{\ .IP "use_loginclass" 16 .IX Item "use_loginclass" If set, \fBsudo\fR will apply the defaults specified for the target user's login class if one exists. Only available if \fBsudo\fR is configured with the \-\-with\-logincap option. This flag is \fIoff\fR by default. \} .IP "use_pty" 16 .IX Item "use_pty" If set, \fBsudo\fR will run the command in a pseudo-pty even if no I/O logging is being gone. A malicious program run under \fBsudo\fR could conceivably fork a background process that retains to the user's terminal device after the main program has finished executing. Use of this option will make that impossible. This flag is \fIoff\fR by default. .IP "utmp_runas" 16 .IX Item "utmp_runas" If set, \fBsudo\fR will store the name of the runas user when updating the utmp (or utmpx) file. By default, \fBsudo\fR stores the name of the invoking user. This flag is \fIoff\fR by default. .IP "visiblepw" 16 .IX Item "visiblepw" By default, \fBsudo\fR will refuse to run if the user must enter a password but it is not possible to disable echo on the terminal. If the \fIvisiblepw\fR flag is set, \fBsudo\fR will prompt for a password even when it would be visible on the screen. This makes it possible to run things like \f(CW"rsh somehost sudo ls"\fR since \fIrsh\fR\|(1) does not allocate a tty. This flag is \fIoff\fR by default. .PP \&\fBIntegers\fR: .IP "closefrom" 16 .IX Item "closefrom" Before it executes a command, \fBsudo\fR will close all open file descriptors other than standard input, standard output and standard error (ie: file descriptors 0\-2). The \fIclosefrom\fR option can be used to specify a different file descriptor at which to start closing. The default is \f(CW3\fR. .IP "passwd_tries" 16 .IX Item "passwd_tries" The number of tries a user gets to enter his/her password before \&\fBsudo\fR logs the failure and exits. The default is \f(CW\*(C`3\*(C'\fR. .PP \&\fBIntegers that can be used in a boolean context\fR: .IP "loglinelen" 16 .IX Item "loglinelen" Number of characters per line for the file log. This value is used to decide when to wrap lines for nicer log files. This has no effect on the syslog log file, only the file log. The default is \&\f(CW\*(C`80\*(C'\fR (use 0 or negate the option to disable word wrap). .IP "passwd_timeout" 16 .IX Item "passwd_timeout" Number of minutes before the \fBsudo\fR password prompt times out, or \&\f(CW0\fR for no timeout. The timeout may include a fractional component if minute granularity is insufficient, for example \f(CW2.5\fR. The default is \f(CW\*(C`5\*(C'\fR. .IP "timestamp_timeout" 16 .IX Item "timestamp_timeout" Number of minutes that can elapse before \fBsudo\fR will ask for a passwd again. The timeout may include a fractional component if minute granularity is insufficient, for example \f(CW2.5\fR. The default is \f(CW\*(C`5\*(C'\fR. Set this to \f(CW0\fR to always prompt for a password. If set to a value less than \f(CW0\fR the user's timestamp will never expire. This can be used to allow users to create or delete their own timestamps via \f(CW\*(C`sudo \-v\*(C'\fR and \f(CW\*(C`sudo \-k\*(C'\fR respectively. .IP "umask" 16 .IX Item "umask" Umask to use when running the command. Negate this option or set it to 0777 to preserve the user's umask. The actual umask that is used will be the union of the user's umask and the value of the \&\fIumask\fR option, which defaults to \f(CW\*(C`0022\*(C'\fR. This guarantees that \fBsudo\fR never lowers the umask when running a command. Note on systems that use \s-1PAM\s0, the default \s-1PAM\s0 configuration may specify its own umask which will override the value set in \fIsudoers\fR. .PP \&\fBStrings\fR: .IP "badpass_message" 16 .IX Item "badpass_message" Message that is displayed if a user enters an incorrect password. The default is \f(CW\*(C`Sorry, try again.\*(C'\fR unless insults are enabled. .IP "editor" 16 .IX Item "editor" A colon (':') separated list of editors allowed to be used with \&\fBvisudo\fR. \fBvisudo\fR will choose the editor that matches the user's \&\s-1EDITOR\s0 environment variable if possible, or the first editor in the list that exists and is executable. The default is \f(CW"/usr/bin/vi"\fR. .IP "iolog_dir" 16 .IX Item "iolog_dir" The top-level directory to use when constructing the path name for the input/output log directory. Only used if the \fIlog_input\fR or \&\fIlog_output\fR options are enabled or when the \f(CW\*(C`LOG_INPUT\*(C'\fR or \&\f(CW\*(C`LOG_OUTPUT\*(C'\fR tags are present for a command. The session sequence number, if any, is stored in the directory. The default is \f(CW"/var/log/sudo-io"\fR. .Sp The following percent (`\f(CW\*(C`%\*(C'\fR') escape sequences are supported: .RS 16 .ie n .IP "\*(C`%{seq}\*(C'" 4 .el .IP "\f(CW\*(C`%{seq}\*(C'\fR" 4 .IX Item "%{seq}" expanded to a monotonically increasing base\-36 sequence number, such as 0100A5, where every two digits are used to form a new directory, e.g. \fI01/00/A5\fR .ie n .IP "\*(C`%{user}\*(C'" 4 .el .IP "\f(CW\*(C`%{user}\*(C'\fR" 4 .IX Item "%{user}" expanded to the invoking user's login name .ie n .IP "\*(C`%{group}\*(C'" 4 .el .IP "\f(CW\*(C`%{group}\*(C'\fR" 4 .IX Item "%{group}" expanded to the name of the invoking user's real group \s-1ID\s0 .ie n .IP "\*(C`%{runas_user}\*(C'" 4 .el .IP "\f(CW\*(C`%{runas_user}\*(C'\fR" 4 .IX Item "%{runas_user}" expanded to the login name of the user the command will be run as (e.g. root) .ie n .IP "\*(C`%{runas_group}\*(C'" 4 .el .IP "\f(CW\*(C`%{runas_group}\*(C'\fR" 4 .IX Item "%{runas_group}" expanded to the group name of the user the command will be run as (e.g. wheel) .ie n .IP "\*(C`%{hostname}\*(C'" 4 .el .IP "\f(CW\*(C`%{hostname}\*(C'\fR" 4 .IX Item "%{hostname}" expanded to the local host name without the domain name .ie n .IP "\*(C`%{command}\*(C'" 4 .el .IP "\f(CW\*(C`%{command}\*(C'\fR" 4 .IX Item "%{command}" expanded to the base name of the command being run .RE .RS 16 .Sp In addition, any escape sequences supported by the system's \fIstrftime()\fR function will be expanded. .Sp To include a literal `\f(CW\*(C`%\*(C'\fR' character, the string `\f(CW\*(C`%%\*(C'\fR' should be used. .Sp Path names that end in six or more \f(CW\*(C`X\*(C'\fRs will have the \f(CW\*(C`X\*(C'\fRs replaced with a unique combination of digits and letters, similar to the \&\fImktemp()\fR function. .RE .IP "iolog_file" 16 .IX Item "iolog_file" The path name, relative to \fIiolog_dir\fR, in which to store input/output logs when the \fIlog_input\fR or \fIlog_output\fR options are enabled or when the \f(CW\*(C`LOG_INPUT\*(C'\fR or \f(CW\*(C`LOG_OUTPUT\*(C'\fR tags are present for a command. Note that \fIiolog_file\fR may contain directory components. The default is \f(CW"%{seq}"\fR. .Sp See the \fIiolog_dir\fR option above for a list of supported percent (`\f(CW\*(C`%\*(C'\fR') escape sequences. .IP "mailsub" 16 .IX Item "mailsub" Subject of the mail sent to the \fImailto\fR user. The escape \f(CW%h\fR will expand to the host name of the machine. Default is \f(CW\*(C`*** SECURITY information for %h ***\*(C'\fR. .IP "noexec_file" 16 .IX Item "noexec_file" This option is deprecated and will be removed in a future release of \fBsudo\fR. The path to the noexec file should now be set in the \&\fI/usr/local/etc/sudo.conf\fR file. .IP "passprompt" 16 .IX Item "passprompt" The default prompt to use when asking for a password; can be overridden via the \fB\-p\fR option or the \f(CW\*(C`SUDO_PROMPT\*(C'\fR environment variable. The following percent (`\f(CW\*(C`%\*(C'\fR') escape sequences are supported: .RS 16 .ie n .IP "%H" 4 .el .IP "\f(CW%H\fR" 4 .IX Item "%H" expanded to the local host name including the domain name (only if the machine's host name is fully qualified or the \fIfqdn\fR option is set) .ie n .IP "%h" 4 .el .IP "\f(CW%h\fR" 4 .IX Item "%h" expanded to the local host name without the domain name .ie n .IP "%p" 4 .el .IP "\f(CW%p\fR" 4 .IX Item "%p" expanded to the user whose password is being asked for (respects the \&\fIrootpw\fR, \fItargetpw\fR and \fIrunaspw\fR flags in \fIsudoers\fR) .ie n .IP "%U" 4 .el .IP "\f(CW%U\fR" 4 .IX Item "%U" expanded to the login name of the user the command will be run as (defaults to root) .ie n .IP "%u" 4 .el .IP "\f(CW%u\fR" 4 .IX Item "%u" expanded to the invoking user's login name .ie n .IP "\*(C`%%\*(C'" 4 .el .IP "\f(CW\*(C`%%\*(C'\fR" 4 .IX Item "%%" two consecutive \f(CW\*(C`%\*(C'\fR characters are collapsed into a single \f(CW\*(C`%\*(C'\fR character .RE .RS 16 .Sp The default value is \f(CW\*(C`Password:\*(C'\fR. .RE .if \n(SL \{\ .IP "role" 16 .IX Item "role" The default SELinux role to use when constructing a new security context to run the command. The default role may be overridden on a per-command basis in \fIsudoers\fR or via command line options. This option is only available whe \fBsudo\fR is built with SELinux support. \} .IP "runas_default" 16 .IX Item "runas_default" The default user to run commands as if the \fB\-u\fR option is not specified on the command line. This defaults to \f(CW\*(C`root\*(C'\fR. .IP "syslog_badpri" 16 .IX Item "syslog_badpri" Syslog priority to use when user authenticates unsuccessfully. Defaults to \f(CW\*(C`alert\*(C'\fR. .Sp The following syslog priorities are supported: \fBalert\fR, \fBcrit\fR, \&\fBdebug\fR, \fBemerg\fR, \fBerr\fR, \fBinfo\fR, \fBnotice\fR, and \fBwarning\fR. .IP "syslog_goodpri" 16 .IX Item "syslog_goodpri" Syslog priority to use when user authenticates successfully. Defaults to \f(CW\*(C`notice\*(C'\fR. .Sp See syslog_badpri for the list of supported syslog priorities. .IP "sudoers_locale" 16 .IX Item "sudoers_locale" Locale to use when parsing the sudoers file, logging commands, and sending email. Note that changing the locale may affect how sudoers is interpreted. Defaults to \f(CW"C"\fR. .IP "timestampdir" 16 .IX Item "timestampdir" The directory in which \fBsudo\fR stores its timestamp files. The default is \fI/var/db/sudo\fR. .IP "timestampowner" 16 .IX Item "timestampowner" The owner of the timestamp directory and the timestamps stored therein. The default is \f(CW\*(C`root\*(C'\fR. .if \n(SL \{\ .IP "type" 16 .IX Item "type" The default SELinux type to use when constructing a new security context to run the command. The default type may be overridden on a per-command basis in \fIsudoers\fR or via command line options. This option is only available whe \fBsudo\fR is built with SELinux support. \} .PP \&\fBStrings that can be used in a boolean context\fR: .IP "env_file" 12 .IX Item "env_file" The \fIenv_file\fR options specifies the fully qualified path to a file containing variables to be set in the environment of the program being run. Entries in this file should either be of the form \&\f(CW\*(C`VARIABLE=value\*(C'\fR or \f(CW\*(C`export VARIABLE=value\*(C'\fR. The value may optionally be surrounded by single or double quotes. Variables in this file are subject to other \fBsudo\fR environment settings such as \fIenv_keep\fR and \fIenv_check\fR. .IP "exempt_group" 12 .IX Item "exempt_group" Users in this group are exempt from password and \s-1PATH\s0 requirements. The group name specified should not include a \f(CW\*(C`%\*(C'\fR prefix. This is not set by default. .IP "group_plugin" 12 .IX Item "group_plugin" A string containing a \fIsudoers\fR group plugin with optional arguments. This can be used to implement support for the \f(CW\*(C`nonunix_group\*(C'\fR syntax described earlier. The string should consist of the plugin path, either fully-qualified or relative to the \fI/usr/local/libexec\fR directory, followed by any configuration arguments the plugin requires. These arguments (if any) will be passed to the plugin's initialization function. If arguments are present, the string must be enclosed in double quotes (\f(CW\*(C`"\*(C'\fR). .Sp For example, given \fI/etc/sudo\-group\fR, a group file in Unix group format, the sample group plugin can be used: .Sp .Vb 1 \& Defaults group_plugin="sample_group.so /etc/sudo\-group" .Ve .Sp For more information see \fIsudo_plugin\fR\|(4). .IP "lecture" 12 .IX Item "lecture" This option controls when a short lecture will be printed along with the password prompt. It has the following possible values: .RS 12 .IP "always" 8 .IX Item "always" Always lecture the user. .IP "never" 8 .IX Item "never" Never lecture the user. .IP "once" 8 .IX Item "once" Only lecture the user the first time they run \fBsudo\fR. .RE .RS 12 .Sp If no value is specified, a value of \fIonce\fR is implied. Negating the option results in a value of \fInever\fR being used. The default value is \fIonce\fR. .RE .IP "lecture_file" 12 .IX Item "lecture_file" Path to a file containing an alternate \fBsudo\fR lecture that will be used in place of the standard lecture if the named file exists. By default, \fBsudo\fR uses a built-in lecture. .IP "listpw" 12 .IX Item "listpw" This option controls when a password will be required when a user runs \fBsudo\fR with the \fB\-l\fR option. It has the following possible values: .RS 12 .IP "all" 8 .IX Item "all" All the user's \fIsudoers\fR entries for the current host must have the \f(CW\*(C`NOPASSWD\*(C'\fR flag set to avoid entering a password. .IP "always" 8 .IX Item "always" The user must always enter a password to use the \fB\-l\fR option. .IP "any" 8 .IX Item "any" At least one of the user's \fIsudoers\fR entries for the current host must have the \f(CW\*(C`NOPASSWD\*(C'\fR flag set to avoid entering a password. .IP "never" 8 .IX Item "never" The user need never enter a password to use the \fB\-l\fR option. .RE .RS 12 .Sp If no value is specified, a value of \fIany\fR is implied. Negating the option results in a value of \fInever\fR being used. The default value is \fIany\fR. .RE .IP "logfile" 12 .IX Item "logfile" Path to the \fBsudo\fR log file (not the syslog log file). Setting a path turns on logging to a file; negating this option turns it off. By default, \fBsudo\fR logs via syslog. .IP "mailerflags" 12 .IX Item "mailerflags" Flags to use when invoking mailer. Defaults to \fB\-t\fR. .IP "mailerpath" 12 .IX Item "mailerpath" Path to mail program used to send warning mail. Defaults to the path to sendmail found at configure time. .IP "mailfrom" 12 .IX Item "mailfrom" Address to use for the \*(L"from\*(R" address when sending warning and error mail. The address should be enclosed in double quotes (\f(CW\*(C`"\*(C'\fR) to protect against \fBsudo\fR interpreting the \f(CW\*(C`@\*(C'\fR sign. Defaults to the name of the user running \fBsudo\fR. .IP "mailto" 12 .IX Item "mailto" Address to send warning and error mail to. The address should be enclosed in double quotes (\f(CW\*(C`"\*(C'\fR) to protect against \fBsudo\fR interpreting the \f(CW\*(C`@\*(C'\fR sign. Defaults to \f(CW\*(C`root\*(C'\fR. .IP "secure_path" 12 .IX Item "secure_path" Path used for every command run from \fBsudo\fR. If you don't trust the people running \fBsudo\fR to have a sane \f(CW\*(C`PATH\*(C'\fR environment variable you may want to use this. Another use is if you want to have the \*(L"root path\*(R" be separate from the \*(L"user path.\*(R" Users in the group specified by the \&\fIexempt_group\fR option are not affected by \fIsecure_path\fR. This option is not set by default. .IP "syslog" 12 .IX Item "syslog" Syslog facility if syslog is being used for logging (negate to disable syslog logging). Defaults to \f(CW\*(C`auth\*(C'\fR. .Sp The following syslog facilities are supported: \fBauthpriv\fR (if your \&\s-1OS\s0 supports it), \fBauth\fR, \fBdaemon\fR, \fBuser\fR, \fBlocal0\fR, \fBlocal1\fR, \&\fBlocal2\fR, \fBlocal3\fR, \fBlocal4\fR, \fBlocal5\fR, \fBlocal6\fR, and \fBlocal7\fR. .IP "verifypw" 12 .IX Item "verifypw" This option controls when a password will be required when a user runs \&\fBsudo\fR with the \fB\-v\fR option. It has the following possible values: .RS 12 .IP "all" 8 .IX Item "all" All the user's \fIsudoers\fR entries for the current host must have the \f(CW\*(C`NOPASSWD\*(C'\fR flag set to avoid entering a password. .IP "always" 8 .IX Item "always" The user must always enter a password to use the \fB\-v\fR option. .IP "any" 8 .IX Item "any" At least one of the user's \fIsudoers\fR entries for the current host must have the \f(CW\*(C`NOPASSWD\*(C'\fR flag set to avoid entering a password. .IP "never" 8 .IX Item "never" The user need never enter a password to use the \fB\-v\fR option. .RE .RS 12 .Sp If no value is specified, a value of \fIall\fR is implied. Negating the option results in a value of \fInever\fR being used. The default value is \fIall\fR. .RE .PP \&\fBLists that can be used in a boolean context\fR: .IP "env_check" 16 .IX Item "env_check" Environment variables to be removed from the user's environment if the variable's value contains \f(CW\*(C`%\*(C'\fR or \f(CW\*(C`/\*(C'\fR characters. This can be used to guard against printf-style format vulnerabilities in poorly-written programs. The argument may be a double-quoted, space-separated list or a single value without double-quotes. The list can be replaced, added to, deleted from, or disabled by using the \f(CW\*(C`=\*(C'\fR, \f(CW\*(C`+=\*(C'\fR, \f(CW\*(C`\-=\*(C'\fR, and \f(CW\*(C`!\*(C'\fR operators respectively. Regardless of whether the \f(CW\*(C`env_reset\*(C'\fR option is enabled or disabled, variables specified by \f(CW\*(C`env_check\*(C'\fR will be preserved in the environment if they pass the aforementioned check. The default list of environment variables to check is displayed when \fBsudo\fR is run by root with the \fI\-V\fR option. .IP "env_delete" 16 .IX Item "env_delete" Environment variables to be removed from the user's environment when the \fIenv_reset\fR option is not in effect. The argument may be a double-quoted, space-separated list or a single value without double-quotes. The list can be replaced, added to, deleted from, or disabled by using the \f(CW\*(C`=\*(C'\fR, \f(CW\*(C`+=\*(C'\fR, \f(CW\*(C`\-=\*(C'\fR, and \f(CW\*(C`!\*(C'\fR operators respectively. The default list of environment variables to remove is displayed when \fBsudo\fR is run by root with the \fI\-V\fR option. Note that many operating systems will remove potentially dangerous variables from the environment of any setuid process (such as \&\fBsudo\fR). .IP "env_keep" 16 .IX Item "env_keep" Environment variables to be preserved in the user's environment when the \fIenv_reset\fR option is in effect. This allows fine-grained control over the environment \fBsudo\fR\-spawned processes will receive. The argument may be a double-quoted, space-separated list or a single value without double-quotes. The list can be replaced, added to, deleted from, or disabled by using the \f(CW\*(C`=\*(C'\fR, \f(CW\*(C`+=\*(C'\fR, \f(CW\*(C`\-=\*(C'\fR, and \&\f(CW\*(C`!\*(C'\fR operators respectively. The default list of variables to keep is displayed when \fBsudo\fR is run by root with the \fI\-V\fR option. .SH "FILES" .IX Header "FILES" .ie n .IP "\fI/usr/local/etc/sudoers\fR" 24 .el .IP "\fI/usr/local/etc/sudoers\fR" 24 .IX Item "/usr/local/etc/sudoers" List of who can run what .IP "\fI/etc/group\fR" 24 .IX Item "/etc/group" Local groups file .IP "\fI/etc/netgroup\fR" 24 .IX Item "/etc/netgroup" List of network groups .ie n .IP "\fI/var/log/sudo-io\fR" 24 .el .IP "\fI/var/log/sudo-io\fR" 24 .IX Item "/var/log/sudo-io" I/O log files .ie n .IP "\fI/var/db/sudo\fR" 24 .el .IP "\fI/var/db/sudo\fR" 24 .IX Item "/var/db/sudo" Directory containing time stamps for the \fIsudoers\fR security policy .IP "\fI/etc/environment\fR" 24 .IX Item "/etc/environment" Initial environment for \fB\-i\fR mode on Linux and \s-1AIX\s0 .SH "EXAMPLES" .IX Header "EXAMPLES" Below are example \fIsudoers\fR entries. Admittedly, some of these are a bit contrived. First, we allow a few environment variables to pass and then define our \fIaliases\fR: .PP .Vb 4 \& # Run X applications through sudo; HOME is used to find the \& # .Xauthority file. Note that other programs use HOME to find \& # configuration files and this may lead to privilege escalation! \& Defaults env_keep += "DISPLAY HOME" \& \& # User alias specification \& User_Alias FULLTIMERS = millert, mikef, dowdy \& User_Alias PARTTIMERS = bostley, jwfox, crawl \& User_Alias WEBMASTERS = will, wendy, wim \& \& # Runas alias specification \& Runas_Alias OP = root, operator \& Runas_Alias DB = oracle, sybase \& Runas_Alias ADMINGRP = adm, oper \& \& # Host alias specification \& Host_Alias SPARC = bigtime, eclipse, moet, anchor :\e \& SGI = grolsch, dandelion, black :\e \& ALPHA = widget, thalamus, foobar :\e \& HPPA = boa, nag, python \& Host_Alias CUNETS = 128.138.0.0/255.255.0.0 \& Host_Alias CSNETS = 128.138.243.0, 128.138.204.0/24, 128.138.242.0 \& Host_Alias SERVERS = master, mail, www, ns \& Host_Alias CDROM = orion, perseus, hercules \& \& # Cmnd alias specification \& Cmnd_Alias DUMPS = /usr/bin/mt, /usr/sbin/dump, /usr/sbin/rdump,\e \& /usr/sbin/restore, /usr/sbin/rrestore \& Cmnd_Alias KILL = /usr/bin/kill \& Cmnd_Alias PRINTING = /usr/sbin/lpc, /usr/bin/lprm \& Cmnd_Alias SHUTDOWN = /usr/sbin/shutdown \& Cmnd_Alias HALT = /usr/sbin/halt \& Cmnd_Alias REBOOT = /usr/sbin/reboot \& Cmnd_Alias SHELLS = /usr/bin/sh, /usr/bin/csh, /usr/bin/ksh, \e \& /usr/local/bin/tcsh, /usr/bin/rsh, \e \& /usr/local/bin/zsh \& Cmnd_Alias SU = /usr/bin/su \& Cmnd_Alias PAGERS = /usr/bin/more, /usr/bin/pg, /usr/bin/less .Ve .PP Here we override some of the compiled in default values. We want \&\fBsudo\fR to log via \fIsyslog\fR\|(3) using the \fIauth\fR facility in all cases. We don't want to subject the full time staff to the \fBsudo\fR lecture, user \fBmillert\fR need not give a password, and we don't want to reset the \f(CW\*(C`LOGNAME\*(C'\fR, \f(CW\*(C`USER\*(C'\fR or \f(CW\*(C`USERNAME\*(C'\fR environment variables when running commands as root. Additionally, on the machines in the \fI\s-1SERVERS\s0\fR \f(CW\*(C`Host_Alias\*(C'\fR, we keep an additional local log file and make sure we log the year in each log line since the log entries will be kept around for several years. Lastly, we disable shell escapes for the commands in the \s-1PAGERS\s0 \f(CW\*(C`Cmnd_Alias\*(C'\fR (\fI/usr/bin/more\fR, \fI/usr/bin/pg\fR and \fI/usr/bin/less\fR). .PP .Vb 7 \& # Override built\-in defaults \& Defaults syslog=auth \& Defaults>root !set_logname \& Defaults:FULLTIMERS !lecture \& Defaults:millert !authenticate \& Defaults@SERVERS log_year, logfile=/var/log/sudo.log \& Defaults!PAGERS noexec .Ve .PP The \fIUser specification\fR is the part that actually determines who may run what. .PP .Vb 2 \& root ALL = (ALL) ALL \& %wheel ALL = (ALL) ALL .Ve .PP We let \fBroot\fR and any user in group \fBwheel\fR run any command on any host as any user. .PP .Vb 1 \& FULLTIMERS ALL = NOPASSWD: ALL .Ve .PP Full time sysadmins (\fBmillert\fR, \fBmikef\fR, and \fBdowdy\fR) may run any command on any host without authenticating themselves. .PP .Vb 1 \& PARTTIMERS ALL = ALL .Ve .PP Part time sysadmins (\fBbostley\fR, \fBjwfox\fR, and \fBcrawl\fR) may run any command on any host but they must authenticate themselves first (since the entry lacks the \f(CW\*(C`NOPASSWD\*(C'\fR tag). .PP .Vb 1 \& jack CSNETS = ALL .Ve .PP The user \fBjack\fR may run any command on the machines in the \fI\s-1CSNETS\s0\fR alias (the networks \f(CW128.138.243.0\fR, \f(CW128.138.204.0\fR, and \f(CW128.138.242.0\fR). Of those networks, only \f(CW128.138.204.0\fR has an explicit netmask (in \&\s-1CIDR\s0 notation) indicating it is a class C network. For the other networks in \fI\s-1CSNETS\s0\fR, the local machine's netmask will be used during matching. .PP .Vb 1 \& lisa CUNETS = ALL .Ve .PP The user \fBlisa\fR may run any command on any host in the \fI\s-1CUNETS\s0\fR alias (the class B network \f(CW128.138.0.0\fR). .PP .Vb 2 \& operator ALL = DUMPS, KILL, SHUTDOWN, HALT, REBOOT, PRINTING,\e \& sudoedit /etc/printcap, /usr/oper/bin/ .Ve .PP The \fBoperator\fR user may run commands limited to simple maintenance. Here, those are commands related to backups, killing processes, the printing system, shutting down the system, and any commands in the directory \fI/usr/oper/bin/\fR. .PP .Vb 1 \& joe ALL = /usr/bin/su operator .Ve .PP The user \fBjoe\fR may only \fIsu\fR\|(1) to operator. .PP .Vb 1 \& pete HPPA = /usr/bin/passwd [A\-Za\-z]*, !/usr/bin/passwd root \& \& %opers ALL = (: ADMINGRP) /usr/sbin/ .Ve .PP Users in the \fBopers\fR group may run commands in \fI/usr/sbin/\fR as themselves with any group in the \fI\s-1ADMINGRP\s0\fR \f(CW\*(C`Runas_Alias\*(C'\fR (the \fBadm\fR and \fBoper\fR groups). .PP The user \fBpete\fR is allowed to change anyone's password except for root on the \fI\s-1HPPA\s0\fR machines. Note that this assumes \fIpasswd\fR\|(1) does not take multiple user names on the command line. .PP .Vb 1 \& bob SPARC = (OP) ALL : SGI = (OP) ALL .Ve .PP The user \fBbob\fR may run anything on the \fI\s-1SPARC\s0\fR and \fI\s-1SGI\s0\fR machines as any user listed in the \fI\s-1OP\s0\fR \f(CW\*(C`Runas_Alias\*(C'\fR (\fBroot\fR and \fBoperator\fR). .PP .Vb 1 \& jim +biglab = ALL .Ve .PP The user \fBjim\fR may run any command on machines in the \fIbiglab\fR netgroup. \&\fBsudo\fR knows that \*(L"biglab\*(R" is a netgroup due to the '+' prefix. .PP .Vb 1 \& +secretaries ALL = PRINTING, /usr/bin/adduser, /usr/bin/rmuser .Ve .PP Users in the \fBsecretaries\fR netgroup need to help manage the printers as well as add and remove users, so they are allowed to run those commands on all machines. .PP .Vb 1 \& fred ALL = (DB) NOPASSWD: ALL .Ve .PP The user \fBfred\fR can run commands as any user in the \fI\s-1DB\s0\fR \f(CW\*(C`Runas_Alias\*(C'\fR (\fBoracle\fR or \fBsybase\fR) without giving a password. .PP .Vb 1 \& john ALPHA = /usr/bin/su [!\-]*, !/usr/bin/su *root* .Ve .PP On the \fI\s-1ALPHA\s0\fR machines, user \fBjohn\fR may su to anyone except root but he is not allowed to specify any options to the \fIsu\fR\|(1) command. .PP .Vb 1 \& jen ALL, !SERVERS = ALL .Ve .PP The user \fBjen\fR may run any command on any machine except for those in the \fI\s-1SERVERS\s0\fR \f(CW\*(C`Host_Alias\*(C'\fR (master, mail, www and ns). .PP .Vb 1 \& jill SERVERS = /usr/bin/, !SU, !SHELLS .Ve .PP For any machine in the \fI\s-1SERVERS\s0\fR \f(CW\*(C`Host_Alias\*(C'\fR, \fBjill\fR may run any commands in the directory \fI/usr/bin/\fR except for those commands belonging to the \fI\s-1SU\s0\fR and \fI\s-1SHELLS\s0\fR \f(CW\*(C`Cmnd_Aliases\*(C'\fR. .PP .Vb 1 \& steve CSNETS = (operator) /usr/local/op_commands/ .Ve .PP The user \fBsteve\fR may run any command in the directory /usr/local/op_commands/ but only as user operator. .PP .Vb 1 \& matt valkyrie = KILL .Ve .PP On his personal workstation, valkyrie, \fBmatt\fR needs to be able to kill hung processes. .PP .Vb 1 \& WEBMASTERS www = (www) ALL, (root) /usr/bin/su www .Ve .PP On the host www, any user in the \fI\s-1WEBMASTERS\s0\fR \f(CW\*(C`User_Alias\*(C'\fR (will, wendy, and wim), may run any command as user www (which owns the web pages) or simply \fIsu\fR\|(1) to www. .PP .Vb 2 \& ALL CDROM = NOPASSWD: /sbin/umount /CDROM,\e \& /sbin/mount \-o nosuid\e,nodev /dev/cd0a /CDROM .Ve .PP Any user may mount or unmount a CD-ROM on the machines in the \s-1CDROM\s0 \&\f(CW\*(C`Host_Alias\*(C'\fR (orion, perseus, hercules) without entering a password. This is a bit tedious for users to type, so it is a prime candidate for encapsulating in a shell script. .SH "SECURITY NOTES" .IX Header "SECURITY NOTES" It is generally not effective to \*(L"subtract\*(R" commands from \f(CW\*(C`ALL\*(C'\fR using the '!' operator. A user can trivially circumvent this by copying the desired command to a different name and then executing that. For example: .PP .Vb 1 \& bill ALL = ALL, !SU, !SHELLS .Ve .PP Doesn't really prevent \fBbill\fR from running the commands listed in \&\fI\s-1SU\s0\fR or \fI\s-1SHELLS\s0\fR since he can simply copy those commands to a different name, or use a shell escape from an editor or other program. Therefore, these kind of restrictions should be considered advisory at best (and reinforced by policy). .PP Furthermore, if the \fIfast_glob\fR option is in use, it is not possible to reliably negate commands where the path name includes globbing (aka wildcard) characters. This is because the C library's \&\fIfnmatch\fR\|(3) function cannot resolve relative paths. While this is typically only an inconvenience for rules that grant privileges, it can result in a security issue for rules that subtract or revoke privileges. .PP For example, given the following \fIsudoers\fR entry: .PP .Vb 2 \& john ALL = /usr/bin/passwd [a\-zA\-Z0\-9]*, /usr/bin/chsh [a\-zA\-Z0\-9]*, \& /usr/bin/chfn [a\-zA\-Z0\-9]*, !/usr/bin/* root .Ve .PP User \fBjohn\fR can still run \f(CW\*(C`/usr/bin/passwd root\*(C'\fR if \fIfast_glob\fR is enabled by changing to \fI/usr/bin\fR and running \f(CW\*(C`./passwd root\*(C'\fR instead. .SH "PREVENTING SHELL ESCAPES" .IX Header "PREVENTING SHELL ESCAPES" Once \fBsudo\fR executes a program, that program is free to do whatever it pleases, including run other programs. This can be a security issue since it is not uncommon for a program to allow shell escapes, which lets a user bypass \fBsudo\fR's access control and logging. Common programs that permit shell escapes include shells (obviously), editors, paginators, mail and terminal programs. .PP There are two basic approaches to this problem: .IP "restrict" 10 .IX Item "restrict" Avoid giving users access to commands that allow the user to run arbitrary commands. Many editors have a restricted mode where shell escapes are disabled, though \fBsudoedit\fR is a better solution to running editors via \fBsudo\fR. Due to the large number of programs that offer shell escapes, restricting users to the set of programs that do not is often unworkable. .IP "noexec" 10 .IX Item "noexec" Many systems that support shared libraries have the ability to override default library functions by pointing an environment variable (usually \f(CW\*(C`LD_PRELOAD\*(C'\fR) to an alternate shared library. On such systems, \fBsudo\fR's \fInoexec\fR functionality can be used to prevent a program run by \fBsudo\fR from executing any other programs. Note, however, that this applies only to native dynamically-linked executables. Statically-linked executables and foreign executables running under binary emulation are not affected. .Sp The \fInoexec\fR feature is known to work on SunOS, Solaris, *BSD, Linux, \s-1IRIX\s0, Tru64 \s-1UNIX\s0, MacOS X, HP-UX 11.x and \s-1AIX\s0 5.3 and above. It should be supported on most operating systems that support the \&\f(CW\*(C`LD_PRELOAD\*(C'\fR environment variable. Check your operating system's manual pages for the dynamic linker (usually ld.so, ld.so.1, dyld, dld.sl, rld, or loader) to see if \f(CW\*(C`LD_PRELOAD\*(C'\fR is supported. .Sp On Solaris 10 and higher, \fInoexec\fR uses Solaris privileges instead of the \f(CW\*(C`LD_PRELOAD\*(C'\fR environment variable. .Sp To enable \fInoexec\fR for a command, use the \f(CW\*(C`NOEXEC\*(C'\fR tag as documented in the User Specification section above. Here is that example again: .Sp .Vb 1 \& aaron shanty = NOEXEC: /usr/bin/more, /usr/bin/vi .Ve .Sp This allows user \fBaaron\fR to run \fI/usr/bin/more\fR and \fI/usr/bin/vi\fR with \fInoexec\fR enabled. This will prevent those two commands from executing other commands (such as a shell). If you are unsure whether or not your system is capable of supporting \fInoexec\fR you can always just try it out and check whether shell escapes work when \fInoexec\fR is enabled. .PP Note that restricting shell escapes is not a panacea. Programs running as root are still capable of many potentially hazardous operations (such as changing or overwriting files) that could lead to unintended privilege escalation. In the specific case of an editor, a safer approach is to give the user permission to run \&\fBsudoedit\fR. .SH "SECURITY NOTES" .IX Header "SECURITY NOTES" \&\fIsudoers\fR will check the ownership of its time stamp directory (\fI/var/db/sudo\fR by default) and ignore the directory's contents if it is not owned by root or if it is writable by a user other than root. On systems that allow non-root users to give away files via \&\fIchown\fR\|(2), if the time stamp directory is located in a world-writable directory (e.g., \fI/tmp\fR), it is possible for a user to create the time stamp directory before \fBsudo\fR is run. However, because \&\fIsudoers\fR checks the ownership and mode of the directory and its contents, the only damage that can be done is to \*(L"hide\*(R" files by putting them in the time stamp dir. This is unlikely to happen since once the time stamp dir is owned by root and inaccessible by any other user, the user placing files there would be unable to get them back out. .PP \&\fIsudoers\fR will not honor time stamps set far in the future. Time stamps with a date greater than current_time + 2 * \f(CW\*(C`TIMEOUT\*(C'\fR will be ignored and sudo will log and complain. This is done to keep a user from creating his/her own time stamp with a bogus date on systems that allow users to give away files if the time stamp directory is located in a world-writable directory. .PP On systems where the boot time is available, \fIsudoers\fR will ignore time stamps that date from before the machine booted. .PP Since time stamp files live in the file system, they can outlive a user's login session. As a result, a user may be able to login, run a command with \fBsudo\fR after authenticating, logout, login again, and run \fBsudo\fR without authenticating so long as the time stamp file's modification time is within \f(CW\*(C`5\*(C'\fR minutes (or whatever the timeout is set to in \fIsudoers\fR). When the \fItty_tickets\fR option is enabled, the time stamp has per-tty granularity but still may outlive the user's session. On Linux systems where the devpts filesystem is used, Solaris systems with the devices filesystem, as well as other systems that utilize a devfs filesystem that monotonically increase the inode number of devices as they are created (such as Mac \s-1OS\s0 X), \fIsudoers\fR is able to determine when a tty-based time stamp file is stale and will ignore it. Administrators should not rely on this feature as it is not universally available. .PP If users have sudo \f(CW\*(C`ALL\*(C'\fR there is nothing to prevent them from creating their own program that gives them a root shell (or making their own copy of a shell) regardless of any '!' elements in the user specification. .SH "SEE ALSO" .IX Header "SEE ALSO" \&\fIrsh\fR\|(1), \fIsu\fR\|(1), \fIfnmatch\fR\|(3), \fIglob\fR\|(3), \fImktemp\fR\|(3), \fIstrftime\fR\|(3), \&\fIsudoers.ldap\fR\|(4), \fIsudo_plugin\fR\|(1m), \fIsudo\fR\|(1m), \fIvisudo\fR\|(1m) .SH "CAVEATS" .IX Header "CAVEATS" The \fIsudoers\fR file should \fBalways\fR be edited by the \fBvisudo\fR command which locks the file and does grammatical checking. It is imperative that \fIsudoers\fR be free of syntax errors since \fBsudo\fR will not run with a syntactically incorrect \fIsudoers\fR file. .PP When using netgroups of machines (as opposed to users), if you store fully qualified host name in the netgroup (as is usually the case), you either need to have the machine's host name be fully qualified as returned by the \f(CW\*(C`hostname\*(C'\fR command or use the \fIfqdn\fR option in \&\fIsudoers\fR. .SH "BUGS" .IX Header "BUGS" If you feel you have found a bug in \fBsudo\fR, please submit a bug report at http://www.sudo.ws/sudo/bugs/ .SH "SUPPORT" .IX Header "SUPPORT" Limited free support is available via the sudo-users mailing list, see http://www.sudo.ws/mailman/listinfo/sudo\-users to subscribe or search the archives. .SH "DISCLAIMER" .IX Header "DISCLAIMER" \&\fBsudo\fR is provided ``\s-1AS\s0 \s-1IS\s0'' and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. See the \s-1LICENSE\s0 file distributed with \fBsudo\fR or http://www.sudo.ws/sudo/license.html for complete details. 0707010019563f000041ed0000000000000000000000034e816d9900000000000000b600010002ffffffffffffffff0000001900000000root/usr/local/share/doc07070100195640000041ed0000000000000000000000024e816d9900000000000000b600010002ffffffffffffffff0000001e00000000root/usr/local/share/doc/sudo07070100195647000081a40000000000000000000000014e816d9400000ec8000000b600010002ffffffffffffffff0000002500000000root/usr/local/share/doc/sudo/READMEThe sudo philosophy =================== Sudo is a program designed to allow a sysadmin to give limited root privileges to users and log root activity. The basic philosophy is to give as few privileges as possible but still allow people to get their work done. Where to find sudo ================== Before you try and build sudo, *please* make sure you have the current version. The latest sudo may always be gotten via anonymous ftp from ftp.sudo.ws in the directory /pub/sudo/ or from the sudo web site, http://www.sudo.ws/ The distribution is sudo-M.m.tar.gz where `M' is the major version number and `m' is the minor version number. BETA versions of sudo may also be available. If you join the `sudo-workers' mailing list you will get the BETA announcements (see the `Mailing lists' section below). What's new ========== See the NEWS file for a list of major changes in this release. For a complete list of changes, see the ChangeLog file. For a summary of major changes to the current stable release, see the web page, http://www.sudo.ws/sudo/stable.html. If you are upgrading from an earlier version of Sudo, please see the UPGRADE file in the doc directory. For a history of sudo please see the HISTORY file in the doc directory. System requirements =================== To build sudo from the source distribution you need a nominally POSIX-compliant operating system (any modern version of BSD, Linux or UNIX should work), a working ANSI/ISO C compiler (C89 or higher), and the ar, make and ranlib utilities If you wish to modify the parser then you will need flex version 2.5.2 or later and either bison or byacc (sudo comes with a pre-flex'd tokenizer and pre-yacc'd grammar parser). You'll also have to uncomment a few lines from the Makefile or run configure with the --with-devel option. You can get flex via anonymous ftp from ftp://ftp.ee.lbl.gov/pub/flex* as well as any GNU mirror. You can get GNU bison from ftp://ftp.gnu.org/pub/gnu/bison/ or any GNU mirror. Building the release ==================== Please read the installation guide in the `INSTALL' file before trying to build sudo. Pay special attention to the "OS dependent notes" section. Copyright ========= Sudo is distributed under an ISC-style license. Please refer to the `LICENSE' file included with the release for details. Mailing lists ============= sudo-announce This list receives announcements whenever a new version of sudo is released. http://www.sudo.ws/mailman/listinfo/sudo-announce sudo-users This list is for questions and general discussion about sudo. http://www.sudo.ws/mailman/listinfo/sudo-users sudo-workers This list is for people working on and porting sudo. http://www.sudo.ws/mailman/listinfo/sudo-workers sudo-commits This list receives a message for each commit made to the sudo source repository. http://www.sudo.ws/mailman/listinfo/sudo-commits To subscribe to a list, visit its url (as listed above) and enter your email address to subscribe. Digest versions are available but these are fairly low traffic lists so the digest versions are not a significant win. Mailing list archives are also available. See the mailing list web sites for the appropriate links. Web page ======== There is a sudo web page at http://www.sudo.ws/ that contains an overview of sudo, documentation, downloads, information about beta versions and other useful info. Bug reports =========== If you have found what you believe to be a bug, you can file a bug report in the sudo bug database, on the web at http://www.sudo.ws/bugs/. Please read over the `TROUBLESHOOTING' file in the doc directory *before* submitting a bug report. When reporting bugs, please be sure to include the version of sudo you are using as well as the platform you are running it on. 07070100195641000081a40000000000000000000000014e816d9400000a34000000b600010002ffffffffffffffff0000002b00000000root/usr/local/share/doc/sudo/CONTRIBUTORSThe following list of people, sorted by last name, have contributed code or patches to this implementation of sudo since I began maintaining it in 1993. This list is known to be incomplete--if you believe you should be listed, please send a note to sudo@sudo.ws. Matt Ackeret Nick Andrew Dimitry Andric Danny Barron Tom Bates Ray Bellis Elias Benali Jamie Beverly Spider Boardman Keith Garry Boyce P.J. Bostley Michael Brantley Rob Braun Piete Brooks Jerry Brown Andreas Bussjaeger Gary Calvin Aaron Campbell Chris Coleman Deven T. Corzine Frank Cusack Theo de Raadt David Dill Theo Van Dinter Jeff Earickson Drew Eckhardt Ben Edgington Marc Esipovich Marc Espie Ariel Faigon Brian Farrell Steve Fobes Simon J. Gerraty B. Guillory Randy M. Hayman Joachim Henke YOSHIFUJI Hideaki Dave Hieb Nick Holloway Adam Hoover Michael T. Hunter Eric Irrgang Brian Jackson Richard L. Jackson Jr John R. Jackson Mark Janssen Chris Jepeway Timo Juhani Ayamura KIKUCHI Kevin Kadow Stepan Kasal Mike Kienenberger Dale King Jim Knoble Tim Knox Alek O. Komarnitsky Daniel Kopecek Paul Kranenburg David Krause Case Larsen Dmitry V. Levin Kendall Libby Phillip E. Lobbes David J. MacKenzie Jeff Makey Michael D. Marchionna Paul Markham Emin Martinian Jason McIntyre Tom McLaughlin Michael Meskes Todd C. Miller Loic Minier Jan Thomas Moldung Charles Morris Andreas Mueller Dworkin Muller Jeff Nieusma Peter A. Nikitser Ludwig Nussel Eric Paquet Chantal Paradis Ted Percival Christian S.J. Peron Alexander Peslyak Toby Peterson Diego Elio Petteno Alex Plotnick Gudleik Rasch Matt Richards John P. Rouillard Alain Roy Elan Ruusamae Eygene Ryabinkin Yuichi SATO Wilfredo Sanchez Jean-Francois Saucier Patrick Schoenfeld Dougal Scott Nick Sieger Thor Lancelot Simon Marc Slemko Andy Smith Igor Sobrado Aaron Spangler Cloyce D. Spradling Matthew Stier Tobias Stoeckmann Russell Street Tilo Stritzky Michael Stroucken Robert Tarrall Matthew Thomas Giles Todd Martin Toft Darren Tucker Robert Uhl Petr Uzel Reznic Valery Martynas Venckus Klaus Wagner Dan Walsh John Warburton Kirk Webb Timm Wetzel Marco van Wieringen David Wood 07070100195650000081a40000000000000000000000014e816d940000096a000000b600010002ffffffffffffffff0000002e00000000root/usr/local/share/doc/sudo/schema.OpenLDAP# # OpenLDAP schema file for Sudo # Save as /etc/openldap/schema/sudo.schema # attributetype ( 1.3.6.1.4.1.15953.9.1.1 NAME 'sudoUser' DESC 'User(s) who may run sudo' EQUALITY caseExactIA5Match SUBSTR caseExactIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) attributetype ( 1.3.6.1.4.1.15953.9.1.2 NAME 'sudoHost' DESC 'Host(s) who may run sudo' EQUALITY caseExactIA5Match SUBSTR caseExactIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) attributetype ( 1.3.6.1.4.1.15953.9.1.3 NAME 'sudoCommand' DESC 'Command(s) to be executed by sudo' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) attributetype ( 1.3.6.1.4.1.15953.9.1.4 NAME 'sudoRunAs' DESC 'User(s) impersonated by sudo (deprecated)' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) attributetype ( 1.3.6.1.4.1.15953.9.1.5 NAME 'sudoOption' DESC 'Options(s) followed by sudo' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) attributetype ( 1.3.6.1.4.1.15953.9.1.6 NAME 'sudoRunAsUser' DESC 'User(s) impersonated by sudo' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) attributetype ( 1.3.6.1.4.1.15953.9.1.7 NAME 'sudoRunAsGroup' DESC 'Group(s) impersonated by sudo' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) attributetype ( 1.3.6.1.4.1.15953.9.1.8 NAME 'sudoNotBefore' DESC 'Start of time interval for which the entry is valid' EQUALITY generalizedTimeMatch ORDERING generalizedTimeOrderingMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.24 ) attributetype ( 1.3.6.1.4.1.15953.9.1.9 NAME 'sudoNotAfter' DESC 'End of time interval for which the entry is valid' EQUALITY generalizedTimeMatch ORDERING generalizedTimeOrderingMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.24 ) attributeTypes ( 1.3.6.1.4.1.15953.9.1.10 NAME 'sudoOrder' DESC 'an integer to order the sudoRole entries' EQUALITY integerMatch ORDERING integerOrderingMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 ) objectclass ( 1.3.6.1.4.1.15953.9.2.1 NAME 'sudoRole' SUP top STRUCTURAL DESC 'Sudoer Entries' MUST ( cn ) MAY ( sudoUser $ sudoHost $ sudoCommand $ sudoRunAs $ sudoRunAsUser $ sudoRunAsGroup $ sudoOption $ sudoOrder $ sudoNotBefore $ sudoNotAfter $ description ) ) 0707010019564c000081a40000000000000000000000014e816d9400000514000000b600010002ffffffffffffffff0000002f00000000root/usr/local/share/doc/sudo/sample.sudo.conf# # Sample /etc/sudo.conf file # # Format: # Plugin plugin_name plugin_path # Path askpass /path/to/askpass # Path noexec /path/to/noexec.so # # Sudo plugins: # # The plugin_path is relative to ${prefix}/libexec unless fully qualified. # The plugin_name corresponds to a global symbol in the plugin # that contains the plugin interface structure. # # The sudoers plugin is used by default if no Plugin lines are present. Plugin sudoers_policy sudoers.so Plugin sudoers_io sudoers.so # # Sudo askpass: # # An askpass helper program may be specified to provide a graphical # password prompt for "sudo -A" support. Sudo does not ship with its # own passpass program but can use the OpenSSH askpass. # # Use the OpenSSH askpass #Path askpass /usr/X11R6/bin/ssh-askpass # # Use the Gnome OpenSSH askpass #Path askpass /usr/libexec/openssh/gnome-ssh-askpass # # Sudo noexec: # # Path to a shared library containing dummy versions of the execv(), # execve() and fexecve() library functions that just return an error. # This is used to implement the "noexec" functionality on systems that # support C or its equivalent. # The compiled-in value is usually sufficient and should only be changed # if you rename or move the sudo_noexec.so file. # #Path noexec /usr/libexec/sudo_noexec.so 0707010019564d000081a40000000000000000000000014e816d9400000fd0000000b600010002ffffffffffffffff0000002d00000000root/usr/local/share/doc/sudo/sample.sudoers# # Sample /etc/sudoers file. # # This file MUST be edited with the 'visudo' command as root. # # See the sudoers man page for the details on how to write a sudoers file. ## # Override built-in defaults ## Defaults syslog=auth Defaults>root !set_logname Defaults:FULLTIMERS !lecture Defaults:millert !authenticate Defaults@SERVERS log_year, logfile=/var/log/sudo.log Defaults!PAGERS noexec ## # User alias specification ## User_Alias FULLTIMERS = millert, mikef, dowdy User_Alias PARTTIMERS = bostley, jwfox, crawl User_Alias WEBMASTERS = will, wendy, wim ## # Runas alias specification ## Runas_Alias OP = root, operator Runas_Alias DB = oracle, sybase ## # Host alias specification ## Host_Alias SPARC = bigtime, eclipse, moet, anchor:\ SGI = grolsch, dandelion, black:\ ALPHA = widget, thalamus, foobar:\ HPPA = boa, nag, python Host_Alias CUNETS = 128.138.0.0/255.255.0.0 Host_Alias CSNETS = 128.138.243.0, 128.138.204.0/24, 128.138.242.0 Host_Alias SERVERS = master, mail, www, ns Host_Alias CDROM = orion, perseus, hercules ## # Cmnd alias specification ## Cmnd_Alias DUMPS = /usr/sbin/dump, /usr/sbin/rdump, /usr/sbin/restore, \ /usr/sbin/rrestore, /usr/bin/mt Cmnd_Alias KILL = /usr/bin/kill Cmnd_Alias PRINTING = /usr/sbin/lpc, /usr/bin/lprm Cmnd_Alias SHUTDOWN = /usr/sbin/shutdown Cmnd_Alias HALT = /usr/sbin/halt Cmnd_Alias REBOOT = /usr/sbin/reboot Cmnd_Alias SHELLS = /sbin/sh, /usr/bin/sh, /usr/bin/csh, /usr/bin/ksh, \ /usr/local/bin/tcsh, /usr/bin/rsh, \ /usr/local/bin/zsh Cmnd_Alias SU = /usr/bin/su Cmnd_Alias VIPW = /usr/sbin/vipw, /usr/bin/passwd, /usr/bin/chsh, \ /usr/bin/chfn Cmnd_Alias PAGERS = /usr/bin/more, /usr/bin/pg, /usr/bin/less ## # User specification ## # root and users in group wheel can run anything on any machine as any user root ALL = (ALL) ALL %wheel ALL = (ALL) ALL # full time sysadmins can run anything on any machine without a password FULLTIMERS ALL = NOPASSWD: ALL # part time sysadmins may run anything but need a password PARTTIMERS ALL = ALL # jack may run anything on machines in CSNETS jack CSNETS = ALL # lisa may run any command on any host in CUNETS (a class B network) lisa CUNETS = ALL # operator may run maintenance commands and anything in /usr/oper/bin/ operator ALL = DUMPS, KILL, SHUTDOWN, HALT, REBOOT, PRINTING,\ sudoedit /etc/printcap, /usr/oper/bin/ # joe may su only to operator joe ALL = /usr/bin/su operator # pete may change passwords for anyone but root on the hp snakes pete HPPA = /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root # bob may run anything on the sparc and sgi machines as any user # listed in the Runas_Alias "OP" (ie: root and operator) bob SPARC = (OP) ALL : SGI = (OP) ALL # jim may run anything on machines in the biglab netgroup jim +biglab = ALL # users in the secretaries netgroup need to help manage the printers # as well as add and remove users +secretaries ALL = PRINTING, /usr/bin/adduser, /usr/bin/rmuser # fred can run commands as oracle or sybase without a password fred ALL = (DB) NOPASSWD: ALL # on the alphas, john may su to anyone but root and flags are not allowed john ALPHA = /usr/bin/su [!-]*, !/usr/bin/su *root* # jen can run anything on all machines except the ones # in the "SERVERS" Host_Alias jen ALL, !SERVERS = ALL # jill can run any commands in the directory /usr/bin/, except for # those in the SU and SHELLS aliases. jill SERVERS = /usr/bin/, !SU, !SHELLS # steve can run any command in the directory /usr/local/op_commands/ # as user operator. steve CSNETS = (operator) /usr/local/op_commands/ # matt needs to be able to kill things on his workstation when # they get hung. matt valkyrie = KILL # users in the WEBMASTERS User_Alias (will, wendy, and wim) # may run any command as user www (which owns the web pages) # or simply su to www. WEBMASTERS www = (www) ALL, (root) /usr/bin/su www # anyone can mount/unmount a cd-rom on the machines in the CDROM alias ALL CDROM = NOPASSWD: /sbin/umount /CDROM,\ /sbin/mount -o nosuid\,nodev /dev/cd0a /CDROM 07070100195649000081a40000000000000000000000014e816d94000024e0000000b600010002ffffffffffffffff0000002e00000000root/usr/local/share/doc/sudo/TROUBLESHOOTINGTroubleshooting tips and FAQ for Sudo ===================================== Q) When I run configure, it says "C compiler cannot create executables". A) This usually means you either don't have a working compiler. This could be due to the lack of a license or that some component of the compiler suite could not be found. Check config.log for clues as to why this is happening. On many systems, compiler components live in /usr/ccs/bin which may not be in your PATH environment variable. Q) When I run configure, it says "sudo requires the 'ar' utility to build". A) As part of the build process, sudo creates a temporary library containing objects that are shared amongst the different sudo executables. On Unix systems, the "ar" utility is used to do this. This error indicates that "ar" is missing on your system. On Solaris systems, you may need to install the SUNWbtool package. On other systems "ar" may be included in the GNU binutils package. Q) Sudo compiles but when I run it I get "Sorry, sudo must be setuid root." and sudo quits. A) Sudo must be setuid root to do its work. You need to do something like `chmod 4111 /usr/local/bin/sudo'. Also, the file system sudo resides on must *not* be mounted (or exported) with the nosuid option or sudo will not be able to work. Another possibility is you may have '.' in your $PATH before the directory containing sudo. If you are going to have '.' in your path you should make sure it is at the end. Q) Sudo never gives me a chance to enter a password using PAM, it just says 'Sorry, try again.' three times and exits. A) You didn't setup PAM to work with sudo. On Redhat Linux or Fedora Core this generally means installing sample.pam as /etc/pam.d/sudo. See the sample.pam file for hints on what to use for other Linux systems. Q) Sudo says 'Account expired or PAM config lacks an "account" section for sudo, contact your system administrator' and exits but I know my account has not expired. A) Your PAM config lacks an "account" specification. On Linux this usually means you are missing a line like: account required pam_unix.so in /etc/pam.d/sudo. Q) Sudo is setup to log via syslog(3) but I'm not getting any log messages. A) Make sure you have an entry in your syslog.conf file to save the sudo messages (see the sample.syslog.conf file). The default log facility is authpriv (changeable via configure or in sudoers). Don't forget to send a SIGHUP to your syslogd so that it re-reads its conf file. Also, remember that syslogd does *not* create log files, you need to create the file before syslogd will log to it (ie: touch /var/log/sudo). Note: the facility (e.g. "auth.debug") must be separated from the destination (e.g. "/var/log/auth" or "@loghost") by tabs, *not* spaces. This is a common error. Q) When sudo asks me for my password it never accepts what I enter even though I know I entered my password correctly. A) If your system uses shadow passwords, it is possible that sudo didn't detect this. Take a look at the generated config.h file and verify that the C function used for shadow password lookups was detected. For instance, for SVR4-style shadow passwords, HAVE_GETSPNAM should be defined (you can search for the string "shadow passwords" in config.h with your editor). Note that there is no define for 4.4BSD-based shadow passwords since that just uses the standard getpw* routines. Q) I don't want the sudoers file in /etc, how can I specify where it should go? A) Use the --sysconfdir option to configure. Ie: configure --sysconfdir=/dir/you/want/sudoers/in Q) Can I put the sudoers file in NIS/NIS+ or do I have to have a copy on each machine? A) There is no support for making an NIS/NIS+ map/table out of the sudoers file at this time. A good way to distribute the sudoers file is via rdist(1). It is also possible to NFS-mount the sudoers file. Q) I don't run sendmail on my machine. Does this mean that I cannot use sudo? A) No, you just need to run use the --without-sendmail argument to configure or add "!mailerpath" to the Defaults line in /etc/sudoers. Q) When I run visudo it uses vi as the editor and I hate vi. How can I make it use another editor? A) Your best bet is to run configure with the --with-env-editor switch. This will make visudo use the editor specified by the user's EDITOR environment variable. Alternately, you can run configure with the --with-editor=/path/to/another/editor. Q) Sudo appears to be removing some variables from my environment, why? A) Sudo removes the following "dangerous" environment variables to guard against shared library spoofing, shell voodoo, and kerberos server spoofing. IFS LOCALDOMAIN RES_OPTIONS HOSTALIASES NLSPATH PATH_LOCALE TERMINFO TERMINFO_DIRS TERMPATH TERMCAP ENV BASH_ENV LC_ (if it contains a '/' or '%') LANG (if it contains a '/' or '%') LANGUAGE (if it contains a '/' or '%') LD_* _RLD_* SHLIB_PATH (HP-UX only) LIBPATH (AIX only) KRB_CONF (kerb4 only) KRBCONFDIR (kerb4 only) KRBTKFILE (kerb4 only) KRB5_CONFIG (kerb5 only) VAR_ACE (SecurID only) USR_ACE (SecurID only) DLC_ACE (SecurID only) Q) How can I keep sudo from asking for a password? A) To specify this on a per-user (and per-command) basis, use the 'NOPASSWD' tag right before the command list in sudoers. See the sudoers man page and sample.sudoers for details. To disable passwords completely, run configure with the --without-passwd option or add "!authenticate" to the Defaults line in /etc/sudoers. You can also turn off authentication on a per-user or per-host basis using a user or host-specific Defaults entry in sudoers. Q) When I run configure, it dies with the following error: "no acceptable cc found in $PATH". A) /usr/ucb/cc was the only C compiler that configure could find. You need to tell configure the path to the "real" C compiler via the --with-CC option. On Solaris, the path is probably something like "/opt/SUNWspro/SC4.0/bin/cc". If you have gcc that will also work. Q) When I run configure, it dies with the following error: Fatal Error: config.cache exists from another platform! Please remove it and re-run configure. A) configure caches the results of its tests in a file called config.cache to make re-running configure speedy. However, if you are building sudo for a different platform the results in config.cache will be wrong so you need to remove config.cache. You can do this by "rm config.cache" or "make realclean". Note that "make realclean" will also remove any object files and configure temp files that are laying around as well. Q) I built sudo on a Solaris >= 2.6 machine but the resulting binary doesn't work on Solaris <= 2.5.1. Why? A) Starting with Solaris 2.6, snprintf(3) is included in the standard C library. To build a version of sudo on a >= 2.6 machine that will run on a <= 2.5.1 machine, edit config.h and comment out the lines: #define HAVE_SNPRINTF 1 #define HAVE_VSNPRINTF 1 and run make. Q) When I run "visudo" it says "sudoers file busy, try again later." and doesn't do anything. A) Someone else is currently editing the sudoers file with visudo. Q) When I try to use "cd" with sudo it says "cd: command not found". A) "cd" is a shell built-in command, you can't run it as a command since a child process (sudo) cannot affect the current working directory of the parent (your shell). Q) When I try to use "cd" with sudo the command completes without errors but nothing happens. A) Even though "cd" is a shell built-in command, some operating systems include a /usr/bin/cd command for some reason. A standalone "cd" command is totally useless since a child process (cd) cannot affect the current working directory of the parent (your shell). Thus, "sudo cd /foo" will start a child process, change the directory and immediately exit without doing anything useful. Q) When I run sudo it says I am not allowed to run the command as root but I don't want to run it as root, I want to run it as another user. My sudoers file entry looks like: bob ALL=(oracle) ALL A) The default user sudo tries to run things as is always root, even if the invoking user can only run commands as a single, specific user. This may change in the future but at the present time you have to work around this using the 'runas_default' option in sudoers. For example: Defaults:bob runas_default=oracle would achieve the desired result ofr the preceding sudoers fragment. Q) When I try to run sudo via ssh, I get the error: sudo: no tty present and no askpass program specified A) ssh does not allocate a tty by default when running a remote command. Without a tty, sudo cannot disable echo when prompting for a password. You can use ssh's "-t" option to force it to allocate a tty. Alternately, if you do not mind your password being echoed to the screen, you can use the "visiblepw" sudoers option to allow this. Q) How do you pronounce `sudo'? A) The official pronunciation is soo-doo (for su "do"). However, an alternate pronunciation, a homophone of "pseudo", is also common. 0707010019564b000081a40000000000000000000000014e816d940000049e000000b600010002ffffffffffffffff0000002900000000root/usr/local/share/doc/sudo/sample.pam#%PAM-1.0 # Sample /etc/pam.d/sudo file for RedHat 9 / Fedora Core. # For other Linux distributions you may want to # use /etc/pam.d/sshd or /etc/pam.d/su as a guide. # # There are two basic ways to configure PAM, either via pam_stack # or by explicitly specifying the various methods to use. # # Here we use pam_stack auth required pam_stack.so service=system-auth account required pam_stack.so service=system-auth password required pam_stack.so service=system-auth session required pam_stack.so service=system-auth # # Alternately, you can specify the authentication method directly. # Here we use pam_unix for normal password authentication. #auth required pam_env.so #auth sufficient pam_unix.so #account required pam_unix.so #password required pam_cracklib.so retry=3 type= #password required pam_unix.so nullok use_authtok md5 shadow #session required pam_limits.so #session required pam_unix.so # # Another option is to use SMB for authentication. #auth required pam_env.so #auth sufficient pam_smb_auth.so #account required pam_smb_auth.so #password required pam_smb_auth.so #session required pam_limits.so 07070100195646000081a40000000000000000000000014e816d9400006186000000b600010002ffffffffffffffff0000002300000000root/usr/local/share/doc/sudo/NEWSWhat's new in Sudo 1.8.2? * Sudo, visudo, sudoreplay and the sudoers plug-in now have natural language support (NLS). This can be disabled by passing configure the --disable-nls option. Sudo will use gettext(), if available, to display translated messages. All translations are coordinated via The Translation Project, http://translationproject.org/. * Plug-ins are now loaded with the RTLD_GLOBAL flag instead of RTLD_LOCAL. This fixes missing symbol problems in PAM modules on certain platforms, such as FreeBSD and SuSE Linux Enterprise. * I/O logging is now supported for commands run in background mode (using sudo's -b flag). * Group ownership of the sudoers file is now only enforced when the file mode on sudoers allows group readability or writability. * Visudo now checks the contents of an alias and warns about cycles when the alias is expanded. * If the user specifes a group via sudo's -g option that matches the target user's group in the password database, it is now allowed even if no groups are present in the Runas_Spec. * The sudo Makefiles now have more complete dependencies which are automatically generated instead of being maintained manually. * The "use_pty" sudoers option is now correctly passed back to the sudo front end. This was missing in previous versions of sudo 1.8 which prevented "use_pty" from being honored. * "sudo -i command" now works correctly with the bash version 2.0 and higher. Previously, the .bash_profile would not be sourced prior to running the command unless bash was built with NON_INTERACTIVE_LOGIN_SHELLS defined. * When matching groups in the sudoers file, sudo will now match based on the name of the group instead of the group ID. This can substantially reduce the number of group lookups for sudoers files that contain a large number of groups. * Multi-factor authentication is now supported on AIX. * Added support for non-RFC 4517 compliant LDAP servers that require that seconds be present in a timestamp, such as Tivoli Directory Server. * If the group vector is to be preserved, the PATH search for the command is now done with the user's original group vector. * For LDAP-based sudoers, the "runas_default" sudoOption now works properly in a sudoRole that contains a sudoCommand. * Spaces in command line arguments for "sudo -s" and "sudo -i" are now escaped with a backslash when checking the security policy. What's new in Sudo 1.8.1p2? * Two-character CIDR-style IPv4 netmasks are now matched correctly in the sudoers file. * A build error with MIT Kerberos V has been resolved. * A crash on HP-UX in the sudoers plugin when wildcards are present in the sudoers file has been resolved. * Sudo now works correctly on Tru64 Unix again. What's new in Sudo 1.8.1p1? * Fixed a problem on AIX where sudo was unable to set the final uid if the PAM module modified the effective uid. * A non-existent includedir is now treated the same as an empty directory and not reported as an error. * Removed extraneous parens in LDAP filter when sudoers_search_filter is enabled that can cause an LDAP search error. * Fixed a "make -j" problem for "make install". What's new in Sudo 1.8.1? * A new LDAP setting, sudoers_search_filter, has been added to ldap.conf. This setting can be used to restrict the set of records returned by the LDAP query. Based on changes from Matthew Thomas. * White space is now permitted within a User_List when used in conjunction with a per-user Defaults definition. * A group ID (%#gid) may now be specified in a User_List or Runas_List. Likewise, for non-Unix groups the syntax is %:#gid. * Support for double-quoted words in the sudoers file has been fixed. The change in 1.7.5 for escaping the double quote character caused the double quoting to only be available at the beginning of an entry. * The fix for resuming a suspended shell in 1.7.5 caused problems with resuming non-shells on Linux. Sudo will now save the process group ID of the program it is running on suspend and restore it when resuming, which fixes both problems. * A bug that could result in corrupted output in "sudo -l" has been fixed. * Sudo will now create an entry in the utmp (or utmpx) file when allocating a pseudo-tty (e.g. when logging I/O). The "set_utmp" and "utmp_runas" sudoers file options can be used to control this. Other policy plugins may use the "set_utmp" and "utmp_user" entries in the command_info list. * The sudoers policy now stores the TSID field in the logs even when the "iolog_file" sudoers option is defined to a value other than %{sessid}. Previously, the TSID field was only included in the log file when the "iolog_file" option was set to its default value. * The sudoreplay utility now supports arbitrary session IDs. Previously, it would only work with the base-36 session IDs that the sudoers plugin uses by default. * Sudo now passes "run_shell=true" to the policy plugin in the settings list when sudo's -s command line option is specified. The sudoers policy plugin uses this to implement the "set_home" sudoers option which was missing from sudo 1.8.0. * The "noexec" functionality has been moved out of the sudoers policy plugin and into the sudo front-end, which matches the behavior documented in the plugin writer's guide. As a result, the path to the noexec file is now specified in the sudo.conf file instead of the sudoers file. * On Solaris 10, the PRIV_PROC_EXEC privilege is now used to implement the "noexec" feature. Previously, this was implemented via the LD_PRELOAD environment variable. * The exit values for "sudo -l", "sudo -v" and "sudo -l command" have been fixed in the sudoers policy plugin. * The sudoers policy plugin now passes the login class, if any, back to the sudo front-end. * The sudoers policy plugin was not being linked with requisite libraries in certain configurations. * Sudo now parses command line arguments before loading any plugins. This allows "sudo -V" or "sudo -h" to work even if there is a problem with sudo.conf * Plugins are now linked with the static version of libgcc to allow the plugin to run on a system where no shared libgcc is installed, or where it is installed in a different location. What's new in Sudo 1.8.0? * Sudo has been refactored to use a modular framework that can support third-party policy and I/O logging plugins. The default plugin is "sudoers" which provides the traditional sudo functionality. See the sudo_plugin manual for details on the plugin API and the sample in the plugins directory for a simple example. What's new in Sudo 1.7.5? * When using visudo in check mode, a file named "-" may be used to check sudoers data on the standard input. * Sudo now only fetches shadow password entries when using the password database directly for authentication. * Password and group entries are now cached using the same key that was used to look them up. This fixes a problem when looking up entries by name if the name in the retrieved entry does not match the name used to look it up. This may happen on some systems that do case insensitive lookups or that truncate long names. * GCC will no longer display warnings on glibc systems that use the warn_unused_result attribute for write(2) and other system calls. * If a PAM account management module denies access, sudo now prints a more useful error message and stops trying to validate the user. * Fixed a potential hang on idle systems when the sudo-run process exits immediately. * Sudo now includes a copy of zlib that will be used on systems that do not have zlib installed. * The --with-umask-override configure flag has been added to enable the "umask_override" sudoers Defaults option at build time. * Sudo now unblocks all signals on startup to avoid problems caused by the parent process changing the default signal mask. * LDAP Sudoers entries may now specify a time period for which the entry is valid. This requires an updated sudoers schema that includes the sudoNotBefore and sudoNotAfter attributes. Support for timed entries must be explicitly enabled in the ldap.conf file. Based on changes from Andreas Mueller. * LDAP Sudoers entries may now specify a sudoOrder attribute that determines the order in which matching entries are applied. The last matching entry is used, just like file-based sudoers. This requires an updated sudoers schema that includes the sudoOrder attribute. Based on changes from Andreas Mueller. * When run as sudoedit, or when given the -e flag, sudo now treats command line arguments as pathnames. This means that slashes in the sudoers file entry must explicitly match slashes in the command line arguments. As a result, and entry such as: user ALL = sudoedit /etc/* will allow editing of /etc/motd but not /etc/security/default. * NETWORK_TIMEOUT is now an alias for BIND_TIMELIMIT in ldap.conf for compatibility with OpenLDAP configuration files. * The LDAP API TIMEOUT parameter is now honored in ldap.conf. * The I/O log directory may now be specified in the sudoers file. * Sudo will no longer refuse to run if the sudoers file is writable by root. * Sudo now performs command line escaping for "sudo -s" and "sudo -i" after validating the command so the sudoers entries do not need to include the backslashes. * Logging and email sending are now done in the locale specified by the "sudoers_locale" setting ("C" by default). Email send by sudo now includes MIME headers when "sudoers_locale" is not "C". * The configure script has a new option, --disable-env-reset, to allow one to change the default for the sudoers Default setting "env_reset" at compile time. * When logging "sudo -l command", sudo will now prepend "list " to the command in the log line to distinguish between an actual command invocation in the logs. * Double-quoted group and user names may now include escaped double quotes as part of the name. Previously this was a parse error. * Sudo once again restores the state of the signal handlers it modifies before executing the command. This allows sudo to be used with the nohup command. * Resuming a suspended shell now works properly when I/O logging is not enabled (the I/O logging case was already correct). What's new in Sudo 1.7.4p6? * A bug has been fixed in the I/O logging support that could cause visual artifacts in full-screen programs such as text editors. What's new in Sudo 1.7.4p5? * A bug has been fixed that would allow a command to be run without the user entering a password when sudo's -g flag is used without the -u flag. * If user has no supplementary groups, sudo will now fall back on checking the group file explicitly, which restores historic sudo behavior. * A crash has been fixed when sudo's -g flag is used without the -u flag and the sudoers file contains an entry with no runas user or group listed. * A crash has been fixed when the Solaris project support is enabled and sudo's -g flag is used without the -u flag. * Sudo no longer exits with an error when support for auditing is compiled in but auditing is not enabled. * Fixed a bug introduced in sudo 1.7.3 where the ticket file was not being honored when the "targetpw" sudoers Defaults option was enabled. * The LOG_INPUT and LOG_OUTPUT tags in sudoers are now parsed correctly. * A crash has been fixed in "sudo -l" when sudo is built with auditing support and the user is not allowed to run any commands on the host. What's new in Sudo 1.7.4p4? * A potential security issue has been fixed with respect to the handling of sudo's -g command line option when -u is also specified. The flaw may allow an attacker to run commands as a user that is not authorized by the sudoers file. * A bug has been fixed where "sudo -l" output was incomplete if multiple sudoers sources were defined in nsswitch.conf and there was an error querying one of the sources. * The log_input, log_output, and use_pty sudoers options now work correctly on AIX. Previously, sudo would hang if they were enabled. * The "make install" target now works correctly when sudo is built in a directory other than the source directory. * The "runas_default" sudoers setting now works properly in a per-command Defaults line. * Suspending and resuming the bash shell when PAM is in use now works correctly. The SIGCONT signal was not propagated to the child process. What's new in Sudo 1.7.4p3? * A bug has been fixed where duplicate HOME environment variables could be present when the env_reset setting was disabled and the always_set_home setting was enabled in sudoers. * The value of sysconfdir is now substituted into the path to the sudoers.d directory in the installed sudoers file. * Compilation problems on IRIX and other platforms have been fixed. * If multiple PAM "auth" actions are specified and the user enters ^C at the password prompt, sudo will no longer prompt for a password for any subsequent "auth" actions. Previously it was necessary to enter ^C for each "auth" action. What's new in Sudo 1.7.4p2? * A bug where sudo could spin in a busy loop waiting for the child process has been fixed. What's new in Sudo 1.7.4p1? * A bug introduced in sudo 1.7.3 that prevented the -k and -K options from functioning when the tty_tickets sudoers option is enabled has been fixed. * Sudo no longer prints a warning when the -k or -K options are specified and the ticket file does not exist. * It is now easier to cross-compile sudo. What's new in Sudo 1.7.4? * Sudoedit will now preserve the file extension in the name of the temporary file being edited. The extension is used by some editors (such as emacs) to choose the editing mode. * Time stamp files have moved from /var/run/sudo to either /var/db/sudo, /var/lib/sudo or /var/adm/sudo. The directories are checked for existence in that order. This prevents users from receiving the sudo lecture every time the system reboots. Time stamp files older than the boot time are ignored on systems where it is possible to determine this. * The tty_tickets sudoers option is now enabled by default. * Ancillary documentation (README files, LICENSE, etc) is now installed in a sudo documentation directory. * Sudo now recognizes "tls_cacert" as an alias for "tls_cacertfile" in ldap.conf. * Defaults settings that are tied to a user, host or command may now include the negation operator. For example: Defaults:!millert lecture will match any user but millert. * The default PATH environment variable, used when no PATH variable exists, now includes /usr/sbin and /sbin. * Sudo now uses polypkg (http://rc.quest.com/topics/polypkg/) for cross-platform packing. * On Linux, sudo will now restore the nproc resource limit before executing a command, unless the limit appears to have been modified by pam_limits. This avoids a problem with bash scripts that open more than 32 descriptors on SuSE Linux, where sysconf(_SC_CHILD_MAX) will return -1 when RLIMIT_NPROC is set to RLIMIT_UNLIMITED (-1). * The HOME and MAIL environment variables are now reset based on the target user's password database entry when the env_reset sudoers option is enabled (which is the case in the default configuration). Users wishing to preserve the original values should use a sudoers entry like: Defaults env_keep += HOME to preserve the old value of HOME and Defaults env_keep += MAIL to preserve the old value of MAIL. * Fixed a problem in the restoration of the AIX authdb registry setting. * Sudo will now fork(2) and wait until the command has completed before calling pam_close_session(). * The default syslog facility is now "authpriv" if the operating system supports it, else "auth". What's new in Sudo 1.7.3? * Support for logging I/O for the command being run. For more information, see the documentation for the "log_input" and "log_output" Defaults options in the sudoers manual. Also see the sudoreplay manual for how to replay I/O log sessions. * The use_pty sudoers option can be used to force a command to be run in a pseudo-pty, even when I/O logging is not enabled. * On some systems, sudo can now detect when a user has logged out and back in again when tty-based time stamps are in use. Supported systems include Solaris systems with the devices file system, Mac OS X, and Linux systems with the devpts filesystem (pseudo-ttys only). * On AIX systems, the registry setting in /etc/security/user is now taken into account when looking up users and groups. Sudo now applies the correct the user and group ids when running a command as a user whose account details come from a different source (e.g. LDAP or DCE vs. local files). * Support for multiple 'sudoers_base' and 'uri' entries in ldap.conf. When multiple entries are listed, sudo will try each one in the order in which they are specified. * Sudo's SELinux support should now function correctly when running commands as a non-root user and when one of stdin, stdout or stderr is not a terminal. * Sudo will now use the Linux audit system with configure with the --with-linux-audit flag. * Sudo now uses mbr_check_membership() on systems that support it to determine group membership. Currently, only Darwin (Mac OS X) supports this. * When the tty_tickets sudoers option is enabled but there is no terminal device, sudo will no longer use or create a tty-based ticket file. Previously, sudo would use a tty name of "unknown". As a consequence, if a user has no terminal device, sudo will now always prompt for a password. * The passwd_timeout and timestamp_timeout options may now be specified as floating point numbers for more granular timeout values. * Negating the fqdn option in sudoers now works correctly when sudo is configured with the --with-fqdn option. In previous versions of sudo the fqdn was set before sudoers was parsed. What's new in Sudo 1.7.2? * A new #includedir directive is available in sudoers. This can be used to implement an /etc/sudo.d directory. Files in an includedir are not edited by visudo unless they contain a syntax error. * The -g option did not work properly when only setting the group (and not the user). Also, in -l mode the wrong user was displayed for sudoers entries where only the group was allowed to be set. * Fixed a problem with the alias checking in visudo which could prevent visudo from exiting. * Sudo will now correctly parse the shell-style /etc/environment file format used by pam_env on Linux. * When doing password and group database lookups, sudo will only cache an entry by name or by id, depending on how the entry was looked up. Previously, sudo would cache by both name and id from a single lookup, but this breaks sites that have multiple password or group database names that map to the same uid or gid. * User and group names in sudoers may now be enclosed in double quotes to avoid having to escape special characters. * BSM audit fixes when changing to a non-root uid. * Experimental non-Unix group support. Currently only works with Quest Authorization Services and allows Active Directory groups fixes for Minix-3. * For Netscape/Mozilla-derived LDAP SDKs the certificate and key paths may be specified as a directory or a file. However, version 5.0 of the SDK only appears to support using a directory (despite documentation to the contrary). If SSL client initialization fails and the certificate or key paths look like they could be default file name, strip off the last path element and try again. * A setenv() compatibility fix for Linux systems, where a NULL value is treated the same as an empty string and the variable name is checked against the NULL pointer. What's new in Sudo 1.7.1? * A new Defaults option "pwfeedback" will cause sudo to provide visual feedback when the user is entering a password. * A new Defaults option "fast_glob" will cause sudo to use the fnmatch() function for file name globbing instead of glob(). When this option is enabled, sudo will not check the file system when expanding wildcards. This is faster but a side effect is that relative paths with wildcard will no longer work. * New BSM audit support for systems that support it such as FreeBSD and Mac OS X. * The file name specified with the #include directive may now include a %h escape which is expanded to the short form of hostname. * The -k flag may now be specified along with a command, causing the user's timestamp file to be ignored. * New support for Tivoli-based LDAP START_TLS, present in AIX. * New support for /etc/netsvc.conf on AIX. * The unused alias checks in visudo now handle the case of an alias referring to another alias. What's new in Sudo 1.7.0? * Rewritten parser that converts sudoers into a set of data structures. This eliminates a number of ordering issues and makes it possible to apply sudoers Defaults entries before searching for the command. It also adds support for per-command Defaults specifications. * Sudoers now supports a #include facility to allow the inclusion of other sudoers-format files. * Sudo's -l (list) flag has been enhanced: o applicable Defaults options are now listed o a command argument can be specified for testing whether a user may run a specific command. o a new -U flag can be used in conjunction with "sudo -l" to allow root (or a user with "sudo ALL") list another user's privileges. * A new -g flag has been added to allow the user to specify a primary group to run the command as. The sudoers syntax has been extended to include a group section in the Runas specification. * A uid may now be used anywhere a username is valid. * The "secure_path" run-time Defaults option has been restored. * Password and group data is now cached for fast lookups. * The file descriptor at which sudo starts closing all open files is now configurable via sudoers and, optionally, the command line. * Visudo will now warn about aliases that are defined but not used. * The -i and -s command line flags now take an optional command to be run via the shell. Previously, the argument was passed to the shell as a script to run. * Improved LDAP support. SASL authentication may now be used in conjunction when connecting to an LDAP server. The krb5_ccname parameter in ldap.conf may be used to enable Kerberos. * Support for /etc/nsswitch.conf. LDAP users may now use nsswitch.conf to specify the sudoers order. E.g.: sudoers: ldap files to check LDAP, then /etc/sudoers. The default is "files", even when LDAP support is compiled in. This differs from sudo 1.6 where LDAP was always consulted first. * Support for /etc/environment on AIX and Linux. If sudo is run with the -i flag, the contents of /etc/environment are used to populate the new environment that is passed to the command being run. * If no terminal is available or if the new -A flag is specified, sudo will use a helper program to read the password if one is configured. Typically, this is a graphical password prompter such as ssh-askpass. * A new Defaults option, "mailfrom" that sets the value of the "From:" field in the warning/error mail. If unspecified, the login name of the invoking user is used. * A new Defaults option, "env_file" that refers to a file containing environment variables to be set in the command being run. * A new flag, -n, may be used to indicate that sudo should not prompt the user for a password and, instead, exit with an error if authentication is required. * If sudo needs to prompt for a password and it is unable to disable echo (and no askpass program is defined), it will refuse to run unless the "visiblepw" Defaults option has been specified. * Prior to version 1.7.0, hitting enter/return at the Password: prompt would exit sudo. In sudo 1.7.0 and beyond, this is treated as an empty password. To exit sudo, the user must press ^C or ^D at the prompt. * visudo will now check the sudoers file owner and mode in -c (check) mode when the -s (strict) flag is specified. * A new Defaults option "umask_override" will cause sudo to set the umask specified in sudoers even if it is more permissive than the invoking user's umask. 07070100195644000081a40000000000000000000000014e816d9400000adc000000b600010002ffffffffffffffff0000002600000000root/usr/local/share/doc/sudo/HISTORYA Brief History of Sudo: The Early Years Sudo was first conceived and implemented by Bob Coggeshall and Cliff Spencer around 1980 at the Department of Computer Science at SUNY/Buffalo. It ran on a VAX-11/750 running 4.1BSD. An updated version, credited to Phil Betchel, Cliff Spencer, Gretchen Phillips, John LoVerso and Don Gworek, was posted to the net.sources Usenet newsgroup in December of 1985. Sudo at CU-Boulder In the Summer of 1986, Garth Snyder released an enhanced version of sudo. For the next 5 years, sudo was fed and watered by a handful of folks at CU-Boulder, including Bob Coggeshall, Bob Manchek, and Trent Hein. Root Group Sudo In 1991, Dave Hieb and Jeff Nieusma wrote a new version of sudo with an enhanced sudoers format under contract to a consulting firm called "The Root Group". This version was later released under the GNU public license. CU Sudo In 1994, after maintaining sudo informally within CU-Boulder for some time, Todd C. Miller made a public release of "CU sudo" (version 1.3) with bug fixes and support for more operating systems. The "CU" was added to differentiate it from the "official" version from "The Root Group". In 1995, a new parser for the sudoers file was contributed by Chris Jepeway. The new parser was a proper grammar (unlike the old one) and could work with both sudo and visudo (previously they had slightly different parsers). In 1996, Todd, who had been maintaining sudo for several years in his spare time, moved distribution of sudo from a CU-Boulder ftp site to his domain, courtesan.com. Just Plain Sudo In 1999, the "CU" prefix was dropped from the name since there had been no formal release of sudo from "The Root Group" since 1991 (the original authors now work elsewhere). As of version 1.6, Sudo no longer contains any of the original "Root Group" code and is available under an ISC-style license. In 2001, the sudo web site, ftp site and mailing lists were moved from courtesan.com to the sudo.ws domain (sudo.org was already taken). LDAP Integration In 2003, Nationwide Mutual Insurance Company contributed code written by Aaron Spangler to store the sudoers data in LDAP. These changes were incorporated into Sudo 1.6.8. New Parser In 2005, Todd rewrote the sudoers parser to better support the features that had been added in the past ten years. This new parser removes some limitations of the previous one, removes ordering constraints and adds support for including multiple sudoers files. Quest Sponsorship In 2010, Quest Software began sponsoring Sudo development by hiring Todd to work on Sudo as part of his full-time job. Present Day Sudo, in its current form, is maintained by: Todd C. Miller Todd continues to enhance sudo and fix bugs. 0707010019564a000081a40000000000000000000000014e816d9400003296000000b600010002ffffffffffffffff0000002600000000root/usr/local/share/doc/sudo/UPGRADENotes on upgrading from an older release ======================================== o Upgrading from a version prior to 1.8.2: When matching Unix groups in the sudoers file, sudo will now match based on the name of the group as it appears in sudoers instead of the group ID. This can substantially reduce the number of group lookups for sudoers files that contain a large nummber of groups. There are a few side effects of this change. 1) Unix groups with different names but the same group ID are can no longer be used interchangably. Sudo will look up all of a user's groups by group ID and use the resulting group names when matching sudoers entries. If there are multiple groups with the same ID, the group name returned by the system getgrgid() library function is the name that will be used when matching sudoers entries. 2) Unix group names specified in the sudoers file that are longer than the system maximum will no longer match. For instance, if there is a Unix group "fireflie" on a system where group names are limited to eight characters, "%fireflies" in sudoers will no longer match "fireflie". Previously, a lookup by name of the group "fireflies" would have matched the "fireflie" group on most systems. o Upgrading from a version prior to 1.8.1: Changes in the sudoers parser could result in parse errors for existing sudoers file. These changes cause certain erroneous entries to be flagged as errors where before they allowed. Changes include: Combining multiple Defaults entries with a backslash. E.g. Defaults set_path \ Defaults syslog which should be: Defaults set_path Defaults syslog Also, double-quoted strings with a missing end-quote are now detected and result in an error. Previously, text starting a double quote and ending with a newline was ignored. E.g. Defaults set_path"foo In previous versions of sudo, the `"foo' portion would have been ignored. To avoid problems, sudo 1.8.1's "make install" will not install a new sudo binary if the existing sudoers file has errors. In Sudo 1.8.1 the "noexec" functionality has moved out of the sudoers policy plugin and into the sudo front-end. As a result, the path to the noexec file is now specified in the sudo.conf file instead of the sudoers file. If you have a sudoers file that uses the "noexec_file" option, you will need to move the definition to the sudo.conf file instead. Old style in /etc/sudoers: Defaults noexec_file=/usr/local/libexec/sudo_noexec.so New style in /etc/sudo.conf: Path noexec /usr/local/libexec/sudo_noexec.so o Upgrading from a version prior to 1.8.0: Starting with version 1.8.0, sudo uses a modular framework to support policy and I/O logging plugins. The default policy plugin is "sudoers" which provides the traditional sudoers evaluation and I/O logging. Plugins are typically located in /usr/libexec or /usr/local/libexec, though this is system-dependent. The sudoers plugin is named "sudoers.so" on most systems. The sudo.conf file, usually stored in /etc, is used to configure plugins. This file is optional--if no plugins are specified in sudo.conf, the "sudoers" plugin is used. See the sample.sudo.conf file in the doc directory or refer to the updated sudo manual to see how to configure sudo.conf. The "askpass" setting has moved from the sudoers file to the sudo.conf file. If you have a sudoers file that uses the "askpass" option, you will need to move the definition to the sudo.conf file. Old style in /etc/sudoers: Defaults askpass=/usr/X11R6/bin/ssh-askpass New style in /etc/sudo.conf: Path askpass /usr/X11R6/bin/ssh-askpass o Upgrading from a version prior to 1.7.5: Sudo 1.7.5 includes an updated LDAP schema with support for the sudoNotBefore, sudoNotAfter and sudoOrder attributes. The sudoNotBefore and sudoNotAfter attribute support is only used when the SUDOERS_TIMED setting is enabled in ldap.conf. If enabled, those attributes are used directly when constructing an LDAP filter. As a result, your LDAP server must have the updated schema if you want to use sudoNotBefore and sudoNotAfter. The sudoOrder support does not affect the LDAP filter sudo constructs and so there is no need to explicitly enable it in ldap.conf. If the sudoOrder attribute is not present in an entry, a value of 0 is used. If no entries contain sudoOrder attributes, the results are in whatever order the LDAP server returns them, as in past versions of sudo. Older versions of sudo will simply ignore the new attributes if they are present in an entry. There are no compatibility problems using the updated schema with older versions of sudo. o Upgrading from a version prior to 1.7.4: Starting with sudo 1.7.4, the time stamp files have moved from /var/run/sudo to either /var/db/sudo, /var/lib/sudo or /var/adm/sudo. The directories are checked for existence in that order. This prevents users from receiving the sudo lecture every time the system reboots. Time stamp files older than the boot time are ignored on systems where it is possible to determine this. Additionally, the tty_tickets sudoers option is now enabled by default. To restore the old behavior (single time stamp per user), add a line like: Defaults !tty_tickets to sudoers or use the --without-tty-tickets configure option. The HOME and MAIL environment variables are now reset based on the target user's password database entry when the env_reset sudoers option is enabled (which is the case in the default configuration). Users wishing to preserve the original values should use a sudoers entry like: Defaults env_keep += HOME to preserve the old value of HOME and Defaults env_keep += MAIL to preserve the old value of MAIL. NOTE: preserving HOME has security implications since many programs use when searching for configuration files. Adding HOME to env_keep may enable a user to run unrestricted commands via sudo. The default syslog facility has changed from "local2" to "authpriv" (or "auth" if the operating system doesn't have "authpriv"). The --with-logfac configure option can be used to change this or it can be changed in the sudoers file. o Upgrading from a version prior to 1.7.0: Starting with sudo 1.7.0, comments in the sudoers file must not have a digit or minus sign immediately after the comment character ('#'). Otherwise, the comment may be interpreted as a user or group ID. When sudo is build with LDAP support the /etc/nsswitch.conf file is now used to determine the sudoers seach order. sudo will default to only using /etc/sudoers unless /etc/nsswitch.conf says otherwise. This can be changed with an nsswitch.conf line, e.g.: sudoers: ldap files Would case LDAP to be searched first, then the sudoers file. To restore the pre-1.7.0 behavior, run configure with the --with-nsswitch=no flag. Sudo now ignores user .ldaprc files as well as system LDAP defaults. All LDAP configuration is now in /etc/ldap.conf (or whichever file was specified by configure's --with-ldap-conf-file option). If you are using TLS, you may now need to specify: tls_checkpeer no in sudo's ldap.conf unless ldap.conf references a valid certificate authority file(s). Please also see the NEWS file for a list of new features in sudo 1.7.0. o Upgrading from a version prior to 1.6.9: Starting with sudo 1.6.9, if an OS supports a modular authentication method such as PAM, it will be used by default by configure. Environment variable handling has changed significantly in sudo 1.6.9. Prior to version 1.6.9, sudo would preserve the user's environment, pruning out potentially dangerous variables. Beginning with sudo 1.6.9, the envionment is reset to a default set of values with only a small number of "safe" variables preserved. To preserve specific environment variables, add them to the "env_keep" list in sudoers. E.g. Defaults env_keep += "EDITOR" The old behavior can be restored by negating the "env_reset" option in sudoers. E.g. Defaults !env_reset There have also been changes to how the "env_keep" and "env_check" options behave. Prior to sudo 1.6.9, the TERM and PATH environment variables would always be preserved even if the env_keep option was redefined. That is no longer the case. Consequently, if env_keep is set with "=" and not simply appended to (i.e. using "+="), PATH and TERM must be explicitly included in the list of environment variables to keep. The LOGNAME, SHELL, USER, and USERNAME environment variables are still always set. Additionally, the env_check setting previously had no effect when env_reset was set (which is now on by default). Starting with sudo 1.6.9, environment variables listed in env_check are also preserved in the env_reset case, provided that they do not contain a '/' or '%' character. Note that it is not necessary to also list a variable in env_keep--having it in env_check is sufficent. The default lists of variables to be preserved and/or checked are displayed when sudo is run by root with the -V flag. o Upgrading from a version prior to 1.6.8: Prior to sudo 1.6.8, if /var/run did not exist, sudo would put the time stamp files in /tmp/.odus. As of sudo 1.6.8, the time stamp files will be placed in /var/adm/sudo or /usr/adm/sudo if there is no /var/run directory. This directory will be created if it does not already exist. Previously, a sudoers entry that explicitly prohibited running a command as a certain user did not override a previous entry allowing the same command. This has been fixed in sudo 1.6.8 such that the last match is now used (as it is documented). Hopefully no one was depending on the previous (buggy) beghavior. o Upgrading from a version prior to 1.6: As of sudo 1.6, parsing of runas entries and the NOPASSWD tag has changed. Prior to 1.6, a runas specifier applied only to a single command directly following it. Likewise, the NOPASSWD tag only allowed the command directly following it to be run without a password. Starting with sudo 1.6, both the runas specifier and the NOPASSWD tag are "sticky" for an entire command list. So, given the following line in sudo < 1.6 millert ALL=(daemon) NOPASSWD:/usr/bin/whoami,/bin/ls millert would be able to run /usr/bin/whoami as user daemon without a password and /bin/ls as root with a password. As of sudo 1.6, the same line now means that millert is able to run run both /usr/bin/whoami and /bin/ls as user daemon without a password. To expand on this, take the following example: millert ALL=(daemon) NOPASSWD:/usr/bin/whoami, (root) /bin/ls, \ /sbin/dump millert can run /usr/bin/whoami as daemon and /bin/ls and /sbin/dump as root. No password need be given for either command. In other words, the "(root)" sets the default runas user to root for the rest of the list. If we wanted to require a password for /bin/ls and /sbin/dump the line could be written thusly: millert ALL=(daemon) NOPASSWD:/usr/bin/whoami, \ (root) PASSWD:/bin/ls, /sbin/dump Additionally, sudo now uses a per-user time stamp directory instead of a time stamp file. This allows tty time stamps to simply be files within the user's time stamp dir. For the default, non-tty case, the time stamp on the directory itself is used. Also, the temporary file used by visudo is now /etc/sudoers.tmp since some versions of vipw on systems with shadow passwords use /etc/stmp for the temporary shadow file. o Upgrading from a version prior to 1.5: By default, sudo expects the sudoers file to be mode 0440 and to be owned by user and group 0. This differs from version 1.4 and below which expected the sudoers file to be mode 0400 and to be owned by root. Doing a `make install' will set the sudoers file to the new mode and group. If sudo encounters a sudoers file with the old permissions it will attempt to update it to the new scheme. You cannot, however, use a sudoers file with the new permissions with an old sudo binary. It is suggested that if have a means of distributing sudo you distribute the new binaries first, then the new sudoers file (or you can leave sudoers as is and sudo will fix the permissions itself as long as sudoers is on a local file system). 07070100195645000081a40000000000000000000000014e816d9400000f04000000b600010002ffffffffffffffff0000002600000000root/usr/local/share/doc/sudo/LICENSESudo is distributed under the following ISC-style license: Copyright (c) 1994-1996, 1998-2011 Todd C. Miller Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Sponsored in part by the Defense Advanced Research Projects Agency (DARPA) and Air Force Research Laboratory, Air Force Materiel Command, USAF, under agreement number F39502-99-1-0512. The files fnmatch.c, fnmatch.h, getcwd.c, glob.c, glob.h and snprintf.c bear the following UCB license: Copyright (c) 1987, 1989, 1990, 1991, 1992, 1993, 1994 The Regents of the University of California. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the University nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. The embedded copy of zlib bears the following license: Copyright (C) 1995-2010 Jean-loup Gailly and Mark Adler This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. Jean-loup Gailly Mark Adler jloup@gzip.org madler@alumni.caltech.edu 0707010019564f000081a40000000000000000000000014e816d9400001ec1000000b600010002ffffffffffffffff0000003500000000root/usr/local/share/doc/sudo/schema.ActiveDirectory# # Active Directory Schema for sudo configuration (sudoers) # # To extend your Active Directory schema, run one of the following command # on your Windows DC (default port - Active Directory): # # ldifde -i -f schema.ActiveDirectory -c "CN=Schema,CN=Configuration,DC=X" #schemaNamingContext # # or on your Windows DC if using another port (with Active Directory LightWeight Directory Services / ADAM-Active Directory Application Mode) # Port 50000 by example (or any other port specified when defining the ADLDS/ADAM instance # # ldifde -i -f schema.ActiveDirectory -t 50000 -c "CN=Schema,CN=Configuration,DC=X" #schemaNamingContext # # or # # ldifde -i -f schema.ActiveDirectory -s server:port -c "CN=Schema,CN=Configuration,DC=X" #schemaNamingContext # # Can add username domain and password # # -b username domain password # # Can create Log file in current or any directory # # -j . # dn: CN=sudoUser,CN=Schema,CN=Configuration,DC=X changetype: add objectClass: top objectClass: attributeSchema cn: sudoUser distinguishedName: CN=sudoUser,CN=Schema,CN=Configuration,DC=X instanceType: 4 attributeID: 1.3.6.1.4.1.15953.9.1.1 attributeSyntax: 2.5.5.5 isSingleValued: FALSE showInAdvancedViewOnly: TRUE adminDisplayName: sudoUser adminDescription: User(s) who may run sudo oMSyntax: 22 searchFlags: 1 lDAPDisplayName: sudoUser name: sudoUser schemaIDGUID:: JrGcaKpnoU+0s+HgeFjAbg== objectCategory: CN=Attribute-Schema,CN=Schema,CN=Configuration,DC=X dn: CN=sudoHost,CN=Schema,CN=Configuration,DC=X changetype: add objectClass: top objectClass: attributeSchema cn: sudoHost distinguishedName: CN=sudoHost,CN=Schema,CN=Configuration,DC=X instanceType: 4 attributeID: 1.3.6.1.4.1.15953.9.1.2 attributeSyntax: 2.5.5.5 isSingleValued: FALSE showInAdvancedViewOnly: TRUE adminDisplayName: sudoHost adminDescription: Host(s) who may run sudo oMSyntax: 22 lDAPDisplayName: sudoHost name: sudoHost schemaIDGUID:: d0TTjg+Y6U28g/Y+ns2k4w== objectCategory: CN=Attribute-Schema,CN=Schema,CN=Configuration,DC=X dn: CN=sudoCommand,CN=Schema,CN=Configuration,DC=X changetype: add objectClass: top objectClass: attributeSchema cn: sudoCommand distinguishedName: CN=sudoCommand,CN=Schema,CN=Configuration,DC=X instanceType: 4 attributeID: 1.3.6.1.4.1.15953.9.1.3 attributeSyntax: 2.5.5.5 isSingleValued: FALSE showInAdvancedViewOnly: TRUE adminDisplayName: sudoCommand adminDescription: Command(s) to be executed by sudo oMSyntax: 22 lDAPDisplayName: sudoCommand name: sudoCommand schemaIDGUID:: D6QR4P5UyUen3RGYJCHCPg== objectCategory: CN=Attribute-Schema,CN=Schema,CN=Configuration,DC=X dn: CN=sudoRunAs,CN=Schema,CN=Configuration,DC=X changetype: add objectClass: top objectClass: attributeSchema cn: sudoRunAs distinguishedName: CN=sudoRunAs,CN=Schema,CN=Configuration,DC=X instanceType: 4 attributeID: 1.3.6.1.4.1.15953.9.1.4 attributeSyntax: 2.5.5.5 isSingleValued: FALSE showInAdvancedViewOnly: TRUE adminDisplayName: sudoRunAs adminDescription: User(s) impersonated by sudo (deprecated) oMSyntax: 22 lDAPDisplayName: sudoRunAs name: sudoRunAs schemaIDGUID:: CP98mCQTyUKKxGrQeM80hQ== objectCategory: CN=Attribute-Schema,CN=Schema,CN=Configuration,DC=X dn: CN=sudoOption,CN=Schema,CN=Configuration,DC=X changetype: add objectClass: top objectClass: attributeSchema cn: sudoOption distinguishedName: CN=sudoOption,CN=Schema,CN=Configuration,DC=X instanceType: 4 attributeID: 1.3.6.1.4.1.15953.9.1.5 attributeSyntax: 2.5.5.5 isSingleValued: FALSE showInAdvancedViewOnly: TRUE adminDisplayName: sudoOption adminDescription: Option(s) followed by sudo oMSyntax: 22 lDAPDisplayName: sudoOption name: sudoOption schemaIDGUID:: ojaPzBBlAEmsvrHxQctLnA== objectCategory: CN=Attribute-Schema,CN=Schema,CN=Configuration,DC=X dn: CN=sudoRunAsUser,CN=Schema,CN=Configuration,DC=X changetype: add objectClass: top objectClass: attributeSchema cn: sudoRunAsUser distinguishedName: CN=sudoRunAsUser,CN=Schema,CN=Configuration,DC=X instanceType: 4 attributeID: 1.3.6.1.4.1.15953.9.1.6 attributeSyntax: 2.5.5.5 isSingleValued: FALSE showInAdvancedViewOnly: TRUE adminDisplayName: sudoRunAsUser adminDescription: User(s) impersonated by sudo oMSyntax: 22 lDAPDisplayName: sudoRunAsUser name: sudoRunAsUser schemaIDGUID:: 9C52yPYd3RG3jMR2VtiVkw== objectCategory: CN=Attribute-Schema,CN=Schema,CN=Configuration,DC=X dn: CN=sudoRunAsGroup,CN=Schema,CN=Configuration,DC=X changetype: add objectClass: top objectClass: attributeSchema cn: sudoRunAsGroup distinguishedName: CN=sudoRunAsGroup,CN=Schema,CN=Configuration,DC=X instanceType: 4 attributeID: 1.3.6.1.4.1.15953.9.1.7 attributeSyntax: 2.5.5.5 isSingleValued: FALSE showInAdvancedViewOnly: TRUE adminDisplayName: sudoRunAsGroup adminDescription: Groups(s) impersonated by sudo oMSyntax: 22 lDAPDisplayName: sudoRunAsGroup name: sudoRunAsGroup schemaIDGUID:: xJhSt/Yd3RGJPTB1VtiVkw== objectCategory: CN=Attribute-Schema,CN=Schema,CN=Configuration,DC=X dn: CN=sudoNotBefore,CN=Schema,CN=Configuration,DC=X changetype: add objectClass: top objectClass: attributeSchema cn: sudoNotBefore distinguishedName: CN=sudoNotBefore,CN=Schema,CN=Configuration,DC=X instanceType: 4 attributeID: 1.3.6.1.4.1.15953.9.1.8 attributeSyntax: 1.3.6.1.4.1.1466.115.121.1.24 isSingleValued: TRUE showInAdvancedViewOnly: TRUE adminDisplayName: sudoNotBefore adminDescription: Start of time interval for which the entry is valid oMSyntax: 22 lDAPDisplayName: sudoNotBefore name: sudoNotBefore schemaIDGUID:: xJhSt/Yd3RGJPTB1VtiVkw== objectCategory: CN=Attribute-Schema,CN=Schema,CN=Configuration,DC=X dn: CN=sudoNotAfter,CN=Schema,CN=Configuration,DC=X changetype: add objectClass: top objectClass: attributeSchema cn: sudoNotAfter distinguishedName: CN=sudoNotAfter,CN=Schema,CN=Configuration,DC=X instanceType: 4 attributeID: 1.3.6.1.4.1.15953.9.1.9 attributeSyntax: 1.3.6.1.4.1.1466.115.121.1.24 isSingleValued: TRUE showInAdvancedViewOnly: TRUE adminDisplayName: sudoNotAfter adminDescription: End of time interval for which the entry is valid oMSyntax: 22 lDAPDisplayName: sudoNotAfter name: sudoNotAfter schemaIDGUID:: xJhSt/Yd3RGJPTB1VtiVkw== objectCategory: CN=Attribute-Schema,CN=Schema,CN=Configuration,DC=X dn: CN=sudoOrder,CN=Schema,CN=Configuration,DC=X changetype: add objectClass: top objectClass: attributeSchema cn: sudoOrder distinguishedName: CN=sudoOrder,CN=Schema,CN=Configuration,DC=X instanceType: 4 attributeID: 1.3.6.1.4.1.15953.9.1.10 attributeSyntax: 1.3.6.1.4.1.1466.115.121.1.27 isSingleValued: TRUE showInAdvancedViewOnly: TRUE adminDisplayName: sudoOrder adminDescription: an integer to order the sudoRole entries oMSyntax: 22 lDAPDisplayName: sudoOrder name: sudoOrder schemaIDGUID:: xJhSt/Yd3RGJPTB1VtiVkw== objectCategory: CN=Attribute-Schema,CN=Schema,CN=Configuration,DC=X dn: changetype: modify add: schemaUpdateNow schemaUpdateNow: 1 - dn: CN=sudoRole,CN=Schema,CN=Configuration,DC=X changetype: add objectClass: top objectClass: classSchema cn: sudoRole distinguishedName: CN=sudoRole,CN=Schema,CN=Configuration,DC=X instanceType: 4 possSuperiors: container possSuperiors: top subClassOf: top governsID: 1.3.6.1.4.1.15953.9.2.1 mayContain: sudoCommand mayContain: sudoHost mayContain: sudoOption mayContain: sudoRunAs mayContain: sudoRunAsUser mayContain: sudoRunAsGroup mayContain: sudoUser mayContain: sudoNotBefore mayContain: sudoNotAfter mayContain: sudoOrder rDNAttID: cn showInAdvancedViewOnly: FALSE adminDisplayName: sudoRole adminDescription: Sudoer Entries objectClassCategory: 1 lDAPDisplayName: sudoRole name: sudoRole schemaIDGUID:: SQn432lnZ0+ukbdh3+gN3w== systemOnly: FALSE objectCategory: CN=Class-Schema,CN=Schema,CN=Configuration,DC=X defaultObjectCategory: CN=sudoRole,CN=Schema,CN=Configuration,DC=X 07070100195642000081a40000000000000000000000014e816d94000b62a1000000b600010002ffffffffffffffff0000002800000000root/usr/local/share/doc/sudo/ChangeLog2011-08-17 Todd C. Miller * plugins/sudoers/po/sudoers.pot: Regen pot files [3682e51af1d0] [tip] <1.8> * Makefile.in: Fix logic inversion in pot file up to date check. [343dbbca9422] <1.8> * doc/sudo.cat, doc/sudo.man.in, doc/sudoers.cat, doc/sudoers.ldap.cat, doc/sudoers.ldap.man.in, doc/sudoers.man.in, doc/visudo.cat, doc/visudo.man.in: regen docs [96234478bde2] <1.8> 2011-08-15 Todd C. Miller * configure, configure.in: Add caching for gettext() checks. [4039d21424c3] <1.8> * configure, configure.in: Better handling of libintl header and library mismatch. [cc9faee8e486] <1.8> 2011-08-14 Todd C. Miller * NEWS: sync [73649a44d934] <1.8> 2011-08-13 Todd C. Miller * Also check sudoers gid if sudoers is group writable. [3d345347f6ac] <1.8> * NEWS: Update for 1.8.2 final [441c22fea363] <1.8> 2011-08-12 Todd C. Miller * configure, configure.in: If dlopen is present but libtool doesn't find it, error out since it probably means that libtool doesn't support the system. [6fc7c0de4f6d] <1.8> * configure args on the command line should override builtin defaults. Disable NLS for non-Linux/Solaris unless explicitly enabled. [0ef165f892c2] <1.8> * Fix loop that calls authenticate(). If there was an error message from authenticate(), display it. [f0686011ff2e] <1.8> 2011-08-11 Todd C. Miller * configure, configure.in: Update to autoconf 2.68 and libtool 2.4 [00df5f3647e1] <1.8> * Fix typo; OPT should be OTP [31da1f989740] <1.8> * Rename libsudoers convenience library to libparsesudoers to avoid libtool confusion. [e9ae9d611dd5] <1.8> 2011-08-10 Todd C. Miller * Add Danish sudoers translation from translationproject.org [fa9cd9758249] <1.8> * Add dedicated callback function for runas_default sudoers setting that only sets runas_pw if no runas user or group was specified by the user. [3fb4b18525de] <1.8> 2011-08-09 Todd C. Miller * Update Finish, Polish, Russian and Ukrainian translations from translationproject.org. [0fcd8f6aff0a] <1.8> * Makefile.in: Go back to using a callback for runas_default to keep runas_pw in sync. This is needed to make per-entry runas_default settings work with LDAP-based sudoers. Instead of declaring it a callback in def_data.in, sudo and testsudoers poke sudo_defs_table[] which is a bit naughty, but avoids requiring stub functions in visudo and the tests. [4e8e70832f06] <1.8> 2011-08-05 Todd C. Miller * plugins/sudoers/po/sudoers.pot, src/po/sudo.pot: Regen pot files [ca5c58c599a6] <1.8> * Makefile.in: Add check for out of date message catalogs when doing "make dist". [36414e5c762b] <1.8> 2011-08-02 Todd C. Miller * configure, configure.in: Make sure compiler supports static-libgcc before using it. [6c98e8809291] <1.8> 2011-08-01 Todd C. Miller * Link libsudo_noexec.la with LDLDFLAGS for -static-libgcc [a0a3a3fa6470] <1.8> 2011-07-30 Todd C. Miller * Add new Russian sudo translation from translationproject.org and rebuild the other translation files. [e953d7d1ca6d] <1.8> 2011-07-29 Todd C. Miller * Update Finish and Polish translations from translationproject.org [17e408d73c85] <1.8> * Go back to escaping the command args for "sudo -i" and "sudo -s" before calling the plugin. Otherwise, spaces in the command args are not treated properly. The sudoers plugin will unescape non- spaces to make matching easier. [f666191a4e80] <1.8> 2011-07-28 Todd C. Miller * Fix some potential problems found by the clang static analyzer, none serious. [c1ab4b940980] <1.8> * Updated Ukranian and Chinese (simplified) po files from translationproject.org [792a66672715] <1.8> 2011-07-27 Todd C. Miller * Updated Polish translation from translationproject.org [5f434cc04482] <1.8> * plugins/sudoers/po/sudoers.pot, src/po/sudo.pot: Rebuild pot files [639230dbd741] <1.8> * Don't try to audit failure if the runas user does not exist. We don't have the user's command at this point so there is nothing to audit. Add a NULL check in audit_success() and audit_failure() just to be on the safe side. [2bfb96a32b00] <1.8> * Add -g to CFLAG for PIE builds. [e4c94977ca4e] <1.8> 2011-07-25 Todd C. Miller * Remove fallback to per-group lookup when matching groups in sudoers. The sudo front-end will now use getgrouplist() to get the user's list of groups if getgroups() fails or returns zero groups so we always have a list of the user's groups. For systems with mbr_check_membership() which support more that NGROUPS_MAX groups (Mac OS X), skip the call to getgroups() and use getgrouplist() so we get all the groups. [168d6d4a386b] <1.8> 2011-07-22 Todd C. Miller * Fix setgroups() fallback code on EINVAL. [dd1310945ab3] <1.8> * Fix two PERM_INITIAL cases that were still using user_gids. [d497d0d47a23] <1.8> * Add Polish sudo message catalog [1a0aa3f9f179] <1.8> * user_group is no longer used, remove it [379185a76094] <1.8> 2011-07-21 Todd C. Miller * Add Polish translation from translationproject.org [2e7cdfe4ef41] <1.8> * Add a wrapper for setgroups() that trims off extra groups and retries if setgroups() fails. Also add some missing addrefs for PERM_USER and PERM_FULL_USER. [bacb4170a510] <1.8> * configure, configure.in: Instead of keeping separate groups and gids arrays, create struct group_info and use it to store both, along with a count for each. Cache group info on a per-user basis using getgrouplist() to get the groups. We no longer need special to special case the user or list user for user_in_group() and thus no longer need to reset the groups list when listing another user. [f1d8962821a0] <1.8> * Don't rely on NULL since we don't include a header for it. [ed46286f848b] <1.8> * Fix typo [a38b8fbb0e70] <1.8> * Do not shadow global sudo_mode with a local variable in set_cmnd() [8e462ebafea4] <1.8> 2011-07-17 Todd C. Miller * bash 2.x doesd not support the -l flag and exits with an error if it is specified so use --login instead. This causes an error with bash 1.x (which uses -login instead) but this version is hopefully less used than 2.x. [73020a67b9d5] <1.8> * Add Polish translation from translationproject.org [8cac0da9ffb1] <1.8> 2011-07-13 Todd C. Miller * Make error strings translatable. [d1ff594f27b5] <1.8> * Only run configure with --with-pam-login for RHEL 5 and above. [2f1a0ff5230e] <1.8> * Fix typo in summary [1e1d7dcae9ab] <1.8> 2011-07-11 Todd C. Miller * Add missing logwrap.c [abcd28c194d2] <1.8> * Split out log file word wrap code into its own file and add unit tests. Fixes an off-by one in the word wrap when the log line length matches loglinelen. [0ae1c7aa9ef1] <1.8> 2011-07-05 Todd C. Miller * For SuSE, only use /usr/lib64 as libexec if generating 64-bit binaries. [4448fa1c639f] <1.8> * Fix build error when --without-noexec configure option is used. [f6bfd748ae45] <1.8> * configure, configure.in: Disable noexec for AIX < 5. LDR_PRELOAD is only available in AIX 5.3 and above. [9d957ae1840d] <1.8> 2011-07-03 Todd C. Miller * NEWS, doc/UPGRADE: Document group lookup change and possible side effects. [fe4b2d2701b2] <1.8> 2011-07-01 Todd C. Miller * Resolve the list of gids passed in from the sudo frontend (the result of getgroups()) to names and store both the group names and ids in the sudo_user struct. When matching groups in the sudoers file, match based on the names in the groups list first and only do a gid-based match when we absolutely have to. By matching on the group name (as it is listed in sudoers) instead of id (which we would have to resolve) we save a lot of group lookups for sudoers files with a lot of groups in them. [c10d208bd7e5] <1.8> 2011-06-29 Todd C. Miller * NEWS: Update for 1.8.2rc5 [f6a3aa2edf7a] <1.8> 2011-06-26 Todd C. Miller * Workaround for "sudo -i command" and newer versions of bash which don't go into login mode when -c is specified unless -l is too. [381e74d35006] <1.8> 2011-06-23 Todd C. Miller * Rewrite logfile word wrapping code to be more straight-forward and actually wrap at the correct place. [8a7862d6a82f] <1.8> 2011-06-22 Todd C. Miller * NEWS: Fix typo [2456ad2ad3e3] <1.8> * NEWS: Mention use_pty bug fix [f4eab5193452] <1.8> * Set use_pty=true in command details when use_pty is set in sudoers. From Ludwig Nussel [abaafc5793d9] <1.8> 2011-06-20 Todd C. Miller * Sync Chinese (simplified) PO files from translationproject.org [a4cf84dd9ddf] <1.8> 2011-06-18 Todd C. Miller * Add Danish translation from translationproject.org and add missing Basque mo files. [672b88adcc34] <1.8> * Makefile.in, configure, configure.in: No longer need to specify LINGUAS in configure, "make install-nls" now just installs all the .mo files it finds. [c226a39ece48] <1.8> 2011-06-17 Todd C. Miller * Build CONTRIBUTORS from newly-added contributors.pod [b8871dd293ff] <1.8> * Rework the wording in the leading paragraph [d8b081dedeb3] <1.8> 2011-06-16 Todd C. Miller * Add a CONTRIBUTORS file with the names of folks who have contributed code or patches to sudo since I started maintaining it (plus the original authors). [8b064e8996af] <1.8> 2011-06-13 Todd C. Miller * Preserve SHELL variable for "sudo -s". Otherwise we can end up with a situation where the SHELL variable and the actual shell being run do not match. [8f5bb61a8b76] <1.8> 2011-06-10 Todd C. Miller * configure, configure.in: Only enable Solaris project support when setproject() is present in libproject. [bf370ff3c194] <1.8> * Explicitly set mode and owner of /etc/sudoers instead of relying on "cp -p" to work in the postinstall script. On AIX 6.1 at least the postinstall script runs before the final file permissions are set. [7a4a87405349] <1.8> * Refer the user to the "Command Environment" section in description of sudo's -i option. [1a063eaf9670] <1.8> * Fix typo [442c50370c44] <1.8> * If there is no old dependency for an object file, use the MANIFEST to find its source. [d95c77ad283f] <1.8> * Remove dependency for getgrouplist.lo as we don't ship that source file. [bbede77e6256] <1.8> * Do not declare yyparse() static as the actual function generated by yacc is extern. [8e615bd15a4c] <1.8> * Makefile.in: Remove locale files in "make uninstall" [9791be90d5ac] <1.8> 2011-06-06 Todd C. Miller * configure.in: Add Basque translation and sync Finish and Ukranian translations. [64af34789164] <1.8> * NEWS: Update PAM change to reflect latest checkin. [657cddf2077a] <1.8> * configure, configure.in: FreeBSD no longer needs the main sudo binary to link with -lpam now that plug-ins are loaded with RTLD_GLOBAL. [573a6f4b29af] <1.8> * Load plugins with RTLD_GLOBAL instead of RTLD_LOCAL. This fixes problems with pam modules not having access to symbols provided by libpam on some platforms. Affects FreeBSD and SLES 10 at least. [4ec864fdba46] <1.8> * Makefile.in: Move xgettext invocation out of update-po target into update-pot [421ac1a073ea] <1.8> 2011-06-04 Todd C. Miller * plugins/sudoers/po/sudoers.pot, src/po/sudo.pot: Regenerate .pot files for 1.8.2rc2 [d2a891e3d3dd] <1.8> * Makefile.in: Move nls targets to the top level Makefile so the paths in the pot file are saner [6c256cb77f78] <1.8> * NEWS: Update 1.8.2 news [17bd04278b04] <1.8> * Add compiled version of sudo Finish translation [ff9d20a02aa0] <1.8> * Update MANIFEST with .po and .mo files Rebuild sudoers fi and uk .mo files [60c4f3b3829c] <1.8> * configure, configure.in: Add Finish translation from translationproject.org [ade788a35521] <1.8> * The group named by exempt_group should not have a % prefix. [1f74c691c1e1] <1.8> * Fix typo; "Defaults group_plugin" not "Defaults sudo_plugin" [58d36c0e76f9] <1.8> * Fix compressed io log corruption in background mode by using _exit() instead of exit() to avoid flushing buffers twice. Improved background mode support. When not allocating a pty, the command is run in its own process group. This prevents write access to the tty. When running in a pty, stdin is not hooked up and we never read from /dev/tty, which results in similar behavior. [fe50d6a5c5b9] <1.8> 2011-05-31 Todd C. Miller * Clean up regress files Generate proper dependencies for regress objs in compat [264196584549] <1.8> * Add missing dependency for check_fill.o. [c41f4e6ff078] <1.8> 2011-05-30 Todd C. Miller * INSTALL, configure, configure.in: Add support for --enable-nls[=location] [0ea8e7bd1739] <1.8> 2011-05-28 Todd C. Miller * Include gettext.h [fe8bab6403c6] <1.8> * Quiet gcc warnings. [aa16d09710a7] <1.8> * configure, configure.in: Don't install .mo files if gettext was not found. [c6b233e829aa] <1.8> 2011-05-27 Todd C. Miller * Always allocate a pty when running a command in the background but call setsid() after forking to make sure we don't end up with a controlling tty. [77c6b2923714] <1.8> * Add missing space between command name and the first command line argument. [d0a36b9c0f38] <1.8> * Quiet a compiler warning on some platforms. [654e76cf0574] <1.8> * README file that directs people to translationproject.org [5545e9a5ae37] <1.8> * Sync translations with TP [b054ce577022] <1.8> * Makefile.in: Add 'sync-po' target to top-level Makefile to rsync the po files from translationproject.org. [87a5011b0410] <1.8> * install nls files from install target [a3feba9ef323] <1.8> * Makefile.in: Include .mo files in sudo binary packags. [bc3ee7e7fb44] <1.8> * configure, configure.in: Add simplified chinese translation [c22e6842c766] <1.8> 2011-05-26 Todd C. Miller * configure, configure.in: Add ukranian translation [0bb9e6437f0f] <1.8> * refer to siglist.c, not ./siglist.c since not all makes will treat foo and ./foo the same. [909051ff6061] <1.8> * Set def_preserve_groups before searching for the command when the -P flag is specified. [08e9378f50e4] <1.8> * Makefile.in: Add dependency for siglist.lo in compat. This is a generated file so "make depend" needs to depend on it. [e6c0daf36af0] <1.8> * More dependency fixes. [7fed03624689] <1.8> * Fix a few dependencies. [7cb86c721961] <1.8> * Place compiled mo files in the src dir, not the build dir. When installing compiled mo files, display a status message. [b87aa18a9968] <1.8> 2011-05-25 Todd C. Miller * Tivoli Directory Server requires that seconds be present in a timestamp, even though RFC 4517 states that they are optional. [47ebf110ea7a] <1.8> * Add missing bit of copyright [d05d28a91bc4] <1.8> * Mention cycle detection warnings [ee8231aa1aed] <1.8> * When checking aliases, also check the contents of the alias in case there are problems with an alias that is referenced inside another. Replace the self reference check with real alias cycle detection. [abcfe1bc95d8] <1.8> * Set errno to ELOOP in alias_find() if there is a cycle. Set errno to ENOENT in alias_find() and alias_remove() if the entry could not be found. [e73d169f4e9b] <1.8> * Increment alias_seqno before calls to alias_remove_recursive() to avoid false positives with the alias loop detection. Fixes spurious warnings about unused aliases when they are nested. [ac094820ef19] <1.8> * add mkdep.pl [3721e9654ba6] <1.8> * Add dependency on convenience libs to binaries [8a4db8226dfe] <1.8> * Makefile.in: mkdep.pl only works when run from the src dir [2480427a0680] <1.8> * Makefile.in: Auto-generate Makefile dependencies with a perl script. [ef5f56907d97] <1.8> 2011-05-23 Todd C. Miller * If the user specifies a runas group via sudo's -g option that matches the runas user's group in the passwd database and that group is not denied in the Runas_Spec, allow it. Thus, if user root's gid in /etc/passwd is 0, then "sudo -u root -g root id" is allow even if no groups are present in the Runas_Spec. [942e1e7c5090] <1.8> 2011-05-22 Todd C. Miller * NEWS: Mention what is new in 1.8.2 (for now) [d44b26eceee5] <1.8> * Add dependencies on gettext.h [32c61c6af852] <1.8> * Fix install-nls target with HP-UX sh when gettext is not present. [3441cece9638] <1.8> * doc/sudo.cat, doc/sudo.man.in, doc/sudo_plugin.cat, doc/sudo_plugin.man.in, doc/sudoers.cat, doc/sudoers.ldap.cat, doc/sudoers.ldap.man.in, doc/sudoers.man.in, doc/sudoreplay.cat, doc/sudoreplay.man.in, doc/visudo.cat, doc/visudo.man.in: Regen for sudo 1.8.2 [9ea124b542cc] <1.8> 2011-05-20 Todd C. Miller * plugins/sudoers/po/sudoers.pot, src/po/sudo.pot: regenerate .pot files for lbuf changes [a8a9cc62c3a5] <1.8> * configure, configure.in: Add missing "checking" message for gettext when using the cache. [4136bc346576] <1.8> * Add primitive format string support to the lbuf code to make translations simpler. [22fc74618d09] <1.8> * configure, configure.in, plugins/sudoers/po/sudoers.pot, src/po/sudo.pot: Bump version to 1.8.2 [999de1ac5b3e] <1.8> * Add message catalog template files for sudo and the sudoers module. [6afad75e7afa] <1.8> * configure.in: Add gettext.h convenience header. This is similar to but distinct from the one included with the gettext package. [5ae5a86e0d06] <1.8> * configure, configure.in: Add checks for nroff -c and -Tascii flags [580c21905280] <1.8> * configure, configure.in: Add check for HP bundled C Compiler (which cannot create shared libs) [34f616cbb0f3] <1.8> * Fix C format warnings. [f20a43a817f0] <1.8> * Add __printflike [76bf8a4bf075] <1.8> * Translate help / usage strings. [16c5b7902d4c] <1.8> * Set --msgid-bugs-address to the bugzilla url [3e3cfa7b4ceb] <1.8> * INSTALL, Makefile.in, README, configure, configure.in: Add scaffolding to update .po files and install .mo files. [a51e60b35e47] <1.8> * Minor warning/error cleanup [593144ac87ff] <1.8> * configure.in: Emulate ngettext for the non-nls case [7cdf82de4dee] <1.8> * Do not mark untranslatable strings for translation [088271ed02d0] <1.8> * Use ROOT_UID not 0. [f901fa2fdaf2] <1.8> * Minor warning/error message cleanup [b99c7ef46236] <1.8> * cannot -> "unable to" in warning/error messages can't -> "unable to" in warning/error messages [5119140fabc7] <1.8> * configure, configure.in: FreeBSD needs the main sudo executable to link with -lpam when loading dynaic pam modules for some reason. [738b6778a505] <1.8> * We don't want to translate debugging messages. [357a575c2dfd] <1.8> * configure, configure.in: Add calls to bindtextdomain() and textdomain() Currently there are two domains, one for the sudo front-end and one for the sudoers plugin and its associated utilities. [907f39439d80] <1.8> * configure, configure.in: Fix caching of libc gettext check. [e229c21f412f] <1.8> * Mark defaults descriptions for translation [65e03d1f8203] <1.8> * NEWS: Update for sudo 1.8.1p2 [89c31f2aa11e] <1.8> * Quiet compiler warning when SELinux is enabled. [51b1d7c8aa86] <1.8> * dd missing includes of libintl.h. [25662143d36d] <1.8> * Fix gettext marker. [7618856ba5de] <1.8> * Include libint.h where needed. [cc256b297b9d] <1.8> * Prepare sudoers module messages for translation. [1b7f0bbaa55f] <1.8> * Only check gid of sudoers file if it is group-readable. [f3cae943f35a] <1.8> * For AIX, keep calling authenticate() until reenter reaches 0. [e412676bac73] <1.8> * configure, configure.in: Cache the status of the initial gettext() check. [c32281768c0f] <1.8> * INSTALL, configure, configure.in: Add --disable-nls flag and improve checks for gettext. [b39674c1e538] <1.8> * configure, configure.in: When building with gcc on HP-UX, use -march=1.1 to produce portable binaries on a pa-risc2 host. Previously, the +Dportable option was used for the HP-UX C compiler but gcc always produced native binaries. [41351c23ad41] <1.8> * Prepare sudo front end messages for translation. [7807d6f74dac] <1.8> * configure, configure.in: Add initial scaffolding to support localization via gettext() [cdbbff7e6376] <1.8> 2011-05-19 Todd C. Miller * doc/license.pod: update copyright year [d681661f03cc] <1.8> * INSTALL, README: No need to include version number at the top of these files. [7e11f673f773] <1.8> * README: This is sudo 1.8.1 not 1.8.0 [4d674f230d8a] <1.8> 2011-05-04 Todd C. Miller * Don't let the fnmatch/glob macros expand the function prototype. [d449e9a8f447] <1.8> 2011-05-03 Todd C. Miller * Resolve namespace collisions on HP-UX ia64 and possibly others by adding a rpl_ prefix to our fnmatch and glob replacements and #defining rpl_foo to foo in the header files. [d23889375b21] <1.8> 2011-04-29 Todd C. Miller * Split ALL, ROLE and TYPE into their own actions. Since you can only have #ifdefs inside of braces, ROLE and TYPE use a naughty goto in the non-SELinux case. This is safe because the actions are in one big switch() statement. [0bd9b7e37ab1] <1.8> * Fix regexp for matching a CIDR-style IPv4 netmask. From Marc Espie. [8dec97b359e0] <1.8> * askpass moved from sudoers to sudo.conf in sudo 1.8.0 [1001d87d82ed] <1.8> * Remove obsolete warning about runas_default and ordering. Move syslog facility and priority lists into the section where the relevant options are described. [1286b9624021] <1.8> 2011-04-26 Todd C. Miller * Fix SIA support; we no longer have access to the real argc and argv so allocate space for a fake one and use the argv passed to the plugin with "sudo" for argv[0]. [7c11eeffb91c] <1.8> * Remove useless realloc when trying to get the buffer size right. [58128e7f4e28] <1.8> * Be explicit when setting euid to 0 before call to setreuid(0, 0) [95769a564ab8] <1.8> 2011-04-18 Todd C. Miller * NEWS: sudo 1.8.1p1 updates [de3d688b5bb1] <1.8> * configure, configure.in: Need to do checks for krb5_verify_user, krb5_init_secure_context and krb5_get_init_creds_opt_alloc regardless of whether or notkrb5-config is present. [456c4a9cd5d6] <1.8> 2011-04-15 Todd C. Miller * Work around weird AIX saved uid semantics on setuid() and setreuid(). On AIX, setuid() will only set the saved uid if the euid is already 0. [5d0a69e9d181] <1.8> 2011-04-14 Todd C. Miller * update copyright year [fa8da6d55783] <1.8> * Treat a missing includedir like an empty one and do not return an error. [5fd9fe004728] <1.8> 2011-04-12 Todd C. Miller * Fix ARCH setting in cross-compile Solaris packages. [8ce40940f6c9] <1.8> * Fix aix version setting. [02a9e25d46ba] <1.8> * Remove extraneous parens in LDAP filter when sudoers_search_filter is enabled that causes a search error. From Matthew Thomas. [b67be9b51ec6] <1.8> 2011-04-11 Todd C. Miller * Correct sizeof() to fix test failure. [a11b89fd13f9] <1.8> * "install" target should depend on "install-dirs". Fixes "make -j" problem and closes bz #487. From Chris Coleman. [06ab0558f848] <1.8> 2011-04-09 Todd C. Miller * .hgtags: Added tag SUDO_1_8_1 for changeset 0ed6281995f0 [543d41a163e9] <1.8> * doc/sudo.cat, doc/sudo.man.in, doc/sudo_plugin.cat, doc/sudo_plugin.man.in, doc/sudoers.cat, doc/sudoers.ldap.cat, doc/sudoers.ldap.man.in, doc/sudoers.man.in, doc/sudoreplay.cat, doc/sudoreplay.man.in, doc/visudo.cat, doc/visudo.man.in: Regen man pages for 1.8.1 [0ed6281995f0] [SUDO_1_8_1] <1.8> 2011-04-07 Todd C. Miller * Add HAVE_RFC1938_SKEYCHALLENGE [c0d7eb39799d] <1.8> 2011-04-06 Todd C. Miller * Mention plugin loading and libgcc changes [b74929cba37c] <1.8> * Load plugins after parsing arguments and potentially printing the version. That way, an error loading or initializing a plugin doesn't break "sudo -h" or "sudo -V". [c1ecb5979cf0] <1.8> * Makefile.in: When using a sub-shell to invoke the sub-make, exec make instead of running it inside the shell to avoid an extra process. [9439f016c993] <1.8> * Stop testing unspecified behavior in fnmatch Make glob test more portable [87a91d76fbff] <1.8> * No need to add current dir to include path and having it breaks the test programs that expect to get the system glob.h and fnmatch.h [3ae7f9e7b710] <1.8> * configure, configure.in: Fix and document --with-plugindir; partially from Diego Elio Petteno [0220a0c2606f] <1.8> * Fix fnmatch and glob tests to not use hard-coded flag values in the input file. Link test programs with libreplace so we get our replacement verions as needed. [66bab80241e0] <1.8> * Makefile.in: If make in a subdir fails, fail the target in the upper level Makefile too. Adapted from a patch from Diego Elio Petteno [bc35b7813507] <1.8> * configure, configure.in: Add check for NetBSD-style 4-argument skeychallenge() as Gentoo also has this. Adapted from a patch from Diego Elio Petteno [bb6228f484b9] <1.8> * Make SUDOERS_LDFLAGS reference $(LDFLAGS) instead of using @LDFLAGS@ directly. [47e6d5fadc6d] <1.8> * configure, configure.in: Fix warnings when -without-skey, --without-opie, --without-kerb4, --without-kerb5 or --without-SecurID were specified. [1b75035dd129] <1.8> * Add plugins/sudoers/sudoers_version.h [1d470c6033ca] <1.8> * configure, configure.in: Back out the --with-libpath addition to SUDOERS_LDFLAGS since that now include LDFLAGS in the sudoers Makefile.in. Add missing settng of @LDFLAGS@ in plugin Makefile.in files. [dd237f43aa12] <1.8> 2011-04-05 Todd C. Miller * Mention %#gid support in User_List and Runas_List [37e259b9181b] <1.8> * Keep track of sudoers grammar version and report it in the -V output. [0e0b891dd8a4] <1.8> * Add multiple inclusion guard [ec6884f51ea8] <1.8> * configure, configure.in: The --with-libpath option now adds to SUDOERS_LDFLAGS as well as LDFLAGS. Remove old -static hack for HP-UX < 9. Add LTLDFLAGS and set it to -Wc,-static-libgcc if not using GNU ld so we don't have a dependency on the shared libgcc in sudoers.so. [28d03f3eb0d2] <1.8> * Fix typo; from Petr Uzel [d19b9bd92bd3] <1.8> 2011-04-01 Todd C. Miller * In dump-only mode, use "root" as the default username instead of "nobody" as the latter may not be available on all systems. [b304111616dd] <1.8> 2011-03-31 Todd C. Miller * Remove NewArgv/NewArgc, they are no longer needed. [c0a36a42a68c] <1.8> * Fix setting of user_args [529e79ea95d1] <1.8> * Add '!' token to lex tracing [aef295d428e7] <1.8> * Use group bin in test, not wheel as most systems have the bin group but the same is no longer true of wheel. [350347f09c1a] <1.8> * Avoid using pre or post increment in a parameter to a ctype(3) function as it might be a macro that causes the increment to happen more than once. [8a94ebdd53b8] <1.8> 2011-03-30 Todd C. Miller * Strip off the beta or release candidate version when building AIX packages. [00ad950764e2] <1.8> * configure, configure.in: We need to include OSDEFS in CFLAGS when doing the utmp/utmpx structure checks for glibc which only has __e_termination visible when _GNU_SOURCE is *not* defined. [1d58420a4a4a] <1.8> * getuserattr(user, ...) will fall back to the "default" entry automatically, there's no need to check "default" manually. [cefffa82967d] <1.8> * Document parser changes. [5038238f60eb] <1.8> 2011-03-29 Todd C. Miller * Makefile.in: If there is an existing sudoers file, only install if it passes a syntax check. [b1e4c9c56fe0] <1.8> * Add runasgroup support to testsudoers [30838590e9de] <1.8> * For "make check", keep going even if a test fails. [d3a72f67227e] <1.8> * More useful exit codes: * 0 - parsed OK and command matched. * 1 - parse error * 2 - command not matched * 3 - command denied [59301e0769cd] <1.8> * Document %#gid, and %:#nonunix_gid syntax. [39ee15af58e9] <1.8> * Add support to user_in_group() for treating group names that begin with a '#' as gids. [0eb19980cf5f] <1.8> * configure, configure.in: Add explicit check for struct utmpx.ut_exit.e_termination and struct utmpx.ut_exit.__e_termination. HP-UX uses the latter. Only update ut_exit if we detect one or the other. [ab5b665fc04b] <1.8> 2011-03-28 Todd C. Miller * Add back missing #include of config.h [9c82bec81018] <1.8> * Avoid a NULL deref on unrecognized escapes. Collapse %% -> % like strftime() does. [1ae630470f8a] <1.8> * Quote first argument to AC_DEFUN(); from Elan Ruusamae [c467e9e3b399] <1.8> 2011-03-27 Todd C. Miller * add new sudoers tests [05f2a0924acc] <1.8> * Add test for a newline in the middle of a string when no line continuation character is used. [24b79be5822b] <1.8> * Use bitwise AND instead of modulus to check for length being odd. A newline in the middle of a string is an error unless a line continuation character is used. [65c468599688] <1.8> * Move lexer globals initialization into init_lexer. [07a1171a1853] <1.8> * Fix a potential crash when a non-regular file is present in an includedir. Fixes bz #452 [5057cb9516e4] <1.8> * On some Linux systems, "uname -p" contains detailed processor info so check "uname -m" first and then "uname -p" if needed. Recognize PLD Linux. [56226c84a060] <1.8> 2011-03-25 Todd C. Miller * Don't need all sudoers.h here. [43b6ae5999c5] <1.8> * Print sudo version early, in case policy plugin init fails. [620f2d0ec4b1] <1.8> 2011-03-24 Todd C. Miller * Update to match change in input. [69540f84721d] <1.8> * Make an empty group or netgroup a syntax error. [4b85bddc494e] <1.8> * An empty group or netgroup should be a syntax error. [6ec796972eff] <1.8> * Check that uids work in per-user and per-runas Defaults Check that uids and gids work in a Command_Spec [68cf62353420] <1.8> * Test empty string in User_Alias and Command_Spec [017d487c31be] <1.8> * Allow a group ID in the User_Spec. [37e0bf69c8d8] <1.8> * Return an error for the empty string when a word is expected. Allow an ID for per-user or per-runas Defaults. [4c9020779582] <1.8> 2011-03-23 Todd C. Miller * Fix printing "User_Alias FOO = ALL" [97c9fd7caeb7] <1.8> 2011-03-22 Todd C. Miller * Better error message about invalid -C argument [2301e7a3835b] <1.8> * fix typo [c5acde62a309] <1.8> * Fix placement of equal size ('=') in user specification summary. [4d0ffef77ae4] <1.8> 2011-03-21 Todd C. Miller * update to match sudoers regress [0efb8dc9092a] <1.8> * Restore ability to define TRACELEXER and have trace output go to stderr. [441c8b372217] <1.8> * Restore old behavior of setting sawspace = TRUE for command line args when a line continuation character is hit to avoid causing problems for existing sudoers files. [963ded6ce070] <1.8> * Add test for line continuation and aliases [5703d11a3c46] <1.8> * Make test output line up nicely for parse vs. toke [15321ce2d7d9] <1.8> * plugins/sudoers/regress/testsudoers/test1.ok, plugins/sudoers/regress/testsudoers/test2.out, plugins/sudoers/regress/testsudoers/test2.sh, plugins/sudoers/regress/testsudoers/test3.ok, plugins/sudoers/regress/testsudoers/test3.sh, plugins/sudoers/regress/visudo/test1.ok, plugins/sudoers/regress/visudo/test1.sh: Move parser tests to sudoers directory and test the tokenizer output too. [111c1ccda334] <1.8> * If we match a rule anchored to the beginning of a line after parsing a line continuation character, return an ERROR token. It would be nicer to use REJECT instead but that substantially slows down the lexer. [67e54b14aa9d] <1.8> * Move LEXTRACE macro to toke.h so we can use it in yyerror(). [e6e04037deed] <1.8> * Make lex tracing settable at run-time in testsudoers via the -t flag. Trace output goes to stderr. Will be used by regress tests to check lexer. [a973f43cc0c2] <1.8> * Allow whitespace after the modifier in a Defaults entry. E.g. "Defaults: username set_home" [bf876c9fc5bb] <1.8> 2011-03-18 Todd C. Miller * Don't set CC when cross-compiling. [d3c33dcb02f2] <1.8> * Credit Matthew Thomas for the sudoers_search_filter changes. [2209b80664af] <1.8> * Add the .sym files to the MANIFEST [bb452b28a009] <1.8> * Update for sudo 1.8.1 beta [700d42d80e00] <1.8> * user_shell -> run_shell to avoid confusion with the user's SHELL variable. [451b96d5f97e] <1.8> * Save the controlling tty process group before suspending in pty mode. Previously, we assumed that the child pgrp == child pid (which is usually, but not always, the case). [b0841d861191] <1.8> * Add support for sudoers_search_filter setting in ldap.conf. This can be used to restrict the set of records returned by the LDAP query. [70c5f496e2b3] <1.8> 2011-03-17 Todd C. Miller * configure, configure.in: Remove the hack to disable -g in CFLAGS unless --with-devel [9459839f50ba] <1.8> * The '@' character does not normally need to be quoted. [e66c4c64e514] <1.8> * We normaly transition from GOTDEFS to STARTDEFS on whitespace, but if that whitespace is followed by a comma, we want to treat it as part of a list and not transition. [52ae2df9959d] <1.8> * Add check for whitespace when a User_List is used for a per-user Defaults entry. [44a4db95be86] <1.8> * Expand quoted name checks to cover recent fixes. [bd494b5c2bed] <1.8> * Fix parsing of double-quoted names in Defaults and Aliases which was broken in 601d97ea8792. [dfdd58c3eb3b] <1.8> * toke_util.c lives in $(srcdir) not $(devdir) [94f8f024782e] <1.8> 2011-03-16 Todd C. Miller * configure, configure.in: Update version to 1.8.1 [531a7d520f18] <1.8> * Document major changes in 1.8.1 and add upgrade notes. [116821646140] <1.8> * Be careful not to deref user_stat if it is NULL. This cannot currently happen in sudo but might in other programs using the parser. [d72a9c7151c4] <1.8> * configure will not add -O2 to CFLAGS if it is already defined to add -O2 to the CFLAGS we pass in when PIE is being used. [2c7fe82be93d] <1.8> * Warn about the dangers of log_input and mention iolog_file and iolog_dir in the log_input and log_output descriptions. [edc6aa59aa45] <1.8> * sync with git version [b121cf739c77] <1.8> * It seems that h comes after i [99ad15015f05] <1.8> * Move log_input and log_output to their proper, sorted, location. Document set_utmp and utmp_runas. [216ce8b0ae1a] <1.8> * Save the controlling tty process group before suspending so we can restore it when we resume. Fixes job control problems on Linux caused by the previous attemp to fix resuming a shell when I/O logging not enabled. [dfe038f733be] <1.8> * Fix printing of the remainder after a newline. Fixes "sudo -l" output corruption that could occur in some cases. [ab2f0a629e0d] <1.8> * Add support for ut_exit [7039ec6a73fa] <1.8> * Add support for controlling whether utmp is updated and which user is listed in the entry. [1b008ce71eab] <1.8> * Fix typo; tupple vs. tuple [67bb5c67ae3d] <1.8> * For legacy utmp, strip the /dev/ prefix before trying to determine slot since the ttys file does not include the /dev/ prefix. [8f597114381d] <1.8> * Add check for _PATH_UTMP [fe7e2456f017] <1.8> * Adapt check_iolog_path to sessid changes [3016201869b6] <1.8> * Redo utmp handling. If no getutent()/getutxent() is available, assume a ttyslot-based utmp. If getttyent() is available, use that directly instead of ttyslot() so we don't have to do the stdin dup2 dance. [817490c7c20e] <1.8> * Move utmp handling into utmp.c [e4729d9259e9] <1.8> * Update copyright years. [1065afc00233] <1.8> 2011-03-11 Todd C. Miller * Add "user_shell" boolean as a way to indicate to the plugin that the -s flag was given. [6e8bc49b7ea7] <1.8> * Move sessid out of sudo_user. [00d67d5ba894] <1.8> * Log the TSID even if it is not a simple session ID. [490cf0adae29] <1.8> * Document noexec in sample.sudo.conf and add back noexec_file section in sudoers with a note that it is deprecated. [c7a2d8d0c563] <1.8> * Fix running commands as non-root on systems where setreuid() changes the saved uid based on the effective uid we are changing to. [f3b27db56ba6] <1.8> 2011-03-10 Todd C. Miller * Move noexec path into sudo.conf now that sudo itself handles noexec. Currently can be configured in sudoers too but is now undocumented and will be removed in a future release. [9c5f64709994] <1.8> * Document "Path noexec ..." in sudo.conf. No longer document noexec_file in sudoers, it will be removed in a future release. [959fa6b5217b] <1.8> * Move noexec handling to sudo front-end where it is documented as being. [ef6cd4a40c61] <1.8> * Add support for disabling exec via solaris privileges. Includes preparation for moving noexec support out of sudoers and into front end as documented. [d9c05ba9a24f] <1.8> * Only export the symbols corresponding to the plugin structs. [cb07af1d9b39] <1.8> * Install plugins manually instead of using libtool. This works around a problem on AIX where libtool will install a .a file containing the .so file instead of the .so file itself. [1ccf5af58c05] <1.8> * Makefile.in: Move check into its own rule since some versions of make will run both targets as the default rule. [7159f37eb552] <1.8> * Update to libtool 2.2.10 [9e49773b32b7] <1.8> * In handle_signals(), restart the read() on EINTR to make sure we keep up with the signal pipe. Don't return -1 on EAGAIN, it just means we have emptied the pipe. [dc2926097b2d] <1.8> * Reorder functions to quiet a compiler warning. [5201367e5db4] <1.8> * Use the Sun Studio C compiler on Solaris if possible [b8d43b423fb9] <1.8> 2011-03-08 Todd C. Miller * Fix default setting of osversion variable. [e12905851be5] <1.8> * Make two login_class entris consistent. [0671d7b204be] <1.8> * Add support for adding a utmp entry when allocating a new pty. Requires the BSD login(3) or SYSV/POSIX getutent()/getutxent(). Currently only creates a new entry if the existing tty has a utmp entry. [40ff30099e79] <1.8> * Avoid pulling in headers we don't need on Linux For getutx?id(), call setutx?ent() first and always call endutx?ent(). [b86f7a13aae9] <1.8> * Add some more libs to SUDOERS_LIBS instead of relying on them to be pulled in by SUDO_LIBS. [bcbd16ec56c6] <1.8> * Fix return value of "sudo -l command" when command is not allowed, broken in [c7097ea22111]. The default return value is now TRUE and a bad: label is used when permission is denied. Also fixed missing permissions restoration on certain errors. On error()/errorx(), the password and group files are now closed before returning. [757c941a47b2] <1.8> 2011-03-07 Todd C. Miller * Fix passing of login class back to sudo front end. [5e649de6b7f5] <1.8> * Add --osversion flag to specify OS instead of running "pp --probeonly" [8a03943ac5e8] <1.8> * Fix expr usage w/ GNU expr [bdecfa1f54fc] <1.8> 2011-03-06 Todd C. Miller * Fix exit value for validate and list mode. [6f8b20199935] <1.8> * Fix non-interactive mode with sudoers plugin. [cf5aca4fcbcf] <1.8> 2011-03-05 Todd C. Miller * sudoreplay can now find IDs other than %{seq} and display the session. [60396b417633] <1.8> * Add support for replaying sessions when iolog_file is set to something other than %{seq}. [1cd2baa74d56] <1.8> 2011-03-04 Todd C. Miller * If we are killed by a signal, display the name of the signal that got us. [1b38c4d42282] <1.8> * Move libs used for authentication from SUDO_LIBS to SUDOERS_LIBS where they belong. [78e97a921104] <1.8> * Fix bug in skey/opie check that could cause a shell warning. [f20229a04f30] <1.8> * No longer need sudo_getepw() stubs. [795631ac7db0] <1.8> 2011-03-03 Todd C. Miller * Fix exit value of "sudo -l command" in sudoers module. [4a05d6019b3d] <1.8> 2011-03-02 Todd C. Miller * Use fgets() not fgetln() for portability. [1f2050745096] <1.8> * Don't use the beta or release candidate version as the rpm release. [a5b049477646] <1.8> 2011-02-25 Todd C. Miller * Makefile.in: Adjust ChangeLog rule now that 1.8 is branched [a994ac361e44] <1.8> * .hgtags: Added tag SUDO_1_8_0 for changeset f6530d56f6ae [99a2b3801419] <1.8> 2011-02-25 Todd C. Miller * configure, configure.in: version 1.8.0 [f6530d56f6ae] [SUDO_1_8_0] * NEWS: update sudo 1.8 section [f2ee2cf95d18] 2011-02-23 Todd C. Miller * plugins/sudoers/regress/testsudoers/test2.sh: fix test description [cd5730fa9f09] * plugins/sudoers/regress/testsudoers/test2.out, plugins/sudoers/regress/testsudoers/test2.sh, plugins/sudoers/regress/visudo/test2.out, plugins/sudoers/regress/visudo/test2.sh: convert test2 to use testsudoers [b5ec3f0b69f1] * include/sudo_plugin.h, src/sudo_plugin_int.h: Move struct generic_plugin to sudo_plugin_int.h [6f7bc629329c] * plugins/sudoers/gram.c, plugins/sudoers/gram.y, plugins/sudoers/parse.c, plugins/sudoers/parse.h, plugins/sudoers/set_perms.c, plugins/sudoers/sudoers.c, plugins/sudoers/sudoers.h: Allow sudoers file name, mode, uid and gid to be specified in the settings list. The sudo front end does not currently set these but may in the future. [22f38a0fda2a] 2011-02-21 Todd C. Miller * configure, configure.in, doc/sudo.cat, doc/sudo.man.in, doc/sudo_plugin.cat, doc/sudo_plugin.man.in, doc/sudoers.cat, doc/sudoers.ldap.cat, doc/sudoers.ldap.man.in, doc/sudoers.man.in, doc/sudoreplay.cat, doc/sudoreplay.man.in, doc/visudo.cat, doc/visudo.man.in: 1.8.0rc1 [5d4588b9c057] * doc/sudo.pod, doc/sudoreplay.pod, doc/visudo.pod, plugins/sudoers/sudoreplay.c, plugins/sudoers/visudo.c, src/parse_args.c, src/sudo.h: add help text to sudo, visudo and sudoreplay for the -h option [52e7378d8476] 2011-02-19 Todd C. Miller * compat/snprintf.c: avoid using "howmany" for a parameter name since it is a select- related macro [a14d565401a1] * doc/sudoers.pod: mention group_plugin when describing nonunix_group [e0d1d0034b17] * doc/sudo_plugin.pod: Add missing period at end of sentence [6744d7e9056d] * Makefile.in, doc/Makefile.in, include/Makefile.in, plugins/sample/Makefile.in, plugins/sample_group/Makefile.in, plugins/sudoers/Makefile.in, src/Makefile.in: add localstatedir; closes bug 471 [7aefcab85088] * config.h.in, configure, configure.in, plugins/sudoers/sudoreplay.c, src/exec.c, src/exec_pty.c: The howmany macro lives in sys/sysmacros.h on SVR5 systems Closes Bug 470 [927ed6740f32] * configure.in: add missing AH_TEMPLATE for ENV_RESET [16300010c986] * src/exec.c: SVR5 systems return non-zero for success on socketpair(), check for -1 instead. Closes Bug 469 [4d276494bf8e] 2011-02-16 Todd C. Miller * configure, configure.in: 1.8.0b5 [d611cd5d73d3] * doc/sudo.cat, doc/sudo.man.in, doc/sudo_plugin.cat, doc/sudo_plugin.man.in, doc/sudoers.cat, doc/sudoers.ldap.cat, doc/sudoers.ldap.man.in, doc/sudoers.man.in, doc/sudoreplay.cat, doc/sudoreplay.man.in, doc/visudo.cat, doc/visudo.man.in: regen [85e96eeaed82] * doc/sudo.pod: Document that a sudo.conf file with no Pligin lines uses the default sudoers plugins. [88bd52da977f] * src/load_plugins.c: If sudo.conf contains no Plugin lines, use the default sudoers policy and I/O plugins. [fd8f4cb811ab] 2011-02-14 Todd C. Miller * plugins/sudoers/sudo_nss.c: Avoid printing empty "Runas and Command-specific defaults for user" line. [2dd330fe4f8b] * common/lbuf.c: Truncate the buffer at buf.len before printing in the non-wordwrap case. [901e9833f80d] * common/lbuf.c: Remove extra newline when the tty width is very small or unavailable [245c05506c0e] 2011-02-11 Todd C. Miller * plugins/sudoers/alias.c: Remove unneeded variable. [2c086d30b796] 2011-02-09 Todd C. Miller * configure, configure.in: Prefer getutxid over getutid [3f3322e9c93e] * plugins/sudoers/boottime.c: Include utmp.h / utmpx.h before missing.h as apparently including it afterwards causes a compilation problem on GNU Hurd. [a528029ae962] 2011-02-07 Todd C. Miller * plugins/sudoers/sudoreplay.c, plugins/sudoers/toke_util.c: #include "foo.h", not for local includes. [f65ec693998e] * src/parse_args.c: remove bogus XXX [9136c17d53ce] * compat/mksiglist.c: Fix typo [1a3bb7b455c9] * compat/glob.c, plugins/sudoers/ldap.c, plugins/sudoers/logging.c, plugins/sudoers/match.c: return foo not return(foo) [5c9e0647359a] 2011-02-06 Todd C. Miller * src/exec.c: Remove duplicate FD_SET of signal_pipe[0] [3096527d2215] 2011-02-05 Todd C. Miller * compat/mksiglist.c: Use "missing.h" not in generated code. [d8e09cffbe09] 2011-02-04 Todd C. Miller * aclocal.m4, configure: fix --with-iologdir=no [a89699cb5f5f] * aclocal.m4, configure: fix typo that broke --with-iologdir [91b54eb22403] 2011-02-03 Todd C. Miller * configure, configure.in, doc/sudo.cat, doc/sudo.man.in, doc/sudo_plugin.cat, doc/sudo_plugin.man.in, doc/sudoers.cat, doc/sudoers.ldap.cat, doc/sudoers.ldap.man.in, doc/sudoers.man.in, doc/sudoreplay.cat, doc/sudoreplay.man.in, doc/visudo.cat, doc/visudo.man.in: Bump version to 1.8.0b4 [e2b7f2cdc02e] * NEWS: sync [decf5a0a8a33] * doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.pod: Attempt to clarify how users and groups interact in Runas_Specs [e6fb3a2dbd77] * plugins/sudoers/regress/visudo/test2.out, plugins/sudoers/regress/visudo/test2.sh: Add test for quoted group that contains escaped double quotes [44596c48c629] * src/exec.c, src/exec_pty.c: Pass SIGUSR1/SIGUSR2 through to the child. [c3108a827b01] * src/exec_pty.c, src/sudo_exec.h: Use special values SIGCONT_FG and SIGCONT_BG instead of SIGUSR1 and SIGUSR2 to indicate whether the child should be continued in the foreground or background. [35ca47cc6785] * src/exec.c: Use pid_t not int and check the return value of kill() [36ae7d37d7f9] 2011-02-02 Todd C. Miller * src/exec_pty.c: Remove obsolete comment [baebef4919f6] * src/exec.c: In non-pty mode before continuing the child, make it the foreground pgrp if possible. Fixes resuming a shell. [fef5b1d02ddb] * src/exec_pty.c: If we get a signal other than SIGCHLD in the monitor, pass it directly to the child. [b3ecb28163a0] * src/exec.c, src/exec_pty.c, src/sudo.h: Save signal state before changing handlers and restore before we execute the command. [faf7475dc4bf] 2011-02-01 Todd C. Miller * plugins/sudoers/iolog.c: Use a char array to map a number to a base36 digit. [257576c51f8b] * doc/sudoers.ldap.cat, doc/sudoers.ldap.man.in, doc/sudoers.ldap.pod: Be clear about what versions of sudo support new LDAP attributes. Fix up some formatting of attribute names. Minor other tweaks. [39f65df71f65] 2011-01-31 Todd C. Miller * plugins/sudoers/toke.c, plugins/sudoers/toke.l: match quoted strings the same way whether in a Defaults line or as a user/group/netgroup name. Fixes escaped double quotes in quoted user/group/netgroup names. [601d97ea8792] * plugins/sudoers/Makefile.in: 'make check' depends on visudo and testsudoers [127c5a24df8f] * plugins/sudoers/sudoers2ldif: Add sudoOrder attribute to each entry Parse LOG_{INPUT,OUTPUT} tags [9029163a58c3] 2011-01-30 Todd C. Miller * doc/UPGRADE: Mention LDAP attribute compatibility status. [2c3595aaec63] 2011-01-28 Todd C. Miller * README.LDAP: Mention phpQLAdmin [9304c9064fbe] * INSTALL, NEWS, config.h.in, configure, configure.in, doc/sudoers.man.in, doc/sudoers.pod, plugins/sudoers/defaults.c: Add --disable-env-reset configure option. [8a753aa13a46] * doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.pod: Document that sudoers_locale also affects logging and email. [998d6ac11277] * NEWS, config.h.in, configure, configure.in, plugins/sudoers/logging.c: Do logging and email sending in the locale specified by the "sudoers_locale" setting ("C" by default). Email send by sudo includes MIME headers when the sudoers locale is not "C". [cb7e55408400] 2011-01-27 Todd C. Miller * plugins/sudoers/check.c: Fix indentation [65ae7e92b9e4] 2011-01-25 Todd C. Miller * NEWS, src/parse_args.c, src/sudo.c: Perform command escaping for "sudo -s" and "sudo -i" after validating sudoers so the sudoers entries don't need to have all the backslashes. [4e168c103f4b] 2011-01-24 Todd C. Miller * plugins/sudoers/logging.c: Prepend "list " to the command logged when "sudo -l command" is used to make it clear that the command was listed, not run. [f392a6056cd6] * plugins/sudoers/parse.c: cosmetic change [7c0951dbc2dd] * common/aix.c, common/alloc.c, common/fileops.c, common/fmt_string.c, common/list.c, common/term.c, compat/fnmatch.c, compat/getcwd.c, compat/glob.c, compat/isblank.c, compat/memrchr.c, compat/mktemp.c, compat/nanosleep.c, compat/regress/glob/globtest.c, compat/snprintf.c, compat/strlcat.c, compat/strlcpy.c, compat/strsignal.c, compat/utimes.c, plugins/sample/sample_plugin.c, plugins/sample_group/getgrent.c, plugins/sample_group/plugin_test.c, plugins/sudoers/alias.c, plugins/sudoers/auth/afs.c, plugins/sudoers/auth/aix_auth.c, plugins/sudoers/auth/bsdauth.c, plugins/sudoers/auth/dce.c, plugins/sudoers/auth/fwtk.c, plugins/sudoers/auth/kerb4.c, plugins/sudoers/auth/kerb5.c, plugins/sudoers/auth/pam.c, plugins/sudoers/auth/passwd.c, plugins/sudoers/auth/rfc1938.c, plugins/sudoers/auth/secureware.c, plugins/sudoers/auth/securid.c, plugins/sudoers/auth/securid5.c, plugins/sudoers/auth/sia.c, plugins/sudoers/bsm_audit.c, plugins/sudoers/check.c, plugins/sudoers/defaults.c, plugins/sudoers/find_path.c, plugins/sudoers/goodpath.c, plugins/sudoers/gram.c, plugins/sudoers/gram.y, plugins/sudoers/iolog.c, plugins/sudoers/ldap.c, plugins/sudoers/match.c, plugins/sudoers/mon_systrace.c, plugins/sudoers/parse.c, plugins/sudoers/pwutil.c, plugins/sudoers/redblack.c, plugins/sudoers/set_perms.c, plugins/sudoers/sudo_nss.c, plugins/sudoers/sudoers.c, plugins/sudoers/sudoreplay.c, plugins/sudoers/testsudoers.c, plugins/sudoers/timestr.c, plugins/sudoers/toke.c, plugins/sudoers/toke.l, plugins/sudoers/toke_util.c, plugins/sudoers/tsgetgrpw.c, plugins/sudoers/visudo.c, src/exec_pty.c, src/get_pty.c, src/load_plugins.c, src/parse_args.c, src/sudo_noexec.c, src/tgetpass.c: standardize on "return foo;" rather than "return(foo);" or "return (foo);" [32d76c5aaf8c] * plugins/sudoers/sudoers.c: Do not reject sudoers file just because it is root-writable. [0febc579185b] 2011-01-21 Todd C. Miller * NEWS: sync [1ab03f8278ff] * plugins/sudoers/sudo_nss.c: For "sudo -U user -l" if user is not authorized on the host, say so. [289afe6dd15c] * plugins/sudoers/ldap.c: In sudo_ldap_lookup(), always do the initial sudoers check as the invoking user. If we are listing another user's privs we will do a separate lookup using list_pw later. [e52bc15de76d] 2011-01-20 Todd C. Miller * MANIFEST: add parser fill tests [4f65140d3515] * compat/regress/glob/globtest.c, compat/regress/glob/globtest.in: Don't test features not supported by the bundled glob() [8ec7ace11949] * Makefile.in, aclocal.m4, common/Makefile.in, common/term.c, compat/Makefile.in, configure.in, doc/LICENSE, doc/Makefile.in, doc/sudo_plugin.man.in, doc/sudo_plugin.pod, doc/sudoers.ldap.man.in, doc/sudoers.ldap.pod, doc/sudoers.man.in, doc/sudoers.pod, include/Makefile.in, plugins/sample/Makefile.in, plugins/sample_group/Makefile.in, plugins/sudoers/Makefile.in, plugins/sudoers/check.c, plugins/sudoers/defaults.c, plugins/sudoers/gram.c, plugins/sudoers/gram.y, plugins/sudoers/iolog.c, plugins/sudoers/iolog_path.c, plugins/sudoers/ldap.c, plugins/sudoers/match.c, plugins/sudoers/pwutil.c, plugins/sudoers/sudo_nss.c, plugins/sudoers/sudoers.c, plugins/sudoers/sudoers.h, plugins/sudoers/sudoreplay.c, plugins/sudoers/testsudoers.c, plugins/sudoers/toke.c, plugins/sudoers/toke.l, plugins/sudoers/toke_util.c, src/Makefile.in, zlib/Makefile.in: Update copyright year to 2011 [ac1b45cb1809] * plugins/sudoers/sudo_nss.c: When listing, use separate lbufs for the defaults and the privileges and only print something if the number of privileges is non-zero. Fixes extraneous Defaults output for "sudo -U unauthorized_user -l". [d0854d39f8ef] * plugins/sudoers/ldap.c: Stash pointer to user group vector in LDAP handle and only reuse the query if it has not changed. We always allocate a new buffer when we reset the group vector so a simple pointer check is sufficient. [88861d4eba69] * plugins/sudoers/sudo_nss.c: Check initgroups() return value. [3bdaf58408a7] * plugins/sudoers/Makefile.in, plugins/sudoers/regress/parser/check_fill.c: Add tests for the fill functions in toke_util.c [bca587ab4956] 2011-01-19 Todd C. Miller * plugins/sudoers/regress/iolog_path/check_iolog_path.c: fix copyright year [e2038cdaf055] * NEWS: sync [56ca5d5eaebe] 2011-01-18 Todd C. Miller * common/term.c: Clear, don't set, OPOST in c_oflag as was intended in 506ad5ae9b4e. [b91f266624ec] 2011-01-14 Todd C. Miller * mkpkg, sudo.pp: Add Requires line for audit-libs >= 1.4 for RHEL5+ [6c02f976171b] * pp: sync with git version [d301c32d5865] 2011-01-13 Todd C. Miller * doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.pod: fix typo [39353f92976f] 2011-01-12 Todd C. Miller * NEWS: Update for sudo 1.7.4p5 [b444da76901f] * doc/schema.OpenLDAP, doc/schema.iPlanet: Add sudoNotBefore and sudoNotAfter attributes as optional attributes to the sudoRole object class. From Andreas Mueller [dacfad7e7a95] 2011-01-11 Todd C. Miller * NEWS: Mention "sudo -g group" password check fix. [1eb8fb14e53b] * plugins/sudoers/sudoers.c: Fix "sudo -g" support in the sudoers module. [07d1b0ce530e] * plugins/sudoers/check.c: If the user is running sudo as himself but as a different group we need to prompt for a password. [caf1fcc9a117] 2011-01-10 Todd C. Miller * NEWS, config.h.in, configure, configure.in, doc/sudoers.ldap.cat, doc/sudoers.ldap.man.in, doc/sudoers.ldap.pod, plugins/sudoers/ldap.c: Add support for TIMEOUT in ldap.conf, mapping to the OpenLDAP LDAP_OPT_TIMEOUT. There is no corresponding option for mozilla- derived LDAP SDKs but we can pass the timeout parameter to ldap_search_ext_s() or ldap_search_st() when possible. [5537049991f7] * doc/sudoers.ldap.cat, doc/sudoers.ldap.man.in: regen [5b361c3c4324] * NEWS, doc/sudoers.ldap.pod, plugins/sudoers/ldap.c: Add NETWORK_TIMEOUT as an alias for BIND_TIMELIMIT for compatibility with OpenLDAP ldap.conf files. [e97843bd16fb] * plugins/sudoers/pwutil.c: If user has no supplementary groups, fall back on checking the group file expliticly. [5223ad4eb690] 2011-01-08 Todd C. Miller * plugins/sudoers/toke.h, plugins/sudoers/toke_util.c: constify [6e132a4cca61] * plugins/sudoers/toke.c, plugins/sudoers/toke.h, plugins/sudoers/toke.l: Move fill macro to toke.h [623d430798cf] * MANIFEST, plugins/sudoers/Makefile.in, plugins/sudoers/toke.c, plugins/sudoers/toke.h, plugins/sudoers/toke.l, plugins/sudoers/toke_util.c: Split tokenizer utility functions out into toke_util.c [89a97bd51618] * plugins/sudoers/gram.c, plugins/sudoers/gram.y, plugins/sudoers/toke.c, plugins/sudoers/toke.l: ANSIfy [ca0eba1dfaa9] 2011-01-07 Todd C. Miller * MANIFEST: sync [a43f94064bb3] * plugins/sudoers/Makefile.in: Add visudo tests to check target [8c82fb4ed40f] * compat/Makefile.in, compat/regress/fnmatch/fnm_test.c, compat/regress/fnmatch/fnm_test.in, compat/regress/glob/files, compat/regress/glob/globtest.c, compat/regress/glob/globtest.in: Add my regress tests for fnmatch() and glob() from OpenBSD. [6e8c1f211723] * plugins/sudoers/regress/testsudoers/test1.sh, plugins/sudoers/regress/visudo/test1.ok, plugins/sudoers/regress/visudo/test1.sh: Add regress test for command tags using visudo -c [18b0ef207c0f] * plugins/sudoers/Makefile.in, plugins/sudoers/regress/testsudoers/test1.ok, plugins/sudoers/regress/testsudoers/test1.sh: Add support for regress tests using testsudoers [1fa94bd2671b] * plugins/sudoers/testsudoers.c: Need to set user_name explicitly due to internal changes made when converting sudoers to a plugin. [1fa54e86a364] 2011-01-06 Todd C. Miller * MANIFEST, Makefile.in, common/Makefile.in, compat/Makefile.in, doc/Makefile.in, include/Makefile.in, plugins/sample/Makefile.in, plugins/sample_group/Makefile.in, plugins/sudoers/Makefile.in, plugins/sudoers/regress/iolog_path/check_iolog_path.c, plugins/sudoers/regress/iolog_path/data, src/Makefile.in, zlib/Makefile.in: Add regression tests for iolog_path() [afa4b416e559] * Makefile.in, common/Makefile.in, compat/Makefile.in, doc/Makefile.in, include/Makefile.in, plugins/sample/Makefile.in, plugins/sample_group/Makefile.in, plugins/sudoers/Makefile.in, src/Makefile.in, zlib/Makefile.in: Add support for "make Makefile" to regenerate Makefile from Makefile.in [98bd2dda3294] * plugins/sudoers/iolog_path.c: Quiest a bogus compiler warning. [5ff932a7ad67] 2011-01-05 Todd C. Miller * plugins/sudoers/iolog_path.c: Protect call to setlocale() with HAVE_SETLOCALE [2c29ee3ccc81] 2011-01-04 Todd C. Miller * MANIFEST: mkstemps.c was renamed mktemp.c [ae299c3b1827] * NEWS: Update from 1.7 branch [20817d79717b] * Makefile.in: Use "mv -f" when regenerating ChangeLog [c163635206c6] * plugins/sudoers/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. [41a6a1243d9e] 2011-01-03 Todd C. Miller * doc/sudo_plugin.cat, doc/sudo_plugin.man.in, doc/sudo_plugin.pod: Correct the default sudo.conf example [4e791698cad1] 2010-12-31 Todd C. Miller * plugins/sudoers/iolog_path.c: Reset slashp if we allocate a new buffer for strftime() [e491daa4203b] * plugins/sudoers/iolog_path.c, plugins/sudoers/sudoers.c, plugins/sudoers/sudoers.h: Add extra out parameter to expand_iolog_path() to allow the caller to split the path into dir and file components if needed. [88346bc5ae39] 2010-12-30 Todd C. Miller * plugins/sudoers/iolog.c: mkdir_iopath() returns size_t now that it uses strlcpy() and not snprintf() [3c4c64d265eb] * plugins/sudoers/iolog.c, plugins/sudoers/iolog_path.c: Trim leading slashes from iolog_file and trailing slashes from iolog_dir [a803b51f8948] * doc/sudo_plugin.cat, doc/sudo_plugin.man.in, doc/sudo_plugin.pod, plugins/sudoers/iolog.c, plugins/sudoers/iolog_path.c, plugins/sudoers/sudoers.c, plugins/sudoers/sudoers.h: Pass a single I/O log file name in command_details instead of separate dir + file parameters. [d672a3e46e80] * plugins/sudoers/sudoreplay.c: change an error() to errorx() [8013dcfdd69d] * plugins/sudoers/iolog.c: Add missing cwd line to I/O log info file that got dropped when iolog_deserialize_info() was added [7cf84f208423] 2010-12-29 Todd C. Miller * plugins/sudoers/iolog.c: Avoid relying on globals filled in by the sudoers policy module for the sudoers I/O log module. The I/O log open function now pulls the bits it needs out of user_info and command_info. [c02f6951b0cc] * plugins/sudoers/iolog.c, plugins/sudoers/sudoers.c, plugins/sudoers/sudoers.h: If no iolog file is specified by the policy plugin, use io_nextid() to determine the next file in the sequence. [faa1130b1020] 2010-12-28 Todd C. Miller * doc/sudo_plugin.cat, doc/sudo_plugin.man.in, doc/sudo_plugin.pod: Document iolog_compress in command_info [58895c7d12f5] * plugins/sudoers/iolog.c, plugins/sudoers/sudoers.c: Add support for the iolog_compress variable in command_info. [36f13a2fd1c1] * plugins/sudoers/iolog.c, plugins/sudoers/sudoers.c: Add sigsetjmp() calls to all plugin entry points just to be safe. [3fa482355bc4] * src/sudo.c, src/sudo.h: Don't need iolog variables in struct command_details, they are for the I/O log plugins to handle. [5111579ffd9d] 2010-12-27 Todd C. Miller * doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.pod: Document use of mkdtemp() for iolog path teplates [5db6101408a9] * doc/sudo.cat, doc/sudo.man.in, doc/sudo_plugin.cat, doc/sudo_plugin.man.in, doc/sudoers.cat, doc/sudoers.ldap.cat, doc/sudoers.ldap.man.in, doc/sudoers.man.in, doc/sudoreplay.cat, doc/sudoreplay.man.in, doc/visudo.cat, doc/visudo.man.in: regen [1ee11fd6d4eb] * doc/sudo_plugin.pod, doc/sudoers.pod: Document iolog_file and supported escape sequences for sudoers. Clarify that iolog_file can contain directories. [da611dedcbdb] * compat/Makefile.in, configure, configure.in: Fix building of mkstemps/mkdtemp replacements. [793a5e303122] * compat/mkstemps.c, compat/mktemp.c, config.h.in, configure, configure.in, include/missing.h: Provide mkdtemp() for systems without it. [b0527dfa965c] * plugins/sudoers/iolog_path.c: Fix typo [277f6c514cba] * plugins/sudoers/iolog.c: Only use mkdtemp() if the path ends in at least 6 Xs since otherwise glibc mkdtemp() returns EINVAL. [2e7323b05579] * plugins/sudoers/Makefile.in, plugins/sudoers/def_data.c, plugins/sudoers/def_data.h, plugins/sudoers/def_data.in, plugins/sudoers/defaults.c, plugins/sudoers/iolog.c, plugins/sudoers/iolog_path.c, plugins/sudoers/plugin_error.c, plugins/sudoers/sudoers.c, plugins/sudoers/sudoers.h: Allow sudoers to specify the iolog file in addition to the iolog dir. Add escape sequence support to iolog file and dir: sequence number, user, group, runas_user, runas_group, hostname and command in addition to any escape sequence recognized by strftime(3). [75cd32ee0435] * plugins/sudoers/iolog.c: Add missing sigsetjmp() call in I/O plugin open function. Fixes a crash when the I/O plugin calls error(), errorx() or log_error(). [1a6718bd817d] 2010-12-21 Todd C. Miller * doc/sudo_plugin.pod, plugins/sudoers/iolog.c, plugins/sudoers/sudoers.c: Give the policy module fine-grained control over what the I/O plugin logs. [d29784fd2a66] * common/term.c: Clear OPOST from c_oflag like we used to. Fixes screen-based editors such as vi. [506ad5ae9b4e] * doc/sudoers.pod: Clarify umask option description. From Reuben Thomas. [1294ac84222b] 2010-12-20 Todd C. Miller * doc/sudoers.ldap.pod, plugins/sudoers/ldap.c: Pick last match in LDAP sudoers too [fbfd8e85703b] * doc/sudo_plugin.pod: Document iolog_file, iolog_dir and use_pty [26120a59c20e] * plugins/sample/sample_plugin.c, plugins/sudoers/iolog.c, plugins/sudoers/sudoers.c: Adapt plugins to version I/O logging ABI 1.1 [880dd64bc1e8] * src/exec.c, src/sudo.h: Add use_pty command_info flag for policies to indicate that a pty should be allocated even if no I/O logging is performed. [e7b167f8a6e5] * src/sudo.c: Add remaining plugin convenience functions [ffeaf96da031] * include/sudo_plugin.h, src/sudo.c, src/sudo.h, src/sudo_plugin_int.h: Change I/O log API to pass in command info to the I/O log open function. Add iolog_file and iolog_dir parameters to command info. This allows the policy plugin to specify the I/O log pathname. Add convenience functions for calling plugin functions that handle ABI backwards compatibility. [9b81dce76ce5] * compat/dlopen.c: Remove useless cast [7cecce969739] 2010-12-17 Todd C. Miller * configure, configure.in: Bump version to 1.8.0b3 [1dc9f040aae0] 2010-12-13 Todd C. Miller * configure.in: Remove extraneous newline [71c94551eea5] 2010-12-10 Todd C. Miller * doc/sudoers.pod, plugins/sudoers/def_data.c, plugins/sudoers/def_data.h, plugins/sudoers/def_data.in, plugins/sudoers/defaults.c, plugins/sudoers/iolog.c: Make I/O log dir configurable. [99b576667a38] * aclocal.m4, configure, configure.in, doc/sudoers.pod: Rename io_logdir to iolog_dir [0731662acc8d] 2010-12-07 Todd C. Miller * pp: Add missing '*' that prevented the generic ELF case from matching. [be77ca26bfb2] * pp: If file(1) can't identify the ELF binary type, try readelf(1). [38a18d32a9e3] 2010-11-30 Todd C. Miller * plugins/sudoers/auth/kerb4.c, plugins/sudoers/check.c, plugins/sudoers/env.c, plugins/sudoers/pwutil.c, plugins/sudoers/sudoers.c, src/sudo.c: Use %u to print uid/gid, not %lu and adjust casts to match. [03c43b8749cf] * doc/sudoers.ldap.pod: Clarify ordering of entries and attributes. [924e2a6bb603] * doc/sudoers.ldap.pod: Fix typo and editing goof. [79dc7ccd85a8] * doc/schema.ActiveDirectory, doc/schema.OpenLDAP, doc/schema.iPlanet, doc/sudoers.ldap.pod: Merge in ordered LDAP entry support from Andreas Mueller. [ea5885989bad] * plugins/sudoers/ldap.c: Make sure we don't dereference a NULL handle. [1a9f9ee15371] 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 [dc09be959547] 2010-11-23 Todd C. Miller * src/sudo.c: exec_setup() does not need to setuid(0), the Ubuntu issue was in the sudoers module. [d6dd99fc6062] * plugins/sudoers/sudoers.c: create_admin_success_flag() should use restore_perms() rather than set_perms() to restore the uid. [eba7a91c1f57] * src/sudo.c: In exec_setup() call setuid(0) to make certain the subsequent uid and gid changes will succeed. Fixes a problem on Ubuntu. [c5d32abf0645] * src/sudo_edit.c: Error out if we cannot change to root's uid so we catch the failure early. [7a2e7f8f2c80] 2010-11-22 Todd C. Miller * doc/sudoers.pod: fix typo; from Michael T Hunter [a574a9d0db5b] * plugins/sudoers/match.c: In sudoedit mode, assume command line arguments are paths and pass FNM_PATHNAME to fnmatch(). [ce0abff8ce9f] 2010-11-20 Todd C. Miller * configure, configure.in: Add workaround for an error in sys/types.h on HP-UX 11.23 when large file support is enabled. Defining _XOPEN_SOURCE_EXTENDED avoids the broken bits of the header file. [e337217f097a] * aclocal.m4: Fix SUDO_MAILDIR usage of AC_LANG_PROGRAM [fbbcee28961f] * sudo.pp: For Tru64, strip off beta version. [eeccd762df5e] * MANIFEST, plugins/sudoers/testsudoers.c, plugins/sudoers/tsgetgrpw.c, plugins/sudoers/tsgetgrpw.h: Avoid conflicts with system definitions in grp.h and pwd.h [b219ffe1da09] * zlib/gzguts.h: Include stdio.h after zlib.h, not before. We need the large file defines to come first. [21d6df39790f] 2010-11-19 Todd C. Miller * doc/sudoers.ldap.cat, doc/sudoers.ldap.man.in: regen [3ff8750d0aac] * Makefile.in: Don't clean ChangeLog [ab0d30d289d4] * plugins/sudoers/testsudoers.c, plugins/sudoers/visudo.c: Add prototype for cleanup() [75626fd3769a] 2010-11-18 Todd C. Miller * plugins/sudoers/group_plugin.c: Avoid deferencing group_plugin if it is NULL in group_plugin_query(). This should not happen. [4f2933c8da7e] * plugins/sudoers/group_plugin.c: group plugin init function return TRUE when successful [198024477030] 2010-11-17 Todd C. Miller * plugins/sudoers/ldap.c: Enlarge the array of entry wrappers int blocks of 100 entries to save on allocation time. From Andreas Mueller [375c916bb03b] * plugins/sudoers/ldap.c: Add back call to sudo_ldap_timefilter() in sudo_ldap_build_pass2() that was mistakenly dropped. [1555f5bc132d] 2010-11-16 Todd C. Miller * doc/TROUBLESHOOTING: Mention that sudo needs "ar" to build. [65582ace2d09] * configure, configure.in: Fail with a more useful error if "ar" is not found. [d1cb83719c17] 2010-11-14 Todd C. Miller * plugins/sudoers/ldap.c: Merge in ordered LDAP entry support from Andreas Mueller and add local changes from the 1.7 branch. [bca29e461618] 2010-11-12 Todd C. Miller * doc/schema.ActiveDirectory, doc/schema.OpenLDAP, doc/schema.iPlanet, doc/sudoers.ldap.pod, plugins/sudoers/ldap.c: Add timed entry support from Andreas Mueller. [e18d1df46a8d] * plugins/sudoers/group_plugin.c: Don't try to unload if group_plugin is NULL. Don't call dlclose() if group_handle is NULL [de2273da37d5] * plugins/sudoers/sudoers.h: It is now plugin_cleanup(), not cleanup() [da62a4e1a78c] * plugins/sudoers/logging.c, plugins/sudoers/sudoers.c: Call plugin_cleanup(), not cleanup() [e800ad8b33ad] 2010-11-11 Todd C. Miller * plugins/sudoers/ldap.c: Use efree() not free() and remove malloc.h include since we never directly call malloc() or free(). [107fffd134bb] 2010-11-09 Todd C. Miller * sudo.pp: set PSTAMP for Solaris and move the backend-specific bits to their own %if [xxx] %endif blocks in %set. [a94ebe8920c1] * pp: sync with git repo [75ff509696b4] * configure, configure.in: Only substitute file zlib files when using the builtin zlib [6c8145b2deb4] * common/Makefile.in, compat/Makefile.in, plugins/sample/Makefile.in, plugins/sample_group/Makefile.in, plugins/sudoers/Makefile.in, src/Makefile.in, zlib/Makefile.in: Give up on using VPATH to find sources as it is implemented inconsistenly in different versions of make. [60517c69aaee] * plugins/sudoers/Makefile.in, plugins/sudoers/getdate.c, plugins/sudoers/gram.c, plugins/sudoers/toke.c: Include config.h before any other includes to make sure we get the right value for _FILE_OFFSET_BITS. [8fb007ca832e] * MANIFEST: Add zlib [04a3e23dfaa9] * zlib/Makefile.in: Add missing targets [40e45a177168] * src/Makefile.in: g/c unused $(GENERATED) [c8758068c1bc] 2010-11-08 Todd C. Miller * plugins/sudoers/group_plugin.c: Zero out group_plugin on unload just to be safe. [0b10f4d101ca] * plugins/sudoers/group_plugin.c: Unload group plugin if its init function fails. [6552cdac4b7c] * src/sudo.c: Only chdir to cwd if it is different from the current cwd or there is a new root (chroot). [b8203e875e84] * configure, configure.in, doc/sudo.cat, doc/sudo.man.in, doc/sudo_plugin.cat, doc/sudo_plugin.man.in, doc/sudoers.ldap.cat, doc/sudoers.ldap.man.in, doc/visudo.cat, doc/visudo.man.in: Bump version to 1.8.0b2 [6dadeb75a878] 2010-10-28 Todd C. Miller * INSTALL: Better --enable-zlib description [e0da54fa59a6] * mkpkg: Use system zlib on Linux Let configure decide on Solaris For all others, use builtin zlib [3d52eddb523c] * zlib/zconf.h.in: Add large file support. [bec01215270d] * config.h.in: Add large file support. [244e95b034ec] * Makefile.in, configure, configure.in, doc/LICENSE, doc/license.pod, zlib/Makefile.in, zlib/adler32.c, zlib/compress.c, zlib/crc32.c, zlib/crc32.h, zlib/deflate.c, zlib/deflate.h, zlib/gzclose.c, zlib/gzguts.h, zlib/gzlib.c, zlib/gzread.c, zlib/gzwrite.c, zlib/infback.c, zlib/inffast.c, zlib/inffast.h, zlib/inffixed.h, zlib/inflate.c, zlib/inflate.h, zlib/inftrees.c, zlib/inftrees.h, zlib/trees.c, zlib/trees.h, zlib/uncompr.c, zlib/zconf.h.in, zlib/zlib.h, zlib/zutil.c, zlib/zutil.h: Add local copy of zlib for systems that lack it. [7542ca465c5a] 2010-10-15 Todd C. Miller * src/exec.c: If perform_io() fails, kill the child before exiting so it doesn't complain about connection reset. We can get an I/O error if, for example, and we get EIO reading from stdin. [e59a05fa729f] 2010-10-12 Todd C. Miller * plugins/sudoers/sudoers.c, src/sudo.c: Fix complilation on systems with set_auth_parameters() Sprinkle volatile to quiet warnings from gcc 2.8.0 [a34c2b924ba7] * compat/dlfcn.h, compat/dlopen.c: Avoid potential namespace issues with dlopen() emulation. [aedfababd6ca] * MANIFEST: sync [6afb97e6d308] * plugins/sudoers/interfaces.c: Use INADDR_NONE instead of casting -1 to in_addr_t (which may not exist). [ddfca5af1a36] * Makefile.in: Mark ChangeLog as PHONY Don't overwrite ChangeLog if we can't run hg [e9d04bfa4505] * configure, configure.in: HP-UX 10.20 libc has an incompatible getline [2e7bc202e78d] * plugins/sudoers/visudo.c: Quiet an HP-UX compiler warning. [55b9d587ac8c] * configure, configure.in: Check for vi even with --with-editor specified; the sample plugin needs it. [94dfc3643f76] 2010-10-11 Todd C. Miller * compat/dlopen.c: Fix remaining syntax errors. [9d729b5b577e] * src/Makefile.in: sudo binary depends on the libtool-generated libs [9e6148406adb] * plugins/sudoers/group_plugin.c, src/load_plugins.c: Use HAVE_DLOPEN instead of HAVE_DLFCN_H when determining whether to include the local or system dlfcn.h [68cfe4c1089b] * pp: Don't use run_as_superuser=false on HP-UX [532242370b09] * src/net_ifs.c: Use memset() instead of zero_bytes() since we don't include sudoers.h [a187c18c2472] * plugins/sudoers/interfaces.c: Fix pasto; AF_INET not AF_INET6 [2d2e9d7dc6f9] * compat/dlopen.c: Actually call shl_load() [ed8153b8a3cd] * pp: Update from git repo. Debian: version numbers now compliant with policy section 5.6.12 HP-UX: minimal changes needed to work on HP-UX 10.20 [ecf2692bceeb] * configure, configure.in: Fix dlopen() detection for systems where dlopen() is in a separate library. [fa6b175582b6] * plugins/sudoers/auth/pam.c: If pam_acct_mgmt() returns PAM_AUTH_ERR print a (hopefully) more useful message and return AUTH_FATAL so sudo does not keep trying to validate the user. [1be8857e5291] * src/preload.c: sudo_preload_table is an array [b7704e72a9da] * compat/dlopen.c: Quiet a compiler warning and fix sudo_preload_table external definition. [8234987664cc] * compat/dlfcn.h: Fix multiple inclusion guard in dlfcn.h and fix dlerror() prototype. [8bab6a4053cc] * plugins/sudoers/group_plugin.c: Make this compile correctly when no dlopen is available. [57643879bd2b] 2010-10-07 Todd C. Miller * plugins/sudoers/check.c: Having a timestamp file defined is no longer indicative of tty tickets being enabled. Check def_tty_tickets directly. [efcc11ad157f] * src/exec_pty.c, src/sudo.h, src/ttysize.c: Fix TCGETWINSZ compat. [da3a8b17cf7a] 2010-10-02 Todd C. Miller * src/exec_pty.c, src/ttysize.c: Prefer newer TIOCGWINSZ ioctl to old TIOCGSIZE [926492dd10a6] 2010-10-01 Todd C. Miller * plugins/sudoers/sudoers.c, src/sudo.c: Move set_project() from sudoers module into sudo proper. [beabafac03b4] * configure, configure.in: Fix typo and regenerate [4a3caf4234f3] * plugins/sudoers/ldap.c: When iterating over returned LDAP entries, keep looking at remaining matches even if we have a positive match. This catches negative matches that may exist in other entries and more closely match the sudoers file behavior. [f47db6e609b0] * pp: Add support for multiple package instances on Solaris. [7f2a8b942545] * src/exec.c: Add missing signal_pipe[0] to fdsr for the non-pty case. [79d01e11b19c] * mkpkg: Add --with-project for Solaris [ffa4c2bb93f7] * README: Need ar and ranlib too [5c2f679172ef] 2010-09-27 Todd C. Miller * plugins/sudoers/env.c: Preserve ODMDIR environment variable by default on AIX. [bd47cb1e804f] 2010-09-26 Todd C. Miller * Makefile.in, compat/Makefile.in, compat/dlfcn.h, compat/dlopen.c, config.h.in, configure, configure.in, plugins/sample/Makefile.in, plugins/sample_group/Makefile.in, plugins/sudoers/Makefile.in, plugins/sudoers/group_plugin.c, plugins/sudoers/plugin_error.c, plugins/sudoers/sudoers.c, src/Makefile.in, src/load_plugins.c, src/preload.c: Add dlopen() emulation for systems without it. For HP-UX 10, emulate using shl_load(). For others, link sudoers plugin statically and use a lookup table to emulate dlsym(). [e92edfb3c642] 2010-09-24 Todd C. Miller * compat/fnmatch.c, compat/glob.c, compat/mksiglist.c, compat/nanosleep.c, compat/utimes.c: When including compat headers, use the compat dir as part of the path so we are sure to get the correct header. [6c2a45da6af5] 2010-09-21 Todd C. Miller * plugins/sudoers/linux_audit.c: Ignore ECONNREFUSED from audit_log_user_command() which will occur if auditd is not running. [d314fe4c8d03] 2010-09-17 Todd C. Miller * pp: Sync with git version [1c0357744222] 2010-09-16 Todd C. Miller * common/fileops.c, plugins/sudoers/defaults.c: Cast isblank argument to unsigned char. [c822dbb3ca54] 2010-09-14 Todd C. Miller * INSTALL, config.h.in, configure, configure.in, doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.pod, plugins/sudoers/defaults.c: Implement --with-umask-override configure flag. [863e3047df22] * plugins/sudoers/env.c: Take MODE_LOGIN_SHELL into account when initially setting reset_home instead of special-casing it later. [5d6b16480fd6] * plugins/sudoers/sudoers.c: In login mode, make a copy of the runas user's pw_shell for NewArgv[0] because 1) we modify it and 2) it will runas_pw gets freed before exec. [1d1ccb568dfa] * plugins/sudoers/env.c: Reset HOME for "sudo -i" even if HOME was listed in env_keep. [c1c1c65a2d63] * src/sudo.c: Use SIG_SETMASK when resetting signal mask instead of SIG_UNBLOCK. [7443454e5f88] * src/sudo.c: Reset signal mask at sudo startup time; we need to be able to rely on normal signal delivery to control the child process. [95800163ff94] 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. [736065e14301] * common/lbuf.c: Do not need sys/time.h after all [91f6f668ccda] * common/lbuf.c: Include sys/time.h for utimes() and struct timeval. No longer need ioctl.h or termios.h [2d75273d3213] * compat/snprintf.c: Quiet bogus compiler warnings. [fe252e1968f5] * include/missing.h: Declare innetgr() for HP-UX which is missing a declaration. Declare domainname() for HP-UX and Solaris which are missing a declaration. [b37c50751138] * plugins/sudoers/bsm_audit.c: Use __sun for consistency with the rest of the sources. [6b086b61ccb6] * plugins/sudoers/group_plugin.c: Quiet a bogus compiler warning. [ebc069842c4a] * plugins/sudoers/pwutil.c: Don't try to delref a NULL group. [f6ff0838be21] * common/alloc.c, common/lbuf.c: Include memory.h on systems that need it. [4e676da81c6f] 2010-09-11 Todd C. Miller * src/exec.c: Quiet gcc warnings on glibc systems that use warn_unused_result for write(2). [0532da0b7cf7] * doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.pod: sudo_plugin is in section 8; from Ted Percival [b4506a0de87e] * plugins/sudoers/Makefile.in: testsudoers depends on libsudoers.la, not sudoreplay [cdb1cc3bf06a] 2010-09-10 Todd C. Miller * src/exec.c: Read as many signals on the signal pipe as we can before returning. [b181671da047] * src/exec.c, src/exec_pty.c, src/sudo_exec.h: Instead of using a array to store received signals, open a pipe and have the signal handler write the signal number to one end and select() on the other end. This makes it possible to handle signals similar to I/O without race conditions. [ee84d65c16b6] 2010-09-09 Todd C. Miller * doc/visudo.pod, plugins/sudoers/visudo.c: Make "visudo -c -f -" check the standard input. [195a3d2a9a26] * doc/sudoers.pod: set_home and always_set_home have an effect if HOME is present in the env_keep list. [159d0b9dc5c8] * plugins/sudoers/env.c: Make -H flag work when HOME is listed in env_keep. Also makes "set_home" and "always_set_home" override override HOME in env_keep. [a3e5b966193f] 2010-09-08 Todd C. Miller * plugins/sudoers/Makefile.in, plugins/sudoers/interfaces.c, plugins/sudoers/interfaces.h, plugins/sudoers/match.c, plugins/sudoers/sudoers.c, plugins/sudoers/testsudoers.c, plugins/sudoers/visudo.c, src/net_ifs.c: Convert sudoers plugin to use interface list passed in settings. [87d9b5f4f586] * doc/sudo_plugin.pod, src/Makefile.in, src/net_ifs.c, src/parse_args.c, src/sudo.h: Query local network interfaces in the main sudo driver and pass to the plugin as "network_addrs" in the settings list. [7f35bcfe77a7] * plugins/sudoers/bsm_audit.c: Solaris BSM audit return EINVAL when auditing is not enabled, whereas OpenBSM returns ENOSYS. [411b980ec58b] 2010-09-07 Todd C. Miller * compat/fnmatch.c: missing.h should come before most local includes [53921a7b8b5b] * plugins/sudoers/sudoreplay.c: missing.h should come before most local includes [e9abb0db1aac] * plugins/sudoers/sudoers.h: Make local includes consistent; use double quotes for local includes except for generated ones where we use angle brackets. [09de4faa9547] * plugins/sudoers/sudoers.c: Always fill in NewArgv for audit code. [7c3aca60519f] * plugins/sudoers/toke.c, plugins/sudoers/toke.l: Add missing LOG_INPUT/LOG_OUTPUT support in the lexer. [007cf6560f92] * common/alloc.c, common/atobool.c, common/fileops.c, common/fmt_string.c, common/lbuf.c, common/list.c, common/term.c, common/zero_bytes.c, compat/closefrom.c, compat/fnmatch.c, compat/getcwd.c, compat/getgrouplist.c, compat/getline.c, compat/getprogname.c, compat/glob.c, compat/isblank.c, compat/memrchr.c, compat/mksiglist.c, compat/mkstemps.c, compat/nanosleep.c, compat/setenv.c, compat/snprintf.c, compat/strlcat.c, compat/strlcpy.c, compat/strsignal.c, compat/unsetenv.c, compat/utimes.c, include/compat.h, plugins/sample/sample_plugin.c, plugins/sample_group/getgrent.c, plugins/sample_group/plugin_test.c, plugins/sample_group/sample_group.c, plugins/sudoers/audit.c, plugins/sudoers/auth/afs.c, plugins/sudoers/boottime.c, plugins/sudoers/getdate.c, plugins/sudoers/getdate.y, plugins/sudoers/linux_audit.c, plugins/sudoers/match.c, plugins/sudoers/plugin_error.c, plugins/sudoers/sudoreplay.c, plugins/sudoers/timestr.c, src/error.c, src/sesh.c, src/sudo.h, src/sudo_noexec.c, src/ttysize.c: Make local includes consistent; use double quotes for local includes except for generated ones where we use angle brackets. Also g/c unused compat.h. [e57070dc8f04] 2010-09-06 Todd C. Miller * plugins/sudoers/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). [815219e04cc8] 2010-09-04 Todd C. Miller * doc/sudoers.ldap.pod, plugins/sudoers/ldap.c: Add support for multiple URI lines by joining the contents and passing the result to ldap_initialize. [a47cae3b72e8] * plugins/sudoers/ldap.c, plugins/sudoers/parse.c: Do not return -1 on error from the display functions; the caller expects a return value >= 0. [101456a7dd00] * plugins/sudoers/sudoers.c: Do not set both MODE_EDIT and MODE_RUN [8faa36694d54] 2010-09-03 Todd C. Miller * include/missing.h: Move includes to the top of the file. [a51436798e8c] 2010-08-30 Todd C. Miller * plugins/sudoers/Makefile.in: Add missing definition of timedir [458a749c2c5e] * compat/fnmatch.c, compat/getprogname.c, compat/isblank.c, compat/mksiglist.c, compat/strsignal.c, plugins/sudoers/plugin_error.c, src/error.c, src/sudo_noexec.c: Add #include of sys/types.h for .c files that include missing.h to be sure that size_t and ssize_t are defined. [08e3132dbf4f] * plugins/sudoers/Makefile.in: Install sudoers file from the build dir not hte src dir. [ca89e962dbf4] 2010-08-26 Todd C. Miller * plugins/sudoers/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). [24f9107cedd2] * plugins/sudoers/Makefile.in: Add target to generate sudoers file Remove generated sudoers file as part of distclean [fb7422e90f03] 2010-08-24 Todd C. Miller * src/exec.c: When not logging I/O install a handler for SIGCONT and deliver it to the command upon resume. Fixes bugzilla #431 [495dce52a5aa] 2010-08-21 Todd C. Miller * plugins/sudoers/sudoers.h: g/c unused auth_pw extern definition [40eb7477ba17] * plugins/sudoers/check.c, plugins/sudoers/sudoers.c: Move get_auth() into check.c where it is actually used. [e31db0ce3a61] 2010-08-20 Todd C. Miller * common/lbuf.c: Convert a remaining puts() and putchar() to use the output function. [d69e363a506b] * plugins/sudoers/plugin_error.c: Plug memory leak [68895469ea8d] 2010-08-18 Todd C. Miller * plugins/sudoers/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 f421f8827340. [9ca19183794f] * configure, configure.in, plugins/sudoers/sudoers, plugins/sudoers/sudoers.in: Substitute sysconfdir in the installed sudoers file to get the correct path for sudoers.d. [86072b6cd55d] 2010-08-17 Todd C. Miller * src/get_pty.c: Fix typo that prevented compilation on Irix; Friedrich Haubensak [b48be51b65fc] 2010-08-16 Todd C. Miller * MANIFEST, common/Makefile.in, common/aix.c, common/alloc.c, common/atobool.c, common/fileops.c, common/fmt_string.c, common/lbuf.c, common/list.c, common/term.c, common/zero_bytes.c, compat/Makefile.in, compat/closefrom.c, compat/fnmatch.c, compat/getcwd.c, compat/getgrouplist.c, compat/getline.c, compat/getprogname.c, compat/glob.c, compat/isblank.c, compat/memrchr.c, compat/mksiglist.c, compat/mkstemps.c, compat/nanosleep.c, compat/setenv.c, compat/snprintf.c, compat/strlcat.c, compat/strlcpy.c, compat/strsignal.c, compat/unsetenv.c, compat/utimes.c, include/compat.h, include/missing.h, plugins/sample/sample_plugin.c, plugins/sample_group/getgrent.c, plugins/sample_group/sample_group.c, plugins/sudoers/Makefile.in, plugins/sudoers/audit.c, plugins/sudoers/boottime.c, plugins/sudoers/getdate.c, plugins/sudoers/getdate.y, plugins/sudoers/linux_audit.c, plugins/sudoers/plugin_error.c, plugins/sudoers/sudoers.h, plugins/sudoers/sudoreplay.c, plugins/sudoers/timestr.c, src/Makefile.in, src/error.c, src/sesh.c, src/sudo.h, src/sudo_noexec.c, src/ttysize.c: Merge compat.h and missing.h into missing.h [572909ae9716] 2010-08-14 Todd C. Miller * plugins/sudoers/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. [23782631748c] 2010-08-12 Todd C. Miller * plugins/sudoers/check.c: Update comment [a5296cb3a20a] * doc/sudo_plugin.cat, doc/sudo_plugin.man.in, doc/sudo_plugin.pod: Document sudo_conv_t function and sudo_printf_t return values. [745c0017814c] * src/conversation.c: Make _sudo_printf return the number of characters printed on success like printf(3). [8eeefe8d7e77] 2010-08-10 Todd C. Miller * plugins/sudoers/sudoers.c: sudoers.h includes sudo_plugin.h for us [cabe68e07807] * common/Makefile.in, common/gettime.c, compat/mkstemps.c, plugins/sudoers/sudoers.h, plugins/sudoers/visudo.c, src/sudo.h, src/sudo_edit.c: Use gettimeofday() directly instead of via the gettime() wrapper. [7490426c99ae] * common/gettime.c, compat/snprintf.c, compat/strcasecmp.c, compat/strerror.c, config.h.in, configure, configure.in, include/compat.h, include/missing.h, plugins/sudoers/logging.c, plugins/sudoers/sudoers.c, plugins/sudoers/visudo.c, src/sudo.c: Remove some obsolete configure tests, ancient Unix systems are no longer supported. [2be6218c3a36] 2010-08-07 Todd C. Miller * sudo.pp: Set pp_kit_version and strip off patch level [aacfda1b676d] * 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. [638bd35f2346] 2010-08-06 Todd C. Miller * plugins/sudoers/auth/sudo_auth.c: For non-standalone auth methods, stop reading the password if the user enters ^C at the prompt. [82c2911bb264] * configure, configure.in, plugins/sudoers/Makefile.in, plugins/sudoers/auth/passwd.c, plugins/sudoers/auth/secureware.c, plugins/sudoers/auth/sudo_auth.c, plugins/sudoers/auth/sudo_auth.h, plugins/sudoers/pwutil.c: No need to look up shadow password unless we are doing password- style authentication. This moves the shadow password lookup to the auth functions that need it. [ba9e3eba2b72] * plugins/sudoers/sudoers.c: Retain final passwd/group refs until the policy close() function. Note that this doesn't get called in all cases so putting this in a cleanup function is probably better. [bbe214cb4119] * plugins/sudoers/check.c: Fix mismerge [395115f89dd6] * plugins/sudoers/check.c: When removing/resetting the timestamp file ignore the tty ticket contents. [b709f5667a0b] * plugins/sudoers/sudoers.c: delref sudo_user.pw, runas_pw and runas_gr immediately before we return. [4d67d15dfd3b] 2010-08-04 Todd C. Miller * plugins/sudoers/check.c, plugins/sudoers/ldap.c, plugins/sudoers/match.c, plugins/sudoers/pwutil.c, plugins/sudoers/sudoers.c, plugins/sudoers/sudoers.h: Reference count cached passwd and group structs. The cache holds one reference itself and another is added by sudo_getgr{gid,nam} and sudo_getpw{uid,nam}. The final ref on the runas and user passwd and group structs are persistent for now. [e544685523c3] * doc/UPGRADE: fix typo [e32f2d35e6c9] 2010-08-03 Todd C. Miller * plugins/sudoers/check.c: Do not produce a warning for "sudo -k" if the ticket file does not exist. [1598f6061b75] * plugins/sudoers/pwutil.c: Instead of caching struct passwd and struct group in the red-black tree, store a struct cache_item which includes both the key and datum. This allows us to user the actual name that was looked up as the key instead of the contents of struct passwd or struct group. This matters because the name in the database may not match what we looked up, due either to case folding or truncation (historically at 8 characters). Also mark the disabled calls to sudo_freepwcache() and sudo_freegrcache() as broken since we use cached data for things like set_perms() and the logging functions. Fixing this would require making a copy of the structs for user and runas or adding a reference count (better). [225d4a22f60e] * plugins/sudoers/Makefile.in: Fix path to mkinstalldirs [b4968379b12d] * plugins/sudoers/check.c, plugins/sudoers/logging.c, plugins/sudoers/sudoreplay.c, plugins/sudoers/visudo.c, src/exec_pty.c, src/get_pty.c, src/tgetpass.c: Quiet gcc warnings on glibc systems that use warn_unused_result for write(2) and others. [c99f138960e0] 2010-08-02 Todd C. Miller * plugins/sudoers/toke.c, plugins/sudoers/toke.l: Add %option noinput [72b9cd49b4f1] * aclocal.m4, configure, configure.in: Add cross-compile defaults for remaining AC_TRY_RUN usage. Also add back getgroups() check since AC_FUNC_GETGROUPS defaults to "no" when cross-compiling. [e385c176d0ee] 2010-07-31 Todd C. Miller * aclocal.m4, compat/snprintf.c, config.h.in, configure, configure.in: Use AC_CHECK_MEMBER in SUDO_SOCK_SA_LEN Use AC_TYPE_LONG_LONG_INT and AC_CHECK_SIZEOF([long int]) instead of rolling our own. [cf3e60d9c440] 2010-07-29 Todd C. Miller * pp: Update to latest version [32f93be33961] 2010-07-28 Todd C. Miller * sudo.pp: Let pp determine pp_aix_version itself. [7cf0245d84ed] * INSTALL, config.h.in, configure, configure.in, mkpkg, plugins/sudoers/sudoers.c: Add support for Ubuntu admin flag file and enable it when building Ubuntu packages. [00e27cff2dfb] * plugins/sudoers/sudoers, sudo.pp: Add commented out SuSE-like targetpw settings [4605d47b7413] * configure, configure.in: Only try to use +DAportable for non-GCC on hppa [75d0f284ccf7] * configure, configure.in: Prevent configure from adding the -g flag unless in devel mode [b1fd3f8d45c0] 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. [d737069d1e1c] * sudo.pp: Use sudo_$flavor instead of sudo-$flavor since that causes the least amount of trouble for the various package managers. [71f547af35fc] * mkpkg: Fix handling of the ldap flavor Remove destdir unless --debug was specified Make distclean before running configure if there is a Makefile present [6316f08de7d3] * sudo.pp: Add back include file. [195627bf68b8] * 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 /usr/local/lib. [473efa0e2bac] * mkpkg: Use the HP ANSI C compiler on HP-UX if possible [fb249b6b175d] * plugins/sudoers/sudoreplay.c: Some getline() implementations (FreeBSD 8.0) do not ignore the length pointer when the line pointer is NULL as they should. [2410a1a3543c] * plugins/sudoers/sudoreplay.c: Don't need to check for *cp being non-zero, isdigit() will do that. [7df11ea8a487] * plugins/sudoers/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. [4d385765f23b] * src/exec.c: Do I/O logging in the C locale so the floating point numbers in the timing file are not locale-dependent. [5961cec044ec] * plugins/sudoers/sudoreplay.c: Use errorx() not error() for thingsthat don't set errno. [0fe5e692af84] 2010-07-26 Todd C. Miller * pp: Better support for 1.2.3 style versions in Tru64 kits [997c549bb777] * sudo.pp: Add Tru64 kit support [e273a954f981] * pp: Remove apparently unnecessary use of sudo [be8840d85125] * Makefile.in, plugins/sudoers/Makefile.in: Create timedir as part of install-dirs target. [c736bc2fb14f] * src/exec_pty.c: Handle ENXIO from read/write which can occur when reading/writing a pty that has gone away. [fa2e8059879f] * plugins/sudoers/pwutil.c: sudo_pwdup() was not expanding an empty pw_shell to _PATH_BSHELL [3a045475d5ee] * mkpkg: platform is a pp flag not a variable [12eba39a47c1] * Makefile.in, mkpkg, sudo.pp: Add simple arg parsing for mkpkg so we can set debug, flavor or platform. [ada839fe252d] * pp: Make rpm backend work on AIX 5.x [549a76d11393] 2010-07-25 Todd C. Miller * plugins/sudoers/sudoers: Add commented out Defaults entry for log_output [7e67d7588900] 2010-07-23 Todd C. Miller * doc/Makefile.in: Remove sudo docdir completely [dce8e82878ef] * doc/sample.sudo.conf: Add sample sudo.conf [aafdba3fc411] 2010-07-22 Todd C. Miller * plugins/sudoers/Makefile.in: Add PACKAGE_TARNAME for docdir [930c92b8f8f0] 2010-07-23 Todd C. Miller * src/Makefile.in: Pass install-sh -b~ here too. [c3f5eb446c38] * plugins/sample/Makefile.in, plugins/sample_group/Makefile.in, plugins/sudoers/Makefile.in, src/Makefile.in: Install binary files with -b~ to make a backup. Fixes "text file busy" error on HP-UX during install. [81f306f54f8c] * install-sh: "mv -f" on HP-UX doesn't unlink the destination first so add an explicit rm before moving the temporary into place. [fb719a79582d] * configure, configure.in: Some more ${foo} -> $(foo) conversion for consistent Makefiles. [0aa098770074] * doc/Makefile.in, plugins/sudoers/Makefile.in: Install sudoers2ldif in the doc dir [33ac3b53d7f5] 2010-07-22 Todd C. Miller * pathnames.h.in: Add missing include of maillock.h for Solaris [5a58883be23a] * NEWS, configure, configure.in, doc/TROUBLESHOOTING, doc/UPGRADE, doc/sample.syslog.conf, doc/sudoers.cat: Change the default syslog facility from local2 to authpriv (or auth if the operating system doesn't support authpriv). [3b70ba514f49] * Makefile.in, 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. [d886b6d60b5b] * 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. [58be2119f8e8] 2010-07-21 Todd C. Miller * compat/mkstemps.c, plugins/sudoers/boottime.c: Include time.h for struct timeval [ddf8b04f0276] * src/exec_pty.c: The return value of strsignal() may be const and should be treated as const regardless. [620074ae1e77] * doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.pod: Mention that 127.0.0.1 will not match, nor will localhost unless that is the actual host name. [8b574122eb8f] * MANIFEST, NEWS, README, WHATSNEW, doc/Makefile.in, doc/UPGRADE: Rename WHATSNEW -> NEWS [d1a2c8c47d89] * pp: Updated pp with latest patches [98e16b9b8f62] * WHATSNEW: Sync with 1.7.4 [65ac4dafeef7] * doc/UPGRADE, doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.pod, plugins/sudoers/sudoers: Add commented out line to add HOME to env_keep and add a warning to the note about the HOME change in UPGRADE. [0d6a775bb6c8] 2010-07-20 Todd C. Miller * plugins/sudoers/sudoreplay.c: Add LINE_MAX define for those without it. [446d9dbe7859] * INSTALL, WHATSNEW, config.h.in, configure, configure.in, doc/UPGRADE, doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.pod, plugins/sudoers/defaults.c: The tty_tickets option is now on by default. [a01c48206d80] * WHATSNEW: Mention that AIX authdb support has been fixed. [87bd7f4eba6a] * common/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. [470da190a254] 2010-07-19 Todd C. Miller * WHATSNEW, doc/UPGRADE, doc/sudo.cat, doc/sudo.man.in, doc/sudo.pod, doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.pod, plugins/sudoers/env.c: Reset HOME when env_reset is enabled unless it is in env_keep [f421f8827340] * doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.pod: The default for set_logname has been "true" for some time now. [f489da5674c3] * plugins/sudoers/boottime.c: Add missing include of time.h [624d7014932f] * plugins/sudoers/logging.c: Fix check for dup2() return value. [140ea2d50d20] * plugins/sudoers/env.c: Add PYTHONUSERBASE to initial_badenv_table [3149aae5b12c] * plugins/sudoers/visudo.c: Treat an unknown defaults entry as a parse error. [b3ebad73efb2] * plugins/sudoers/defaults.c, plugins/sudoers/sudoers.c: Check return value of setdefs() but don't stop setting defaults if we hit an unknown one. [945e752239ab] * WHATSNEW, aclocal.m4, config.h.in, configure, configure.in, doc/sudo.cat, doc/sudo.man.in, doc/sudo.pod, doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.pod, pathnames.h.in, plugins/sudoers/env.c: If env_reset is enabled, set the MAIL environment variable based on the target user unless MAIL is explicitly preserved in sudoers. [a1b03e2e0e96] 2010-07-17 Todd C. Miller * pp: decode debian code names [8741280d9960] * WHATSNEW: fix typo [a8a19451110b] 2010-07-16 Todd C. Miller * WHATSNEW: Merge with 1.7.4 [9348fa7e15b8] * src/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 SuSE with RLIMIT_NPROC set to RLIM_INFINITY. [786fb272e5fd] 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. [dcafdd53b88f] 2010-07-16 Todd C. Miller * INSTALL: document --with-pam-login [ea93e4c6873c] * doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.pod: The tag is NOSETENV, not UNSETENV. From Petr Uzel. [2ac90d8de36e] 2010-07-15 Todd C. Miller * sudo.pp: Include flavor in solaris package name [e605f6364c9f] * mkpkg: Older shells don't support IFS= so set explictly to space, tab, newline. [7773960bc8a0] * mkpkg: Use '=' not '==' in test [c99d42bc48e6] * mkpkg: Fix typo that prevented debian from matching [84421078fcb7] * mkpkg: Add missing prefix setting for debian [6466f23de4aa] * sudo.pp: Use tab indents to reduce the chance of problem with <<- Fix the debian %set section, pp does not set pp_deb_distro Uncomment %sudo line in sudoers for debian Uncomment some env_keep lines for RHEL, SLES and debian to more closely match the vendor sudoers files. Add /etc/pam.d to %files Remove the /etc/sudo-ldap.conf symlink on debian for ldap flavor [c5b49feb1a0c] * plugins/sudoers/sudoers: Add commented out env_keep entries, sample Aliases and a %sudo line for debian. [387719e52d0f] * configure, configure.in: Move zlib check later on in the script to avoid a strange shell problem on SLES11. [1a3153bb1291] * configure.in: Remove check for egrep; configure has its own [a3b9d98cb5d2] 2010-07-14 Todd C. Miller * mkpkg: Enable zlib for linux distros [8fa51a1405a4] * mkpkg: Add ldap flavor to default build [97644f5a555f] * mkpkg, sudo.pp: Simplify rpm linux distro settings [b9dcf10cdf20] * aclocal.m4, configure, configure.in, doc/UPGRADE, doc/sudoers.cat: Move time stamp files from /var/run/sudo to /var/{db,lib,adm}/sudo. [2c549c1acde9] * Makefile.in: Fix ChangeLog creation from build dir [3d0c7904f173] * plugins/sudoers/sudoers.c: Handle getcwd() failure. [aef7bef87394] * doc/Makefile.in, mkpkg, sudo.pp: Add ldap "flavor" for debian, controlled by the SUDO_FLAVOR environment variable. [be6ed611b7a8] * sudo.pp: Create sudo group on debian [6ed6c032042e] * mkpkg, sudo.pp: Add debian 4/5/6 and use the dot when doing version matches [6bcb664d1f4f] * aclocal.m4, configure: Use a loop when searching for mv, sendmail and sh [d5e9369f8d13] * doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.pod: Remove spurious "and"; from debian [a21e6f7c5b99] * aclocal.m4, configure, configure.in, doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.pod, doc/visudo.cat, doc/visudo.man.in, doc/visudo.pod: Substitute the value of EDITOR into the sudoers and visudo manuals. [cd79e587dd7f] 2010-07-13 Todd C. Miller * mkpkg, pp, sudo.pp: Initial support for debian 4.0 [ac6707915fa8] * mkpkg: Some platforms need -fPIE instead of -fpie [fd6be19e5bc2] * plugins/sudoers/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. [1e10105ade5b] * MANIFEST: Update MANIFEST to match packaging changes [ef86ee557b5b] * sudo.psf: We now use pp to generate HP-UX packages [f7aa8da7844e] * INSTALL.binary, plugins/sudoers/Makefile.binary.in: Remove vestiges of old binary package bits. [afffd005452f] * INSTALL, Makefile.in, common/Makefile.in, compat/Makefile.in, doc/Makefile.in, include/Makefile.in, plugins/sample/Makefile.in, plugins/sample_group/Makefile.in, plugins/sudoers/Makefile.in, src/Makefile.in: install-man -> install-doc [99b5fa05567c] * Makefile.in, doc/Makefile.in, include/Makefile.in, mkpkg, plugins/sudoers/Makefile.in, pp, src/Makefile.in, sudo.pp: Use http://rc.quest.com/topics/polypkg/ for packaging [5ca8eb75b223] * install-sh: Just ignore the -c option, it is the default Add support for -d option [a8b6b0a131e8] 2010-07-12 Todd C. Miller * pathnames.h.in, plugins/sudoers/env.c, plugins/sudoers/logging.c: Use _PATH_STDPATH instead of _PATH_DEFPATH [137fa911908e] * plugins/sudoers/Makefile.in, src/Makefile.in: Do not strip binaries. [20166e287176] * INSTALL, configure, configure.in: Add --insults=disabled configure option to allow people to build in insult support but have the insults disabled unless explicitly enabled in sudoers. [523b8c552e90] * compat/mkstemps.c: Add prototype for gettime() [275eee40473b] * config.h.in, configure, configure.in, plugins/sudoers/auth/pam.c, plugins/sudoers/env.c, plugins/sudoers/sudoers.c, plugins/sudoers/sudoers.h: Add support for a sudo-i pam.d file to be used for "sudo -i". Adapted from a RedHat patch. [06d34f16520b] 2010-07-09 Todd C. Miller * include/missing.h: Fix mkstemps() prototype [2421841e815b] * MANIFEST, compat/Makefile.in, compat/mkstemp.c, compat/mkstemps.c, config.h.in, configure, configure.in, include/missing.h, src/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. [d33172d2c086] 2010-07-08 Todd C. Miller * doc/sudoers.ldap.cat, doc/sudoers.ldap.man.in, doc/sudoers.ldap.pod, plugins/sudoers/ldap.c: 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. [196622436212] 2010-07-07 Todd C. Miller * doc/sudo_plugin.cat, doc/sudo_plugin.man.in, doc/sudo_plugin.pod: Make sudo_plugin format a bit more like a man page [048d596e32da] * plugins/sudoers/toke.c, plugins/sudoers/toke.l: Add suport for negated user/host/command lists in a Defaults entry. E.g. Defaults:!baduser noexec [d41112cf0342] * Makefile.in, common/Makefile.in, compat/Makefile.in, doc/Makefile.in, include/Makefile.in, plugins/sample/Makefile.in, plugins/sample_group/Makefile.in, plugins/sudoers/Makefile.in, src/Makefile.in: Add uninstall target [fea66ebf136a] * common/Makefile.in, compat/Makefile.in: Remove unused AR, SED and RANLIB variables [2ff9928bfdb3] * Makefile.in: Do not install sample plugins [5443b87bd1c3] 2010-07-06 Todd C. Miller * MANIFEST, aclocal.m4, compat/setenv.c, compat/unsetenv.c, configure, configure.in, plugins/sudoers/env.c: Now that sudoers is a dynamically loaded module we cannot override the libc environment functions because the symbols may already have been resolved via libc. Remove getenv/putenv/setenv/unsetenv replacements from sudoers and add replacements for setenv/unsetenv for systems that lack them. [3f2b43cb8851] * configure, configure.in, plugins/sudoers/Makefile.in: Link testsudoers with -ldl when needed [f79606f9fcd7] * plugins/sample_group/plugin_test.c: Remove unused time.h and add limits.h for PATH_MAX [3f5d0074d621] * doc/sudoers.ldap.pod: Fix typo. [bc855fd57397] 2010-07-05 Todd C. Miller * plugins/sample_group/plugin_test.c: Do not depend on strlcpy/strlcat [6e7e2b5af051] * plugins/sample_group/plugin_test.c: Standalone test driver for sudoers group plugin. [eb1235fc3b8e] 2010-07-02 Todd C. Miller * plugins/sudoers/group_plugin.c, src/load_plugins.c: Use RTLD_LAZY instead of RTLD_NOW; was using RTLD_NOW as a debugging aid. [2a34e616229b] * plugins/sample_group/sample_group.c: Fix style nit in function declarations [ab87c7c76bf9] * doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.pod: Document group_plugin syntax. [ed1faf72ddcb] * doc/sudo_plugin.cat, doc/sudo_plugin.man.in, doc/sudo_plugin.pod: Document the sudoers group plugin. [f19a62dc8cfc] * INSTALL, MANIFEST, Makefile.in, config.h.in, configure, configure.in, doc/LICENSE, doc/license.pod, include/sudo_plugin.h, plugins/sample_group/Makefile.in, plugins/sample_group/getgrent.c, plugins/sample_group/sample_group.c, plugins/sudoers/Makefile.in, plugins/sudoers/def_data.c, plugins/sudoers/def_data.h, plugins/sudoers/def_data.in, plugins/sudoers/group_plugin.c, plugins/sudoers/match.c, plugins/sudoers/nonunix.h, plugins/sudoers/set_perms.c, plugins/sudoers/sudoers.c, plugins/sudoers/sudoers.h, plugins/sudoers/testsudoers.c, plugins/sudoers/vasgroups.c, plugins/sudoers/visudo.c, src/sudo.c: Replace built-in non-unix group support with a sudoers group plugin. Include a sample plugin that can read Unix-format group files. [8fc58ce0b1a8] * configure, configure.in, src/load_plugins.c: Add a trailing slash to _PATH_SUDO_PLUGIN_DIR to simplify usage. [5c491dddb8ef] 2010-07-01 Todd C. Miller * doc/sudo.cat, doc/sudo.man.in, doc/sudo.pod, doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.pod: Move sudoers-specific bits out of sudo(8) and into sudoers(5) [e8a5a5830cfe] * aclocal.m4, configure, configure.in: Substitute @io_logdir@ for the sudoers I/O log directory. [21a75ca7b0ab] 2010-06-29 Todd C. Miller * MANIFEST, common/Makefile.in, common/aix.c, common/alloc.c, common/atobool.c, common/fileops.c, common/fmt_string.c, common/lbuf.c, common/term.c, compat/fnmatch.c, compat/getcwd.c, compat/getgrouplist.c, compat/getline.c, compat/glob.c, compat/snprintf.c, config.h.in, configure, configure.in, include/fileops.h, plugins/sample/sample_plugin.c, plugins/sudoers/alias.c, plugins/sudoers/auth/afs.c, plugins/sudoers/auth/aix_auth.c, plugins/sudoers/auth/bsdauth.c, plugins/sudoers/auth/dce.c, plugins/sudoers/auth/fwtk.c, plugins/sudoers/auth/kerb4.c, plugins/sudoers/auth/kerb5.c, plugins/sudoers/auth/pam.c, plugins/sudoers/auth/passwd.c, plugins/sudoers/auth/rfc1938.c, plugins/sudoers/auth/secureware.c, plugins/sudoers/auth/securid.c, plugins/sudoers/auth/securid5.c, plugins/sudoers/auth/sia.c, plugins/sudoers/auth/sudo_auth.c, plugins/sudoers/boottime.c, plugins/sudoers/check.c, plugins/sudoers/defaults.c, plugins/sudoers/env.c, plugins/sudoers/find_path.c, plugins/sudoers/getdate.c, plugins/sudoers/getdate.y, plugins/sudoers/getspwuid.c, plugins/sudoers/goodpath.c, plugins/sudoers/gram.c, plugins/sudoers/gram.y, plugins/sudoers/interfaces.c, plugins/sudoers/iolog.c, plugins/sudoers/ldap.c, plugins/sudoers/logging.c, plugins/sudoers/match.c, plugins/sudoers/parse.c, plugins/sudoers/pwutil.c, plugins/sudoers/set_perms.c, plugins/sudoers/sudo_nss.c, plugins/sudoers/sudoers.c, plugins/sudoers/sudoers.h, plugins/sudoers/sudoreplay.c, plugins/sudoers/testsudoers.c, plugins/sudoers/toke.c, plugins/sudoers/toke.l, plugins/sudoers/tsgetgrpw.c, plugins/sudoers/visudo.c, src/Makefile.in, src/aix.c, src/conversation.c, src/exec.c, src/exec_pty.c, src/get_pty.c, src/load_plugins.c, src/parse_args.c, src/sudo.c, src/sudo.h, src/sudo_edit.c, src/tgetpass.c: Set usrinfo for AIX Set adminstrative domain for the process when looking up user's password or group info and when preparing for execve(). Include strings.h even if string.h exists since they may define different things. Fixes warnings on AIX and others. [cf8b93e872c9] * Makefile.in: Add a separate all target for AIX make which was using the entire LHS (not just the first entry) of the first target as the implicit target. [a45b980a01ef] * plugins/sudoers/env.c: Do not rely on env.env_len when unsetting a variable, just use the NULL terminator. [ca6eb239c829] * plugins/sudoers/env.c: In unsetenv() check for NULL or empty name as per POSIX 1003.1-2008 [7046ba7caa4e] 2010-06-25 Todd C. Miller * plugins/sudoers/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. [152b7c50f426] * plugins/sudoers/sudoers.c: Defer call to sudo_nonunix_groupcheck_cleanup() until after we have closed the sudoers sources. From Quest sudo. [c1cd573bab94] * plugins/sudoers/pwutil.c: Ignore case when matching user/group names in the cache. From Quest sudo. [2aa4ecc7d7f5] 2010-06-24 Todd C. Miller * config.h.in, configure, configure.in, src/selinux.c: Add check for setkeycreatecon() when --with-selinux is specified. [affae247b4e0] * configure, configure.in: Error out if libaudit.h is missing or ununable when --with-linux- audit was specified [d82e743fac04] * doc/HISTORY, doc/history.pod: Add =head3 entries, mostly for the html version [ee93112d0308] 2010-06-22 Todd C. Miller * doc/HISTORY, doc/history.pod: Mention when LDAP was incorporate. [2923dc17f79c] 2010-06-21 Todd C. Miller * configure, configure.in: Define _LINUX_SOURCE_COMPAT on AIX for strsignal() prototype, it is not covered by _ALL_SOURCE. [c92fd69809d0] 2010-06-18 Todd C. Miller * plugins/sudoers/iolog.c: Add a cast to quiet a compiler warning. [a200e07ee1bc] * plugins/sudoers/getdate.c, plugins/sudoers/getdate.y: Quiet a compiler warning. [c9acfc927cea] * plugins/sudoers/defaults.c, plugins/sudoers/sudoers.c: Call set_fqdn() after sudoers has parsed instead of inline as a callback. [5f4e5d075f2d] * WHATSNEW, plugins/sudoers/sudoers.c: Do not call set_fqdn() until sudoers parses (where is gets run as a callback). [09040fca6d40] * WHATSNEW: mention the change in tty ticket behavior when there is no tty [575a1fd98f05] * plugins/sudoers/check.c: Do not update tty ticket if there is no tty. [63f9c33ce6a7] * doc/LICENSE, doc/license.pod: Update copyright year [0722ab5d404b] * doc/Makefile.in: Do not rely on BSD make's $> [936a86398bd9] * configure, configure.in: Set timedir to /var/db/sudo for darwin to match Apple sudo's location [d5b9b03096f1] 2010-06-16 Todd C. Miller * plugins/sudoers/sudoers.h: Add stub declarations for struct stat and struct timeval [f6d90551a4fd] * MANIFEST: Remove compat/sigaction.c [d0ed6d9a770e] * config.h.in, configure, configure.in, plugins/sudoers/defaults.c, plugins/sudoers/iolog.c, plugins/sudoers/sudoreplay.c: Check for zlib.h in addition to libz. [6e191b4a6065] * MANIFEST, src/Makefile.in, src/exec.c, src/exec_pty.c, src/sudo.h, src/sudo_exec.h: Move functions and symbols shared between exec.c and exec_pty.c into sudo_exec.h. [14ae63403544] * doc/Makefile.in: Comment out rules to build .man.in and .cat files unless --with- devel [3cf7e5606a85] * doc/Makefile.in: Comment out rules to build .man.in and .cat files unless --with- devel [d30495b0e29e] * src/parse_args.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. [d633f74fe2d9] * doc/Makefile.in: Add back .man suffix [6e63b60a2739] * INSTALL, MANIFEST, WHATSNEW, config.h.in, configure, configure.in, plugins/sudoers/Makefile.in, plugins/sudoers/audit.c, plugins/sudoers/bsm_audit.c, plugins/sudoers/linux_audit.c, plugins/sudoers/linux_audit.h, plugins/sudoers/logging.h, src/selinux.c: Add Linux audit support. [5a2f445e0bd4] 2010-06-15 Todd C. Miller * plugins/sudoers/iolog.c: Remove an XXX [a170cbe651d1] * doc/sudoreplay.cat, doc/sudoreplay.man.in, doc/sudoreplay.pod, plugins/sudoers/sudoreplay.c: Add -f (filter) option to sudoreplay to allow certain streams to be replayed and others ignored. [62e51b432ea1] * src/load_plugins.c, src/parse_args.c, src/sudo.c, src/sudo.h, src/tgetpass.c: Fix -A flag when askpass is specified in sudo.conf or if sudo doesn't need to read a password. [2e401e4a00e3] * src/exec.c, src/exec_pty.c, src/parse_args.c, src/sudo.c, src/sudo.h, src/sudo_edit.c, src/tgetpass.c: Clean up some XXXs [689f0b002d3d] * WHATSNEW, doc/sudoers.ldap.cat, doc/sudoers.ldap.man.in, doc/sudoers.ldap.pod, plugins/sudoers/ldap.c: Add support for multiple sudoers_base entries in ldap.conf. From Joachim Henke [e3e4a3c2bd5b] * config.h.in, configure, configure.in, plugins/sudoers/logging.c, src/exec_pty.c: remove setsid check, we require a POSIX system [cc73cb9e22c0] * plugins/sudoers/logging.c, src/exec_pty.c, src/selinux.c, src/sudo.c, src/tgetpass.c: Check for dup2() failure. [5d46d66794f5] * config.h.in, configure, configure.in: Remove dup2() check, it is not optional. [5f1d56de4384] 2010-06-14 Todd C. Miller * WHATSNEW: sync with sudo 1.7.3 [88e5c0bd6d59] * INSTALL: SunOS does not ship with an ANSI compiler [f13c85c67069] * INSTALL: Update OS specific notes. Delete some really ancient ones and move older ones to the end of the list. [59ce592c4c52] * README: Sudo can be downloaded from the web site too Mention "OS dependent notes" section in INSTALL [191871538984] * src/exec_pty.c, src/selinux.c: Call selinux_restore_tty() as part of cleanup() so it gets called from error()/errorx() [bb017da6b6da] * MANIFEST, doc/PORTING: Remove obsolete porting guide [321e35591344] * plugins/sudoers/interfaces.h, plugins/sudoers/match.c: Move union sudo_in_addr_un into interfaces.h [b2c8b19ee094] * doc/Makefile.in: Remove useless circular dependencies [5682181b59cf] * plugins/sudoers/auth/afs.c, plugins/sudoers/auth/aix_auth.c, plugins/sudoers/auth/bsdauth.c, plugins/sudoers/auth/dce.c, plugins/sudoers/auth/fwtk.c, plugins/sudoers/auth/kerb4.c, plugins/sudoers/auth/kerb5.c, plugins/sudoers/auth/pam.c, plugins/sudoers/auth/passwd.c, plugins/sudoers/auth/rfc1938.c, plugins/sudoers/auth/secureware.c, plugins/sudoers/auth/securid.c, plugins/sudoers/auth/securid5.c, plugins/sudoers/auth/sia.c: Convert to ANSI C function declarations [a4f76927d034] * common/alloc.c, common/fileops.c, common/gettime.c, common/list.c, common/zero_bytes.c, compat/charclass.h, compat/closefrom.c, compat/fnmatch.c, compat/glob.c, compat/isblank.c, compat/memrchr.c, compat/mkstemp.c, compat/nanosleep.c, compat/snprintf.c, compat/strcasecmp.c, compat/strerror.c, compat/strlcat.c, compat/strlcpy.c, compat/timespec.h, compat/utime.h, compat/utimes.c, doc/HISTORY, doc/history.pod, doc/license.pod, include/alloc.h, include/error.h, include/lbuf.h, include/list.h, include/missing.h, pathnames.h.in, plugins/sudoers/alias.c, plugins/sudoers/audit.c, plugins/sudoers/auth/sudo_auth.h, plugins/sudoers/boottime.c, plugins/sudoers/bsm_audit.c, plugins/sudoers/bsm_audit.h, plugins/sudoers/defaults.c, plugins/sudoers/defaults.h, plugins/sudoers/find_path.c, plugins/sudoers/getspwuid.c, plugins/sudoers/goodpath.c, plugins/sudoers/gram.y, plugins/sudoers/interfaces.c, plugins/sudoers/interfaces.h, plugins/sudoers/logging.c, plugins/sudoers/logging.h, plugins/sudoers/match.c, plugins/sudoers/parse.h, plugins/sudoers/plugin_error.c, plugins/sudoers/pwutil.c, plugins/sudoers/redblack.c, plugins/sudoers/redblack.h, plugins/sudoers/sudo_nss.h, plugins/sudoers/sudoers.h, plugins/sudoers/sudoreplay.c, plugins/sudoers/testsudoers.c, plugins/sudoers/timestr.c, plugins/sudoers/toke.l, plugins/sudoers/visudo.c, src/aix.c, src/conversation.c, src/error.c, src/load_plugins.c, src/parse_args.c, src/sesh.c, src/sudo.h, src/sudo_noexec.c, src/sudo_plugin_int.h, src/sudo_usage.h.in, src/tgetpass.c: Update copyright year [26ac7991f7d8] * doc/Makefile.in: Fix commented DEVDOCS when not in devel mode. [e0a97eaf3793] * plugins/sudoers/match.c: Quiet a compiler warning. [b2a17ebd5d38] * plugins/sudoers/getdate.c, plugins/sudoers/getdate.y: Quiet a compiler warning. [687843bc593d] * plugins/sudoers/ldap.c, plugins/sudoers/sudoers.h: Make all functions in ldap.c static [b2111e89eeba] * doc/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. [69f4c5ccaf89] 2010-06-11 Todd C. Miller * configure, configure.in, doc/Makefile.in, doc/sudo.cat, doc/sudo.man.in, doc/sudo_plugin.cat, doc/sudo_plugin.man.in, doc/sudoers.cat, doc/sudoers.ldap.cat, doc/sudoers.ldap.man.in, doc/sudoers.man.in, doc/sudoreplay.cat, doc/sudoreplay.man.in, doc/visudo.cat, doc/visudo.man.in: Leave rules to build .man.in and .cat files uncommented but only make them part of the "all" rule in devel mode. Generate .cat files directly from .man.in instead of .man using default values in configure.in [c3054a44f6a5] * configure, configure.in: Bump sudo version to 1.8.0b1 [8f79c85135e1] * configure, configure.in, src/sudo.c, src/sudo_usage.h.in: Print configure args with verbose version information. [1ce690660ed2] * TODO, plugins/sudoers/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. [1743f9a286e4] 2010-06-10 Todd C. Miller * WHATSNEW: Describe tty timestamp improvements [e214e863a313] * plugins/sudoers/toke.c, plugins/sudoers/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 [ea2e990f85ed] * doc/sudoers.pod: Make this read a little bit better when passwd_timeout is 0. [39d362757f31] * doc/sudo.man.in, doc/sudo.man.pl, doc/sudo.pod: Attempt to handle a default password prompt timeout of zero more gracefully. [ea47d43acf5b] * plugins/sudoers/toke.c, plugins/sudoers/toke.l: Do not override value of keepopen global, instead restore it to the value we pushed onto the stack when popping. [fe282e5a3402] * plugins/sudoers/Makefile.in: Add dependency for utility programs on libreplace and libcommon [2339aba64928] * compat/sigaction.c, config.h.in, configure.in, include/compat.h, plugins/sudoers/logging.c, plugins/sudoers/mon_systrace.c, src/exec.c, src/exec_pty.c, src/tgetpass.c: Remove sigaction emulation Use SA_INTERRUPT in sa_flags [7dd61f1bd8d2] * MANIFEST, config.h.in, configure, configure.in, include/missing.h: We don't use getgrouplist() at the moment so there's no need to provide a compat version. [1597536fbada] * TODO: sync with reality [9e1a874e7885] * include/sudo_plugin.h, plugins/sudoers/auth/sudo_auth.c, src/conversation.c, src/sudo.h, src/tgetpass.c: Fix visiblepw sudoers option; the plugin API portion still needs documenting [60b6933ef5e0] * src/sudo.c: Print sudo version as well. [987ed459b459] * plugins/sudoers/iolog.c, plugins/sudoers/sudoers.c: Use sudo_printf for I/O log version Clarify policy plugin version string [5a58b7e8c80b] * plugins/sudoers/getdate.c, plugins/sudoers/getdate.y, plugins/sudoers/ldap.c, plugins/sudoers/sudoreplay.c: Silence some compiler warnings [afb1eba90915] * src/load_plugins.c, src/tgetpass.c: Store askpass path in a global instead of uses setenv() which many systems lack. [b440bcc0e660] 2010-06-09 Todd C. Miller * doc/sudo.cat, doc/sudo.man.in, doc/sudo.pod, doc/sudo_plugin.cat, doc/sudo_plugin.man.in, doc/sudo_plugin.pod, plugins/sudoers/check.c, plugins/sudoers/def_data.c, plugins/sudoers/def_data.h, plugins/sudoers/def_data.in, plugins/sudoers/defaults.c, plugins/sudoers/sudoers.c, plugins/sudoers/sudoers.h, src/load_plugins.c, src/parse_args.c, src/tgetpass.c: Move askpass path specification from sudoers to sudo.conf. [5507ab867c26] * src/exec.c, src/exec_pty.c, src/sudo.c, src/sudo.h: Use a flag bit in struct command_details for selinux instead of a separate field. [c59ca4acded9] * src/exec.c, src/exec_pty.c, src/sudo.c, src/sudo.h: Implement background mode. If I/O logging we use pipes instead of a pty. [c07a4b356cbd] * compat/mksiglist.c, compat/strsignal.c, include/compat.h, src/exec.c, src/exec_pty.c, src/tgetpass.c: Move compat definition of NSIG to compat.h [ab0385467f25] * doc/sudo.cat, doc/sudo.man.in, doc/sudo.pod, doc/sudo_plugin.cat, doc/sudo_plugin.man.in, doc/sudo_plugin.pod: Mention plugins in the sudo manual and add some missing path substitution in the sudo_plugin manual. [570f831f47a3] * src/Makefile.in: Set _PATH_SUDO_CONF based on $(sysconfdir) [fde51869cf07] * common/lbuf.c, common/term.c, config.h.in, configure, configure.in, src/exec.c, src/exec_pty.c, src/ttysize.c: Require POSIX termios to build sudo [9ec6b41f3f95] * src/tgetpass.c: Ignore SIGPIPE for "sudo -S" [7ad27fde0c06] * src/tgetpass.c: Fix uninitialized variable in TGP_ECHO case and print a newline if the user interrupted password input. [ce19204d8dd4] * src/tgetpass.c: Make TGP_ECHO override TGP_MASK and don't try to restore the terminal if we didn't modify it. [a7e11abfe7e4] * doc/sudo_plugin.cat, doc/sudo_plugin.man.in, doc/sudo_plugin.pod, include/sudo_plugin.h, plugins/sudoers/auth/sudo_auth.c, src/conversation.c, src/sudo.h, src/tgetpass.c: Add SUDO_CONV_PROMPT_MASK define which corresponds to the "pwfeedback" sudoers option. Do not disable echo if TGP_ECHO is set. [e0550590cabe] * src/exec_pty.c: Use POSIX tcgetpgrp() instead of BSD TIOCGPGRP ioctl [762448182fe3] 2010-06-08 Todd C. Miller * src/exec.c, src/exec_pty.c, src/selinux.c, src/sudo.c, src/sudo.h: Add selinux_enabled flag into struct command_details and set it in command_info_to_details(). Return an error from selinux_setup() instead of exiting. Call selinux_setup() from exec_setup(). [011bea23a5a0] 2010-06-09 Todd C. Miller * src/exec_pty.c: Remove commented out copy of old sudo_execve() function. [9c5e21380472] 2010-06-08 Todd C. Miller * plugins/sudoers/sudoers.c: Fix setting selinux type on command line. [814b20a0b3be] * plugins/sudoers/iolog.c: In sudoers_io_close(), skip NULL io_fds[] elements. [4011ff7d4daf] * include/compat.h: No longer need NGROUPS_MAX define [cae4c49d7077] * compat/nanosleep.c, config.h.in, configure, configure.in, include/compat.h, plugins/sudoers/check.c, plugins/sudoers/iolog.c, plugins/sudoers/visudo.c, src/sudo_edit.c: Replace timerfoo macros with timevalfoo since the timer macros are known to be busted on some systems. [4f97d79f2d41] * src/exec_pty.c: Remove duplicate call to selinux_setup(). [82bd52764e21] * plugins/sudoers/auth/pam.c: If pam_open_session() fails, pass its status to pam_end. [1d8de4cf8ff3] * plugins/sudoers/toke.c, plugins/sudoers/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). [ade99a4549a4] * WHATSNEW, doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.pod, plugins/sudoers/def_data.c, plugins/sudoers/def_data.h, plugins/sudoers/def_data.in, plugins/sudoers/iolog.c: Add use_pty sudoers option to force use of a pty even when not logging I/O. [b280a8972a79] * plugins/sudoers/env.c, plugins/sudoers/sudoers.h: Make env_init() void as it never fails. [d3890e55daa7] * plugins/sudoers/env.c: No longer use _NSGetEnviron so don't need crt_externs.h [9b4e0e139881] * plugins/sudoers/env.c: Remove unused VNULL define [a42cacb263e3] 2010-06-07 Todd C. Miller * plugins/sudoers/iolog.c: Add #define for maximum session id [9e18c17a28c2] * MANIFEST, src/Makefile.in, src/exec.c, src/exec_pty.c, src/sudo.h: Split exec.c into exec.c and exec_pty.c [d52376327332] * MANIFEST: Sync with source file moves. [4a62c6c9e846] * src/Makefile.in, src/get_pty.c, src/pty.c: Rename pty.c -> get_pty.c [5696a12bd29b] 2010-06-06 Todd C. Miller * plugins/sudoers/iolog.c: Only use I/O input log file if def_log_input is set and output file if def_log_output is set. [d866992f1681] 2010-06-04 Todd C. Miller * compat/strsignal.c: Update copyright year [a96f2593fd4e] * src/pty.c: uid -> ttyuid [c3454d74ebcb] * plugins/sudoers/sudoers.c: For sudoedit, make a local copy of editor string si become part of argv. If no editor environment variable, split def_editor on ':' since it may be a colon-delimited path. [2ee298506a6e] * src/sudo_edit.c: Remove unneeded endpwent()/endgrent() [623f6743d101] * doc/Makefile.in: Use value of nroff from configure [b2ce649125ab] * src/exec.c: Add missing const to I/O log action function [d764a3955e04] * plugins/sudoers/check.c: Update copyright year and fix whitespace [e648c35b16be] * configure, configure.in: Fix typo [8e0bdfc47da4] * plugins/sudoers/iolog.c: Remove redundant tty signal blocking in log function. [f17f575dabd4] 2010-06-03 Todd C. Miller * plugins/sudoers/iolog.c: Place static keyword where it belongs [b01aec7c86b4] * plugins/sudoers/logging.c: Always use a printf format string for send_mail() [13b1ada644c9] * common/atobool.c, plugins/sudoers/ldap.c: Extend atobool() so we can use it in the LDAP code. [73f8e6807044] * doc/sudo.cat, doc/sudo.man.in, doc/sudo.pod: Sudo now stashes tty ctime for tty_tickets on Solaris too. [e82df13ad3fd] * plugins/sudoers/boottime.c: Fix dummy version of get_boottime() [01d69c06013b] 2010-06-02 Todd C. Miller * plugins/sudoers/check.c: Enable tty_is_devpts() support for Solaris with the "devices" filesystem. [237c6b25fa84] * src/exec.c: Unbreak the non-io logging case. [4822b9f709fb] * src/conversation.c, src/sudo.c, src/sudo_plugin_int.h: Fix symbol name conflict with sudo_printf. [0d44eab0a8f6] * plugins/sudoers/auth/pam.c: Fix OpenPAM detection for newer versions. [1b2abed232d8] * plugins/sudoers/vasgroups.c: Sync with Quest sudo git repo [f1d98b3cba02] * aclocal.m4, configure, configure.in: HP-UX ld uses +b instead or -R or -rpath Fix typo in libvas check Add missing template for ENV_DEBUG Adapted from Quest sudo [695dbd7b28f4] * README.LDAP: Fix typos; from Quest Sudo [4eba9da33b8e] 2010-06-01 Todd C. Miller * plugins/sudoers/Makefile.in: Add back -I$(top_srcdir); we need it for including compat/foo.h since we cannot rely on "foo.h" being found relative to the source file when the cwd is different. [bbf24695f325] * src/exec.c: Fix a bug where we could treat EAGAIN as a permanent error. Also set cstat if perform_io() returns an error. [200475c4326f] * common/alloc.c, plugins/sudoers/boottime.c, plugins/sudoers/sudoers.c: Add casts to quiet compiler warnings. [85eb1c336697] * plugins/sudoers/sudoreplay.c, plugins/sudoers/testsudoers.c, plugins/sudoers/visudo.c: Fix typo in ternary operator usage. [6492ac1450e2] 2010-05-30 Todd C. Miller * INSTALL, configure, configure.in: Add --enable-warnings and fix typo in SUDO_IO_LOGDIR [92121d693b30] * doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.pod, doc/sudoreplay.cat, doc/sudoreplay.man.in, doc/sudoreplay.pod: Update docs to match sudoers I/O logging changes [18d651989e49] * INSTALL, WHATSNEW, aclocal.m4, configure, configure.in, pathnames.h.in, plugins/sudoers/def_data.c, plugins/sudoers/def_data.h, plugins/sudoers/def_data.in, plugins/sudoers/defaults.c, plugins/sudoers/gram.c, plugins/sudoers/gram.h, plugins/sudoers/gram.y, plugins/sudoers/iolog.c, plugins/sudoers/parse.c, plugins/sudoers/parse.h, plugins/sudoers/sudoers.c, plugins/sudoers/sudoreplay.c: Break sudoers transcript feature up into log_input and log_output. [db3c1248d2ad] * plugins/sudoers/sudoreplay.c, plugins/sudoers/testsudoers.c, plugins/sudoers/visudo.c: Use setprogname() as needed. [6beee63a4553] * plugins/sudoers/iolog.c, plugins/sudoers/sudoreplay.c: Adapt sudoreplay to iolog changes. [581f52c05f0f] 2010-05-29 Todd C. Miller * plugins/sudoers/iolog.c: Log all input and output into separate files and store a number on each timing file line to indicate which file the data is in. [fb460c5273dd] * plugins/sudoers/iolog.c, plugins/sudoers/sudoers.c, plugins/sudoers/sudoers.h: Make sudoers_io functions static to iolog.c [b2df3cc3eecb] 2010-05-28 Todd C. Miller * doc/sudo.cat, doc/sudo.man.in, doc/sudo.pod, src/parse_args.c, src/sudo_usage.h.in: Completely remove the -L flag from the sudo front end. [3d220030b720] * plugins/sudoers/sudoreplay.c: Fix EAGAIN handling when writing to stdout. [4766d77cea49] * plugins/sudoers/sudoers.c: Eliminate unused variables [83bd711e79c4] * plugins/sudoers/sudoers.c, src/exec.c, src/sudo.c: Re-enable cleanup functions in sudoers plugin and sudo driver for error()/errorx(). [43093f937dd8] * plugins/sudoers/auth/sudo_auth.c, plugins/sudoers/defaults.c, plugins/sudoers/interfaces.c, plugins/sudoers/iolog.c, plugins/sudoers/parse.c, plugins/sudoers/sudoers.c, plugins/sudoers/testsudoers.c, plugins/sudoers/visudo.c: Use sudo_printf to display verbose version information. [435cc9f8d4a2] * common/Makefile.in, compat/Makefile.in, plugins/sample/Makefile.in, plugins/sudoers/Makefile.in, src/Makefile.in: Minor Makefile cleanup: fix a typo, change the removal order in the clean targets, and remove a superfluous include path for the sudoers plugin. [6e3b2d6b4437] * plugins/sudoers/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. [c1bbb88d0435] 2010-05-27 Todd C. Miller * plugins/sudoers/Makefile.in: Use explicit path to source file instead of $< for files that live in devdir and top_srcdir. [358ab7f6cc64] * plugins/sudoers/Makefile.in: Add explicit rules to compile gram.c and toke.c for HP-UX Pevent ending LIBSUDOERS_OBJS with a backslash [481a5c96d47e] * plugins/sudoers/Makefile.in, src/Makefile.in: Link libcommon before libreplace since libcommon may use functions only present in libreplace. [1847c496ff5b] * common/Makefile.in: Move code common to sudo and the sudoers plugin to a convenience library, libcommon. Removes the need to make links in the sudoers plugin dir and reduces re-compilation of duplicate object files. [4c8986352937] * Makefile.in, common/alloc.c, common/atobool.c, common/fileops.c, common/fmt_string.c, common/gettime.c, common/lbuf.c, common/list.c, common/term.c, common/zero_bytes.c, configure, configure.in, plugins/sample/Makefile.in, plugins/sudoers/Makefile.in, src/Makefile.in, src/alloc.c, src/atobool.c, src/fileops.c, src/fmt_string.c, src/gettime.c, src/lbuf.c, src/list.c, src/term.c, src/zero_bytes.c: Move code common to sudo and the sudoers plugin to a convenience library, libcommon. Removes the need to make links in the sudoers plugin dir and reduces re-compilation of duplicate object files. [1d1d98bd55b9] * src/exec.c, src/sudo.c, src/sudo.h: Rename script_execve to sudo_execve and rename script_foo in exec.c [a35ec80de96a] * MANIFEST, src/Makefile.in, src/exec.c, src/script.c: rename script.c exec.c and fix up the MANIFEST file [36bc3bff9578] * src/script.c, src/sudo.c, src/sudo.h: Rename script_setup() to pty_setup() and call from script_execve() directly. [899b0fb2a14d] * configure, configure.in: bump version to 1.8.0a2 [0b1c1ca9d4e5] * doc/sudo_plugin.cat, doc/sudo_plugin.man.in, doc/sudo_plugin.pod: Document init_session [b5324785a406] * plugins/sudoers/auth/API, plugins/sudoers/auth/sudo_auth.c, plugins/sudoers/auth/sudo_auth.h: Clean up the sudoers auth API a bit and update the docs. [c40fd4cb6e68] * include/sudo_plugin.h, plugins/sudoers/auth/pam.c, plugins/sudoers/auth/sudo_auth.c, plugins/sudoers/sudoers.c, plugins/sudoers/sudoers.h, src/script.c, src/sudo.c: Add init_session function to struct policy_plugin that gets called before the uid/gid/etc changes. A struct passwd pointer is passed in,which may be NULL if the user does not exist in the passwd database.The sudoers module uses init_session to open the pam session as needed. [d71723320ee8] 2010-05-26 Todd C. Miller * plugins/sudoers/auth/pam.c, plugins/sudoers/auth/sudo_auth.c, plugins/sudoers/auth/sudo_auth.h, plugins/sudoers/set_perms.c, plugins/sudoers/sudoers.c, plugins/sudoers/sudoers.h: Add open/close session to sudo auth, only used by PAM. This allows us to open (and close) the PAM session from sudoers. [2665e2920d0d] * plugins/sudoers/Makefile.in: Add explicit rule to build getdate.o for HP-UX make. [7f049e989956] * plugins/sudoers/Makefile.in: Back out most of change 45e406ebdea2. Create dummy .l.c and .y.c rules as an alternate way to prevent HP-UX make (and others) from trying to rebuild the parser in non-dev mode. [f84badad98c5] * plugins/sudoers/sudoers.c: Re-enable PATH_MAX check for command [40d8a50da136] * Makefile.in: For distclean, clean the main directory last since the subdirs need to be able to run libtool to clean things. [8949a9861634] * compat/Makefile.in: Fix generation of mksiglist.h [b7cdc9b36650] * src/script.c: Now that we defer sending cstat until the end of script_child() we cannot reuse cstat when reading command status from parent. [25c882643466] 2010-05-25 Todd C. Miller * configure, configure.in, doc/sudo.man.in, doc/sudo.man.pl, doc/sudoers.cat, doc/sudoers.ldap.cat, doc/sudoers.ldap.man.in, doc/sudoers.man.in, doc/sudoers.man.pl, doc/sudoreplay.cat, doc/sudoreplay.man.in, doc/visudo.cat, doc/visudo.man.in: Use numeric registers to handle conditionals instead of trying to do it all with text processing. [478079c3fd4b] * doc/sudoers.pod: Document per-command SELinux settings [13840d566805] * plugins/sudoers/sudoers.c: Repair "sudo -l -U username" [10a0dcdf2ddf] * plugins/sudoers/sudoers.c: Set selinux role and type in command details. [8ae6d35a126d] * src/script.c, src/selinux.c, src/sudo.h: Rework SELinux support. [83279cc94bf2] 2010-05-24 Todd C. Miller * src/script.c, src/selinux.c, src/sudo.h: Make SELinux support compile again. Needs more work to be complete. [3d3addebcf82] * doc/sudo_plugin.cat, doc/sudo_plugin.man.in, doc/sudo_plugin.pod, plugins/sudoers/sudoers.c, plugins/sudoers/sudoers.h, src/parse_args.c, src/script.c, src/selinux.c, src/sudo.c, src/sudo.h: Bring back closefrom settings. [b1c6257d4bbb] * plugins/sudoers/iolog.c, plugins/sudoers/sudoers.c, plugins/sudoers/sudoers.h: If running a command or sudoedit in transcript mode, call io_nextid() before log_allowed() so the session id is logged. [c42f3ae40150] * configure, configure.in: Use mandoc(1) if nroff(1) is not present. [daad4bbd04af] * doc/Makefile.in: Use the --file argument to config.status instead of setting CONFIG_FILES in the environment. [c89411a8bf70] * plugins/sudoers/Makefile.in: We cannot conditionally update gram.h or the dependency ordering gets messed up in devel mode. [c938953231d9] 2010-05-21 Todd C. Miller * Makefile.in, compat/Makefile.in, configure, configure.in, doc/Makefile.in, include/Makefile.in, plugins/sample/Makefile.in, plugins/sudoers/Makefile.in, src/Makefile.in: Substitute @SHELL@ into Makefiles [36aa6a095335] * config.sub: Fix typo [16d294d26b58] * config.guess, config.sub, configure, configure.in: Update to autoconf 2.65 [4fa6ea8caea3] * Makefile.in: Fix libtool target (space vs. tabs) [755cf3892618] * config.h.in, plugins/sudoers/logging.h, plugins/sudoers/visudo.c: Remove use of RETSIGTYPE; all modern systems have signal handlers that return void. [42b4e3aee668] * Makefile.in, aclocal.m4, acsite.m4, configure, configure.in, ltmain.sh, m4/libtool.m4, m4/ltoptions.m4, m4/ltsugar.m4, m4/ltversion.m4, m4/lt~obsolete.m4, plugins/sample/Makefile.in, plugins/sudoers/Makefile.in, src/Makefile.in: Update to libtool-2.2.6b. I haven't made any local modifications this time, which should be OK since we install sudo_noexec.so by hand now. [6f79ced593bb] * compat/Makefile.in, plugins/sample/Makefile.in, plugins/sudoers/Makefile.in, src/Makefile.in: Use libtool to clean objects [1581057d6472] * include/Makefile.in: Install sudo_plugin.h as part of "make install" and make other install targets callable from the top-level Makefile [aaaeb027d774] * configure, configure.in: regen with autoupdate to eliminate AC_TRY_LINK [5d5541c230f5] * Makefile.in, compat/Makefile.in, configure, configure.in, doc/Makefile.in, plugins/sample/Makefile.in, plugins/sudoers/Makefile.in, src/Makefile.in: Install sudo_plugin.h as part of "make install" and make other install targets callable from the top-level Makefile [b258b8401b1c] * plugins/sample/sample_plugin.c: The sample plugin doesn't support being run with no args so return a usage error in this case. [473b3cf965be] * plugins/sudoers/iolog.c: Set close on exec flag for descriptors used for I/O logging so they are not present in the command being run. [2c7e8708df76] * plugins/sudoers/tsgetgrpw.c: Set close on exec flag in private versions of setpwent() and setgrent(). [64fef78cb833] * src/script.c: Close the I/O pipes aftering dup2()ing them to std{in,out,err}. Fixes extra fds being present in the command when it is part of a pipeline. [060451617713] * plugins/sudoers/sudoers.c: Set user_tty to "unknown" if there is no tty, like sudo 1.7 does (it is used when logging). Note that user_ttypath will still be NULL if there is no tty. [31b69a6ecda7] * src/script.c, src/sudo.h: Cosmetic changes: add comments, remove orphaned prototype and make a global static. [f7851af0143e] 2010-05-20 Todd C. Miller * src/script.c: Move check for maxfd == -1 to flush_output where it belongs. [b826a95b4491] * src/script.c: Break out of select loop if all the fds we want to select on are -1. [f5b387024238] * src/sudo.c: Avoid possible malloc(0) if plugin returns an empty groups list. [9765a8fe5ce7] * src/sudo.c: Add debugging info when calling plugin close function [95a273c7ff66] * src/script.c: Avoid closing stdin/stdout/stderr when we are piping output. [330e76423caf] * src/script.c: When execve() of the command fails, it is possible to receive SIGCHLD before we've read the error status from the pipe. Re-order things such that we send the final status at the very end and prefer error status over wait status. [b0dcf825244f] 2010-05-19 Todd C. Miller * plugins/sudoers/auth/sudo_auth.c: Fix compilation for non PAM/BSD auth/AIX auth [e382b39d2e4f] 2010-05-18 Todd C. Miller * src/script.c: Additional checks to make sure we don't close /dev/tty by mistake. When flushing, sleep in select as long as we have buffers that need to be written out. [8139cbd3dd54] * src/script.c: Now that we can use pipes for stdin/stdout/stderr there is no longer a need to error out when there is no tty. We just need to make sure we don't try to use the tty fd if it is -1. [666621635d26] 2010-05-17 Todd C. Miller * doc/sudo_plugin.cat, doc/sudo_plugin.man.in, doc/sudo_plugin.pod, include/sudo_plugin.h, plugins/sample/sample_plugin.c, plugins/sudoers/iolog.c, plugins/sudoers/sudoers.h, src/sudo.c: Add argc and argv to I/O logger open function. [0d7faa007d27] * doc/sudo_plugin.man.in, doc/sudo_plugin.pod, include/sudo_plugin.h, plugins/sample/sample_plugin.c, plugins/sudoers/sudoers.c, src/parse_args.c, src/sudo.c, src/sudo_edit.c: Remove check_sudoedit function pointer in struct sudo_policy. Instead, sudo will set sudoedit=true in the settings array. The plugin should check for this and modify argv_out as appropriate in check_policy. [c0328e3276b8] 2010-05-16 Todd C. Miller * plugins/sample/sample_plugin.c, src/sudo.c, src/sudo.h, src/sudo_edit.c: If plugin sets "sudoedit=true" in the command info, enable sudoedit mode even if not invoked as sudoedit. This allows a plugin to enable sudoedit when the user runs an editor. [96d67b99e42e] 2010-05-15 Todd C. Miller * plugins/sudoers/Makefile.in: gram.h must not depend on gram.y if we want to avoid unnecessary rebuilding of targets dependent on gram.h when gram.y changes. [9db4b767fdca] * plugins/sample/sample_plugin.c: Refactor common bits of check_policy and check_edit [ac4d366a04cf] * plugins/sample/sample_plugin.c: Add sudoedit support [a1a6cc4c0cef] 2010-05-14 Todd C. Miller * plugins/sudoers/Makefile.in: Rely more on VPATH; fixes a dependency issue with the parser. [45e406ebdea2] * include/compat.h: Fix typo introduced in last commit [3ccb0f853d11] * include/compat.h: Emulate seteuid using setreuid() or setresuid() as needed. There are still a few places that call seteuid() directly. [36e8efa3a99d] * src/parse_args.c, src/sudo_edit.c: Attempt to fix building on systems that only have setuid. [8e9ba4083318] * doc/sudo_plugin.cat, doc/sudo_plugin.man.in, doc/sudo_plugin.pod: Clarify sudoedit a tad. [d39dfaa14ade] 2010-05-13 Todd C. Miller * src/sudo_edit.c: Fix compilation on HP-UX [f6e47843d139] * doc/sudo_plugin.cat, doc/sudo_plugin.man.in, doc/sudo_plugin.pod: Document sudoedit [4cbf5196d993] * plugins/sudoers/sudoers.c, src/sudo.c, src/sudo.h, src/sudo_edit.c: Change how we handle the sudoedit argv. We now require that there be a "--" in argv to separate the editor and any command line arguments from the files to be edited. [20623d549a3c] * include/sudo_plugin.h, plugins/sample/sample_plugin.c, plugins/sudoers/Makefile.in, plugins/sudoers/gettime.c, plugins/sudoers/set_perms.c, plugins/sudoers/sudoers.c, src/Makefile.in, src/gettime.c, src/parse_args.c, src/sudo.c, src/sudo.h, src/sudo_edit.c: Work in progress support for sudoedit. The actual interface used by the plugin for sudoedit is likely to change. [c31262a31997] * plugins/sudoers/find_path.c, plugins/sudoers/sudoers.c, plugins/sudoers/sudoers.h, plugins/sudoers/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 argument. [9c23101a094d] * plugins/sudoers/env.c: Add version of getenv(3) that uses our own environ pointer. [0e3783e63534] 2010-05-12 Todd C. Miller * src/script.c: Avoid a potential race condition if SIGCHLD is received immediately before we call select(). [99adc5ea7f0a] * plugins/sudoers/sudoers.c: Call env_init() before we open the sudoers sources as those may call our setenv() replacement. [5f82601f5ab0] * plugins/sudoers/env.c: Initialize env_len in env_init() [7ae02b3029b5] 2010-05-11 Todd C. Miller * doc/sudo.cat, doc/sudo.man.in, doc/sudo.pod: Document time stamp shortcomings under SECURITY NOTES Use "time stamp" instead of timestamp. [2b86120815b2] * doc/Makefile.in: Make sed substitution of mansectsu and mansectform global. [94588632dba0] * plugins/sudoers/check.c: If the tty lives on a devpts 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. [0e62a31bceb0] * src/tgetpass.c: Fix pasto in mulitple signal fix and use _NSIG not NSIG since that is what our compat checks set. [df50f0a040c9] * configure, configure.in: Add check for whether sudo need to link with -ldl to get dlopen(). This is a bit of a hack that will get reworked when libtool is updated. [63bdcf579533] * plugins/sudoers/check.c: Fix timestamp removal with -k/-K [6b4639fef973] * plugins/sudoers/Makefile.in: audit.c is now private to the sudoers plugin [1974f342ae0b] * configure, configure.in: Link with -lpthread on HP-UX since a plugin may be linked with -lpthread and dlopen() will fail if the shared object has a dependency on -lpthread but the main program is not linked with it. [d42139391263] * config.h.in, configure, configure.in, plugins/sudoers/set_perms.c: Add separate test for getresuid() since HP-UX has setresuid() but no getresuid(). [910fe727a374] * doc/Makefile.in: Remove errant backslash [dd5464257c69] * src/script.c: Fix SIGPIPE handling. Now that we use may use pipes for stdin/stdout we need to pass any SIGPIPE we receive to the running command. [3f6b1991f4fd] * src/script.c: Also start the command in the background if stdin is not a tty. [d93bc33a3740] 2010-05-10 Todd C. Miller * plugins/sudoers/sudoreplay.c, src/script.c, src/sudo.h, src/term.c: No need to use pseudo-cbreak mode now that we use pipes when stdout is not a tty. Instead, check whether stdin is a tty and if not, delay setting the tty to raw mode until the command tries to access it itself (and receives SIGTTIN or SIGTTOU). [e68315cf8c6b] * src/tgetpass.c: Use an array for signals received instead of a single variable so we don't lose any when there are multiple different signals. [2ac726dac864] * src/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). [bebb6209c795] 2010-05-07 Todd C. Miller * src/script.c: Flush the iobufs on suspend or child exit using the same logic as the main event loop. [c627feee1035] * src/script.c: Free memory after we are done with it. [8db9b611b45a] 2010-05-06 Todd C. Miller * doc/HISTORY: Quest now sponsors Sudo development [6cc490083bc7] 2010-05-05 Todd C. Miller * doc/Makefile.in: Install sudo_plugin man page. [c253729790b2] * src/script.c: Go back to reseting io_buffer offset and length (and now also the EOF handling) in the loop we do the FD_SET, not after we drain the buffer after write() since we don't know what order reads and writes will occur in. [5f38bfa8497f] * MANIFEST: audit files moved to sudoers plugin directory [b1ead182428e] * doc/sudo_plugin.cat, doc/sudo_plugin.man.in, doc/sudo_plugin.pod: Document plugin_printf and new logging functions. [fe9430b60ab5] * src/script.c: Add support for logging stdin when it is not a tty. There is still a bug where "cat | sudo cat" has problems because both cat and sudo are trying to read from the tty. [04c9c59fcfba] * include/sudo_plugin.h, plugins/sample/sample_plugin.c, plugins/sudoers/sudoers.c, src/script.c: Add separate I/O logging functions for tty in/out and stdin/stdout/stderr. NOTE: stdin logging does not currently work and is disabled for now. [a36dfd4ca935] 2010-05-04 Todd C. Miller * include/sudo_plugin.h, plugins/sample/sample_plugin.c, plugins/sudoers/iolog.c, plugins/sudoers/ldap.c, plugins/sudoers/logging.c, plugins/sudoers/plugin_error.c, plugins/sudoers/sudoers.c, plugins/sudoers/sudoers.h, src/conversation.c, src/sudo.c, src/sudo_plugin_int.h: Add pointer to a printf like function to plugin open functon. This can be used instead of the conversation function to display info and error messages. [98734eea8ef1] * Makefile.in: Stop if make in a subdir fails [228bb3ad2dbc] * src/script.c: Only set user's tty to blocking mode when doing the final flush. Flush pipes as well as pty master when the process is done. [20ff67218666] 2010-05-03 Todd C. Miller * plugins/sudoers/ldap.c: Use print_error() when displaying ldap config info in debugging mode. [d142e0cacb22] * compat/Makefile.in, compat/strdup.c, compat/strndup.c: No longer need strdup() or strndup() replacements. [df53697174ec] * plugins/sudoers/logging.c, plugins/sudoers/plugin_error.c, plugins/sudoers/sudoers.h: Add print_error() function that uses the conversation function to print a variable number of error strings and use it in log_error(). [b1fa2861b575] * src/script.c, src/sudo.h, src/term.c: Do not need the opost flag to term_copy() now that we use pipes for stdout/stderr when they are not a tty. [f42811f70a19] * src/script.c: Use pipes to the sudo process if stdout or stderr is not a tty. Still needs some polishing and a decision as to whether it is desirable to add additonal entry points for logging stdout/stderr/stdin when they are not ttys. That would allow a replay program to keep things separate and to know whether the terminal needs to be in raw mode at replay time. [1a945e0ab2da] 2010-04-30 Todd C. Miller * plugins/sudoers/Makefile.in, plugins/sudoers/audit.c, plugins/sudoers/bsm_audit.c, plugins/sudoers/bsm_audit.h, src/audit.c, src/bsm_audit.c, src/bsm_audit.h: Move audit sources into the sudoers plugin dir; the driver does not use them. [50ec36422cd0] * compat/getline.c, compat/mksiglist.c, compat/nanosleep.c, compat/strdup.c, compat/strndup.c, plugins/sample/sample_plugin.c, plugins/sudoers/boottime.c, plugins/sudoers/getdate.c, plugins/sudoers/match.c, plugins/sudoers/sudoreplay.c, plugins/sudoers/timestr.c, plugins/sudoers/vasgroups.c, src/alloc.c, src/atobool.c, src/audit.c, src/lbuf.c, src/list.c, src/sesh.c, src/term.c, src/ttysize.c: Use angle brackets when including headers that can only be found when an -I flag is specified. The files in the compat dir could get away with double quotes here but I've converted all the source files to use angle brackets for consistency. [9e30a8fc6d4b] * plugins/sudoers/Makefile.in: Add missing -I$(top_srcdir) to CPPFLAGS so includes in the compat dir can be found when building outside the source tree. [1150934b79dd] * plugins/sudoers/Makefile.in: Clean up links in distclean [78595028be8b] * plugins/sudoers/Makefile.in: Hack around VPATH semantic differences by symlinking files we need from ../../src into the current directory and build those. A better fix would be to either make a .a or .la file with those files in it or simply use a single, flat, Makefile instead of per-subdirs Makefiles. [892c332d3f05] * plugins/sudoers/Makefile.in, src/Makefile.in, src/fmt_string.c: fmt_string is used by the sudoers plugin too so do not include sudo.h (which is not really needed here anyway) [231c35e3941f] * compat/Makefile.in, plugins/sample/Makefile.in, plugins/sudoers/Makefile.in, src/Makefile.in: Fix building with non-BSD versions of make such as GNU make. Requires VPATH support, which should be in any non-neolithic make. [dc174f135919] * configure, configure.in, plugins/sudoers/Makefile.in, plugins/sudoers/auth/sudo_auth.c, plugins/sudoers/sudoers.c, src/Makefile.in: Re-enable bsm audit. Currently auditing is done within the sudoers plugin itself. If possible, this should really be done in the main driver but we don't presently have the needed data to do that. This will be re-evaluated when Linux audit support is added. [1d05a3236bfe] * compat/Makefile.in, plugins/sample/Makefile.in, plugins/sudoers/Makefile.in, src/Makefile.in: Remove extraneous $srcdir and use more .c.lo and .c.o rules instead of explicit rules in the dependency. [88f80efd25f0] * plugins/sudoers/visudo.c: Fix mismerge; alias_remove_recursive() now returns int [6257a4849641] 2010-04-29 Todd C. Miller * plugins/sudoers/visudo.c: Fix a crash when checking a sudoers file that has aliases that reference themselves. Based on a diff from David Wood. [545d194484a7] * src/script.c: Print signal info after restoring the tty mode, not before. [a68618e67435] * src/script.c: Defer call to alarm() until after we fork the child. Pass correct pid to terminate_child() If the command exits due to signal, set alive to false like we do when it exits normally. Add missing check for errpipe[0] != -1 before using it in FD_ISSET [22f0a1549391] 2010-04-28 Todd C. Miller * plugins/sudoers/boottime.c: Use 1/0 instead of TRUE/FALSE so we don't need sudoers.h [0e627170c6e8] 2010-04-27 Todd C. Miller * src/Makefile.in: Simplify dependencies by using .c.o and .c.lo rules. [6abcaef5d1ac] * configure, configure.in, plugins/sudoers/Makefile.in, src/Makefile.in: Substitute in @PROGS@ into src/Makefile to add sesh [cc46d3b6208f] 2010-04-26 Todd C. Miller * plugins/sudoers/sudoers.c: Add back calls to log_denial() if sudoers does not allow the command. [9783316207f0] * plugins/sudoers/sudoers.c: Pass in correct pwflag for list and validate. [973dd56d4b81] * plugins/sudoers/env.c: Add missing check for NULL in validate_env_vars [1d6eb6957824] * src/Makefile.in: Add sudo_noexec.la to "all" target, otherwise it only gets built at install time. [644a9694d2ef] * plugins/sudoers/sudoers.c: Only set sudo_user.env_vars if the env_add list is empty. [fccdf6f0e0e2] * plugins/sudoers/sudoers.c: Set sudo_user.env_vars so that environment variables specified on the command line get logged correctly. [9b51012c491e] * plugins/sudoers/env.c, plugins/sudoers/logging.c, plugins/sudoers/sudoers.c, plugins/sudoers/sudoers.h: Re-enable environment files and setting environment variables on the command line. [5662d5645dbd] 2010-04-24 Todd C. Miller * plugins/sudoers/check.c: Fix typo in last commit (ifndef vs ifdef) Make sure we pass ctime() a pointer to time_t as tv_sec in struct timeval may be long. [4de0c46e788e] * plugins/sudoers/check.c: Don't stash ctime in on-disk tty ticket info for now; on many (most?) systems the ctime is updated when the tty is written to. Once I have a better idea of what systems do not update ctime on ttys (and have a way to test for this) the ctime stash will be conditionally re-enabled. [a90eeec0f648] 2010-04-23 Todd C. Miller * MANIFEST, Makefile.in: Add back "dist" target, this time using a MANIFEST file [29277c05499f] * Makefile.in: Remove Makefile in distclean target [83d695f4f450] * Makefile.in, src/Makefile.in: Update clean and cleandir targets [ad7b2afeb9c1] * include/fileops.h, plugins/sudoers/sudoers.h, src/fileops.c, src/sudo.h: Move fileops.c defines and prototypes to filesops.h [4545e9b6892d] * plugins/sudoers/check.c: Lock the tty timestamp when writing. We shouldn't have to lock when reading since the file is updated via a single write system call. [0c7276f02696] 2010-04-22 Todd C. Miller * plugins/sudoers/alias.c, plugins/sudoers/check.c, plugins/sudoers/defaults.c, plugins/sudoers/find_path.c, plugins/sudoers/getspwuid.c, plugins/sudoers/gettime.c, plugins/sudoers/goodpath.c, plugins/sudoers/interfaces.c, plugins/sudoers/iolog.c, plugins/sudoers/ldap.c, plugins/sudoers/logging.c, plugins/sudoers/match.c, plugins/sudoers/nonunix.h, plugins/sudoers/parse.c, plugins/sudoers/pwutil.c, plugins/sudoers/redblack.c, plugins/sudoers/sudo_nss.c, plugins/sudoers/sudoers.c, plugins/sudoers/sudoreplay.c, plugins/sudoers/testsudoers.c, plugins/sudoers/timestr.c, plugins/sudoers/tsgetgrpw.c, plugins/sudoers/vasgroups.c, plugins/sudoers/visudo.c: Convert to ANSI C function declarations [9c45def57cf7] * plugins/sudoers/sudoers.h: Remove extraneous bits and classify by source file. [e8ea9f109ebb] * include/compat.h: Add timercmp macro for systems without it [d3bf87b1d08e] * plugins/sudoers/boottime.c, plugins/sudoers/check.c, plugins/sudoers/sudoers.h: get_boottime() now fills in a timeval struct [3573c3f44e11] * plugins/sudoers/check.c: Store info from stat(2)ing the tty in the tty ticket when tty tickets are in use. On most systems, this closes the loophole whereby a user can log out of a tty, log back in and still have the timestamp be valid. [53380f9f5242] * config.h.in, configure.in: Add timespec2timeval and use it when getting ctime/mtime [4cb7f7caec2c] 2010-04-20 Todd C. Miller * plugins/sudoers/auth/sudo_auth.c, plugins/sudoers/set_perms.c, plugins/sudoers/sudoers.c, plugins/sudoers/sudoers.h, plugins/sudoers/testsudoers.c: Convert perm setting to push/pop model; still needs some work Use the stashed runas groups instead of using getgrouplist() Reset perms to the initial value on error [09c072ebde8b] * config.h.in, configure.in: fix ctim_get and mtim_get macros [58773dc1e360] * config.h.in, configure, configure.in, include/compat.h, plugins/sudoers/check.c, plugins/sudoers/gettime.c, plugins/sudoers/sudoers.h, plugins/sudoers/visudo.c, src/fileops.c: Use timeval directly instead of converting to timespec when dealing with file times and time of day. [a0ce1ae00a67] * plugins/sudoers/Makefile.in: Don't like sudoreplay with libsudoers.la due to a yacc symbol conflict. [f1a59cc63a15] 2010-04-18 Todd C. Miller * configure, configure.in: Darwin >= 9.x has real setreuid(2) [7ec942a64275] 2010-04-17 Todd C. Miller * plugins/sudoers/env.c, plugins/sudoers/sudoers.h: Ansify env.c [f58551bad10a] * plugins/sudoers/env.c, plugins/sudoers/sudoers.c, plugins/sudoers/sudoers.h: Remove remaining references to the environ pointer. [96faa530816a] 2010-04-16 Todd C. Miller * config.h.in, configure, configure.in, plugins/sudoers/env.c: Don't change the environ directly in the sudoers plugin [6db48ed3f7e0] 2010-04-15 Todd C. Miller * plugins/sudoers/sudoers.c: Fix typo [4aa452b07f8f] * plugins/sudoers/alias.c: Fix use after free in error message when a duplicate alias exists. [ce1d2812ee34] 2010-04-14 Todd C. Miller * doc/sudo_plugin.cat, doc/sudo_plugin.man.in, doc/sudo_plugin.pod, src/parse_args.c: Add a "noninteractive" boolean to the settings passed in to the plugin's open function that is set when the user specifies the -n flag. [68f8d9d6d4d0] * config.h.in, configure, configure.in, plugins/sudoers/env.c: Add workaround for the lack of the environ pointer on Mac OS X in dlopen()ed modules. Use of environ in the sudoers plugin should ultimately be removed but this will do for the moment. [80c61647434f] * plugins/sudoers/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. [45e249ca99f7] * plugins/sudoers/sudoers.c: Main sudo no longer print "unable to execute" on exec failure so do it here. [50aaf62b43b5] 2010-04-13 Todd C. Miller * src/script.c: Use a pipe to pass back errno to the parent if execve() fails. If we get an error in script_child(), kill the command and exit. [dc3bf870f91b] * doc/sudo_plugin.cat, doc/sudo_plugin.man.in, doc/sudo_plugin.pod, src/parse_args.c, src/sudo.c: Handle plugin's open function returning -2 (usage error). [aadf900c1de8] * src/script.c: If execve() fails, leave it to the plugin to print an error string. [e25748f2d5b9] * src/script.c: If execve fails in logging mode, pass the errno directly to the grandparent on the backchannel and exit. The immediate parent will get SIGCHLD and try to report that status but its parent will no longer be listening. It would probably be cleaner to pass this over a pipe in script_child(). [cb122acc81a8] * plugins/sudoers/sudoers.c: Don't override rval with results of check_user() unless it failed. [46fb7e87ac7d] 2010-04-12 Todd C. Miller * doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.pod: Fix typo [ccd0b693f3da] * src/parse_args.c: NULL-terminate env_add [2c534368a0c3] 2010-04-11 Todd C. Miller * src/sudo.c: Call the I/O log open function before the I/O version function. [e88bf898990b] * plugins/sudoers/iolog.c: Remove io_conv and just use sudo_conv [a280052468eb] * plugins/sudoers/set_perms.c: Fix set/restore perms for systems w/o setresuid [4160517f6666] 2010-04-10 Todd C. Miller * plugins/sudoers/check.c, plugins/sudoers/logging.c, plugins/sudoers/parse.c, plugins/sudoers/set_perms.c, plugins/sudoers/sudoers.c, plugins/sudoers/sudoers.h: Primitive set/restore permissions. Will be replaced by a push/pop model. [aae102290866] * src/script.c: Only need to take action on SIGCHLD in parent if no I/O logger. If there is an I/O logger we will receive ECONNRESET or EPIPE when we try to read from the socketpair. [e1e4560401f6] 2010-04-09 Todd C. Miller * compat/memrchr.c, doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.pod, plugins/sudoers/find_path.c: Merge fb4d571495fa from the 1.7 branch to trunk. [c8fb424ad4d2] 2010-04-08 Todd C. Miller * src/script.c: Don't set SA_RESTART when registering SIGALRM handler. Do set SA_RESTART when registering SIGWINCH handler. [173472b76525] * doc/Makefile.in: Add dev targets for *.man.in and *.cat that don't specfify the $(srcdir) prefix. [b62f425da2e4] * src/script.c: If log_input or log_output returns false, terminate the command. [074f4c0c34a0] * src/script.c: Better signal handling. Instead of using a single variable to store the received signal, use an array so we can't lose a signal when multiple are sent. Fix process termination by SIGALRM in non-I/O logger mode. Fix relaying terminal signals to the child in non-I/O logger mode. [7a4723aca99d] * src/script.c: Fix a race between when we get the child pid in the parent and when the child process exits. The problem exhibited as a hang after a short-lived process, e.g. "sudo id" when no IO logger was enabled. [80bcc0aca70b] 2010-04-07 Todd C. Miller * doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.pod: Add a note about the security implications of the fast_glob option. [c37a92ab7c93] 2010-04-06 Todd C. Miller * config.h.in, configure, configure.in: Fix up some AC_DEFINE descriptions and regen config.h.in [f4655adc0db3] 2010-04-05 Todd C. Miller * include/missing.h: No longer check for strdup or strndup for LIBOBJ replacement. [fdc764ee8109] * src/script.c: Avoid installing signal handlers that are io-logger specific. Fixes job control when no io logger is enabled. [0853dd0906d4] * doc/Makefile.in: Only regen man pages from pod when configured with --with-devel [ab1995f8103d] 2010-04-04 Todd C. Miller * Makefile, Makefile.in, configure, configure.in: Top-level Makefile.in. Nothing is currently substituted but this is needed for separate build dirs. [e80873cbd201] * compat/Makefile.in, doc/Makefile.in, plugins/sample/Makefile.in, plugins/sudoers/Makefile.in, src/Makefile.in: Fix out-of-tree builds [59a35bef07b8] * Merge [386b848047e9] * doc/Makefile.in: We always install sudoreplay in 1.8 [ce52ba6617c9] 2010-04-03 Todd C. Miller * compat/siglist.in: SIGPOLL is sometimes the same as SIGIO (like on HP-UX) [6d69e1b05faf] 2010-04-02 Todd C. Miller * configure, configure.in: No need to provide strdup() or strndup(), sudo uses estrdup() and estrndup() [57ec23b72958] 2010-04-04 Todd C. Miller * plugins/sudoers/iolog.c, plugins/sudoers/sudoers.c: Free str after using it in the version method. Use sudo_conv, not io_conv since we don't have the IO conversation function pointer in the I/O version method anymore now that io_open is delayed. [f2ed132adeb0] 2010-04-02 Todd C. Miller * compat/Makefile.in, compat/mksiglist.c, compat/mksiglist.h, compat/siglist.in: Add license to mksiglist.c and note that the bits from pdksh are public domain [d8121a2467e8] * compat/Makefile.in: Fix LIBOBJDIR vs. srcdir wrt the siglist bits [164160148421] * plugins/sudoers/Makefile.in: Add sudoreplay testsudoers and visudo to clean target [138a17e51c0c] * compat/Makefile.in, compat/mksiglist.c, compat/mksiglist.h, compat/siglist.in, compat/strsignal.c, configure, configure.in, include/missing.h, src/script.c: Create our own sys_siglist for systems without it for use by strsignal() [2e5da011ebc3] * compat/Makefile.in: Remove duplicate $(LIBOBJDIR) [adf9abc9432f] 2010-04-01 Todd C. Miller * plugins/sudoers/sudoers.c, src/sudo.c, src/sudo_edit.c: Main sudo should not block signals; the plugin should do this in check_policy. [3f3736a7c5ed] 2010-03-31 Todd C. Miller * src/script.c: Fix a sizeof(ptr) vs. sizeof(*ptr) [aa1bcf5afcce] * src/script.c: Unlike most operating systems, HP-UX select() is not interrupted by SIGCHLD when the signal is registered with SA_RESTART. If we clear SA_RESTART when calling sigaction() for SIGCHLD we get the expected behavior and the code in the select() loops already handles EINTR correctly. [9eba0115e35a] * compat/getprogname.c: progname should be const [130228f062b7] * plugins/sudoers/Makefile.in: Move --tag=disable-static to when we link sudoers.la, not when we install. [ceb5e6c3b78b] * src/load_plugins.c: Load the sudoers I/O plugin by default too now that it is hooked up. [ea38befd0742] 2010-03-30 Todd C. Miller * src/pty.c: It looks like AIX doesn't need to push STREAMS modules for ptys. [22da618ba0a1] 2010-03-28 Todd C. Miller * src/parse_args.c, src/sudo.c: Delay calling the I/O plugin open function until the policy plugin returns success. [f3297c325b48] 2010-03-27 Todd C. Miller * plugins/sudoers/Makefile.in, plugins/sudoers/iolog.c, plugins/sudoers/set_perms.c, plugins/sudoers/sudoers.c, plugins/sudoers/sudoers.h: Add back io logging (transcript) support. Currently, the open function runs too early and it is not possible to use the io module independently of the policy module. [9bd932f66226] * plugins/sudoers/set_perms.c: Comment out dead code; will be removed when set_perms is rewritten. [af7a995284f8] 2010-03-23 Todd C. Miller * plugins/sudoers/sudoers.c: Fix off by one error when allocating user_groups. [6281fcf9c3bb] 2010-03-22 Todd C. Miller * configure, configure.in, plugins/sudoers/Makefile.in: Add REPLAY_LIBS for sudoreplay and add -lrt to it on Solaris. [fbce3e9eda3a] * plugins/sudoers/sudoers.c: Fix typo in preserve groups case [1fd72024fb5a] * plugins/sudoers/sudoers.c: In command_info it is "runas_groups" not "groups". [5c64dce4f285] * src/sudo.c: Fix iteration over runas_groups list. [b3c45a0cd643] * configure, configure.in, plugins/sudoers/env.c, plugins/sudoers/match.c, src/script.c: Merge 5177a284b9ff 549f8f7c2463 88f3181692fe from 1.7 branch. [a8108a0776c2] * compat/getgrouplist.c: getgrouplist(3) for those without it [4ab4d21e3b16] * plugins/sudoers/sudoers.c: Set preserve_groups or groups list in command_info [1266119ad654] * src/sudo.c: Fix setting of groups list [e75315e40bd4] * config.h.in, configure, configure.in, include/compat.h, include/missing.h: Add checks for getgrset and getgrouplist and use replacement getgrouplist if the system doesn't support it. [a62b8ba50863] * src/parse_args.c: Pass in preserve_groups when the -P flag is specified as per the design [7420c5d15474] * plugins/sudoers/sudoers.c: Check preserve_groups and ignore_ticket args with atobool instead of assuming they are true if present. [71c905702697] 2010-03-21 Todd C. Miller * plugins/sudoers/Makefile.in, plugins/sudoers/error.c, plugins/sudoers/plugin_error.c: Rename plugin-specific error.c to plugin_error.c Wire up visudo, sudoreplay and testsudoers in the build [9d581d5fa4d4] * src/Makefile.in, src/term.c: term.c does not needto include sudo.h [f6683cdcd2dd] * TODO, doc/sudo_plugin.cat, doc/sudo_plugin.man.in, doc/sudo_plugin.pod: Document the -2 return in the check_policy section too [e9cb4c34bbcf] * doc/sudo_plugin.cat, doc/sudo_plugin.man.in, doc/sudo_plugin.pod, plugins/sudoers/sudoers.c, plugins/sudoers/sudoers.h, src/parse_args.c, src/sudo.c, src/sudo.h: Fix the -s and -i flags and add support for the "implied_shell" option. If the user does not specify a command, sudo will now pass in the path to the user's shell and set impied_shell=true. The plugin can them either check the command normally or return -2 to cause sudo to print a usage message and exit. [bf889c38f229] 2010-03-19 Todd C. Miller * config.h.in, configure, configure.in, src/load_plugins.c: Bring back SUDOERS_PLUGIN but add .dylib -> .so conversion for Darwin where libraries end in .dylib but modules end in .so [2c56aaa38e21] * plugins/sudoers/parse.c: Better prefix determination now that we can't rely on len==0 to tell the beginning on an entry. [622bf18179e9] * plugins/sudoers/ldap.c: display_bound_defaults() stub should return 0, not 1 since it is a count, not a boolean. [0327a6c3d55d] * doc/sudo_plugin.cat, doc/sudo_plugin.man.in, doc/sudo_plugin.pod: Document progname in settings [42031d56a2e3] * compat/getprogname.c, include/compat.h, plugins/sample/sample_plugin.c, plugins/sudoers/sudoers.c, src/parse_args.c, src/sudo.c: Rewrite compat/getprogname.c and add setprogname(). The progname is now passed to the plugin via the settings array. [25d8663e6006] * configure, configure.in, plugins/sudoers/Makefile.in: Fix --with-ldap [b64b633f426d] * plugins/sudoers/sudo_nss.c: Add missing whitespace for Runas and Command-specific defaults [65f4ddf5545e] * plugins/sudoers/ldap.c, plugins/sudoers/parse.c, plugins/sudoers/sudo_nss.c: Use embedded newlines in lbuf instead of multiple calls to lbuf_print. [eed3af9cc3e1] * src/lbuf.c: Add support for embedded newlines. [e11f79b18deb] 2010-03-18 Todd C. Miller * compat/getprogname.c: If system doesn't support getprogname or __programe and we are building a shared object don't bother with Argc/Argv, just return "sudo" [aebde9062be7] * config.h.in, configure, configure.in, src/load_plugins.c: Hard-code sudoers.so instead of using SUDOERS_PLUGIN since libtool appears to always install a shared object with the .so suffix. [f9bbd0c0e9d3] * compat/Makefile.in, configure, configure.in, plugins/sample/Makefile.in, plugins/sudoers/Makefile.in, src/Makefile.in: Play more nicely with libtool and let it build libreplace (was libmissing) for us. [a4c6ebb2495c] * include/missing.h: Include stdarg.h for va_list rather than requiring all consumers of missing.h to include stdarg.h themselves. [37382df948de] * include/lbuf.h, plugins/sudoers/auth/sudo_auth.c, plugins/sudoers/check.c, plugins/sudoers/sudo_nss.c, plugins/sudoers/sudoers.c, plugins/sudoers/sudoers.h, src/lbuf.c, src/parse_args.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. [6d261261a072] 2010-03-17 Todd C. Miller * include/lbuf.h, plugins/sudoers/sudo_nss.c, plugins/sudoers/sudoers.c, plugins/sudoers/sudoers.h, src/lbuf.c, src/parse_args.c, src/sudo.c: Use number of tty columns that is passed in user_info instead of getting it directly in the lbuf code. [8a16635c2638] * plugins/sudoers/alias.c, plugins/sudoers/auth/dce.c, plugins/sudoers/auth/kerb5.c, plugins/sudoers/auth/pam.c, plugins/sudoers/auth/sia.c, plugins/sudoers/auth/sudo_auth.h, plugins/sudoers/check.c, plugins/sudoers/defaults.c, plugins/sudoers/defaults.h, plugins/sudoers/env.c, plugins/sudoers/getdate.c, plugins/sudoers/getdate.y, plugins/sudoers/gram.c, plugins/sudoers/gram.y, plugins/sudoers/interfaces.h, plugins/sudoers/logging.c, plugins/sudoers/logging.h, plugins/sudoers/match.c, plugins/sudoers/mon_systrace.h, plugins/sudoers/parse.c, plugins/sudoers/parse.h, plugins/sudoers/pwutil.c, plugins/sudoers/redblack.c, plugins/sudoers/redblack.h, plugins/sudoers/set_perms.c, plugins/sudoers/sudo_nss.h, plugins/sudoers/sudoers.c, plugins/sudoers/sudoers.h, plugins/sudoers/sudoreplay.c, plugins/sudoers/testsudoers.c, plugins/sudoers/timestr.c, plugins/sudoers/toke.c, plugins/sudoers/toke.l, plugins/sudoers/tsgetgrpw.c, plugins/sudoers/visudo.c: Kill __P in sudoers [63601e6cb171] * config.h.in, configure, configure.in, src/load_plugins.c: Set the sudoers plugin name in configure so we get the extension right. [edad89924cd1] * doc/sudo_plugin.cat, doc/sudo_plugin.man.in, doc/sudo_plugin.pod: Document lines/cols in user_info [a808872394f3] * src/Makefile.in, src/sudo.c, src/sudo.h, src/ttysize.c: Add tty size to user info [23f3d27e77a7] * src/script.c: Use TIOCGSIZE/TIOCSSIZE instead of TIOCGWINSZ/TIOCSWINSZ [a2208dd09051] 2010-03-16 Todd C. Miller * plugins/sudoers/sudoers.c: Kill dead code Add missing sigsetjmp in sudo_policy_invalidate Error out if we fail to lookup the user's name that is passed in [e4e3728ed482] * plugins/sudoers/error.c: Pass the error value back via siglongjmp. [667b8ad575ce] * plugins/sudoers/check.c: Use conversation function for lecture. [1ab4719f509b] * plugins/sudoers/check.c: Don't update ticket file if verify_user returns FALSE. [2bbc46a39a2b] 2010-03-15 Todd C. Miller * plugins/sudoers/sudoers.c, src/sudo.c: Wire up invalidate and validate methods for sudoers [c0630c7bca47] * plugins/sudoers/check.c, plugins/sudoers/sudoers.c, plugins/sudoers/sudoers.h: Add support for -k flag with a command. [edad239b098b] * src/parse_args.c: Allow -k to be specified with a command. [43a45add9974] * plugins/sudoers/sudoers.c: Wire up policy_list [27cc35699eca] * plugins/sudoers/error.c: Add newline at the end of message and space after the colon in warning message [5a591aa8e744] * plugins/sudoers/auth/sudo_auth.c: Add missing newline after pass password warning [337dba3870a7] * plugins/sudoers/sudoers.c: Set user_groups and user_ngroups based on user_info [61bee85128c8] * plugins/sudoers/error.c: Make this compile [7041c441e1c8] * plugins/sudoers/error.c, plugins/sudoers/sudoers.c: Make _warning in error.c use the conversation function and remove commented out warning/warningx in sudoers.c. [7c9b09024b63] * plugins/sudoers/logging.c: Use siglongjmp() in log_error for fatal errors [b50e26f1c73f] * plugins/sample/Makefile.in, plugins/sudoers/Makefile.in: Quiet a libtool warning [b2331fb006bc] * Makefile: Build sudoers plugin [5cdf06e66978] * plugins/sudoers/gram.c, plugins/sudoers/gram.y: Use warningx in yyerror() so the conversation function gets used when built as part of sudoers. [85f964215eef] 2010-03-14 Todd C. Miller * plugins/sudoers/auth/pam.c: Rename sudo_conv to conversation to avoid a namespace conflict. [1ad359d36be9] * plugins/sudoers/Makefile.in, plugins/sudoers/alias.c, plugins/sudoers/auth/afs.c, plugins/sudoers/auth/aix_auth.c, plugins/sudoers/auth/bsdauth.c, plugins/sudoers/auth/dce.c, plugins/sudoers/auth/fwtk.c, plugins/sudoers/auth/kerb4.c, plugins/sudoers/auth/kerb5.c, plugins/sudoers/auth/pam.c, plugins/sudoers/auth/passwd.c, plugins/sudoers/auth/rfc1938.c, plugins/sudoers/auth/secureware.c, plugins/sudoers/auth/securid.c, plugins/sudoers/auth/securid5.c, plugins/sudoers/auth/sia.c, plugins/sudoers/auth/sudo_auth.c, plugins/sudoers/auth/sudo_auth.h, plugins/sudoers/check.c, plugins/sudoers/defaults.c, plugins/sudoers/env.c, plugins/sudoers/error.c, plugins/sudoers/find_path.c, plugins/sudoers/getspwuid.c, plugins/sudoers/goodpath.c, plugins/sudoers/gram.c, plugins/sudoers/gram.y, plugins/sudoers/interfaces.c, plugins/sudoers/ldap.c, plugins/sudoers/logging.c, plugins/sudoers/match.c, plugins/sudoers/mon_systrace.c, plugins/sudoers/parse.c, plugins/sudoers/pwutil.c, plugins/sudoers/redblack.c, plugins/sudoers/set_perms.c, plugins/sudoers/sudo_nss.c, plugins/sudoers/sudoers.c, plugins/sudoers/sudoers.h, plugins/sudoers/testsudoers.c, plugins/sudoers/toke.c, plugins/sudoers/tsgetgrpw.c, plugins/sudoers/vasgroups.c, plugins/sudoers/visudo.c: Initial bits of sudoers plugin; still needs work. [af2a2c59a952] * config.h.in: Add HAVE_STRDUP and HAVE_STRNDUP [50a3c0dd510f] * compat/Makefile.in, configure, configure.in: Build libmissing in two flavors (one PIC one non-PIC) and link with the appropriate one. [b62f411a4c18] * Makefile, compat/fnmatch.c, compat/glob.c, compat/nanosleep.c, compat/utimes.c, plugins/sample/Makefile.in, src/Makefile.in: Build libmissing in two flavors (one PIC one non-PIC) and link with the appropriate one. [e1e04972b5fe] 2010-03-13 Todd C. Miller * include/missing.h: Add strdup and strndup and fix strsignal [c159babe2896] 2010-03-12 Todd C. Miller * compat/strdup.c, compat/strndup.c, configure, configure.in, plugins/sample/Makefile.in, src/Makefile.in: Add strdup and strndup to compat [25c9fd399a4d] * plugins/sample/sample_plugin.c: Need to include compat.h before missing.h [c94f7aad380f] * compat/strsignal.c: Must check HAVE_DECL_SYS_SIGLIST == 1 (not just if defined) since if it doesn't exist configure will set it to 0. [384580566389] * compat/glob.c: Fix botched ANSI C coversion of globexp2() [4a344b8cbe49] * configure, configure.in: Remove redundant getgroups check [0b16ec210c81] * configure, configure.in, src/lbuf.c, src/script.c, src/term.c: Require either termios or termio, no more sgtty. [9b2fa2f17a1c] * compat/strsignal.c, config.h.in, configure, configure.in: Change the sys_siglist check to use AC_CHECK_DECLS and also check for _sys_siglist and__sys_siglist [2e078fed2408] 2010-03-11 Todd C. Miller * configure, configure.in, src/Makefile.in: Change SUDO_LDFLAGS to SUDOERS_LDFLAGS and add SUDOERS_OBJS. We now use SUDO_OBJS for the main driver as part of OBJS. [9ae4a80a5ade] * doc/sudo_plugin.cat, doc/sudo_plugin.man.in, doc/sudo_plugin.pod: Mention in the conversation function section that a newline is not implicit. [04a233b6c491] * include/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. [c85b3ce6b77d] 2010-03-09 Todd C. Miller * plugins/sample/sample_plugin.c, src/conversation.c: conversation function no longer puts a newline at the end of info or error messages. [c534cae1ac4a] 2010-03-07 Todd C. Miller * src/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. [564f528c3bb7] 2010-03-06 Todd C. Miller * aclocal.m4: transcript option is now --with not --enable [0646fac4cf93] * plugins/sample/sample_plugin.c: Add support to -u and -g flags Check fmt_string retval Add timeout for debugging purposes [cfefa4fa60b5] * src/script.c, src/sudo.c: Wire up SIGALRM handler Set close on exec flag for child side of the socketpair Fix signal handling when not doing I/O logging [379581ec7272] * src/sudo.c: g/c unused SIGCHLD handler [0afa03912dce] * src/fmt_string.c, src/parse_args.c, src/sudo.c: Don't use emalloc() in fmt_string(); we want to be able to use it from a plugin. [ade64d368147] * include/list.h: tq_remove not list_remove [0e0e1fd5c31c] * configure, configure.in: AUTH_OBJS should contain .lo files not .o files. [c64c82c9d5a2] 2010-03-05 Todd C. Miller * src/parse_args.c: Simplify conversion of command line args to name=value pairs. [75ab127c6a94] * plugins/sample/sample_plugin.c: Handle NULL reply from conversation function [6ce09b6cb204] * compat/getline.c: Don't depend on emalloc/erealloc [73df09e2109f] * plugins/sample/Makefile.in: Use $(OBJS) instead of sample_plugin.lo [2d995db9aa99] * plugins/sample/sample_plugin.c: runas_user is in settings not user_info [7ee12068bc57] * src/parse_args.c: Fix a mismatch between sudo_settings and settings_pairs that causes some settings to get the wrong values. [b1bc6d81a65f] 2010-03-04 Todd C. Miller * src/Makefile.in, src/aix.c, src/alloc.c, src/atobool.c, src/error.c, src/fileops.c, src/lbuf.c, src/list.c, src/pty.c, src/sesh.c, src/sudo.c, src/sudo_edit.c, src/term.c, src/zero_bytes.c: Convert to ANSI C [d03b6e4a3b75] * src/load_plugins.c: Fix strlcpy() return value check. [7cd66999a374] * INSTALL, configure, configure.in: No longer need to substitute in script.o and pty.o; I/O logging support is always built. [45250024c5dc] 2010-02-28 Todd C. Miller * src/script.c: Add fallback to /bin/sh when execve() fails with ENOEXEC. [7684a15a1352] * include/alloc.h, src/alloc.c: Add estrndup() [47621c83bed9] 2010-02-27 Todd C. Miller * src/script.c, src/sudo.c: Refactor script_execve() a bit so that it can be used in non-script mode. Needs more cleanup. [f09e022d547c] * src/sudo.c: Ignore empty entries in command_info list [1eea9a8de21c] * include/list.h, src/list.c: Add tq_remove [40908a617cb2] * src/conversation.c: Pass timeout to tgetpass() [9e66c918b771] * Makefile: Add ChangeLog target [da4a39150838] * README, WHATSNEW: Bump version and update things slightly for sudo 1.8.0 [4b73cc45e2d4] * configure, configure.in: Sudo now requires an ANSI/ISO C compiler [1e51f72e6964] * src/alloc.c, src/audit.c, src/error.c, src/lbuf.c, src/sudo_noexec.c: Convert to ANSI C [5cbd315dbde8] * include/alloc.h, include/compat.h, include/error.h, include/lbuf.h, include/list.h, include/missing.h: Convert to ANSI C [3f5016ff64f4] * compat/charclass.h, compat/closefrom.c, compat/fnmatch.c, compat/fnmatch.h, compat/getcwd.c, compat/getline.c, compat/getprogname.c, compat/glob.c, compat/glob.h, compat/isblank.c, compat/memrchr.c, compat/mkstemp.c, compat/nanosleep.c, compat/sigaction.c, compat/snprintf.c, compat/strcasecmp.c, compat/strerror.c, compat/strlcat.c, compat/strlcpy.c, compat/strsignal.c, compat/utime.h, compat/utimes.c: Convert to ANSI C [0d635c85461c] 2010-02-24 Todd C. Miller * src/sudo.c, src/tgetpass.c: Make user_details extern so tgetpass can get at the uid and gid. Set uid/gid to user before executing askpass program. Check environment for SUDO_ASKPASS and use that if set. TODO: a way for the policy to set the askpass program itself [d33606396176] * src/sudo.c: No longer need sudo_usage.h in sudo.c [063e2946c382] * doc/sudo.cat, doc/sudo.man.in, doc/sudo.pod, doc/sudo_plugin.man.in, doc/sudo_plugin.pod, src/Makefile.in, src/parse_args.c, src/sudo_usage.h.in: Document -D level command line flag which maps to the debug_level setting. [61f1e2ab3ac1] * doc/sudo_plugin.cat, doc/sudo_plugin.man.in, doc/sudo_plugin.pod: Document debug_level in plugin doc. Still need to document the -D flag in sudo itself. [8c62daea3e9b] 2010-02-21 Todd C. Miller * plugins/sample/sample_plugin.c: include missing,h for vasprintf [92503de49b39] * doc/Makefile.in, doc/plugin.pod, doc/sudo_plugin.cat, doc/sudo_plugin.man.in, doc/sudo_plugin.pod: Rename plugin.pod -> sudo_plugin.pod and wire into Makefile [14cfb4775238] * plugins/sample/sample_plugin.c: Need to include limits.h [bda7f74343d2] * compat/glob.c: No more sudo_getpw* [232e52907634] * plugins/sample/Makefile.in, src/Makefile.in: Add missing compat bits [4843dd000e08] * compat/closefrom.c, compat/mkstemp.c, plugins/sample/Makefile.in: compat files should not include sudo.h wire up compat in sample plugin [a175b8185e0f] * Makefile, configure, configure.in, doc/Makefile.in, src/Makefile.in: Fix up compat dependencies. Fix distclean target in doc/Makefile.in [57e49bc20857] * configure, configure.in: Fix typo [333655e3d5fe] * plugins/sample/sample_plugin.c: Log input and output to temp files for proof of concept. [ae1dfc34f7d6] * Makefile, configure, configure.in, doc/Makefile.in: Add doc Makefile.in and wire it up [6a310443c87d] * src/script.c: Handle SIGSTOP in addition to SIGTSTP. Fixes a problem with suspending a shell with the "suspend" builtint. [3d65f182819a] * src/script.c: In child, handle parent side of the pipe going away. [a29c14d78cd9] * src/script.c: No longer need to check for explicit death of the child (process #2) since if it dies we will get EPIPE from the socketpair. Fix a sizeof() that was causing a spurious error. Convert SCRIPT_DEBUG to sudo_debug. [24c55dd4ff60] * src/sudo.c: Make sudo_debug do a single vfprintf() which will result in a single write call on most systems. Avoids problems with interleaved debug printf from different processes. Also remove an extraneous error case since recv() can't return a short read and add some more XXX. [b37a8533ef1e] 2010-02-20 Todd C. Miller * src/script.c: Fix uninitialized variable. [e012a0a30890] * src/Makefile.in: Fix sudo install target [1417fa4b4ab9] * src/parse_args.c, src/sudo.c, src/sudo.h: Wire up debug_level [144fab289c73] * src/Makefile.in: Fix dependencies [5170940af2ce] * configure, configure.in: Fix setting of plugin dir [144eda170a72] * Makefile: add clean targets [d53f6f6f5c3a] * src/atobool.c: Add missing source for sudo front end [42487de9c489] * plugins/sample/Makefile.in, plugins/sample/sample_plugin.c: Sample plugin demonstrating the sudo plugin API [f1fd62d7644f] * Makefile, configure, configure.in, install-sh, pathnames.h.in, plugins/sudoers/install-sh, src/Makefile.in, src/conversation.c, src/fileops.c, src/fmt_string.c, src/load_plugins.c, src/parse_args.c, src/pty.c, src/script.c, src/sudo.c, src/sudo.h, src/sudo_plugin_int.h, src/sudo_usage.h.in, src/tgetpass.c, sudo_usage.h.in: Modular sudo front-end which loads policy and I/O plugins that do most the actual work. Currently relies on dynamic loading using dlopen(). See doc/plugin.pod for the plugin API. [924f6eb2fbba] * doc/plugin.pod, include/sudo_plugin.h: Sudo plugin API [374ccbbd24ae] * compat/fnmatch.c, compat/glob.c, compat/nanosleep.c, compat/utimes.c, plugins/sudoers/check.c, plugins/sudoers/gettime.c, plugins/sudoers/match.c, plugins/sudoers/sudoreplay.c, plugins/sudoers/testsudoers.c, plugins/sudoers/visudo.c, src/fileops.c, src/sudo_edit.c: Replace emul/include.h with compat/include.h to match new source tree layout. [7eccd10449a1] * src/lbuf.c: Include missing.h for memrchr() proto [03abd63a8a33] * HISTORY, LICENSE, Makefile.binary.in, Makefile.in, PORTING, TROUBLESHOOTING, UPGRADE, aix.c, aixcrypt.exp, alias.c, alloc.c, alloc.h, audit.c, auth/API, 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, boottime.c, bsm_audit.c, bsm_audit.h, check.c, closefrom.c, compat.h, compat/charclass.h, compat/closefrom.c, compat/fnmatch.c, compat/fnmatch.h, compat/getcwd.c, compat/getline.c, compat/getprogname.c, compat/glob.c, compat/glob.h, compat/isblank.c, compat/memrchr.c, compat/mkstemp.c, compat/nanosleep.c, compat/sigaction.c, compat/snprintf.c, compat/strcasecmp.c, compat/strerror.c, compat/strlcat.c, compat/strlcpy.c, compat/strsignal.c, compat/timespec.h, compat/utime.h, compat/utimes.c, def_data.c, def_data.h, def_data.in, defaults.c, defaults.h, doc/HISTORY, doc/LICENSE, doc/PORTING, doc/TROUBLESHOOTING, doc/UPGRADE, doc/history.pod, doc/license.pod, doc/sample.pam, doc/sample.sudoers, doc/sample.syslog.conf, doc/schema.ActiveDirectory, doc/schema.OpenLDAP, doc/schema.iPlanet, doc/sudo.cat, doc/sudo.man.in, doc/sudo.man.pl, doc/sudo.pod, doc/sudoers.cat, doc/sudoers.ldap.cat, doc/sudoers.ldap.man.in, doc/sudoers.ldap.pod, doc/sudoers.man.in, doc/sudoers.man.pl, doc/sudoers.pod, doc/sudoreplay.cat, doc/sudoreplay.man.in, doc/sudoreplay.pod, doc/visudo.cat, doc/visudo.man.in, doc/visudo.pod, emul/charclass.h, emul/fnmatch.h, emul/glob.h, emul/timespec.h, emul/utime.h, env.c, error.c, error.h, fileops.c, find_path.c, fnmatch.c, getcwd.c, getdate.c, getdate.y, getline.c, getprogname.c, getspwuid.c, gettime.c, glob.c, goodpath.c, gram.c, gram.h, gram.y, history.pod, include/alloc.h, include/compat.h, include/error.h, include/lbuf.h, include/list.h, include/missing.h, ins_2001.h, ins_classic.h, ins_csops.h, ins_goons.h, install-sh, insults.h, interfaces.c, interfaces.h, isblank.c, lbuf.c, lbuf.h, ldap.c, license.pod, list.c, list.h, logging.c, logging.h, match.c, memrchr.c, missing.h, mkdefaults, mkstemp.c, mon_systrace.c, mon_systrace.h, nanosleep.c, nonunix.h, parse.c, parse.h, plugins/sudoers/Makefile.binary.in, plugins/sudoers/Makefile.in, plugins/sudoers/aixcrypt.exp, plugins/sudoers/alias.c, plugins/sudoers/auth/API, plugins/sudoers/auth/afs.c, plugins/sudoers/auth/aix_auth.c, plugins/sudoers/auth/bsdauth.c, plugins/sudoers/auth/dce.c, plugins/sudoers/auth/fwtk.c, plugins/sudoers/auth/kerb4.c, plugins/sudoers/auth/kerb5.c, plugins/sudoers/auth/pam.c, plugins/sudoers/auth/passwd.c, plugins/sudoers/auth/rfc1938.c, plugins/sudoers/auth/secureware.c, plugins/sudoers/auth/securid.c, plugins/sudoers/auth/securid5.c, plugins/sudoers/auth/sia.c, plugins/sudoers/auth/sudo_auth.c, plugins/sudoers/auth/sudo_auth.h, plugins/sudoers/boottime.c, plugins/sudoers/check.c, plugins/sudoers/def_data.c, plugins/sudoers/def_data.h, plugins/sudoers/def_data.in, plugins/sudoers/defaults.c, plugins/sudoers/defaults.h, plugins/sudoers/env.c, plugins/sudoers/find_path.c, plugins/sudoers/getdate.c, plugins/sudoers/getdate.y, plugins/sudoers/getspwuid.c, plugins/sudoers/gettime.c, plugins/sudoers/goodpath.c, plugins/sudoers/gram.c, plugins/sudoers/gram.h, plugins/sudoers/gram.y, plugins/sudoers/ins_2001.h, plugins/sudoers/ins_classic.h, plugins/sudoers/ins_csops.h, plugins/sudoers/ins_goons.h, plugins/sudoers/install-sh, plugins/sudoers/insults.h, plugins/sudoers/interfaces.c, plugins/sudoers/interfaces.h, plugins/sudoers/ldap.c, plugins/sudoers/logging.c, plugins/sudoers/logging.h, plugins/sudoers/match.c, plugins/sudoers/mkdefaults, plugins/sudoers/mon_systrace.c, plugins/sudoers/mon_systrace.h, plugins/sudoers/nonunix.h, plugins/sudoers/parse.c, plugins/sudoers/parse.h, plugins/sudoers/pwutil.c, plugins/sudoers/redblack.c, plugins/sudoers/redblack.h, plugins/sudoers/set_perms.c, plugins/sudoers/sudo_nss.c, plugins/sudoers/sudo_nss.h, plugins/sudoers/sudoers, plugins/sudoers/sudoers.c, plugins/sudoers/sudoers.h, plugins/sudoers/sudoers2ldif, plugins/sudoers/sudoreplay.c, plugins/sudoers/testsudoers.c, plugins/sudoers/timestr.c, plugins/sudoers/toke.c, plugins/sudoers/toke.l, plugins/sudoers/tsgetgrpw.c, plugins/sudoers/vasgroups.c, plugins/sudoers/visudo.c, pty.c, pwutil.c, redblack.c, redblack.h, sample.pam, sample.sudoers, sample.syslog.conf, schema.ActiveDirectory, schema.OpenLDAP, schema.iPlanet, script.c, selinux.c, sesh.c, set_perms.c, sigaction.c, snprintf.c, src/aix.c, src/alloc.c, src/audit.c, src/bsm_audit.c, src/bsm_audit.h, src/error.c, src/fileops.c, src/lbuf.c, src/list.c, src/pty.c, src/script.c, src/selinux.c, src/sesh.c, src/sudo_edit.c, src/sudo_noexec.c, src/term.c, src/tgetpass.c, src/zero_bytes.c, strcasecmp.c, strerror.c, strlcat.c, strlcpy.c, strsignal.c, sudo.c, sudo.cat, sudo.h, sudo.man.in, sudo.man.pl, sudo.pod, sudo_edit.c, sudo_noexec.c, sudo_nss.c, sudo_nss.h, sudoers, sudoers.cat, sudoers.ldap.cat, sudoers.ldap.man.in, sudoers.ldap.pod, sudoers.man.in, sudoers.man.pl, sudoers.pod, sudoers2ldif, sudoreplay.c, sudoreplay.cat, sudoreplay.man.in, sudoreplay.pod, term.c, testsudoers.c, tgetpass.c, timestr.c, toke.c, toke.l, tsgetgrpw.c, utimes.c, vasgroups.c, visudo.c, visudo.cat, visudo.man.in, visudo.pod, zero_bytes.c: Rework source layout in preparation for modular sudo. [7fc1978c6ad5] 2010-02-13 Todd C. Miller * Avoid a duplicate fclose() of the sudoers file. [5dba851088c1] * Fix size arg when realloc()ing include stack. From Daniel Kopecek [0a2935061e33] * Use setrlimit64(), if available, instead of setrlimit() when setting AIX resource limits since rlim_t is 32bits. [353db89bac61] * Fix use after free when sending error messages. From Timo Juhani Lindfors [e50dbd902382] * ChangeLog, Makefile.in: Generate the ChangeLog as part of "make dist" instead of having it in the repo. [251b70964673] 2010-01-17 Todd C. Miller * Makefile.binary.in, Makefile.in, 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, configure.in, 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, pathnames.h.in, 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.man.in, sudo.pod, sudo_edit.c, sudo_noexec.c, sudo_nss.c, sudo_nss.h, sudo_usage.h.in, sudoers.ldap.man.in, sudoers.ldap.pod, sudoers.man.in, sudoers.pod, sudoers2ldif, sudoreplay.c, sudoreplay.man.in, sudoreplay.pod, term.c, testsudoers.c, tgetpass.c, timestr.c, toke.c, toke.l, utimes.c, visudo.c, visudo.man.in, visudo.pod, zero_bytes.c: Remove CVS $Sudo$ tags. [de683a8b31f5] 2010-01-18 convert-repo * .hgtags: update tags [9b7aa44ae436] 2009-12-26 Todd C. Miller * sudo_usage.h.in: make this match sudoers SYNOPSIS [c74ba66944c2] * lbuf.c, parse.c: Print a newline between Runas and Command-specific defaults in sudo -l. [b5bdfcc9ce4b] * term.c: Use SET and CLR macros in term_raw [50ca42609d6c] * 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. [51c47e803d62] 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. [62666e309673] 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 timestamp. [5880200c5f6b] * INSTALL: Document missing options: --with-efence and --with-bsm-audit [d83afcdf9ff3] * sudo.cat, sudo.man.in, sudo.pod, sudoers.cat, sudoers.ldap.cat, sudoers.ldap.man.in, sudoers.ldap.pod, sudoers.man.in, sudoers.pod, sudoreplay.cat, sudoreplay.man.in, sudoreplay.pod, visudo.cat, visudo.man.in, visudo.pod: username -> user name groupname -> group name hostname -> host name [10c85646f45d] * INSTALL, README.LDAP, sudoers.pod: filename -> file name like the rest of the docs [1ef8ab5a9018] 2009-12-17 Todd C. Miller * parse.c: Fix printing of entries with multiple host entries on a single line. [226ceaf91d8d] 2009-12-14 Todd C. Miller * sudoers.pod: Mention that targetpw affects the timestamp file name. [a26e22e4f72e] * def_data.c, def_data.h, def_data.in, defaults.c, script.c, sudoers.pod: Add compress_transcript option. [6e94f8cb9dfb] 2009-12-13 Todd C. Miller * configure, configure.in: bump to 1.7.3b2 [906d7e347d15] * 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. [6ebc55d4716b] 2009-12-12 Todd C. Miller * pwutil.c: Fix pasto and add default return value. [7973b5e4599c] * check.c, match.c, pwutil.c, sudo.h: refactor group member checking into user_in_group() [48ca8c2eddf8] * check.c, config.h.in, configure, configure.in, match.c, sudo.c, sudo.h: Add support for mbr_check_membership() as present in darwin. [5501aed02b9f] 2009-12-10 Todd C. Miller * match.c: Rename label to be accurate [3af17dd960f7] * Makefile.in, boottime.c, check.c, config.h.in, configure, configure.in, sudo.h: Treat timestamp files from before we booted as old. Idea from and Apple patch. [5c96e484c05a] 2009-12-09 Todd C. Miller * sudo.c, sudo.pod, sudo_usage.h.in: Allow the -u flag to be used in conjunction with the -v flag as per older versions of sudo. [591e9fc13c1a] * logging.c: fix typo in last commit [4fd0c692dcf0] 2009-12-08 Todd C. Miller * logging.c: Convert fmt_first and fmt_confd into macros. [32e870158b29] * sudoers.pod: timeouts can be floats now [89de639a9679] * WHATSNEW, def_data.c, def_data.h, def_data.in, defaults.c, defaults.h, mkdefaults: Add support for floating point timeout values (e.g. 2.5 minutes). [210ffa291733] 2009-12-07 Todd C. Miller * sudo.pod: The -L flag will be removed in sudo 1.7.4 [ffd026084333] 2009-12-06 Todd C. Miller * sudoreplay.c: Fix a bug due to order of operators. [938d34464283] 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. [71c845f6ce73] 2009-11-22 Todd C. Miller * sudo.c: Don't exit() from open_sudoers, just return NULL for all errors. [8cfa832f972a] * script.c: Can't rely on the shell sending us SIGCONT when transitioning from backgroup to foreground process. [3c6c5b6cb4b3] * toke.c, toke.l: Add missing extern def for parse_error [45b7b59d03b7] 2009-11-21 Todd C. Miller * toke.c, toke.l: Avoid a parse error when #includedir doesn't find any files. Closes bug #375 [1ce1b850e9e6] * Makefile.in: Include sudo.man.pl and sudoers.man.pl in the distribution tarball. [6a22e32da108] 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. [1c32f2b94769] * 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. [c6790b82986d] 2009-11-04 Todd C. Miller * configure, configure.in: 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. [845a9ff6f93d] 2009-11-03 Todd C. Miller * configure, configure.in: Remove a spurious comma in the kerb5 bits. [3433eab083db] * auth/kerb5.c: Call krb5_get_init_creds_opt_init() in our emulated krb5_get_init_creds_opt_alloc() for MIT kerberos. [7ffb40bf43e9] 2009-11-01 Todd C. Miller * config.h.in: Add HAVE_ZLIB [9297bde61ecc] * script.c: Need to ignore SIGTT{IN,OU} in child when running the command in the background. Also some minor cleanup. [dc208d982319] 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(). [759c7d18203b] * script.c: Pass along SIGHUP and SIGTERM from parent to child. [035b0e254568] * script.c: Close unused bits of script_fds in processes that don't need them. Restore default SIGCONT handler in child. [e037378ab0c1] * script.c: Update foreground/background status in SIGCONT handler in parent process. [3f7f91333264] 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. [1102ef40832c] 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. [cf3a91cb5682] * script.c: Don't bother with sudo_waitpid() here for now. [9086de480c2d] * script.c: fix non-zlib case [a258bff0f9a6] 2009-10-23 Todd C. Miller * script.c: Remove non-wroking code that crept into rev 1.55 [2802dd55cff5] 2009-10-22 Todd C. Miller * INSTALL, configure, configure.in, script.c, sudoreplay.c: First pass at zlib support for transcript data files [5d10260807da] * Makefile.in: remove vestiges of ZLDFLAGS [1fa0caf1c0fb] * script.c: Add missing variable declaration for when TIOCSCTTY is not defined. Need to include sys/termio.h for TIOCSCTTY on some systems. [ee7f41ac2709] * script.c: when resuming command, send SIGCONT to its pgrp not just pid [5cd63c1d565b] * selinux.c: remove unused variable [df67df4be228] * script.c: include selinux.h for is_selinux_enabled() proto [85ebaa880cc1] * script.c: Don't use log_error() in the child process. [def65fe2a433] * 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. [95e473208982] 2009-10-18 Todd C. Miller * missing.h, sudo.h: Move two struct forward declarations from sudo.h to missing.h [90ad28294a8c] * script.c: Make comment at the top of script_exec() match reality. [c5042d27dbe0] * sudo.c: if neither stdin nor stdout is a tty, check stderr [c532ff20c8d8] * Makefile.in: Add back dependecy of gram.h on gram.y [c58382b7fcca] * 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(). [7b8bba8d99e7] 2009-10-17 Todd C. Miller * config.h.in, configure, configure.in, pty.c: Add support for IRIX-style dynamic ptys [bedc9bac44c1] * Makefile.in, alloc.h, getline.c, sudo.h, sudoreplay.c: Move alloc.c protos into alloc.h [b6a90649617d] * missing.h: Move prototypes for missing libc functions to missing.h [dda9ae1ccaf8] * Makefile.in, sudo.h, sudoreplay.c: Move prototypes for missing libc functions to missing.h [7483166b577b] 2009-10-16 Todd C. Miller * config.h.in, configure, configure.in: Disable transcript support if no tcsetpgrp until we support older BSD-style job control. [27ac1d8163df] * configure, configure.in, pty.c, script.c: Break out pty code into pty.c [e85509b25d41] * compat.h, config.h.in, configure, configure.in: add killpg macro if no killpg function [3a125f4a51f0] * config.h.in, configure, configure.in, script.c: Push ptem and ldterm for STERAMS-based systems when allocating a pty. [36bb39b30ff2] 2009-10-15 Todd C. Miller * script.c: Sprinkle some more O_NOCTTY and call grantpt() before unlockpt() [d94bd5c9bf4e] * script.c: Call tcgetpgrp() in the parent, not the child and have the child spin until it is granted. Fixes a race on darwin. [6e8d435339ce] * script.c: Only use TIOCNOTTY in the non-setsid case. If no TIOCSCTTY, just reopen slave. [0bdc63c019ca] 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. [9df61738df07] * Makefile.in, config.h.in, configure, configure.in, strsignal.c, sudo.h: Add check for strsignal() and a simple implementation if it is not there but sys_siglist is [61421a188ef4] * script.c: Add missing WUNTRACED and store the signal that stopped the grandchild in suspended, not signo. [df65042b200e] * script.c: g/c unused code [40d8cb5c9203] * 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. [6865abff7e94] 2009-10-12 Todd C. Miller * script.c: Move setpgid() of child into the parent side of the fork() where it belongs. [3defa782777c] 2009-10-11 Todd C. Miller * script.c: fix typo [b6a612b3622c] * 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. [db556bf2176f] * script.c: Back out revision 1.34; the problem lies elsewhere. [85f590a03275] * 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 why. [6f803a3e33ca] * script.c: Handle SIGTTOU and remove some debugging. [52d17279053e] * term.c: Back out revision 1.10 as the signal that interrupts us may be SIGTTOU or SIGTTIN which the caller must handle. [7e2fa9107975] * 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. [1a936e9309c4] * 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. [6dd296988060] * term.c: Handle getting/setting terminal attributes when the fd is in non- blocking mode. [ae5ae535ea7b] 2009-10-07 Todd C. Miller * sudoreplay.c, sudoreplay.cat, sudoreplay.man.in, sudoreplay.pod: Add support for pausing and changing the speed in interactive mode. [72a2063780a7] * script.c: Already define O_NOCTTY in compat.h, don't need it here [b5d80ed3e5ce] 2009-10-06 Todd C. Miller * sudoreplay.c: Add missing protos [c4cb4e7f4d8a] 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. [c86ca4bec60c] * sudoreplay.c: Use cbreak mode instead of raw mode and add signal handlers to restore the tty on interrupt. [84dd283da41c] * 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. [32e4f570414e] * script.c: Fix log_output(); just pass in a string and a length. [ca980cc0a3fb] 2009-09-28 Todd C. Miller * script.c: do not use errno when complaining out lack of a tty [8f9b8c55ab8e] 2009-09-27 Todd C. Miller * Makefile.in, sudoreplay.c, term.c: Instead of messing with line endings, just set terminal to raw mode in sudoreplay. [90943fa87acb] * 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. [e6b5475ac2aa] * script.c: Convert a do {} while into a while [e461310d2c77] * Makefile.in: Use if then instead of test && when installing binaries that may not exist. [ad4f9490d971] * script.c: Add O_NOCTTY when opening a tty device. Explicitly disconnect from old tty before associatng with new one. [0e0ca634b80c] * 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. [779b0d8f9d29] 2009-09-26 Todd C. Miller * aclocal.m4, configure, configure.in: Fix default case of transcript_enabled being unset. [f8aa96186e6b] * script.c, sudoreplay.c: Use _PATH_SUDO_TRANSCRIPT instead of _PATH_SUDO_SESSDIR [2844a7a851fa] * INSTALL, Makefile.in, aclocal.m4, configure, configure.in, sudo.c: Hook up --disable-transcript and --enable-transcript=DIR [b3fa7e6b2480] 2009-09-25 Todd C. Miller * aclocal.m4, configure, configure.in, pathnames.h.in: _PATH_SUDO_SESSDIR -> _PATH_SUDO_TRANSCRIPT Add --enable- transcript=DIR option to specify the directory [b0bb76d43cda] * sudo.cat, sudo.man.in, sudoers.cat, sudoers.man.in: regen [c7a8a0a9027c] * configure, configure.in, sudoers.man.pl, sudoers.pod: Substitute in default value for secure_path [c8f9ac6dbf93] * sudo.pod: Mention that the password must be followed by a newline with the -S option. [2fc589a3ee7e] 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. [abed9a9cbc6b] 2009-09-19 Todd C. Miller * Makefile.in: Add getline.o to COMMON_OBJS [04ef7643cbc2] * Makefile.in: sudoreplay depends on libsudo.a [142bd0472631] * Makefile.in: More pwutil.o into COMMON_OBJS [4a016b933629] * pwutil.c, testsudoers.c, tsgetgrpw.c: Remove my_* redirection in pwutil.c for testsudoers and just use the normal libc get{pw,gr}* names. [9b76d637d86b] * sudoreplay.cat, sudoreplay.man.in, sudoreplay.pod: More time and date examples [c6ee0175ec56] * Makefile.in, configure, configure.in, nanosleep.c, sudoreplay.c: Move nanosleep() emulation into its own file Check librt.a for nanosleep if we don't find it in libc [4da0cc26aad7] * Makefile.in, configure, configure.in: Build libsudo with the common bits and link things against that. [2b53bc0b081a] * script.c: Fix final flush. [6da287d833da] * 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. [2a45d4ae280c] * sudoreplay.c: Use unbuffered I/O when writing to stdout and make sure we write the entire buffer. [f39ef9844a47] 2009-09-18 Todd C. Miller * sudoreplay.c: Only use max_wait if it is non-zero [f6c10604d2e8] * getdate.c, getdate.y, getline.c: Need compat.h here [5d6722e225a0] * sudoreplay.c: Fix nanosleep emulation [34e5e5d72a76] * script.c: Fix comment after #endif [bd1347718b25] * sudoreplay.c: Add protos for missing libc bits [644f496427a2] * configure, configure.in: add missing line continuation char [db13c0d402cd] * config.h.in, configure, configure.in, getline.c: Implement getline() in terms of fgetln() if we have it. [3ab786eaadc5] * sudoreplay.c: Print year when formatting log line [90be669e3443] * sudoreplay.pod: Document cwd, attempt to document time/date formats. [6290fb9b65c6] * sudoreplay.c: Fix getline return value check. [d696d6657261] * Makefile.in, config.h.in, configure, configure.in, getline.c, sudoreplay.c: Use getline() if the system has it, else use provide our own for sudoreplay. [afca1d6fbe5e] * script.c: Refactor code to update output and timing files. [361491332b1a] 2009-09-17 Todd C. Miller * sudoreplay.c: Make sudo_getln() behave more like glibc getline. [40c9f2ea29e6] * script.c: When flushing remaining output, also update timing file. [5a9a5a627549] * sudoreplay.c: Use get_timestr() and make the -l output look like the regular sudo log. [452ba9d436c9] * logging.c, sudo.h, timestr.c: Make get_timestr() take a time_t so we can use it properly in sudoreplay. [82e67cc53c9c] * script.c: Create session dir earlier now that we update the seq number early. [797fe8d6dc61] 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. [d14d9b116df4] * sudoreplay.c: Fix reading long liensin sudo_getln() [58dadd74118c] * script.c, sudoreplay.c: Log the cwd in the script log file. Add sudo_getln() to read arbitrarily long lines. [faceb802ab8f] * Makefile.in, logging.c, sudo.h, timestr.c: Move get_timestr() into its own source file so sudoreplay can use it. [99b054bfa20a] 2009-09-15 Todd C. Miller * sudoreplay.c: Add to and from perdicates (date ranges); needs documentation [1d629174dcf4] 2009-09-14 Todd C. Miller * Makefile.in, getdate.c, getdate.y: Fix warning and add generated getdate.c [b877a86b5a03] * Makefile.in, getdate.y: Add getdate.y to be used for sudoreplay date parsing. [b8e26fbb7a40] 2009-09-13 Todd C. Miller * sudoreplay.c: Check more than just the first character of a predicate [4fe53728adb1] * sudoreplay.cat, sudoreplay.man.in, sudoreplay.pod: Add examples, sort predicates [70f8075cbccc] * Makefile.in, sudoreplay.c, sudoreplay.cat, sudoreplay.man.in, sudoreplay.pod: Implement search expressions in sudoreplay similar in concept to what find or tcpdump uses. TODO: date ranges [f7ce4fb4cf3a] 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. [2eed9df73010] * sudoers.pod: Fix cut at documenting transcript support. [e6c533a5568a] * logging.c: ID= -> TSID= for transcript ID [1bf755a35333] 2009-09-06 Todd C. Miller * sudoers.pod: Move fast_glob description to where it belongs in sorted order [5901cfb0d25f] * def_data.c, def_data.h, def_data.in, gram.c, gram.h, gram.y, parse.c, parse.h, sudo.c: Rename script -> transcript [e06cf823122c] 2009-09-03 Todd C. Miller * compat.h: Add timeradd and timersub for those without them [929f8aa06c2b] * script.c: Sanity check sessid before using it. [aa8ca5211d43] * sudo.c: Only set the session id if we are running a command or editing a file. [7205d717c098] * 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 case). [d11c7cd352fe] * config.h.in, configure, configure.in, script.c: Check for dup2 and use dup instead if we don't have it. [98bd89830f8a] * 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. [9453fdc5fba6] * 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. [8434d0c8ff08] 2009-09-01 Todd C. Miller * Makefile.in: Install sudoreplay [6acf2cdb4d3f] * sudoreplay.c: remove unused variable [2316360bb992] 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. [53976905b0a6] * Makefile.in, configure, configure.in, sudoreplay.cat, sudoreplay.man.in, sudoreplay.pod: Add sudoreplay docs [da4f14f0e64c] * sudoreplay.c: add -V (version) flag [b5e743639ee3] * sudoreplay.c: Hook up max_wait. [2ec5697a92ba] * 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. [6aab019d07aa] 2009-08-23 Todd C. Miller * config.h.in, configure.in: Add check for regcomp [44c3ebd7ff34] * sudoreplay.c: Add support for selecting by pattern and tty when listing. [66189f840c52] 2009-08-17 Todd C. Miller * sudoreplay.c: The beginnings of a list mode. [8d0150b4a52c] 2009-08-16 Todd C. Miller * Makefile.in: fix pasto [616b4640b8a8] * Makefile.in, config.h.in, configure.in: Add scaffolding for building sudoreplay [a32958505dbe] * sudoreplay.c: include error.h first arg to nanotime is const [fe5a7bb31bc5] * sudoreplay.c: Initial cut at sudoreplay; replay a sudo session. [f149fba372bd] 2009-08-08 Todd C. Miller * script.c: Fix wait() usage and use correct wait status. [f4745ed7ad05] * sudo.c, sudo.h, tgetpass.c: Add protos for term_* to sudo.h [14fe1abd7e7b] * 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. [7edfdadd8505] * config.h.in: Add UNIX98 pty support. [82f4b53a0e8f] * configure, configure.in, script.c: Add UNIX98 pty support. [795b8bb0a3a1] 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. [40f8b83baf69] * auth/pam.c: Set PAM_RUSER and PAM_RHOST early so they can be used during authentication. Based on a patch from Jamie Beverly. [3d567b453a6a] * match.c: Close dir before returning if strlcpy() reports overflow. From Martynas Venckus. [6a82f96473e5] * config.h.in, configure, configure.in, script.c: On Linux, the openpty proto libes in pty.h [98643a018d1c] * script.c: Call vhangup on exit if the system has it Use setpgrp() if no setsid() [3a9e13149829] 2009-08-06 Todd C. Miller * config.h.in, configure, configure.in: Add checks for revoke and vhangup if we don't have openpty [fcb04572e994] * script.c: Session logging guts that got forgotten in the previous commit. [c2af08a63ea9] * Makefile.in, aclocal.m4, compat.h, config.h.in, configure, configure.in, def_data.c, def_data.h, def_data.in, gram.c, gram.h, gram.y, parse.c, parse.h, pathnames.h.in, sudo.c, sudo.h, term.c, tgetpass.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. [77e3f5e25738] 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. [7291c136300d] 2009-07-29 Todd C. Miller * Makefile.in: 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. [9778177a8272] 2009-07-18 Todd C. Miller * toke.c, toke.l: Fix expansion of %h in #include names. Fixes bugzilla 363 [6e346879ba24] 2009-07-12 Todd C. Miller * mkdefaults: If no arg assume def_data.in [c1dd28c0e675] * README, WHATSNEW: Update for 1.7.2 [f5ad45f69f05] [SUDO_1_7_2] * ChangeLog: sync [6283549396ff] 2009-06-30 Todd C. Miller * sudoers.cat, sudoers.man.in, sudoers.pod: Add missing single quotes around a colon in Runas_Spec definition. From Elias Benali. [ccc6ee4fca83] 2009-06-29 Todd C. Miller * sudo.man.in, sudoers.man.in: regen [546e75304ebf] * 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 hurt. [34d01ebe241b] * sudo.cat, sudoers.cat: regen [bebf5a39f54f] 2009-06-26 Todd C. Miller * redblack.c: When repairing the tree, don't touch the root node. [9841f0d5d789] 2009-06-25 Todd C. Miller * set_perms.c: Protect call to setegid in runas_setup with #ifdef HAVE_SETEUID. Reported by Josef Schmid. [ed044b1eb879] 2009-06-23 Todd C. Miller * sudoers.pod: Document that we accept env_pam-style environment files [e3b545456352] * env.c: Adapt to accept pam_env-style /etc/environment which allows shell- style lines such as: export EDITOR="/usr/bin/vi" [752eb75bf007] * sudoers.pod: Make it clear that env_delete only works when !env_reset. From Lo??c Minier [3bd3f8e351ba] 2009-06-15 Todd C. Miller * sudo.pod, sudoers.pod: Add non-unix group bits, adapted from Quest [8ce427de8dea] * Makefile.in: build the .cat page in the current working dir, not the src dir [00e87a307674] * env.c: Return EINVAL in setenv() if var is NULL or the empty string to match glibc behavior. [23fd7c247142] 2009-06-13 Todd C. Miller * configure, configure.in: Use AS_HELP_STRING for AC_ARG_WITH and AC_ARG_ENABLE [fedd4a3e2a85] 2009-06-11 Todd C. Miller * sudo.cat, sudo.man.in, sudoers.cat, sudoers.ldap.cat, sudoers.ldap.man.in, sudoers.man.in, visudo.cat, visudo.man.in: regen [7b9f461a40b3] 2009-06-09 Todd C. Miller * INSTALL: Document --with-libvas and --with-libvas-rpath [a071e6d96c89] 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. [ac4e49d83043] * Makefile.in: Add non-Unix group .o to COMMON_OBJS and substitute in path to flex. [4547cc1a335f] 2009-05-27 Todd C. Miller * configure, configure.in, match.c, sudo.c, vasgroups.c: Update non-Unix group support from Quest, as reworked by me. [1abafce29dc6] * toke.c: regen [01bfca9148b7] * toke.l: Add support for escaped hex chars in names, e.g. \x20 for space. [3c7be8e58a39] 2009-05-25 Todd C. Miller * LICENSE, Makefile.in, 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, pathnames.h.in, pwutil.c, set_perms.c, sudo.c, sudo.h, sudo.pod, sudo_nss.c, sudo_nss.h, sudo_usage.h.in, sudoers.ldap.pod, sudoers.pod, testsudoers.c, tgetpass.c, toke.l, visudo.c: Update copyright years. [e615f676c764] 2009-05-24 Todd C. Miller * interfaces.c, lbuf.c: Minor fixes for Minix-3 [898c510d23f9] 2009-05-22 Todd C. Miller * set_perms.c: Handle getgroups() returning 0. Also add missing check for HAVE_GETGROUPS. [d73b958f9ffd] 2009-05-19 Todd C. Miller * Makefile.in, config.h.in, configure, configure.in, sudo.c, version.h, visudo.c: Replace version.h with PACKAGE_VERSION set via AC_INIT in configure. [5050579a264d] 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. [09dc21d8b42d] 2009-05-17 Todd C. Miller * LICENSE, Makefile.in, config.h.in, match.c, nonunix.h, sudo.c, vasgroups.c: Initial bits of non-unix group support using Quest Authentication Services [1eecab0ff27e] * toke.c, toke.l: Accept %:foo as a non-Unix group [4c4b5dd899a6] * toke.c, toke.l: Allow user/group to be double quoted in the case of non-Unix groups which contain spaces. [47a3d568b7e8] 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. [4d726177227c] 2009-05-10 Todd C. Miller * sudo.c: Must call audit_success before we change uids. [04a9e6ce6e55] * 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. [833dce7b7f42] * 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. [ef92ff99d265] * sudo.c: Fix -g mode, broken by rev 1.503 which had the side effect of setting the runas user to root unilaterally. [50a2f7df4385] 2009-05-08 Todd C. Miller * fileops.c: When unlocking a file with fcntl, use F_SETLK, not F_SETLKW. [30fbe832dcf3] * 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). [ef95a4f0bab5] 2009-04-30 Todd C. Miller * sudoers.pod: Add a clarification from Nick Sieger [1eadad329561] 2009-04-25 Todd C. Miller * env.c: Inline the setting of the environment string. [9515d11c6295] 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. [941260bf94d2] 2009-04-22 Todd C. Miller * toke.c, toke.l: Not all systems have d_namlen [e377b18d8e2d] 2009-04-20 Todd C. Miller * sudoers.pod: Fix up some pod2html issues. [823a1f10ab60] 2009-04-19 Todd C. Miller * interfaces.c: Check for NULL ifa_addr and ifa_netmask. Adapted from a diff from Quest Software. [73de36653131] * sudoers.pod: Ignore files ending in '~' in sudo.d (emacs backup files) [7871fad702db] * toke.c, toke.l: Ignore files ending in '~' in sudo.d (emacs backup files) [53fded2a469f] 2009-04-18 Todd C. Miller * sudoers.cat, sudoers.man.in, sudoers.pod, toke.c, toke.l: For #includedir, ignore any file containing a dot [a7daa1bce6c2] * Makefile.in, version.h: Bump version [ef60f14ffc44] * gram.c, gram.y, parse.c, parse.h, sudo.c, sudo.h, sudoers.cat, sudoers.man.in, sudoers.pod, testsudoers.c, toke.c, toke.l, visudo.c: Implement #includedir directive. Files in an includedir are not edited by visudo unless they contain a syntax error. [3923d85a6c79] * ChangeLog: sync [8741ed61a78b] [SUDO_1_7_1] * WHATSNEW: Forgot umask_override [7c86a21a5504] * ChangeLog, TODO: sync [57339ca6bccf] 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. [61292d819aff] * visudo.c: Print the proper file name when there is a parse error in an include file. [b0e85d4aedde] 2009-04-11 Todd C. Miller * WHATSNEW: Sync [997e5d485ea3] 2009-04-10 Todd C. Miller * configure, configure.in: Fix a warning when --without-ldap is specified. [d91fd9481b30] 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. [805e2272f6a3] 2009-03-28 Todd C. Miller * visudo.c: Check aliases in -c mode too. [9199e188d9f2] * 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 consumer. [a04b61804800] * alias.c, match.c, parse.c, parse.h, visudo.c: Rename find_alias -> alias_find for consistency. [48b0a82924f3] 2009-03-27 Todd C. Miller * visudo.c: When checking for unused aliases, recurse if the alias points to another alias. [2d4d1a7f3a41] 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. [8ad72e69b277] 2009-03-14 Todd C. Miller * ldap.c: Treat ldap_hostport the same as "host" for ldapux. [3281dcc66da8] * configure, configure.in: Only check for ldap_sasl_interactive_bind_s if we can find sasl.h. Fixes compilation with ldapux. [ca1ed585ef0e] 2009-03-12 Todd C. Miller * fileops.c: fix char subscript [41e51f080d00] 2009-03-11 Todd C. Miller * Makefile.in: remove errant carriage returns [e9e258a31c7b] * audit.c, env.c: fix K&R compilation [d182e8920f13] * sudo.cat, sudo.man.in, sudoers.cat, sudoers.ldap.cat, sudoers.ldap.man.in, sudoers.man.in, visudo.cat, visudo.man.in: regen [791a5cbf04e5] 2009-03-10 Todd C. Miller * config.h.in: Add missing HAVE_BSM_AUDIT [49ad1bb96f04] * WHATSNEW: Add 1.7.1 features [f107f1604c61] * INSTALL: Mention --with-netsvc [d1e90d147795] * sudoers.ldap.pod: Document netsvc.conf support [e78f8abce6af] * configure, configure.in, pathnames.h.in, sudo.c, sudo_nss.c, sudo_nss.h: Add support for AIX netsvc.conf (like nsswitch.conf). [1df56a84dee5] 2009-03-08 Todd C. Miller * config.h.in, configure, configure.in, env.c: Add --enable-env-debug flag to enable environment sanity checks. [128cdd8832e7] * sudoers.ldap.pod, sudoers.pod: Work around some pod2html issue. [e733b9609bd2] 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 environ. [be3ac732243c] 2009-03-02 Todd C. Miller * env.c: Really fix UNSETENV_VOID [08ab7e882507] * env.c: Fix unsetenv when UNSETENV_VOID [d3038b3f2f15] * aclocal.m4, configure: Fix SUDO_FUNC_PUTENV_CONST [de35569c572b] * ldap.c: tivoli-based ldap does not have ldapssl_err2string [c63fd90d5e99] * configure: regen [f38f1ee828ad] 2009-03-01 Todd C. Miller * config.h.in, configure, configure.in, ldap.c: Add support for Tivoli-based LDAP start TLS as seen in AIX. Untested. [8f8771829f85] * env.c: Add sanity checks for setenv/unsetenv [adbd1d95856b] * Makefile.in: Include bsm_audit.h in the tarball [4a4aa02b2c32] * Makefile.in, version.h: bump version for sudo 1.7.1 [362c71d21595] * aclocal.m4, auth/aix_auth.c, config.h.in, configure, configure.in, 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. [276edcd23032] 2009-02-25 Todd C. Miller * sudo.c: Make "sudoedit -h" work as expected [2bcbbb45d389] * 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. [ee073c04aec3] * sudo.pod: Mention that the helper for -A may be graphical. [b64a940c4082] * TROUBLESHOOTING: Document what happens if there is no tty. [313d58a856a5] * sudo.c: cosmetic changes [894f5e3b0c3e] * term.c: Fix term_restore [6c6315ff14bc] * sudo.c: Fix "sudo -k" with no other args [59e94dc419c6] 2009-02-24 Todd C. Miller * check.c, sudo.c, sudo.pod, sudo_usage.h.in: Allow the -k flag to be specified in conjunction with a command or another option that may require authentication. [5960ff20355d] 2009-02-23 Todd C. Miller * configure, configure.in: Remove unneeded AC_CANONICAL_TARGET; from Diego E. 'Flameeyes' [e86ab69c4a57] * Makefile.in: Parallel make fix. From Diego E. 'Flameeyes' [1289d7ee27db] 2009-02-21 Todd C. Miller * def_data.c, def_data.h, def_data.in, sudo.c, sudoers.pod: Implement umask_override [8b87a3f7c5aa] * toke.c: regen [79d7ca9ac873] * sudoers.pod, toke.l, visudo.c: Implement %h escape in sudoers include filenames. [a7f288dd64f0] * audit.c: Need to include compat.h [c0dc07ce2f70] * Makefile.in, 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. [7df020a8fd6f] * term.c: remove duplicate include [1dfcd01a7e46] 2009-02-20 Todd C. Miller * bsm_audit.c: Add missing include [fb56e08c37ee] * sudo.c: May need to update the runas user after parsing command-based defaults. [246f130d7802] 2009-02-18 Todd C. Miller * glob.c: Add missing pair of braces introduced with character class support. [0e2afa2e03e9] 2009-02-15 Todd C. Miller * def_data.c, def_data.h, def_data.in, sudoers.pod, tgetpass.c: Rename pwstars to pwfeedback [a9f85a57ebac] 2009-02-11 Todd C. Miller * bsm_audit.c, bsm_audit.h: Add const to make MacOS happy. [4274432d6627] * Makefile.in, auth/sudo_auth.c, bsm_audit.c, bsm_audit.h, configure, configure.in, sudo.c: Add bsm audit support from Christian S.J. Peron [bef61cd8693d] * term.c: This is new code, no DARPA notice. [ec6ad09b9c23] 2009-02-10 Todd C. Miller * def_data.c, def_data.h, def_data.in, match.c, sudoers.pod: Rename simple_glob -> fast_glob [68d9ed803cc1] * match.c: g/c unused var [693fa0464eb6] * def_data.c, def_data.h, def_data.in, 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 systems. [77ba634f6949] * tgetpass.c: add term_* proto [520f5149d073] * sudoers.pod: mention glob() [ddaab8e03c52] 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. [fae25cda762b] 2009-02-08 Todd C. Miller * term.c: Move terminal setting bits from tgetpass.c to term.c [03d43325ee99] * Makefile.in, def_data.c, def_data.h, def_data.in, sudoers.pod, tgetpass.c: Add pwstars sudoers option that causes sudo to print a star every time the user presses a key. [7aab417e184d] 2009-02-03 Todd C. Miller * Makefile.in: Fix up F<> brokenness for visudo.man.in and sudoers.ldap.man.in. [64f70e879816] 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. [e2c5732d54f5] 2009-01-17 Todd C. Miller * toke.c, toke.l: Comments that begin with #- should not be parsed as uids. [a72a50f12f41] 2009-01-09 Todd C. Miller * sudo.c: Do not try to set the close on exec flag if we didn't actually open sudoers. [ece3ca256904] 2008-12-19 Todd C. Miller * ChangeLog: regen [e11f0e4c1bdd] [SUDO_1_7_0] 2008-12-14 Todd C. Miller * TODO: sync [5b8954462bb3] 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. [8563601cb3de] * configure, configure.in: Don't try to build sudo_noexec.so on HP-UX with the bundled compiler as it cannot generate shared objects. [6d4262ef9669] * emul/charclass.h, glob.c, lbuf.c, tgetpass.c: K&R compilation fixes [77921678d17c] * 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. [96b209f4778f] 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 tags. [fdbaf89d6f35] 2008-12-03 Todd C. Miller * sudoers.cat, sudoers.man.in: regen [1ecce7c1b841] * sudoers.pod: hostnames may also contain wildcards [82b76695601c] * Makefile.in: remove stamp-* files and linux core files in clean target [22003f091467] 2008-12-02 Todd C. Miller * auth/sudo_auth.h, config.h.in, configure, configure.in: Use HAVE_SIA_SES_INIT instead of HAVE_SIA for Digital UNIX [6905bede8410] 2008-11-26 Todd C. Miller * configure, configure.in: correctly enable SIA on Digital UNIX [a51881d13995] * TODO: checkpoint [af0fe8d94d42] * ChangeLog: sync [831f623cf99c] 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. [20f306ba883b] 2008-11-24 Todd C. Miller * sudoers.cat, sudoers.man.in: regen [76d97c4c318f] * sudoers.pod: fix typos; Markus Lude [bff8bc1e2066] * ChangeLog: sync [f108552531cd] * toke.c: regen [de828413c67e] * toke.l: Fix matching of a line that only consists of a comment char [09c953d8d5ca] 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. [d056058930bc] * visudo.c: When checking for alias use, also check defaults bindings. [2647f82c7dbd] * redblack.c: unused var [b7ff71c17c18] * redblack.c: Replace my rbdelete with Emin's version (which actually works ;-) [21b133dd0c72] 2008-11-19 Todd C. Miller * testsudoers.c: malloc debugging [0fb446fa3279] * visudo.c: malloc options in devel mode for visudo too [98d06c6afeef] 2008-11-18 Todd C. Miller * sudo.c: fix compilation on non-C99; from Theo [7c304e16c536] * visudo.c: fix check_aliases [83f30a3b1765] * alias.c: when destroying an alias, free the correct data pointer [6e1a8bd86c01] * auth/sudo_auth.h: add proto for aixauth_cleanup; from Dale King [eba94ffc8f63] 2008-11-15 Todd C. Miller * sudo.cat, sudo.man.in, sudoers.cat, sudoers.man.in, visudo.cat, visudo.man.in: regen [409fa57fff83] * sudo.pod, sudoers.pod, visudo.pod: standardize on the term 'option' for command line options (not flag) [228caefc2e36] 2008-11-14 Todd C. Miller * INSTALL: Add note on configuring HP-UX pam [f7674a581baf] 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. [7d997d7106d6] * sudo.c: Don't error out if no tty or askpass unless we actually need to authenticate. [9f23b83ed66c] 2008-11-10 Todd C. Miller * ChangeLog: regen [23f9aef32da6] * pathnames.h.in, sudo.c: s/overriden/overridden/; from Tobias Stoeckmann [9f7459a8fac5] 2008-11-09 Todd C. Miller * WHATSNEW, visudo.c: check sudoers owner and mode in strict mode [a3468c5ac1c4] * gram.c, toke.c: regen [7d6b515a5443] * sudo.man.in, sudoers.man.in, visudo.man.in: Update copyright years. [52d340cb8cba] * 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. [b4e6bf2beafa] * emul/charclass.h, fnmatch.c, glob.c: add my copyright [28681385014a] 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. [a5a49d603cd7] * UPGRADE, WHATSNEW: add sections on tgetpass changes [2e6929b6a102] * tgetpass.c: Treat EOF w/o newline as an error. [aa02b1db9240] 2008-11-07 Todd C. Miller * parse.c: Fix "sudo -v" when NOPASSWD is set. [f4914711ea80] * auth/bsdauth.c, auth/fwtk.c, auth/pam.c, auth/sudo_auth.c, auth/sudo_auth.h: 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. [980f760ad419] * sudoers.cat, sudoers.man.in: regen [6ca21a2cd869] * def_data.c, def_data.h, def_data.in, sudo.c, sudoers.pod: Sudo will now refuse to run if no tty is present unless the new visiblepw sudoers flag is set. [0cc56943252e] 2008-11-06 Todd C. Miller * aix.c: just use RLIM_INFINITY for RLIM_SAVED_MAX if RLIM_SAVED_MAX not defined [24fc6f712d5c] * aix.c: fix fallback value for RLIM_SAVED_MAX [e09e04e1af89] * auth/aix_auth.c, auth/sudo_auth.h: Move clearing of AUTHSTATE into aixauth_cleanup. [e14ae7bd259c] * 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. [d14f68f1b0ab] * isblank.c: Add isblank() function for systems without it. Needed for POSIX character class matching in fnmatch.c and glob.c. [16cba30b283f] 2008-11-05 Todd C. Miller * TROUBLESHOOTING: expound on sudo and cd [8e0fa9033637] 2008-11-04 Todd C. Miller * ChangeLog: regen [40cf320a10fc] * sudoers.cat, sudoers.man.in: regen [7cac761ae2c6] * sudoers.pod: mention defauts parse order [4e2ce86d1394] 2008-11-03 Todd C. Miller * Makefile.in, aclocal.m4, compat.h, configure: Add isblank() function for systems without it. Needed for POSIX character class matching in fnmatch.c and glob.c. [a1ab55da8424] * Makefile.in: add emul/charclass.h to HDRS [7e8a019dcaa4] 2008-11-02 Todd C. Miller * TODO: checkpoint [afeb9bc1baed] * defaults.c, parse.c, testsudoers.c, visudo.c: Move update_defaults into defaults.c and call it properly from visudo and testsudoers. [f4dbb369461f] * defaults.c, interfaces.c, pwutil.c, sudo.c, sudo_edit.c, tgetpass.c, tsgetgrpw.c: use zero_bytes() instead of memset() for consistency [4cee0465f4a8] * logging.c, mon_systrace.c, parse.c, sudo.c, sudo_edit.c, tgetpass.c, visudo.c: Zero out sigaction_t before use in case it has non-standard entries. [120092225459] * match.c: quiet gcc [098a1df49b23] * 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 '/'. [3c46fd317acb] 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. [12e75ee49c0c] 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. [7266ab3296a3] 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. [4e804b004e38] * 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. [bb8e5f68d944] 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. [4e422fa1527e] 2008-10-24 Todd C. Miller * sudo.cat, sudo.man.in, sudoers.cat, sudoers.ldap.cat, sudoers.ldap.man.in, sudoers.man.in, visudo.cat, visudo.man.in: regen man pages; no more hyphenation [15de4fe2fe01] * 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. [6eb461319fa5] 2008-10-23 Todd C. Miller * auth/kerb5.c, config.h.in, configure, configure.in: 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. [4b554a98470d] 2008-10-08 Todd C. Miller * sudo.pod: resort ENVIRONMENT [f4f20f40653e] * sudoers.pod: document sudoers_locale [0bffd2dbe806] * sudo.pod, sudo_edit.c: add SUDO_EDITOR variable that sudoedit uses in preference to VISUAL or EDITOR [0ef8cb248cee] * toke.c, toke.l: In fill_cmnd(), collapse any escaped sudo-specific characters. Allows character classes to be used in pathnames. [5685244c8e44] 2008-10-03 Todd C. Miller * lbuf.c: fix typo in non-C89 function declaration [99a7113b3a05] * sudoers.pod: Mention POSIX characters classes now that out fnmatch() and glob() support them. [9c916f1230c3] * sample.sudoers, sudoers.pod: Replace [A-z] (which won't match in UTF8) with [A-Za-z] which is locale agnostic. [a60a62bec244] * parse.h: use __signed char if we are going to assign a negative value since on Power, char is unsigned by default [2877b319df17] * config.h.in, configure, configure.in: Add tests for __signed char and signed char. [5eb874fdf1d4] * 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. [3db67415ecc3] 2008-09-26 Todd C. Miller * emul/charclass.h, fnmatch.c, glob.c: Add character class support to included glob(3) and fnmatch(3). [6b5b4ad77899] 2008-09-16 Todd C. Miller * emul/fnmatch.h: Remove UCB advertising clause and some compatibility defines. [2ade7bee74e1] 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. [aa49ab68f82d] * def_data.c, def_data.h, def_data.in, defaults.c, sudo.c: Add sudoers_locale Defaults option to override the default sudoers locale of "C". [0639886a35bf] 2008-09-13 Todd C. Miller * sudo.c: Set locale to system default except for during sudoers parse. [016dd2736728] 2008-09-12 Todd C. Miller * match.c: Redo change in 1.34 to use pointer arithmetic. [f9e7b63bb450] 2008-09-11 Todd C. Miller * match.c: Fix a dereference (read) of a freed pointer. Reported by Patrick Williams. [69877b633753] 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. [098a95de1746] 2008-08-20 Todd C. Miller * config.h.in: we no longer use setproctitle [c7f20fb747ea] * sudo.h: remove #if 1 [a368ee6816c6] * LICENSE, mkstemp.c: Use my replacement mkstemp() from the mktemp package. [d07c2beb0f9e] 2008-07-12 Todd C. Miller * gram.c: regen with yacc skeleton bug fixed [24784571cbb8] * sudoers.pod: Remove duplicate "as root". From Martin Toft. [97241acfee5e] 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 modules. [a6648227f3f2] 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. [0c174bef36ff] 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 lexer. [64efcdf86d31] 2008-06-25 Todd C. Miller * toke.c, toke.l: Fix line continuation in strings. It was only being honored if preceded by whitespace. [96c21271a3e4] 2008-06-22 Todd C. Miller * config.h.in, configure, configure.in, logging.c: Replace the double fork with a fork + daemonize. [328505441e67] 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. [3caedfeaec87] * 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 distros. [b59ce60a393d] 2008-06-20 Todd C. Miller * configure, configure.in: Fix configure test for dirfd() on Linux where DIR is opaque. [b8f729cdfecc] 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. [c17fee8ad530] 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. [e94a49e992e5] 2008-06-08 Todd C. Miller * configure, configure.in: Add description for NO_PAM_SESSION, from a redhat patch. [b9e4c939ec09] 2008-06-06 Todd C. Miller * sudo.cat, sudo.man.in, sudo.pod: Fix typos in -i usage [2d7ce5de0235] 2008-05-18 Todd C. Miller * configure, configure.in: Redo the test for dgettext() in a way that hopefully will work around the libintl_dgettext() undefined problem. [d27beb0cf85e] 2008-05-11 Todd C. Miller * schema.ActiveDirectory: change filename in comment [733da4ee9ac5] 2008-05-10 Todd C. Miller * Makefile.in, README.LDAP, sudoers.ldap.cat, sudoers.ldap.man.in, sudoers.ldap.pod: Reference schema.ActiveDirectory [d6aec537800e] 2008-05-09 Todd C. Miller * schema.OpenLDAP, schema.iPlanet: Mark sudoRunAs as deprecated. [00c50df807af] * schema.ActiveDirectory: add sudoRunAsUser and sudoRunAsGroup [19bcce6f72fb] * schema.ActiveDirectory: Active Directory schema by Chantal Paradis and Eric Paquet [06a09c92c6a5] 2008-05-08 Todd C. Miller * parse.c: remove an XXX that was fixed [b88038062fa2] * ChangeLog: sync [8fc27c17270e] * 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. [588ccd630367] 2008-05-04 Todd C. Miller * Makefile.in, sudo.psf: No point in packaging the TODO file [9590248fffe1] * ChangeLog: sync [152acf4c6813] 2008-05-03 Todd C. Miller * WHATSNEW, def_data.c, def_data.h, def_data.in, env.c, sudo.c, sudo.h, sudoers.cat, sudoers.man.in, sudoers.pod: Add env_file Defaults option that is similar to /etc/environment on some systems. [1daf53d51e18] 2008-05-02 Todd C. Miller * Makefile.in, README, TODO, WHATSNEW, sudo.cat, sudo.man.in, sudoers.cat, sudoers.ldap.cat, sudoers.ldap.man.in, sudoers.man.in, version.h, visudo.cat, visudo.man.in: change version to 1.7.0 [d41d126b9bd8] * UPGRADE: initial valgrind pass done [c59c3876d8ca] 2008-04-23 Todd C. Miller * ldap.c: Fix typo/think in sudo_ldap_read_secret() when storing the secret. [830d246c09b0] 2008-04-11 Todd C. Miller * ldap.c: define LDAPS_PORT if the system headers do not [247b12325701] 2008-04-10 Todd C. Miller * gram.c, gram.y: Fix another memory leak in init_parser(). [7bba47deba11] * configure, configure.in: There was a missing space before the ldap libs in SUDO_LIBS for some configurations. [7524cfc93759] * alias.c, gram.c, gram.y, toke.c, toke.l: Clean up some memory leaks pointed out by valgrind. [a965866ece1a] 2008-04-07 Todd C. Miller * sudo.c: fix "sudo -s" broken by mode/flags breakout [acffe984d408] * configure, configure.in: remove duplicate check for dgettext [58145529133c] 2008-04-05 Todd C. Miller * aix.c: Fall back to default stanza if no user-specific limit is found. [7b8cb29123ee] 2008-04-02 Todd C. Miller * snprintf.c: include stdint.h if present [f0ec38529306] * snprintf.c: Use LLONG_MAX, not the old QUAD_MAX [01041ce508fb] 2008-04-01 Todd C. Miller * sudoers.ldap.pod: fix cut and pasto [34240fdef5ab] 2008-03-31 Todd C. Miller * pwutil.c: Add #ifdef PURITY [ce1b571ad526] 2008-03-30 Todd C. Miller * auth/bsdauth.c: remove useless cast [494f8a862e1d] 2008-03-27 Todd C. Miller * ChangeLog: sync [f5c97ffaabcc] * TODO: sync [96ff1c44c182] * sudo.h: Split MODE_* defines into primary and flags. [c02ee3027cb9] 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. [cf8d3f85d395] 2008-03-23 Todd C. Miller * Makefile.in, configure, configure.in: 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 Makefile. [05c6f33177d9] * install-sh: If the file given to install is a path, only use the basename of the file when building the destination path. [695ba4e429ce] 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 [0d156835f861] * WHATSNEW, check.c, sudo.c, sudo.cat, sudo.h, sudo.man.in, sudo.pod, sudo_usage.h.in: Add -n (non-interactive) flag. [e3e50400d32d] * sudo.c: Move version printing, etc. into a separate function. [18c91b476e2c] * sudo.c: Don't try to cleanup nsswitch if it has not been initialized. [aeb1ca1b399d] 2008-03-17 Todd C. Miller * logging.c: Block SIGPIPE in send_mail() so sudo is not killed by a problem executing the mailer. [f130e7924cca] 2008-03-14 Todd C. Miller * configure, configure.in: AIX shared libs end in .a, not .so. [a5deb07020d8] 2008-03-13 Todd C. Miller * env.c: Preserve HOME by default too. Matches documentation and previous behavior. [c16f17f1047c] 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. [60f271ce5c16] 2008-03-06 Todd C. Miller * ChangeLog: sync [685e67964eda] * acsite.m4, configure, ltmain.sh: update to libtool-1.5.26 [4c9a8c3d3b40] * config.guess, config.sub: update from libtool-1.5.26 distribution [c6641aef2527] * aix.c, sudo.h: attempt to fix compilation errors on AIX [edb13e5b2184] * Makefile.in: fix typo in last commit [25ba7f7ceae4] * Makefile.in: Add WHATSNEW file to the distribution [213f4115de8f] * visudo.c: use warningx instead of fprintf(stderr, ...) [a3494b8ccb19] * list.c: add DEBUG to list2tq [115d24a3000c] * ChangeLog, TODO: sync [60e6f4d1fac0] * WHATSNEW: mention mailfrom [e2498f9e18d6] * Makefile.in, aix.c, config.h.in, configure, configure.in, set_perms.c, sudo.h: Add aix_setlimits() to set resource limits on AIX using a combination of getuserattr() and setrlimit(). Currently untested. [9b1441fd89ca] 2008-03-05 Todd C. Miller * def_data.c, def_data.h, def_data.in, logging.c, sudoers.cat, sudoers.man.in, 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. [029b9f05d3d9] * defaults.c: store a copy of _PATH_SUDO_ASKPASS in def_askpass that is freeable [a90e407d5e00] * 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. [fbc25d245c4a] * sudoers.ldap.cat, sudoers.ldap.man.in, sudoers.ldap.pod: comment out XXXs for now [595a1d43309d] * WHATSNEW: mention askpass [b993e0837c22] 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 [24f1df2638f6] * configure, configure.in: we are not going to ship a sudo-specific askpass [61949e7a3943] 2008-03-03 Todd C. Miller * sudo.h: fix definition of TGP_ASKPASS [0447c57ba4c3] * def_data.c, def_data.in: make askpass boolean-capable [e0885893a325] * INSTALL: document --with-askpass [c76e15ba97cf] * sudo.cat, sudo.man.in, sudoers.cat, sudoers.ldap.cat, sudoers.man.in, visudo.cat: regen [8d16242980b7] 2008-03-02 Todd C. Miller * sudo.pod, sudo_usage.h.in, sudoers.pod: document -A and askpass [02c07505a78c] * auth/sudo_auth.c, check.c, configure, configure.in, def_data.c, def_data.h, def_data.in, defaults.c, pathnames.h.in, sudo.c, sudo.h, sudo_usage.h.in, 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. [05780f5f71fd] * def_data.c, def_data.in: add missing printf format to SELinux role and type strings [2b32774715e7] 2008-02-27 Todd C. Miller * INSTALL, configure, configure.in: 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. [f61ebd3b19bd] 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 Walsh. [52564fc1c069] * 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. [29d88ca575ba] 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 [5b4bd39b6ea8] 2008-02-19 Todd C. Miller * selinux.c: s/newrole/sudo/ [21b8a96ff8df] * sudo.man.pl, sudo.pod: Only put login_cap(3) in SEE ALSO section if we have login.conf support [05250ddff2c0] 2008-02-18 Todd C. Miller * sudo.cat, sudo.man.in, sudoers.cat, sudoers.ldap.cat, sudoers.ldap.man.in, sudoers.man.in, visudo.cat, visudo.man.in: regen [301e5c5ccdbe] * sudoers.pod: Substitute in comment characters for lines partaining to login.conf, BSD auth and SELinux and only enable them if pertinent. [c1c98fa163ce] * sudoers.man.pl: Substitute in comment characters for lines partaining to login.conf, BSD auth and SELinux and only enable them if pertinent. [6c88f30b878a] * sudo.pod: Substitute in comment characters for lines partaining to login.conf, BSD auth and SELinux and only enable them if pertinent. [acdbdfd24e1d] * sudo.man.pl: Substitute in comment characters for lines partaining to login.conf, BSD auth and SELinux and only enable them if pertinent. [0c56d4750ac3] * Makefile.in, configure, configure.in: Substitute in comment characters for lines partaining to login.conf, BSD auth and SELinux and only enable them if pertinent. [9a02bd6a6658] * Makefile.in, 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 pathname. [2ac1ab191835] 2008-02-17 Todd C. Miller * Makefile.in: run sudo.man.pl when generating sudo.man.in [859727369168] * configure, configure.in, sudo.man.pl: comment out SELinux manual bits unless --with-selinux was specified [97ff4212b649] * sudoers.pod: document role and type defaults for SELinux [870f303366b3] * sudo.c, sudo.cat, sudo.man.in, sudo.pod, sudo_usage.h.in: Document "sudo -ll" and make "sudo -l -l" be equivalent. [3ce6dc429ea3] 2008-02-15 Todd C. Miller * configure, configure.in: Treat k*bsd*-gnu like Linux, not BSD. Fixes compilation problems on Debian GNU/kFreeBSD. [c4efa567a328] 2008-02-13 Todd C. Miller * auth/kerb5.c: Avoid Heimdal'isms introduced in the rev 1.32 rewrite of verify_krb_v5_tgt() [f80538e5a6fa] * 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() [58aac9997557] 2008-02-10 Todd C. Miller * ldap.c: Add debugging so we can tell if the krb5 ccache is accessible [c679322527bb] * INSTALL: mention --with-selinux [9efbe0b52194] 2008-02-09 Todd C. Miller * configure: regen [467a834f867c] * selinux.c: add Sudo tag [d004ee669bed] * sudo.c, sudo.cat, sudo.h, sudo.man.in, sudo.pod, sudo_usage.h.in, sudoers.ldap.cat, sudoers.ldap.man.in, 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 Walsh. [1d4abfe2c004] * 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 Walsh. [1e3b395ce049] * Makefile.in, config.h.in, configure.in, def_data.c, def_data.h, def_data.in, gram.c, gram.h, gram.y, ldap.c, parse.c, parse.h, pathnames.h.in, 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 Walsh. [6b421948286e] 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. [2875be37935c] 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. [b2e429456596] 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 violation. [08d0aecd9f03] * 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 pam_limits.so 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. [df024b415a8d] * env.c, sudo.c, sudo.pod: Only read /etc/environment on Linux and AIX [90669e2aefdb] 2008-01-23 Todd C. Miller * configure, configure.in: Use SUDO_DEFINE_UNQUOTED instead of AC_DEFINE_UNQUOTED to prevent 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. [25390f3ef10a] 2008-01-21 Todd C. Miller * README.LDAP: mention --with-nsswitch=no [c509df927263] * configure, configure.in: ldap_ssl.h depends on ldap.h being included first [d96d90e9b21f] * config.h.in, configure, configure.in, ldap.c: Include ldap_ssl.h if we can find it. Needed for the ldapssl_set_strength defines on HP-UX at least. [9e530470948a] * sudoers.ldap.pod: sync [b9d101f4673a] * TODO: sync [2ce951b2ecd0] * sudo.cat, sudo.man.in, sudoers.cat, sudoers.ldap.cat, sudoers.ldap.man.in, sudoers.man.in, visudo.cat, visudo.man.in: regen [b61d793987e0] * Makefile.in: Use 78n line length when formatting cat pages. [761bee9d5759] * README.LDAP: Remove redundant info that is now in sudoers.ldap.pod [01828dcce59e] 2008-01-20 Todd C. Miller * sudoers.ldap.cat, sudoers.ldap.man.in, sudoers.ldap.pod: Reorganize the first section a bit. Substitute the proper path for /etc/sudoers. [11ae165e065d] * sudoers.ldap.cat, sudoers.ldap.man.in, sudoers.ldap.pod: Substitute values for ldap.conf, ldap.secret and nsswitch.conf Move schema into EXAMPLES [ab6509d1dde7] * configure, configure.in: Substitute values for ldap.conf, ldap.secret and nsswitch.conf into sudoers.ldap.man. [6e689972f465] * configure, configure.in: substitute for sudoers.ldap.man [5a4a25766dee] * Makefile.in: Fix cut & pasto introduced when adding sudoers.ldap man page. [a7b069af8894] * sudoers.ldap.cat, sudoers.ldap.man.in, sudoers.ldap.pod: Fill in some of the missing pieces. Still needs some reorganization and editing. [5e7331722166] 2008-01-19 Todd C. Miller * Makefile.in, sudoers.ldap.cat, sudoers.ldap.man.in, sudoers.ldap.pod: Beginnings of a sudoers.ldap man page. Currently, much of the information is adapted from README.LDAP. [aad28c8a922d] 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. [af58fc76f1ed] * ldap.c: Fix a typo/thinko in one of the calls to sudo_ldap_check_user_netgroup(). From Marco van Wieringen. [70b2eb8097f5] 2008-01-17 Todd C. Miller * config.h.in, configure, configure.in, ldap.c: include in ldap.c if available [34346206ef16] 2008-01-16 Todd C. Miller * gram.c, gram.y: Make sure we define SIZE_MAX for yacc's skeleton.c [d8a45c7a3c42] * tgetpass.c: Use TCSAFLUSH when restoring terminal settings (and echo) to guarantee that any pending output is discarded [549a184479e5] 2008-01-15 Todd C. Miller * sudoers: no longer need to specify SETENV when user has sudo ALL [3051b41f8032] * 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 them [0850325180f0] * sudo.c, sudo.h: Make set_runaspw static void [5d44d7a340ce] * testsudoers.c, visudo.c: g/c set_runaspw stub [79ebb5e2cc38] * configure, configure.in: Don't add -llber twice. [4356d302eef4] 2008-01-14 Todd C. Miller * ldap.c: fix typo [249cecc557e9] 2008-01-13 Todd C. Miller * gram.c: regen [2f94ea375b67] * configure, configure.in: Fix check that determines whether -llber is required. [6afa99523379] * README.LDAP, config.h.in, configure, configure.in, ldap.c: For netscape-based LDAP, use ldapssl_set_strength() to implement the checkpeer ldap.conf option. [16ae24d73795] * 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 failure. [d12e5f1695b8] 2008-01-12 Todd C. Miller * auth/kerb5.c: Rewrite verify_krb_v5_tgt() based on what heimdal's krb5_verify_user() does. [05b5815f86c9] 2008-01-09 Todd C. Miller * gram.c: The U suffix on constants is an ANSI feature [c6dfce3167f1] * configure, configure.in: Add check for ber_set_option() in -llber [43d0c0566074] 2008-01-07 Todd C. Miller * README.LDAP: default if no nsswitch.conf is files only [c13001d9c998] 2008-01-06 Todd C. Miller * README.LDAP: don't tell people to mail aaron about LDAP stuff [8165ec1ef0c6] * README.LDAP: timelimit and bind_timelimit [44f74cbed167] * ChangeLog: sync [aba1a0ab02bd] * ldap.c: Move ldap.secret reading into a separate function. [1948acc9f7a4] * check.c: user_runas -> runas_pw [334490fc2bae] 2008-01-05 Todd C. Miller * TODO: sync [c7b165cc47c6] * check.c, sudo.pod, sudoers.pod: Add and document the %p escape in the password prompt. Based on a patch from Patrick Schoenfeld. [3972d4f31ffa] * ldap.c: Check strlcpy() return values. [9b42f3ae8ff1] * ldap.c: refactor ldap binding code into sudo_ldap_bind_s() [cb0c66a4d955] * README.LDAP: 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" [f610dea656d6] * sudo.c: comment cleanup and update (c) year [6cd69c810ca5] * 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. [61c3f27066a0] * 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 [2c0b722b1b2d] * gram.y: Free up parser data structures in sudo_file_close(). [2251531d4519] * gram.c, parse.c: Free up parser data structures in sudo_file_close(). [8371f130f401] * 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() [85d3825b1953] * config.h.in, configure, configure.in: Add check for ldap_sasl_bind_s() Remove -DLDAP_DEPRECATED from CFLAGS [240524512bc5] 2008-01-04 Todd C. Miller * config.h.in, configure, configure.in: add check for ldap_create [3089badd73b8] 2008-01-03 Todd C. Miller * config.h.in, configure, configure.in, 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. [6deeca3d00cc] * lbuf.c: include unistd.h [8419ed0bae7f] * config.h.in, configure.in: fix typo in mtim_getnsec [2d5f21230a60] 2008-01-02 Todd C. Miller * config.h.in, configure, configure.in: add check for st__tim in struct stat as used by SCO [587060ea2a89] * ldap.c: use ldap_search_ext_s instead of deprecated ldap_search_s [5fc44fe3b44c] * Makefile.in, TODO, sudo.cat, sudo.man.in: add sudo_nss.h to HDRS [86f01a70ff29] * ldap.c: Replace deprecated ldap_explode_dn() with calls to ldap_str2dn() and ldap_rdn2str(). [aa217002cfae] 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(). [e22dceb85e57] * ChangeLog: sync [adad27b36107] * TODO: sync [c449eb47e0ef] * gettime.c, sudo.c: Remove some already fixed XXXs [532788d0e6da] * ldap.c: Same return value as non-existent sudoers if LDAP was unable to connect. [5819810e8e4e] * sudo.pod: mention /etc/environment [ea8e6102f853] * README.LDAP, UPGRADE, WHATSNEW: Update to reflect recent developments. [ed1fb026fe77] * sudo.c: Print nsswitch.conf, ldap.conf and ldap.secret paths in -V output. [55b68a58260d] * 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. [4bb51e297e0d] * env.c, ldap.c: Define LDAPNOINIT before calling ldap_init(), etc. to disable user ldaprc and system defaults that could affect how LDAP works. [ce5036440db2] * INSTALL, configure, configure.in, pathnames.h.in, 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 [ea5d7704381f] * parse.c: Honor def_ignore_local_sudoers [f38e1121fae1] 2007-12-31 Todd C. Miller * ldap.c: no longer need to check def_ignore_local_sudoers here [fce2a72f96fb] * 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. [981b37b5adff] * parse.c: fix double free introduced in rev 1.218 [c574b02d8747] * ldap.c: belt and suspenders; zero out result after freeing it [7732988d4620] * 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 [61d9068f0645] * 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 [643babf597a8] * ldap.c: make it clear that the global options are from LDAP [9ff950349463] * logging.c: allocate proper amount of space for error string [8bebb7d46d19] * sudo_nss.c, sudo_nss.h: actual sudo nss code [5bd7d52d7738] * ldap.c, parse.c, sudo.c, sudo.h: nss-ify display_privs and display_cmnd. [cccfdd3253f2] * defaults.c, parse.c, testsudoers.c, visudo.c: move update_defaults() to parse.c [ace144b958a9] * Makefile.in, 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 [6225edde89a6] 2007-12-28 Todd C. Miller * Makefile.in, README.LDAP, ldap.c, pathnames.h.in, sudo.c, sudo.h: First cut at nsswitch.conf support. Further reorganizaton and related changes are forthcoming. [717f59d0790b] 2007-12-21 Todd C. Miller * env.c, pathnames.h.in, 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). [15d3edae27e4] * ldap.c: include limits.h [e19875ef0f82] 2007-12-20 Todd C. Miller * WHATSNEW: reword LDAP SASL [7ec3c4ec31b5] 2007-12-19 Todd C. Miller * TODO: sync [87c5a7aea7bf] * README.LDAP: Add an example sudoRole, clarify netscape vs. openldap a bit more [6f96c0ca8107] * README.LDAP: Be clear on what is OpenLDAP vs. Netscape-derived [a33c8314dec5] * config.h.in, configure, configure.in, 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. [abb62dc7e4a3] * ldap.c: fix compilation on solaris [03d449684e80] * Makefile.in: add missing .h and .c files for missing lib objs [8b37825bdfc7] 2007-12-18 Todd C. Miller * ldap.c: fix LDAP_OPT_NETWORK_TIMEOUT setting [226eba89c0ad] * ldap.c: fix compilation on Solaris [917d47639eb6] 2007-12-17 Todd C. Miller * configure, configure.in: fix typo [009d5c81b225] * README.LDAP: try to clear up which variables are for OpenLDAP and which are for netscape-derived SDKs [f8d9823ee73c] * config.h.in, configure, configure.in, ldap.c: Add support for "ssl on" in both netscape and openldap flavors. Only the OpenLDAP flavor has been tested. [952745829ec5] * 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 [da02d1b67a2c] * sudo.c: ld -> ldap_conn [01afa6d927cc] 2007-12-16 Todd C. Miller * logging.c, sudo.c, sudo.h: Better ldap cleanup. [25b9abe2d617] * 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). [d48dc6c9c3b4] 2007-12-14 Todd C. Miller * ldap.c: Improved warnings on error. [c8dce7b4feb4] * ldap.c: Make ldap config table driven and set the config *after* we open the connection. [d9698b5a2681] 2007-12-13 Todd C. Miller * ldap.c: fix LDAP_OPT_X_CONNECT_TIMEOUT compat define [598c6df06660] * configure, configure.in: some operating systems need to link with -lkrb5support when using krb5 [8896365dde9e] 2007-12-10 Todd C. Miller * WHATSNEW: minor update [acfeeb7f4886] * sudo.cat, sudo.man.in, sudoers.cat, sudoers.man.in: regen [a3c6699674f9] 2007-12-08 Todd C. Miller * ChangeLog, TODO: sync [138e99b925ee] * ldap.c, schema.OpenLDAP, schema.iPlanet, sudoers2ldif: add -g support for LDAP [8fc27dbe9287] 2007-12-03 Todd C. Miller * WHATSNEW, sudo.c, sudo.pod, sudo_usage.h.in: The -i and -s flags can now take an optional command. [6afec104ee77] 2007-12-02 Todd C. Miller * auth/pam.c, def_data.c, def_data.h, def_data.in, sudo.c, sudo.pod, sudoers.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. [e4c5402131a6] * sudo.c: Move setting of login class until after sudoers has been parsed. Set NewArgv[0] for -i after runas_pw has been set. [62a48c8c56fa] * configure, configure.in: Move the dgettext check. [5fd8a4712d1c] 2007-12-01 Todd C. Miller * auth/pam.c, config.h.in, configure, configure.in: 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 localized. TODO: concatenate non-std PAM prompts and user-specified sudo prompts. [81c25a415d41] 2007-11-27 Todd C. Miller * Makefile.in, config.h.in, configure, configure.in, parse.c, set_perms.c, sudo.c, sudo.h: Use AC_FUNC_GETGROUPS instead of a home-grown attempt that was insufficient. [1cce6ec1a91e] * acsite.m4, configure, interfaces.c, memrchr.c: Fix typos; Martynas Venckus [be1233cca11a] 2007-11-26 Todd C. Miller * set_perms.c: Don't assume runas_pw is set; it may not be in the -g case. [aa11bd2193ac] 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. [53837fc755f7] 2007-11-21 Todd C. Miller * WHATSNEW, check.c, def_data.in, 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.cat, sudo.h, sudo.man.in, sudo.pod, sudo_usage.h.in, sudoers.cat, sudoers.man.in, sudoers.pod, testsudoers.c, visudo.c, visudo.cat, visudo.man.in: 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 [9019309df6d0] * configure, configure.in: fix setting of mandir [2c60f269399f] * sudo.pod, sudoers.pod: document that ALL implies SETENV [bcc8e5b703b9] * ldap.c: s/setenv_ok/setenv_implied/g [f005df2c2eea] * ldap.c: hostname_matches() returns TRUE on match in sudo 1.7. [c3d4377b6e8b] * ldap.c: use strcmp, not strcasecmp when comparing ALL [e486024574a1] * ldap.c: Make sudo ALL imply setenv. Note that unlike with file-based sudoers this does affect all the commands in the sudoRole. [bc12f54321d1] * 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. [026e2cb40680] * visudo.c: Add missing sudo_setpwent() and sudo_setgrent() calls. Also use sudo_getpwuid() instead of getpwuid(). [86f30a8fbd49] 2007-11-15 Todd C. Miller * sudoers: Expand on the dangers of not using visudo to edit sudoers. [e434e8057d02] 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. [561da4a13afa] 2007-11-07 Todd C. Miller * glob.c: expand "u_foo" types to "unsigned foo" to avoid compatibility issues. [b0d7c64d78c3] 2007-11-04 Todd C. Miller * logging.c: Refactor log line generation in to new_logline(). [6a9b9730615d] 2007-10-25 Todd C. Miller * TROUBLESHOOTING: fix typo [9e19d4f86e47] 2007-10-24 Todd C. Miller * config.h.in, configure, configure.in, interfaces.c, interfaces.h, match.c: Add configure check for struct in6_addr instead of relying on AF_INET6 since some systems define AF_INET6 but do not include IPv6 support. [e24082c416bd] 2007-10-21 Todd C. Miller * configure, configure.in: Fix block to add -lutil for FreeBSD and NetBSD when logincap is in use. [76a9df4a63be] 2007-10-20 Todd C. Miller * configure, configure.in: POSIX states that struct timespec be declared in time.h so check there regardless of the value of TIME_WITH_SYS_TIME. [e42c55ec9daf] 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. [5dfb2379d995] 2007-10-09 Todd C. Miller * Makefile.in: g/c @ALLOCA@ [e6946c2e3820] * configure: regen [9bac7159a138] * INSTALL, auth/pam.c, config.h.in, configure.in: Add --disable-pam-session configure option to disable calling pam_{open,close}_session. May work around bugs in some PAM implementations. [273d0fdb4a9d] 2007-10-08 Todd C. Miller * tgetpass.c: quiet gcc warnings [325565c5a579] * 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. [db2139a8d8b8] 2007-09-15 Todd C. Miller * def_data.c, def_data.h, def_data.in: Reorder things such that the definition of env_reset come right before the env variable lists. [e0d8e22a581a] * parse.h: Shrink type and seqno in struct alias from int to u_short [9425263dd565] * 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. [301a0548ffff] 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. [c7c1dd4b36c8] * auth/pam.c: Set PAM_RHOST to work around a bug in Solaris 7 and lower that results in a segv. [3a8865b3a357] 2007-09-11 Todd C. Miller * gram.c: regen [5647be127950] * alias.c, defaults.c, gram.y, list.c, list.h, match.c, parse.c, parse.h, testsudoers.c, visudo.c: rename lh_ -> tq_ [8f500c542c4a] 2007-09-10 Todd C. Miller * alloc.c: remove some useless casts [409a448b23f5] * 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 [ae478fdef61a] 2007-09-06 Todd C. Miller * Makefile.in, alloca.c, configure.in: Since we ship with a pre-generated parser there is no need to ship a bogus alloca implementation. [3f611a7cc0e5] * configure: regen [771eccf5269c] * configure.in: remove initial setting of CHECKSIA, we require that it be unset if not used [a2e91adc5aa2] * Makefile.in: add list.c to SRCS [7db0e56cf5b9] * configure: regen [3716ec30172e] * configure.in: only do SIA checks on Digital Unix [6a96e1af2597] 2007-09-05 Todd C. Miller * sudoers.cat, sudoers.man.in: regen [ac1dc29de72b] * ChangeLog, TODO: sync [781effce0a2d] * auth/kerb5.c: Remove call to krb5_cc_register() as it is not needed for modern kerb5. [351b8b764f16] * configure: regen [ac21dbcc9c2c] * aclocal.m4, configure.in: New method for setting the default authentication type and avoiding conflicts in auth types. [5fb15be11f78] * 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. [582e015786b0] 2007-09-04 Todd C. Miller * ldap.c: back out partial ldaps support mistakenly committed [357703e94b2d] * ldap.c: Add support for unix groups and netgroups in sudoRunas [2f04eb91c6d0] 2007-09-03 Todd C. Miller * sudo_edit.c: Fix sudoedit of a non-existent file. From Tilo Stritzky. [a5488a03bddd] 2007-09-02 Todd C. Miller * configure: regen [541177376ee1] * INSTALL: update --passprompt escape info [6d57db4cd538] * configure.in: remove now-bogus comment and update copyright date [6a4af45fa331] * configure.in: Fix up use of with_passwd [7c79d8640f77] * acsite.m4, config.guess, config.sub, configure.in, ltmain.sh: Update to autoconf-2.61 andf libtool-1.5.24 [045259b0b439] * Makefile.in: "cmp -s" not just cmp Add @datarootdir@ to quiet autoconf-2.61 [f5b6a7afb817] 2007-09-01 Todd C. Miller * gram.c: regen [b5b78e71d2cb] * gram.y: move tags and runaslist propagation to be earlier [94f7805f4489] * visudo.c: If -f flag given use the permissions of the original file as a template [9303d22bddb0] * gram.y: prevent a double free() when re-initing the parser [5b3907c4de5a] 2007-08-31 Todd C. Miller * configure: regen [49a90b19a17d] * 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, config.h.in, configure.in, 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 * [35e1d01ae197] * gram.c: regen [70ce412a458a] * Makefile.in, 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. [9cea0e281148] * Makefile.in: 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. [429ea065abf1] * gram.y, parse.h: Convert NEW_DEFAULT anf NEW_MEMBER into static functions. [2f3433833589] * 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. [881474532f3e] * gram.c: regen [9152a19d4188] * defaults.c, gram.y, parse.c, parse.h, testsudoers.c, visudo.c: Change list head macros to take a pointer, not a struct. [054f1dcce4cc] * gram.c: regen [be154aae6235] * gram.y: Propagate the runasspec from one command to the next in a cmndspec. [4957b1cb03a3] 2007-08-30 Todd C. Miller * match.c: Replace has_meta() with a macro that calls strpbrk(). [a2e58846a542] * regen [5a932a5c9451] * 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 functions. 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. [7c37b271607a] * parse.c: Fix pasto, append "!" not negated (which is an int) for sudo -l output. [93a444c3997f] * Makefile.in: Remove the dependency of gram .h on gram.y, the .c dependency is enough. Only move y.tab.h to gram.h if it is different; avoids needless rebuilding. [67bf4ea2a2e5] 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. [795effacb6be] 2007-08-26 Todd C. Miller * Makefile.in: Revert the "cmp" portion of the last diff, it doesn't make sense. [26f34bf4e2e3] * Makefile.in: Remove *.lo for clean: When generating the parser, only move the generated files into place if they differ from the existing ones. [84673fea371b] 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. [592e9f690556] * match.c: Fix thinko introduced when merging IPV6 support. [da38cd5eb8c7] 2007-08-24 Todd C. Miller * HISTORY, LICENSE: regen [0d7b27b90634] * license.pod: add 2007 [510e5048ae1a] * UPGRADE: mention #uid vs. comment pitfall [4d2861898bcc] * acsite.m4: Merge in a patch from the libtool cvs that fixes a problem with the latest autoconf. From Stepan Kasal. [0c279ae7df3e] * parse.h: Back out he XOR swap trick, it is slower than a temp variable on modern CPUs. [91c4b024e317] * gram.c: regen [cb6d4106fb74] * 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. [8bf4d9fbee58] 2007-08-23 Todd C. Miller * parse.h: remove useless statement [421ec1dd73e6] * toke.c, toke.l: Refactor #include parsing into a separate function and return unparsed chars (such as newline or comment) back to the lexer. [64166917aa3d] 2007-08-22 Todd C. Miller * WHATSNEW: mention better uid support [56f510e7f2ec] * sudoers.pod: Users may now consist of a uid. [5fd31b2c55ed] * gram.c, gram.h, toke.c: regen [599e58af6dc1] * parse.c: Use lbuf_append_quoted() for sudo -l output to quote characters that would require quoting in sudoers. [3132d05c990a] * lbuf.c, lbuf.h: Add lbuf_append_quoted() which takes a set of characters which should be quoted with a backslash when displayed. [ab09bebb1d65] * 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. [461fe01f8392] * gram.y, toke.l: Replace RUNAS token with '(' and ')' tokens to make the runas portion of the grammar more natural. [e0c383b4684d] * BUGS: The BUGS file is history [4d9a809585c7] * Makefile.in, README: The BUGS file is history [d9500e261172] 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. [d7f3bd94eeda] * WHATSNEW: Glob support was back-ported to 1.6.9 [d1d5cfd46228] 2007-08-20 Todd C. Miller * Makefile.in: remove sudo_usage.h in distclean [df05ce9c4127] * parse.c: If a Defaults value contains a blank, double-quote the string. [9057a910daad] * 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. [4a4e8eacefe6] * sudo.c: Be consistent when using single quotes and backticks. [d010b83a0fa1] 2007-08-19 Todd C. Miller * Makefile.in, configure, configure.in, lbuf.c, lbuf.h, parse.c, sudo.c, sudo_usage.h.in: 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. [4dfd0ee8d961] 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. [700eab37c5a6] 2007-08-17 Todd C. Miller * history.pod: some more info [8140112a8ae1] * history.pod: Mentioned Chris Jepeway's parser and also the new one that is in sudo 1.7. [2132d00f0597] 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. [2b60fb572e12] 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. [b59b056f5ee2] * sudo.cat, sudo.man.in, sudoers.cat, sudoers.man.in, visudo.cat, visudo.man.in: regen [5fb719f18ebc] * INSTALL, Makefile.in, WHATSNEW, config.h.in, configure.in, def_data.c, def_data.h, def_data.in, gram.c, gram.h, gram.y, parse.c, parse.h, pathnames.h.in, 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). [61ff76878e4a] * config.h.in, configure, configure.in, sudo.c: use getaddrinfo() instead of gethostbyname() if it is available [cc33c136aa6a] 2007-08-14 Todd C. Miller * parse.c, sudo.c: Deal with OSes where sizeof(gid_t) < sizeof(int). [130a89cbdfba] * interfaces.c: repair non-getifaddrs() code after ipv6 integration [7ae7a89e2236] * sudo.c: If we can open sudoers but fail to read the first byte, close the file stream before trying again. [6f31272fae7b] 2007-08-13 Todd C. Miller * toke.c: regen [4d7afe0aa6fa] * gram.y, interfaces.c, interfaces.h, match.c, sudoers.pod, toke.l: Add IPv6 support; adapted from patches by YOSHIFUJI Hideaki [4e6ff2965a42] * sudo.pod, sudoers.pod, visudo.pod: Add some missing markup Update copyright [7e6d3c686b5e] 2007-08-12 Todd C. Miller * configure, configure.in: fix sudo_noexec extension which got broken in the libtool update [3a5b447df861] 2007-08-10 Todd C. Miller * Makefile.in: explicitly specify -Tascii to nroff [45c8da4cbefe] 2007-08-08 Todd C. Miller * logging.c: remove an ANSI-ism that crept in [29086f87b2ca] 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 [c3abcd8f76f4] * visudo.pod: Use a list for the environment instead of an indented literal paragraph. [0ffcfcb7349f] * sudoers.pod: Adjust list indentation [615c89e3123a] * license.pod: add =head3 [8b2e0d38c0bd] 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 [3e3a17bff150] 2007-08-02 Todd C. Miller * match.c: Fix off by one in group matching. [b529602b7fba] 2007-07-31 Todd C. Miller * env.c: Fix typo: PYTHONINSPEC should be PYTHONINSPECT. From David Krause. [ffbf8907c6e7] 2007-07-30 Todd C. Miller * configure, configure.in: Add missing define of HAVE_GSS_KRB5_CCACHE_NAME for the -lgssapi_krb5 case. [2b85a89c2252] * aclocal.m4, configure, configure.in: Fix link tests such that new gcc doesn't optimize away the test. [83484ec95cba] 2007-07-29 Todd C. Miller * sudo.pod, sudoers.pod, visudo.pod: add missing over/back [251a12c89b91] * sudo.pod, sudoers.pod, visudo.pod: Change FILES section to use =item [60b9efc3a0b2] * 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. [1100cd4fa997] * 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. [9086a8f756b1] 2007-07-26 Todd C. Miller * sudo.pod, sudoers.pod, visudo.pod: Use file markup for paths in the FILES section [940d99f731f2] * sudo.pod, sudoers.pod, visudo.pod: Don't capitalize sudo/visudo [f067a455d44b] * sudoers.pod: Sort sudoers options; based on a diff from Igor Sobrado. [a9b9befe85ac] 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 .man.in file will add @mansectsu@ and @mansectform@ back in after pod2man is done anyway. [b50ea0db727c] 2007-07-22 Todd C. Miller * LICENSE, Makefile.in, license.pod: Move license info to pod format [25bdd82e592b] * configure, configure.in, sudoers.pod: Substitute value of path_info into sudoers man page. [9ba661a82798] * WHATSNEW: remove features that were back-ported to 1.6.9 [e76d756cbe65] * sudo.c, sudo.pod, visudo.c, visudo.pod: Sort SYNOPSIS and sync usage. From Igor Sobrado. [4970386c9e54] * env.c: Only need sudo_setenv/sudo_unsetenv if we are going to use ldap_sasl_interactive_bind_s() but don't have gss_krb5_ccache_name(). [f1a73d8b35c5] * ChangeLog: rebuild without branch info [5d5a33494677] * Makefile.in: Add ChangeLog target [a702034fdd89] * auth/pam.c: Run cleanup code if the user hits ^C at the password prompt. [9cf87768e921] * 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 string. [5b63f6c88866] 2007-07-20 Todd C. Miller * Makefile.in: ChageLog not Changelog [1243d8473ceb] * ChangeLog: sync [d887df98c6b0] * Makefile.in: CHANGE -> Changelog [917738df30dd] * TODO: sync [cd382f7d1948] 2007-07-19 Todd C. Miller * config.h.in, configure, configure.in, ldap.c: Add configure hooks for gss_krb5_ccache_name() and the gssapi headers. [139606209991] 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. [4735fd5fddb8] * env.c: Split sudo_setenv() into an external version and a version only for use by rebuild_env(). [fda7d655adb1] 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 gss_krb5_ccache_name() [fcafa5a49caf] * README.LDAP: add krb5_ccname [fceb8f883886] * README.LDAP, ldap.c: Add support for sasl_secprops in ldap.conf [1f06f4bf7347] * env.c, sudo.h: Add sudo_unsetenv() and refactor private env syncing code into sync_env(). [045ecb3fd22b] * README.LDAP, ldap.c: The ldap.conf variable is sasl_auth_id not sasl_authid. [a5f98491311b] 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(). [b08a10c3045b] * 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 * [131da52f43f3] * ldap.c: Fix use_sasl vs. rootuse_sasl logic. [0c0417b6918c] * README.LDAP, config.h.in, configure, configure.in, ldap.c: Add support for SASL auth when connecting to an LDAP server. Adapted from a diff by Tom McLaughlin. [a6285f1356ea] 2007-07-14 Todd C. Miller * configure, configure.in: 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. [83f7afdc0ec3] 2007-07-11 Todd C. Miller * HISTORY, Makefile.in, history.pod: Generate HISTORY from history.pod (which is also used for web pages) [60bcd5164931] 2007-07-09 Todd C. Miller * sudo.man.in, sudoers.man.in: regen [63956a366191] * sudo.pod: Better explanation of environment handling in the sudo man page. [6c247742f7ee] * env.c, sudo.c: Defer setting user-specified env vars until after authentication. [4750b79323ee] * env.c: honor def_default_path for PATH set on the command line [6db31d9b6d65] * 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 secure_path [26c0da3840cf] 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. [a4af20658361] * ldap.c: warn -> warning [d87d1192b048] * sudo.pod: add -c option to sudoedit synopsis [15b596a7e2db] * TODO: udpate to reality [e2f8fde89db1] * 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. [e54a44c00a88] * parse.c: Move setting of FLAG_NO_CHECK into the if(pwflag) block. No change in behavior. [c6272b4f2127] * sudoers: add SETENV tag [3a3066bb6788] 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. [45da9efbbafd] * check.c, sudo.c: Do not update timestamp if user not validated by sudoers. [a4a9d4364827] * 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 [1514bfb32847] * logging.c, mon_systrace.c, set_perms.c, sudo.h: PERM_FULL_ROOT is now no different than PERM_ROOT so remove PERM_FULL_ROOT [b9d047a3178c] * check.c: don't check timestamp mtime if we are just going to remove it [5d2470bc6cbd] * sudoers.pod: Move sudoers defaults parameters into their own section. [54701fbc0ff3] * testsudoers.c: Reduce a level of indent by a few placed continue statements. [5d5a9838c8ef] * 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. [dd59fa4b91a1] 2007-07-05 Todd C. Miller * parse.c: Print default runas in "sudo -l" if sudoers don't specify one. [07d408c400bd] * match.c: Less hacky way of testing whether the domain was set. [a537059776e5] 2007-07-04 Todd C. Miller * INSTALL: Mention pam-devel and openldap-devel for Linux [9e708c54ecc3] 2007-07-03 Todd C. Miller * README.LDAP: or vs. are [abe8c0f3a410] 2007-07-01 Todd C. Miller * sudo.c: fix typo in Solaris project support [2ffeb2d80959] * HISTORY: update [df162b36f120] * sudo.c: Make -- on the command line match the manual page. The implied shell case has been simplified as a result. [cd217a1f6694] 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 [65b11421f5c8] * sudoers2ldif: honor SETENV and NOSETENV tags [2c0d5ba7a09b] 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. [ccbba72ea112] * mon_systrace.c: getcwd() returns NULL on failure, not 0 on success [88cd9e66e530] * mon_systrace.c: allow chunksiz to reach 1 before erroring out [619d68f14964] * sudo.cat, sudo.man.in, sudoers.cat, sudoers.man.in, visudo.cat, visudo.man.in: regen [8db512d3caf0] 2007-06-23 Todd C. Miller * def_data.c, def_data.h, def_data.in, 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. [5744caebd969] * README.LDAP: replace Aaron's email address with the sudo-workers list [2ffce5f9afc0] * configure: regen [8013dff82c0c] 2007-06-22 Todd C. Miller * schema.OpenLDAP, schema.iPlanet: Break schema out into separate files. [15e598e4c60b] * Makefile.in, README.LDAP: Break schema out into separate files. [1a53966ca1fa] 2007-06-21 Todd C. Miller * auth/aix_auth.c: free message if set by authenticate() [849c220c1236] * match.c: deal with NULL gr_mem [49e4d74f0bbe] 2007-06-20 Todd C. Miller * config.h.in: regen [fead999ad3e9] * configure.in: add template for HAVE_PROJECT_H [e6c42c2eaad1] * closefrom.c: include fcntl.h [54d98b382f03] 2007-06-19 Todd C. Miller * INSTALL: mention --with-project [d3ea3baad7c5] * config.h.in, configure.in, sudo.c: Add Solaris 10 "project" support. From Michael Brantley. [f14f3c8c6554] * sudoers.pod: fix typo [50db81a19787] * configure: regen [ea71afd3e564] * configure.in: Fix preservation of LDFLAGS in the LDAP case. [40a3a47e8059] * memrchr.c: Remove dependecy on NULL [c957ae5e1733] * configure: regen [4955ce0c6912] * aclocal.m4, configure.in: Can't use the regular autoconf fnmatch() check since we need FNM_CASEFOLD so go back to our custom one. [f10d76237486] * env.c: Fix preserving of variables in env_keep. [d040049d6b84] * env.c: add XAUTHORIZATION [0d589a5fe015] * UPGRADE: expand upon env resetting and mention that it began in 1.6.9 not 1.7. [dba251655c76] * sudoers.pod: Update descriptions of env_keep and env_check to match current reality. [dba77357954b] 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. [eec4632bd190] * env.c, logging.c: Treat USERNAME environemnt variable like LOGNAME/USER [09f52dcfd70c] * env.c: Don't need to populate keepenv table with the contents of the checkenv table. [527a14afd973] * sudo.c: Don't force sudo into the C locale. [8a5bd301ef96] * 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. [840c802721e4] 2007-06-16 Todd C. Miller * visudo.c: Remove an duplicate lock_file() call and add a comment. [5af9dcdf0eb6] * UPGRADE: Add sudo 1.6.9 upgrade note. [1585149f2914] 2007-06-14 Todd C. Miller * interfaces.c: Solaris will return EINVAL if the buffer used in SIOCGIFCONF is too small. From Klaus Wagner. [d6899fc44f77] * logging.c, sudo.h: Redo the long syslog line splitting based on a patch from Eygene Ryabinkin. Include memrchr() for systems without it. [66a50e8d553a] * memrchr.c: Redo the long syslog line splitting based on a patch from Eygene Ryabinkin. Include memrchr() for systems without it. [2f6702b7d41b] * Makefile.in, config.h.in, configure, configure.in: Redo the long syslog line splitting based on a patch from Eygene Ryabinkin. Include memrchr() for systems without it. [407a46190921] * configure.in: 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. [9d0258849fa9] 2007-06-13 Todd C. Miller * aclocal.m4, configure, configure.in: Add SUDO_ADD_AUTH macro to deal with adding things to AUTH_OBJS. This deals with exclusive authentication methods in a simple way. [7d70072c0f35] 2007-06-12 Todd C. Miller * LICENSE: mkstemp.c is BSD code too. [29e236d98162] * sudo.pod, sudoers.pod, visudo.pod: No commercial support for now. [7c76b3e192dd] 2007-06-11 Todd C. Miller * sudo.c: cleanenv() is no more. [518080514408] 2007-06-10 Todd C. Miller * ChangeLog: Display branch info in Changelog [44e3b27427c7] * utimes.c: Include config.h early so we have it for TIME_WITH_SYS_TIME [4bf1a00d0703] * ChangeLog: Fix Changelog generation and update. [6e960dbcbece] 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 [faa7e4810758] * auth/kerb5.c, config.h.in, configure.in: 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. [df7acf72bd7c] * env.c: Check TERM and COLORTERM for '%' and '/' characters. From Debian. [f92d05197e40] * configure.in: Fix closefrom() substitution in the Makefile [b642b13fcc5c] * TROUBLESHOOTING: Mention alternate sudo pronunciation. [7c71dc73409f] 2007-06-07 Todd C. Miller * env.c: Remove KRB5_KTNAME from environment. Allow COLORTERM. [70f35a79f780] * 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 Simon. [a3ae6a47cb23] 2007-05-12 Todd C. Miller * aclocal.m4, configure, configure.in: Update long long checks to use AC_CHECK_TYPES and to cache values. [047318eaaeb2] * aclocal.m4, configure.in: Use AC_FUNC_FNMATCH instead of a homebrew fnmatch checker. We can't use AC_REPLACE_FNMATCH since that assumes replacing with GNU fnmatch. [80513a1003ea] 2007-05-11 Todd C. Miller * configure, configure.in: Add closefrom() to LIB_OBJS not SUDO_OBJS if it is missing since we need it for visudo now too. [50837c7c2b5e] 2007-04-24 Todd C. Miller * sudoers.pod: Attempt to clarify the bit talking about network numbers w/o netmasks. [211e68c1d034] * sudo.pod: Clarify timestamp dir ownership sentence. [9178f132c7f7] 2007-04-20 Todd C. Miller * auth/pam.c: Linux PAM now defines __LINUX_PAM__, not __LIBPAM_VERSION. From Dmitry V. Levin. [81fce91667bc] 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. [7da73fb248e9] 2007-04-12 Todd C. Miller * visudo.pod: The sudoers variable is env_editor, not enveditor. From Jean- Francois Saucier. [2a86ec09a6db] 2007-03-29 Todd C. Miller * redblack.c: I tracked down the original author so credit him and include his license info. [3733553a1bba] 2007-02-06 Todd C. Miller * sudo.cat, sudo.man.in, sudo.pod, sudoers.cat, sudoers.man.in, sudoers.pod: Fix typos; from Jason McIntyre. [1ee4ce2512f2] * logging.c: Restore signal mask before calling reapchild(). Fixes a possible race condition that could prevent sudo from properly waiting for the child. [9ee4192385dc] 2007-01-31 Todd C. Miller * pwutil.c: Don't declare pw_free() if we are not going to use it. [adb79a4289ca] * 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. [b4fe65027fb6] 2006-12-11 Todd C. Miller * logging.c: Add "Auto-Submitted: auto-generated" line to sudo mail for rfc 3834. [78002ad90f7b] 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). [da3f27b747c7] 2006-08-17 Todd C. Miller * closefrom.c, config.h.in, configure, configure.in: Add fcntl F_CLOSEM support to closefrom(); adapted from a diff by Darren Tucker. [0331b7780759] * pwutil.c: pw_free() is only used by sudo_freepwcache() so ifdef it out too. [0014c0d9eeba] 2006-08-04 Todd C. Miller * config.guess, config.sub: Update to latest versions from cvs.savannah.gnu.org [aa0143101c20] 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. [559074bd7eb7] * config.h.in, configure, configure.in, set_perms.c: Add seteuid() flavor of set_perms() for systems without setreuid() or setresuid() that have a working seteuid(). Tested on Darwin. [508d8da99189] 2006-07-30 Todd C. Miller * mon_systrace.c: systrace_read() returns ssize_t [9f97d1d1a59d] * configure, configure.in: Fix typo, -lldap vs. -ldap; from Tim Knox. [a8cc43c3bb2a] 2006-07-28 Todd C. Miller * HISTORY: Fix typo; Matt Ackeret [86964ee3dfbd] 2006-07-17 Todd C. Miller * sudo.c: Print sudoers path in -V mode for root. [dc43f2d75bd9] 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. [6d2d9abf996e] 2005-12-28 Todd C. Miller * sudo.pod: fix typo [1473413bcbda] 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. [afc816093026] 2005-11-23 Todd C. Miller * ldap.c: Support comments that start in the middle of a line [c25df6ee3db8] * configure, configure.in: Define LDAP_DEPRECATED until we start using ldap_get_values_len() [ee249bfe230a] 2005-11-18 Todd C. Miller * closefrom.c: Silence gcc -Wsign-compare; djm@openbsd.org [28769ce6418d] * 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. [2bb0df34d09c] * 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. [5dcc9ffd362e] 2005-11-17 Todd C. Miller * config.h.in, configure, configure.in: Add mkstemp() for those poor souls without it. [5fdd02e863e0] * mkstemp.c: Add mkstemp() for those poor souls without it. [c99401207860] * Makefile.in: Add mkstemp() for those poor souls without it. [9c1cf2678f24] 2005-11-15 Todd C. Miller * env.c: Add PERL5DB to list of environment variables to remove. [7375c27ecf75] 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. [3dc8946d90e9] * 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) [6918110a6b82] 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. [54de3778bad0] * visudo.c: Close all fd's before executing editor. [4fcc05e1bec8] * sudo.c: Enable malloc debugging on OpenBSD when SUDO_DEVEL is set. [ef0e8ffa5c9f] * check.c: Fix fd leak when lecture file option is enabled. From Jerry Brown [ce97f9207cd8] 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 [c96e1367d1c1] 2005-11-01 Todd C. Miller * env.c: add JAVA_TOOL_OPTIONS to initial_badenv_table for java 5 [72a6a1571226] 2005-10-28 Todd C. Miller * env.c: add PS4 and SHELLOPTS to initial_badenv_table for bash [89dfb3f318f3] 2005-08-15 Todd C. Miller * sudoers.pod: Fix typo; Toby Peterson [b7a3222b23f4] 2005-08-02 Todd C. Miller * tsgetgrpw.c: Make return buffers static so they don't get clobbered [13323a39b9f5] 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 worldbank [14091e418333] 2005-06-27 Todd C. Miller * ldap.c: Remove ncat() in favor of just counting bytes and pre-allocating what is needed. [25b8712adb61] 2005-06-26 Todd C. Miller * ldap.c: Fix up some comments Add missing fclose() for the rootbinddn case [ae95c8a89711] * ldap.c: align struct ldap_config [35d0d64c76f8] * ldap.c: use LINE_MAX for max conf file line size [da116cb8853d] * pathnames.h.in: add _PATH_LDAP_SECRET [128b04ecfab7] * README.LDAP: Mention rootbinddn Give example ou=SUDOers container [852edc69bd1c] 2005-06-25 Todd C. Miller * INSTALL, configure, configure.in, ldap.c: Support rootbinddn in ldap.conf [1615c91522a1] * env.c, sudo.pod, sudoers.pod: Preserve DISPLAY environment variable by default. [05f503d5f438] * acsite.m4, configure: set need_lib_prefix=no for all cases; this is safe for LD_PRELOAD [18a04dea8d05] * acsite.m4, configure: set need_version=no for all cases; this is safe for LD_PRELOAD [b542560e1a73] * aclocal.m4: typo [c040df0fcd5a] * configure, configure.in: Add dragonfly [f13794618636] * auth/pam.c: Fix call to pam_end() when pam_open_session() fails. [0be47cdfdef1] * configure: regen [7f5c13b4b800] * acsite.m4: rebuild acsite.m4 from libtool 1.9f libtool.m4 ltoptions.m4 ltsugar.m4 ltversion.m4 [a7ba9fd1a2ab] * config.guess, config.sub, ltmain.sh: merge in local changes: config.guess: o better openbsd support config.sub: o hiuxmpp support ltmain.sh 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 [f4149f2c720f] * config.guess, config.sub, ltmain.sh: libtool 1.9f [82a534e7121f] * configure.in: Update with autoupdate and make minor changes for libtool 1.9f [11b5ae5c1428] 2005-06-23 Todd C. Miller * parse.c: don't call sudo_ldap_display_cmnd if ldap not setup [8bcf6c094ffe] * 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. [b95c333299a0] * gettime.c: Move declatation of struct timespec to its own include files for systems without it since it needs time_t defined. [021b4569cc0c] * fileops.c: Move declatation of struct timespec to its own include files for systems without it since it needs time_t defined. [dd8573b2ee7d] * emul/timespec.h: Move declatation of struct timespec to its own include files for systems without it since it needs time_t defined. [f95137771564] * check.c, compat.h: Move declatation of struct timespec to its own include files for systems without it since it needs time_t defined. [2ef2ace8fe85] * ldap.c: Don't set safe_cmnd for the "sudo ALL" case. [ad7fa9e07da0] 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. [fed46d471350] 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 [17bb961fe22d] * parse.c: include grp.h to silence a warning on Solaris [14386fbab640] 2005-04-23 Todd C. Miller * parse.c: Fix printing of += and -= defaults. [a667604c56cd] 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. [6bb455a2c2d6] * 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) [3cafccffcffd] 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 [3d385158354d] 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(). [1dfc2e8c9f2b] * 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 refactored. [e9568f19bde5] 2005-04-11 Todd C. Miller * ldap.c: Replace pass variable with do_netgr for better readability. [1bba841b6e79] * ldap.c: use DPRINTF macro [02b159b66bb5] * ldap.c: estrdup, not strdup [22cdee7973c1] 2005-04-10 Todd C. Miller * parse.c: Add macro to test if the tag changed to improve readability. [4e11b4819556] * parse.c: Avoid printing defaults header if there are no defaults to print... [41a28627df03] * glob.c: Fix a warning on systems without strlcpy(). [6814e0f0e4f4] * pwutil.c: Use macros where possible for sudo_grdup() like sudo_pwdup(). [30f201ff35cd] 2005-04-08 Todd C. Miller * utimes.c: It is possible for tv_usec to hold >= 1000000 usecs so add in tv_usec / 1000000. [794ac4d53a65] 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. [fefa351c5044] 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. [7876bb80d87c] * parse.c, sudo.c: Move initgroups() for -U option into display_privs() so group matching in sudoers works correctly. [b074428ad2ca] 2005-03-27 Todd C. Miller * ldap.c: Removed duplicate call to ldap_unbind_s introduced along with sudo_ldap_close. [19acc1c20f7c] * parse.c: Add missing space in Defaults printing [95d2935bf6d4] 2005-03-25 Todd C. Miller * pwutil.c: Sync sudo_pwdup with OpenBSD changes: use macros for size computaton and string copies. [6b6b241495e5] 2005-03-19 Todd C. Miller * pwutil.c: Zero old pw_passwd before replacing with version from shadow file. [3251b349dfe1] * configure, configure.in: Only attempt shadow password detection if PAM is not being used Add shadow_* variables to make shadow password detection more generic. [d498a3423ac9] * configure.in: Use OSDEFS for os-specific -D_FOO_BAR stuff rather than CPPFLAGS [04d55bbd5e35] 2005-03-13 Todd C. Miller * sudoers.pod: use a non-breaking space to avoid a double space after e.g. [11cdb54bdf7b] * sudo.pod: commna, not colon after e.g. [8d5875ff72e0] 2005-03-12 Todd C. Miller * sudo_noexec.c: Add __ variants of the exec functions. GNU libc at least uses __execve() internally. [d1880473d790] * indent.pro: Match reality a bit more. [633e3fa875a7] * pwutil.c: Missed piece from rev. 1.6, fix sudo_getpwnam() too. [128f7b21c2ee] * 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 libc. [f806052a6ffc] 2005-03-11 Todd C. Miller * alloc.c, logging.c: Make varargs usage consistent with the rest of the code. [3d45affc9851] 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. [8167769b4e19] * visudo.c: make print_unused static like proto says [ecf10e1bae55] * glob.c: silence a warning on K&R systems [2e00425f1a5c] * alias.c, error.c: make this build in K&R land [156f65f8525a] * parse.c: make this build in K&R land [6fc9276889cb] 2005-03-08 Todd C. Miller * toke.c: regen [3b349748cd21] 2005-03-06 Todd C. Miller * ldap.c: return(foo) not return foo optimize _atobool() slightly [11d09d154ed5] * ldap.c: Use TRUE/FALSE [53999320d98f] * ldap.c: Reformat to match the rest of sudo's code. [1bd0f2afa0e7] * sudo.pod: I am the primary author [5d311ecd85c6] 2005-02-23 Todd C. Miller * Makefile.in, README, RUNSON: The RUNSON file is toast--it confused too many people and really isn't needed in a configure-oriented world. [96a6ef7bbc08] * INSTALL: alternate -> alternative [b65015c5d0a2] * tgetpass.c: Use TCSADRAIN instead of TCSAFLUSH since some OSes have issues with TCSAFLUSH. [c66b4763ffdc] * toke.l: Allow leading blanks before Defaults and Foo_Alias definitions [2add513d9277] * Makefile.in: fix rules to build toke.o and gram.o in devel mode [96cbb414ebd3] 2005-02-20 Todd C. Miller * sudoers.pod: env_keep overrides set_logname [401877193a15] * env.c: Fix disabling set_logname and make env_keep override set_logname. [0906e7a5ed93] * compat.h, config.h.in, configure, configure.in: No longer need memmove() [43bdb6efe3f2] * 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. [11658fe92ba2] 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() [8365b0bd0c71] 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. [37e22dce66e9] 2005-02-12 Todd C. Miller * Makefile.in: fix devel builds [9fbb15ef164c] * sudo.c: Fix some printf format mismatches on error. [ffc1c3f11740] * check.c: Fix some printf format mismatches on error. [7b3b508adf50] * configure, gram.c, toke.c: regen [aa76f9d8b02a] * Makefile.in, 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, configure.in, 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. [0610c3654739] * Makefile.binary.in: Update copyright years. [d78ffc9f2e2b] * LICENSE: Update copyright years. [f60473bca4b1] * BUGS, INSTALL, INSTALL.binary, Makefile.in, README, configure.in: version 1.7 [aa977a544ca1] * WHATSNEW: What's new in sudo 1.7, based on the 1.7 CHANGES entries. [ecfcf7269c14] 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 [b192ad4a0548] 2005-02-10 Todd C. Miller * CHANGES, ChangeLog: Replaced CHANGES file with ChangeLog generated from cvs logs [d9ace9dab98f] * set_perms.c: Use warning/error instead of perror/fatal. [e33259df7738] * config.guess: Update OpenBSD section [9d2c23de6801] * UPGRADE: Add upgrading noted for 1.7 [1fb6b6d6df07] * 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 initially. [fc192df8fd15] * config.h.in, configure, configure.in, sudo.c: Set locale to "C" if locales are supported, just to be safe. [91fbaa98f02e] * toke.c, toke.l: Cast?argument to ctype functions to unsigned char. [e096b4d65796] 2005-02-08 Todd C. Miller * env.c: correct value for DID_USER [b5b05d36ec15] * error.c, fnmatch.c, getcwd.c, glob.c, snprintf.c: #include not "compat.h" [7a0ad9a0ccd7] * defaults.c: Reset the environment by default. [4ecc6423e0f0] * sudo.c: Alloc an extra slot in NewArgv. Removes the need to malloc an new vector if execve() fails. [83dfb6f584a7] 2005-02-07 Todd C. Miller * INSTALL, config.h.in, configure, configure.in, sudo.c: Use execve(2) and wrap the command in sh if we get ENOEXEC. [c0c6af4e2a21] 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). [e373e518b4cb] * sudo_noexec.c: Include time.h for time_t in compat.h for systems w/o struct timespec. [a34b5637e458] * compat.h, config.h.in, configure, configure.in: use bcopy on systems w/o memmove [f835eafd78c6] * compat.h: __attribute__((__unused__)) doesn't work in gcc 2.7.2.1 so limit its use to gcc >= 2.8. [1cb9a4e58566] * Makefile.in: Add explicit rule to build sudo_noexec.lo [df1dfcf8dd77] 2005-02-05 Todd C. Miller * INSTALL.configure, Makefile.in: No longer depend on VPATH; pointed out a bunch of missed dependencies. [601a45d4af6b] * TROUBLESHOOTING: Help for PAM when account section is missing [9b8221256756] * auth/pam.c: Give user a clue when there is a missing "account" section in the PAM config. [2529625c0495] * auth/pam.c: Better error handling. [518c9bda23d8] * config.h.in, configure, configure.in: Move _FOO_SOURCE to CPPFLAGS so it takes effect as early as possible. Silences a warning about isblank() on linux. [19c94d7ecdc8] * auth/pam.c: Fix typo (missing comma) that caused an incorrect number of args to be passed to log_error(). [0099dfec560f] 2005-02-01 Todd C. Miller * pwutil.c: Don't try to destroy a tree we didn't create. [d43c4fe03aa4] 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 [ad6b4ac45705] 2005-01-21 Todd C. Miller * configure, configure.in: Fix error message when mixing invalid auth types [68069b3ff5bc] * INSTALL: PAM, AIX auth, BSD auth and login_cap are now on by default if the OS supports them. [4e44e9098cf0] * auth/sudo_auth.h, config.h.in: s/HAVE_AUTHENTICATE/HAVE_AIXAUTH/g [2d569b43b23e] * configure.in: 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 [a21115b6fe9f] 2005-01-18 Todd C. Miller * def_data.c, def_data.in, sudo.c, sudoers.pod: s/-O/-C/ [ee73f1b81923] 2005-01-14 Todd C. Miller * configure.in: Replace: test -n "$FOO" || FOO="bar" With: : ${FOO='bar'} [37552d9054fc] 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. [215908681dfb] 2005-01-06 Todd C. Miller * CHANGES: sync [2e55c03f5790] * tsgetgrpw.c: Can't use strtok() since it doesn't handle empty fields so add getpwent()/getgrent() functions and call those. [bdaa5b0db70e] 2005-01-05 Todd C. Miller * Makefile.in: Fix dummied out toke.c and gram.c dependencies. [4b909c8b2ebe] * Makefile.in: Rename PARSESRCS -> GENERATED since it is only used in the clean target Add devdir variable and use it to specify the path to parser sources [f27b3f41ca23] * configure: regen [22c6435dbd46] * configure.in: Add a devdir variables that defaults to $(srcdir) and is set to . if --devel was specified. Allows for proper dependecies building the parser. [a36d694c6d21] * testsudoers.c: Add support for custom passwd/group files. [296549ff4b87] * Makefile.in: Build private copy of pwutil.o for testsudoers with MYPW defined so it uses our own passwd/group routines. [bafa54ec78ca] * 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() [7e59d6b5510d] * 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 my_* [8c1e068f574c] * logging.c, sudo.c: g/c pwcache_init/pwcache_destroy [60a24909b947] * sudo.h: Undo last commit and add sudo_setspent and sudo_endspent instead. [bac80db08296] * 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 testsudo