[SSSD] [PATCH] libwbclient-sssd: update interface to version 0.12

Sumit Bose sbose at redhat.com
Mon May 11 16:26:24 UTC 2015


On Mon, May 11, 2015 at 09:12:38AM +0200, Lukas Slebodnik wrote:
> On (06/05/15 16:25), Sumit Bose wrote:
> >Hi,
> >
> >with Samba-4.2.x libwbclient has a new interface version because new
> >calls were added which have an opaque context as an argument to allow
> >threaded applications to send multiple requests to winbind in parallel.
> >
> >This patch adds the new interface but so far does not implement any calls.
> >
> >We have a similar issue in SSSD, all applications either single all
> >multi-threaded use a single file-descriptor to talk to the SSSD
> >responders and the requests are serialized. Originally the only clients
> >were the NSS and PAM client code where there was no way around it
> >because the PAM and NSS interface do not provide a way to pass a
> >thread-local context.
> >
> >Nowadays there are applications like 389ds running on a FreeIPA server
> >which want to get data exclusively from SSSD which can use more enhanced
> >interface. So I think it would make sense to consider an enhancement to
> >the low-level client communication code similar to the changes done in
> >Samba so that threads can get an individual file-descriptors to talk to
> >the responders. When this is done the new context aware libwbclient
> >calls can be implemented (as long as it is possible).
> >
> >bye,
> >Sumit
> 
> >From 137f33cdb7429ec4aeafd8ca4856bc1527e30443 Mon Sep 17 00:00:00 2001
> >From: Sumit Bose <sbose at redhat.com>
> >Date: Wed, 6 May 2015 13:07:54 +0200
> >Subject: [PATCH] libwbclient-sssd: update interface to version 0.12
> >
> >This patch adds the new interface version 0.12 to libwbclient-sssd. The
> >old version can still be generated with the --with-libwbclient-011
> >configure option.
> >
> >This patch does not add an implementation of the new calls because first
> >the SSSD client code has to be made thread friendly similar to Samba's
> >libwbclient.
> >---
> > Makefile.am                                        |  30 +-
> > configure.ac                                       |   1 +
> > src/conf_macros.m4                                 |  26 +
> > src/sss_client/libwbclient/wbc_ctx_sssd.c          | 396 ++++++++++
> > .../{wbclient.exports => wbclient-0.11.exports}    |   4 +-
> > src/sss_client/libwbclient/wbclient.exports        |  62 +-
> > .../{wbclient_sssd.h => wbclient_sssd-0.11.h}      |   0
> > src/sss_client/libwbclient/wbclient_sssd.h         | 853 ++++++++++++++++++---
> > src/sss_client/libwbclient/wbclient_sssd.pc.in     |   2 +-
> > 9 files changed, 1267 insertions(+), 107 deletions(-)
> > create mode 100644 src/sss_client/libwbclient/wbc_ctx_sssd.c
> > copy src/sss_client/libwbclient/{wbclient.exports => wbclient-0.11.exports} (98%)
> > copy src/sss_client/libwbclient/{wbclient_sssd.h => wbclient_sssd-0.11.h} (100%)
> >
> >diff --git a/Makefile.am b/Makefile.am
> >index 0aad222c1276b76607ec2d0e5c6b411d3b17b0a7..ce83e2ecd9151179e05ad37cbfe5aee86d384741 100644
> >--- a/Makefile.am
> >+++ b/Makefile.am
> >@@ -887,7 +887,10 @@ libwbclient_LTLIBRARIES = libwbclient.la
> > pkgconfig_DATA += src/sss_client/libwbclient/wbclient_sssd.pc
> > 
> > EXTRA_libwbclient_la_DEPENDENCIES = \
> >-    src/sss_client/libwbclient/wbclient.exports
> >+    src/sss_client/libwbclient/wbclient.exports \
> >+    src/sss_client/libwbclient/wbclient-0.11.exports \
> >+    $(NULL)
> >+
> > libwbclient_la_SOURCES = \
> >     src/sss_client/libwbclient/wbc_guid.c \
> >     src/sss_client/libwbclient/wbc_idmap_common.c \
> >@@ -900,17 +903,34 @@ libwbclient_la_SOURCES = \
> >     src/sss_client/libwbclient/wbc_sid_sssd.c \
> >     src/sss_client/libwbclient/wbc_sssd_internal.h \
> >     src/sss_client/libwbclient/wbc_util_common.c \
> >-    src/sss_client/libwbclient/wbc_util_sssd.c
> >+    src/sss_client/libwbclient/wbc_util_sssd.c \
> >+    src/sss_client/libwbclient/wbc_ctx_sssd.c \
> >+    $(NULL)
> > libwbclient_la_LIBADD = \
> >     libsss_nss_idmap.la \
> >-    $(CLIENT_LIBS)
> >+    $(CLIENT_LIBS) \
> >+    $(NULL)
> >+
> >+if BUILD_LIBWBCLIENT_011
> > libwbclient_la_LDFLAGS = \
> >-    -Wl,--version-script,$(srcdir)/src/sss_client/libwbclient/wbclient.exports \
> >+    -Wl,--version-script,$(srcdir)/src/sss_client/libwbclient/wbclient-0.11.exports \
> >     -version-info 11:0:11
> > 
> >-dist_noinst_DATA += src/sss_client/libwbclient/wbclient.exports
> >+include_HEADERS += src/sss_client/libwbclient/wbclient_sssd-0.11.h
> >+dist_noinst_HEADERS += src/sss_client/libwbclient/wbclient_sssd.h
> >+else #BUILD_LIBWBCLIENT_011
> >+libwbclient_la_LDFLAGS = \
> >+    -Wl,--version-script,$(srcdir)/src/sss_client/libwbclient/wbclient.exports \
> >+    -version-info 12:0:12
> > 
> > include_HEADERS += src/sss_client/libwbclient/wbclient_sssd.h
> >+dist_noinst_HEADERS += src/sss_client/libwbclient/wbclient_sssd-0.11.h
> >+endif
> >+
> >+dist_noinst_DATA += src/sss_client/libwbclient/wbclient.exports \
> >+    src/sss_client/libwbclient/wbclient-0.11.exports \
> >+    $(NULL)
> >+
> > endif #BUILD_LIBWBCLIENT
> > 
> > if BUILD_IFP
> >diff --git a/configure.ac b/configure.ac
> >index 1f9c6f86772890bb0e269287d58aa6ea46e59ee1..15b421515aab4dc6e9f5a9e29670bdbe76313e0c 100644
> >--- a/configure.ac
> >+++ b/configure.ac
> >@@ -137,6 +137,7 @@ WITH_SAMBA
> > WITH_NFS
> > WITH_NFS_LIB_PATH
> > WITH_LIBWBCLIENT
> >+WITH_LIBWBCLIENT_011
> > WITH_SSSD_USER
> > 
> > m4_include([src/external/pkg.m4])
> >diff --git a/src/conf_macros.m4 b/src/conf_macros.m4
> >index 9ed0a4c44c209e88fc896d0cd3040cb572b358c9..728da445282d76d4048ef2a105b45954a961cbdb 100644
> >--- a/src/conf_macros.m4
> >+++ b/src/conf_macros.m4
> >@@ -698,10 +698,36 @@ AC_DEFUN([WITH_LIBWBCLIENT],
> > 
> >     if test x"$with_libwbclient" = xyes; then
> >         AC_DEFINE(BUILD_LIBWBCLIENT, 1, [whether to build SSSD implementation of libwbclient])
> >+
> >+        libwbclient_version="0.12"
> >+        AC_SUBST(libwbclient_version)
> >     fi
> >     AM_CONDITIONAL([BUILD_LIBWBCLIENT], [test x"$with_libwbclient" = xyes])
> >+    AM_CONDITIONAL([BUILD_LIBWBCLIENT_011], [test x = y])
> >   ])
> > 
> >+AC_DEFUN([WITH_LIBWBCLIENT_011],
> >+  [ AC_ARG_WITH([libwbclient_011],
> >+                [AC_HELP_STRING([--with-libwbclient-0.11],
> >+                                [Whether to build version 0.11 of SSSD implementation of libwbclient [no]]
> >+                               )
> >+                ],
> >+                [with_libwbclient_011=$withval],
> >+                with_libwbclient_011=no
> >+               )
> >+
> >+    if test x"$with_libwbclient_011" = xyes; then
> >+        AC_DEFINE(BUILD_LIBWBCLIENT, 1, [whether to build SSSD implementation of libwbclient])
> >+        AC_DEFINE(BUILD_LIBWBCLIENT_011, 1, [whether to build version 0.11 of SSSD implementation of libwbclient])
> >+
> >+        libwbclient_version="0.11"
> >+        AC_SUBST(libwbclient_version)
> >+    fi
> >+    AM_CONDITIONAL([BUILD_LIBWBCLIENT], [test x"$with_libwbclient" = xyes])
> >+    AM_CONDITIONAL([BUILD_LIBWBCLIENT_011], [test x"$with_libwbclient_011" = xyes])
> >+  ])
> >+
> >+
> 
> I would prefer to keep it simple.
> 
> libwbclient.so.0.12 is backward compatible with libwbclient.so.0.11.
> Just new functions were added.
> 
> It means that each program which was compiled with libwbclient.so.0.11 will
> work with libwbclient.so.0.12 as well. We needn't complicate our life with two
> versions of libwbclient.

