Subject: pkg/34422: security/sudo doesn't link
To: None <pkg-manager@netbsd.org, gnats-admin@netbsd.org,>
From: None <jon@univits.com>
List: pkgsrc-bugs
Date: 08/30/2006 14:10:00
>Number:         34422
>Category:       pkg
>Synopsis:       security/sudo doesn't link
>Confidential:   no
>Severity:       serious
>Priority:       high
>Responsible:    pkg-manager
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Wed Aug 30 14:10:00 +0000 2006
>Originator:     Jon Olsson
>Release:        N/A
>Organization:
Univits International AB
>Environment:
SunOS unknown 5.9 Generic_118558-11 sun4u sparc SUNW,Sun-Fire-V240

pkgsrc branch: pksrc-2006Q2
>Description:
root@apasolaris:/usr/pkgsrc/security/sudo$ bmake install
===> Checking for vulnerabilities in sudo-1.6.8pl12nb2
=> Checksum SHA1 OK for sudo-1.6.8p12.tar.gz.
=> Checksum RMD160 OK for sudo-1.6.8p12.tar.gz.
===> Installing dependencies for sudo-1.6.8pl12nb2
==========================================================================
The supported build options for this package are:

        kerberos ldap pam skey

You can select which build options to use by setting PKG_DEFAULT_OPTIONS
or the following variable.  Its current value is shown:

        PKG_OPTIONS.sudo (not defined)

==========================================================================
=> Required installed package libtool-base>=1.5.22nb3: libtool-base-1.5.22nb3 found
===> Overriding tools for sudo-1.6.8pl12nb2
===> Extracting for sudo-1.6.8pl12nb2
===> Patching for sudo-1.6.8pl12nb2
=> Applying pkgsrc patches for sudo-1.6.8pl12nb2
===> Creating toolchain wrappers for sudo-1.6.8pl12nb2
===> Configuring for sudo-1.6.8pl12nb2
configure: WARNING: If you wanted to set the --build type, don't use --host.
    If a cross compiler is detected then cross compile mode will be used.
