#!/usr/bin/env python from waflib import Utils import sys host_os = sys.platform bld.SAMBA_BINARY('nsstest', source='nsstest.c', deps='replace dl', for_selftest=True ) if bld.CONFIG_SET('HAVE_PTHREAD'): bld.SAMBA_BINARY('stress-nss-libwbclient', source='stress-nss-libwbclient.c', deps='wbclient pthread', for_selftest=True ) # The nss_wrapper code relies strictly on the linux implementation and # name, so compile but do not install a copy under this name. bld.SAMBA_PLUGIN('nss_wrapper_winbind', cflags='-D_PUBLIC_ON_LINUX_=_PUBLIC_', source='winbind_nss_linux.c', deps='wbclient', realname='libnss_wrapper_winbind.so.2', install=False, vnum='2') # FIXME: original was *linux* | gnu* | k*bsd*-gnu | kopensolaris*-gnu) # the search for .rfind('gnu') covers gnu* and *-gnu is that too broad? if (Utils.unversioned_sys_platform() == 'linux' or (host_os.rfind('gnu') > -1)): bld.SAMBA_PLUGIN('nss_winbind', keep_underscore=True, cflags='-D_PUBLIC_ON_LINUX_=_PUBLIC_', source='winbind_nss_linux.c', deps='wbclient', realname='libnss_winbind.so.2', soname='libnss_winbind.so.2', vnum='2') bld.SAMBA3_PLUGIN('nss_wins', keep_underscore=True, cflags='-D_PUBLIC_ON_LINUX_=_PUBLIC_', source='wins.c', deps='wbclient replace', realname='libnss_wins.so.2', soname='libnss_wins.so.2', vnum='2') elif (host_os.rfind('freebsd') > -1): # FreeBSD winbind client is implemented as a wrapper around # the Linux version. bld.SAMBA_PLUGIN('nss_winbind', source='winbind_nss_linux.c winbind_nss_freebsd.c', deps='wbclient', realname='nss_winbind.so.1', vnum='1') bld.SAMBA3_PLUGIN('nss_wins', source='wins.c wins_freebsd.c', deps='''wbclient''', realname='nss_wins.so.1', vnum='1') elif (host_os.rfind('netbsd') > -1): # NetBSD winbind client is implemented as a wrapper # around the Linux version. It needs getpwent_r() to # indicate libc's use of the correct nsdispatch API. if bld.CONFIG_SET("HAVE_GETPWENT_R"): bld.SAMBA_PLUGIN('nss_winbind', source='winbind_nss_linux.c winbind_nss_netbsd.c', deps='wbclient', realname='libnss_winbind.so') elif Utils.unversioned_sys_platform() == 'sunos': bld.SAMBA_PLUGIN('nss_winbind', source='winbind_nss_solaris.c winbind_nss_linux.c', deps='wbclient', realname='nss_winbind.so.1', vnum='1') elif (host_os.rfind('hpux') > -1): bld.SAMBA_PLUGIN('nss_winbind', source='winbind_nss_linux.c', deps='wbclient', realname='libnss_winbind.so') elif (host_os.rfind('aix') > -1): bld.SAMBA_PLUGIN('nss_winbind', source='winbind_nss_aix.c', deps='wbclient', realname='WINBIND') if bld.CONFIG_SET('WITH_PAM_MODULES') and bld.CONFIG_SET('HAVE_PAM_START'): bld.SAMBA_PLUGIN('pamwinbind', source='pam_winbind.c', deps='talloc wbclient tiniparser pam samba_intl', cflags='-DLOCALEDIR=\"%s/locale\"' % bld.env.DATADIR, realname='pam_winbind.so', install_path='${PAMMODULESDIR}' ) if bld.CONFIG_GET("USING_SYSTEM_KRB5"): # If we build locator plugins for a # system library we should use builtin # linking of our own subsystems, # while we may link to the system # krb5 libraries. winbind_krb5_require_builtin_deps = True else: # If we build locator plugins for our own heimdal # version we don't want to do builtin linking. # As we're already using private libraries # it's not a problem... winbind_krb5_require_builtin_deps = False if bld.CONFIG_SET('HAVE_KRB5_LOCATE_PLUGIN_H'): bld.SAMBA_PLUGIN('winbind_krb5_locator', source='krb5_plugin/winbind_krb5_locator.c', deps='wbclient krb5 com_err', require_builtin_deps=winbind_krb5_require_builtin_deps, realname='winbind_krb5_locator.so', install_path='${MODULESDIR}/krb5') if bld.CONFIG_SET('HAVE_KRB5_LOCATE_PLUGIN_H'): # libkrb5.so scans it's plugin directories for files # and calls dlopen()/dlsym() on them. The actual path # depends on MIT vs. Heimdal. # # The async_dns_krb5_locator don't use winbind, # instead it uses almost all of samba directly, # which means everything will be injected # into all processes using the libkrb5.so. # # See https://bugzilla.samba.org/show_bug.cgi?id=14780 # why this is a bad idea. # # We install this plugin (and also the other krb5 plugins) # under Samba's MODULESDIR, it's not available to # libkrb5.so by default. # # Packagers should leave it that way and allow admins # to create symlinks for the plugins they actually want # to be used. bld.SAMBA_PLUGIN('async_dns_krb5_locator', source='krb5_plugin/async_dns_krb5_locator.c', deps=''' talloc addns samba_intl libsmb smbconf KRBCLIENT smbd_base krb5 com_err ''', require_builtin_deps=False, realname='async_dns_krb5_locator.so', install_path='${MODULESDIR}/krb5') if bld.CONFIG_SET('HAVE_KRB5_LOCALAUTH_PLUGIN_H'): bld.SAMBA_PLUGIN('winbind_krb5_localauth', source='krb5_plugin/winbind_krb5_localauth.c', deps='wbclient krb5 com_err', require_builtin_deps=winbind_krb5_require_builtin_deps, realname='winbind_krb5_localauth.so', install_path='${MODULESDIR}/krb5') bld.SAMBA_SUBSYSTEM('WB_REQTRANS', source='wb_reqtrans.c', deps='talloc tevent LIBASYNC_REQ' ) bld.SAMBA_BINARY('wbinfo', source='wbinfo.c', deps='samba-util LIBCLI_AUTH popt cmdline wbclient LIBAFS_SETTOKEN' )