subu-mk-0 working
authorThomas Walker Lynch <thomas.lynch@reasoningtechnology.com>
Thu, 21 Feb 2019 23:46:27 +0000 (00:46 +0100)
committerThomas Walker Lynch <thomas.lynch@reasoningtechnology.com>
Thu, 21 Feb 2019 23:46:27 +0000 (00:46 +0100)
19 files changed:
3_doc/todo.txt
autom4te.cache/requests
config.log
src/.deps/dispatch_exec.lib.Po [new file with mode: 0644]
src/.deps/dispatch_f.lib.Po [new file with mode: 0644]
src/.deps/dispatch_useradd.lib.Po
src/.deps/subu-mk-0.lib.Po
src/dispatch_exec.lib.c
src/dispatch_exec.lib.h
src/dispatch_f.lib.c
src/dispatch_f.lib.h
src/dispatch_useradd.lib.c
src/local_common.h
src/makefile
src/makefile.am
src/makefile.in
src/subu-mk-0.lib.c
src/try_rmdir [deleted file]
src/try_rmdir.c [deleted file]

index f769210..c22c873 100644 (file)
@@ -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.
+
index 56690ad..d6485d2 100644 (file)
                         '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( [
                         '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' )
            );
index 4a604d8..4cff49b 100644 (file)
@@ -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 (file)
index 0000000..766bcc6
--- /dev/null
@@ -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 (file)
index 0000000..df5f4f2
--- /dev/null
@@ -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:
index 9a5394d..bd03c79 100644 (file)
@@ -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:
 
index 5682566..05ffa4d 100644 (file)
@@ -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:
index 166fa28..1c3b4ae 100644 (file)
@@ -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");
index 29e66f5..dcd457a 100644 (file)
@@ -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);
index 8baa18f..1548124 100644 (file)
@@ -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);
index 551d51a..cbfde4b 100644 (file)
@@ -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
 
index c3823f9..e94ee88 100644 (file)
@@ -10,7 +10,7 @@ would be found there instead.
 #include <stdio.h>
 #include <errno.h>
 #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;
index 5f656b2..a7f58cc 100644 (file)
@@ -7,7 +7,7 @@
 #include <stdio.h>
 #include "dbprintf.aux.h"
 
-#define DEBUG
+//#define DEBUG
 typedef unsigned int uint;
 
 #endif
index 4beb3f4..0a5df4f 100644 (file)
@@ -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
index 02f1612..aa4c9d1 100644 (file)
@@ -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
 
 
 
index d61fa61..fe6dd3d 100644 (file)
@@ -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
index 6e0d541..4690e6e 100644 (file)
@@ -24,9 +24,9 @@
 #include <string.h>
 #include <sys/stat.h>
 #include <stdbool.h>
-#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 (executable)
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 (file)
index 775c02d..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-
-#include <stdio.h>
-#include <unistd.h>
-int main(){
-  int retval = rmdir("/home/morpheus/subuland/ttemp0");
-  printf("retval %d\n",retval);
-  return 0;
-}