# Gaétan's email address has changed, so let's pretend I'm the submitter
submitter 219242 !
tags 219242 patch
kthxbye

On Wed, Nov  5, 2003 at 10:02:34 +0100, Richard Gaétan wrote:

> Some fonctions exported with libsmbclient have currents names therefore 
> it is impossible to incorporate libsmbclient in an other language.
> 
> ex: sys_open , string_set (for use with OCaml)
> 
> $  objdump -R /usr/lib/libsmbclient.so > foo.txt
> $ grep sys_open foo.txt
> 000afcc8 R_386_JUMP_SLOT   sys_open
> $
> 
> I think these fonctions should either renamed in smbc_(old name) or they 
> should be hidden in the binary
> 
Hi,

I rebuilt samba with the attached patch, and the number of symbols
exported by libsmbclient went down from more than 4000 to 51.
The patch adds a version script for this lib, which only exports symbols
matching "smbc_*".  I added tentative detection code for the configure
script, which checks the version of GNU ld.  As far as I know, support
for this was added for GNU ld 2.12 (or at least, that's what libtool.m4
seems to check), released in 2002.
I'll attach a complete debdiff, and the actual patch I dropped in
debian/patches.

Cheers,
Julien
diff -u samba-3.0.25a/debian/patches/series samba-3.0.25a/debian/patches/series
--- samba-3.0.25a/debian/patches/series
+++ samba-3.0.25a/debian/patches/series
@@ -17,4 +17,5 @@
 VERSION.patch
 adapt_machine_creation_script.patch
+version-script.patch
 autoconf.patch
 python-examples.patch
diff -u samba-3.0.25a/debian/patches/autoconf.patch samba-3.0.25a/debian/patches/autoconf.patch
--- samba-3.0.25a/debian/patches/autoconf.patch
+++ samba-3.0.25a/debian/patches/autoconf.patch
@@ -27,9 +27,9 @@
 
 Index: samba-3.0.25a/source/configure
 ===================================================================
---- samba-3.0.25a.orig/source/configure	2007-05-26 07:45:38.604207153 +0200
-+++ samba-3.0.25a/source/configure	2007-05-26 07:46:36.104665243 +0200
-@@ -671,6 +671,9 @@
+--- samba-3.0.25a.orig/source/configure	2007-06-08 23:36:19.000000000 +0200
++++ samba-3.0.25a/source/configure	2007-06-08 23:37:12.000000000 +0200
+@@ -671,11 +671,15 @@
  logfilebase
  privatedir
  swatdir
@@ -39,7 +39,13 @@
  rootsbindir
  pammodulesdir
  SAMBA_CPPFLAGS
-@@ -2139,7 +2142,7 @@
+ LDSHFLAGS
+ SONAMEFLAG
++VERSIONLDFLAGS
+ SHLD
+ HOST_OS
+ PICFLAG
+@@ -2139,7 +2143,7 @@
  if test "${with_fhs+set}" = set; then
    withval=$with_fhs;  case "$withval" in
    yes)
@@ -48,7 +54,7 @@
      piddir="\${VARDIR}/run"
      mandir="\${prefix}/share/man"
      logfilebase="\${VARDIR}/log/samba"
-@@ -2147,6 +2150,14 @@
+@@ -2147,6 +2151,14 @@
      libdir="\${prefix}/lib/samba"
      configdir="\${sysconfdir}/samba"
      swatdir="\${DATADIR}/samba/swat"
@@ -63,17 +69,38 @@
      ;;
    esac
  fi
-@@ -2450,6 +2461,9 @@
+@@ -2450,6 +2462,10 @@
  
  
  
 +
 +
 +
++
  ## check for --enable-debug first before checking CFLAGS before
  ## so that we don't mix -O and -g
  # Check whether --enable-debug was given.
