Accepting request 341009 from Base:System

Automatic submission by obs-autosubmit

OBS-URL: https://build.opensuse.org/request/show/341009
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/bash?expand=0&rev=127
This commit is contained in:
Dominique Leuenberger 2015-10-28 16:15:10 +00:00 committed by Git OBS Bridge
commit 82aa0535bc
4 changed files with 121 additions and 9 deletions

91
bash-4.3-pathtemp.patch Normal file
View File

@ -0,0 +1,91 @@
---
lib/sh/tmpfile.c | 43 +++++++++++++++++++++++++++++++++++++++++++
1 file changed, 43 insertions(+)
--- lib/sh/tmpfile.c
+++ lib/sh/tmpfile.c 2015-10-19 13:35:30.869518731 +0000
@@ -36,6 +36,14 @@
#include <stdio.h>
#include <errno.h>
+#if defined(__linux__)
+# include <sys/statfs.h>
+# include <unistd.h>
+# ifndef TMPFS_MAGIC
+# define TMPFS_MAGIC 0x01021994
+# endif
+#endif
+
#include <shell.h>
#ifndef errno
@@ -60,6 +68,8 @@ static unsigned long filenum = 1L;
static char *
get_sys_tmpdir ()
{
+ static int doshm;
+
if (sys_tmpdir)
return sys_tmpdir;
@@ -86,6 +96,31 @@ get_sys_tmpdir ()
return sys_tmpdir;
}
+#if defined(__linux__)
+static int
+emergency_sys_tmpdir ()
+{
+ static char *shm = "/dev/shm";
+ static size_t pgsz;
+ struct statfs fs;
+ static int doshm;
+
+ if (getuid() != 0)
+ return 0;
+
+ if (doshm)
+ return 0;
+
+ doshm++;
+
+ if (statfs(shm, &fs) < 0 || fs.f_type != TMPFS_MAGIC || eaccess(shm, W_OK|X_OK))
+ return 0;
+
+ sys_tmpdir = shm;
+ return 1;
+}
+#endif
+
static char *
get_tmpdir (flags)
int flags;
@@ -164,6 +199,7 @@ sh_mktmpfd (nameroot, flags, namep)
int fd, tdlen;
filename = (char *)xmalloc (PATH_MAX + 1);
+enospace:
tdir = get_tmpdir (flags);
tdlen = strlen (tdir);
@@ -177,6 +213,10 @@ sh_mktmpfd (nameroot, flags, namep)
free (filename);
filename = NULL;
}
+
+ if (fd < 0 && errno == ENOSPC && emergency_sys_tmpdir())
+ goto enospace;
+
if (namep)
*namep = filename;
return fd;
@@ -194,6 +234,9 @@ sh_mktmpfd (nameroot, flags, namep)
}
while (fd < 0 && errno == EEXIST);
+ if (fd < 0 && errno == ENOSPC && emergency_sys_tmpdir())
+ goto enospace;
+
if (namep)
*namep = filename;
else

View File

