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