From 4717df1a0e66e51637b7c831d220f144e685277e Mon Sep 17 00:00:00 2001 From: Andreas Schneider Date: Thu, 7 Feb 2013 16:05:43 +0100 Subject: [PATCH] Fix passdb backend ldapsam as module. resolves: #908353 --- samba-4.0.3-fix_pdb_ldapsam.patch | 220 ++++++++++++++++++++++++++++++ samba.spec | 3 + 2 files changed, 223 insertions(+) create mode 100644 samba-4.0.3-fix_pdb_ldapsam.patch diff --git a/samba-4.0.3-fix_pdb_ldapsam.patch b/samba-4.0.3-fix_pdb_ldapsam.patch new file mode 100644 index 0000000..75dca3a --- /dev/null +++ b/samba-4.0.3-fix_pdb_ldapsam.patch @@ -0,0 +1,220 @@ +From 410b045c45006ae9c3f2bbcafb07d6ac8c615a56 Mon Sep 17 00:00:00 2001 +From: Andreas Schneider +Date: Mon, 28 Jan 2013 16:16:42 +0100 +Subject: [PATCH 1/3] Rename pdb_ldap to pdb_ldapsam + +This patch moves pdb_ldap to pdb_ldapsam unconditionally +and makes possible to load ldapsam.so dynamically + +Reviewed-by: Alexander Bokovoy +--- + source3/passdb/pdb_ipa.c | 2 +- + source3/passdb/pdb_ldap.c | 12 +++++++++--- + source3/passdb/pdb_ldap.h | 4 ++-- + source3/passdb/pdb_nds.c | 2 +- + source3/passdb/wscript_build | 6 +++--- + source3/wscript | 2 +- + 6 files changed, 17 insertions(+), 11 deletions(-) + +diff --git a/source3/passdb/pdb_ipa.c b/source3/passdb/pdb_ipa.c +index d31b37f..a699aab 100644 +--- a/source3/passdb/pdb_ipa.c ++++ b/source3/passdb/pdb_ipa.c +@@ -1446,7 +1446,7 @@ static NTSTATUS pdb_init_IPA_ldapsam(struct pdb_methods **pdb_method, const char + struct ldapsam_privates *ldap_state; + NTSTATUS status; + +- status = pdb_init_ldapsam(pdb_method, location); ++ status = pdb_ldapsam_init_common(pdb_method, location); + if (!NT_STATUS_IS_OK(status)) { + return status; + } +diff --git a/source3/passdb/pdb_ldap.c b/source3/passdb/pdb_ldap.c +index ca35ef7..7ae9056 100644 +--- a/source3/passdb/pdb_ldap.c ++++ b/source3/passdb/pdb_ldap.c +@@ -6462,7 +6462,8 @@ static NTSTATUS pdb_init_ldapsam_common(struct pdb_methods **pdb_method, const c + Initialise the normal mode for pdb_ldap + *********************************************************************/ + +-NTSTATUS pdb_init_ldapsam(struct pdb_methods **pdb_method, const char *location) ++NTSTATUS pdb_ldapsam_init_common(struct pdb_methods **pdb_method, ++ const char *location) + { + NTSTATUS nt_status; + struct ldapsam_privates *ldap_state = NULL; +@@ -6611,11 +6612,16 @@ NTSTATUS pdb_init_ldapsam(struct pdb_methods **pdb_method, const char *location) + return NT_STATUS_OK; + } + +-NTSTATUS pdb_ldap_init(void) ++NTSTATUS pdb_ldapsam_init(void) + { + NTSTATUS nt_status; +- if (!NT_STATUS_IS_OK(nt_status = smb_register_passdb(PASSDB_INTERFACE_VERSION, "ldapsam", pdb_init_ldapsam))) ++ ++ nt_status = smb_register_passdb(PASSDB_INTERFACE_VERSION, ++ "ldapsam", ++ pdb_ldapsam_init_common); ++ if (!NT_STATUS_IS_OK(nt_status)) { + return nt_status; ++ } + + /* Let pdb_nds register backends */ + pdb_nds_init(); +diff --git a/source3/passdb/pdb_ldap.h b/source3/passdb/pdb_ldap.h +index 1372f33..0420314 100644 +--- a/source3/passdb/pdb_ldap.h ++++ b/source3/passdb/pdb_ldap.h +@@ -29,8 +29,8 @@ + /* The following definitions come from passdb/pdb_ldap.c */ + + const char** get_userattr_list( TALLOC_CTX *mem_ctx, int schema_ver ); +-NTSTATUS pdb_init_ldapsam(struct pdb_methods **pdb_method, const char *location); +-NTSTATUS pdb_ldap_init(void); ++NTSTATUS pdb_ldapsam_init_common(struct pdb_methods **pdb_method, const char *location); ++NTSTATUS pdb_ldapsam_init(void); + int ldapsam_search_suffix_by_name(struct ldapsam_privates *ldap_state, + const char *user, + LDAPMessage ** result, +diff --git a/source3/passdb/pdb_nds.c b/source3/passdb/pdb_nds.c +index cce4937..d7c16da 100644 +--- a/source3/passdb/pdb_nds.c ++++ b/source3/passdb/pdb_nds.c +@@ -878,7 +878,7 @@ static NTSTATUS pdb_init_NDS_ldapsam_common(struct pdb_methods **pdb_method, con + + static NTSTATUS pdb_init_NDS_ldapsam(struct pdb_methods **pdb_method, const char *location) + { +- NTSTATUS nt_status = pdb_init_ldapsam(pdb_method, location); ++ NTSTATUS nt_status = pdb_ldapsam_init_common(pdb_method, location); + + (*pdb_method)->name = "NDS_ldapsam"; + +diff --git a/source3/passdb/wscript_build b/source3/passdb/wscript_build +index 03a0df4..a6620cd 100644 +--- a/source3/passdb/wscript_build ++++ b/source3/passdb/wscript_build +@@ -13,13 +13,13 @@ bld.SAMBA3_MODULE('pdb_tdbsam', + internal_module=bld.SAMBA3_IS_STATIC_MODULE('pdb_tdbsam'), + enabled=bld.SAMBA3_IS_ENABLED_MODULE('pdb_tdbsam')) + +-bld.SAMBA3_MODULE('pdb_ldap', ++bld.SAMBA3_MODULE('pdb_ldapsam', + subsystem='pdb', + deps='smbldap smbldaphelper', + source=PDB_LDAP_SRC, + init_function='', +- internal_module=bld.SAMBA3_IS_STATIC_MODULE('pdb_ldap'), +- enabled=bld.SAMBA3_IS_ENABLED_MODULE('pdb_ldap') and bld.CONFIG_SET('HAVE_LDAP')) ++ internal_module=bld.SAMBA3_IS_STATIC_MODULE('pdb_ldapsam'), ++ enabled=bld.SAMBA3_IS_ENABLED_MODULE('pdb_ldapsam') and bld.CONFIG_SET('HAVE_LDAP')) + + bld.SAMBA3_MODULE('pdb_smbpasswd', + subsystem='pdb', +diff --git a/source3/wscript b/source3/wscript +index 097cd83..34fccb1 100644 +--- a/source3/wscript ++++ b/source3/wscript +@@ -1734,7 +1734,7 @@ main() { + default_shared_modules.extend(TO_LIST('vfs_aio_linux')) + + if conf.CONFIG_SET('HAVE_LDAP'): +- default_static_modules.extend(TO_LIST('pdb_ldap idmap_ldap')) ++ default_static_modules.extend(TO_LIST('pdb_ldapsam idmap_ldap')) + + if conf.CONFIG_SET('DARWINOS'): + default_static_modules.extend(TO_LIST('charset_macosxfs')) +-- +1.8.1.2 + +From 8c7b0ab9b3ae07574c6b5c5ba5888c3f329c9e02 Mon Sep 17 00:00:00 2001 +From: Alexander Bokovoy +Date: Wed, 6 Feb 2013 10:43:16 +0200 +Subject: [PATCH 2/3] source3/wscript: support 'pdb_ldap' module in configure + +While PASSDB module ldapsam is called pdb_ldapsam internally, +support specifying 'pdb_ldap' during configure step. + +This should make transition to pdb_ldapsam transparent to distributions. + +Reviewed-by: Andreas Schneider +--- + source3/wscript | 13 +++++++++++++ + 1 file changed, 13 insertions(+) + +diff --git a/source3/wscript b/source3/wscript +index 34fccb1..194d712 100644 +--- a/source3/wscript ++++ b/source3/wscript +@@ -1745,6 +1745,19 @@ main() { + explicit_shared_modules = TO_LIST(Options.options.shared_modules, delimiter=',') + explicit_static_modules = TO_LIST(Options.options.static_modules, delimiter=',') + ++ def replace_list_item(lst, item, value): ++ try: ++ idx = lst.index(item) ++ lst[idx] = value ++ except: ++ pass ++ # PDB module file name should have the same name as module registers itself ++ # In Autoconf build we export LDAP passdb module as ldapsam but WAF build ++ # was always exporting pdb_ldap. In order to support existing packages ++ # allow referring to pdb_ldapsam as pdb_ldap but use proper name internally. ++ replace_list_item(explicit_shared_modules, 'pdb_ldap', 'pdb_ldapsam') ++ replace_list_item(explicit_static_modules, 'pdb_ldap', 'pdb_ldapsam') ++ + final_static_modules = default_static_modules + final_shared_modules = default_shared_modules + +-- +1.8.1.2 + +From 2b070b226926798fc544f6867721f57a5ec7075c Mon Sep 17 00:00:00 2001 +From: Alexander Bokovoy +Date: Wed, 6 Feb 2013 12:22:12 +0200 +Subject: [PATCH 3/3] autoconf: rename pdb_ldap module to pdb_ldapsam + +Reviewed-by: Andreas Schneider + +Autobuild-User(master): Alexander Bokovoy +Autobuild-Date(master): Wed Feb 6 13:32:53 CET 2013 on sn-devel-104 +--- + source3/configure.in | 9 +++++++-- + 1 file changed, 7 insertions(+), 2 deletions(-) + +diff --git a/source3/configure.in b/source3/configure.in +index d0c2a48..a4e0763 100644 +--- a/source3/configure.in ++++ b/source3/configure.in +@@ -3276,7 +3276,7 @@ if test x"$with_ldap_support" != x"no"; then + if test x"$ac_cv_lib_ext_ldap_ldap_init" = x"yes"; then + AC_DEFINE(HAVE_LDAP,1,[Whether ldap is available]) + CPPFLAGS="$CPPFLAGS -DLDAP_DEPRECATED" +- default_static_modules="$default_static_modules pdb_ldap idmap_ldap"; ++ default_static_modules="$default_static_modules pdb_ldapsam idmap_ldap"; + default_shared_modules="$default_shared_modules"; + SMBLDAP="lib/smbldap.o" + with_ldap_support=yes +@@ -6353,13 +6353,18 @@ AC_ARG_WITH(shared-modules, + done + fi ]) + ++# additionally, support pdb_ldap -> pdb_ldapsam replacement ++if test x"$MODULE_pdb_ldap" != x ; then ++ MODULE_pdb_ldapsam="$MODULE_pdb_ldap" ++fi ++ + if test x"$MODULE_DEFAULT_vfs_notify_fam" = xSTATIC -o \ + x"$MODULE_vfs_notify_fam" = xSTATIC ; then + SMBD_FAM_LIBS="$SMB_FAM_LIBS" + AC_SUBST(SMBD_FAM_LIBS) + fi + +-SMB_MODULE(pdb_ldap, passdb/pdb_ldap.o passdb/pdb_nds.o passdb/pdb_ipa.o passdb/pdb_ldap_util.o, ++SMB_MODULE(pdb_ldapsam, passdb/pdb_ldap.o passdb/pdb_nds.o passdb/pdb_ipa.o passdb/pdb_ldap_util.o, + "bin/ldapsam.$SHLIBEXT", PDB, + [ PASSDB_LIBS="$PASSDB_LIBS $LDAP_LIBS" ] ) + SMB_MODULE(pdb_smbpasswd, passdb/pdb_smbpasswd.o, "bin/smbpasswd.$SHLIBEXT", PDB) +-- +1.8.1.2 + diff --git a/samba.spec b/samba.spec index 82dcaba..e9cf307 100644 --- a/samba.spec +++ b/samba.spec @@ -77,6 +77,7 @@ Source200: README.dc Source201: README.downgrade Patch0: samba-4.0.3-fix_pidl_with_gcc48.patch +Patch1: samba-4.0.3-fix_pdb_ldapsam.patch BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX) @@ -433,6 +434,7 @@ the local kerberos library to use the same KDC as samba and winbind use %setup -q -n samba-%{version}%{pre_release} %patch0 -p1 -b .pidl_gcc48 +%patch1 -p1 -b .pdb_ldapsam %build %global _talloc_lib ,talloc,pytalloc,pytalloc-util @@ -1346,6 +1348,7 @@ rm -rf %{buildroot} - Update to Samba 4.0.3. - resolves: #907544 - Add unowned directory /usr/lib64/samba. - resolves: #906517 - Fix pidl code generation with gcc 4.8. +- resolves: #908353 - Fix passdb backend ldapsam as module. * Wed Jan 30 2013 - Andreas Schneider - 2:4.0.2-1 - Update to Samba 4.0.2.