@ -49,6 +49,17 @@
/* Define if you want the case-capitalizing operators (~[~]) and the /* Define if you want the case-capitalizing operators (~[~]) and the
`capcase' variable attribute (declare -c). */ `capcase' variable attribute (declare -c). */
@@ -132,3 +136,10 @@
/* Define to 1 if you want to be able to export indexed arrays to processes
using the foo=([0]=one [1]=two) and so on */
/* #define ARRAY_EXPORT 1 */
+
+#ifndef USE_MKTEMP
+# define USE_MKTEMP
+#endif
+#ifndef USE_MKSTEMP
+# define USE_MKSTEMP
+#endif
--- doc/Makefile.in --- doc/Makefile.in
+++ doc/Makefile.in 2006-03-27 12:15:25.000000000 +0000 +++ doc/Makefile.in 2006-03-27 12:15:25.000000000 +0000
@@ -146,7 +146,7 @@ BASHREF_FILES = $(srcdir)/bashref.texi $ @@ -146,7 +146,7 @@ BASHREF_FILES = $(srcdir)/bashref.texi $

View File

@ -1,3 +1,18 @@
-------------------------------------------------------------------
Mon Oct 19 13:38:58 UTC 2015 - werner@suse.de
- Define the USE_MKTEMP and USE_MKSTEMP cpp macros as the
implementation is already there.
- Add patch bash-4.3-pathtemp.patch to allow root to clear the
file systems. Otherwise the completion does not work if /tmp
if full (ENOSPC for here documents)
-------------------------------------------------------------------
Fri Oct 16 13:02:27 UTC 2015 - werner@suse.de
- Remove --hash-size options as there is no any change in the final
binary nor library anymore
------------------------------------------------------------------- -------------------------------------------------------------------
Mon Aug 31 11:23:11 UTC 2015 - werner@suse.de Mon Aug 31 11:23:11 UTC 2015 - werner@suse.de

View File

@ -99,6 +99,8 @@ Patch46: man2html-no-timestamp.patch
Patch47: bash-4.3-perl522.patch Patch47: bash-4.3-perl522.patch
# PATCH-FIX-SUSE # PATCH-FIX-SUSE
Patch48: bash-4.3-extra-import-func.patch Patch48: bash-4.3-extra-import-func.patch
# PATCH-EXTEND-SUSE Allow root to clean file system if filled up
Patch49: bash-4.3-pathtemp.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-build BuildRoot: %{_tmppath}/%{name}-%{version}-build
%global _sysconfdir /etc %global _sysconfdir /etc
%global _incdir %{_includedir} %global _incdir %{_includedir}
@ -319,6 +321,7 @@ done
%if %{with import_function} %if %{with import_function}
%patch48 %patch48
%endif %endif
%patch49
%patch0 -p0 -b .0 %patch0 -p0 -b .0
pushd ../readline-%{rl_vers}%{extend} pushd ../readline-%{rl_vers}%{extend}
for patch in ../readline-%{rl_vers}-patches/*; do for patch in ../readline-%{rl_vers}-patches/*; do
@ -397,13 +400,7 @@ pushd ../readline-%{rl_vers}%{extend}
esac esac
set +o noclobber set +o noclobber
} }
echo 'int main () { return !(sizeof(void*) >= 8); }' | gcc -x c -o test64 - LARGEFILE="$(getconf LFS_CFLAGS)"
if ./test64 ; then
LARGEFILE=""
else
LARGEFILE="-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64"
fi
rm -f ./test64
(cat > dyn.map)<<-'EOF' (cat > dyn.map)<<-'EOF'
{ {
*; *;
@ -442,7 +439,6 @@ pushd ../readline-%{rl_vers}%{extend}
cflags -DIMPORT_FUNCTIONS_DEF=0 CFLAGS cflags -DIMPORT_FUNCTIONS_DEF=0 CFLAGS
cflags -Wl,--as-needed LDFLAGS cflags -Wl,--as-needed LDFLAGS
cflags -Wl,-O2 LDFLAGS cflags -Wl,-O2 LDFLAGS
cflags -Wl,--hash-size=8599 LDFLAGS
cflags -Wl,-rpath,%{_ldldir}/%{bash_vers} LDFLAGS cflags -Wl,-rpath,%{_ldldir}/%{bash_vers} LDFLAGS
cflags -Wl,--version-script=${PWD}/rl.map LDFLAGS cflags -Wl,--version-script=${PWD}/rl.map LDFLAGS
cflags -Wl,--dynamic-list=${PWD}/dyn.map LDFLAGS cflags -Wl,--dynamic-list=${PWD}/dyn.map LDFLAGS
@ -474,7 +470,6 @@ popd
ln -sf ../readline-%{rl_vers} readline ln -sf ../readline-%{rl_vers} readline
LD_LIBRARY_PATH=$PWD/../readline-%{rl_vers} LD_LIBRARY_PATH=$PWD/../readline-%{rl_vers}
export LD_LIBRARY_PATH export LD_LIBRARY_PATH
LDFLAGS="${LDFLAGS/hash-size=8599/hash-size=16699}"
CC="gcc -I$PWD -L$PWD/../readline-%{rl_vers}" CC="gcc -I$PWD -L$PWD/../readline-%{rl_vers}"
%if %_minsh %if %_minsh
cflags -Os CFLAGS cflags -Os CFLAGS