Merge branch 'v4-0-test' of ssh://git.samba.org/data/git/samba into v4-0-gmake3
authorJelmer Vernooij <jelmer@samba.org>
Fri, 25 Apr 2008 09:04:20 +0000 (10:04 +0100)
committerJelmer Vernooij <jelmer@samba.org>
Fri, 25 Apr 2008 09:04:20 +0000 (10:04 +0100)
Conflicts:

source/Makefile
source/auth/config.mk
source/auth/gensec/config.mk
source/build/m4/public.m4
source/build/make/python.mk
source/build/make/rules.mk
source/build/smb_build/header.pm
source/build/smb_build/main.pl
source/build/smb_build/makefile.pm
source/dsdb/config.mk
source/dsdb/samdb/ldb_modules/config.mk
source/kdc/config.mk
source/lib/events/config.mk
source/lib/events/events.c
source/lib/ldb/config.mk
source/lib/nss_wrapper/config.mk
source/lib/policy/config.mk
source/lib/util/config.mk
source/libcli/smb2/config.mk
source/libnet/config.mk
source/librpc/config.mk
source/nbt_server/config.mk
source/ntptr/ntptr_base.c
source/ntvfs/posix/config.mk
source/ntvfs/sysdep/config.mk
source/param/config.mk
source/rpc_server/config.mk
source/rpc_server/service_rpc.c
source/scripting/ejs/config.mk
source/scripting/python/config.mk
source/smb_server/config.mk
source/smbd/server.c
source/torture/config.mk
source/torture/smb2/config.mk
source/wrepl_server/config.mk
(This used to be commit 13bbd420681519894a4036729c43273912c9b402)

19 files changed:
1  2 
source4/auth/config.mk
source4/auth/gensec/gensec.c
source4/build/m4/public.m4
source4/build/make/rules.mk
source4/build/smb_build/main.pl
source4/build/smb_build/makefile.pm
source4/dsdb/samdb/ldb_modules/config.mk
source4/lib/events/events.c
source4/lib/registry/local.c
source4/librpc/config.mk
source4/ntptr/ntptr_base.c
source4/ntvfs/sysdep/sys_notify.c
source4/param/config.mk
source4/param/share.c
source4/rpc_server/service_rpc.c
source4/scripting/ejs/config.mk
source4/scripting/python/config.mk
source4/scripting/python/modules.c
source4/torture/smbtorture.c