-@@ -11604,6 +11618,27 @@
+@@ -10536,6 +10552,9 @@
+  	if test "$ac_cv_gnu_ld_date" -lt 20030217; then
+  		ac_cv_gnu_ld_no_default_allow_shlib_undefined=yes
+  	fi
++	if test "$ac_cv_gnu_ld_date" -gt 20030101; then
++		ac_cv_gnu_ld_version_script=yes
++	fi
+         else
+            { echo "$as_me:$LINENO: checking GNU ld release version" >&5
+ echo $ECHO_N "checking GNU ld release version... $ECHO_C" >&6; }
+@@ -10555,6 +10574,9 @@
+            if test "$ac_cv_gnu_ld_vernr_major" -lt 2 || test "$ac_cv_gnu_ld_vernr_minor" -lt 14; then
+              ac_cv_gnu_ld_no_default_allow_shlib_undefined=yes
+            fi
++           if test "$ac_cv_gnu_ld_vernr_major" -gt 2 || test "$ac_cv_gnu_ld_vernr_major" = 2 && test "$ac_cv_gnu_ld_vernr_minor" -ge 12; then
++             ac_cv_gnu_ld_version_script=yes
++           fi
+         fi
+ fi
+ 
+@@ -11604,6 +11626,27 @@
        fi
      ;;
  
@@ -101,7 +128,7 @@
  # Tests for linux LFS support. Need kernel 2.4 and glibc2.2 or greater support.
  #
      *linux*)
-@@ -34332,7 +34367,7 @@
+@@ -34332,7 +34375,7 @@
  #
  #
  case "$host_os" in
@@ -110,7 +137,7 @@
         # glibc <= 2.3.2 has a broken getgrouplist
         if test "$cross_compiling" = yes; then
    { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
-@@ -39139,11 +39174,14 @@
+@@ -39139,11 +39182,14 @@
  
    # and these are for particular systems
    case "$host_os" in
@@ -127,7 +154,17 @@
  			BLDSHARED="true"
  			if test "${ac_cv_gnu_ld_no_default_allow_shlib_undefined}" = "yes"; then
  				LDSHFLAGS="-shared -Wl,-Bsymbolic -Wl,--allow-shlib-undefined"
-@@ -61736,7 +61774,7 @@
+@@ -39153,6 +39199,9 @@
+ 			DYNEXP="-Wl,--export-dynamic"
+ 			PICFLAG="-fPIC"
+ 			SONAMEFLAG="-Wl,-soname="
++			if test "${ac_cv_gnu_ld_version_script}" = yes; then
++				VERSIONLDFLAGS="-Wl,--version-script,libsmbclient.syms"
++			fi
+ 			cat >>confdefs.h <<\_ACEOF
+ #define STAT_ST_BLOCKSIZE 512
+ _ACEOF
+@@ -61736,7 +61785,7 @@
  echo "${ECHO_T}yes" >&6; };
  
  	case "$host_os" in
@@ -136,7 +173,7 @@
  		{ echo "$as_me:$LINENO: checking for linux sendfile64 support" >&5
  echo $ECHO_N "checking for linux sendfile64 support... $ECHO_C" >&6; }
  if test "${samba_cv_HAVE_SENDFILE64+set}" = set; then
-@@ -62758,11 +62796,11 @@
+@@ -62758,11 +62807,11 @@
  SMB_KRB5_LOCATOR="bin/smb_krb5_locator.$SHLIBEXT"
  
  case "$host_os" in
@@ -150,7 +187,7 @@
  		# FreeBSD winbind client is implemented as a wrapper around
  		# the Linux version.
  		NSSSONAMEVERSIONSUFFIX=".1"
-@@ -67280,6 +67318,9 @@
+@@ -67280,11 +67329,15 @@
  logfilebase!$logfilebase$ac_delim
  privatedir!$privatedir$ac_delim
  swatdir!$swatdir$ac_delim
