1--- a/source3/Makefile.in 2+++ b/source3/Makefile.in 3@@ -73,22 +73,22 @@ LDAP_LIBS=@LDAP_LIBS@ 4 NSCD_LIBS=@NSCD_LIBS@ 5 UUID_LIBS=@UUID_LIBS@ 6 LIBWBCLIENT=@LIBWBCLIENT_STATIC@ @LIBWBCLIENT_SHARED@ 7-LIBWBCLIENT_LIBS=@LIBWBCLIENT_LIBS@ 8+LIBWBCLIENT_LIBS=@LIBWBCLIENT_STATIC@ 9 PTHREAD_LDFLAGS=@PTHREAD_LDFLAGS@ 10 PTHREAD_CFLAGS=@PTHREAD_CFLAGS@ 11 DNSSD_LIBS=@DNSSD_LIBS@ 12 AVAHI_LIBS=@AVAHI_LIBS@ 13 POPT_LIBS=@POPTLIBS@ 14 LIBTALLOC=@LIBTALLOC_STATIC@ @LIBTALLOC_SHARED@ 15-LIBTALLOC_LIBS=@LIBTALLOC_LIBS@ 16+LIBTALLOC_LIBS=@LIBTALLOC_STATIC@ 17 LIBTEVENT=@LIBTEVENT_STATIC@ @LIBTEVENT_SHARED@ 18 LIBTEVENT_LIBS=@LIBTEVENT_LIBS@ 19 LIBREPLACE_LIBS=@LIBREPLACE_LIBS@ 20 LIBTDB=@LIBTDB_STATIC@ @LIBTDB_SHARED@ 21-LIBTDB_LIBS=@LIBTDB_LIBS@ 22+LIBTDB_LIBS=@LIBTDB_STATIC@ 23 TDB_DEPS=@TDB_DEPS@ 24 LIBNETAPI=@LIBNETAPI_STATIC@ @LIBNETAPI_SHARED@ 25-LIBNETAPI_LIBS=@LIBNETAPI_LIBS@ 26+LIBNETAPI_LIBS=@LIBNETAPI_STATIC@ 27 LIBSMBCLIENT_LIBS=@LIBSMBCLIENT_LIBS@ 28 LIBSMBSHAREMODES_LIBS=@LIBSMBSHAREMODES_LIBS@ 29 30@@ -216,7 +216,7 @@ PATH_FLAGS = -DSMB_PASSWD_FILE=\"$(SMB_P 31 32 # Note that all executable programs now provide for an optional executable suffix. 33 34-SBIN_PROGS = bin/smbd@EXEEXT@ bin/nmbd@EXEEXT@ @SWAT_SBIN_TARGETS@ @EXTRA_SBIN_PROGS@ 35+SBIN_PROGS = bin/samba_multicall@EXEEXT@ bin/smbd@EXEEXT@ bin/nmbd@EXEEXT@ @SWAT_SBIN_TARGETS@ @EXTRA_SBIN_PROGS@ 36 37 BIN_PROGS1 = bin/smbclient@EXEEXT@ bin/net@EXEEXT@ bin/smbspool@EXEEXT@ \ 38 bin/testparm@EXEEXT@ bin/smbstatus@EXEEXT@ bin/smbget@EXEEXT@ \ 39@@ -1799,6 +1799,42 @@ bin/.dummy: 40 dir=bin $(MAKEDIR); fi 41 @: >> $@ || : > $@ # what a fancy emoticon! 42 43+smbd/server_multicall.o: smbd/server.c smbd/server.o 44+ @echo Compiling $<.c 45+ @$(COMPILE_CC_PATH) -Dmain=smbd_main && exit 0;\ 46+ echo "The following command failed:" 1>&2;\ 47+ echo "$(COMPILE_CC_PATH)" 1>&2;\ 48+ $(COMPILE_CC_PATH) >/dev/null 2>&1 49+ 50+nmbd/nmbd_multicall.o: nmbd/nmbd.c nmbd/nmbd.o 51+ @echo Compiling $<.c 52+ @$(COMPILE_CC_PATH) -Dmain=nmbd_main && exit 0;\ 53+ echo "The following command failed:" 1>&2;\ 54+ echo "$(COMPILE_CC_PATH)" 1>&2;\ 55+ $(COMPILE_CC_PATH) >/dev/null 2>&1 56+ 57+utils/smbpasswd_multicall.o: utils/smbpasswd.c utils/smbpasswd.o 58+ @echo Compiling $<.c 59+ @$(COMPILE_CC_PATH) -Dmain=smbpasswd_main && exit 0;\ 60+ echo "The following command failed:" 1>&2;\ 61+ echo "$(COMPILE_CC_PATH)" 1>&2;\ 62+ $(COMPILE_CC_PATH) >/dev/null 2>&1 63+ 64+SMBD_MULTI_O = $(patsubst smbd/server.o,smbd/server_multicall.o,$(SMBD_OBJ)) 65+NMBD_MULTI_O = $(patsubst nmbd/nmbd.o,nmbd/nmbd_multicall.o,$(filter-out $(LIB_DUMMY_OBJ),$(NMBD_OBJ))) 66+SMBPASSWD_MULTI_O = $(patsubst utils/smbpasswd.o,utils/smbpasswd_multicall.o,$(filter-out $(LIB_DUMMY_OBJ),$(SMBPASSWD_OBJ))) 67+MULTI_O = multi.o 68+ 69+MULTICALL_O = $(sort $(SMBD_MULTI_O) $(NMBD_MULTI_O) $(SMBPASSWD_MULTI_O) $(MULTI_O)) 70+ 71+bin/samba_multicall@EXEEXT@: $(BINARY_PREREQS) $(MULTICALL_O) $(LIBTALLOC) $(LIBTDB) $(LIBWBCLIENT) @BUILD_POPT@ 72+ @echo Linking $@ 73+ @$(CC) -o $@ $(MULTICALL_O) $(LDFLAGS) $(LDAP_LIBS) @SMBD_FAM_LIBS@ \ 74+ $(KRB5LIBS) $(DYNEXP) $(PRINT_LIBS) $(AUTH_LIBS) \ 75+ $(ACL_LIBS) $(PASSDB_LIBS) $(LIBS) $(DNSSD_LIBS) $(AVAHI_LIBS) \ 76+ $(POPT_LIBS) @SMBD_LIBS@ $(LIBTALLOC_LIBS) $(LIBTEVENT_LIBS) $(LIBTDB_LIBS) \ 77+ $(LIBWBCLIENT_LIBS) $(ZLIB_LIBS) 78+ 79 bin/smbd@EXEEXT@: $(BINARY_PREREQS) $(SMBD_OBJ) $(LIBTALLOC) $(LIBTEVENT) $(LIBTDB) $(LIBWBCLIENT) @BUILD_POPT@ 80 @echo Linking $@ 81 @$(CC) -o $@ $(SMBD_OBJ) $(LDFLAGS) $(LDAP_LIBS) @SMBD_FAM_LIBS@ \ 82--- /dev/null 83+++ b/source3/multi.c 84@@ -0,0 +1,35 @@ 85+#include <stdio.h> 86+#include <string.h> 87+ 88+extern int smbd_main(int argc, char **argv); 89+extern int nmbd_main(int argc, char **argv); 90+extern int smbpasswd_main(int argc, char **argv); 91+ 92+static struct { 93+ const char *name; 94+ int (*func)(int argc, char **argv); 95+} multicall[] = { 96+ { "smbd", smbd_main }, 97+ { "nmbd", nmbd_main }, 98+ { "smbpasswd", smbpasswd_main }, 99+}; 100+ 101+#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0])) 102+ 103+int main(int argc, char **argv) 104+{ 105+ int i; 106+ 107+ for (i = 0; i < ARRAY_SIZE(multicall); i++) { 108+ if (strstr(argv[0], multicall[i].name)) 109+ return multicall[i].func(argc, argv); 110+ } 111+ 112+ fprintf(stderr, "Invalid multicall command, available commands:"); 113+ for (i = 0; i < ARRAY_SIZE(multicall); i++) 114+ fprintf(stderr, " %s", multicall[i].name); 115+ 116+ fprintf(stderr, "\n"); 117+ 118+ return 1; 119+} 120