[Samba] Compiling within Samba Source-Tree
Peter Koch
sambamailinglist at gmail.com
Sat Oct 14 21:43:43 UTC 2023
Dear Samba-experts:
we migrated from Samba 3.6 to 4.18 and everything works well.
But there are two problems where I need some expert-help:
We are using a daemon that is running on our AD-server. It accepts
connections from remote machines and changes the passwords of
certain users. Calling system("smbpasswd") from within that daemon
would be too slow so the daemon calls local_password_change().
I therefor compile that daemon within the Samba source-tree.
Since its function is simular to smbpasswd I duplicated
source3/utils/smbpasswd.c into source3/utils/smbscardd.c,
replaced main() and removed all unneccessary routines.
I then duplicated the smbpasswd-rules in Makefile as well so
calling make would create the daemon.
Samba4 uses a new build system, so I added source3/utils/smbscardd.c
and replaced
bld.SAMBA3_BINARY('smbpasswd',
source='smbpasswd.c',
deps='''
talloc
smbconf
pdb
PASSWD_UTIL
PASSCHANGE
cmdline_contexts
''')
by
bld.SAMBA3_BINARY('smbpasswd',
source='smbpasswd.c',
deps='''
talloc
smbconf
pdb
PASSWD_UTIL
PASSCHANGE
cmdline_contexts
''')
bld.SAMBA3_BINARY('smbscardd',
source='smbscardd.c',
deps='''
talloc
smbconf
pdb
PASSWD_UTIL
PASSCHANGE
cmdline_contexts
''')
Unfortunately this does not work. smbscardd.c compiles, but
it won't link since it needs one more library, i.e. -lcrypto
I therefor did
PYTHONHASHSEED=1 WAF_MAKE=1 ./buildtools/bin/waf -v build
to see what's going on.
The last message is:
Build failed
-> task in 'smbscardd' failed with exit status 1:
{task 140216595759840: cprogram
smbscardd.c.12.o,passchange.c.107.o,passwd_util.c.1.o,init_samr.c.141.o,cli_samr.c.126.o,init_lsa.c.140.o
-> smbscardd}
['/usr/bin/gcc', '-Wl,--as-needed', 'source3/utils/smbscardd.c.12.o',
'source3/libsmb/passchange.c.107.o', 'source3/utils/passwd_util.c.1.o',
'source3/rpc_client/init_samr.c.141.o',
'source3/rpc_client/cli_samr.c.126.o',
'source3/rpc_client/init_lsa.c.140.o',
'-o/var/tmp/samba-4.19.0/bin/default/source3/utils/smbscardd',
'-Wl,-rpath,/var/tmp/samba-4.19.0/bin/shared',
'-Wl,-rpath,/var/tmp/samba-4.19.0/bin/shared/private', '-Wl,-Bstatic',
'-Wl,-Bdynamic', '-L/var/tmp/samba-4.19.0/bin/default/source4/cluster',
'-L/var/tmp/samba-4.19.0/bin/default/source4/lib/messaging',
'-L/var/tmp/samba-4.19.0/bin/default/libcli/nbt',
'-L/var/tmp/samba-4.19.0/bin/default/source4/lib/socket',
'-L/var/tmp/samba-4.19.0/bin/default/auth',
'-L/var/tmp/samba-4.19.0/bin/default/source4/libcli/ldap',
'-L/var/tmp/samba-4.19.0/bin/default/libcli/dns',
'-L/var/tmp/samba-4.19.0/bin/default/lib/ldb',
'-L/var/tmp/samba-4.19.0/bin/default/source4/auth/kerberos',
'-L/var/tmp/samba-4.19.0/bin/default/libcli/cldap',
'-L/var/tmp/samba-4.19.0/bin/default/libcli/smb',
'-L/var/tmp/samba-4.19.0/bin/default/lib/addns',
'-L/var/tmp/samba-4.19.0/bin/default/libcli/ldap',
'-L/var/tmp/samba-4.19.0/bin/default/source4/lib/events',
'-L/var/tmp/samba-4.19.0/bin/default/lib/tdb_wrap',
'-L/var/tmp/samba-4.19.0/bin/default/third_party/heimdal_build',
'-L/var/tmp/samba-4.19.0/bin/default/source4/dsdb',
'-L/var/tmp/samba-4.19.0/bin/default/libds/common',
'-L/var/tmp/samba-4.19.0/bin/default/lib/tdb',
'-L/var/tmp/samba-4.19.0/bin/default/lib/ldb-samba',
'-L/var/tmp/samba-4.19.0/bin/default/libcli/registry',
'-L/var/tmp/samba-4.19.0/bin/default/auth/gensec',
'-L/var/tmp/samba-4.19.0/bin/default/source4/librpc',
'-L/var/tmp/samba-4.19.0/bin/default/libcli/named_pipe_auth',
'-L/var/tmp/samba-4.19.0/bin/default/lib/param',
'-L/var/tmp/samba-4.19.0/bin/default/libcli/auth',
'-L/var/tmp/samba-4.19.0/bin/default/nsswitch/libwbclient',
'-L/var/tmp/samba-4.19.0/bin/default/auth/credentials',
'-L/var/tmp/samba-4.19.0/bin/default/lib',
'-L/var/tmp/samba-4.19.0/bin/default/lib/socket',
'-L/var/tmp/samba-4.19.0/bin/default/lib/messaging',
'-L/var/tmp/samba-4.19.0/bin/default/libcli/security',
'-L/var/tmp/samba-4.19.0/bin/default/lib/replace',
'-L/var/tmp/samba-4.19.0/bin/default/lib/dbwrap',
'-L/var/tmp/samba-4.19.0/bin/default/lib/tevent',
'-L/var/tmp/samba-4.19.0/bin/default/lib/krb5_wrap',
'-L/var/tmp/samba-4.19.0/bin/default/lib/util',
'-L/var/tmp/samba-4.19.0/bin/default/lib/talloc',
'-L/var/tmp/samba-4.19.0/bin/default/librpc',
'-L/var/tmp/samba-4.19.0/bin/default/source3',
'-L/var/tmp/samba-4.19.0/bin/default/libcli/util', '-L/usr/local/lib',
'-L/usr/local/lib', '-lsamba-errors', '-lcmdline-contexts-samba4',
'-lmsrpc3-samba4', '-lsmbconf', '-lsamba-passdb',
'-ldcerpc-samba-samba4', '-ltalloc-samba4', '-lsamba-util',
'-lkrb5samba-samba4', '-lsamba-debug-samba4', '-lndr',
'-lmessages-util-samba4', '-lsamba3-util-samba4', '-ltevent-samba4',
'-ldbwrap-samba4', '-lsys-rw-samba4', '-lserver-id-db-samba4',
'-lreplace-samba4', '-lsamba-security-samba4',
'-ltalloc-report-printf-samba4', '-liov-buf-samba4',
'-lsocket-blocking-samba4', '-lmessages-dgm-samba4',
'-linterfaces-samba4', '-lsamba-sockets-samba4', '-lCHARSET3-samba4',
'-ltevent-util', '-lsamba-cluster-support-samba4', '-lutil-tdb-samba4',
'-ldcerpc-binding', '-llibsmb-samba4', '-lsamba-credentials',
'-lgse-samba4', '-lndr-samba-samba4', '-lwbclient', '-lcliauth-samba4',
'-lsamba-hostconfig', '-lnpa-tstream-samba4', '-lndr-nbt',
'-lndr-standard', '-lndr-samba4', '-lgensec-samba4',
'-lutil-reg-samba4', '-lsmbd-shim-samba4', '-lsmbldaphelper-samba4',
'-lsamba-modules-samba4', '-lldbsamba-samba4', '-ltdb-samba4',
'-lsecrets3-samba4', '-lsmbldap', '-lflag-mapping-samba4',
'-lsamdb-common-samba4', '-lsamdb', '-lgenrand-samba4',
'-lutil-setid-samba4', '-ltime-basic-samba4', '-lasn1-samba4',
'-lkrb5-samba4', '-lgssapi-samba4', '-lcom-err-samba4',
'-ltdb-wrap-samba4', '-lmsghdr-samba4', '-levents-samba4',
'-lcli-ldap-common-samba4', '-lasn1util-samba4', '-laddns-samba4',
'-lcli-smb-common-samba4', '-lcli-cldap-samba4', '-lauthkrb5-samba4',
'-lldb-samba4', '-lstable-sort-samba4', '-lndr-krb5pac',
'-lserver-role-samba4', '-lroken-samba4', '-lheimbase-samba4',
'-lhx509-samba4', '-lwind-samba4', '-lhcrypto-samba4',
'-lclidns-samba4', '-lsmb-transport-samba4', '-lcli-ldap-samba4',
'-lcommon-auth-samba4', '-lnetif-samba4', '-lcli-nbt-samba4',
'-lMESSAGING-SEND-samba4', '-lcluster-samba4', '-ljansson', '-lutil',
'-lresolv', '-licuuc', '-licudata', '-licui18n', '-lldap', '-llber',
'-lz', '-ldl', '-lgnutls', '-lpthread', '-pie', '-Wl,-z,relro,-z,now',
'-Wl,-no-undefined', '-Wl,--export-dynamic']
I tried hard to understand the waf build system and find out how
to add -lcrypto to the compile statement of smbscardd.
Since I did not find a way to do so, I manually compiled the daemon with:
cd bin/default
gcc -Wl,--as-needed \
source3/utils/smbscardd.c.12.o source3/libsmb/passchange.c.107.o
source3/utils/passwd_util.c.1.o \
source3/rpc_client/init_samr.c.141.o
source3/rpc_client/cli_samr.c.126.o source3/rpc_client/init_lsa.c.140.o \
-o source3/utils/smbscardd \
-Wl,-rpath,/var/tmp/samba-4.19.0/bin/shared \
-Wl,-rpath,/var/tmp/samba-4.19.0/bin/shared/private \
-Wl,-Bstatic -Wl,-Bdynamic \
-L/var/tmp/samba-4.19.0/bin/default/source4/cluster \
-L/var/tmp/samba-4.19.0/bin/default/source4/lib/messaging \
-L/var/tmp/samba-4.19.0/bin/default/libcli/nbt \
-L/var/tmp/samba-4.19.0/bin/default/source4/lib/socket \
-L/var/tmp/samba-4.19.0/bin/default/auth \
-L/var/tmp/samba-4.19.0/bin/default/source4/libcli/ldap \
-L/var/tmp/samba-4.19.0/bin/default/libcli/dns \
-L/var/tmp/samba-4.19.0/bin/default/lib/ldb \
-L/var/tmp/samba-4.19.0/bin/default/source4/auth/kerberos \
-L/var/tmp/samba-4.19.0/bin/default/libcli/cldap \
-L/var/tmp/samba-4.19.0/bin/default/libcli/smb \
-L/var/tmp/samba-4.19.0/bin/default/lib/addns \
-L/var/tmp/samba-4.19.0/bin/default/libcli/ldap \
-L/var/tmp/samba-4.19.0/bin/default/source4/lib/events \
-L/var/tmp/samba-4.19.0/bin/default/lib/tdb_wrap \
-L/var/tmp/samba-4.19.0/bin/default/third_party/heimdal_build \
-L/var/tmp/samba-4.19.0/bin/default/source4/dsdb \
-L/var/tmp/samba-4.19.0/bin/default/libds/common \
-L/var/tmp/samba-4.19.0/bin/default/lib/tdb \
-L/var/tmp/samba-4.19.0/bin/default/lib/ldb-samba \
-L/var/tmp/samba-4.19.0/bin/default/libcli/registry \
-L/var/tmp/samba-4.19.0/bin/default/auth/gensec \
-L/var/tmp/samba-4.19.0/bin/default/source4/librpc \
-L/var/tmp/samba-4.19.0/bin/default/libcli/named_pipe_auth \
-L/var/tmp/samba-4.19.0/bin/default/lib/param \
-L/var/tmp/samba-4.19.0/bin/default/libcli/auth \
-L/var/tmp/samba-4.19.0/bin/default/nsswitch/libwbclient \
-L/var/tmp/samba-4.19.0/bin/default/auth/credentials \
-L/var/tmp/samba-4.19.0/bin/default/lib \
-L/var/tmp/samba-4.19.0/bin/default/lib/socket \
-L/var/tmp/samba-4.19.0/bin/default/lib/messaging \
-L/var/tmp/samba-4.19.0/bin/default/libcli/security \
-L/var/tmp/samba-4.19.0/bin/default/lib/replace \
-L/var/tmp/samba-4.19.0/bin/default/lib/dbwrap \
-L/var/tmp/samba-4.19.0/bin/default/lib/tevent \
-L/var/tmp/samba-4.19.0/bin/default/lib/krb5_wrap \
-L/var/tmp/samba-4.19.0/bin/default/lib/util \
-L/var/tmp/samba-4.19.0/bin/default/lib/talloc \
-L/var/tmp/samba-4.19.0/bin/default/librpc \
-L/var/tmp/samba-4.19.0/bin/default/source3 \
-L/var/tmp/samba-4.19.0/bin/default/libcli/util \
-L/usr/local/lib \
-lsamba-errors -lcmdline-contexts-samba4 -lmsrpc3-samba4 -lsmbconf
-lsamba-passdb \
-ldcerpc-samba-samba4 -ltalloc-samba4 -lsamba-util
-lkrb5samba-samba4 -lsamba-debug-samba4 \
-lndr -lmessages-util-samba4 -lsamba3-util-samba4 -ltevent-samba4
-ldbwrap-samba4 \
-lsys-rw-samba4 -lserver-id-db-samba4 -lreplace-samba4
-lsamba-security-samba4 \
-ltalloc-report-printf-samba4 -liov-buf-samba4
-lsocket-blocking-samba4 -lmessages-dgm-samba4 \
-linterfaces-samba4 -lsamba-sockets-samba4 -lCHARSET3-samba4
-ltevent-util \
-lsamba-cluster-support-samba4 -lutil-tdb-samba4 -ldcerpc-binding
-llibsmb-samba4 \
-lsamba-credentials -lgse-samba4 -lndr-samba-samba4 -lwbclient
-lcliauth-samba4 \
-lsamba-hostconfig -lnpa-tstream-samba4 -lndr-nbt -lndr-standard
-lndr-samba4 -lgensec-samba4 \
-lutil-reg-samba4 -lsmbd-shim-samba4 -lsmbldaphelper-samba4
-lsamba-modules-samba4 \
-lldbsamba-samba4 -ltdb-samba4 -lsecrets3-samba4 -lsmbldap
-lflag-mapping-samba4 \
-lsamdb-common-samba4 -lsamdb -lgenrand-samba4 -lutil-setid-samba4
-ltime-basic-samba4 \
-lasn1-samba4 -lkrb5-samba4 -lgssapi-samba4 -lcom-err-samba4
-ltdb-wrap-samba4 -lmsghdr-samba4 \
-levents-samba4 -lcli-ldap-common-samba4 -lasn1util-samba4
-laddns-samba4 -lcli-smb-common-samba4 \
-lcli-cldap-samba4 -lauthkrb5-samba4 -lldb-samba4
-lstable-sort-samba4 -lndr-krb5pac \
-lserver-role-samba4 -lroken-samba4 -lheimbase-samba4
-lhx509-samba4 -lwind-samba4 \
-lhcrypto-samba4 -lclidns-samba4 -lsmb-transport-samba4
-lcli-ldap-samba4 -lcommon-auth-samba4 \
-lnetif-samba4 -lcli-nbt-samba4 -lMESSAGING-SEND-samba4
-lcluster-samba4 -ljansson -lutil \
-lresolv -licuuc -licudata -licui18n -lldap -llber -lz -ldl
-lgnutls -lpthread \
-lcrypto \
-pie -Wl,-z,relro,-z,now -Wl,-no-undefined -Wl,--export-dynamic
That worked well, but here's my first question:
It must be possible to tell the build-system that smbscardd needs -lcrypto
Please let me know how.
There's another problem: My daemon does some sort of initilization
which I copied from smbpasswd.c
In short this initialization looks like:
configfile=get_dyn_CONFIGFILE();
lp_load_global(configfile);
secrets_init();
initialize_password_db(False, NULL);
get_global_sam_sid();
domain=lp_workgroup();
After this initialization the daemon accepts connections and
calls local_change_password()
Works very well but initialize_password_db() produces the
following warning:
no talloc stackframe at
../../source3/passdb/machine_account_secrets.c:60, leaking memory
So here's my second question: How do I avoid this warning?
Peter
More information about the samba
mailing list