You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openoffice.apache.org by tr...@apache.org on 2020/08/23 13:45:21 UTC

[openoffice] branch AOO418 updated: Merge r1851443, r1851449 from trunk:

This is an automated email from the ASF dual-hosted git repository.

truckman pushed a commit to branch AOO418
in repository https://gitbox.apache.org/repos/asf/openoffice.git


The following commit(s) were added to refs/heads/AOO418 by this push:
     new e250bff  Merge r1851443, r1851449 from trunk:
e250bff is described below

commit e250bff13aa73689727285b870c09bdc2d166327
Author: Jim Jagielski <ji...@apache.org>
AuthorDate: Wed Jan 16 14:36:32 2019 +0000

    Merge r1851443, r1851449 from trunk:
    
    Use fakeroot instead of our custom getuid.c LD_PRELOAD hack if available when creating Debian packages. This is because epm and dpkg (et.al.) need to be fooled into thinking that root is creating these packages for the correct permissions.
    
    As long as we have the full path, use it
    
    Reviewed by: jim
    
    git-svn-id: https://svn.apache.org/repos/asf/openoffice/branches/AOO42X@1851450 13f79535-47bb-0310-9956-ffa450edef68
---
 main/configure.in                             |  5 +++++
 main/set_soenv.in                             |  1 +
 main/setup_native/scripts/source/getuid.c     |  7 ++++---
 main/solenv/bin/modules/installer/download.pm | 22 +++++++++++++++++++---
 main/solenv/bin/modules/installer/epmfile.pm  | 16 +++++++++++++---
 main/solenv/bin/modules/installer/worker.pm   | 14 ++++++++++++--
 main/sysui/desktop/debian/makefile.mk         |  8 +++++++-
 7 files changed, 61 insertions(+), 12 deletions(-)

diff --git a/main/configure.in b/main/configure.in
index ae6a4ff..42eb26f 100644
--- a/main/configure.in
+++ b/main/configure.in
@@ -3548,9 +3548,14 @@ msi - Windows .msi
       if test "$PKGMK" = "no"; then
          AC_MSG_ERROR([pkgmk needed for Solaris pkg creation. Install it.])
       fi
+      AC_PATH_PROG(FAKEROOT, fakeroot, no)
+      if test "$FAKEROOT" = "no"; then
+         AC_MSG_WARN([fakeroot recommended for deb creation. Will try with getuid.so hack.])
+      fi
    fi
    AC_SUBST(RPM)
    AC_SUBST(DPKG)
+   AC_SUBST(FAKEROOT)
    AC_SUBST(PKGMK)
 else
    AC_MSG_RESULT([no])
diff --git a/main/set_soenv.in b/main/set_soenv.in
index c6d4525..643f259 100644
--- a/main/set_soenv.in
+++ b/main/set_soenv.in
@@ -1732,6 +1732,7 @@ ToFile( "ENABLE_HYPHEN",	"@ENABLE_HYPHEN@", "e" );
 ToFile( "PERL",              $PERL,              "e" );
 ToFile( "RPM",               "@RPM@",            "e" );
 ToFile( "DPKG",              "@DPKG@",           "e" );
+ToFile( "FAKEROOT",          "@FAKEROOT@",       "e" );
 ToFile( "PKGMK",             "@PKGMK@",          "e" );
 ToFile( "GNUMAKE",           "@GNUMAKE@",        "e" );
 ToFile( "GNUTAR",            "@GNUTAR@",         "e" );
diff --git a/main/setup_native/scripts/source/getuid.c b/main/setup_native/scripts/source/getuid.c
index 45dfebb..8de313c 100644
--- a/main/setup_native/scripts/source/getuid.c
+++ b/main/setup_native/scripts/source/getuid.c
@@ -111,10 +111,11 @@ int fstatat64(int fildes, const char *path, struct stat64  *buf, int flag)
 }
 #elif  defined LINUX
 
-uid_t getuid  (void) {return 0;}
-uid_t geteuid (void) {return 0;}
+uid_t getuid  (void)    {return 0;}
+uid_t geteuid (void)    {return 0;}
+int setgid    (gid_t p) {return 0;}
 
