'configure.ac'
],
{
- '_AC_AM_CONFIG_HEADER_HOOK' => 1,
'AC_CONFIG_MACRO_DIR' => 1,
- 'AM_CONDITIONAL' => 1,
+ 'AM_AUX_DIR_EXPAND' => 1,
+ 'AC_DEFUN' => 1,
+ '_AM_CONFIG_MACRO_DIRS' => 1,
'AM_AUTOMAKE_VERSION' => 1,
- 'AM_SET_DEPDIR' => 1,
+ 'AM_SANITY_CHECK' => 1,
+ 'AM_MAKE_INCLUDE' => 1,
+ 'AM_SET_LEADING_DOT' => 1,
'_AM_PROG_TAR' => 1,
+ 'AM_PROG_INSTALL_STRIP' => 1,
+ '_AM_DEPENDENCIES' => 1,
+ 'AM_RUN_LOG' => 1,
+ 'AM_PROG_INSTALL_SH' => 1,
+ 'AM_PROG_CC_C_O' => 1,
+ 'AM_INIT_AUTOMAKE' => 1,
+ 'AM_SET_CURRENT_AUTOMAKE_VERSION' => 1,
+ 'AC_DEFUN_ONCE' => 1,
+ 'AM_CONDITIONAL' => 1,
+ '_AM_SET_OPTION' => 1,
+ 'm4_pattern_forbid' => 1,
+ 'AU_DEFUN' => 1,
+ 'include' => 1,
+ '_AM_IF_OPTION' => 1,
+ '_AM_MANGLE_OPTION' => 1,
'_m4_warn' => 1,
- 'AM_AUX_DIR_EXPAND' => 1,
+ 'AM_DEP_TRACK' => 1,
'AM_SILENT_RULES' => 1,
- 'AC_DEFUN_ONCE' => 1,
- 'AM_PROG_INSTALL_STRIP' => 1,
+ '_AM_PROG_CC_C_O' => 1,
'm4_include' => 1,
- '_AM_OUTPUT_DEPENDENCY_COMMANDS' => 1,
- 'AC_CONFIG_MACRO_DIR_TRACE' => 1,
'AM_MISSING_HAS_RUN' => 1,
- 'AM_SET_CURRENT_AUTOMAKE_VERSION' => 1,
'_AM_SUBST_NOTMAKE' => 1,
- 'AM_RUN_LOG' => 1,
- 'AU_DEFUN' => 1,
- 'AM_PROG_INSTALL_SH' => 1,
- 'm4_pattern_allow' => 1,
'_AM_AUTOCONF_VERSION' => 1,
- 'AC_DEFUN' => 1,
- '_AM_CONFIG_MACRO_DIRS' => 1,
+ '_AM_OUTPUT_DEPENDENCY_COMMANDS' => 1,
+ '_AC_AM_CONFIG_HEADER_HOOK' => 1,
'AM_OUTPUT_DEPENDENCY_COMMANDS' => 1,
- 'AM_MAKE_INCLUDE' => 1,
- 'AM_DEP_TRACK' => 1,
- '_AM_IF_OPTION' => 1,
- 'AM_MISSING_PROG' => 1,
- 'include' => 1,
+ 'AM_SET_DEPDIR' => 1,
+ 'AC_CONFIG_MACRO_DIR_TRACE' => 1,
+ 'm4_pattern_allow' => 1,
'_AM_SET_OPTIONS' => 1,
- 'm4_pattern_forbid' => 1,
- 'AM_SET_LEADING_DOT' => 1,
'AM_SUBST_NOTMAKE' => 1,
- '_AM_PROG_CC_C_O' => 1,
- 'AM_SANITY_CHECK' => 1,
- '_AM_MANGLE_OPTION' => 1,
- '_AM_SET_OPTION' => 1,
- 'AM_PROG_CC_C_O' => 1,
- 'AM_INIT_AUTOMAKE' => 1,
- '_AM_DEPENDENCIES' => 1
+ 'AM_MISSING_PROG' => 1
}
], 'Autom4te::Request' ),
bless( [
'configure.ac'
],
{
- 'AC_CONFIG_SUBDIRS' => 1,
+ 'AM_PROG_CXX_C_O' => 1,
+ 'AM_MAINTAINER_MODE' => 1,
+ 'm4_pattern_allow' => 1,
'AC_CONFIG_HEADERS' => 1,
- '_AM_COND_IF' => 1,
- 'AC_CONFIG_LINKS' => 1,
- 'LT_CONFIG_LTDL_DIR' => 1,
+ 'AC_FC_PP_SRCEXT' => 1,
+ 'LT_INIT' => 1,
+ 'm4_include' => 1,
+ 'AC_INIT' => 1,
+ '_AM_MAKEFILE_INCLUDE' => 1,
+ '_m4_warn' => 1,
+ 'AM_SILENT_RULES' => 1,
+ 'include' => 1,
+ 'AM_MAKEFILE_INCLUDE' => 1,
'sinclude' => 1,
- 'AC_FC_PP_DEFINE' => 1,
- '_LT_AC_TAGCONFIG' => 1,
+ 'AC_CANONICAL_TARGET' => 1,
'AM_PATH_GUILE' => 1,
+ 'm4_pattern_forbid' => 1,
+ 'AC_REQUIRE_AUX_FILE' => 1,
+ '_AM_COND_ENDIF' => 1,
'AM_CONDITIONAL' => 1,
- 'AC_PROG_LIBTOOL' => 1,
- 'AM_POT_TOOLS' => 1,
- 'AM_AUTOMAKE_VERSION' => 1,
- 'AM_MAKEFILE_INCLUDE' => 1,
+ '_LT_AC_TAGCONFIG' => 1,
'AC_CONFIG_FILES' => 1,
- '_AM_MAKEFILE_INCLUDE' => 1,
- 'AM_PROG_MKDIR_P' => 1,
- 'AM_NLS' => 1,
- 'AC_REQUIRE_AUX_FILE' => 1,
- 'AC_CANONICAL_TARGET' => 1,
- 'AM_INIT_AUTOMAKE' => 1,
+ 'AC_CANONICAL_HOST' => 1,
'AC_FC_FREEFORM' => 1,
- 'AM_PROG_FC_C_O' => 1,
- 'AC_FC_SRCEXT' => 1,
- 'AM_PROG_F77_C_O' => 1,
- 'AM_PROG_AR' => 1,
- 'm4_include' => 1,
- 'AH_OUTPUT' => 1,
- 'AM_XGETTEXT_OPTION' => 1,
- 'm4_sinclude' => 1,
- 'AM_ENABLE_MULTILIB' => 1,
- 'AM_GNU_GETTEXT' => 1,
- '_AM_SUBST_NOTMAKE' => 1,
- 'AC_INIT' => 1,
- 'AC_CONFIG_LIBOBJ_DIR' => 1,
- 'AM_PROG_CXX_C_O' => 1,
'AC_CANONICAL_BUILD' => 1,
- 'LT_SUPPORTED_TAG' => 1,
+ 'AM_PROG_MKDIR_P' => 1,
+ 'm4_sinclude' => 1,
'AM_GNU_GETTEXT_INTL_SUBDIR' => 1,
- 'AC_CANONICAL_SYSTEM' => 1,
- 'LT_INIT' => 1,
+ 'AM_XGETTEXT_OPTION' => 1,
+ 'AM_EXTRA_RECURSIVE_TARGETS' => 1,
+ 'AC_DEFINE_TRACE_LITERAL' => 1,
+ 'AM_NLS' => 1,
+ '_AM_COND_IF' => 1,
+ 'LT_SUPPORTED_TAG' => 1,
+ 'AC_SUBST_TRACE' => 1,
'_AM_COND_ELSE' => 1,
- '_m4_warn' => 1,
- 'AC_CANONICAL_HOST' => 1,
- 'AM_SILENT_RULES' => 1,
- 'AC_FC_PP_SRCEXT' => 1,
- 'AM_MAINTAINER_MODE' => 1,
+ 'AM_ENABLE_MULTILIB' => 1,
+ '_AM_SUBST_NOTMAKE' => 1,
+ 'AH_OUTPUT' => 1,
+ 'AC_PROG_LIBTOOL' => 1,
+ 'AM_GNU_GETTEXT' => 1,
+ 'AM_POT_TOOLS' => 1,
'AC_SUBST' => 1,
- 'include' => 1,
- 'AM_PROG_MOC' => 1,
- 'm4_pattern_forbid' => 1,
- 'AC_CONFIG_AUX_DIR' => 1,
- 'AM_PROG_CC_C_O' => 1,
+ 'AC_CONFIG_LIBOBJ_DIR' => 1,
'AC_LIBSOURCE' => 1,
- '_AM_COND_ENDIF' => 1,
- 'm4_pattern_allow' => 1,
- 'AM_EXTRA_RECURSIVE_TARGETS' => 1,
- 'AC_SUBST_TRACE' => 1,
- 'AC_DEFINE_TRACE_LITERAL' => 1
+ 'AC_FC_SRCEXT' => 1,
+ 'AM_PROG_FC_C_O' => 1,
+ 'LT_CONFIG_LTDL_DIR' => 1,
+ 'AM_PROG_CC_C_O' => 1,
+ 'AC_FC_PP_DEFINE' => 1,
+ 'AM_INIT_AUTOMAKE' => 1,
+ 'AM_PROG_F77_C_O' => 1,
+ 'AC_CONFIG_AUX_DIR' => 1,
+ 'AM_AUTOMAKE_VERSION' => 1,
+ 'AC_CONFIG_LINKS' => 1,
+ 'AC_CONFIG_SUBDIRS' => 1,
+ 'AC_CANONICAL_SYSTEM' => 1,
+ 'AM_PROG_AR' => 1,
+ 'AM_PROG_MOC' => 1
}
], 'Autom4te::Request' )
);
--- /dev/null
+/* config.h.in. Generated from configure.ac by autoheader. */
+
+/* Name of package */
+#undef PACKAGE
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the home page for this package. */
+#undef PACKAGE_URL
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* Version number of package */
+#undef VERSION
It was created by mk-subu-0 configure 1.0, which was
generated by GNU Autoconf 2.69. Invocation command line was
- $ ./configure
+ $ ./configure --no-create --no-recursion
## --------- ##
## Platform. ##
hostname = manorhouse
uname -m = x86_64
-uname -r = 4.20.5-200.fc29.x86_64
+uname -r = 4.20.6-200.fc29.x86_64
uname -s = Linux
-uname -v = #1 SMP Mon Jan 28 19:29:17 UTC 2019
+uname -v = #1 SMP Thu Jan 31 15:50:43 UTC 2019
/usr/bin/uname -p = x86_64
/bin/uname -X = unknown
configure:3225: result: yes
configure:3245: checking whether make supports the include directive
configure:3260: make -f confmf.GNU && cat confinc.out
+make[1]: Entering directory '/home/morpheus/subu_land/subu'
+make[1]: Leaving directory '/home/morpheus/subu_land/subu'
this is the am__doit target
configure:3263: $? = 0
configure:3282: result: yes (GNU style)
configure:3552: result: done
configure:3575: creating ./config.status
-## ---------------------- ##
-## 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
-
-on manorhouse
-
-config.status:840: creating makefile
-config.status:840: creating src/makefile
-config.status:840: creating config.h
-config.status:1069: executing depfiles commands
-config.status:1146: cd src && sed -e '/# am--include-marker/d' makefile | make -f - am--depfiles
-config.status:1151: $? = 0
-
## ---------------- ##
## Cache variables. ##
## ---------------- ##
CONFIG_HEADERS =
CONFIG_LINKS =
CONFIG_COMMANDS =
- $ ./config.status config.h
+ $ ./config.status
on manorhouse
+config.status:840: creating makefile
+config.status:840: creating src/makefile
config.status:840: creating config.h
config.status:1021: config.h is unchanged
+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]: Nothing to be done for 'am--depfiles'.
+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]: Nothing to be done for 'am--depfiles'.
+make[1]: Leaving directory '/home/morpheus/subu_land/subu/src'
+config.status:1151: $? = 0
--- /dev/null
+useradd-0.o: useradd-0.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/stdio.h \
+ /usr/include/bits/libc-header-start.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/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/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/stdio.h:
+
+/usr/include/bits/libc-header-start.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/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:
--- /dev/null
+... turned into a notes file ... #!/bin/bash
+
+good doc: https://www.gnu.org/software/automake/manual/automake.html#Hello-World
+
+->create src/makefile.am
+bin_PROGRAMS=subu-mk-0
+subu_mk_0_SOURCES=subu-mk-0.c
+
+->create makefile.am
+SUBDIRS = src
+dist_doc_DATA = README
+
+->create configure.ac
+AC_INIT([mk-subu-0], [1.0], [bug-automake@gnu.org])
+AM_INIT_AUTOMAKE([-Wall -Werror foreign])
+AC_PROG_CC
+AC_CONFIG_HEADERS([config.h])
+AC_CONFIG_FILES([
+ makefile
+ src/makefile
+])
+AC_OUTPUT
+
+autoreconf --install
+./configure
+
+after changing makefile.am or configure.ac, it is enough to run make to update the build files
+
+++ /dev/null
-... turned into a notes file ... #!/bin/bash
-
-good doc: https://www.gnu.org/software/automake/manual/automake.html#Hello-World
-
-->create src/makefile.am
-bin_PROGRAMS=subu-mk-0
-subu_mk_0_SOURCES=subu-mk-0.c
-
-->create makefile.am
-SUBDIRS = src
-dist_doc_DATA = README
-
-->create configure.ac
-AC_INIT([mk-subu-0], [1.0], [bug-automake@gnu.org])
-AM_INIT_AUTOMAKE([-Wall -Werror foreign])
-AC_PROG_CC
-AC_CONFIG_HEADERS([config.h])
-AC_CONFIG_FILES([
- makefile
- src/makefile
-])
-AC_OUTPUT
-
-autoreconf --install
-./configure
-
-after changing makefile.am or configure.ac, it is enough to run make to update the build files
-
--- /dev/null
+#ifndef LOCAL_COMMON_H
+#define LOCAL_COMMON_H
+
+typedef unsigned int uint;
+
+
+#endif
CONFIG_CLEAN_VPATH_FILES =
am__installdirs = "$(DESTDIR)$(bindir)"
PROGRAMS = $(bin_PROGRAMS)
-am_subu_mk_0_OBJECTS = subu-mk-0.$(OBJEXT)
+am_subu_mk_0_OBJECTS = subu-mk-0.$(OBJEXT) useradd-0.$(OBJEXT)
subu_mk_0_OBJECTS = $(am_subu_mk_0_OBJECTS)
subu_mk_0_LDADD = $(LDADD)
AM_V_P = $(am__v_P_$(V))
DEFAULT_INCLUDES = -I. -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__maybe_remake_depfiles = depfiles
-am__depfiles_remade = ./$(DEPDIR)/subu-mk-0.Po
+am__depfiles_remade = ./$(DEPDIR)/subu-mk-0.Po \
+ ./$(DEPDIR)/useradd-0.Po
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
top_build_prefix = ../
top_builddir = ..
top_srcdir = ..
-subu_mk_0_SOURCES = subu-mk-0.c
+subu_mk_0_SOURCES = \
+ subu-mk-0.c\
+ useradd-0.c
+
all: all-am
.SUFFIXES:
-rm -f *.tab.c
include ./$(DEPDIR)/subu-mk-0.Po # am--include-marker
+include ./$(DEPDIR)/useradd-0.Po # am--include-marker
$(am__depfiles_remade):
@$(MKDIR_P) $(@D)
distclean: distclean-am
-rm -f ./$(DEPDIR)/subu-mk-0.Po
+ -rm -f ./$(DEPDIR)/useradd-0.Po
-rm -f makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-tags
maintainer-clean: maintainer-clean-am
-rm -f ./$(DEPDIR)/subu-mk-0.Po
+ -rm -f ./$(DEPDIR)/useradd-0.Po
-rm -f makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
bin_PROGRAMS=subu-mk-0
-subu_mk_0_SOURCES=subu-mk-0.c
+subu_mk_0_SOURCES=\
+ subu-mk-0.c\
+ useradd-0.c
+
CONFIG_CLEAN_VPATH_FILES =
am__installdirs = "$(DESTDIR)$(bindir)"
PROGRAMS = $(bin_PROGRAMS)
-am_subu_mk_0_OBJECTS = subu-mk-0.$(OBJEXT)
+am_subu_mk_0_OBJECTS = subu-mk-0.$(OBJEXT) useradd-0.$(OBJEXT)
subu_mk_0_OBJECTS = $(am_subu_mk_0_OBJECTS)
subu_mk_0_LDADD = $(LDADD)
AM_V_P = $(am__v_P_@AM_V@)
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__maybe_remake_depfiles = depfiles
-am__depfiles_remade = ./$(DEPDIR)/subu-mk-0.Po
+am__depfiles_remade = ./$(DEPDIR)/subu-mk-0.Po \
+ ./$(DEPDIR)/useradd-0.Po
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
-subu_mk_0_SOURCES = subu-mk-0.c
+subu_mk_0_SOURCES = \
+ subu-mk-0.c\
+ useradd-0.c
+
all: all-am
.SUFFIXES:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/subu-mk-0.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/useradd-0.Po@am__quote@ # am--include-marker
$(am__depfiles_remade):
@$(MKDIR_P) $(@D)
distclean: distclean-am
-rm -f ./$(DEPDIR)/subu-mk-0.Po
+ -rm -f ./$(DEPDIR)/useradd-0.Po
-rm -f makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-tags
maintainer-clean: maintainer-clean-am
-rm -f ./$(DEPDIR)/subu-mk-0.Po
+ -rm -f ./$(DEPDIR)/useradd-0.Po
-rm -f makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
/*
- Makes a new subu user.
-
- Because this is a little utility program, we don't bother to free
- buffers. The heap space will be released when the program exits. Actually we
- can't free the buffers made by getpwid() even if wanted to.
-
- 1. We have to make the subu first so that we will have subu_uid and subu_gid
- to work with.
-
- 2. Then we add user access via setfacl to masteru's home directory and to
- subu_land, so that we have permissions to make the home directory.
-
- 3. Then as subu we create the home directory. .. I wonder where the system
- gets the umask for this? Perhaps we should create the dir, and then change
- the ownership instead?
-
- 4. Still as subu, we add facls to our directory to give masteru access.
-
- ... then finished, good part is that we never need to move back to root.
-
-setfacl -m u:subu:x masteru
-setfacl -m u:subu:x masteru/subu_land
-setfacl -m d:u:masteru:rwX,u:masteru:rwX subu
+ subu-mk-0 command
*/
-// without #define get warning: implicit declaration of function ‘seteuid’/‘setegid’
-#define _GNU_SOURCE
-#include <unistd.h>
-#include <sys/types.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdbool.h>
-#include <unistd.h>
-#include <pwd.h>
-#include <string.h>
-#include <sys/stat.h>
-#include "config.h"
-
-
-#define DEBUG
-typedef unsigned int uint;
-
-#define ERR_ARG_CNT 1
-#define ERR_SETUID_ROOT 2
-#define ERR_BAD_MASTERU_HOME 3
-#define ERR_NOT_EXIST_MASTERU_HOME 4
-#define ERR_FAILED_MKDIR_SUBU 5
-#define ERR_FAILED_RESTORATION 6
+#include "subu-mk-0_fun.h"
int main(int argc, char **argv, char **env){
-
- //--------------------------------------------------------------------------------
- // help message
+ char *command = argv[0];
if( argc != 2 ){
- fprintf(stderr, "usage: %s subu", argv[0]);
+ fprintf(stderr, "usage: %s subu", command);
return ERR_ARG_CNT;
}
-
- //--------------------------------------------------------------------------------
- // we must be invoked from a user account and be running as root
- uint uid = getuid();
- uint euid = geteuid();
- uint gid = getgid();
- uint egid = getegid();
- #ifdef DEBUG
- printf("uid %u, gid %u, euid %u\n", uid, gid, euid);
- #endif
- if( uid == 0 || euid != 0 ){
- fprintf(stderr, "this program must be run setuid root from a user account\n");
- return ERR_SETUID_ROOT;
- }
-
- //--------------------------------------------------------------------------------
- // who are these people anyway?
- char *subu_name = argv[1];
- struct passwd *passwd_record_pt = getpwuid(uid);
- char *masteru_name = passwd_record_pt->pw_name;
- // verify that subu_name is legal! --> code goes here ...
-
- //--------------------------------------------------------------------------------
- // build the subu_land path
- char *masteru_home_dir = passwd_record_pt->pw_dir;
- size_t masteru_home_dir_len = strlen(masteru_home_dir);
- if( masteru_home_dir_len == 0 || masteru_home_dir[0] == '(' ){
- fprintf(stderr,"strange, %s has no home directory\n", masteru_name);
- return ERR_BAD_MASTERU_HOME;
- }
- char *subu_land_extension = "/subu_land/";
- size_t subu_land_extension_len = strlen(subu_land_extension);
- size_t subu_name_len = strlen(subu_name); // we leave room in the buffer to latter add the subu_name
- char *subu_land = (char *)malloc( masteru_home_dir_len + subu_land_extension_len + subu_name_len + 1 );
- strcpy(subu_land, masteru_home_dir);
- strcpy(subu_land + masteru_home_dir_len, subu_land_extension);
- #ifdef DEBUG
- printf("The path to subu_land: %s\n", subu_land);
- #endif
-
- //--------------------------------------------------------------------------------
- // Just because masteru_home_dir is referenced in /etc/passwd does not mean it exists.
- // If it does, and the subu_land doesn't, then we make subu_land.
- struct stat st;
- if( stat(masteru_home_dir, &st) == -1) {
- fprintf(stderr, "Strange, masteru home does not exist, %s.", masteru_home_dir);
- return ERR_NOT_EXIST_MASTERU_HOME;
- }
- strcpy(subu_land + masteru_home_dir_len + subu_land_extension_len, subu_name);
- #ifdef DEBUG
- printf("A path to a subu: %s\n", subu_land);
- #endif
-
- //--------------------------------------------------------------------------------
- // we need to have a subu_uid and subu_gid to continue from here
- size_t subu_land_len = masteru_home_dir_len + subu_land_extension_len + subu_name_len;
-
- // change to subu space
- if( seteuid(uid) == -1 || setegid(gid) == -1 ){ // we are root so this should never happen
- fprintf(stderr,"Strangely, root could not seteuid/setegid to %s\n", masteru_name);
- return ERR_FAILED_MKDIR_SUBU;
- }
- if( stat(subu_land, &st) == -1) { // then make the directory
- if( mkdir(subu_land, 0700) == -1 || stat(subu_land, &st) == -1 ){
- fprintf(stderr,"Failed to make subu directory %s\n", subu_land);
- return ERR_FAILED_MKDIR_SUBU;
- }
- }
- //change back to set the acls
- if( seteuid(euid) == -1 || setegid(egid) == -1 ){
- fprintf(stderr,"Could not restore privledges, having to bail.\n");
- return ERR_FAILED_RESTORATION;
- }
- return 0;
+ uid_gid ug = subu-mk-0(argv[1]);
+ return ug.error;
}
--- /dev/null
+/*
+ Makes a new subu user.
+
+ According to the man page, we are not alloed to free the buffers made by getpwid().
+
+ 1. We have to make the subu first so that we will have subu_uid and subu_gid
+ to work with.
+
+ 2. Then we add user access via setfacl to masteru's home directory and to
+ subu_land, so that we have permissions to make the home directory.
+
+ 3. Then as subu we create the home directory. .. I wonder where the system
+ gets the umask for this? Perhaps we should create the dir, and then change
+ the ownership instead?
+
+ 4. Still as subu, we add facls to our directory to give masteru access.
+
+ ... then finished, good part is that we never need to move back to root.
+
+setfacl -m u:subu:x masteru
+setfacl -m u:subu:x masteru/subu_land
+setfacl -m d:u:masteru:rwX,u:masteru:rwX subu
+
+*/
+// without #define get warning: implicit declaration of function ‘seteuid’/‘setegid’
+#define _GNU_SOURCE
+
+#include <unistd.h>
+#include <sys/types.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdbool.h>
+#include <unistd.h>
+#include <pwd.h>
+#include <string.h>
+#include <sys/stat.h>
+#include "config.h"
+#include "subu_mk_0_fun.h"
+
+#define DEBUG
+typedef unsigned int uint;
+
+#define ERR_ARG_CNT 1
+#define ERR_SETUID_ROOT 2
+#define ERR_BAD_MASTERU_HOME 3
+#define ERR_NOT_EXIST_MASTERU_HOME 4
+#define ERR_FAILED_MKDIR_SUBU 5
+#define ERR_FAILED_RESTORATION 6
+
+uid_gid subu_mk_0(char *subu_name){
+
+ //--------------------------------------------------------------------------------
+ // help message
+ char *command = argv[0];
+ if( argc != 2 ){
+ fprintf(stderr, "usage: %s subu", command);
+ return ERR_ARG_CNT;
+ }
+
+ //--------------------------------------------------------------------------------
+ // we must be invoked from a user account and be running as root
+ uint uid = getuid();
+ uint euid = geteuid();
+ uint gid = getgid();
+ uint egid = getegid();
+ #ifdef DEBUG
+ printf("uid %u, gid %u, euid %u\n", uid, gid, euid);
+ #endif
+ if( uid == 0 || euid != 0 ){
+ fprintf(stderr, "this program must be run setuid root from a user account\n");
+ return ERR_SETUID_ROOT;
+ }
+
+ //--------------------------------------------------------------------------------
+ // who are these people anyway?
+ char *subu_name = argv[1];
+ struct passwd *passwd_record_pt = getpwuid(uid);
+ char *masteru_name = passwd_record_pt->pw_name;
+ // verify that subu_name is legal! --> code goes here ...
+
+ //--------------------------------------------------------------------------------
+ // build the subu_land path
+ char *masteru_home_dir = passwd_record_pt->pw_dir;
+ size_t masteru_home_dir_len = strlen(masteru_home_dir);
+ if( masteru_home_dir_len == 0 || masteru_home_dir[0] == '(' ){
+ fprintf(stderr,"strange, %s has no home directory\n", masteru_name);
+ return ERR_BAD_MASTERU_HOME;
+ }
+ char *subu_land_extension = "/subu_land/";
+ size_t subu_land_extension_len = strlen(subu_land_extension);
+ size_t subu_name_len = strlen(subu_name); // we leave room in the buffer to latter add the subu_name
+ char *subu_land = (char *)malloc( masteru_home_dir_len + subu_land_extension_len + subu_name_len + 1 );
+ strcpy(subu_land, masteru_home_dir);
+ strcpy(subu_land + masteru_home_dir_len, subu_land_extension);
+ #ifdef DEBUG
+ printf("The path to subu_land: %s\n", subu_land);
+ #endif
+
+ //--------------------------------------------------------------------------------
+ // Just because masteru_home_dir is referenced in /etc/passwd does not mean it exists.
+ // If it does, and the subu_land doesn't, then we make subu_land.
+ struct stat st;
+ if( stat(masteru_home_dir, &st) == -1) {
+ fprintf(stderr, "Strange, masteru home does not exist, %s.", masteru_home_dir);
+ return ERR_NOT_EXIST_MASTERU_HOME;
+ }
+
+ //--------------------------------------------------------------------------------
+ // the name for the subu home directory, which is subu_land/subu_name
+ size_t subu_land_len = masteru_home_dir_len + subu_land_extension_len + subu_name_len;
+ strcpy (subu_land + subu_land_len, subu_name); // we had left room in the subu_land buffer for subu_name
+ char *subu_home_path = subu_land; // the buffer now holds the subu_home_path, so we call it as such
+ #ifdef DEBUG
+ printf("subu home: %s\n", subu_home_path);
+ #endif
+
+ //--------------------------------------------------------------------------------
+ // we now make the subu
+ char *useradd_argv[4];
+ useradd_argv[0] = command;
+ useradd_argv[1] = "-d";
+ useradd_argv[2] = subu_home_path;
+ useradd_argv[3] = (char *) NULL;
+ char *useradd_envp[1];
+ useradd_envp[0] (char *) NULL;
+ useradd_0(subu_name, useradd_argv, envp);
+
+ // change to subu space
+ if( seteuid(uid) == -1 || setegid(gid) == -1 ){ // we are root so this should never happen
+ fprintf(stderr,"Strangely, root could not seteuid/setegid to %s\n", masteru_name);
+ return ERR_FAILED_MKDIR_SUBU;
+ }
+ if( stat(subu_land, &st) == -1) { // then make the directory
+ if( mkdir(subu_land, 0700) == -1 || stat(subu_land, &st) == -1 ){
+ fprintf(stderr,"Failed to make subu directory %s\n", subu_land);
+ return ERR_FAILED_MKDIR_SUBU;
+ }
+ }
+ //change back to set the acls
+ if( seteuid(euid) == -1 || setegid(egid) == -1 ){
+ fprintf(stderr,"Could not restore privledges, having to bail.\n");
+ return ERR_FAILED_RESTORATION;
+ }
+ return 0;
+}
--- /dev/null
+#ifndef SUBU_MK_0_H
+#define SUBU_MK_0_H
+
+#include "useradd-fun.h"
+uid_gid subu_mk_0(char *subu_name);
+
+#endif
--- /dev/null
+/*
+There is no C library interface to useradd(8), but if there were, these functions
+would be found there instead. I'm also wondering about the wisdom of using
+useradd(8) from shadow. Wondering if the locks are in place for multiple users hitting it
+simultaneously via different methods, and if it handles signals cleanly.
+
+We pass argv[1:..] and envp through to useradd. We return the uid of the newly
+created user, or the negative value of the return code from useradd(8)
+
+*/
+
+#include <sys/types.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <errno.h>
+
+// better to change this to vargs for the option list
+// this currently works because I know there is only one option
+int useradd_0(char *user, char **argv, char **envp){
+ char *subu_name;
+ if( argv && argv[0] && argv[1] ){
+
+ }
+ pid_t pid = fork(void);
+ if( pid == -1 ) return 1;
+ if( pid == 0 ){ // we are the child
+ char *command = "/usr/bin/useradd";
+ argv[0] = command; // we can do this because we made the argv in the caller
+ int err = execvpe( command, argv, envp);
+ fprintf(stderr, "subu execvpe call to /usr/bin/useradd issued error %d, but it is too difficult to tell the parent process about this.", errno);
+ } else {
+ int wstatus;
+ wait(1, &wstatus, 0);
+ if(wstatus != 0) return -abs(wstatus);
+ // useradd did not tell us the uid of the newly created user, so now we have go get it.
+ struct passwd *getpwname(
+ }
+
+}
--- /dev/null
+
+#ifndef USERADD_H
+#define USERADD_H
+#include local_common.h
+
+struct uid_gid{
+ uint error;
+ pid_t uid;
+ pid_t gid;
+};
+
+uit_gid useradd_0(char *user, char **argv, char **envp);
+
+#endif