diff --combined source4/auth/config.mk
index 14f5da0eb706c58ffcc755b176aed820f3e87ac8,7d4678b7ac4be15a66da0f58196cace76d4a4a4e..dd5507118691adeb7a8e72ba4498d25b3670be3f
@@@ -36,7 -36,7 +36,7 @@@ auth_sam_reply_OBJ_FILES = $(addprefix 
  [MODULE::auth_sam_module]
  # gensec_krb5 and gensec_gssapi depend on it
  INIT_FUNCTION = auth_sam_init
 -SUBSYSTEM = auth
 +SUBSYSTEM = service_auth
  PRIVATE_DEPENDENCIES = \
                SAMDB auth_sam
  # End MODULE auth_sam
@@@ -48,7 -48,7 +48,7 @@@ auth_sam_module_OBJ_FILES = $(addprefi
  # Start MODULE auth_anonymous
  [MODULE::auth_anonymous]
  INIT_FUNCTION = auth_anonymous_init
 -SUBSYSTEM = auth
 +SUBSYSTEM = service_auth
  # End MODULE auth_anonymous
  #######################
  
@@@ -58,7 -58,7 +58,7 @@@ auth_anonymous_OBJ_FILES = $(addprefix 
  # Start MODULE auth_winbind
  [MODULE::auth_winbind]
  INIT_FUNCTION = auth_winbind_init
 -SUBSYSTEM = auth
 +SUBSYSTEM = service_auth
  PRIVATE_DEPENDENCIES = NDR_WINBIND MESSAGING LIBWINBIND-CLIENT
  # End MODULE auth_winbind
  #######################
@@@ -69,7 -69,7 +69,7 @@@ auth_winbind_OBJ_FILES = $(addprefix au
  # Start MODULE auth_developer
  [MODULE::auth_developer]
  INIT_FUNCTION = auth_developer_init
 -SUBSYSTEM = auth
 +SUBSYSTEM = service_auth
  # End MODULE auth_developer
  #######################
  
@@@ -77,7 -77,7 +77,7 @@@ auth_developer_OBJ_FILES = $(addprefix 
  
  [MODULE::auth_unix]
  INIT_FUNCTION = auth_unix_init
 -SUBSYSTEM = auth
 +SUBSYSTEM = service_auth
  PRIVATE_DEPENDENCIES = CRYPT PAM PAM_ERRORS NSS_WRAPPER
  
  auth_unix_OBJ_FILES = $(addprefix auth/, auth_unix.o)
  [SUBSYSTEM::PAM_ERRORS]
  PRIVATE_PROTO_HEADER = pam_errors.h
  
 -#VERSION = 0.0.1
 -#SO_VERSION = 0
  PAM_ERRORS_OBJ_FILES = $(addprefix auth/, pam_errors.o)
  
- [MODULE::service_auth]
+ [MODULE::auth]
  INIT_FUNCTION = server_service_auth_init
 -SUBSYSTEM = service
 +SUBSYSTEM = smbd
  PRIVATE_PROTO_HEADER = auth_proto.h
  PRIVATE_DEPENDENCIES = LIBSAMBA-UTIL LIBSECURITY SAMDB CREDENTIALS 
  
service_auth_OBJ_FILES = $(addprefix auth/, auth.o auth_util.o auth_simple.o)
+ auth_OBJ_FILES = $(addprefix auth/, auth.o auth_util.o auth_simple.o)
  
  # PUBLIC_HEADERS += auth/auth.h
  
index 3393ce01784b0f9e85d75e815a4c5c436c033cd9,c82b719dfd87e1ca8d68f9daffa7a55ab43b15fa..0edb34d7403fc7d048314ac3d005bf2128bb202f
@@@ -23,6 -23,7 +23,6 @@@
  #include "includes.h"
  #include "auth/auth.h"
  #include "lib/events/events.h"
 -#include "build.h"
  #include "librpc/rpc/dcerpc.h"
  #include "auth/credentials/credentials.h"
  #include "auth/gensec/gensec.h"
@@@ -481,6 -482,11 +481,11 @@@ static NTSTATUS gensec_start(TALLOC_CT
                             struct messaging_context *msg,
                             struct gensec_security **gensec_security)
  {
+       if (ev == NULL) {
+               DEBUG(0, ("No event context available!\n"));
+               return NT_STATUS_INTERNAL_ERROR;
+       }
        (*gensec_security) = talloc(mem_ctx, struct gensec_security);
        NT_STATUS_HAVE_NO_MEMORY(*gensec_security);
  
  
        (*gensec_security)->subcontext = false;
        (*gensec_security)->want_features = 0;
-       
-       if (ev == NULL) {
-               ev = event_context_init(*gensec_security);
-               if (ev == NULL) {
-                       talloc_free(*gensec_security);
-                       return NT_STATUS_NO_MEMORY;
-               }
-       }
  
        (*gensec_security)->event_ctx = ev;
        (*gensec_security)->msg_ctx = msg;
@@@ -547,20 -545,11 +544,11 @@@ _PUBLIC_ NTSTATUS gensec_client_start(T
                             struct loadparm_context *lp_ctx)
  {
        NTSTATUS status;
-       struct event_context *new_ev = NULL;
-       if (ev == NULL) {
-               new_ev = event_context_init(mem_ctx);
-               NT_STATUS_HAVE_NO_MEMORY(new_ev);
-               ev = new_ev;
-       }
  
        status = gensec_start(mem_ctx, ev, lp_ctx, NULL, gensec_security);
        if (!NT_STATUS_IS_OK(status)) {
-               talloc_free(new_ev);
                return status;
        }
-       talloc_steal((*gensec_security), new_ev);
        (*gensec_security)->gensec_role = GENSEC_CLIENT;
  
        return status;
index 0058afe2b51ec48c140e4c63622eba60b1ec166c,1eae998ca4b01585a3b043e5ef918815c1db0ff4..ba8251e65d21e56b18dc396c027f6ceb392f6582
@@@ -4,8 -4,6 +4,6 @@@ dnl Copyright (C) 2004 Stefan Metzmache
  dnl Copyright (C) 2004-2005 Jelmer Vernooij
  dnl Published under the GPL
  dnl
- dnl SMB_SUBSYSTEM(name,obj_files,required_subsystems)
- dnl
  dnl SMB_EXT_LIB_FROM_PKGCONFIG(name,pkg-config name,[ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND])
  dnl
  dnl SMB_EXT_LIB(name,libs,cflags,cppflags,ldflags)
@@@ -22,9 -20,9 +20,9 @@@ dnl SMB_SUBSYSTEM(name,obj_files,requir
  AC_DEFUN([SMB_SUBSYSTEM],
  [
  MAKE_SETTINGS="$MAKE_SETTINGS
- $1_OBJ_FILES = $2
  $1_CFLAGS = $4
  $1_ENABLE = YES
+ $1_OBJ_FILES = $2
  "
  
  SMB_INFO_SUBSYSTEMS="$SMB_INFO_SUBSYSTEMS
@@@ -39,14 -37,14 +37,14 @@@ ENABLE = YE
  "
  ])
  
 -dnl SMB_LIBRARY(name,obj_files,required_subsystems,version,so_version,cflags,ldflags)
 +dnl SMB_LIBRARY(name,obj_files,required_subsystems,cflags,ldflags)
  AC_DEFUN([SMB_LIBRARY],
  [
  MAKE_SETTINGS="$MAKE_SETTINGS
 -$1_ENABLE = YES
+ $1_CFLAGS = $6
+ $1_LDFLAGS = $7
++n1_ENABLE = YES
  $1_OBJ_FILES = $2
- $1_CFLAGS = $4
- $1_LDFLAGS = $5
- $1_ENABLE = YES
  "
  
  SMB_INFO_LIBRARIES="$SMB_INFO_LIBRARIES
index faefb4e323ea2604e428802cb04c7ffb7df0ca70,541fa018db7c163972991c252548f1c0930a2be2..078f5d9295b007ebc1382aae695658e48a232b46
@@@ -211,10 -211,12 +211,11 @@@ include/includes.d: include/includes.
        @echo "Compiling $<"
        @-mkdir -p `dirname $@`
        @$(COMPILE) && exit 0 ; \
-       $(COMPILE) 
+               echo "The following command failed:" 1>&2;\
+               echo "$(COMPILE)" 1>&2;\
+               $(COMPILE) >/dev/null 2>&1
  
  
 -
  .c.ho:
        @echo "Compiling $< with host compiler"
        @-mkdir -p `dirname $@`
index a6abee6106c9621b2b05dffeebf391f7b076f7e4,14897840a62e9591342e671243f7bdda8a4b5fbc..ccaac0b6fcae08e73e77291512abb0d862ce53c5
@@@ -6,6 -6,7 +6,6 @@@
  #  Released under the GNU GPL                         
  
  use smb_build::makefile;
 -use smb_build::header;
  use smb_build::input;
  use smb_build::config_mk;
  use smb_build::output;
@@@ -43,50 -44,51 +43,48 @@@ my $mkenv = new smb_build::makefile(\%c
  
  my $shared_libs_used = 0;
  foreach my $key (values %$OUTPUT) {
-       $mkenv->_prepare_list($key, "OBJ_LIST");
-       push(@{$mkenv->{all_objs}}, "\$($key->{NAME}_OBJ_LIST)");
+       push(@{$mkenv->{all_objs}}, "\$($key->{NAME}_OBJ_FILES)");
  }
  
  foreach my $key (values %$OUTPUT) {
        next unless defined $key->{OUTPUT_TYPE};
  
 +      $mkenv->StaticLibraryPrimitives($key) if grep(/STATIC_LIBRARY/, @{$key->{OUTPUT_TYPE}});
        $mkenv->MergedObj($key) if grep(/MERGED_OBJ/, @{$key->{OUTPUT_TYPE}});
 -      $mkenv->StaticLibraryPrimitives($key) if grep(/STATIC_LIBRARY/, @{$key->{OUTPUT_TYPE}});
 -      if (defined($key->{PC_FILE})) {
 -              $mkenv->output("PC_FILES += $key->{BASEDIR}/$key->{PC_FILE}\n");
 -      } 
--      $mkenv->SharedLibraryPrimitives($key) if ($key->{TYPE} eq "LIBRARY") and
++      $kenv->SharedLibraryPrimitives($key) if ($key->{TYPE} eq "LIBRARY") and
                                        grep(/SHARED_LIBRARY/, @{$key->{OUTPUT_TYPE}});
        if ($key->{TYPE} eq "LIBRARY" and 
            ${$key->{OUTPUT_TYPE}}[0] eq "SHARED_LIBRARY") {
                $shared_libs_used = 1;
        }
 -      $mkenv->SharedModulePrimitives($key) if ($key->{TYPE} eq "MODULE" or 
 -                                                                 $key->{TYPE} eq "PYTHON") and
 -                                      grep(/SHARED_LIBRARY/, @{$key->{OUTPUT_TYPE}});
        $mkenv->PythonFiles($key) if defined($key->{PYTHON_FILES});
 +      if ($key->{TYPE} eq "MODULE" and @{$key->{OUTPUT_TYPE}}[0] eq "MERGED_OBJ" and defined($key->{INIT_FUNCTION})) {
 +              $mkenv->output("$key->{SUBSYSTEM}_INIT_FUNCTIONS += $key->{INIT_FUNCTION},\n");
 +      }
        $mkenv->CFlags($key);
  }
  
  foreach my $key (values %$OUTPUT) {
        next unless defined $key->{OUTPUT_TYPE};
  
-       $mkenv->Integrated($key) if grep(/INTEGRATED/, @{$key->{OUTPUT_TYPE}});
+       $mkenv->Integrated($key) if grep(/INTEGRATED/, @{$key->{OUTPUT_TYPE}});
  }
  
  foreach my $key (values %$OUTPUT) {
        next unless defined $key->{OUTPUT_TYPE};
        $mkenv->StaticLibrary($key) if grep(/STATIC_LIBRARY/, @{$key->{OUTPUT_TYPE}});
        $mkenv->SharedLibrary($key) if ($key->{TYPE} eq "LIBRARY") and
                                        grep(/SHARED_LIBRARY/, @{$key->{OUTPUT_TYPE}});
 -      $mkenv->SharedModule($key) if ($key->{TYPE} eq "MODULE" or 
 -                                                                 $key->{TYPE} eq "PYTHON") and
 -                                      grep(/SHARED_LIBRARY/, @{$key->{OUTPUT_TYPE}});
 +      $mkenv->SharedModule($key) if ($key->{TYPE} eq "MODULE" and
 +                                      grep(/SHARED_LIBRARY/, @{$key->{OUTPUT_TYPE}}));
 +      $mkenv->PythonModule($key) if ($key->{TYPE} eq "PYTHON");
        $mkenv->Binary($key) if grep(/BINARY/, @{$key->{OUTPUT_TYPE}});
-       $mkenv->ProtoHeader($key) if defined($key->{PRIVATE_PROTO_HEADER}) or 
-                                        defined($key->{PUBLIC_PROTO_HEADER});
+       $mkenv->ProtoHeader($key) if defined($key->{PRIVATE_PROTO_HEADER});
 +      $mkenv->InitFunctions($key) if defined($key->{INIT_FUNCTIONS});
  }
  
  $mkenv->write("data.mk");
 -header::create_smb_build_h($OUTPUT, "include/build.h");
  
  summary::show($OUTPUT, \%config::config);
  
index 1f66fabf726fac5d5732a9b9cbae1bebedf67d40,8f3f1701b7c400f4ebf476846b60399042f091f0..c56fdbf8cca6f13d8dd235b5ecbf3b5374b0d60b
@@@ -72,7 -72,17 +72,7 @@@ sub _prepare_mk_files($
                push (@tmp, $_);
        }
  
 -      $self->output("
 -ifneq (\$(MAKECMDGOALS),clean)
 -ifneq (\$(MAKECMDGOALS),distclean)
 -ifneq (\$(MAKECMDGOALS),realdistclean)
 -");
        $self->output("MK_FILES = " . array2oneperline(\@tmp) . "\n");
 -      $self->output("
 -endif
 -endif
 -endif
 -");
  }
  
  sub array2oneperline($)
@@@ -102,43 -112,104 +102,51 @@@ sub _prepare_list($$$
        $self->output("$ctx->{NAME}_$var =$tmplist\n");
  }
  
 -sub SharedModulePrimitives($$)
 +sub PythonModule($$)
  {
        my ($self,$ctx) = @_;
 -      
 -      #FIXME
 +
 +      $self->_prepare_list($ctx, "FULL_OBJ_LIST");
 +      $self->_prepare_list($ctx, "DEPEND_LIST");
 +      $self->_prepare_list($ctx, "LINK_FLAGS");
 +
 +      $self->output("\$(eval \$(call python_c_module_template,$ctx->{LIBRARY_REALNAME},\$($ctx->{NAME}_DEPEND_LIST) \$($ctx->{NAME}_FULL_OBJ_LIST), \$($ctx->{NAME}\_FULL_OBJ_LIST) \$($ctx->{NAME}_LINK_FLAGS)))\n");
  }
  
  sub SharedModule($$)
  {
        my ($self,$ctx) = @_;
  
 -      my $init_obj = "";
 -
        my $sane_subsystem = lc($ctx->{SUBSYSTEM});
        $sane_subsystem =~ s/^lib//;
        
 -      if ($ctx->{TYPE} eq "PYTHON") {
 -              $self->output("PYTHON_DSOS += $ctx->{SHAREDDIR}/$ctx->{LIBRARY_REALNAME}\n");
 -      } else {
 -              $self->output("PLUGINS += $ctx->{SHAREDDIR}/$ctx->{LIBRARY_REALNAME}\n");
 -              $self->output("installplugins:: $ctx->{SHAREDDIR}/$ctx->{LIBRARY_REALNAME}\n");
 -              $self->output("\t\@echo Installing $ctx->{SHAREDDIR}/$ctx->{LIBRARY_REALNAME} as \$(DESTDIR)\$(modulesdir)/$sane_subsystem/$ctx->{LIBRARY_REALNAME}\n");
 -              $self->output("\t\@mkdir -p \$(DESTDIR)\$(modulesdir)/$sane_subsystem/\n");
 -              $self->output("\t\@cp $ctx->{SHAREDDIR}/$ctx->{LIBRARY_REALNAME} \$(DESTDIR)\$(modulesdir)/$sane_subsystem/$ctx->{LIBRARY_REALNAME}\n");
 -              if (defined($ctx->{ALIASES})) {
 -                      foreach (@{$ctx->{ALIASES}}) {
 -                              $self->output("\t\@rm -f \$(DESTDIR)\$(modulesdir)/$sane_subsystem/$_.\$(SHLIBEXT)\n");
 -                              $self->output("\t\@ln -fs $ctx->{LIBRARY_REALNAME} \$(DESTDIR)\$(modulesdir)/$sane_subsystem/$_.\$(SHLIBEXT)\n");
 -                      }
 -              }
 -
 -              $self->output("uninstallplugins::\n");
 -              $self->output("\t\@echo Uninstalling \$(DESTDIR)\$(modulesdir)/$sane_subsystem/$ctx->{LIBRARY_REALNAME}\n");
 -              $self->output("\t\@-rm \$(DESTDIR)\$(modulesdir)/$sane_subsystem/$ctx->{LIBRARY_REALNAME}\n");
 -
 -              if (defined($ctx->{ALIASES})) {
 -                      foreach (@{$ctx->{ALIASES}}) {
 -                              $self->output("\t\@-rm \$(DESTDIR)\$(modulesdir)/$sane_subsystem/$_.\$(SHLIBEXT)\n");
 -                      }
 -              }
 -      }
 +      $self->output("PLUGINS += $ctx->{SHAREDDIR}/$ctx->{LIBRARY_REALNAME}\n");
 +      $self->output("\$(eval \$(call shared_module_install_template,$sane_subsystem, $ctx->{LIBRARY_REALNAME}))\n");
  
 -      $self->output("$ctx->{NAME}_OUTPUT = $ctx->{OUTPUT}\n");
        $self->_prepare_list($ctx, "FULL_OBJ_LIST");
        $self->_prepare_list($ctx, "DEPEND_LIST");
        $self->_prepare_list($ctx, "LINK_FLAGS");
  
 -      if (defined($ctx->{INIT_FUNCTION}) and $ctx->{TYPE} ne "PYTHON" and 
 -              $ctx->{INIT_FUNCTION_TYPE} =~ /\(\*\)/) {
 -              my $init_fn = $ctx->{INIT_FUNCTION_TYPE};
 -              $init_fn =~ s/\(\*\)/init_module/;
 -              my $proto_fn = $ctx->{INIT_FUNCTION_TYPE};
 -              $proto_fn =~ s/\(\*\)/$ctx->{INIT_FUNCTION}/;
 -
 -              $self->output(<< "__EOD__"
 -bin/$ctx->{NAME}_init_module.c:
 -      \@echo Creating \$\@
 -      \@echo \"#include \\\"includes.h\\\"\" > \$\@
 -      \@echo \"$proto_fn;\" >> \$\@
 -      \@echo \"_PUBLIC_ $init_fn\" >> \$\@
 -      \@echo \"{\" >> \$\@
 -      \@echo \"       return $ctx->{INIT_FUNCTION}();\" >> \$\@
 -      \@echo \"}\" >> \$\@
 -      \@echo \"\" >> \$\@
 -__EOD__
 -);
 -              $init_obj = "bin/$ctx->{NAME}_init_module.o";
 +      if (defined($ctx->{INIT_FUNCTION}) and $ctx->{INIT_FUNCTION_TYPE} =~ /\(\*\)/) {
 +              $self->output("\$($ctx->{NAME}_OBJ_FILES): CFLAGS+=-D$ctx->{INIT_FUNCTION}=init_module\n");
        }
  
 -      $self->output(<< "__EOD__"
 -#
 +      $self->output("\$(eval \$(call shared_module_template,$ctx->{SHAREDDIR}/$ctx->{LIBRARY_REALNAME}, \$($ctx->{NAME}_DEPEND_LIST) \$($ctx->{NAME}_FULL_OBJ_LIST), \$($ctx->{NAME}\_FULL_OBJ_LIST) \$($ctx->{NAME}_LINK_FLAGS)))\n");
  
 -$ctx->{SHAREDDIR}/$ctx->{LIBRARY_REALNAME}: \$($ctx->{NAME}_DEPEND_LIST) \$($ctx->{NAME}_FULL_OBJ_LIST) $init_obj
 -      \@echo Linking \$\@
 -      \@mkdir -p $ctx->{SHAREDDIR}
 -      \@\$(MDLD) \$(LDFLAGS) \$(MDLD_FLAGS) \$(INTERN_LDFLAGS) -o \$\@ \$(INSTALL_LINK_FLAGS) \\
 -              \$($ctx->{NAME}\_FULL_OBJ_LIST) $init_obj \\
 -              \$($ctx->{NAME}_LINK_FLAGS)
 -__EOD__
 -);
  
        if (defined($ctx->{ALIASES})) {
 -              foreach (@{$ctx->{ALIASES}}) {
 -                      $self->output("\t\@rm -f $ctx->{SHAREDDIR}/$_.\$(SHLIBEXT)\n");
 -                      $self->output("\t\@ln -fs $ctx->{LIBRARY_REALNAME} $ctx->{SHAREDDIR}/$_.\$(SHLIBEXT)\n");
 -              }
 +              $self->output("\$(eval \$(foreach alias,". join(' ', @{$ctx->{ALIASES}}) . ",\$(call shared_module_alias_template,$ctx->{SHAREDDIR}/$ctx->{LIBRARY_REALNAME},$sane_subsystem,\$(alias))))\n");
        }
 -      $self->output("\n");
  }
  
+ sub StaticLibraryPrimitives($$)
+ {
+       my ($self,$ctx) = @_;
+  
+       $self->output("$ctx->{NAME}_OUTPUT = $ctx->{OUTPUT}\n");
+       $self->_prepare_list($ctx, "FULL_OBJ_LIST");
+ }
  sub SharedLibraryPrimitives($$)
  {
        my ($self,$ctx) = @_;
@@@ -153,41 -224,59 +161,41 @@@ sub SharedLibrary($$
  {
        my ($self,$ctx) = @_;
  
 -      if (!defined($ctx->{LIBRARY_SONAME})) {
 -              $ctx->{LIBRARY_SONAME} = "";
 -      }
 -
 -      $self->output("SHARED_LIBS += $ctx->{SHAREDDIR}/$ctx->{LIBRARY_REALNAME}\n");
 +      $self->output("SHARED_LIBS += $ctx->{RESULT_SHARED_LIBRARY}\n");
  
        $self->_prepare_list($ctx, "DEPEND_LIST");
        $self->_prepare_list($ctx, "LINK_FLAGS");
  
 -      $self->output(<< "__EOD__"
 -$ctx->{RESULT_SHARED_LIBRARY}: \$($ctx->{NAME}_DEPEND_LIST) \$($ctx->{NAME}_FULL_OBJ_LIST)
 -      \@echo Linking \$\@
 -      \@mkdir -p \$(\@D)
 -      \@\$(SHLD) \$(LDFLAGS) \$(SHLD_FLAGS) \$(INTERN_LDFLAGS) -o \$\@ \$(INSTALL_LINK_FLAGS) \\
 -              \$($ctx->{NAME}\_FULL_OBJ_LIST) \\
 -              \$($ctx->{NAME}_LINK_FLAGS) \\
 -              \$(if \$(SONAMEFLAG), \$(SONAMEFLAG)$ctx->{LIBRARY_SONAME})
 -__EOD__
 -);
 -      if ($ctx->{LIBRARY_REALNAME} ne $ctx->{LIBRARY_SONAME}) {
 -              $self->output("ifneq (\$($ctx->{NAME}_VERSION),\$($ctx->{NAME}_SOVERSION))\n");
 -              $self->output("\t\@ln -fs $ctx->{LIBRARY_REALNAME} $ctx->{SHAREDDIR}/$ctx->{LIBRARY_SONAME}\n");
 -              $self->output("endif\n");
 -      }
 -      $self->output("ifdef $ctx->{NAME}_SOVERSION\n");
 -      $self->output("\t\@ln -fs $ctx->{LIBRARY_REALNAME} $ctx->{SHAREDDIR}/$ctx->{LIBRARY_DEBUGNAME}\n");
 -      $self->output("endif\n");
 +      $self->output("\$(eval \$(call shared_library_template,$ctx->{RESULT_SHARED_LIBRARY}, \$($ctx->{NAME}_DEPEND_LIST) \$($ctx->{NAME}_FULL_OBJ_LIST), \$($ctx->{NAME}\_FULL_OBJ_LIST) \$($ctx->{NAME}_LINK_FLAGS),$ctx->{SHAREDDIR}/$ctx->{LIBRARY_SONAME},$ctx->{SHAREDDIR}/$ctx->{LIBRARY_DEBUGNAME}))\n");
  }
  
  sub MergedObj($$)
  {
        my ($self, $ctx) = @_;
  
 -      return unless defined($ctx->{OUTPUT});
 +      $self->output("\$(call partial_link_template, $ctx->{OUTPUT}, \$($ctx->{NAME}_OBJ_FILES))\n");
 +}
 +
 +sub StaticLibraryPrimitives($$)
 +{
 +      my ($self,$ctx) = @_;
  
        $self->output("$ctx->{NAME}_OUTPUT = $ctx->{OUTPUT}\n");
 -      $self->output(<< "__EOD__"
 -#
 -$ctx->{RESULT_MERGED_OBJ}: \$($ctx->{NAME}_OBJ_FILES)
 -      \@echo Partially linking \$@
 -      \@mkdir -p \$(\@D)
 -      \$(PARTLINK) -o \$@ \$($ctx->{NAME}_OBJ_FILES)
 +      $self->_prepare_list($ctx, "FULL_OBJ_LIST");
 +}
  
 -__EOD__
 -);
 +sub InitFunctions($$)
 +{
 +      my ($self, $ctx) = @_;
 +      $self->output("\$($ctx->{NAME}_OBJ_FILES): CFLAGS+=-DSTATIC_$ctx->{NAME}_MODULES=\"\$($ctx->{NAME}_INIT_FUNCTIONS)$ctx->{INIT_FUNCTION_SENTINEL}\"\n");
  }
  
  sub StaticLibrary($$)
  {
        my ($self,$ctx) = @_;
  
 -      $self->output("STATIC_LIBS += $ctx->{TARGET_STATIC_LIBRARY}\n") if ($ctx->{TYPE} eq "LIBRARY");
 -
 +      $self->output("STATIC_LIBS += $ctx->{RESULT_STATIC_LIBRARY}\n") if ($ctx->{TYPE} eq "LIBRARY");
 +      $self->output("$ctx->{NAME}_OUTPUT = $ctx->{OUTPUT}\n");
        $self->output("$ctx->{RESULT_STATIC_LIBRARY}: \$($ctx->{NAME}_FULL_OBJ_LIST)\n");
  }
  
@@@ -196,21 -285,37 +204,21 @@@ sub Binary($$
        my ($self,$ctx) = @_;
  
        unless (defined($ctx->{INSTALLDIR})) {
 +              $self->output("BINARIES += $ctx->{TARGET_BINARY}\n");
        } elsif ($ctx->{INSTALLDIR} eq "SBINDIR") {
 -              $self->output("SBIN_PROGS += bin/$ctx->{BINARY}\n");
 +              $self->output("SBIN_PROGS += $ctx->{RESULT_BINARY}\n");
        } elsif ($ctx->{INSTALLDIR} eq "BINDIR") {
 -              $self->output("BIN_PROGS += bin/$ctx->{BINARY}\n");
 +              $self->output("BIN_PROGS += $ctx->{RESULT_BINARY}\n");
        }
  
 -      $self->output("binaries:: $ctx->{TARGET_BINARY}\n");
 -
        $self->_prepare_list($ctx, "FULL_OBJ_LIST");
        $self->_prepare_list($ctx, "DEPEND_LIST");
        $self->_prepare_list($ctx, "LINK_FLAGS");
  
 -$self->output(<< "__EOD__"
 -$ctx->{RESULT_BINARY}: \$($ctx->{NAME}_DEPEND_LIST) \$($ctx->{NAME}_FULL_OBJ_LIST)
 -      \@echo Linking \$\@
 -__EOD__
 -      );
 -
        if (defined($ctx->{USE_HOSTCC}) && $ctx->{USE_HOSTCC} eq "YES") {
 -              $self->output(<< "__EOD__"
 -      \@\$(HOSTLD) \$(HOSTLD_FLAGS) -L\${builddir}/bin/static -o \$\@ \$(INSTALL_LINK_FLAGS) \\
 -              \$\($ctx->{NAME}_LINK_FLAGS)
 -__EOD__
 -              );
 +$self->output("\$(call host_binary_link_template, $ctx->{RESULT_BINARY}, \$($ctx->{NAME}_DEPEND_LIST) \$($ctx->{NAME}_FULL_OBJ_LIST), \$($ctx->{NAME}_LINK_FLAGS))\n");
        } else {
 -              $self->output(<< "__EOD__"
 -      \@\$(BNLD) \$(BNLD_FLAGS) \$(INTERN_LDFLAGS) -o \$\@ \$(INSTALL_LINK_FLAGS) \\
 -              \$\($ctx->{NAME}_LINK_FLAGS) 
 -
 -__EOD__
 -              );
 +$self->output("\$(call binary_link_template, $ctx->{RESULT_BINARY}, \$($ctx->{NAME}_DEPEND_LIST) \$($ctx->{NAME}_FULL_OBJ_LIST), \$($ctx->{NAME}_LINK_FLAGS))\n");
        }
  }
  
@@@ -219,7 -324,10 +227,7 @@@ sub PythonFiles($$
        my ($self,$ctx) = @_;
  
        foreach (@{$ctx->{PYTHON_FILES}}) {
 -              my $target = "bin/python/".basename($_);
 -              my $source = "\$(addprefix $ctx->{BASEDIR}/, $_)";
 -              $self->output("$target: $source\n\n");
 -              $self->output("PYTHON_PYS += $target\n");
 +              $self->output("\$(eval \$(call python_py_module_template," . basename($_) . ",\$(addprefix $ctx->{BASEDIR}/, $_)))\n");
        }
  }
  
@@@ -227,17 -335,25 +235,17 @@@ sub ProtoHeader($$
  {
        my ($self,$ctx) = @_;
  
 -      my $priv = "$ctx->{BASEDIR}/$ctx->{PRIVATE_PROTO_HEADER}";
 -      $self->output("PROTO_HEADERS += $priv\n");
 -
 -      $self->output("$priv: $ctx->{MK_FILE} \$($ctx->{NAME}_OBJ_FILES:.o=.c) \$(srcdir)/script/mkproto.pl\n");
 -      $self->output("\t\@echo \"Creating \$@\"\n");
 -      $self->output("\t\@mkdir -p \$(\@D)\n");
 -      $self->output("\t\@\$(PERL) \$(srcdir)/script/mkproto.pl --srcdir=\$(srcdir) --builddir=\$(builddir) --public=/dev/null --private=\$@ \$($ctx->{NAME}_OBJ_FILES)\n\n");
 +      my $target = "\$(addprefix $ctx->{BASEDIR}/, $ctx->{PRIVATE_PROTO_HEADER})";
 +      $self->output("PROTO_HEADERS += $target\n");
 +      $self->output("\$(call proto_header_template, $target, \$($ctx->{NAME}_OBJ_FILES:.o=.c))\n");
  }
  
  sub write($$)
  {
        my ($self, $file) = @_;
  
 -      $self->output("ALL_OBJS = " . array2oneperline($self->{all_objs}) . "\n");
 -
        $self->_prepare_mk_files();
  
 -      $self->output($self->{mkfile});
 -
        open(MAKEFILE,">$file") || die ("Can't open $file\n");
        print MAKEFILE $self->{output};
        close(MAKEFILE);
index 1708c66d4471c96b77c0d46f0f4c466e69af9623,414b449ba8cbd29de6a0a8630bb132ae6684fa66..69bfa14da09ed6db4094c4d3b1a8eb2dc5c9f2b6
@@@ -4,7 -4,7 +4,11 @@@
  SUBSYSTEM = LIBLDB
  OUTPUT_TYPE = SHARED_LIBRARY
  PRIVATE_DEPENDENCIES = LIBTALLOC LIBNDR NDR_MISC
++<<<<<<< HEAD:source/dsdb/samdb/ldb_modules/config.mk
 +INIT_FUNCTION = LDB_MODULE(objectguid)
++=======
+ INIT_FUNCTION = objectguid_module_module_ops
++>>>>>>> 5f3a70f285ad8a412105c0e498e486f93fc279bc:source/dsdb/samdb/ldb_modules/config.mk
  # End MODULE ldb_objectguid
  ################################################
  
@@@ -17,11 -17,12 +21,12 @@@ SUBSYSTEM = LIBLD
  OUTPUT_TYPE = SHARED_LIBRARY
  PRIVATE_DEPENDENCIES = SAMDB LIBTALLOC LIBNDR NDR_MISC NDR_DRSUAPI \
                                           NDR_DRSBLOBS LIBNDR
 -INIT_FUNCTION = repl_meta_data_module_module_ops
 +INIT_FUNCTION = LDB_MODULE(repl_meta_data)
  # End MODULE ldb_repl_meta_data
  ################################################
  
- ldb_repl_meta_data_OBJ_FILES = dsdb/samdb/ldb_modules/repl_meta_data.o
+ ldb_repl_meta_data_OBJ_FILES = \
+               dsdb/samdb/ldb_modules/repl_meta_data.o
  
  ################################################
  # Start MODULE ldb_dsdb_cache
  SUBSYSTEM = LIBLDB
  OUTPUT_TYPE = SHARED_LIBRARY
  PRIVATE_DEPENDENCIES = SAMDB LIBTALLOC
 -INIT_FUNCTION = dsdb_cache_module_module_ops
 +INIT_FUNCTION = LDB_MODULE(dsdb_cache)
  # End MODULE ldb_dsdb_cache
  ################################################
  
- ldb_dsdb_cache_OBJ_FILES = dsdb/samdb/ldb_modules/dsdb_cache.o
+ ldb_dsdb_cache_OBJ_FILES = \
+               dsdb/samdb/ldb_modules/dsdb_cache.o
  
  ################################################
  # Start MODULE ldb_schema_fsmo
  SUBSYSTEM = LIBLDB
  OUTPUT_TYPE = SHARED_LIBRARY
  PRIVATE_DEPENDENCIES = SAMDB LIBTALLOC
 -INIT_FUNCTION = schema_fsmo_module_module_ops
 +INIT_FUNCTION = LDB_MODULE(schema_fsmo)
  # End MODULE ldb_schema_fsmo
  ################################################
  
- ldb_schema_fsmo_OBJ_FILES = dsdb/samdb/ldb_modules/schema_fsmo.o
+ ldb_schema_fsmo_OBJ_FILES = \
+               dsdb/samdb/ldb_modules/schema_fsmo.o
  
  ################################################
  # Start MODULE ldb_naming_fsmo
  SUBSYSTEM = LIBLDB
  OUTPUT_TYPE = SHARED_LIBRARY
  PRIVATE_DEPENDENCIES = SAMDB LIBTALLOC
 -INIT_FUNCTION = naming_fsmo_module_module_ops
 +INIT_FUNCTION = LDB_MODULE(naming_fsmo)
  # End MODULE ldb_naming_fsmo
  ################################################
  
- ldb_naming_fsmo_OBJ_FILES = dsdb/samdb/ldb_modules/naming_fsmo.o
+ ldb_naming_fsmo_OBJ_FILES = \
+               dsdb/samdb/ldb_modules/naming_fsmo.o
  
  ################################################
  # Start MODULE ldb_pdc_fsmo
  SUBSYSTEM = LIBLDB
  OUTPUT_TYPE = SHARED_LIBRARY
  PRIVATE_DEPENDENCIES = SAMDB LIBTALLOC
 -INIT_FUNCTION = pdc_fsmo_module_module_ops
 +INIT_FUNCTION = LDB_MODULE(pdc_fsmo)
  # End MODULE ldb_pdc_fsmo
  ################################################
  
- ldb_pdc_fsmo_OBJ_FILES = dsdb/samdb/ldb_modules/pdc_fsmo.o
+ ldb_pdc_fsmo_OBJ_FILES = \
+               dsdb/samdb/ldb_modules/pdc_fsmo.o
  
  ################################################
  # Start MODULE ldb_samldb
  SUBSYSTEM = LIBLDB
  OUTPUT_TYPE = SHARED_LIBRARY
  PRIVATE_DEPENDENCIES = LIBTALLOC LDAP_ENCODE NDR_MISC SAMDB
 -INIT_FUNCTION = samldb_module_module_ops
 +INIT_FUNCTION = LDB_MODULE(samldb)
+ #
  # End MODULE ldb_samldb
  ################################################
  
- ldb_samldb_OBJ_FILES = dsdb/samdb/ldb_modules/samldb.o
+ ldb_samldb_OBJ_FILES = \
+               dsdb/samdb/ldb_modules/samldb.o
  
  ################################################
  # Start MODULE ldb_samba3sam
  [MODULE::ldb_samba3sam]
  SUBSYSTEM = LIBLDB
  OUTPUT_TYPE = SHARED_LIBRARY
 -INIT_FUNCTION = &ldb_samba3sam_module_module_ops
 +INIT_FUNCTION = LDB_MODULE(samba3sam)
  PRIVATE_DEPENDENCIES = LIBTALLOC ldb_map SMBPASSWD NSS_WRAPPER LIBSECURITY \
                                           NDR_SECURITY
 -#
  # End MODULE ldb_samldb
  ################################################
  
- ldb_samba3sam_OBJ_FILES = dsdb/samdb/ldb_modules/samba3sam.o
+ ldb_samba3sam_OBJ_FILES = \
+               dsdb/samdb/ldb_modules/samba3sam.o
  
  ################################################
  # Start MODULE ldb_simple_ldap_map
  [MODULE::ldb_simple_ldap_map]
  SUBSYSTEM = LIBLDB
  OUTPUT_TYPE = SHARED_LIBRARY
 -INIT_FUNCTION = &ldb_simple_ldap_map_module_module_ops
 +INIT_FUNCTION = LDB_MODULE(simple_ldap_map)
  PRIVATE_DEPENDENCIES = LIBTALLOC ldb_map LIBNDR NDR_MISC
  ENABLE = YES
  ALIASES = entryuuid nsuniqueid
 -#
  # End MODULE ldb_entryuuid
  ################################################
  
- ldb_simple_ldap_map_OBJ_FILES = dsdb/samdb/ldb_modules/simple_ldap_map.o
+ ldb_simple_ldap_map_OBJ_FILES = \
+               dsdb/samdb/ldb_modules/simple_ldap_map.o
  
  # ################################################
  # # Start MODULE ldb_proxy
  # [MODULE::ldb_proxy]
  # SUBSYSTEM = LIBLDB
 -# INIT_FUNCTION = proxy_module_module_ops
 +# INIT_FUNCTION = LDB_MODULE(proxy)
  # OBJ_FILES = \
  #             proxy.o
  # 
  SUBSYSTEM = LIBLDB
  PRIVATE_DEPENDENCIES = LIBTALLOC SAMDB
  OUTPUT_TYPE = SHARED_LIBRARY
 -INIT_FUNCTION = rootdse_module_module_ops
 +INIT_FUNCTION = LDB_MODULE(rootdse)
  # End MODULE ldb_rootdse
  ################################################
  
@@@ -139,7 -150,7 +152,7 @@@ ldb_rootdse_OBJ_FILES = dsdb/samdb/ldb_
  [MODULE::ldb_password_hash]
  SUBSYSTEM = LIBLDB
  OUTPUT_TYPE = SHARED_LIBRARY
 -INIT_FUNCTION = password_hash_module_module_ops
 +INIT_FUNCTION = LDB_MODULE(password_hash)
  PRIVATE_DEPENDENCIES = HEIMDAL_HDB_KEYS LIBTALLOC HEIMDAL_KRB5 LDAP_ENCODE \
                                           LIBCLI_AUTH NDR_DRSBLOBS KERBEROS SAMDB
  # End MODULE ldb_password_hash
@@@ -153,7 -164,7 +166,7 @@@ ldb_password_hash_OBJ_FILES = dsdb/samd
  PRIVATE_DEPENDENCIES = LIBTALLOC LIBNDR SAMDB
  OUTPUT_TYPE = SHARED_LIBRARY
  SUBSYSTEM = LIBLDB
 -INIT_FUNCTION = local_password_module_module_ops
 +INIT_FUNCTION = LDB_MODULE(local_password)
  # End MODULE ldb_local_password
  ################################################
  
@@@ -165,7 -176,7 +178,7 @@@ ldb_local_password_OBJ_FILES = dsdb/sam
  PRIVATE_DEPENDENCIES = LIBTALLOC LIBSECURITY SAMDB
  OUTPUT_TYPE = SHARED_LIBRARY
  SUBSYSTEM = LIBLDB
 -INIT_FUNCTION = &ldb_kludge_acl_module_ops
 +INIT_FUNCTION = LDB_MODULE(kludge_acl)
  
  # End MODULE ldb_kludge_acl
  ################################################
@@@ -178,7 -189,7 +191,7 @@@ ldb_kludge_acl_OBJ_FILES = dsdb/samdb/l
  SUBSYSTEM = LIBLDB
  OUTPUT_TYPE = SHARED_LIBRARY
  PRIVATE_DEPENDENCIES = LIBTALLOC LIBNDR LIBSECURITY SAMDB
 -INIT_FUNCTION = &ldb_extended_dn_module_ops
 +INIT_FUNCTION = LDB_MODULE(extended_dn)
  # End MODULE ldb_extended_dn
  ################################################
  
@@@ -190,7 -201,7 +203,7 @@@ ldb_extended_dn_OBJ_FILES = dsdb/samdb/
  SUBSYSTEM = LIBLDB
  OUTPUT_TYPE = SHARED_LIBRARY
  PRIVATE_DEPENDENCIES = LIBTALLOC
 -INIT_FUNCTION = &ldb_show_deleted_module_ops
 +INIT_FUNCTION = LDB_MODULE(show_deleted)
  # End MODULE ldb_show_deleted
  ################################################
  
@@@ -202,7 -213,7 +215,7 @@@ ldb_show_deleted_OBJ_FILES = dsdb/samdb
  SUBSYSTEM = LIBLDB
  OUTPUT_TYPE = SHARED_LIBRARY
  PRIVATE_DEPENDENCIES = LIBTALLOC SAMDB
 -INIT_FUNCTION = &ldb_partition_module_ops
 +INIT_FUNCTION = LDB_MODULE(partition)
  # End MODULE ldb_partition
  ################################################
  
@@@ -214,7 -225,7 +227,7 @@@ ldb_partition_OBJ_FILES = dsdb/samdb/ld
  SUBSYSTEM = LIBLDB
  OUTPUT_TYPE = SHARED_LIBRARY
  PRIVATE_DEPENDENCIES = LIBTALLOC LIBLDB
 -INIT_FUNCTION = &ldb_schema_module_ops
 +INIT_FUNCTION = LDB_MODULE(schema)
  # End MODULE ldb_schema
  ################################################
  
@@@ -227,7 -238,7 +240,7 @@@ SUBSYSTEM = LIBLD
  OUTPUT_TYPE = SHARED_LIBRARY
  PRIVATE_DEPENDENCIES = LIBTALLOC CREDENTIALS
  #Also depends on credentials, but that would loop
 -INIT_FUNCTION = &ldb_update_kt_module_ops
 +INIT_FUNCTION = LDB_MODULE(update_kt)
  # End MODULE ldb_update_kt
  ################################################
  
@@@ -236,7 -247,7 +249,7 @@@ ldb_update_keytab_OBJ_FILES = dsdb/samd
  ################################################
  # Start MODULE ldb_objectclass
  [MODULE::ldb_objectclass]
 -INIT_FUNCTION = &ldb_objectclass_module_ops
 +INIT_FUNCTION = LDB_MODULE(objectclass)
  OUTPUT_TYPE = SHARED_LIBRARY
  CFLAGS = -Ilib/ldb/include
  PRIVATE_DEPENDENCIES = LIBTALLOC LIBSECURITY NDR_SECURITY SAMDB
@@@ -249,7 -260,7 +262,7 @@@ ldb_objectclass_OBJ_FILES = dsdb/samdb/
  ################################################
  # Start MODULE ldb_subtree_rename
  [MODULE::ldb_subtree_rename]
 -INIT_FUNCTION = &ldb_subtree_rename_module_ops
 +INIT_FUNCTION = LDB_MODULE(subtree_rename)
  CFLAGS = -Ilib/ldb/include
  PRIVATE_DEPENDENCIES = LIBTALLOC
  SUBSYSTEM = LIBLDB
@@@ -261,7 -272,7 +274,7 @@@ ldb_subtree_rename_OBJ_FILES = dsdb/sam
  ################################################
  # Start MODULE ldb_subtree_rename
  [MODULE::ldb_subtree_delete]
 -INIT_FUNCTION = &ldb_subtree_delete_module_ops
 +INIT_FUNCTION = LDB_MODULE(subtree_delete)
  CFLAGS = -Ilib/ldb/include
  PRIVATE_DEPENDENCIES = LIBTALLOC
  SUBSYSTEM = LIBLDB
@@@ -273,7 -284,7 +286,7 @@@ ldb_subtree_delete_OBJ_FILES = dsdb/sam
  ################################################
  # Start MODULE ldb_linked_attributes
  [MODULE::ldb_linked_attributes]
 -INIT_FUNCTION = &ldb_linked_attributes_module_ops
 +INIT_FUNCTION = LDB_MODULE(linked_attributes)
  CFLAGS = -Ilib/ldb/include
  OUTPUT_TYPE = SHARED_LIBRARY
  PRIVATE_DEPENDENCIES = LIBTALLOC SAMDB
@@@ -286,7 -297,7 +299,7 @@@ ldb_linked_attributes_OBJ_FILES = dsdb/
  ################################################
  # Start MODULE ldb_ranged_results
  [MODULE::ldb_ranged_results]
 -INIT_FUNCTION = &ldb_ranged_results_module_ops
 +INIT_FUNCTION = LDB_MODULE(ranged_results)
  CFLAGS = -Ilib/ldb/include
  PRIVATE_DEPENDENCIES = LIBTALLOC
  SUBSYSTEM = LIBLDB
@@@ -298,7 -309,7 +311,7 @@@ ldb_ranged_results_OBJ_FILES = dsdb/sam
  ################################################
  # Start MODULE ldb_anr
  [MODULE::ldb_anr]
 -INIT_FUNCTION = &ldb_anr_module_ops
 +INIT_FUNCTION = LDB_MODULE(anr)
  CFLAGS = -Ilib/ldb/include
  OUTPUT_TYPE = SHARED_LIBRARY
  PRIVATE_DEPENDENCIES = LIBTALLOC LIBSAMBA-UTIL SAMDB
@@@ -311,7 -322,7 +324,7 @@@ ldb_anr_OBJ_FILES = dsdb/samdb/ldb_modu
  ################################################
  # Start MODULE ldb_normalise
  [MODULE::ldb_normalise]
 -INIT_FUNCTION = &ldb_normalise_module_ops
 +INIT_FUNCTION = LDB_MODULE(normalise)
  CFLAGS = -Ilib/ldb/include
  OUTPUT_TYPE = SHARED_LIBRARY
  PRIVATE_DEPENDENCIES = LIBTALLOC LIBSAMBA-UTIL SAMDB
@@@ -324,7 -335,7 +337,7 @@@ ldb_normalise_OBJ_FILES = dsdb/samdb/ld
  ################################################
  # Start MODULE ldb_instancetype
  [MODULE::ldb_instancetype]
 -INIT_FUNCTION = &ldb_instancetype_module_ops
 +INIT_FUNCTION = LDB_MODULE(instancetype)
  CFLAGS = -Ilib/ldb/include
  OUTPUT_TYPE = SHARED_LIBRARY
  PRIVATE_DEPENDENCIES = LIBTALLOC
index 969abeae468e14aad13bc0d608322f2e1b2cd234,568aadc31e1f1e6c3c2398cd8216860b950e2c07..6f45db512a1b3aecd7143433f0646d2f71e541aa
@@@ -58,6 -58,9 +58,6 @@@
  #include "lib/events/events_internal.h"
  #include "lib/util/dlinklist.h"
  #include "param/param.h"
 -#if _SAMBA_BUILD_
 -#include "build.h"
 -#endif
  
  struct event_ops_list {
        struct event_ops_list *next, *prev;
@@@ -102,6 -105,7 +102,7 @@@ static void event_backend_init(void
        NTSTATUS s4_events_standard_init(void);
        NTSTATUS s4_events_select_init(void);
        NTSTATUS s4_events_epoll_init(void);
+       NTSTATUS s4_events_aio_init(void);
        init_module_fn static_init[] = { STATIC_LIBEVENTS_MODULES };
        if (event_backends) return;
        run_init_functions(static_init);
index af235e7b04afad4eeb597188974f0743b97ce259,903bbb0b80a9d0850a349e70506d172d67551bd3..47d6d4cd32692224316e7d6f7fd7b489878d9480
@@@ -22,6 -22,7 +22,6 @@@
  #include "lib/util/dlinklist.h"
  #include "lib/registry/registry.h"
  #include "system/filesys.h"
 -#include "build.h"
  
  struct reg_key_path {
        uint32_t predefined_key;
@@@ -36,9 -37,6 +36,6 @@@ struct registry_local 
                struct hive_key *key;
                struct mountpoint *prev, *next;
        } *mountpoints;
-       struct auth_session_info *session_info;
-       struct cli_credentials *credentials;
  };
  
  struct local_key {
@@@ -293,9 -291,7 +290,7 @@@ const static struct registry_operation
        .get_key_info = local_get_key_info,
  };
  
- WERROR reg_open_local(TALLOC_CTX *mem_ctx, struct registry_context **ctx,
-                     struct auth_session_info *session_info,
-                     struct cli_credentials *credentials)
+ WERROR reg_open_local(TALLOC_CTX *mem_ctx, struct registry_context **ctx)
  {
        struct registry_local *ret = talloc_zero(mem_ctx,
                                                 struct registry_local);
        W_ERROR_HAVE_NO_MEMORY(ret);
  
        ret->ops = &local_ops;
-       ret->session_info = session_info;
-       ret->credentials = credentials;
  
        *ctx = (struct registry_context *)ret;
  
diff --combined source4/librpc/config.mk
index cb679d20bb58684134a0dc42fb61900ddb195f12,11a320a583bf2ac737dde45bba2103b536970c9b..c5820619d99013d16602535ff61c7d12376c2bf5
@@@ -459,8 -459,9 +459,9 @@@ PUBLIC_HEADERS += librpc/gen_ndr/ndr_sv
  
  [LIBRARY::dcerpc_atsvc]
  PUBLIC_DEPENDENCIES = dcerpc NDR_ATSVC
- VERSION = 0.0.1
- SO_VERSION = 0
+ dcerpc_atsvc_VERSION = 0.0.1
+ dcerpc_atsvc_SOVERSION = 0
  
  dcerpc_atsvc_OBJ_FILES = librpc/gen_ndr/ndr_atsvc_c.o
  PC_FILES += librpc/dcerpc_atsvc.pc
@@@ -588,7 -589,8 +589,7 @@@ PC_FILES += librpc/dcerpc.p
  dcerpc_VERSION = 0.0.1
  dcerpc_SOVERSION = 0
  
--dcerpc_OBJ_FILES = $(addprefix librpc/rpc/, dcerpc.o dcerpc_auth.o dcerpc_schannel.o dcerpc_util.o \
 -                                 binding.o \
++dcerpc_OBJ_FILES = $(addprefix librpc/rpc/, dcerpc.o dcerpc_auth.o dcerpc_schannel.o dcerpc_util.o binding.o \
                                  dcerpc_error.o dcerpc_smb.o dcerpc_smb2.o dcerpc_sock.o dcerpc_connect.o dcerpc_secondary.o)
  
  
@@@ -718,73 -720,76 +719,84 @@@ PUBLIC_DEPENDENCIES = LIBCLI_SMB NDR_MI
  swig_dcerpc_OBJ_FILES = librpc/rpc/dcerpc_wrap.o
  
  [PYTHON::python_echo]
- PRIVATE_DEPENDENCIES = RPC_NDR_ECHO
+ PRIVATE_DEPENDENCIES = RPC_NDR_ECHO PYTALLOC
  
  python_echo_OBJ_FILES = librpc/gen_ndr/py_echo.o
  
  [PYTHON::python_winreg]
- PRIVATE_DEPENDENCIES = RPC_NDR_WINREG python_misc
+ PRIVATE_DEPENDENCIES = RPC_NDR_WINREG python_misc PYTALLOC
  
  python_winreg_OBJ_FILES = librpc/gen_ndr/py_winreg.o
  
  [PYTHON::python_dcerpc_misc]
+ PRIVATE_DEPENDENCIES = PYTALLOC
  
  python_dcerpc_misc_OBJ_FILES = librpc/gen_ndr/py_misc.o
  
  [PYTHON::python_initshutdown]
- PRIVATE_DEPENDENCIES = RPC_NDR_INITSHUTDOWN
+ PRIVATE_DEPENDENCIES = RPC_NDR_INITSHUTDOWN PYTALLOC
  
  python_initshutdown_OBJ_FILES = librpc/gen_ndr/py_initshutdown.o
  
  [PYTHON::python_epmapper]
+ PRIVATE_DEPENDENCIES = PYTALLOC
  
  python_epmapper_OBJ_FILES = librpc/gen_ndr/py_epmapper.o
  
  [PYTHON::python_mgmt]
- PRIVATE_DEPENDENCIES = dcerpc_mgmt
+ PRIVATE_DEPENDENCIES = dcerpc_mgmt PYTALLOC
  
  python_mgmt_OBJ_FILES = librpc/gen_ndr/py_mgmt.o
  
  [PYTHON::python_atsvc]
- PRIVATE_DEPENDENCIES = dcerpc_atsvc
+ PRIVATE_DEPENDENCIES = dcerpc_atsvc PYTALLOC
  
  python_atsvc_OBJ_FILES = librpc/gen_ndr/py_atsvc.o
  
  [PYTHON::python_samr]
- PRIVATE_DEPENDENCIES = dcerpc_samr
+ PRIVATE_DEPENDENCIES = dcerpc_samr PYTALLOC
+ python_samr_OBJ_FILES = librpc/gen_ndr/py_samr.o
  
 +python_samr_OBJ_FILES = librpc/gen_ndr/py_samr.o
 +
  [PYTHON::python_svcctl]
- PRIVATE_DEPENDENCIES = RPC_NDR_SVCCTL
+ PRIVATE_DEPENDENCIES = RPC_NDR_SVCCTL PYTALLOC
  
  python_svcctl_OBJ_FILES = librpc/gen_ndr/py_svcctl.o
  
  [PYTHON::python_lsa]
- PRIVATE_DEPENDENCIES = RPC_NDR_LSA
+ PRIVATE_DEPENDENCIES = RPC_NDR_LSA PYTALLOC
+ python_lsa_OBJ_FILES = librpc/gen_ndr/py_lsa.o
  
 +python_lsa_OBJ_FILES = librpc/gen_ndr/py_lsa.o
 +
  [PYTHON::python_wkssvc]
- PRIVATE_DEPENDENCIES = RPC_NDR_WKSSVC
+ PRIVATE_DEPENDENCIES = RPC_NDR_WKSSVC PYTALLOC
  
  python_wkssvc_OBJ_FILES = librpc/gen_ndr/py_wkssvc.o
  
  [PYTHON::python_dfs]
- PRIVATE_DEPENDENCIES = RPC_NDR_DFS
+ PRIVATE_DEPENDENCIES = RPC_NDR_DFS PYTALLOC
+ python_dfs_OBJ_FILES = librpc/gen_ndr/py_dfs.o
  
 +python_dfs_OBJ_FILES = gen_ndr/py_dfs.o
 +
  [PYTHON::python_unixinfo]
- PRIVATE_DEPENDENCIES = RPC_NDR_UNIXINFO
+ PRIVATE_DEPENDENCIES = RPC_NDR_UNIXINFO PYTALLOC
  
- python_unixinfo_OBJ_FILES = gen_ndr/py_unixinfo.o
+ python_unixinfo_OBJ_FILES = librpc/gen_ndr/py_unixinfo.o
  
  [PYTHON::python_drsuapi]
- PRIVATE_DEPENDENCIES = RPC_NDR_DRSUAPI
+ PRIVATE_DEPENDENCIES = RPC_NDR_DRSUAPI PYTALLOC
+ python_drsuapi_OBJ_FILES = librpc/gen_ndr/py_drsuapi.o
  
 +python_drsuapi_OBJ_FILES = gen_ndr/py_drsuapi.o
 +
  [PYTHON::python_dcerpc_security]
+ PRIVATE_DEPENDENCIES = PYTALLOC
  
  python_dcerpc_security_OBJ_FILES = librpc/gen_ndr/py_security.o
index a26d36854df44857cc0a8e4839d4c9be3b5aa824,1165631b182a203058c74fc72151765d627ac859..a7004be90ba289a25f8e6e0ca912be4870098da1
@@@ -24,6 -24,7 +24,6 @@@
  
  #include "includes.h"
  #include "ntptr/ntptr.h"
 -#include "build.h"
  #include "param/param.h"
  
  /* the list of currently registered NTPTR backends */
@@@ -70,7 -71,7 +70,7 @@@ NTSTATUS ntptr_register(const void *_op
  
  NTSTATUS ntptr_init(struct loadparm_context *lp_ctx)
  {
-       extern int ntptr_simple_ldb_init(void);
+       extern NTSTATUS ntptr_simple_ldb_init(void);
        init_module_fn static_init[] = { STATIC_ntptr_MODULES };
        init_module_fn *shared_init = load_samba_modules(NULL, lp_ctx, "ntptr");
  
@@@ -119,7 -120,8 +119,8 @@@ const struct ntptr_critical_sizes *ntpt
  /*
    create a ntptr_context with a specified NTPTR backend
  */
- NTSTATUS ntptr_init_context(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx,
+ NTSTATUS ntptr_init_context(TALLOC_CTX *mem_ctx, struct event_context *ev_ctx,
+                           struct loadparm_context *lp_ctx,
                            const char *providor, struct ntptr_context **_ntptr)
  {
        NTSTATUS status;
        NT_STATUS_HAVE_NO_MEMORY(ntptr);
        ntptr->private_data     = NULL;
        ntptr->ops              = ntptr_backend_byname(providor);
+       ntptr->ev_ctx           = ev_ctx;
        ntptr->lp_ctx           = lp_ctx;
  
        if (!ntptr->ops) {
index c628b9068cb8d31510dab9d48ba0dc629166f6bd,22b72c4d634ca54258ea27245b5186a2db5b6b7d..9770323c3fa0ec343b9aed4f72098ede9b9cb1a1
@@@ -28,6 -28,7 +28,6 @@@
  #include "lib/events/events.h"
  #include "lib/util/dlinklist.h"
  #include "param/param.h"
 -#include "build.h"
  
  /* list of registered backends */
  static struct sys_notify_backend *backends;
@@@ -51,7 -52,7 +51,7 @@@ _PUBLIC_ struct sys_notify_context *sys
        }
  
        if (ev == NULL) {
-               ev = event_context_find(mem_ctx);
+               return NULL;
        }
  
        ctx = talloc_zero(mem_ctx, struct sys_notify_context);
diff --combined source4/param/config.mk
index bc8f7a5dc7b69711649e9bd5d0699d9675ea00e6,42cb6f3c1c643c88d1c8e92a57a46e920c2f0a59..3e6758db8a90d5f3fc55f518b1442882365aa5a0
@@@ -1,20 -1,24 +1,30 @@@
  [LIBRARY::LIBSAMBA-HOSTCONFIG]
- VERSION = 0.0.1
- SO_VERSION = 1
  PUBLIC_DEPENDENCIES = LIBSAMBA-UTIL 
  PRIVATE_DEPENDENCIES = DYNCONFIG LIBREPLACE_EXT CHARSET
- PRIVATE_PROTO_HEADER = proto.h
+ LIBSAMBA-HOSTCONFIG_VERSION = 0.0.1
+ LIBSAMBA-HOSTCONFIG-SOVERSION = 0
+ LIBSAMBA-HOSTCONFIG_OBJ_FILES = param/loadparm.o \
+                       param/generic.o \
+                       param/util.o \
+                       lib/version.o
  
 +LIBSAMBA-CONFIG_OBJ_FILES = param/loadparm.o \
 +                      param/params.o \
 +                      param/generic.o \
 +                      param/util.o \
 +                      lib/version.o
 +
  PUBLIC_HEADERS += param/param.h
  
  PC_FILES += param/samba-hostconfig.pc
  
+ [SUBSYSTEM::PROVISION]
+ PRIVATE_DEPENDENCIES = LIBPYTHON
+ PROVISION_OBJ_FILES = param/provision.o
  #################################
  # Start SUBSYSTEM share
  [SUBSYSTEM::share]
diff --combined source4/param/share.c
index 2727518c0576e578c9d80df141bbc563e14b5ea5,f8ee468054755c9eec637d2c21706f1e3cbf5103..47aea55751b41d687d2efc4ba69d2a6e81c763b3
@@@ -21,6 -21,7 +21,6 @@@
  
  #include "includes.h"
  #include "param/share.h"
 -#include "build.h"
  #include "param/param.h"
  
  const char *share_string_option(struct share_config *scfg, const char *opt_name, const char *defval)
@@@ -126,6 -127,7 +126,7 @@@ NTSTATUS share_register(const struct sh
  }
  
  NTSTATUS share_get_context_by_name(TALLOC_CTX *mem_ctx, const char *backend_name,
+                                  struct event_context *event_ctx, 
                                   struct loadparm_context *lp_ctx,
                                   struct share_context **ctx)
  {
                return NT_STATUS_INTERNAL_ERROR;
        }
  
-       return ops->init(mem_ctx, ops, lp_ctx, ctx);
+       return ops->init(mem_ctx, ops, event_ctx, lp_ctx, ctx);
  }
  
  /*
index 4fb38cd1224a5c10d2b52cfe9a292cb7844326e6,27f3fe41c24d6d2b10a9410b5272200de042758f..00f0d261ca5f0186c3a3538e72379420a1825880
@@@ -37,6 -37,7 +37,6 @@@
  #include "lib/messaging/irpc.h"
  #include "system/network.h"
  #include "lib/socket/netif.h"
 -#include "build.h"
  #include "param/param.h"
  
  struct dcesrv_socket_context {
@@@ -106,7 -107,7 +106,7 @@@ static void dcesrv_sock_accept(struct s
        struct dcesrv_connection *dcesrv_conn = NULL;
        struct auth_session_info *session_info = NULL;
  
-       status = auth_anonymous_session_info(srv_conn, dcesrv_sock->dcesrv_ctx->lp_ctx, &session_info);
+       status = auth_anonymous_session_info(srv_conn, srv_conn->event.ctx, dcesrv_sock->dcesrv_ctx->lp_ctx, &session_info);
        if (!NT_STATUS_IS_OK(status)) {
                DEBUG(0,("dcesrv_sock_accept: auth_anonymous_session_info failed: %s\n", 
                        nt_errstr(status)));
@@@ -470,7 -471,7 +470,7 @@@ NTSTATUS server_service_rpc_init(void
        extern NTSTATUS dcerpc_server_samr_init(void);
        extern NTSTATUS dcerpc_server_remote_init(void);
        extern NTSTATUS dcerpc_server_lsa_init(void);
 -      init_module_fn static_init[] = { STATIC_dcerpc_server_MODULES };
 +      init_module_fn static_init[] = { STATIC_DCESRV_MODULES };
        init_module_fn *shared_init = load_samba_modules(NULL, global_loadparm, "dcerpc_server");
  
        run_init_functions(static_init);
index 4eef0207f98f9e0c3de74d86fbde6b291d87f29a,cadd71673ceceb71b060baf64bca3d535e0c3464..896b292e23d0c1a6d45124fec1644f34831e9eb3
@@@ -58,10 -58,10 +58,12 @@@ smbcalls_data_OBJ_FILES = scripting/ejs
  OUTPUT_TYPE = MERGED_OBJ
  SUBSYSTEM = smbcalls
  INIT_FUNCTION = smb_setup_ejs_auth
 -PRIVATE_DEPENDENCIES = auth
 +PRIVATE_DEPENDENCIES = service_auth
 +
 +smbcalls_auth_OBJ_FILES = scripting/ejs/smbcalls_auth.o
  
+ smbcalls_auth_OBJ_FILES = scripting/ejs/smbcalls_auth.o
  [MODULE::smbcalls_string]
  SUBSYSTEM = smbcalls
  OUTPUT_TYPE = MERGED_OBJ
@@@ -101,7 -101,6 +103,6 @@@ smbcalls_OBJ_FILES = $(addprefix script
  #######################
  # Start BINARY SMBSCRIPT
  [BINARY::smbscript]
- INSTALLDIR = BINDIR
  PRIVATE_DEPENDENCIES = EJS LIBSAMBA-UTIL smbcalls LIBSAMBA-HOSTCONFIG
  # End BINARY SMBSCRIPT
  #######################
index a0f5caad3bde796b4fc6e3d34e6e46342dc052d4,59f628fe184964fbaf1b8b79691ecdfdf37c9550..15be4ca3093beebcb8d34372d42480a71258273b
@@@ -20,6 -20,10 +20,12 @@@ SWIG_FILE = misc.
  
  python_misc_OBJ_FILES = scripting/python/misc_wrap.o
  
 -PYDOCTOR_MODULES=bin/python/ldb.py bin/python/auth.py bin/python/credentials.py bin/python/registry.py bin/python/tdb.py bin/python/security.py bin/python/events.py bin/python/net.py
 +_PY_FILES = $(shell find scripting/python -name "*.py")
 +
 +$(foreach pyfile, $(_PY_FILES),$(eval $(call python_py_module_template,$(patsubst scripting/python/%,%,$(pyfile)),$(pyfile))))
+ installpython:: pythonmods
+       @$(SHELL) $(srcdir)/script/installpython.sh \
+               $(INSTALLPERMS) \
+               $(DESTDIR)$(PYTHONDIR) \
+               scripting/python bin/python
index 08f3c1156c432dd678e85ff10d3457a35ad62767,6cd975c1a90622b772e95dec142b247c61fc501d..cbff14c7088acbe5de057d076392ef79f2864d86
@@@ -19,6 -19,7 +19,6 @@@
  
  #include "includes.h"
  #include <Python.h>
 -#include "build.h"
  
  extern void init_ldb(void);
  extern void init_security(void);
@@@ -41,6 -42,7 +41,7 @@@ extern void initepmapper(void)
  extern void initinitshutdown(void);
  static void initdcerpc_misc(void) {} 
  extern void initmgmt(void);
+ extern void initnet(void);
  extern void initatsvc(void);
  extern void initsamr(void);
  static void initdcerpc_security(void) {}
index 8f0b988ab412ac2dd45f58df6aabe0fe229159d2,01a55a67f66219bcb09ae083e109f4e19b76ece1..5c5f96c5058da758de0f943dbd4d2c0eb16735cb
  #include "dynconfig.h"
  
  #include "torture/torture.h"
 -#include "build.h"
  #include "lib/util/dlinklist.h"
  #include "librpc/rpc/dcerpc.h"
  #include "param/param.h"
  
+ #include "auth/credentials/credentials.h"
  static bool run_matching(struct torture_context *torture,
                                                 const char *prefix, 
                                                 const char *expr,
@@@ -672,7 -675,7 +674,7 @@@ int main(int argc,char *argv[]
                exit(1);
        }
  
-       torture = torture_context_init(talloc_autofree_context(), ui_ops);
+       torture = torture_context_init(event_context_init(NULL), ui_ops);
        if (basedir != NULL) {
                if (basedir[0] != '/') {
                        fprintf(stderr, "Please specify an absolute path to --basedir\n");