-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
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.
+
'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' )
);
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
--- /dev/null
+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:
--- /dev/null
+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:
/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:
dbprintf.aux.h:
-dispatch.lib.h:
+dispatch_exec.lib.h:
dispatch_useradd.lib.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 \
/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:
/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/lib/gcc/x86_64-redhat-linux/8/include/stdbool.h:
-dispatch.lib.h:
+dispatch_f.lib.h:
local_common.h:
dbprintf.aux.h:
+dispatch_exec.lib.h:
+
dispatch_useradd.lib.h:
subu-mk-0.lib.h:
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");
-#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);
#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
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);
}
}
-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
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);
-#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
#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
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;
#include <stdio.h>
#include "dbprintf.aux.h"
-#define DEBUG
+//#define DEBUG
typedef unsigned int uint;
#endif
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))
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
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
-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
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
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
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
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@)
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
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
-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
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
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
#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;
*/
#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";
#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;
}
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);
}
#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);
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:
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;
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");
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
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);
+++ /dev/null
-
-#include <stdio.h>
-#include <unistd.h>
-int main(){
- int retval = rmdir("/home/morpheus/subuland/ttemp0");
- printf("retval %d\n",retval);
- return 0;
-}