@@ -160,39 +197,47 @@
  rootsbindir!$rootsbindir$ac_delim
  pammodulesdir!$pammodulesdir$ac_delim
  SAMBA_CPPFLAGS!$SAMBA_CPPFLAGS$ac_delim
-@@ -67317,9 +67358,6 @@
+ LDSHFLAGS!$LDSHFLAGS$ac_delim
+ SONAMEFLAG!$SONAMEFLAG$ac_delim
++VERSIONLDFLAGS!$VERSIONLDFLAGS$ac_delim
+ SHLD!$SHLD$ac_delim
+ HOST_OS!$HOST_OS$ac_delim
+ PICFLAG!$PICFLAG$ac_delim
+@@ -67316,10 +67369,6 @@
+ ACL_LIBS!$ACL_LIBS$ac_delim
  PASSDB_LIBS!$PASSDB_LIBS$ac_delim
  IDMAP_LIBS!$IDMAP_LIBS$ac_delim
- KRB5_LIBS!$KRB5_LIBS$ac_delim
+-KRB5_LIBS!$KRB5_LIBS$ac_delim
 -UUID_LIBS!$UUID_LIBS$ac_delim
 -LDAP_LIBS!$LDAP_LIBS$ac_delim
 -PAM_MODULES!$PAM_MODULES$ac_delim
  _ACEOF
  
    if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then
-@@ -67361,6 +67399,9 @@
+@@ -67361,6 +67410,10 @@
  ac_delim='%!_!# '
  for ac_last_try in false false false false false :; do
    cat >conf$$subs.sed <<_ACEOF
++KRB5_LIBS!$KRB5_LIBS$ac_delim
 +UUID_LIBS!$UUID_LIBS$ac_delim
 +LDAP_LIBS!$LDAP_LIBS$ac_delim
 +PAM_MODULES!$PAM_MODULES$ac_delim
  INSTALL_PAM_MODULES!$INSTALL_PAM_MODULES$ac_delim
  UNINSTALL_PAM_MODULES!$UNINSTALL_PAM_MODULES$ac_delim
  NSS_MODULES!$NSS_MODULES$ac_delim
-@@ -67444,7 +67485,7 @@
+@@ -67444,7 +67497,7 @@
  LTLIBOBJS!$LTLIBOBJS$ac_delim
  _ACEOF
  
 -  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 81; then