-/* This is to fool tar */
+/* This is to fool epm, tar, dpkg, et.al. into thinking we are root */
 #ifdef X86_64
 int __lxstat(int n, const char *path, struct stat *buf)
 {
diff --git a/main/solenv/bin/modules/installer/download.pm b/main/solenv/bin/modules/installer/download.pm
index 5fb7b8a..d145cc7 100644
--- a/main/solenv/bin/modules/installer/download.pm
+++ b/main/solenv/bin/modules/installer/download.pm
@@ -303,7 +303,12 @@ sub tar_package
 	my ( $installdir, $tarfilename, $getuidlibrary) = @_;
 
 	my $ldpreloadstring = "";
-	if ( $getuidlibrary ne "" ) { $ldpreloadstring = "LD_PRELOAD=" . $getuidlibrary; }
+
+	if ($ENV{'FAKEROOT'} ne "no") {
+		$ldpreloadstring = $ENV{'FAKEROOT'};
+	} else {
+		if ( $getuidlibrary ne "" ) { $ldpreloadstring = "LD_PRELOAD=" . $getuidlibrary; }
+	}
 
 	my $systemcall = "cd $installdir; $ldpreloadstring tar -cf - * > $tarfilename";
 	
@@ -367,8 +372,14 @@ sub create_tar_gz_file_from_package
 	$installer::globals::downloadfileextension = ".tar.gz";
 	my $targzname = $packagename . $installer::globals::downloadfileextension;
 	$installer::globals::downloadfilename = $targzname;
+
 	my $ldpreloadstring = "";
-	if ( $getuidlibrary ne "" ) { $ldpreloadstring = "LD_PRELOAD=" . $getuidlibrary; }
+
+	if ($ENV{'FAKEROOT'} ne "no") {
+		$ldpreloadstring = $ENV{'FAKEROOT'};
+	} else {
+		if ( $getuidlibrary ne "" ) { $ldpreloadstring = "LD_PRELOAD=" . $getuidlibrary; }
+	}
 
 	my $systemcall = "cd $installdir; $ldpreloadstring tar -cf - $packagename | gzip > $targzname";
     $installer::logger::Info->printf("... %s ...\n", $systemcall);
@@ -795,7 +806,12 @@ sub create_tar_gz_file_from_directory
 	installer::pathanalyzer::get_path_from_fullqualifiedname(\$changedir);
 
 	my $ldpreloadstring = "";
-	if ( $getuidlibrary ne "" ) { $ldpreloadstring = "LD_PRELOAD=" . $getuidlibrary; }
+
+	if ($ENV{'FAKEROOT'} ne "no") {
+		$ldpreloadstring = $ENV{'FAKEROOT'};
+	} else {
+		if ( $getuidlibrary ne "" ) { $ldpreloadstring = "LD_PRELOAD=" . $getuidlibrary; }
+	}
 
 	$installer::globals::downloadfileextension = ".tar.gz";
 	$installer::globals::downloadfilename = $downloadfilename . $installer::globals::downloadfileextension;
diff --git a/main/solenv/bin/modules/installer/epmfile.pm b/main/solenv/bin/modules/installer/epmfile.pm
index c961d0e..c577ae2 100644
--- a/main/solenv/bin/modules/installer/epmfile.pm
+++ b/main/solenv/bin/modules/installer/epmfile.pm
@@ -887,10 +887,20 @@ sub get_ld_preload_string
 
 	my $getuidlibraryname = "getuid.so";
 
+	my $ldpreloadstring;
+
 	my $getuidlibraryref = installer::scriptitems::get_sourcepath_from_filename_and_includepath(\$getuidlibraryname, $includepatharrayref, 0);
-	if ($$getuidlibraryref eq "") { installer::exiter::exit_program("ERROR: Could not find $getuidlibraryname!", "get_ld_preload_string"); }
 
-	my $ldpreloadstring = "LD_PRELOAD=" . $$getuidlibraryref;
+	if ($ENV{'FAKEROOT'} ne "no") {
+
+		$ldpreloadstring = $ENV{'FAKEROOT'};
+
+	} else {
+
+		if ($$getuidlibraryref eq "") { installer::exiter::exit_program("ERROR: Could not find $getuidlibraryname!", "get_ld_preload_string"); }
+
+		my $ldpreloadstring = "LD_PRELOAD=" . $$getuidlibraryref;
+	}
 	
 	return $ldpreloadstring;
 }