configure: Configuring Sudo version 1.6.8
Adding NetBSD standard options
checking whether to lecture users the first time they run sudo... yes
checking whether sudo should log via syslog or to a file by default... syslog
checking which syslog facility sudo should log with... local2
checking at which syslog priority to log commands... notice
checking at which syslog priority to log failures... alert
checking how long a line in the log file should be... 80
checking whether sudo should ignore '.' or '' in $PATH... yes
checking whether to send mail when a user is not in sudoers... yes
checking whether to send mail when user listed but not for this host... no
checking whether to send mail when a user tries a disallowed command... no
checking who should get the mail that sudo sends... root
checking for bad password prompt... Password:
checking for bad password message... Sorry, try again.
checking whether to expect fully qualified hosts in sudoers... no
checking for umask programs should be run with... 0022
checking for default user to run commands as... root
checking for editor that visudo should use... vi
checking whether to obey EDITOR and VISUAL environment variables... yes
checking number of tries a user gets to enter their password... 3
checking time in minutes after which sudo will ask for a password again... 5
checking time in minutes after the password prompt will time out... 5
checking whether to use per-tty ticket files... yes
checking whether to include insults... no
checking whether to override the user's path... no
checking whether to get ip addresses from the network interfaces... yes
checking whether stow should be used... no
checking whether to do user authentication by default... yes
checking whether to disable running the mailer as root... yes
checking whether to disable use of POSIX saved ids... no
checking whether to disable shadow password support... no
checking whether root should be allowed to use sudo... yes
checking whether to log the hostname in the log file... no
checking whether to invoke a shell if sudo is given no arguments... no
checking whether to set $HOME to target user in shell mode... no
checking whether to disable 'command not found' messages... yes
checking for egrep... egrep
checking for sparc-sun-solaris2-gcc... gcc
checking for C compiler default output... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables... 
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... (cached) no
checking for gcc option to accept ANSI C... none needed
checking for library containing strerror... none required
checking how to run the C preprocessor... gcc -E
checking build system type... sparc-sun-solaris2.9
checking host system type... sparc-sun-solaris2
checking target system type... sparc-sun-solaris2
checking for a sed that does not truncate output... /usr/pkgsrc/security/sudo/work/.tools/bin/sed
checking for egrep... grep -E
checking for ld used by gcc... /usr/ccs/bin/ld
checking if the linker (/usr/ccs/bin/ld) is GNU ld... no
checking for /usr/ccs/bin/ld option to reload object files... -r
checking for BSD-compatible nm... nm
checking whether ln -s works... yes
checking how to recognise dependent libraries... pass_all
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... no
checking for unistd.h... yes
checking dlfcn.h usability... yes
checking dlfcn.h presence... yes
checking for dlfcn.h... yes
checking for sparc-sun-solaris2-g++... g++
checking whether we are using the GNU C++ compiler... no
checking whether g++ accepts -g... no
checking how to run the C++ preprocessor... cpp
checking for sparc-sun-solaris2-g77... f77
checking whether we are using the GNU Fortran 77 compiler... no
checking whether f77 accepts -g... no
checking the maximum length of command line arguments... 262144
checking command to parse nm output from gcc object... failed
checking for objdir... .libs
checking for sparc-sun-solaris2-ar... no
checking for ar... ar
checking for sparc-sun-solaris2-ranlib... no
checking for ranlib... ranlib
checking for sparc-sun-solaris2-strip... no
checking for strip... strip
checking if gcc static flag  works... yes
checking if gcc supports -fno-rtti -fno-exceptions... no
checking for gcc option to produce PIC... -fPIC
checking if gcc PIC flag -fPIC works... yes
checking if gcc supports -c -o file.o... yes
checking whether the gcc linker (/usr/ccs/bin/ld) supports shared libraries... yes
checking whether -lc should be explicitly linked in... yes
checking how to hardcode library paths into programs... immediate
checking whether stripping libraries is possible... no
checking dynamic linker characteristics... solaris2 ld.so
checking if libtool supports shared libraries... yes
checking whether to build shared libraries... yes
checking whether to build static libraries... no
configure: creating libtool
checking path to sudo_noexec.so... ${exec_prefix}/libexec/sudo_noexec.so
checking for uname... uname
checking for tr... tr
checking for nroff... /usr/bin/cat
checking for getspnam... yes
checking whether gcc needs -traditional... no
checking for an ANSI C-conforming const... yes
checking for working volatile... yes
checking for bison... bison -y
checking for mv... /usr/bin/mv
checking for bourne shell... /bin/sh
checking for sendmail... /usr/lib/sendmail
checking for vi... /usr/bin/vi
checking for ANSI C header files... (cached) yes
checking for dirent.h that defines DIR... yes
checking for library containing opendir... none required
checking malloc.h usability... yes
checking malloc.h presence... yes
checking for malloc.h... yes
checking paths.h usability... no
checking paths.h presence... no
checking for paths.h... no
checking utime.h usability... yes
checking utime.h presence... yes
checking for utime.h... yes
checking netgroup.h usability... no
checking netgroup.h presence... no
checking for netgroup.h... no
checking sys/sockio.h usability... yes
checking sys/sockio.h presence... yes
checking for sys/sockio.h... yes
checking sys/bsdtypes.h usability... no
checking sys/bsdtypes.h presence... no
checking for sys/bsdtypes.h... no
checking sys/select.h usability... yes
checking sys/select.h presence... yes
checking for sys/select.h... yes
checking err.h usability... no
checking err.h presence... no
checking for err.h... no
checking POSIX termios... yes
checking for mode_t... yes
checking for uid_t in sys/types.h... yes
checking for sig_atomic_t... yes
checking for sigaction_t... no
checking for struct timespec... yes
checking for size_t... yes
checking for ssize_t... yes
checking for dev_t... yes
checking for ino_t... yes
checking for full void implementation... yes
checking max length of uid_t... 10
checking for long long support... yes
checking for sa_len field in struct sockaddr... no
checking return type of signal handlers... void
checking for strchr... yes
checking for strrchr... yes
checking for memchr... yes
checking for memcpy... yes
checking for memset... yes
checking for sysconf... yes
checking for tzset... yes
checking for strftime... yes
checking for setrlimit... yes
checking for initgroups... yes
checking for fstat... yes
checking for gettimeofday... yes
checking for seteuid... yes
checking for setresuid... no
checking for setreuid... yes
checking for getifaddrs... no
checking for getcwd... yes
checking for lockf... yes
checking for waitpid... yes
checking for innetgr... yes
checking for getdomainname... no
checking for lsearch... yes
checking for utimes... yes
checking for futimes... no
checking for futimesat... yes
checking for working fnmatch with FNM_CASEFOLD... no
checking for isblank... yes
checking for strerror... yes
checking for strcasecmp... yes
checking for sigaction... yes
checking for strlcpy... yes
checking for strlcat... yes
checking for closefrom... yes
checking for snprintf... yes
checking for vsnprintf... yes
checking for asprintf... no
checking for vasprintf... no
checking for struct stat.st_mtim... yes
checking for two-parameter timespecsub... no
checking for crypt... yes
checking for socket... no
checking for socket in -lsocket... yes
checking for inet_addr... no
checking for __inet_addr... no
checking for inet_addr in -lnsl... yes
checking for syslog... yes
checking for working alloca.h... yes
checking for alloca... yes
checking for getprogname... no
checking for __progname... no
checking for log file location... /var/log/sudo.log
checking for timestamp file location... /var/run/sudo
configure: creating ./config.status
config.status: creating Makefile
config.status: creating sudo.man
config.status: creating visudo.man
config.status: creating sudoers.man
config.status: creating config.h
config.status: creating pathnames.h
WARNING: *** Please add USE_LANGUAGES+=c++ to the package Makefile.
WARNING: *** Please add USE_LANGUAGES+=fortran to the package Makefile.
===> Building for sudo-1.6.8pl12nb2
gcc -c -I. -I.  -D__EXTENSIONS__ -O -D_PATH_SUDOERS=\"/usr/pkg/etc/sudoers\" -D_PATH_SUDOERS_TMP=\"/usr/pkg/etc/sudoers.tmp\" -DSUDOERS_UID=0 -DSUDOERS_GID=0 -DSUDOERS_MODE=0440  check.c
gcc -c -I. -I.  -D__EXTENSIONS__ -O -D_PATH_SUDOERS=\"/usr/pkg/etc/sudoers\" -D_PATH_SUDOERS_TMP=\"/usr/pkg/etc/sudoers.tmp\" -DSUDOERS_UID=0 -DSUDOERS_GID=0 -DSUDOERS_MODE=0440  env.c
gcc -c -I. -I.  -D__EXTENSIONS__ -O -D_PATH_SUDOERS=\"/usr/pkg/etc/sudoers\" -D_PATH_SUDOERS_TMP=\"/usr/pkg/etc/sudoers.tmp\" -DSUDOERS_UID=0 -DSUDOERS_GID=0 -DSUDOERS_MODE=0440  getspwuid.c
gcc -c -I. -I.  -D__EXTENSIONS__ -O -D_PATH_SUDOERS=\"/usr/pkg/etc/sudoers\" -D_PATH_SUDOERS_TMP=\"/usr/pkg/etc/sudoers.tmp\" -DSUDOERS_UID=0 -DSUDOERS_GID=0 -DSUDOERS_MODE=0440  gettime.c
gcc -c -I. -I.  -D__EXTENSIONS__ -O -D_PATH_SUDOERS=\"/usr/pkg/etc/sudoers\" -D_PATH_SUDOERS_TMP=\"/usr/pkg/etc/sudoers.tmp\" -DSUDOERS_UID=0 -DSUDOERS_GID=0 -DSUDOERS_MODE=0440  goodpath.c
gcc -c -I. -I.  -D__EXTENSIONS__ -O -D_PATH_SUDOERS=\"/usr/pkg/etc/sudoers\" -D_PATH_SUDOERS_TMP=\"/usr/pkg/etc/sudoers.tmp\" -DSUDOERS_UID=0 -DSUDOERS_GID=0 -DSUDOERS_MODE=0440  fileops.c
gcc -c -I. -I.  -D__EXTENSIONS__ -O -D_PATH_SUDOERS=\"/usr/pkg/etc/sudoers\" -D_PATH_SUDOERS_TMP=\"/usr/pkg/etc/sudoers.tmp\" -DSUDOERS_UID=0 -DSUDOERS_GID=0 -DSUDOERS_MODE=0440  find_path.c
gcc -c -I. -I.  -D__EXTENSIONS__ -O -D_PATH_SUDOERS=\"/usr/pkg/etc/sudoers\" -D_PATH_SUDOERS_TMP=\"/usr/pkg/etc/sudoers.tmp\" -DSUDOERS_UID=0 -DSUDOERS_GID=0 -DSUDOERS_MODE=0440  interfaces.c
gcc -c -I. -I.  -D__EXTENSIONS__ -O -D_PATH_SUDOERS=\"/usr/pkg/etc/sudoers\" -D_PATH_SUDOERS_TMP=\"/usr/pkg/etc/sudoers.tmp\" -DSUDOERS_UID=0 -DSUDOERS_GID=0 -DSUDOERS_MODE=0440  logging.c
gcc -c -I. -I.  -D__EXTENSIONS__ -O -D_PATH_SUDOERS=\"/usr/pkg/etc/sudoers\" -D_PATH_SUDOERS_TMP=\"/usr/pkg/etc/sudoers.tmp\" -DSUDOERS_UID=0 -DSUDOERS_GID=0 -DSUDOERS_MODE=0440  parse.c
gcc -c -I. -I.  -D__EXTENSIONS__ -O -D_PATH_SUDOERS=\"/usr/pkg/etc/sudoers\" -D_PATH_SUDOERS_TMP=\"/usr/pkg/etc/sudoers.tmp\" -DSUDOERS_UID=0 -DSUDOERS_GID=0 -DSUDOERS_MODE=0440  set_perms.c
gcc -c -I. -I.  -D__EXTENSIONS__ -O -D_PATH_SUDOERS=\"/usr/pkg/etc/sudoers\" -D_PATH_SUDOERS_TMP=\"/usr/pkg/etc/sudoers.tmp\" -DSUDOERS_UID=0 -DSUDOERS_GID=0 -DSUDOERS_MODE=0440  sudo.c
gcc -c -I. -I.  -D__EXTENSIONS__ -O -D_PATH_SUDOERS=\"/usr/pkg/etc/sudoers\" -D_PATH_SUDOERS_TMP=\"/usr/pkg/etc/sudoers.tmp\" -DSUDOERS_UID=0 -DSUDOERS_GID=0 -DSUDOERS_MODE=0440  sudo_edit.c
gcc -c -I. -I.  -D__EXTENSIONS__ -O -D_PATH_SUDOERS=\"/usr/pkg/etc/sudoers\" -D_PATH_SUDOERS_TMP=\"/usr/pkg/etc/sudoers.tmp\" -DSUDOERS_UID=0 -DSUDOERS_GID=0 -DSUDOERS_MODE=0440  tgetpass.c
gcc -c -I. -I.  -D__EXTENSIONS__ -O -D_PATH_SUDOERS=\"/usr/pkg/etc/sudoers\" -D_PATH_SUDOERS_TMP=\"/usr/pkg/etc/sudoers.tmp\" -DSUDOERS_UID=0 -DSUDOERS_GID=0 -DSUDOERS_MODE=0440  zero_bytes.c
gcc -c -I. -I.  -D__EXTENSIONS__ -O -D_PATH_SUDOERS=\"/usr/pkg/etc/sudoers\" -D_PATH_SUDOERS_TMP=\"/usr/pkg/etc/sudoers.tmp\" -DSUDOERS_UID=0 -DSUDOERS_GID=0 -DSUDOERS_MODE=0440  ./auth/sudo_auth.c
gcc -c -I. -I.  -D__EXTENSIONS__ -O -D_PATH_SUDOERS=\"/usr/pkg/etc/sudoers\" -D_PATH_SUDOERS_TMP=\"/usr/pkg/etc/sudoers.tmp\" -DSUDOERS_UID=0 -DSUDOERS_GID=0 -DSUDOERS_MODE=0440  ./auth/passwd.c
gcc -c -I. -I.  -D__EXTENSIONS__ -O -D_PATH_SUDOERS=\"/usr/pkg/etc/sudoers\" -D_PATH_SUDOERS_TMP=\"/usr/pkg/etc/sudoers.tmp\" -DSUDOERS_UID=0 -DSUDOERS_GID=0 -DSUDOERS_MODE=0440  sudo.tab.c
gcc -c -I. -I.  -D__EXTENSIONS__ -O -D_PATH_SUDOERS=\"/usr/pkg/etc/sudoers\" -D_PATH_SUDOERS_TMP=\"/usr/pkg/etc/sudoers.tmp\" -DSUDOERS_UID=0 -DSUDOERS_GID=0 -DSUDOERS_MODE=0440  lex.yy.c
gcc -c -I. -I.  -D__EXTENSIONS__ -O -D_PATH_SUDOERS=\"/usr/pkg/etc/sudoers\" -D_PATH_SUDOERS_TMP=\"/usr/pkg/etc/sudoers.tmp\" -DSUDOERS_UID=0 -DSUDOERS_GID=0 -DSUDOERS_MODE=0440  alloc.c
gcc -c -I. -I.  -D__EXTENSIONS__ -O -D_PATH_SUDOERS=\"/usr/pkg/etc/sudoers\" -D_PATH_SUDOERS_TMP=\"/usr/pkg/etc/sudoers.tmp\" -DSUDOERS_UID=0 -DSUDOERS_GID=0 -DSUDOERS_MODE=0440  defaults.c
gcc -c -I. -I.  -D__EXTENSIONS__ -O -D_PATH_SUDOERS=\"/usr/pkg/etc/sudoers\" -D_PATH_SUDOERS_TMP=\"/usr/pkg/etc/sudoers.tmp\" -DSUDOERS_UID=0 -DSUDOERS_GID=0 -DSUDOERS_MODE=0440  err.c
gcc -c -I. -I.  -D__EXTENSIONS__ -O -D_PATH_SUDOERS=\"/usr/pkg/etc/sudoers\" -D_PATH_SUDOERS_TMP=\"/usr/pkg/etc/sudoers.tmp\" -DSUDOERS_UID=0 -DSUDOERS_GID=0 -DSUDOERS_MODE=0440  fnmatch.c
gcc -c -I. -I.  -D__EXTENSIONS__ -O -D_PATH_SUDOERS=\"/usr/pkg/etc/sudoers\" -D_PATH_SUDOERS_TMP=\"/usr/pkg/etc/sudoers.tmp\" -DSUDOERS_UID=0 -DSUDOERS_GID=0 -DSUDOERS_MODE=0440  snprintf.c
gcc -c -I. -I.  -D__EXTENSIONS__ -O -D_PATH_SUDOERS=\"/usr/pkg/etc/sudoers\" -D_PATH_SUDOERS_TMP=\"/usr/pkg/etc/sudoers.tmp\" -DSUDOERS_UID=0 -DSUDOERS_GID=0 -DSUDOERS_MODE=0440  getprogname.c
gcc -o sudo check.o env.o getspwuid.o gettime.o goodpath.o fileops.o find_path.o  interfaces.o logging.o parse.o set_perms.o sudo.o sudo_edit.o  tgetpass.o zero_bytes.o  sudo_auth.o  passwd.o sudo.tab.o lex.yy.o alloc.o defaults.o err.o fnmatch.o snprintf.o getprogname.o -Wl,-R/usr/pkg/lib  -lsocket -lnsl
Undefined                       first referenced
 symbol                             in file
