Dr. Werner Fink 2015-10-19 13:43:05 +00:00 committed by Git OBS Bridge
parent 8a13b9ddf9
commit 1e9d74b410
4 changed files with 114 additions and 0 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,12 @@
-------------------------------------------------------------------
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 Fri Oct 16 13:02:27 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