-+  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 84; then
++  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 85; then
      break
    elif $ac_last_try; then
      { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
 Index: samba-3.0.25a/source/include/config.h.in
 ===================================================================
---- samba-3.0.25a.orig/source/include/config.h.in	2007-05-26 07:45:38.616207248 +0200
-+++ samba-3.0.25a/source/include/config.h.in	2007-05-26 07:46:36.112665307 +0200
+--- samba-3.0.25a.orig/source/include/config.h.in	2007-06-08 23:36:19.000000000 +0200
++++ samba-3.0.25a/source/include/config.h.in	2007-06-08 23:37:10.000000000 +0200
 @@ -57,6 +57,9 @@
  /* Define to turn on dmalloc debugging */
  #undef ENABLE_DMALLOC
diff -u samba-3.0.25a/debian/changelog samba-3.0.25a/debian/changelog
--- samba-3.0.25a/debian/changelog
+++ samba-3.0.25a/debian/changelog
@@ -1,3 +1,10 @@
+samba (3.0.25a-1.1) unstable; urgency=low
+
+  * Non-maintainer upload.
+  * Use a version script for libsmbclient to only export public symbols.
+
+ -- Julien Cristau <[EMAIL PROTECTED]>  Fri, 08 Jun 2007 22:54:32 +0200
+
 samba (3.0.25a-1) unstable; urgency=low
 
   [ Christian Perrier ]
only in patch2:
unchanged:
--- samba-3.0.25a.orig/source/include/version.h
+++ samba-3.0.25a/source/include/version.h
@@ -3,5 +3,6 @@
 #define SAMBA_VERSION_MINOR 0
 #define SAMBA_VERSION_RELEASE 25
 #define SAMBA_VERSION_REVISION "a"
+#define SAMBA_VERSION_VENDOR_SUFFIX "Debian"
 #define SAMBA_VERSION_OFFICIAL_STRING "3.0.25a"
 #define SAMBA_VERSION_STRING samba_version_string()
only in patch2:
unchanged:
--- samba-3.0.25a.orig/debian/patches/version-script.patch
+++ samba-3.0.25a/debian/patches/version-script.patch
@@ -0,0 +1,63 @@
+Index: samba-3.0.25a/source/Makefile.in
+===================================================================
+--- samba-3.0.25a.orig/source/Makefile.in	2007-06-08 23:36:12.000000000 +0200
++++ samba-3.0.25a/source/Makefile.in	2007-06-08 23:36:12.000000000 +0200
+@@ -1163,6 +1163,7 @@
+ 	@echo Linking libsmbclient shared library $@
+ 	@$(SHLD) $(LDSHFLAGS) -Wl,-z,defs -o $@ $(LIBSMBCLIENT_OBJ) $(LIBS) \
+ 		$(KRB5LIBS) $(LDAP_LIBS) $(NSCD_LIBS) \
++		@VERSIONLDFLAGS@ \
+ 		@[EMAIL PROTECTED] [EMAIL PROTECTED](LIBSMBCLIENT_MAJOR)
+ 
+ bin/libsmbclient.a: proto_exists $(LIBSMBCLIENT_OBJ)
+Index: samba-3.0.25a/source/configure.in
+===================================================================
+--- samba-3.0.25a.orig/source/configure.in	2007-06-08 23:36:12.000000000 +0200
++++ samba-3.0.25a/source/configure.in	2007-06-08 23:36:36.000000000 +0200
+@@ -267,6 +267,7 @@
+ AC_SUBST(SHELL)
+ AC_SUBST(LDSHFLAGS)
+ AC_SUBST(SONAMEFLAG)
++AC_SUBST(VERSIONLDFLAGS)
+ AC_SUBST(SHLD)
+ AC_SUBST(HOST_OS)
+ AC_SUBST(PICFLAG)
+@@ -456,6 +457,9 @@
+  	if test "$ac_cv_gnu_ld_date" -lt 20030217; then
+  		ac_cv_gnu_ld_no_default_allow_shlib_undefined=yes
+  	fi
++	if test "$ac_cv_gnu_ld_date" -gt 20030101; then
++		ac_cv_gnu_ld_version_script=yes
++	fi
+         else
+            AC_MSG_CHECKING(GNU ld release version)
+            changequote(,)dnl
+@@ -471,6 +475,9 @@
+            if test "$ac_cv_gnu_ld_vernr_major" -lt 2 || test "$ac_cv_gnu_ld_vernr_minor" -lt 14; then
+              ac_cv_gnu_ld_no_default_allow_shlib_undefined=yes
+            fi
++           if test "$ac_cv_gnu_ld_vernr_major" -gt 2 || test "$ac_cv_gnu_ld_vernr_major" = 2 && test "$ac_cv_gnu_ld_vernr_minor" -ge 12; then
++             ac_cv_gnu_ld_version_script=yes
++           fi
+         fi
+ fi
+ 
+@@ -1703,6 +1710,9 @@
+ 			DYNEXP="-Wl,--export-dynamic"
+ 			PICFLAG="-fPIC"
+ 			SONAMEFLAG="-Wl,-soname="
++			if test "${ac_cv_gnu_ld_version_script}" = yes; then
++				VERSIONLDFLAGS="-Wl,--version-script,libsmbclient.syms"
++			fi
+ 			AC_DEFINE(STAT_ST_BLOCKSIZE,512)
+ 			;;
+ 		*solaris*) AC_DEFINE(SUNOS5,1,[Whether the host os is solaris])
+Index: samba-3.0.25a/source/libsmbclient.syms
+===================================================================
+--- /dev/null	1970-01-01 00:00:00.000000000 +0000
++++ samba-3.0.25a/source/libsmbclient.syms	2007-06-08 23:36:12.000000000 +0200
+@@ -0,0 +1,4 @@
++{
++	global: smbc_*;
++	local: *;
++};
Index: samba-3.0.25a/source/Makefile.in
===================================================================
--- samba-3.0.25a.orig/source/Makefile.in	2007-06-08 23:36:12.000000000 +0200
+++ samba-3.0.25a/source/Makefile.in	2007-06-08 23:36:12.000000000 +0200
@@ -1163,6 +1163,7 @@
 	@echo Linking libsmbclient shared library $@
 	@$(SHLD) $(LDSHFLAGS) -Wl,-z,defs -o $@ $(LIBSMBCLIENT_OBJ) $(LIBS) \
 		$(KRB5LIBS) $(LDAP_LIBS) $(NSCD_LIBS) \