isblank                             sudo_edit.o
ld: fatal: Symbol referencing errors. No output written to sudo
collect2: ld returned 1 exit status
*** Error code 1

Stop.
bmake: stopped in /usr/pkgsrc/security/sudo/work/sudo-1.6.8p12
*** Error code 1

Stop.
bmake: stopped in /usr/pkgsrc/security/sudo
===> 
===> There was an error during the ``build'' phase.
===> Please investigate the following for more information:
===>      * log of the build
===>      * /usr/pkgsrc/security/sudo/work/.work.log
===> 
*** Error code 1

Stop.
bmake: stopped in /usr/pkgsrc/security/sudo
>How-To-Repeat:
Try building security/sudo on a solaris 9 machine.
>Fix:
Crappy crappy band-aid version of patch:

--- sudo_edit.c.orig    2004-11-25 15:32:34.000000000 -0200
+++ sudo_edit.c
@@ -205,6 +205,9 @@ int sudo_edit(argc, argv)
      */
     nargc = argc;
     for (cp = editor + 1; *cp != '\0'; cp++) {
+#if defined(__SVR4) && defined(__sun)
+#define isblank(c) (c == ' ' ||c == '\t' ||c == '\r' ||c == '\n')
+#endif
        if (isblank((unsigned char)cp[0]) && !isblank((unsigned char)cp[-1]))
            nargc++;
     }

--- defaults.c.orig     2004-11-26 17:22:43.000000000 -0200
+++ defaults.c
@@ -612,6 +612,9 @@ store_list(str, def, op)
     if (op != FALSE) {
        end = str;
        do {
+#if defined(__SVR4) && defined(__sun)
+#define isblank(c) (c == ' ' ||c == '\t' ||c == '\r' ||c == '\n')
+#endif
            /* Remove leading blanks, if nothing but blanks we are done. */
            for (start = end; isblank(*start); start++)
                ;