From: Thomas Walker Lynch Date: Thu, 21 Feb 2019 23:46:27 +0000 (+0100) Subject: subu-mk-0 working X-Git-Url: https://git.reasoningtechnology.com/style/static/git-logo.png?a=commitdiff_plain;h=a66456880aa60cdfce6561e9e5d955b2cdcc23d6;p=subu subu-mk-0 working --- diff --git a/3_doc/todo.txt b/3_doc/todo.txt index f769210..c22c873 100644 --- a/3_doc/todo.txt +++ b/3_doc/todo.txt @@ -1,6 +1,4 @@ -2019-02-05T21:10:02Z morpheus@manorhouse§~/src/subu§ - need to check subu_name is a valid user name in subu-mk-0 2019-02-05T23:14:40Z morpheus@manorhouse§~/src/subu§ error can cause subu-mk-0 to leave the creating of a subu @@ -8,3 +6,15 @@ of the errors we need to clean up instead. Perhaps the yet to be written subu-rm program will be resilent enough to do more general cleanup. + +2019-02-21T22:02:15Z morpheus@manorhouse§~/src/subu§ + subu-mk-0 only gives x privs via setfacl to subu on masteru home and on + subuland. Hence a subu can not run subu-mk-0 and be guaranteed access to the + subu's newly made subu. I.e. cd might not work for recurisve subu. + + The easy fix would be to use perms instead of facls, and give all home + directories other 'x' privs. Another fix would be to take apart the subu + home path, and make sure that all sub paths have 'x'. + + For now, I'm just leaving it to one layer. + diff --git a/autom4te.cache/requests b/autom4te.cache/requests index 56690ad..d6485d2 100644 --- a/autom4te.cache/requests +++ b/autom4te.cache/requests @@ -34,47 +34,47 @@ 'configure.ac' ], { - 'AM_MISSING_PROG' => 1, - 'AM_SANITY_CHECK' => 1, - '_AM_PROG_TAR' => 1, - 'm4_pattern_forbid' => 1, + '_AM_OUTPUT_DEPENDENCY_COMMANDS' => 1, + 'AM_PROG_INSTALL_STRIP' => 1, + '_AM_CONFIG_MACRO_DIRS' => 1, + 'AM_SET_DEPDIR' => 1, 'AM_RUN_LOG' => 1, - 'AM_MISSING_HAS_RUN' => 1, - 'AM_AUX_DIR_EXPAND' => 1, - 'AM_PROG_INSTALL_SH' => 1, - 'AU_DEFUN' => 1, - 'AC_DEFUN' => 1, - 'AC_CONFIG_MACRO_DIR_TRACE' => 1, 'AM_CONDITIONAL' => 1, - '_AM_AUTOCONF_VERSION' => 1, - '_AC_AM_CONFIG_HEADER_HOOK' => 1, - 'AC_DEFUN_ONCE' => 1, - 'AM_DEP_TRACK' => 1, - '_AM_OUTPUT_DEPENDENCY_COMMANDS' => 1, 'AM_MAKE_INCLUDE' => 1, + 'AM_SET_CURRENT_AUTOMAKE_VERSION' => 1, + 'AM_SILENT_RULES' => 1, + '_m4_warn' => 1, + 'AC_DEFUN_ONCE' => 1, 'AM_SUBST_NOTMAKE' => 1, - '_AM_CONFIG_MACRO_DIRS' => 1, - '_AM_SET_OPTIONS' => 1, + 'include' => 1, + 'AC_CONFIG_MACRO_DIR_TRACE' => 1, + '_AM_DEPENDENCIES' => 1, + '_AC_AM_CONFIG_HEADER_HOOK' => 1, + 'AC_DEFUN' => 1, + 'AM_SANITY_CHECK' => 1, + 'AM_PROG_INSTALL_SH' => 1, + 'AM_MISSING_PROG' => 1, + '_AM_SUBST_NOTMAKE' => 1, + '_AM_PROG_CC_C_O' => 1, + 'AU_DEFUN' => 1, + 'AM_AUX_DIR_EXPAND' => 1, + 'AM_SET_LEADING_DOT' => 1, + 'AM_MISSING_HAS_RUN' => 1, + '_AM_AUTOCONF_VERSION' => 1, + 'AM_AUTOMAKE_VERSION' => 1, + '_AM_PROG_TAR' => 1, + 'AM_PROG_CC_C_O' => 1, 'AC_CONFIG_MACRO_DIR' => 1, + 'AM_OUTPUT_DEPENDENCY_COMMANDS' => 1, 'm4_include' => 1, '_AM_IF_OPTION' => 1, - 'm4_pattern_allow' => 1, - 'AM_SET_DEPDIR' => 1, - '_AM_PROG_CC_C_O' => 1, + '_AM_SET_OPTION' => 1, 'AM_INIT_AUTOMAKE' => 1, - 'AM_SILENT_RULES' => 1, - 'AM_PROG_INSTALL_STRIP' => 1, - '_AM_SUBST_NOTMAKE' => 1, - 'AM_SET_LEADING_DOT' => 1, + '_AM_SET_OPTIONS' => 1, '_AM_MANGLE_OPTION' => 1, - '_AM_SET_OPTION' => 1, - '_AM_DEPENDENCIES' => 1, - 'AM_AUTOMAKE_VERSION' => 1, - 'AM_OUTPUT_DEPENDENCY_COMMANDS' => 1, - 'include' => 1, - 'AM_SET_CURRENT_AUTOMAKE_VERSION' => 1, - '_m4_warn' => 1, - 'AM_PROG_CC_C_O' => 1 + 'm4_pattern_allow' => 1, + 'AM_DEP_TRACK' => 1, + 'm4_pattern_forbid' => 1 } ], 'Autom4te::Request' ), bless( [ @@ -89,65 +89,65 @@ 'configure.ac' ], { + '_AM_COND_ELSE' => 1, + 'AM_EXTRA_RECURSIVE_TARGETS' => 1, + 'm4_sinclude' => 1, + 'AC_CONFIG_AUX_DIR' => 1, + 'AM_POT_TOOLS' => 1, + '_AM_SUBST_NOTMAKE' => 1, + 'AM_NLS' => 1, + '_AM_MAKEFILE_INCLUDE' => 1, + 'AM_CONDITIONAL' => 1, '_m4_warn' => 1, + 'AM_PROG_FC_C_O' => 1, + 'AC_LIBSOURCE' => 1, + 'AM_PROG_CXX_C_O' => 1, + 'AC_CONFIG_LIBOBJ_DIR' => 1, 'include' => 1, - 'LT_CONFIG_LTDL_DIR' => 1, - 'AM_PROG_MOC' => 1, - 'AC_PROG_LIBTOOL' => 1, + 'sinclude' => 1, + 'AC_CANONICAL_HOST' => 1, 'AC_CANONICAL_TARGET' => 1, - 'AC_FC_PP_DEFINE' => 1, - 'AM_AUTOMAKE_VERSION' => 1, - 'AM_SILENT_RULES' => 1, + 'AC_FC_PP_SRCEXT' => 1, + 'm4_pattern_allow' => 1, + 'AM_PROG_MKDIR_P' => 1, + 'LT_INIT' => 1, 'AM_PROG_F77_C_O' => 1, - 'AM_EXTRA_RECURSIVE_TARGETS' => 1, - 'AM_PATH_GUILE' => 1, + 'AC_CONFIG_FILES' => 1, + 'AM_ENABLE_MULTILIB' => 1, + '_LT_AC_TAGCONFIG' => 1, + 'AC_DEFINE_TRACE_LITERAL' => 1, 'LT_SUPPORTED_TAG' => 1, - '_AM_COND_IF' => 1, - 'm4_sinclude' => 1, + 'AC_SUBST_TRACE' => 1, + 'AM_MAKEFILE_INCLUDE' => 1, + 'AC_SUBST' => 1, + 'AC_CONFIG_SUBDIRS' => 1, + 'AC_CONFIG_HEADERS' => 1, 'AM_XGETTEXT_OPTION' => 1, + 'AC_FC_FREEFORM' => 1, + 'AC_FC_PP_DEFINE' => 1, + 'AM_PATH_GUILE' => 1, + 'AM_PROG_MOC' => 1, + 'AM_SILENT_RULES' => 1, + 'LT_CONFIG_LTDL_DIR' => 1, + 'AC_CANONICAL_SYSTEM' => 1, + 'AH_OUTPUT' => 1, + 'AC_REQUIRE_AUX_FILE' => 1, 'AM_MAINTAINER_MODE' => 1, - 'AC_CONFIG_HEADERS' => 1, - 'AM_MAKEFILE_INCLUDE' => 1, - '_AM_MAKEFILE_INCLUDE' => 1, + 'AM_INIT_AUTOMAKE' => 1, 'AC_CONFIG_LINKS' => 1, - 'AM_GNU_GETTEXT' => 1, - 'AC_CANONICAL_BUILD' => 1, - 'AC_INIT' => 1, 'm4_pattern_forbid' => 1, - 'sinclude' => 1, - 'AC_CONFIG_SUBDIRS' => 1, - 'AC_CANONICAL_HOST' => 1, - '_AM_COND_ELSE' => 1, - 'AC_CONFIG_AUX_DIR' => 1, + 'AM_GNU_GETTEXT' => 1, 'AC_FC_SRCEXT' => 1, + '_AM_COND_IF' => 1, + 'AM_GNU_GETTEXT_INTL_SUBDIR' => 1, + 'AC_CANONICAL_BUILD' => 1, 'AM_PROG_CC_C_O' => 1, - 'AC_SUBST_TRACE' => 1, - 'AC_DEFINE_TRACE_LITERAL' => 1, - 'AM_PROG_MKDIR_P' => 1, - '_LT_AC_TAGCONFIG' => 1, - 'AM_INIT_AUTOMAKE' => 1, - '_AM_COND_ENDIF' => 1, - '_AM_SUBST_NOTMAKE' => 1, - 'AH_OUTPUT' => 1, - 'AM_PROG_CXX_C_O' => 1, - 'AC_CANONICAL_SYSTEM' => 1, - 'm4_pattern_allow' => 1, - 'm4_include' => 1, - 'AM_NLS' => 1, - 'AC_CONFIG_LIBOBJ_DIR' => 1, - 'AM_POT_TOOLS' => 1, - 'LT_INIT' => 1, - 'AM_PROG_FC_C_O' => 1, + 'AM_AUTOMAKE_VERSION' => 1, 'AM_PROG_AR' => 1, - 'AM_GNU_GETTEXT_INTL_SUBDIR' => 1, - 'AC_REQUIRE_AUX_FILE' => 1, - 'AM_CONDITIONAL' => 1, - 'AC_LIBSOURCE' => 1, - 'AC_FC_PP_SRCEXT' => 1, - 'AM_ENABLE_MULTILIB' => 1, - 'AC_SUBST' => 1, - 'AC_FC_FREEFORM' => 1, - 'AC_CONFIG_FILES' => 1 + 'm4_include' => 1, + 'AC_INIT' => 1, + '_AM_COND_ENDIF' => 1, + 'AC_PROG_LIBTOOL' => 1 } ], 'Autom4te::Request' ) ); diff --git a/config.log b/config.log index 4a604d8..4cff49b 100644 --- a/config.log +++ b/config.log @@ -411,3 +411,25 @@ config.status:1146: cd src && sed -e '/# am--include-marker/d' makefile make[1]: Entering directory '/home/morpheus/subu_land/subu/src' make[1]: Leaving directory '/home/morpheus/subu_land/subu/src' config.status:1151: $? = 0 + +## ---------------------- ## +## Running config.status. ## +## ---------------------- ## + +This file was extended by mk-subu-0 config.status 1.0, which was +generated by GNU Autoconf 2.69. Invocation command line was + + CONFIG_FILES = + CONFIG_HEADERS = + CONFIG_LINKS = + CONFIG_COMMANDS = + $ ./config.status src/makefile depfiles + +on manorhouse + +config.status:840: creating src/makefile +config.status:1069: executing depfiles commands +config.status:1146: cd src && sed -e '/# am--include-marker/d' makefile | make -f - am--depfiles +make[1]: Entering directory '/home/morpheus/subu_land/subu/src' +make[1]: Leaving directory '/home/morpheus/subu_land/subu/src' +config.status:1151: $? = 0 diff --git a/src/.deps/dispatch_exec.lib.Po b/src/.deps/dispatch_exec.lib.Po new file mode 100644 index 0000000..766bcc6 --- /dev/null +++ b/src/.deps/dispatch_exec.lib.Po @@ -0,0 +1,234 @@ +dispatch_exec.lib.o: dispatch_exec.lib.c /usr/include/stdc-predef.h \ + /usr/include/sys/types.h /usr/include/features.h \ + /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h \ + /usr/include/bits/long-double.h /usr/include/gnu/stubs.h \ + /usr/include/gnu/stubs-64.h /usr/include/bits/types.h \ + /usr/include/bits/typesizes.h /usr/include/bits/types/clock_t.h \ + /usr/include/bits/types/clockid_t.h /usr/include/bits/types/time_t.h \ + /usr/include/bits/types/timer_t.h \ + /usr/lib/gcc/x86_64-redhat-linux/8/include/stddef.h \ + /usr/include/bits/stdint-intn.h /usr/include/endian.h \ + /usr/include/bits/endian.h /usr/include/bits/byteswap.h \ + /usr/include/bits/uintn-identity.h /usr/include/sys/select.h \ + /usr/include/bits/select.h /usr/include/bits/types/sigset_t.h \ + /usr/include/bits/types/__sigset_t.h \ + /usr/include/bits/types/struct_timeval.h \ + /usr/include/bits/types/struct_timespec.h \ + /usr/include/bits/pthreadtypes.h /usr/include/bits/thread-shared-types.h \ + /usr/include/bits/pthreadtypes-arch.h /usr/include/unistd.h \ + /usr/include/bits/posix_opt.h /usr/include/bits/environments.h \ + /usr/include/bits/confname.h /usr/include/bits/getopt_posix.h \ + /usr/include/bits/getopt_core.h /usr/include/wait.h \ + /usr/include/sys/wait.h /usr/include/signal.h /usr/include/bits/signum.h \ + /usr/include/bits/signum-generic.h \ + /usr/include/bits/types/sig_atomic_t.h \ + /usr/include/bits/types/siginfo_t.h /usr/include/bits/types/__sigval_t.h \ + /usr/include/bits/siginfo-arch.h /usr/include/bits/siginfo-consts.h \ + /usr/include/bits/siginfo-consts-arch.h \ + /usr/include/bits/types/sigval_t.h /usr/include/bits/types/sigevent_t.h \ + /usr/include/bits/sigevent-consts.h /usr/include/bits/sigaction.h \ + /usr/include/bits/sigcontext.h /usr/include/bits/types/stack_t.h \ + /usr/include/sys/ucontext.h /usr/include/bits/sigstack.h \ + /usr/include/bits/ss_flags.h /usr/include/bits/types/struct_sigstack.h \ + /usr/include/bits/sigthread.h /usr/include/bits/waitflags.h \ + /usr/include/bits/waitstatus.h /usr/include/stdlib.h \ + /usr/include/bits/libc-header-start.h /usr/include/bits/floatn.h \ + /usr/include/bits/floatn-common.h /usr/include/bits/types/locale_t.h \ + /usr/include/bits/types/__locale_t.h /usr/include/alloca.h \ + /usr/include/bits/stdlib-bsearch.h /usr/include/bits/stdlib-float.h \ + /usr/include/stdio.h /usr/lib/gcc/x86_64-redhat-linux/8/include/stdarg.h \ + /usr/include/bits/types/__fpos_t.h /usr/include/bits/types/__mbstate_t.h \ + /usr/include/bits/types/__fpos64_t.h /usr/include/bits/types/__FILE.h \ + /usr/include/bits/types/FILE.h /usr/include/bits/types/struct_FILE.h \ + /usr/include/bits/types/cookie_io_functions_t.h \ + /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \ + /usr/include/bits/stdio.h /usr/include/errno.h /usr/include/bits/errno.h \ + /usr/include/linux/errno.h /usr/include/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/bits/types/error_t.h local_common.h ../config.h \ + /usr/lib/gcc/x86_64-redhat-linux/8/include/stdbool.h dbprintf.aux.h \ + dispatch_exec.lib.h + +/usr/include/stdc-predef.h: + +/usr/include/sys/types.h: + +/usr/include/features.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/bits/long-double.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-64.h: + +/usr/include/bits/types.h: + +/usr/include/bits/typesizes.h: + +/usr/include/bits/types/clock_t.h: + +/usr/include/bits/types/clockid_t.h: + +/usr/include/bits/types/time_t.h: + +/usr/include/bits/types/timer_t.h: + +/usr/lib/gcc/x86_64-redhat-linux/8/include/stddef.h: + +/usr/include/bits/stdint-intn.h: + +/usr/include/endian.h: + +/usr/include/bits/endian.h: + +/usr/include/bits/byteswap.h: + +/usr/include/bits/uintn-identity.h: + +/usr/include/sys/select.h: + +/usr/include/bits/select.h: + +/usr/include/bits/types/sigset_t.h: + +/usr/include/bits/types/__sigset_t.h: + +/usr/include/bits/types/struct_timeval.h: + +/usr/include/bits/types/struct_timespec.h: + +/usr/include/bits/pthreadtypes.h: + +/usr/include/bits/thread-shared-types.h: + +/usr/include/bits/pthreadtypes-arch.h: + +/usr/include/unistd.h: + +/usr/include/bits/posix_opt.h: + +/usr/include/bits/environments.h: + +/usr/include/bits/confname.h: + +/usr/include/bits/getopt_posix.h: + +/usr/include/bits/getopt_core.h: + +/usr/include/wait.h: + +/usr/include/sys/wait.h: + +/usr/include/signal.h: + +/usr/include/bits/signum.h: + +/usr/include/bits/signum-generic.h: + +/usr/include/bits/types/sig_atomic_t.h: + +/usr/include/bits/types/siginfo_t.h: + +/usr/include/bits/types/__sigval_t.h: + +/usr/include/bits/siginfo-arch.h: + +/usr/include/bits/siginfo-consts.h: + +/usr/include/bits/siginfo-consts-arch.h: + +/usr/include/bits/types/sigval_t.h: + +/usr/include/bits/types/sigevent_t.h: + +/usr/include/bits/sigevent-consts.h: + +/usr/include/bits/sigaction.h: + +/usr/include/bits/sigcontext.h: + +/usr/include/bits/types/stack_t.h: + +/usr/include/sys/ucontext.h: + +/usr/include/bits/sigstack.h: + +/usr/include/bits/ss_flags.h: + +/usr/include/bits/types/struct_sigstack.h: + +/usr/include/bits/sigthread.h: + +/usr/include/bits/waitflags.h: + +/usr/include/bits/waitstatus.h: + +/usr/include/stdlib.h: + +/usr/include/bits/libc-header-start.h: + +/usr/include/bits/floatn.h: + +/usr/include/bits/floatn-common.h: + +/usr/include/bits/types/locale_t.h: + +/usr/include/bits/types/__locale_t.h: + +/usr/include/alloca.h: + +/usr/include/bits/stdlib-bsearch.h: + +/usr/include/bits/stdlib-float.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-redhat-linux/8/include/stdarg.h: + +/usr/include/bits/types/__fpos_t.h: + +/usr/include/bits/types/__mbstate_t.h: + +/usr/include/bits/types/__fpos64_t.h: + +/usr/include/bits/types/__FILE.h: + +/usr/include/bits/types/FILE.h: + +/usr/include/bits/types/struct_FILE.h: + +/usr/include/bits/types/cookie_io_functions_t.h: + +/usr/include/bits/stdio_lim.h: + +/usr/include/bits/sys_errlist.h: + +/usr/include/bits/stdio.h: + +/usr/include/errno.h: + +/usr/include/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/include/bits/types/error_t.h: + +local_common.h: + +../config.h: + +/usr/lib/gcc/x86_64-redhat-linux/8/include/stdbool.h: + +dbprintf.aux.h: + +dispatch_exec.lib.h: diff --git a/src/.deps/dispatch_f.lib.Po b/src/.deps/dispatch_f.lib.Po new file mode 100644 index 0000000..df5f4f2 --- /dev/null +++ b/src/.deps/dispatch_f.lib.Po @@ -0,0 +1,234 @@ +dispatch_f.lib.o: dispatch_f.lib.c /usr/include/stdc-predef.h \ + /usr/include/sys/types.h /usr/include/features.h \ + /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h \ + /usr/include/bits/long-double.h /usr/include/gnu/stubs.h \ + /usr/include/gnu/stubs-64.h /usr/include/bits/types.h \ + /usr/include/bits/typesizes.h /usr/include/bits/types/clock_t.h \ + /usr/include/bits/types/clockid_t.h /usr/include/bits/types/time_t.h \ + /usr/include/bits/types/timer_t.h \ + /usr/lib/gcc/x86_64-redhat-linux/8/include/stddef.h \ + /usr/include/bits/stdint-intn.h /usr/include/endian.h \ + /usr/include/bits/endian.h /usr/include/bits/byteswap.h \ + /usr/include/bits/uintn-identity.h /usr/include/sys/select.h \ + /usr/include/bits/select.h /usr/include/bits/types/sigset_t.h \ + /usr/include/bits/types/__sigset_t.h \ + /usr/include/bits/types/struct_timeval.h \ + /usr/include/bits/types/struct_timespec.h \ + /usr/include/bits/pthreadtypes.h /usr/include/bits/thread-shared-types.h \ + /usr/include/bits/pthreadtypes-arch.h /usr/include/unistd.h \ + /usr/include/bits/posix_opt.h /usr/include/bits/environments.h \ + /usr/include/bits/confname.h /usr/include/bits/getopt_posix.h \ + /usr/include/bits/getopt_core.h /usr/include/wait.h \ + /usr/include/sys/wait.h /usr/include/signal.h /usr/include/bits/signum.h \ + /usr/include/bits/signum-generic.h \ + /usr/include/bits/types/sig_atomic_t.h \ + /usr/include/bits/types/siginfo_t.h /usr/include/bits/types/__sigval_t.h \ + /usr/include/bits/siginfo-arch.h /usr/include/bits/siginfo-consts.h \ + /usr/include/bits/siginfo-consts-arch.h \ + /usr/include/bits/types/sigval_t.h /usr/include/bits/types/sigevent_t.h \ + /usr/include/bits/sigevent-consts.h /usr/include/bits/sigaction.h \ + /usr/include/bits/sigcontext.h /usr/include/bits/types/stack_t.h \ + /usr/include/sys/ucontext.h /usr/include/bits/sigstack.h \ + /usr/include/bits/ss_flags.h /usr/include/bits/types/struct_sigstack.h \ + /usr/include/bits/sigthread.h /usr/include/bits/waitflags.h \ + /usr/include/bits/waitstatus.h /usr/include/stdlib.h \ + /usr/include/bits/libc-header-start.h /usr/include/bits/floatn.h \ + /usr/include/bits/floatn-common.h /usr/include/bits/types/locale_t.h \ + /usr/include/bits/types/__locale_t.h /usr/include/alloca.h \ + /usr/include/bits/stdlib-bsearch.h /usr/include/bits/stdlib-float.h \ + /usr/include/stdio.h /usr/lib/gcc/x86_64-redhat-linux/8/include/stdarg.h \ + /usr/include/bits/types/__fpos_t.h /usr/include/bits/types/__mbstate_t.h \ + /usr/include/bits/types/__fpos64_t.h /usr/include/bits/types/__FILE.h \ + /usr/include/bits/types/FILE.h /usr/include/bits/types/struct_FILE.h \ + /usr/include/bits/types/cookie_io_functions_t.h \ + /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \ + /usr/include/bits/stdio.h /usr/include/errno.h /usr/include/bits/errno.h \ + /usr/include/linux/errno.h /usr/include/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/bits/types/error_t.h local_common.h ../config.h \ + /usr/lib/gcc/x86_64-redhat-linux/8/include/stdbool.h dbprintf.aux.h \ + dispatch_f.lib.h + +/usr/include/stdc-predef.h: + +/usr/include/sys/types.h: + +/usr/include/features.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/bits/long-double.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-64.h: + +/usr/include/bits/types.h: + +/usr/include/bits/typesizes.h: + +/usr/include/bits/types/clock_t.h: + +/usr/include/bits/types/clockid_t.h: + +/usr/include/bits/types/time_t.h: + +/usr/include/bits/types/timer_t.h: + +/usr/lib/gcc/x86_64-redhat-linux/8/include/stddef.h: + +/usr/include/bits/stdint-intn.h: + +/usr/include/endian.h: + +/usr/include/bits/endian.h: + +/usr/include/bits/byteswap.h: + +/usr/include/bits/uintn-identity.h: + +/usr/include/sys/select.h: + +/usr/include/bits/select.h: + +/usr/include/bits/types/sigset_t.h: + +/usr/include/bits/types/__sigset_t.h: + +/usr/include/bits/types/struct_timeval.h: + +/usr/include/bits/types/struct_timespec.h: + +/usr/include/bits/pthreadtypes.h: + +/usr/include/bits/thread-shared-types.h: + +/usr/include/bits/pthreadtypes-arch.h: + +/usr/include/unistd.h: + +/usr/include/bits/posix_opt.h: + +/usr/include/bits/environments.h: + +/usr/include/bits/confname.h: + +/usr/include/bits/getopt_posix.h: + +/usr/include/bits/getopt_core.h: + +/usr/include/wait.h: + +/usr/include/sys/wait.h: + +/usr/include/signal.h: + +/usr/include/bits/signum.h: + +/usr/include/bits/signum-generic.h: + +/usr/include/bits/types/sig_atomic_t.h: + +/usr/include/bits/types/siginfo_t.h: + +/usr/include/bits/types/__sigval_t.h: + +/usr/include/bits/siginfo-arch.h: + +/usr/include/bits/siginfo-consts.h: + +/usr/include/bits/siginfo-consts-arch.h: + +/usr/include/bits/types/sigval_t.h: + +/usr/include/bits/types/sigevent_t.h: + +/usr/include/bits/sigevent-consts.h: + +/usr/include/bits/sigaction.h: + +/usr/include/bits/sigcontext.h: + +/usr/include/bits/types/stack_t.h: + +/usr/include/sys/ucontext.h: + +/usr/include/bits/sigstack.h: + +/usr/include/bits/ss_flags.h: + +/usr/include/bits/types/struct_sigstack.h: + +/usr/include/bits/sigthread.h: + +/usr/include/bits/waitflags.h: + +/usr/include/bits/waitstatus.h: + +/usr/include/stdlib.h: + +/usr/include/bits/libc-header-start.h: + +/usr/include/bits/floatn.h: + +/usr/include/bits/floatn-common.h: + +/usr/include/bits/types/locale_t.h: + +/usr/include/bits/types/__locale_t.h: + +/usr/include/alloca.h: + +/usr/include/bits/stdlib-bsearch.h: + +/usr/include/bits/stdlib-float.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-redhat-linux/8/include/stdarg.h: + +/usr/include/bits/types/__fpos_t.h: + +/usr/include/bits/types/__mbstate_t.h: + +/usr/include/bits/types/__fpos64_t.h: + +/usr/include/bits/types/__FILE.h: + +/usr/include/bits/types/FILE.h: + +/usr/include/bits/types/struct_FILE.h: + +/usr/include/bits/types/cookie_io_functions_t.h: + +/usr/include/bits/stdio_lim.h: + +/usr/include/bits/sys_errlist.h: + +/usr/include/bits/stdio.h: + +/usr/include/errno.h: + +/usr/include/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/include/bits/types/error_t.h: + +local_common.h: + +../config.h: + +/usr/lib/gcc/x86_64-redhat-linux/8/include/stdbool.h: + +dbprintf.aux.h: + +dispatch_f.lib.h: diff --git a/src/.deps/dispatch_useradd.lib.Po b/src/.deps/dispatch_useradd.lib.Po index 9a5394d..bd03c79 100644 --- a/src/.deps/dispatch_useradd.lib.Po +++ b/src/.deps/dispatch_useradd.lib.Po @@ -33,7 +33,7 @@ dispatch_useradd.lib.o: dispatch_useradd.lib.c /usr/include/stdc-predef.h \ /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ local_common.h ../config.h \ /usr/lib/gcc/x86_64-redhat-linux/8/include/stdbool.h dbprintf.aux.h \ - dispatch.lib.h dispatch_useradd.lib.h /usr/include/pwd.h + dispatch_exec.lib.h dispatch_useradd.lib.h /usr/include/pwd.h /usr/include/stdc-predef.h: @@ -165,7 +165,7 @@ local_common.h: dbprintf.aux.h: -dispatch.lib.h: +dispatch_exec.lib.h: dispatch_useradd.lib.h: diff --git a/src/.deps/subu-mk-0.lib.Po b/src/.deps/subu-mk-0.lib.Po index 5682566..05ffa4d 100644 --- a/src/.deps/subu-mk-0.lib.Po +++ b/src/.deps/subu-mk-0.lib.Po @@ -26,7 +26,10 @@ subu-mk-0.lib.o: subu-mk-0.lib.c /usr/include/stdc-predef.h \ /usr/include/bits/types/FILE.h /usr/include/bits/types/struct_FILE.h \ /usr/include/bits/types/cookie_io_functions_t.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \ - /usr/include/bits/stdio.h /usr/include/stdlib.h \ + /usr/include/bits/stdio.h /usr/include/errno.h /usr/include/bits/errno.h \ + /usr/include/linux/errno.h /usr/include/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/bits/types/error_t.h /usr/include/stdlib.h \ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ /usr/include/bits/floatn.h /usr/include/bits/floatn-common.h \ /usr/include/bits/types/locale_t.h /usr/include/bits/types/__locale_t.h \ @@ -34,9 +37,9 @@ subu-mk-0.lib.o: subu-mk-0.lib.c /usr/include/stdc-predef.h \ /usr/include/bits/stdlib-float.h /usr/include/pwd.h \ /usr/include/string.h /usr/include/strings.h /usr/include/sys/stat.h \ /usr/include/bits/stat.h /usr/include/bits/statx.h \ - /usr/lib/gcc/x86_64-redhat-linux/8/include/stdbool.h dispatch.lib.h \ - local_common.h ../config.h dbprintf.aux.h dispatch_useradd.lib.h \ - subu-mk-0.lib.h + /usr/lib/gcc/x86_64-redhat-linux/8/include/stdbool.h dispatch_f.lib.h \ + local_common.h ../config.h dbprintf.aux.h dispatch_exec.lib.h \ + dispatch_useradd.lib.h subu-mk-0.lib.h /usr/include/stdc-predef.h: @@ -134,6 +137,20 @@ subu-mk-0.lib.o: subu-mk-0.lib.c /usr/include/stdc-predef.h \ /usr/include/bits/stdio.h: +/usr/include/errno.h: + +/usr/include/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/include/bits/types/error_t.h: + /usr/include/stdlib.h: /usr/include/bits/waitflags.h: @@ -168,7 +185,7 @@ subu-mk-0.lib.o: subu-mk-0.lib.c /usr/include/stdc-predef.h \ /usr/lib/gcc/x86_64-redhat-linux/8/include/stdbool.h: -dispatch.lib.h: +dispatch_f.lib.h: local_common.h: @@ -176,6 +193,8 @@ local_common.h: dbprintf.aux.h: +dispatch_exec.lib.h: + dispatch_useradd.lib.h: subu-mk-0.lib.h: diff --git a/src/dispatch_exec.lib.c b/src/dispatch_exec.lib.c index 166fa28..1c3b4ae 100644 --- a/src/dispatch_exec.lib.c +++ b/src/dispatch_exec.lib.c @@ -29,10 +29,10 @@ int dispatch_exec(char **argv, char **envp){ return -1; } #ifdef DEBUG - dbprintf("dispatching exec:"); + dbprintf("dispatching exec, args follow:\n"); char **apt = argv; - while( apt ){ - dbprintf(" %s",*apt); + while( *apt ){ + dbprintf("\t%s",*apt); apt++; } dbprintf("\n"); diff --git a/src/dispatch_exec.lib.h b/src/dispatch_exec.lib.h index 29e66f5..dcd457a 100644 --- a/src/dispatch_exec.lib.h +++ b/src/dispatch_exec.lib.h @@ -1,5 +1,5 @@ -#ifndef DISPATCH_LIB_H -#define DISPATCH_LIB_H +#ifndef DISPATCH_EXEC_LIB_H +#define DISPATCH_EXEC_LIB_H #include "local_common.h" int dispatch_exec(char **argv, char **envp); diff --git a/src/dispatch_f.lib.c b/src/dispatch_f.lib.c index 8baa18f..1548124 100644 --- a/src/dispatch_f.lib.c +++ b/src/dispatch_f.lib.c @@ -24,8 +24,8 @@ #include "local_common.h" #include "dispatch_f.lib.h" -int dispatch_f(char *fname, int (*f)()){ - char *perror_src = "displatch_f_as"; +int dispatch_f(char *fname, int (*f)(void *arg), void *f_arg){ + char *perror_src = "dispatch_f_as"; #ifdef DEBUG dbprintf("%s %s\n", perror_src, fname); #endif @@ -36,8 +36,8 @@ int dispatch_f(char *fname, int (*f)()){ return ERR_FORK; } if( pid == 0 ){ // we are the child - int ret = (*f)(); - return ret; + int status = (*f)(f_arg); + exit(status); }else{ // we are the parent int wstatus; waitpid(pid, &wstatus, 0); @@ -45,8 +45,8 @@ int dispatch_f(char *fname, int (*f)()){ } } -int dispatch_f_euid_egid(char *fname, int (*f)(), uid_t euid, gid_t egid){ - char *perror_src = "displatch_f_as"; +int dispatch_f_euid_egid(char *fname, int (*f)(void *arg), void *f_arg, uid_t euid, gid_t egid){ + char *perror_src = "dispatch_f_as"; #ifdef DEBUG dbprintf("%s %s %u %u\n", perror_src, fname, euid, egid); #endif @@ -67,8 +67,8 @@ int dispatch_f_euid_egid(char *fname, int (*f)(), uid_t euid, gid_t egid){ fprintf(stderr, "%s %s %u %u\n", perror_src, fname, euid, egid); return ERR_SETEGID; } - int ret = (*f)(); - return ret; + int status = (*f)(f_arg); + exit(status); }else{ // we are the parent int wstatus; waitpid(pid, &wstatus, 0); diff --git a/src/dispatch_f.lib.h b/src/dispatch_f.lib.h index 551d51a..cbfde4b 100644 --- a/src/dispatch_f.lib.h +++ b/src/dispatch_f.lib.h @@ -1,13 +1,14 @@ -#ifndef DISPATCH_LIB_H -#define DISPATCH_LIB_H +#ifndef DISPATCH_F_LIB_H +#define DISPATCH_F_LIB_H #include "local_common.h" #define ERR_FORK -1; #define ERR_SETEUID -2; #define ERR_SETEGID -3; -int dispatch_f(char *fname, int (*f)()); -int dispatch_f_euid_egid(char *fname, int (*f)(), uid_t euid, gid_t egid); +int dispatch_f(char *fname, int (*f)(void *arg), void *f_arg); +int dispatch_f_euid_egid(char *fname, int (*f)(void *arg), void *f_arg, uid_t euid, gid_t egid); + #endif diff --git a/src/dispatch_useradd.lib.c b/src/dispatch_useradd.lib.c index c3823f9..e94ee88 100644 --- a/src/dispatch_useradd.lib.c +++ b/src/dispatch_useradd.lib.c @@ -10,7 +10,7 @@ would be found there instead. #include #include #include "local_common.h" -#include "dispatch.lib.h" +#include "dispatch_exec.lib.h" #include "dispatch_useradd.lib.h" // we have a contract with the caller that argv[1] is always the subuname @@ -27,7 +27,7 @@ struct dispatch_useradd_ret_t dispatch_useradd(char **argv, char **envp){ char *subu_name; { subu_name = argv[1]; - if( dispatch(argv, envp) == -1 ){ + if( dispatch_exec(argv, envp) == -1 ){ fprintf(stderr,"%s failed\n", argv[0]); ret.error = DISPATCH_USERADD_ERR_DISPATCH; ret.pw_record = NULL; diff --git a/src/local_common.h b/src/local_common.h index 5f656b2..a7f58cc 100644 --- a/src/local_common.h +++ b/src/local_common.h @@ -7,7 +7,7 @@ #include #include "dbprintf.aux.h" -#define DEBUG +//#define DEBUG typedef unsigned int uint; #endif diff --git a/src/makefile b/src/makefile index 4beb3f4..0a5df4f 100644 --- a/src/makefile +++ b/src/makefile @@ -99,9 +99,9 @@ CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) -am_subu_mk_0_OBJECTS = dbprintf.aux.$(OBJEXT) subu-mk-0.cli.$(OBJEXT) \ - subu-mk-0.lib.$(OBJEXT) dispatch.lib.$(OBJEXT) \ - dispatch_useradd.lib.$(OBJEXT) +am_subu_mk_0_OBJECTS = dbprintf.aux.$(OBJEXT) dispatch_f.lib.$(OBJEXT) \ + dispatch_exec.lib.$(OBJEXT) dispatch_useradd.lib.$(OBJEXT) \ + subu-mk-0.cli.$(OBJEXT) subu-mk-0.lib.$(OBJEXT) subu_mk_0_OBJECTS = $(am_subu_mk_0_OBJECTS) subu_mk_0_LDADD = $(LDADD) AM_V_P = $(am__v_P_$(V)) @@ -120,7 +120,7 @@ DEFAULT_INCLUDES = -I. -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/dbprintf.aux.Po \ - ./$(DEPDIR)/dispatch.lib.Po \ + ./$(DEPDIR)/dispatch_exec.lib.Po ./$(DEPDIR)/dispatch_f.lib.Po \ ./$(DEPDIR)/dispatch_useradd.lib.Po \ ./$(DEPDIR)/subu-mk-0.cli.Po ./$(DEPDIR)/subu-mk-0.lib.Po am__mv = mv -f @@ -250,10 +250,11 @@ top_builddir = .. top_srcdir = .. subu_mk_0_SOURCES = \ dbprintf.aux.c\ + dispatch_f.lib.c\ + dispatch_exec.lib.c\ + dispatch_useradd.lib.c\ subu-mk-0.cli.c\ - subu-mk-0.lib.c\ - dispatch.lib.c\ - dispatch_useradd.lib.c + subu-mk-0.lib.c all: all-am @@ -342,7 +343,8 @@ distclean-compile: -rm -f *.tab.c include ./$(DEPDIR)/dbprintf.aux.Po # am--include-marker -include ./$(DEPDIR)/dispatch.lib.Po # am--include-marker +include ./$(DEPDIR)/dispatch_exec.lib.Po # am--include-marker +include ./$(DEPDIR)/dispatch_f.lib.Po # am--include-marker include ./$(DEPDIR)/dispatch_useradd.lib.Po # am--include-marker include ./$(DEPDIR)/subu-mk-0.cli.Po # am--include-marker include ./$(DEPDIR)/subu-mk-0.lib.Po # am--include-marker @@ -495,7 +497,8 @@ clean-am: clean-binPROGRAMS clean-generic mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/dbprintf.aux.Po - -rm -f ./$(DEPDIR)/dispatch.lib.Po + -rm -f ./$(DEPDIR)/dispatch_exec.lib.Po + -rm -f ./$(DEPDIR)/dispatch_f.lib.Po -rm -f ./$(DEPDIR)/dispatch_useradd.lib.Po -rm -f ./$(DEPDIR)/subu-mk-0.cli.Po -rm -f ./$(DEPDIR)/subu-mk-0.lib.Po @@ -545,7 +548,8 @@ installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/dbprintf.aux.Po - -rm -f ./$(DEPDIR)/dispatch.lib.Po + -rm -f ./$(DEPDIR)/dispatch_exec.lib.Po + -rm -f ./$(DEPDIR)/dispatch_f.lib.Po -rm -f ./$(DEPDIR)/dispatch_useradd.lib.Po -rm -f ./$(DEPDIR)/subu-mk-0.cli.Po -rm -f ./$(DEPDIR)/subu-mk-0.lib.Po diff --git a/src/makefile.am b/src/makefile.am index 02f1612..aa4c9d1 100644 --- a/src/makefile.am +++ b/src/makefile.am @@ -1,10 +1,11 @@ bin_PROGRAMS=subu-mk-0 subu_mk_0_SOURCES=\ dbprintf.aux.c\ + dispatch_f.lib.c\ + dispatch_exec.lib.c\ + dispatch_useradd.lib.c\ subu-mk-0.cli.c\ - subu-mk-0.lib.c\ - dispatch.lib.c\ - dispatch_useradd.lib.c + subu-mk-0.lib.c diff --git a/src/makefile.in b/src/makefile.in index d61fa61..fe6dd3d 100644 --- a/src/makefile.in +++ b/src/makefile.in @@ -99,9 +99,9 @@ CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) -am_subu_mk_0_OBJECTS = dbprintf.aux.$(OBJEXT) subu-mk-0.cli.$(OBJEXT) \ - subu-mk-0.lib.$(OBJEXT) dispatch.lib.$(OBJEXT) \ - dispatch_useradd.lib.$(OBJEXT) +am_subu_mk_0_OBJECTS = dbprintf.aux.$(OBJEXT) dispatch_f.lib.$(OBJEXT) \ + dispatch_exec.lib.$(OBJEXT) dispatch_useradd.lib.$(OBJEXT) \ + subu-mk-0.cli.$(OBJEXT) subu-mk-0.lib.$(OBJEXT) subu_mk_0_OBJECTS = $(am_subu_mk_0_OBJECTS) subu_mk_0_LDADD = $(LDADD) AM_V_P = $(am__v_P_@AM_V@) @@ -120,7 +120,7 @@ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/dbprintf.aux.Po \ - ./$(DEPDIR)/dispatch.lib.Po \ + ./$(DEPDIR)/dispatch_exec.lib.Po ./$(DEPDIR)/dispatch_f.lib.Po \ ./$(DEPDIR)/dispatch_useradd.lib.Po \ ./$(DEPDIR)/subu-mk-0.cli.Po ./$(DEPDIR)/subu-mk-0.lib.Po am__mv = mv -f @@ -250,10 +250,11 @@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ subu_mk_0_SOURCES = \ dbprintf.aux.c\ + dispatch_f.lib.c\ + dispatch_exec.lib.c\ + dispatch_useradd.lib.c\ subu-mk-0.cli.c\ - subu-mk-0.lib.c\ - dispatch.lib.c\ - dispatch_useradd.lib.c + subu-mk-0.lib.c all: all-am @@ -342,7 +343,8 @@ distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dbprintf.aux.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dispatch.lib.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dispatch_exec.lib.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dispatch_f.lib.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dispatch_useradd.lib.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/subu-mk-0.cli.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/subu-mk-0.lib.Po@am__quote@ # am--include-marker @@ -495,7 +497,8 @@ clean-am: clean-binPROGRAMS clean-generic mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/dbprintf.aux.Po - -rm -f ./$(DEPDIR)/dispatch.lib.Po + -rm -f ./$(DEPDIR)/dispatch_exec.lib.Po + -rm -f ./$(DEPDIR)/dispatch_f.lib.Po -rm -f ./$(DEPDIR)/dispatch_useradd.lib.Po -rm -f ./$(DEPDIR)/subu-mk-0.cli.Po -rm -f ./$(DEPDIR)/subu-mk-0.lib.Po @@ -545,7 +548,8 @@ installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/dbprintf.aux.Po - -rm -f ./$(DEPDIR)/dispatch.lib.Po + -rm -f ./$(DEPDIR)/dispatch_exec.lib.Po + -rm -f ./$(DEPDIR)/dispatch_f.lib.Po -rm -f ./$(DEPDIR)/dispatch_useradd.lib.Po -rm -f ./$(DEPDIR)/subu-mk-0.cli.Po -rm -f ./$(DEPDIR)/subu-mk-0.lib.Po diff --git a/src/subu-mk-0.lib.c b/src/subu-mk-0.lib.c index 6e0d541..4690e6e 100644 --- a/src/subu-mk-0.lib.c +++ b/src/subu-mk-0.lib.c @@ -24,9 +24,9 @@ #include #include #include -#include "dispatch.lib.h" -#include "dispatch_useradd.lib.h" #include "dispatch_f.lib.h" +#include "dispatch_exec.lib.h" +#include "dispatch_useradd.lib.h" #include "subu-mk-0.lib.h" typedef unsigned int uint; @@ -39,6 +39,16 @@ typedef unsigned int uint; */ #define BUG_SSS_CACHE_RUID 1 +// will be called through dispatch_f_as masteru +int masteru_makes_subuhome(void *arg){ + char *subuhome = (char *) arg; + if( mkdir( subuhome, 0700 ) == -1 ){ + perror("masteru_makes_subuhome"); + return -1; + } + return 0; +} + int subu_mk_0(char *subuname){ char *perror_src = "subu_mk_0"; @@ -47,14 +57,14 @@ int subu_mk_0(char *subuname){ #ifdef DEBUG dbprintf("Checking that we are running from a user and are setuid root.\n"); #endif - uid_t master_uid = getuid(); - gid_t master_gid = getgid(); + uid_t masteru_uid = getuid(); + gid_t masteru_gid = getgid(); uid_t set_euid = geteuid(); gid_t set_egid = getegid(); #ifdef DEBUG - dbprintf("master_uid %u, master_gid %u, set_euid %u set_egid %u\n", master_uid, master_gid, set_euid, set_egid); + dbprintf("masteru_uid %u, masteru_gid %u, set_euid %u set_egid %u\n", masteru_uid, masteru_gid, set_euid, set_egid); #endif - if( master_uid == 0 || set_euid != 0 ){ + if( masteru_uid == 0 || set_euid != 0 ){ fprintf(stderr, "this program must be run setuid root from a user account\n"); return ERR_SETUID_ROOT; } @@ -69,12 +79,12 @@ int subu_mk_0(char *subuname){ struct passwd *masteru_pw_record_pt; { #ifdef DEBUG - dbprintf("looking up masteru_name (i.e. uid %u) in /etc/passwd\n",uid); + dbprintf("looking up masteru_name (i.e. uid %u) in /etc/passwd\n", masteru_uid); #endif // subuname is the first argument passed in // verify that subuname is legal! --> code goes here ... subuname_len = strlen(subuname); - masteru_pw_record_pt = getpwuid(uid); + masteru_pw_record_pt = getpwuid(masteru_uid); masteru_name = masteru_pw_record_pt->pw_name; masteru_name_len = strlen(masteru_name); } @@ -110,43 +120,12 @@ int subu_mk_0(char *subuname){ #endif //-------------------------------------------------------------------------------- - // Just because masteru_home is referenced in /etc/passwd does not mean it exists, - // and does not mean that masteru owns it or has 'x' privileges. - // We also require that the subuland sub directory exists. - { - #ifdef DEBUG - dbprintf("checking that masteru_home and subuland exist\n"); - #endif - struct stat st; - int stat_ret; - - stat_ret = stat(masteru_home, &st); - if( stat_ret == -1 ){ - fprintf(stderr, "masteru home directory does not exist, \"%s\".", masteru_home); - free(subuland); - return ERR_NOT_EXIST_MASTERU_HOME; - }else if( !S_ISDIR(st.st_mode) ) { - fprintf(stderr, "strange masteru home directory is not a directory, \"%s\".", masteru_home); - free(subuland); - return ERR_NOT_EXIST_MASTERU_HOME; - }else if( ){ - } - - stat(subuland, &st); - if( !S_ISDIR(st.st_mode) ) { - fprintf(stderr, "$masteru_home/subuland/ directory does not exist"); - free(subuland); - return ERR_NOT_EXIST_SUBULAND; - } - } - - //-------------------------------------------------------------------------------- - // the name for the subu home directory, which is $(masteru_home)/subuland/subuname + // the path for the subu home directory, which is $(masteru_home)/subuland/subuname char *subuhome; size_t subuhome_len; { #ifdef DEBUG - dbprintf("making the name for subuhome\n"); + dbprintf("making the path for subuhome\n"); #endif subuhome_len = subuland_len + subuname_len; subuhome = (char *)malloc(subuhome_len + 1); @@ -162,9 +141,41 @@ int subu_mk_0(char *subuname){ dbprintf("subuhome: \"%s\"\n", subuhome); #endif + //-------------------------------------------------------------------------------- + // as masteru, create the subuhome directory + // if subuland does not exist, or if masteru doesn't have permissions, this will fail + // + { + #ifdef DEBUG + dbprintf("making subuhome\n"); + #endif + struct stat st; + if( stat(subuhome, &st) != -1 ){ + fprintf(stderr, "an file system object already exists at the subu home directory path\n"); + free(subuland); + free(subuhome); + return ERR_MK_SUBUHOME; + } + int ret = dispatch_f_euid_egid + ( + "masteru_makes_subuhome", + masteru_makes_subuhome, + (void *)subuhome, + masteru_uid, + masteru_gid + ); + if( ret == -1 ){ + free(subuland); + free(subuhome); + return ERR_FAILED_MKDIR_SUBU; + } + } + #ifdef DEBUG + dbprintf("made directory \"%s\"\n", subuhome); + #endif + /*-------------------------------------------------------------------------------- - We need to add execute access rights to masteru home and subuland so that - the subu user can cd to subuhome. + Make the subservient user, i.e. the subu Ok to specify the new home directory in useradd, because it doesn't make it. From the man page: @@ -174,39 +185,30 @@ int subu_mk_0(char *subuname){ does not have to exist but will not be created if it is missing. Actually Fedora 29's 'useradd' is making the directory even when -d is specified. - Adding the -M option supresses it. + Adding the -M option suppresses it. */ - - uid_t subuuid; - gid_t subugid; - bool subuhome_already_exists = false; { #ifdef DEBUG - dbprintf("making subu\n"); + dbprintf("making user \"%s\"\n", subuname); #endif - #if BUG_SSS_CACHE_RUID + #ifdef DEBUG + dbprintf("setting inherited real uid to 0 to accomodate SSS_CACHE UID BUG\n"); + #endif if( setuid(0) == -1 ){ perror(perror_src); + free(subuland); + free(subuhome); return ERR_BUG_SSS; } #endif - struct stat st; - if( stat(subuhome, &st) != -1 ){ - if( !S_ISDIR(st.st_mode) ) { - subuhome_already_exists = true; - }else{ - fprintf(stderr, "Home directory would clobber non-directory object already at %s\n", subuhome); - return ERR_MK_SUBUHOME; - }} - char *command = "/usr/sbin/useradd"; char *argv[6]; argv[0] = command; argv[1] = subuname; argv[2] = "-d"; argv[3] = subuhome; - argv[4] = -M + argv[4] = "-M"; argv[5] = (char *) NULL; char *envp[1]; envp[0] = (char *) NULL; @@ -218,44 +220,18 @@ int subu_mk_0(char *subuname){ free(subuhome); return ERR_FAILED_USERADD; } - subuuid = ret.pw_record->pw_uid; - subugid = ret.pw_record->pw_gid; - bool err_mk_subuhome = false; - if( !subuhome_already_exists && stat(subuhome, &st) != -1 ){ - if( S_ISDIR(st.st_mode) ){ - #if !BUG_USERADD_ALWAYS_MKHOME - err_mk_subuhome = true; - fprintf(stderr, "useradd -d unexpectedly created the subuhome, will delete that now\n"); - #endif - if( rmdir(subuhome) == -1 ){ - err_mk_subuhome = true; - fprintf(stderr, "could not delete the subuhome created by useradd, bailing\n"); - return ERR_MK_SUBUHOME; - } - }else{ - err_mk_subuhome = true; - fprintf(stderr, "useradd, or a parallel running process, has created a non-directory object at subuhome\n"); - return ERR_MK_SUBUHOME; - }} - - if( err_mk_subuhome ) - fprintf(stderr, "encountered some difficulties when attempging to make subu, you better have a look\n"); - #ifdef DEBUG - if( err_mk_subuhome ) - dbprintf("useradd finished"); - else - dbprintf("useradd finished with no errors\n"); + dbprintf("useradd finished\n"); #endif } //-------------------------------------------------------------------------------- { #ifdef DEBUG - dbprintf("give subu x access to masteru and subuland\n"); + dbprintf("give subu x access to masteru home and subuland, and give it rwx to its home\n"); #endif char *command = "/usr/bin/setfacl"; - char access[2 + subuname_len + 2 + 1]; + char access[strlen("u:") + subuname_len + strlen(":x") + 1 + strlen("rw")]; strcpy(access, "u:"); strcpy(access + 2, subuname); strcpy(access + 2 + subuname_len, ":x"); @@ -267,70 +243,55 @@ int subu_mk_0(char *subuname){ argv[4] = (char *) NULL; char *envp[1]; envp[0] = (char *) NULL; - if( dispatch(argv, envp) == -1 ){ + if( dispatch_exec(argv, envp) == -1 ){ fprintf(stderr, "'setfacl -m u:%s:x %s' returned an error.\n", subuname, masteru_home); free(subuland); free(subuhome); return ERR_SETFACL; } argv[3] = subuland; - if( dispatch(argv, envp) == -1 ){ + if( dispatch_exec(argv, envp) == -1 ){ fprintf(stderr, "'setfacl -m u:%s:x %s' returned an error.\n", subuname, subuland); free(subuland); free(subuhome); return ERR_SETFACL; } - } - - //-------------------------------------------------------------------------------- - // create subuhome directory - { - #ifdef DEBUG - dbprintf("mkdir(%s, 0x0700)\n", subuhome); - #endif - int ret = mkdir(subuhome, 0x0700); - if( ret == -1 ){ - perror(perror_src); - free(subuland); - free(subuhome); - return ERR_MK_SUBUHOME; - } - ret = chown(subuhome, subuuid, subugid); - if( ret == -1 ){ - perror(perror_src); + strcpy(access + 2 + subuname_len, ":rwx"); + argv[3] = subuhome; + if( dispatch_exec(argv, envp) == -1 ){ + fprintf(stderr, "'setfacl -m u:%s:rwx %s' returned an error.\n", subuname, subuhome); free(subuland); free(subuhome); - return ERR_MK_SUBUHOME; + return ERR_SETFACL; } + #ifdef DEBUG + dbprintf("subu can now cd to subuhome\n"); + #endif } //-------------------------------------------------------------------------------- { #ifdef DEBUG - dbprintf("give masteru access to the subuhome/..."); + dbprintf("give masteru default access to the subuhome\n"); #endif char *command = "/usr/bin/setfacl"; - char access[4 + masteru_name_len + 7 + masteru_name_len + 5 + subuhome_len + 1]; + char access[strlen("d:u:") + masteru_name_len + strlen(":rwX") + 1]; strcpy(access, "d:u:"); strcpy(access + 4, masteru_name); - strcpy(access + 4 + masteru_name_len, ":rwX,u:"); - strcpy(access + 4 + masteru_name_len + 7, masteru_name); - strcpy(access + 4 + masteru_name_len + 7 + masteru_name_len, ":rwX "); - strcpy(access + 4 + masteru_name_len + 7 + masteru_name_len + 5, subuhome); - char *argv[6]; + strcpy(access + 4 + masteru_name_len, ":rwX"); + char *argv[5]; argv[0] = command; - argv[1] = "-R"; // just in case the dir already existed with stuff in it - argv[2] = "-m"; - argv[3] = access; - argv[4] = subuhome; - argv[5] = (char *) NULL; + argv[1] = "-m"; + argv[2] = access; + argv[3] = subuhome; + argv[4] = (char *) NULL; char *envp[1]; envp[0] = (char *) NULL; - if( dispatch(argv, envp) == -1 ){ + if( dispatch_exec(argv, envp) == -1 ){ fprintf ( stderr, - "'setfacl -$ -m d:u:%s:rwX,u:%s:rwX %s' returned an error.\n", + "'setfacl -$ -m d:u:%s:rwX %s' returned an error.\n", masteru_name, masteru_name, subuhome @@ -339,10 +300,13 @@ int subu_mk_0(char *subuname){ free(subuhome); return ERR_SETFACL; } + #ifdef DEBUG + dbprintf("masteru now has default access\n"); + #endif } #ifdef DEBUG - dbprintf("finished subu-mk-0(%s) without error\n", subuname); + dbprintf("finished subu-mk-0(%s)\n", subuname); #endif free(subuland); free(subuhome); diff --git a/src/try_rmdir b/src/try_rmdir deleted file mode 100755 index 2c4c607..0000000 Binary files a/src/try_rmdir and /dev/null differ diff --git a/src/try_rmdir.c b/src/try_rmdir.c deleted file mode 100644 index 775c02d..0000000 --- a/src/try_rmdir.c +++ /dev/null @@ -1,8 +0,0 @@ - -#include -#include -int main(){ - int retval = rmdir("/home/morpheus/subuland/ttemp0"); - printf("retval %d\n",retval); - return 0; -}