+		@VERSIONLDFLAGS@ \
 		@[EMAIL PROTECTED] [EMAIL PROTECTED](LIBSMBCLIENT_MAJOR)
 
 bin/libsmbclient.a: proto_exists $(LIBSMBCLIENT_OBJ)
Index: samba-3.0.25a/source/configure.in
===================================================================
--- samba-3.0.25a.orig/source/configure.in	2007-06-08 23:36:12.000000000 +0200
+++ samba-3.0.25a/source/configure.in	2007-06-08 23:36:36.000000000 +0200
@@ -267,6 +267,7 @@
 AC_SUBST(SHELL)
 AC_SUBST(LDSHFLAGS)
 AC_SUBST(SONAMEFLAG)
+AC_SUBST(VERSIONLDFLAGS)
 AC_SUBST(SHLD)
 AC_SUBST(HOST_OS)
 AC_SUBST(PICFLAG)
@@ -456,6 +457,9 @@
  	if test "$ac_cv_gnu_ld_date" -lt 20030217; then
  		ac_cv_gnu_ld_no_default_allow_shlib_undefined=yes
  	fi
+	if test "$ac_cv_gnu_ld_date" -gt 20030101; then
+		ac_cv_gnu_ld_version_script=yes
+	fi
         else
            AC_MSG_CHECKING(GNU ld release version)
            changequote(,)dnl
@@ -471,6 +475,9 @@
            if test "$ac_cv_gnu_ld_vernr_major" -lt 2 || test "$ac_cv_gnu_ld_vernr_minor" -lt 14; then
              ac_cv_gnu_ld_no_default_allow_shlib_undefined=yes
            fi
+           if test "$ac_cv_gnu_ld_vernr_major" -gt 2 || test "$ac_cv_gnu_ld_vernr_major" = 2 && test "$ac_cv_gnu_ld_vernr_minor" -ge 12; then
+             ac_cv_gnu_ld_version_script=yes
+           fi
         fi
 fi
 
@@ -1703,6 +1710,9 @@
 			DYNEXP="-Wl,--export-dynamic"
 			PICFLAG="-fPIC"
 			SONAMEFLAG="-Wl,-soname="
+			if test "${ac_cv_gnu_ld_version_script}" = yes; then
+				VERSIONLDFLAGS="-Wl,--version-script,libsmbclient.syms"
+			fi
 			AC_DEFINE(STAT_ST_BLOCKSIZE,512)
 			;;
 		*solaris*) AC_DEFINE(SUNOS5,1,[Whether the host os is solaris])
Index: samba-3.0.25a/source/libsmbclient.syms
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ samba-3.0.25a/source/libsmbclient.syms	2007-06-08 23:36:12.000000000 +0200
@@ -0,0 +1,4 @@
+{
+	global: smbc_*;
+	local: *;
+};

Attachment: signature.asc
Description: Digital signature

Reply via email to