add chaos_calmer branch
[15.05/openwrt.git] / package / network / services / samba36 / patches / 110-multicall.patch
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 @@ -1777,6 +1777,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 +}