mirror of
https://github.com/sudo-project/sudo.git
synced 2025-08-30 05:48:18 +00:00
Add os-specific initialization functions for solaris (workaround
setuid locale problem in Solaris 11) and openbsd (set malloc_options if SUDO_DEVEL). Also move set_project() to solaris.c.
This commit is contained in:
parent
56de023de8
commit
83dde2fbb6
2
MANIFEST
2
MANIFEST
@ -303,6 +303,7 @@ src/get_pty.c
|
|||||||
src/hooks.c
|
src/hooks.c
|
||||||
src/load_plugins.c
|
src/load_plugins.c
|
||||||
src/net_ifs.c
|
src/net_ifs.c
|
||||||
|
src/openbsd.c
|
||||||
src/parse_args.c
|
src/parse_args.c
|
||||||
src/po/README
|
src/po/README
|
||||||
src/po/da.mo
|
src/po/da.mo
|
||||||
@ -345,6 +346,7 @@ src/po/zh_CN.po
|
|||||||
src/preload.c
|
src/preload.c
|
||||||
src/selinux.c
|
src/selinux.c
|
||||||
src/sesh.c
|
src/sesh.c
|
||||||
|
src/solaris.c
|
||||||
src/sudo.c
|
src/sudo.c
|
||||||
src/sudo.h
|
src/sudo.h
|
||||||
src/sudo_edit.c
|
src/sudo_edit.c
|
||||||
|
@ -927,6 +927,9 @@
|
|||||||
/* Define to `int' if <sys/types.h> does not define. */
|
/* Define to `int' if <sys/types.h> does not define. */
|
||||||
#undef mode_t
|
#undef mode_t
|
||||||
|
|
||||||
|
/* Define to an OS-specific initialization function or `os_init_common'. */
|
||||||
|
#undef os_init
|
||||||
|
|
||||||
/* Define to `int' if <signal.h> does not define. */
|
/* Define to `int' if <signal.h> does not define. */
|
||||||
#undef sig_atomic_t
|
#undef sig_atomic_t
|
||||||
|
|
||||||
|
15
configure
vendored
15
configure
vendored
@ -2990,6 +2990,7 @@ LOCALEDIR_SUFFIX=
|
|||||||
LT_LDEXPORTS="-export-symbols \$(shlib_exp)"
|
LT_LDEXPORTS="-export-symbols \$(shlib_exp)"
|
||||||
LT_LDDEP="\$(shlib_exp)"
|
LT_LDDEP="\$(shlib_exp)"
|
||||||
NO_VIZ=
|
NO_VIZ=
|
||||||
|
OS_INIT=os_init_common
|
||||||
|
|
||||||
CHECKSHADOW=true
|
CHECKSHADOW=true
|
||||||
shadow_defs=
|
shadow_defs=
|
||||||
@ -13918,6 +13919,10 @@ case "$host" in
|
|||||||
# LD_PRELOAD is space-delimited
|
# LD_PRELOAD is space-delimited
|
||||||
RTLD_PRELOAD_DELIM=" "
|
RTLD_PRELOAD_DELIM=" "
|
||||||
|
|
||||||
|
# Solaris-specific initialization
|
||||||
|
OS_INIT=os_init_solaris
|
||||||
|
SUDO_OBJS="${SUDO_OBJS} solaris.o"
|
||||||
|
|
||||||
# To get the crypt(3) prototype (so we pass -Wall)
|
# To get the crypt(3) prototype (so we pass -Wall)
|
||||||
OSDEFS="${OSDEFS} -D__EXTENSIONS__"
|
OSDEFS="${OSDEFS} -D__EXTENSIONS__"
|
||||||
# AFS support needs -lucb
|
# AFS support needs -lucb
|
||||||
@ -14465,6 +14470,10 @@ done
|
|||||||
: ${with_logincap='maybe'}
|
: ${with_logincap='maybe'}
|
||||||
;;
|
;;
|
||||||
*-*-*openbsd*)
|
*-*-*openbsd*)
|
||||||
|
# OpenBSD-specific initialization
|
||||||
|
OS_INIT=os_init_openbsd
|
||||||
|
SUDO_OBJS="${SUDO_OBJS} openbsd.o"
|
||||||
|
|
||||||
# OpenBSD has a real setreuid(2) starting with 3.3 but
|
# OpenBSD has a real setreuid(2) starting with 3.3 but
|
||||||
# we will use setresuid(2) instead.
|
# we will use setresuid(2) instead.
|
||||||
SKIP_SETREUID=yes
|
SKIP_SETREUID=yes
|
||||||
@ -20918,6 +20927,12 @@ if test -n "$LIBS"; then
|
|||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
cat >>confdefs.h <<_ACEOF
|
||||||
|
#define os_init $OS_INIT
|
||||||
|
_ACEOF
|
||||||
|
|
||||||
|
|
||||||
if test -n "$GCC"; then
|
if test -n "$GCC"; then
|
||||||
if test X"$enable_warnings" = X"yes" -o X"$with_devel" = X"yes"; then
|
if test X"$enable_warnings" = X"yes" -o X"$with_devel" = X"yes"; then
|
||||||
CFLAGS="${CFLAGS} -Wall"
|
CFLAGS="${CFLAGS} -Wall"
|
||||||
|
14
configure.in
14
configure.in
@ -193,6 +193,7 @@ LOCALEDIR_SUFFIX=
|
|||||||
LT_LDEXPORTS="-export-symbols \$(shlib_exp)"
|
LT_LDEXPORTS="-export-symbols \$(shlib_exp)"
|
||||||
LT_LDDEP="\$(shlib_exp)"
|
LT_LDDEP="\$(shlib_exp)"
|
||||||
NO_VIZ=
|
NO_VIZ=
|
||||||
|
OS_INIT=os_init_common
|
||||||
|
|
||||||
dnl
|
dnl
|
||||||
dnl Other vaiables
|
dnl Other vaiables
|
||||||
@ -1566,6 +1567,10 @@ case "$host" in
|
|||||||
# LD_PRELOAD is space-delimited
|
# LD_PRELOAD is space-delimited
|
||||||
RTLD_PRELOAD_DELIM=" "
|
RTLD_PRELOAD_DELIM=" "
|
||||||
|
|
||||||
|
# Solaris-specific initialization
|
||||||
|
OS_INIT=os_init_solaris
|
||||||
|
SUDO_OBJS="${SUDO_OBJS} solaris.o"
|
||||||
|
|
||||||
# To get the crypt(3) prototype (so we pass -Wall)
|
# To get the crypt(3) prototype (so we pass -Wall)
|
||||||
OSDEFS="${OSDEFS} -D__EXTENSIONS__"
|
OSDEFS="${OSDEFS} -D__EXTENSIONS__"
|
||||||
# AFS support needs -lucb
|
# AFS support needs -lucb
|
||||||
@ -1903,6 +1908,10 @@ case "$host" in
|
|||||||
: ${with_logincap='maybe'}
|
: ${with_logincap='maybe'}
|
||||||
;;
|
;;
|
||||||
*-*-*openbsd*)
|
*-*-*openbsd*)
|
||||||
|
# OpenBSD-specific initialization
|
||||||
|
OS_INIT=os_init_openbsd
|
||||||
|
SUDO_OBJS="${SUDO_OBJS} openbsd.o"
|
||||||
|
|
||||||
# OpenBSD has a real setreuid(2) starting with 3.3 but
|
# OpenBSD has a real setreuid(2) starting with 3.3 but
|
||||||
# we will use setresuid(2) instead.
|
# we will use setresuid(2) instead.
|
||||||
SKIP_SETREUID=yes
|
SKIP_SETREUID=yes
|
||||||
@ -3459,6 +3468,11 @@ if test -n "$LIBS"; then
|
|||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
dnl
|
||||||
|
dnl OS-specific initialization
|
||||||
|
dnl
|
||||||
|
AC_DEFINE_UNQUOTED(os_init, $OS_INIT, [Define to an OS-specific initialization function or `os_init_common'.])
|
||||||
|
|
||||||
dnl
|
dnl
|
||||||
dnl We add -Wall and -Werror after all tests so they don't cause failures
|
dnl We add -Wall and -Werror after all tests so they don't cause failures
|
||||||
dnl
|
dnl
|
||||||
|
2
mkdep.pl
2
mkdep.pl
@ -51,7 +51,7 @@ sub mkdep {
|
|||||||
# Expand some configure bits
|
# Expand some configure bits
|
||||||
$makefile =~ s:\@DEV\@::g;
|
$makefile =~ s:\@DEV\@::g;
|
||||||
$makefile =~ s:\@COMMON_OBJS\@:aix.lo:;
|
$makefile =~ s:\@COMMON_OBJS\@:aix.lo:;
|
||||||
$makefile =~ s:\@SUDO_OBJS\@:preload.o selinux.o sesh.o sudo_noexec.lo:;
|
$makefile =~ s:\@SUDO_OBJS\@:openbsd.o preload.o selinux.o sesh.o solaris.o sudo_noexec.lo:;
|
||||||
$makefile =~ s:\@SUDOERS_OBJS\@:bsm_audit.lo linux_audit.lo ldap.lo plugin_error.lo sssd.lo:;
|
$makefile =~ s:\@SUDOERS_OBJS\@:bsm_audit.lo linux_audit.lo ldap.lo plugin_error.lo sssd.lo:;
|
||||||
# XXX - fill in AUTH_OBJS from contents of the auth dir instead
|
# XXX - fill in AUTH_OBJS from contents of the auth dir instead
|
||||||
$makefile =~ s:\@AUTH_OBJS\@:afs.lo aix_auth.lo bsdauth.lo dce.lo fwtk.lo getspwuid.lo kerb5.lo pam.lo passwd.lo rfc1938.lo secureware.lo securid5.lo sia.lo:;
|
$makefile =~ s:\@AUTH_OBJS\@:afs.lo aix_auth.lo bsdauth.lo dce.lo fwtk.lo getspwuid.lo kerb5.lo pam.lo passwd.lo rfc1938.lo secureware.lo securid5.lo sia.lo:;
|
||||||
|
@ -430,7 +430,8 @@ alias.lo: $(srcdir)/alias.c $(top_builddir)/config.h $(srcdir)/sudoers.h \
|
|||||||
$(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h $(incdir)/gettext.h \
|
$(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h $(incdir)/gettext.h \
|
||||||
$(srcdir)/parse.h $(srcdir)/redblack.h $(devdir)/gram.h
|
$(srcdir)/parse.h $(srcdir)/redblack.h $(devdir)/gram.h
|
||||||
$(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(DEFS) $(srcdir)/alias.c
|
$(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(DEFS) $(srcdir)/alias.c
|
||||||
audit.lo: $(srcdir)/audit.c $(top_builddir)/config.h $(incdir)/missing.h \
|
audit.lo: $(srcdir)/audit.c $(top_builddir)/config.h \
|
||||||
|
$(top_srcdir)/compat/stdbool.h $(incdir)/missing.h \
|
||||||
$(srcdir)/logging.h $(incdir)/sudo_debug.h $(srcdir)/bsm_audit.h \
|
$(srcdir)/logging.h $(incdir)/sudo_debug.h $(srcdir)/bsm_audit.h \
|
||||||
$(srcdir)/linux_audit.h
|
$(srcdir)/linux_audit.h
|
||||||
$(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(DEFS) $(srcdir)/audit.c
|
$(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(DEFS) $(srcdir)/audit.c
|
||||||
@ -511,7 +512,8 @@ env.lo: $(srcdir)/env.c $(top_builddir)/config.h $(srcdir)/sudoers.h \
|
|||||||
$(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h $(incdir)/gettext.h
|
$(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h $(incdir)/gettext.h
|
||||||
$(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(DEFS) $(srcdir)/env.c
|
$(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(DEFS) $(srcdir)/env.c
|
||||||
error.o: $(top_srcdir)/src/error.c $(top_builddir)/config.h \
|
error.o: $(top_srcdir)/src/error.c $(top_builddir)/config.h \
|
||||||
$(incdir)/missing.h $(incdir)/error.h $(incdir)/gettext.h
|
$(incdir)/missing.h $(incdir)/alloc.h $(incdir)/error.h \
|
||||||
|
$(incdir)/gettext.h
|
||||||
$(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(DEFS) $(top_srcdir)/src/error.c
|
$(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(DEFS) $(top_srcdir)/src/error.c
|
||||||
find_path.lo: $(srcdir)/find_path.c $(top_builddir)/config.h \
|
find_path.lo: $(srcdir)/find_path.c $(top_builddir)/config.h \
|
||||||
$(srcdir)/sudoers.h $(top_srcdir)/compat/stdbool.h \
|
$(srcdir)/sudoers.h $(top_srcdir)/compat/stdbool.h \
|
||||||
@ -681,7 +683,8 @@ passwd.lo: $(authdir)/passwd.c $(top_builddir)/config.h $(srcdir)/sudoers.h \
|
|||||||
$(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h $(incdir)/gettext.h
|
$(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h $(incdir)/gettext.h
|
||||||
$(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(DEFS) $(authdir)/passwd.c
|
$(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(DEFS) $(authdir)/passwd.c
|
||||||
plugin_error.lo: $(srcdir)/plugin_error.c $(top_builddir)/config.h \
|
plugin_error.lo: $(srcdir)/plugin_error.c $(top_builddir)/config.h \
|
||||||
$(incdir)/missing.h $(incdir)/alloc.h $(incdir)/error.h \
|
$(top_srcdir)/compat/stdbool.h $(incdir)/missing.h \
|
||||||
|
$(incdir)/alloc.h $(incdir)/error.h $(srcdir)/logging.h \
|
||||||
$(incdir)/sudo_plugin.h $(incdir)/gettext.h
|
$(incdir)/sudo_plugin.h $(incdir)/gettext.h
|
||||||
$(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(DEFS) $(srcdir)/plugin_error.c
|
$(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(DEFS) $(srcdir)/plugin_error.c
|
||||||
policy.lo: $(srcdir)/policy.c $(top_builddir)/config.h $(srcdir)/sudoers.h \
|
policy.lo: $(srcdir)/policy.c $(top_builddir)/config.h $(srcdir)/sudoers.h \
|
||||||
|
@ -175,7 +175,7 @@ env_hooks.o: $(srcdir)/env_hooks.c $(top_builddir)/config.h \
|
|||||||
$(incdir)/sudo_plugin.h
|
$(incdir)/sudo_plugin.h
|
||||||
$(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(DEFS) $(srcdir)/env_hooks.c
|
$(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(DEFS) $(srcdir)/env_hooks.c
|
||||||
error.o: $(srcdir)/error.c $(top_builddir)/config.h $(incdir)/missing.h \
|
error.o: $(srcdir)/error.c $(top_builddir)/config.h $(incdir)/missing.h \
|
||||||
$(incdir)/error.h $(incdir)/gettext.h
|
$(incdir)/alloc.h $(incdir)/error.h $(incdir)/gettext.h
|
||||||
$(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(DEFS) $(srcdir)/error.c
|
$(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(DEFS) $(srcdir)/error.c
|
||||||
exec.o: $(srcdir)/exec.c $(top_builddir)/config.h $(srcdir)/sudo.h \
|
exec.o: $(srcdir)/exec.c $(top_builddir)/config.h $(srcdir)/sudo.h \
|
||||||
$(top_builddir)/pathnames.h $(top_srcdir)/compat/stdbool.h \
|
$(top_builddir)/pathnames.h $(top_srcdir)/compat/stdbool.h \
|
||||||
@ -227,6 +227,12 @@ net_ifs.o: $(srcdir)/net_ifs.c $(top_builddir)/config.h $(incdir)/missing.h \
|
|||||||
$(incdir)/alloc.h $(incdir)/error.h $(incdir)/sudo_debug.h \
|
$(incdir)/alloc.h $(incdir)/error.h $(incdir)/sudo_debug.h \
|
||||||
$(incdir)/gettext.h
|
$(incdir)/gettext.h
|
||||||
$(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(DEFS) $(srcdir)/net_ifs.c
|
$(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(DEFS) $(srcdir)/net_ifs.c
|
||||||
|
openbsd.o: $(srcdir)/openbsd.c $(top_builddir)/config.h $(srcdir)/sudo.h \
|
||||||
|
$(top_builddir)/pathnames.h $(top_srcdir)/compat/stdbool.h \
|
||||||
|
$(incdir)/missing.h $(incdir)/alloc.h $(incdir)/error.h \
|
||||||
|
$(incdir)/fileops.h $(incdir)/list.h $(incdir)/sudo_conf.h \
|
||||||
|
$(incdir)/list.h $(incdir)/sudo_debug.h $(incdir)/gettext.h
|
||||||
|
$(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(DEFS) $(srcdir)/openbsd.c
|
||||||
parse_args.o: $(srcdir)/parse_args.c $(top_builddir)/config.h ./sudo_usage.h \
|
parse_args.o: $(srcdir)/parse_args.c $(top_builddir)/config.h ./sudo_usage.h \
|
||||||
$(srcdir)/sudo.h $(top_builddir)/pathnames.h \
|
$(srcdir)/sudo.h $(top_builddir)/pathnames.h \
|
||||||
$(top_srcdir)/compat/stdbool.h $(incdir)/missing.h \
|
$(top_srcdir)/compat/stdbool.h $(incdir)/missing.h \
|
||||||
@ -249,6 +255,12 @@ sesh.o: $(srcdir)/sesh.c $(top_builddir)/config.h \
|
|||||||
$(incdir)/list.h $(incdir)/sudo_debug.h $(srcdir)/sudo_exec.h \
|
$(incdir)/list.h $(incdir)/sudo_debug.h $(srcdir)/sudo_exec.h \
|
||||||
$(incdir)/sudo_plugin.h
|
$(incdir)/sudo_plugin.h
|
||||||
$(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(DEFS) $(srcdir)/sesh.c
|
$(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(DEFS) $(srcdir)/sesh.c
|
||||||
|
solaris.o: $(srcdir)/solaris.c $(top_builddir)/config.h $(srcdir)/sudo.h \
|
||||||
|
$(top_builddir)/pathnames.h $(top_srcdir)/compat/stdbool.h \
|
||||||
|
$(incdir)/missing.h $(incdir)/alloc.h $(incdir)/error.h \
|
||||||
|
$(incdir)/fileops.h $(incdir)/list.h $(incdir)/sudo_conf.h \
|
||||||
|
$(incdir)/list.h $(incdir)/sudo_debug.h $(incdir)/gettext.h
|
||||||
|
$(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(DEFS) $(srcdir)/solaris.c
|
||||||
sudo.o: $(srcdir)/sudo.c $(top_builddir)/config.h $(srcdir)/sudo.h \
|
sudo.o: $(srcdir)/sudo.c $(top_builddir)/config.h $(srcdir)/sudo.h \
|
||||||
$(top_builddir)/pathnames.h $(top_srcdir)/compat/stdbool.h \
|
$(top_builddir)/pathnames.h $(top_srcdir)/compat/stdbool.h \
|
||||||
$(incdir)/missing.h $(incdir)/alloc.h $(incdir)/error.h \
|
$(incdir)/missing.h $(incdir)/alloc.h $(incdir)/error.h \
|
||||||
|
52
src/openbsd.c
Normal file
52
src/openbsd.c
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2012 Todd C. Miller <Todd.Miller@courtesan.com>
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#ifdef STDC_HEADERS
|
||||||
|
# include <stdlib.h>
|
||||||
|
# include <stddef.h>
|
||||||
|
#else
|
||||||
|
# ifdef HAVE_STDLIB_H
|
||||||
|
# include <stdlib.h>
|
||||||
|
# endif
|
||||||
|
#endif /* STDC_HEADERS */
|
||||||
|
#ifdef HAVE_STRING_H
|
||||||
|
# if defined(HAVE_MEMORY_H) && !defined(STDC_HEADERS)
|
||||||
|
# include <memory.h>
|
||||||
|
# endif
|
||||||
|
# include <string.h>
|
||||||
|
#endif /* HAVE_STRING_H */
|
||||||
|
#ifdef HAVE_STRINGS_H
|
||||||
|
# include <strings.h>
|
||||||
|
#endif /* HAVE_STRINGS_H */
|
||||||
|
#ifdef HAVE_UNISTD_H
|
||||||
|
# include <unistd.h>
|
||||||
|
#endif /* HAVE_UNISTD_H */
|
||||||
|
|
||||||
|
#include "sudo.h"
|
||||||
|
|
||||||
|
int
|
||||||
|
os_init(int argc, char *argv[], char *envp[])
|
||||||
|
{
|
||||||
|
#ifdef SUDO_DEVEL
|
||||||
|
extern char *malloc_options;
|
||||||
|
malloc_options = "AFGJPR";
|
||||||
|
#endif
|
||||||
|
return os_init_common(argc, argv, envp);
|
||||||
|
}
|
127
src/solaris.c
Normal file
127
src/solaris.c
Normal file
@ -0,0 +1,127 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2009-2012 Todd C. Miller <Todd.Miller@courtesan.com>
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#ifdef STDC_HEADERS
|
||||||
|
# include <stdlib.h>
|
||||||
|
# include <stddef.h>
|
||||||
|
#else
|
||||||
|
# ifdef HAVE_STDLIB_H
|
||||||
|
# include <stdlib.h>
|
||||||
|
# endif
|
||||||
|
#endif /* STDC_HEADERS */
|
||||||
|
#ifdef HAVE_STRING_H
|
||||||
|
# if defined(HAVE_MEMORY_H) && !defined(STDC_HEADERS)
|
||||||
|
# include <memory.h>
|
||||||
|
# endif
|
||||||
|
# include <string.h>
|
||||||
|
#endif /* HAVE_STRING_H */
|
||||||
|
#ifdef HAVE_STRINGS_H
|
||||||
|
# include <strings.h>
|
||||||
|
#endif /* HAVE_STRINGS_H */
|
||||||
|
#ifdef HAVE_UNISTD_H
|
||||||
|
# include <unistd.h>
|
||||||
|
#endif /* HAVE_UNISTD_H */
|
||||||
|
#ifdef HAVE_PROJECT_H
|
||||||
|
# include <project.h>
|
||||||
|
# include <sys/task.h>
|
||||||
|
#endif
|
||||||
|
#include <dlfcn.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <pwd.h>
|
||||||
|
|
||||||
|
#include "sudo.h"
|
||||||
|
|
||||||
|
int
|
||||||
|
os_init(int argc, char *argv[], char *envp[])
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Solaris 11 is unable to load the per-locale shared objects
|
||||||
|
* without this. This bug was fixed in Solaris 11 Update 1.
|
||||||
|
*/
|
||||||
|
void *handle = dlopen("/usr/lib/locale/common/methods_unicode.so.3",
|
||||||
|
RTLD_LAZY|RTLD_GLOBAL);
|
||||||
|
|
||||||
|
return os_init_common(argc, argv, envp);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef HAVE_PROJECT_H
|
||||||
|
void
|
||||||
|
set_project(struct passwd *pw)
|
||||||
|
{
|
||||||
|
struct project proj;
|
||||||
|
char buf[PROJECT_BUFSZ];
|
||||||
|
int errval;
|
||||||
|
debug_decl(set_project, SUDO_DEBUG_UTIL)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Collect the default project for the user and settaskid
|
||||||
|
*/
|
||||||
|
setprojent();
|
||||||
|
if (getdefaultproj(pw->pw_name, &proj, buf, sizeof(buf)) != NULL) {
|
||||||
|
errval = setproject(proj.pj_name, pw->pw_name, TASK_NORMAL);
|
||||||
|
switch(errval) {
|
||||||
|
case 0:
|
||||||
|
break;
|
||||||
|
case SETPROJ_ERR_TASK:
|
||||||
|
switch (errno) {
|
||||||
|
case EAGAIN:
|
||||||
|
warningx(N_("resource control limit has been reached"));
|
||||||
|
break;
|
||||||
|
case ESRCH:
|
||||||
|
warningx(N_("user \"%s\" is not a member of project \"%s\""),
|
||||||
|
pw->pw_name, proj.pj_name);
|
||||||
|
break;
|
||||||
|
case EACCES:
|
||||||
|
warningx(N_("the invoking task is final"));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
warningx(N_("could not join project \"%s\""), proj.pj_name);
|
||||||
|
}
|
||||||
|
case SETPROJ_ERR_POOL:
|
||||||
|
switch (errno) {
|
||||||
|
case EACCES:
|
||||||
|
warningx(N_("no resource pool accepting default bindings "
|
||||||
|
"exists for project \"%s\""), proj.pj_name);
|
||||||
|
break;
|
||||||
|
case ESRCH:
|
||||||
|
warningx(N_("specified resource pool does not exist for "
|
||||||
|
"project \"%s\""), proj.pj_name);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
warningx(N_("could not bind to default resource pool for "
|
||||||
|
"project \"%s\""), proj.pj_name);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
if (errval <= 0) {
|
||||||
|
warningx(N_("setproject failed for project \"%s\""), proj.pj_name);
|
||||||
|
} else {
|
||||||
|
warningx(N_("warning, resource control assignment failed for "
|
||||||
|
"project \"%s\""), proj.pj_name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
warning("getdefaultproj");
|
||||||
|
}
|
||||||
|
endprojent();
|
||||||
|
debug_return;
|
||||||
|
}
|
||||||
|
#endif /* HAVE_PROJECT_H */
|
92
src/sudo.c
92
src/sudo.c
@ -86,12 +86,6 @@
|
|||||||
# endif /* __hpux */
|
# endif /* __hpux */
|
||||||
# include <prot.h>
|
# include <prot.h>
|
||||||
#endif /* HAVE_GETPRPWNAM && HAVE_SET_AUTH_PARAMETERS */
|
#endif /* HAVE_GETPRPWNAM && HAVE_SET_AUTH_PARAMETERS */
|
||||||
#if defined(HAVE_STRUCT_KINFO_PROC_P_TDEV) || defined (HAVE_STRUCT_KINFO_PROC_KP_EPROC_E_TDEV)
|
|
||||||
# include <sys/sysctl.h>
|
|
||||||
#elif defined(HAVE_STRUCT_KINFO_PROC_KI_TDEV)
|
|
||||||
# include <sys/sysctl.h>
|
|
||||||
# include <sys/user.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "sudo.h"
|
#include "sudo.h"
|
||||||
#include "sudo_plugin.h"
|
#include "sudo_plugin.h"
|
||||||
@ -160,17 +154,7 @@ main(int argc, char *argv[], char *envp[])
|
|||||||
sigset_t mask;
|
sigset_t mask;
|
||||||
debug_decl(main, SUDO_DEBUG_MAIN)
|
debug_decl(main, SUDO_DEBUG_MAIN)
|
||||||
|
|
||||||
#if defined(SUDO_DEVEL) && defined(__OpenBSD__)
|
os_init(argc, argv, envp);
|
||||||
{
|
|
||||||
extern char *malloc_options;
|
|
||||||
malloc_options = "AFGJPR";
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if !defined(HAVE_GETPROGNAME) && !defined(HAVE___PROGNAME)
|
|
||||||
if (argc > 0)
|
|
||||||
setprogname(argv[0]);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_SETLOCALE
|
#ifdef HAVE_SETLOCALE
|
||||||
setlocale(LC_ALL, "");
|
setlocale(LC_ALL, "");
|
||||||
@ -311,6 +295,16 @@ main(int argc, char *argv[], char *envp[])
|
|||||||
exit(exitcode);
|
exit(exitcode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
os_init_common(int argc, char *argv[], char *envp[])
|
||||||
|
{
|
||||||
|
#if !defined(HAVE_GETPROGNAME) && !defined(HAVE___PROGNAME)
|
||||||
|
if (argc > 0)
|
||||||
|
setprogname(argv[0]);
|
||||||
|
#endif
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Ensure that stdin, stdout and stderr are open; set to /dev/null if not.
|
* Ensure that stdin, stdout and stderr are open; set to /dev/null if not.
|
||||||
* Some operating systems do this automatically in the kernel or libc.
|
* Some operating systems do this automatically in the kernel or libc.
|
||||||
@ -838,70 +832,6 @@ disable_coredumps(void)
|
|||||||
debug_return;
|
debug_return;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_PROJECT_H
|
|
||||||
static void
|
|
||||||
set_project(struct passwd *pw)
|
|
||||||
{
|
|
||||||
struct project proj;
|
|
||||||
char buf[PROJECT_BUFSZ];
|
|
||||||
int errval;
|
|
||||||
debug_decl(set_project, SUDO_DEBUG_UTIL)
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Collect the default project for the user and settaskid
|
|
||||||
*/
|
|
||||||
setprojent();
|
|
||||||
if (getdefaultproj(pw->pw_name, &proj, buf, sizeof(buf)) != NULL) {
|
|
||||||
errval = setproject(proj.pj_name, pw->pw_name, TASK_NORMAL);
|
|
||||||
switch(errval) {
|
|
||||||
case 0:
|
|
||||||
break;
|
|
||||||
case SETPROJ_ERR_TASK:
|
|
||||||
switch (errno) {
|
|
||||||
case EAGAIN:
|
|
||||||
warningx(N_("resource control limit has been reached"));
|
|
||||||
break;
|
|
||||||
case ESRCH:
|
|
||||||
warningx(N_("user \"%s\" is not a member of project \"%s\""),
|
|
||||||
pw->pw_name, proj.pj_name);
|
|
||||||
break;
|
|
||||||
case EACCES:
|
|
||||||
warningx(N_("the invoking task is final"));
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
warningx(N_("could not join project \"%s\""), proj.pj_name);
|
|
||||||
}
|
|
||||||
case SETPROJ_ERR_POOL:
|
|
||||||
switch (errno) {
|
|
||||||
case EACCES:
|
|
||||||
warningx(N_("no resource pool accepting default bindings "
|
|
||||||
"exists for project \"%s\""), proj.pj_name);
|
|
||||||
break;
|
|
||||||
case ESRCH:
|
|
||||||
warningx(N_("specified resource pool does not exist for "
|
|
||||||
"project \"%s\""), proj.pj_name);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
warningx(N_("could not bind to default resource pool for "
|
|
||||||
"project \"%s\""), proj.pj_name);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
if (errval <= 0) {
|
|
||||||
warningx(N_("setproject failed for project \"%s\""), proj.pj_name);
|
|
||||||
} else {
|
|
||||||
warningx(N_("warning, resource control assignment failed for "
|
|
||||||
"project \"%s\""), proj.pj_name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
warning("getdefaultproj");
|
|
||||||
}
|
|
||||||
endprojent();
|
|
||||||
debug_return;
|
|
||||||
}
|
|
||||||
#endif /* HAVE_PROJECT_H */
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Setup the execution environment immediately prior to the call to execve()
|
* Setup the execution environment immediately prior to the call to execve()
|
||||||
* Returns true on success and false on failure.
|
* Returns true on success and false on failure.
|
||||||
|
@ -215,6 +215,7 @@ void get_ttysize(int *rowp, int *colp);
|
|||||||
bool exec_setup(struct command_details *details, const char *ptyname, int ptyfd);
|
bool exec_setup(struct command_details *details, const char *ptyname, int ptyfd);
|
||||||
int policy_init_session(struct command_details *details);
|
int policy_init_session(struct command_details *details);
|
||||||
int run_command(struct command_details *details);
|
int run_command(struct command_details *details);
|
||||||
|
int os_init_common(int argc, char *argv[], char *envp[]);
|
||||||
extern const char *list_user, *runas_user, *runas_group;
|
extern const char *list_user, *runas_user, *runas_group;
|
||||||
extern struct user_details user_details;
|
extern struct user_details user_details;
|
||||||
|
|
||||||
@ -224,6 +225,9 @@ int sudo_edit(struct command_details *details);
|
|||||||
/* parse_args.c */
|
/* parse_args.c */
|
||||||
void usage(int);
|
void usage(int);
|
||||||
|
|
||||||
|
/* openbsd.c */
|
||||||
|
int os_init_openbsd(int argc, char *argv[], char *envp[]);
|
||||||
|
|
||||||
/* selinux.c */
|
/* selinux.c */
|
||||||
int selinux_restore_tty(void);
|
int selinux_restore_tty(void);
|
||||||
int selinux_setup(const char *role, const char *type, const char *ttyn,
|
int selinux_setup(const char *role, const char *type, const char *ttyn,
|
||||||
@ -231,6 +235,10 @@ int selinux_setup(const char *role, const char *type, const char *ttyn,
|
|||||||
void selinux_execve(const char *path, char *const argv[], char *const envp[],
|
void selinux_execve(const char *path, char *const argv[], char *const envp[],
|
||||||
int noexec);
|
int noexec);
|
||||||
|
|
||||||
|
/* solaris.c */
|
||||||
|
void set_project(struct passwd *);
|
||||||
|
int os_init_solaris(int argc, char *argv[], char *envp[]);
|
||||||
|
|
||||||
/* aix.c */
|
/* aix.c */
|
||||||
void aix_prep_user(char *user, const char *tty);
|
void aix_prep_user(char *user, const char *tty);
|
||||||
void aix_restoreauthdb(void);
|
void aix_restoreauthdb(void);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user