In general I agree. But my intend was to make it easy for distributions
and other integrators to build and use libwbclient-sssd for older samba
versions using 0.11 without irritating the users. So I would prefer to
do it this way for a start and try to get some experience and feedback
if it is needed by other and switch to a different scheme later, because
I agree that was cannot do this for ever.

bye,
Sumit

> We would need to do it in case of soname bump libwbclient.so.1.0
> 
> BTW. Functions from version 0.11 are not used by samba either
> 
> [root at 7d9680173b99 /]# rpm -q --requires samba-winbind | grep -i wbclient
> [root at 7d9680173b99 /]# rpm -q --requires samba-winbind-modules | grep -i wbclient
>   libwbclient = 2:4.2.1-7.fc23
>   libwbclient.so.0()(64bit)
>   libwbclient.so.0(WBCLIENT_0.9)(64bit)
> [root at 7d9680173b99 /]# rpm -q --requires samba-winbind-clients | grep -i wbclient
>   libwbclient = 2:4.2.1-7.fc23
>   libwbclient.so.0()(64bit)
>   libwbclient.so.0(WBCLIENT_0.10)(64bit)
>   libwbclient.so.0(WBCLIENT_0.9)(64bit)
> 
> [root at 7d9680173b99 /]# objdump -p /usr/lib64/sssd/modules/libwbclient.so.0.11.0  | grep -A7 "Version definitions:" 
>   Version definitions:
>   1 0x01 0x08faa220 libwbclient.so.0
>   2 0x00 0x0d90a3c9 WBCLIENT_0.9
>   3 0x00 0x090a3c90 WBCLIENT_0.10
>           WBCLIENT_0.9 
>   4 0x00 0x090a3c91 WBCLIENT_0.11
> 
>   Version References:
> [root at 7d9680173b99 /]# objdump -p /usr/lib64/samba/wbclient/libwbclient.so.0.12  | grep -A9 "Version definitions:" 
>   Version definitions:
>   1 0x01 0x08faa220 libwbclient.so.0
>   2 0x00 0x0d90a3c9 WBCLIENT_0.9
>   3 0x00 0x090a3c90 WBCLIENT_0.10
>           WBCLIENT_0.9 
>   4 0x02 0x090a3c91 WBCLIENT_0.11
>           WBCLIENT_0.10 
>   5 0x00 0x090a3c92 WBCLIENT_0.12
>   
>   Version References:
> 
> LS
> _______________________________________________
> sssd-devel mailing list
> sssd-devel at lists.fedorahosted.org
> https://lists.fedorahosted.org/mailman/listinfo/sssd-devel



More information about the sssd-devel mailing list