@@ -914,7 +924,7 @@ sub call_epm
 	my $outdirstring = "";
 	if ( $installer::globals::epmoutpath ne "" ) { $outdirstring = " --output-dir $installer::globals::epmoutpath"; }
 	
-	# Debian package build needs a LD_PRELOAD for correct rights
+	# Debian package build needs fakeroot or our LD_PRELOAD hack for correct rights
 	
 	my $ldpreloadstring = "";
 	
diff --git a/main/solenv/bin/modules/installer/worker.pm b/main/solenv/bin/modules/installer/worker.pm
index a348022..78e0dc7 100644
--- a/main/solenv/bin/modules/installer/worker.pm
+++ b/main/solenv/bin/modules/installer/worker.pm
@@ -3199,7 +3199,12 @@ sub tar_package
 	my ( $installdir, $packagename, $tarfilename, $getuidlibrary) = @_;
 
 	my $ldpreloadstring = "";
-	if ( $getuidlibrary ne "" ) { $ldpreloadstring = "LD_PRELOAD=" . $getuidlibrary; }
+
+	if ($ENV{'FAKEROOT'} ne "no") {
+		$ldpreloadstring = $ENV{'FAKEROOT'};
+	} else {
+		if ( $getuidlibrary ne "" ) { $ldpreloadstring = "LD_PRELOAD=" . $getuidlibrary; }
+	}
 
 	my $systemcall = "cd $installdir; $ldpreloadstring tar -cf - $packagename > $tarfilename";
 	# my $systemcall = "cd $installdir; $ldpreloadstring tar -cf - * > $tarfilename";
@@ -3238,7 +3243,12 @@ sub untar_package
 	my ( $installdir, $tarfilename, $getuidlibrary) = @_;
 
 	my $ldpreloadstring = "";
-	if ( $getuidlibrary ne "" ) { $ldpreloadstring = "LD_PRELOAD=" . $getuidlibrary; }
+
+	if ($ENV{'FAKEROOT'} ne "no") {
+		$ldpreloadstring = $ENV{'FAKEROOT'};
+	} else {
+		if ( $getuidlibrary ne "" ) { $ldpreloadstring = "LD_PRELOAD=" . $getuidlibrary; }
+	}
 
 	my $systemcall = "cd $installdir; $ldpreloadstring tar -xf $tarfilename";
 	
diff --git a/main/sysui/desktop/debian/makefile.mk b/main/sysui/desktop/debian/makefile.mk
index b8873a7..de6d7d0 100644
--- a/main/sysui/desktop/debian/makefile.mk
+++ b/main/sysui/desktop/debian/makefile.mk
@@ -45,6 +45,12 @@ DEBFILES=$(foreach,i,{$(PRODUCTLIST)} $(PKGDIR)$/$i4.1-$(TARGET)-menus_$(PKGVERS
 
 .ENDIF
 
+.IF "$(FAKEROOT)"!="no"
+FAKEROOT2="$(FAKEROOT)"
+.ELSE
+FAKEROOT2="LD_PRELOAD=$(SOLARBINDIR)/getuid.so"
+.ENDIF
+
 # --- Targets -------------------------------------------------------
 
 .INCLUDE :  target.mk
@@ -85,7 +91,7 @@ $(DEBFILES) : makefile.mk control postinst postrm prerm
 	@chmod a+rx $(MISC)$/$(@:b)$/DEBIAN $(MISC)/$(@:b)/DEBIAN/post* $(MISC)/$(@:b)/DEBIAN/pre*
 	@chmod g-s $(MISC)/$(@:b)/DEBIAN
 	@mkdir -p $(PKGDIR)
-	/bin/bash -c "LD_PRELOAD=$(SOLARBINDIR)/getuid.so dpkg-deb --build $(MISC)/$(@:b) $@" 
+	/bin/bash -c "$(FAKEROOT2) dpkg-deb --build $(MISC)/$(@:b) $@" 
 	$(RM) -r $(MISC)$/$(@:b)
 #	@chmod -R g+w $(MISC)/$(TARGET)/$(DEBFILE:f)