Accepting request 1126551 from Base:System
- Declare token YYEOF to be able to support older bison versions as well - Be sure to have a usable bison installed at build time - Add upstream patches * bash52-021 There is an off-by-one error that causes command substitutions to fail when they appear in a word expansion inside a here-document. * bash52-020 The parser did not allow `time' to appear as the first reserved word in a command substitution. * bash52-019 There are some cases where the shell reaped a background (asynchronous) job and would incorrectly try to set the terminal's process group back to the shell's. In these cases it never set the terminal process group to that jobs's process group initially, so resetting it is incorrect. * bash52-018 There are two problems with returning tokens to yyparse() when the shell encounters a syntax error or when it reads EOF. When reading a WORD token, the parser has to return the correct value to yyparse. Previous versions returned a value < 0, which the bash parser translated into YYERRCODE for bison, and in newer versions of bison, the appropriate reset actions didn't happen. We should return YYUNDEF, which bison uses for `invalid token'. Since we can return a token < 0 for both invalid tokens and EOF, the bash tokenizer needs to differentiate between those two cases. * bash52-017 In certain cases, using the `.' builtin in a subshell would optimize away the rest of the commands in the subshell. OBS-URL: https://build.opensuse.org/request/show/1126551 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/bash?expand=0&rev=188
This commit is contained in:
commit
21f77c1f28
@ -1,6 +0,0 @@
|
||||
targettype x86 package bash
|
||||
+^/usr/bin/bash$
|
||||
+^/usr/bin/sh$
|
||||
+^/bin/bash$
|
||||
+^/bin/sh$
|
||||
prereq -glibc-x86
|
@ -1,65 +0,0 @@
|
||||
---
|
||||
doc/bash.1 | 16 ++++++++++++++++
|
||||
doc/builtins.1 | 2 +-
|
||||
doc/rbash.1 | 2 +-
|
||||
3 files changed, 18 insertions(+), 2 deletions(-)
|
||||
|
||||
--- doc/bash.1
|
||||
+++ doc/bash.1 2018-11-29 08:09:41.735675837 +0000
|
||||
@@ -122,6 +122,12 @@ This option allows the positional parame
|
||||
when invoking an interactive shell or when reading input
|
||||
through a pipe.
|
||||
.TP
|
||||
+.B \-v
|
||||
+Print shell input lines as they are read.
|
||||
+.TP
|
||||
+.B \-x
|
||||
+Print commands and their arguments as they are executed.
|
||||
+.TP
|
||||
.B \-D
|
||||
A list of all double-quoted strings preceded by \fB$\fP
|
||||
is printed on the standard output.
|
||||
@@ -7667,6 +7673,11 @@ Apply the following `\fBs\fP' modifier o
|
||||
.SH "SHELL BUILTIN COMMANDS"
|
||||
.\" start of bash_builtins
|
||||
.zZ
|
||||
+.if !dFN \{\
|
||||
+.de FN
|
||||
+\fI\|\\$1\|\fP
|
||||
+..
|
||||
+.\}
|
||||
.PP
|
||||
Unless otherwise noted, each builtin command documented in this
|
||||
section as accepting options preceded by
|
||||
@@ -11543,6 +11554,11 @@ process or job waited for.
|
||||
.SH "RESTRICTED SHELL"
|
||||
.\" rbash.1
|
||||
.zY
|
||||
+.if !dFN \{\
|
||||
+.de FN
|
||||
+\fI\|\\$1\|\fP
|
||||
+..
|
||||
+.\}
|
||||
.PP
|
||||
If
|
||||
.B bash
|
||||
--- doc/builtins.1
|
||||
+++ doc/builtins.1 2018-11-29 08:09:41.735675837 +0000
|
||||
@@ -19,6 +19,6 @@ shift, shopt, source, suspend, test, tim
|
||||
ulimit, umask, unalias, unset, wait \- bash built-in commands, see \fBbash\fR(1)
|
||||
.SH BASH BUILTIN COMMANDS
|
||||
.nr zZ 1
|
||||
-.so bash.1
|
||||
+.so /usr/share/man/man1/bash.1
|
||||
.SH SEE ALSO
|
||||
bash(1), sh(1)
|
||||
--- doc/rbash.1
|
||||
+++ doc/rbash.1 2018-11-29 08:09:41.735675837 +0000
|
||||
@@ -3,6 +3,6 @@
|
||||
rbash \- restricted bash, see \fBbash\fR(1)
|
||||
.SH RESTRICTED SHELL
|
||||
.nr zY 1
|
||||
-.so bash.1
|
||||
+.so /usr/share/man/man1/bash.1
|
||||
.SH SEE ALSO
|
||||
bash(1)
|
@ -1,17 +0,0 @@
|
||||
---
|
||||
expr.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
--- expr.c
|
||||
+++ expr.c 2018-11-29 08:10:59.542212175 +0000
|
||||
@@ -514,8 +514,8 @@ expassign ()
|
||||
value = expcond ();
|
||||
if (curtok == EQ || curtok == OP_ASSIGN)
|
||||
{
|
||||
- int special, op;
|
||||
- intmax_t lvalue;
|
||||
+ int special, op = -1;
|
||||
+ intmax_t lvalue = 0;
|
||||
|
||||
special = curtok == OP_ASSIGN;
|
||||
|
@ -1,33 +0,0 @@
|
||||
---
|
||||
locale.c | 13 +++++++++++++
|
||||
1 file changed, 13 insertions(+)
|
||||
|
||||
--- locale.c
|
||||
+++ locale.c 2018-09-20 08:06:23.732593807 +0000
|
||||
@@ -33,6 +33,10 @@
|
||||
#include "bashintl.h"
|
||||
#include "bashansi.h"
|
||||
#include <stdio.h>
|
||||
+#include <sys/types.h>
|
||||
+#include <sys/stat.h>
|
||||
+#include <unistd.h>
|
||||
+#include <errno.h>
|
||||
#include "chartypes.h"
|
||||
#include <errno.h>
|
||||
|
||||
@@ -79,6 +83,15 @@ void
|
||||
set_default_locale ()
|
||||
{
|
||||
#if defined (HAVE_SETLOCALE)
|
||||
+ struct stat st;
|
||||
+
|
||||
+ if (stat("/usr/lib/locale/locale-archive", &st) == 0 && st.st_size == 0) {
|
||||
+ errno = EINVAL;
|
||||
+ sys_error("set_default_locale: broken locale");
|
||||
+ fprintf (stderr, "%s: Please remove /usr/lib/locale/locale-archive\n",
|
||||
+ get_name_for_error());
|
||||
+ sleep(1);
|
||||
+ }
|
||||
default_locale = setlocale (LC_ALL, "");
|
||||
if (default_locale)
|
||||
default_locale = savestring (default_locale);
|
@ -1,49 +0,0 @@
|
||||
---
|
||||
builtins/printf.def | 13 ++++++++++++-
|
||||
1 file changed, 12 insertions(+), 1 deletion(-)
|
||||
|
||||
--- builtins/printf.def
|
||||
+++ builtins/printf.def 2022-06-22 06:26:14.069158235 +0000
|
||||
@@ -56,6 +56,7 @@ error occurs.
|
||||
$END
|
||||
|
||||
#include <config.h>
|
||||
+#include <locale.h>
|
||||
|
||||
#include "../bashtypes.h"
|
||||
|
||||
@@ -702,7 +703,7 @@ printf_builtin (list)
|
||||
case 'A':
|
||||
#endif
|
||||
{
|
||||
- char *f;
|
||||
+ char *f, *lce = getenv("LC_NUMERIC"), *lcl = setlocale(LC_NUMERIC, NULL);
|
||||
|
||||
if (use_Lmod || posixly_correct == 0)
|
||||
{
|
||||
@@ -710,7 +711,12 @@ printf_builtin (list)
|
||||
|
||||
p = getfloatmax ();
|
||||
f = mklong (start, "L", 1);
|
||||
+
|
||||
+ if (lce && lcl) setlocale(LC_NUMERIC, lce);
|
||||
+
|
||||
PF (f, p);
|
||||
+
|
||||
+ if (lce && lcl) setlocale(LC_NUMERIC, lcl);
|
||||
}
|
||||
else /* posixly_correct */
|
||||
{
|
||||
@@ -718,7 +724,12 @@ printf_builtin (list)
|
||||
|
||||
p = getdouble ();
|
||||
f = mklong (start, "", 0);
|
||||
+
|
||||
+ if (lce && lcl) setlocale(LC_NUMERIC, lce);
|
||||
+
|
||||
PF (f, p);
|
||||
+
|
||||
+ if (lce && lcl) setlocale(LC_NUMERIC, lcl);
|
||||
}
|
||||
|
||||
break;
|
@ -1,41 +0,0 @@
|
||||
---
|
||||
locale.c | 21 ++++++++++++++++-----
|
||||
1 file changed, 16 insertions(+), 5 deletions(-)
|
||||
|
||||
--- locale.c
|
||||
+++ locale.c 2018-09-20 08:14:41.307485537 +0000
|
||||
@@ -57,6 +57,7 @@ extern int dump_translatable_strings, du
|
||||
|
||||
/* The current locale when the program begins */
|
||||
static char *default_locale;
|
||||
+static char fallback[128];
|
||||
|
||||
/* The current domain for textdomain(3). */
|
||||
static char *default_domain;
|
||||
@@ -361,11 +362,21 @@ get_locale_var (var)
|
||||
if (locale == 0 || *locale == 0)
|
||||
locale = lang;
|
||||
if (locale == 0 || *locale == 0)
|
||||
-#if 0
|
||||
- locale = default_locale; /* system-dependent; not really portable. should it be "C"? */
|
||||
-#else
|
||||
- locale = "";
|
||||
-#endif
|
||||
+ {
|
||||
+ char *ptr;
|
||||
+ if (default_locale && *default_locale && (ptr = strstr(default_locale, var)) && (ptr = strchr(ptr, '=')) && ++ptr)
|
||||
+ {
|
||||
+ memset (fallback, 0, sizeof(fallback));
|
||||
+ strncpy(fallback, ptr, sizeof(fallback)-1);
|
||||
+
|
||||
+ if ((ptr = strchr(fallback, ';')))
|
||||
+ *ptr = '\0';
|
||||
+
|
||||
+ locale = fallback;
|
||||
+ }
|
||||
+ else
|
||||
+ locale = default_locale; /* system-dependent; not really portable. should it be "C"? */
|
||||
+ }
|
||||
return (locale);
|
||||
}
|
||||
|
@ -1,65 +0,0 @@
|
||||
|BNC#577221 - Non-login, interactive bash executes /etc/bash.bashrc
|
||||
| yet not documented
|
||||
|
|
||||
|Jared Hudson 2010-02-04 22:47:01 UTC
|
||||
|
|
||||
|bash-3.2-147.4.1 executes /etc/bash.bashrc when invoking an interactive,
|
||||
|non-login shell yet this is not documented. The man page should mention
|
||||
|this in its INVOCATION section. I've checked the source code and it's
|
||||
|hard coded to execute /etc/bash.bashrc (SYS_BASHRC macro)
|
||||
|
|
||||
|BSC#959755 - man page on bash needs some clarification.
|
||||
|
|
||||
|Werner Fink 2016-08-01 12:40:06 UTC
|
||||
|
|
||||
|Make clear that the files /etc/profile as well as /etc/bash.bashrc may source
|
||||
|other files as well even if the bash does not.
|
||||
|
|
||||
---
|
||||
doc/bash.1 | 16 ++++++++++++----
|
||||
1 file changed, 12 insertions(+), 4 deletions(-)
|
||||
|
||||
--- doc/bash.1
|
||||
+++ doc/bash.1 2022-06-22 06:31:11.283670836 +0000
|
||||
@@ -330,6 +330,8 @@ and executes commands from the first one
|
||||
The
|
||||
.B \-\-noprofile
|
||||
option may be used when the shell is started to inhibit this behavior.
|
||||
+Please note that the file \fI/etc/profile\fP includes an autodetection shell
|
||||
+code wether it has to source \fI/etc/bash.bashrc\fP as well as \fI~/.bashrc\fP.
|
||||
.PP
|
||||
When an interactive login shell exits,
|
||||
or a non-interactive login shell executes the \fBexit\fP builtin command,
|
||||
@@ -339,13 +341,19 @@ exists.
|
||||
.PP
|
||||
When an interactive shell that is not a login shell is started,
|
||||
.B bash
|
||||
-reads and executes commands from \fI~/.bashrc\fP, if that file exists.
|
||||
-This may be inhibited by using the
|
||||
+reads and executes commands from \fI/etc/bash.bashrc\fP then \fI~/.bashrc\fP
|
||||
+when those files exist and are readable. This may be inhibited by using the
|
||||
.B \-\-norc
|
||||
option.
|
||||
The \fB\-\-rcfile\fP \fIfile\fP option will force
|
||||
.B bash
|
||||
to read and execute commands from \fIfile\fP instead of \fI~/.bashrc\fP.
|
||||
+Please note that the file \fI/etc/bash.bashrc\fP includes an autodetection shell
|
||||
+code wether it is used for by a remote OpenSSH SSH client like
|
||||
+.BR ssh (1)
|
||||
+or
|
||||
+.BR slogin (1)
|
||||
+to source the local \fI/etc/profile\fP if not already done.
|
||||
.PP
|
||||
When
|
||||
.B bash
|
||||
@@ -432,8 +440,8 @@ or the secure shell daemon \fIsshd\fP.
|
||||
If
|
||||
.B bash
|
||||
determines it is being run non-interactively in this fashion,
|
||||
-it reads and executes commands from \fI~/.bashrc\fP,
|
||||
-if that file exists and is readable.
|
||||
+it reads and executes commands from \fI/etc/bash.bashrc\fP then
|
||||
+\fI~/.bashrc\fP, when those files exists and are readable.
|
||||
It will not do this if invoked as \fBsh\fP.
|
||||
The
|
||||
.B \-\-norc
|
@ -1,20 +0,0 @@
|
||||
---
|
||||
bashline.c | 7 +++++++
|
||||
1 file changed, 7 insertions(+)
|
||||
|
||||
--- bashline.c
|
||||
+++ bashline.c 2018-11-29 08:12:25.876588305 +0000
|
||||
@@ -2206,6 +2206,13 @@ globword:
|
||||
return ((char *)NULL);
|
||||
}
|
||||
|
||||
+ if (GLOB_FAILED (glob_matches) || glob_matches == 0)
|
||||
+ {
|
||||
+ glob_ignore_case = old_glob_ignore_case;
|
||||
+ glob_matches = (char **)NULL;
|
||||
+ return ((char *)NULL);
|
||||
+ }
|
||||
+
|
||||
while (val = glob_matches[local_index++])
|
||||
{
|
||||
if (executable_or_directory (val))
|
BIN
bash-4.2-history-myown.dif.bz2
(Stored with Git LFS)
BIN
bash-4.2-history-myown.dif.bz2
(Stored with Git LFS)
Binary file not shown.
@ -1,51 +0,0 @@
|
||||
---
|
||||
shell.c | 24 ++++++++++++++++++++++++
|
||||
1 file changed, 24 insertions(+)
|
||||
|
||||
--- shell.c
|
||||
+++ shell.c 2018-09-20 08:08:34.242204532 +0000
|
||||
@@ -43,6 +43,7 @@
|
||||
#endif
|
||||
|
||||
#if defined (HAVE_UNISTD_H)
|
||||
+# include <sys/types.h>
|
||||
# include <unistd.h>
|
||||
#endif
|
||||
|
||||
@@ -1888,6 +1893,28 @@ init_interactive_script ()
|
||||
#endif
|
||||
}
|
||||
|
||||
+static void
|
||||
+maybe_unmap_nscd (void)
|
||||
+{
|
||||
+ unsigned long start, end, off;
|
||||
+ char path[PATH_MAX];
|
||||
+ FILE *maps;
|
||||
+
|
||||
+ if (getppid() != 1)
|
||||
+ return;
|
||||
+ if ((maps = fopen("/proc/self/maps", "r")) == NULL)
|
||||
+ return;
|
||||
+
|
||||
+ while (fscanf(maps, "%lx-%lx %*s %lx %*x:%*x %*lu %s", &start, &end, &off, &path[0]) == 4)
|
||||
+ {
|
||||
+ if (strncmp(path, "/var/run/nscd/", 14) != 0)
|
||||
+ continue;
|
||||
+ munmap((void*)start, end - start);
|
||||
+ }
|
||||
+
|
||||
+ fclose(maps);
|
||||
+}
|
||||
+
|
||||
void
|
||||
get_current_user_info ()
|
||||
{
|
||||
@@ -1919,6 +1946,7 @@ get_current_user_info ()
|
||||
#if defined (HAVE_GETPWENT)
|
||||
endpwent ();
|
||||
#endif
|
||||
+ maybe_unmap_nscd ();
|
||||
}
|
||||
}
|
||||
|
@ -1,122 +0,0 @@
|
||||
---
|
||||
array.c | 2 +-
|
||||
examples/loadables/tee.c | 3 ++-
|
||||
hashlib.c | 4 ++--
|
||||
jobs.c | 9 +++++++++
|
||||
sig.c | 4 ++--
|
||||
sig.h | 4 ++--
|
||||
trap.c | 2 +-
|
||||
trap.h | 2 +-
|
||||
8 files changed, 20 insertions(+), 10 deletions(-)
|
||||
|
||||
--- array.c
|
||||
+++ array.c 2020-10-12 16:00:37.207185803 +0000
|
||||
@@ -1095,7 +1095,7 @@ char *s, *sep;
|
||||
* To make a running version, compile -DTEST_ARRAY and link with:
|
||||
* xmalloc.o syntax.o lib/malloc/libmalloc.a lib/sh/libsh.a
|
||||
*/
|
||||
-int interrupt_immediately = 0;
|
||||
+volatile sig_atomic_t interrupt_immediately = 0;
|
||||
|
||||
int
|
||||
signal_is_trapped(s)
|
||||
--- examples/loadables/tee.c
|
||||
+++ examples/loadables/tee.c 2020-10-12 16:00:37.267184666 +0000
|
||||
@@ -35,6 +35,7 @@
|
||||
#include "bashansi.h"
|
||||
|
||||
#include <stdio.h>
|
||||
+#include <signal.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include "builtins.h"
|
||||
@@ -56,7 +57,7 @@ static FLIST *tee_flist;
|
||||
|
||||
#define TEE_BUFSIZE 8192
|
||||
|
||||
-extern int interrupt_immediately;
|
||||
+extern volatile sig_atomic_t interrupt_immediately;
|
||||
|
||||
extern char *strerror ();
|
||||
|
||||
--- hashlib.c
|
||||
+++ hashlib.c 2020-10-12 16:02:31.677016331 +0000
|
||||
@@ -473,8 +473,8 @@ hash_pstats (table, name)
|
||||
|
||||
HASH_TABLE *table, *ntable;
|
||||
|
||||
-int interrupt_immediately = 0;
|
||||
-int running_trap = 0;
|
||||
+volatile sig_atomic_t interrupt_immediately = 0;
|
||||
+volatile sig_atomic_t running_trap = 0;
|
||||
|
||||
int
|
||||
signal_is_trapped (s)
|
||||
--- jobs.c
|
||||
+++ jobs.c 2020-10-12 16:00:37.267184666 +0000
|
||||
@@ -2212,6 +2212,15 @@ make_child (command, flags)
|
||||
child process, go back and change callers who free `command' in
|
||||
the child process when this returns. */
|
||||
mypid = getpid ();
|
||||
+
|
||||
+ if (interrupt_state)
|
||||
+ {
|
||||
+ struct timeval tv;
|
||||
+ struct rusage rx;
|
||||
+ (void) gettimeofday(&tv, NULL);
|
||||
+ (void) getrusage(RUSAGE_SELF, &rx);
|
||||
+ }
|
||||
+
|
||||
#if defined (BUFFERED_INPUT)
|
||||
/* Close default_buffered_input if it's > 0. We don't close it if it's
|
||||
0 because that's the file descriptor used when redirecting input,
|
||||
--- sig.c
|
||||
+++ sig.c 2020-10-12 16:00:37.267184666 +0000
|
||||
@@ -84,10 +84,10 @@ sigset_t top_level_mask;
|
||||
#endif /* JOB_CONTROL */
|
||||
|
||||
/* When non-zero, we throw_to_top_level (). */
|
||||
-int interrupt_immediately = 0;
|
||||
+volatile sig_atomic_t interrupt_immediately = 0;
|
||||
|
||||
/* When non-zero, we call the terminating signal handler immediately. */
|
||||
-int terminate_immediately = 0;
|
||||
+volatile sig_atomic_t terminate_immediately = 0;
|
||||
|
||||
#if defined (SIGWINCH)
|
||||
static SigHandler *old_winch = (SigHandler *)SIG_DFL;
|
||||
--- sig.h
|
||||
+++ sig.h 2020-10-12 16:03:44.403637781 +0000
|
||||
@@ -105,8 +105,8 @@ do { \
|
||||
extern volatile sig_atomic_t sigwinch_received;
|
||||
extern volatile sig_atomic_t sigterm_received;
|
||||
|
||||
-extern int interrupt_immediately; /* no longer used */
|
||||
-extern int terminate_immediately;
|
||||
+extern volatile sig_atomic_t interrupt_immediately; /* no longer used */
|
||||
+extern volatile sig_atomic_t terminate_immediately;
|
||||
|
||||
/* Functions from sig.c. */
|
||||
extern sighandler termsig_sighandler PARAMS((int));
|
||||
--- trap.c
|
||||
+++ trap.c 2020-10-12 16:08:10.102600477 +0000
|
||||
@@ -111,7 +111,7 @@ int pending_traps[NSIG];
|
||||
Used in execute_cmd.c and builtins/common.c to clean up when
|
||||
parse_and_execute does not return normally after executing the
|
||||
trap command (e.g., when `return' is executed in the trap command). */
|
||||
-int running_trap;
|
||||
+volatile sig_atomic_t running_trap;
|
||||
|
||||
/* Set to last_command_exit_value before running a trap. */
|
||||
int trap_saved_exit_value;
|
||||
--- trap.h
|
||||
+++ trap.h 2020-10-12 16:05:57.105122164 +0000
|
||||
@@ -62,7 +62,7 @@ extern char *trap_list[];
|
||||
|
||||
extern int trapped_signal_received;
|
||||
extern int wait_signal_received;
|
||||
-extern int running_trap;
|
||||
+extern volatile sig_atomic_t running_trap;
|
||||
extern int trap_saved_exit_value;
|
||||
extern int suppress_debug_trap_verbose;
|
||||
|
@ -1,328 +0,0 @@
|
||||
---
|
||||
bashintl.h | 3 +++
|
||||
builtins/printf.def | 21 +++++++++++++++++++++
|
||||
builtins/read.def | 52 +++++++++++++++++++++++++++++++++++++++++++++++++++-
|
||||
lib/sh/strtrans.c | 21 +++++++++++++++++++++
|
||||
locale.c | 26 ++++++++++++++++++++++++++
|
||||
parse.y | 42 +++++++++++++++++++++++++++++++++++++++++-
|
||||
6 files changed, 163 insertions(+), 2 deletions(-)
|
||||
|
||||
--- bashintl.h
|
||||
+++ bashintl.h 2018-11-29 08:14:56.165762022 +0000
|
||||
@@ -43,6 +43,9 @@
|
||||
# undef HAVE_SETLOCALE
|
||||
#endif
|
||||
|
||||
+int bash_mbcs_non_utf8;
|
||||
+int bash_mb_cur_max;
|
||||
+
|
||||
#if !defined (HAVE_SETLOCALE)
|
||||
# define setlocale(cat, loc)
|
||||
#endif
|
||||
--- builtins/printf.def
|
||||
+++ builtins/printf.def 2018-11-29 08:18:21.445909015 +0000
|
||||
@@ -247,6 +247,8 @@ printf_builtin (list)
|
||||
#if defined (HANDLE_MULTIBYTE)
|
||||
char mbch[25]; /* 25 > MB_LEN_MAX, plus can handle 4-byte UTF-8 and large Unicode characters*/
|
||||
int mbind, mblen;
|
||||
+ size_t charlen;
|
||||
+ mbstate_t mbs;
|
||||
#endif
|
||||
#if defined (ARRAY_VARS)
|
||||
int arrayflags;
|
||||
@@ -334,6 +336,25 @@ printf_builtin (list)
|
||||
precision = fieldwidth = 0;
|
||||
have_fieldwidth = have_precision = 0;
|
||||
|
||||
+#if defined (HANDLE_MULTIBYTE)
|
||||
+ if (bash_mbcs_non_utf8)
|
||||
+ {
|
||||
+ memset (&mbs, 0, sizeof (mbs));
|
||||
+ charlen = mbrlen (fmt, bash_mb_cur_max, &mbs);
|
||||
+ if (charlen > 1 && charlen != (size_t)-2 && charlen != (size_t)-1)
|
||||
+ {
|
||||
+ while (charlen > 0)
|
||||
+ {
|
||||
+ PC (*fmt);
|
||||
+ fmt++;
|
||||
+ charlen--;
|
||||
+ }
|
||||
+ fmt--;
|
||||
+ continue;
|
||||
+ }
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
if (*fmt == '\\')
|
||||
{
|
||||
fmt++;
|
||||
--- builtins/read.def
|
||||
+++ builtins/read.def 2018-11-29 08:14:56.165762022 +0000
|
||||
@@ -188,6 +188,12 @@ read_builtin (list)
|
||||
char c;
|
||||
char *input_string, *orig_input_string, *ifs_chars, *prompt, *arrayname;
|
||||
char *e, *t, *t1, *ps2, *tofree;
|
||||
+#if defined (HANDLE_MULTIBYTE)
|
||||
+ static char mbch[25];
|
||||
+ size_t charlen;
|
||||
+ int mblen;
|
||||
+ mbstate_t mbs;
|
||||
+#endif
|
||||
struct stat tsb;
|
||||
SHELL_VAR *var;
|
||||
TTYSTRUCT ttattrs, ttset;
|
||||
@@ -548,6 +554,7 @@ read_builtin (list)
|
||||
#endif
|
||||
|
||||
ps2 = 0;
|
||||
+ charlen = 0;
|
||||
for (print_ps2 = eof = retval = 0;;)
|
||||
{
|
||||
CHECK_ALRM;
|
||||
@@ -589,14 +596,40 @@ read_builtin (list)
|
||||
|
||||
reading = 1;
|
||||
CHECK_ALRM;
|
||||
+#if defined (HANDLE_MULTIBYTE)
|
||||
+ charlen = 0;
|
||||
+ mblen = 0;
|
||||
+ if (bash_mbcs_non_utf8)
|
||||
+ {
|
||||
+ do
|
||||
+ {
|
||||
+ if (unbuffered_read)
|
||||
+ retval = posixly_correct ? zreadintr (fd, &c, 1) : zread (fd, &c, 1);
|
||||
+ else
|
||||
+ retval = posixly_correct ? zreadcintr (fd, &c) : zreadc (fd, &c);
|
||||
+
|
||||
+ if (retval <= 0)
|
||||
+ break;
|
||||
+
|
||||
+ mbch[mblen++] = c;
|
||||
+ memset (&mbs, 0, sizeof (mbs));
|
||||
+ charlen = mbrlen (mbch, mblen, &mbs);
|
||||
+ }
|
||||
+ while (charlen == (size_t)-2 && mblen < bash_mb_cur_max);
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+#endif
|
||||
if (unbuffered_read == 2)
|
||||
retval = posixly_correct ? zreadintr (fd, &c, 1) : zreadn (fd, &c, nchars - nr);
|
||||
else if (unbuffered_read)
|
||||
retval = posixly_correct ? zreadintr (fd, &c, 1) : zread (fd, &c, 1);
|
||||
else
|
||||
retval = posixly_correct ? zreadcintr (fd, &c) : zreadc (fd, &c);
|
||||
+#if defined (HANDLE_MULTIBYTE)
|
||||
+ }
|
||||
+#endif
|
||||
reading = 0;
|
||||
-
|
||||
if (retval <= 0)
|
||||
{
|
||||
if (retval < 0 && errno == EINTR)
|
||||
@@ -639,6 +672,11 @@ read_builtin (list)
|
||||
}
|
||||
}
|
||||
|
||||
+#if defined (HANDLE_MULTIBYTE)
|
||||
+ if (bash_mbcs_non_utf8 && charlen > 1)
|
||||
+ goto add_char;
|
||||
+#endif
|
||||
+
|
||||
/* If the next character is to be accepted verbatim, a backslash
|
||||
newline pair still disappears from the input. */
|
||||
if (pass_next)
|
||||
@@ -681,7 +719,19 @@ read_builtin (list)
|
||||
}
|
||||
|
||||
add_char:
|
||||
+#if defined (HANDLE_MULTIBYTE)
|
||||
+ if (bash_mbcs_non_utf8 && charlen > 1)
|
||||
+ {
|
||||
+ for (mblen = 0; mblen < charlen; mblen++)
|
||||
+ input_string[i++] = mbch[mblen];
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+#endif
|
||||
input_string[i++] = c;
|
||||
+#if defined (HANDLE_MULTIBYTE)
|
||||
+ }
|
||||
+#endif
|
||||
CHECK_ALRM;
|
||||
|
||||
#if defined (HANDLE_MULTIBYTE)
|
||||
--- lib/sh/strtrans.c
|
||||
+++ lib/sh/strtrans.c 2018-11-29 08:14:56.165762022 +0000
|
||||
@@ -29,6 +29,7 @@
|
||||
#include <chartypes.h>
|
||||
|
||||
#include "shell.h"
|
||||
+#include "bashintl.h"
|
||||
|
||||
#include "shmbchar.h"
|
||||
#include "shmbutil.h"
|
||||
@@ -55,6 +56,10 @@ ansicstr (string, len, flags, sawc, rlen
|
||||
int c, temp;
|
||||
char *ret, *r, *s;
|
||||
unsigned long v;
|
||||
+#if defined (HANDLE_MULTIBYTE)
|
||||
+ size_t charlen;
|
||||
+ mbstate_t mbs;
|
||||
+#endif
|
||||
|
||||
if (string == 0 || *string == '\0')
|
||||
return ((char *)NULL);
|
||||
@@ -69,6 +74,22 @@ ansicstr (string, len, flags, sawc, rlen
|
||||
#endif
|
||||
for (r = ret, s = string; s && *s; )
|
||||
{
|
||||
+#if defined (HANDLE_MULTIBYTE)
|
||||
+ if (bash_mbcs_non_utf8)
|
||||
+ {
|
||||
+ memset (&mbs, 0, sizeof (mbs));
|
||||
+ charlen = mbrlen (s, bash_mb_cur_max, &mbs);
|
||||
+ if (charlen > 1 && charlen != (size_t)-2 && charlen != (size_t)-1)
|
||||
+ {
|
||||
+ while (charlen > 0)
|
||||
+ {
|
||||
+ *r++ = *s++;
|
||||
+ charlen--;
|
||||
+ }
|
||||
+ continue;
|
||||
+ }
|
||||
+ }
|
||||
+#endif
|
||||
c = *s++;
|
||||
if (c != '\\' || *s == '\0')
|
||||
*r++ = c;
|
||||
--- locale.c
|
||||
+++ locale.c 2018-11-29 08:14:56.165762022 +0000
|
||||
@@ -52,6 +52,7 @@ int locale_mb_cur_max; /* value of MB_CU
|
||||
int locale_shiftstates;
|
||||
|
||||
extern int dump_translatable_strings, dump_po_strings;
|
||||
+extern int bash_mb_cur_max, bash_mbcs_non_utf8;
|
||||
|
||||
/* The current locale when the program begins */
|
||||
static char *default_locale;
|
||||
@@ -76,6 +77,26 @@ static int reset_locale_vars __P((void))
|
||||
static void locale_setblanks __P((void));
|
||||
static int locale_isutf8 __P((char *));
|
||||
|
||||
+static void
|
||||
+set_mbcs_values ()
|
||||
+{
|
||||
+ /* Enhance the performance. */
|
||||
+#if defined (HANDLE_MULTIBYTE)
|
||||
+ bash_mb_cur_max = MB_CUR_MAX;
|
||||
+# if defined (HAVE_LANGINFO_CODESET)
|
||||
+ if (strcasestr (nl_langinfo (CODESET), "JIS") != 0 && bash_mb_cur_max == 2)
|
||||
+ bash_mbcs_non_utf8 = 1;
|
||||
+ else
|
||||
+ bash_mbcs_non_utf8 = 0;
|
||||
+# else
|
||||
+ bash_mbcs_non_utf8 = 0;
|
||||
+# endif
|
||||
+#else
|
||||
+ bash_mb_cur_max = 1;
|
||||
+ bash_mbcs_non_utf8 = 0;
|
||||
+#endif
|
||||
+}
|
||||
+
|
||||
/* Set the value of default_locale and make the current locale the
|
||||
system default locale. This should be called very early in main(). */
|
||||
void
|
||||
@@ -94,6 +115,8 @@ set_default_locale ()
|
||||
default_locale = setlocale (LC_ALL, "");
|
||||
if (default_locale)
|
||||
default_locale = savestring (default_locale);
|
||||
+
|
||||
+ set_mbcs_values ();
|
||||
#endif /* HAVE_SETLOCALE */
|
||||
bindtextdomain (PACKAGE, LOCALEDIR);
|
||||
textdomain (PACKAGE);
|
||||
@@ -150,6 +173,7 @@ set_default_locale_vars ()
|
||||
setlocale (LC_TIME, lc_all);
|
||||
# endif /* LC_TIME */
|
||||
|
||||
+ set_mbcs_values ();
|
||||
#endif /* HAVE_SETLOCALE */
|
||||
|
||||
val = get_string_value ("TEXTDOMAIN");
|
||||
@@ -240,6 +264,7 @@ set_locale_var (var, value)
|
||||
if (lc_all == 0 || *lc_all == '\0')
|
||||
{
|
||||
x = setlocale (LC_CTYPE, get_locale_var ("LC_CTYPE"));
|
||||
+ set_mbcs_values ();
|
||||
locale_setblanks ();
|
||||
locale_mb_cur_max = MB_CUR_MAX;
|
||||
/* if setlocale() returns NULL, the locale is not changed */
|
||||
@@ -388,6 +413,7 @@ reset_locale_vars ()
|
||||
t = setlocale (LC_TIME, get_locale_var ("LC_TIME"));
|
||||
# endif
|
||||
|
||||
+ set_mbcs_values ();
|
||||
locale_setblanks ();
|
||||
locale_mb_cur_max = MB_CUR_MAX;
|
||||
if (x)
|
||||
--- parse.y
|
||||
+++ parse.y 2018-11-29 08:14:56.165762022 +0000
|
||||
@@ -2005,7 +2005,12 @@ read_a_line (remove_quoted_newline)
|
||||
{
|
||||
static char *line_buffer = (char *)NULL;
|
||||
static int buffer_size = 0;
|
||||
- int indx, c, peekc, pass_next;
|
||||
+ int indx, c, peekc, pass_next, chari;
|
||||
+#if defined (HANDLE_MULTIBYTE)
|
||||
+ size_t charlen;
|
||||
+ mbstate_t mbs;
|
||||
+ static char char_buffer[10];
|
||||
+#endif
|
||||
|
||||
#if defined (READLINE)
|
||||
if (no_line_editing && SHOULD_PROMPT ())
|
||||
@@ -2020,7 +2025,42 @@ read_a_line (remove_quoted_newline)
|
||||
/* Allow immediate exit if interrupted during input. */
|
||||
QUIT;
|
||||
|
||||
+#if defined (HANDLE_MULTIBYTE)
|
||||
+ if (!bash_mbcs_non_utf8)
|
||||
+ c = yy_getc ();
|
||||
+ else
|
||||
+ {
|
||||
+ chari = 0;
|
||||
+ charlen = 0;
|
||||
+ while (chari < 10)
|
||||
+ {
|
||||
+ char_buffer[chari++] = c = yy_getc ();
|
||||
+
|
||||
+ if (c == EOF)
|
||||
+ break;
|
||||
+
|
||||
+ memset (&mbs, 0, sizeof (mbs));
|
||||
+ charlen = mbrlen (char_buffer, chari, &mbs);
|
||||
+
|
||||
+ if ((size_t)charlen != (size_t)-2 && (size_t)charlen != (size_t)-1)
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ if (charlen != 1)
|
||||
+ {
|
||||
+ charlen = chari;
|
||||
+ for (chari = 0; chari < charlen && char_buffer[chari] != EOF; chari++)
|
||||
+ {
|
||||
+ RESIZE_MALLOCED_BUFFER (line_buffer, indx, 2, buffer_size, 128);
|
||||
+ line_buffer[indx++] = char_buffer[chari];
|
||||
+ }
|
||||
+ if (chari == charlen)
|
||||
+ continue;
|
||||
+ }
|
||||
+ }
|
||||
+#else
|
||||
c = yy_getc ();
|
||||
+#endif
|
||||
|
||||
/* Ignore null bytes in input. */
|
||||
if (c == 0)
|
@ -1,14 +0,0 @@
|
||||
---
|
||||
support/printenv.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
--- support/printenv.c
|
||||
+++ support/printenv.c 2014-04-17 09:46:25.874236036 +0000
|
||||
@@ -31,6 +31,7 @@
|
||||
#include "bashansi.h"
|
||||
#include <stdio.h> /* puts */
|
||||
|
||||
+#include <string.h>
|
||||
extern char **environ;
|
||||
|
||||
int
|
@ -1,93 +0,0 @@
|
||||
---
|
||||
builtins/shopt.def | 2 ++
|
||||
doc/bash.1 | 7 +++++++
|
||||
execute_cmd.h | 1 +
|
||||
shell.c | 2 ++
|
||||
variables.c | 7 ++++++-
|
||||
5 files changed, 18 insertions(+), 1 deletion(-)
|
||||
|
||||
--- builtins/shopt.def
|
||||
+++ builtins/shopt.def 2018-11-29 08:19:32.996571288 +0000
|
||||
@@ -90,6 +90,7 @@ extern int autocd;
|
||||
extern int glob_star;
|
||||
extern int glob_asciirange;
|
||||
extern int lastpipe_opt;
|
||||
+extern int import_functions;
|
||||
extern int inherit_errexit;
|
||||
extern int localvar_inherit;
|
||||
extern int localvar_unset;
|
||||
@@ -213,6 +214,7 @@ static struct {
|
||||
{ "hostcomplete", &perform_hostname_completion, shopt_enable_hostname_completion },
|
||||
#endif
|
||||
{ "huponexit", &hup_on_exit, (shopt_set_func_t *)NULL },
|
||||
+ { "import-functions", &import_functions, (shopt_set_func_t *)NULL },
|
||||
{ "inherit_errexit", &inherit_errexit, (shopt_set_func_t *)NULL },
|
||||
{ "interactive_comments", &interactive_comments, set_shellopts_after_change },
|
||||
{ "lastpipe", &lastpipe_opt, (shopt_set_func_t *)NULL },
|
||||
--- doc/bash.1
|
||||
+++ doc/bash.1 2018-11-29 08:19:33.000571213 +0000
|
||||
@@ -245,6 +245,13 @@ The shell becomes restricted (see
|
||||
.B "RESTRICTED SHELL"
|
||||
below).
|
||||
.TP
|
||||
+.B \-\-import\-functions
|
||||
+This shell is patched in such a way that shell functions in the inported environment
|
||||
+will not be expanded due several security issues (e.g. CVE\-2014\-6271). This option
|
||||
+can be used to enable this. It is also possible to use the
|
||||
+.B shopt
|
||||
+builtin to do this.
|
||||
+.TP
|
||||
.B \-\-verbose
|
||||
Equivalent to \fB\-v\fP.
|
||||
.TP
|
||||
--- execute_cmd.h
|
||||
+++ execute_cmd.h 2018-11-29 08:19:33.000571213 +0000
|
||||
@@ -61,6 +61,7 @@ extern int evalnest, evalnest_max;
|
||||
extern int sourcenest, sourcenest_max;
|
||||
extern int stdin_redir;
|
||||
extern int line_number_for_err_trap;
|
||||
+extern int import_functions;
|
||||
|
||||
extern char *the_printed_command_except_trap;
|
||||
|
||||
--- shell.c
|
||||
+++ shell.c 2018-11-29 08:19:33.000571213 +0000
|
||||
@@ -232,6 +232,7 @@ int posixly_correct = 1; /* Non-zero mea
|
||||
#else
|
||||
int posixly_correct = 0; /* Non-zero means posix.2 superset. */
|
||||
#endif
|
||||
+int import_functions = IMPORT_FUNCTIONS_DEF; /* Import functions from environment */
|
||||
|
||||
/* Some long-winded argument names. These are obviously new. */
|
||||
#define Int 1
|
||||
@@ -251,6 +252,7 @@ static const struct {
|
||||
{ "help", Int, &want_initial_help, (char **)0x0 },
|
||||
{ "init-file", Charp, (int *)0x0, &bashrc_file },
|
||||
{ "login", Int, &make_login_shell, (char **)0x0 },
|
||||
+ { "import-functions", Int, &import_functions, (char **)0x0 },
|
||||
{ "noediting", Int, &no_line_editing, (char **)0x0 },
|
||||
{ "noprofile", Int, &no_profile, (char **)0x0 },
|
||||
{ "norc", Int, &no_rc, (char **)0x0 },
|
||||
--- variables.c
|
||||
+++ variables.c 2018-11-29 08:19:33.000571213 +0000
|
||||
@@ -380,6 +380,11 @@ initialize_shell_variables (env, privmod
|
||||
tname = name + BASHFUNC_PREFLEN; /* start of func name */
|
||||
tname[namelen] = '\0'; /* now tname == func name */
|
||||
|
||||
+ if (!import_functions && !interactive_shell) {
|
||||
+ report_error (_("Skipping importing function definition for `%s': --import-functions required."), tname);
|
||||
+ goto reval;
|
||||
+ }
|
||||
+
|
||||
string_length = strlen (string);
|
||||
temp_string = (char *)xmalloc (namelen + string_length + 2);
|
||||
|
||||
@@ -394,7 +399,7 @@ initialize_shell_variables (env, privmod
|
||||
parse_and_execute (temp_string, tname, SEVAL_NONINT|SEVAL_NOHIST|SEVAL_FUNCDEF|SEVAL_ONECMD);
|
||||
else
|
||||
free (temp_string); /* parse_and_execute does this */
|
||||
-
|
||||
+ reval:
|
||||
if (temp_var = find_function (tname))
|
||||
{
|
||||
VSETATTR (temp_var, (att_exported|att_imported));
|
@ -1,16 +0,0 @@
|
||||
---
|
||||
shell.h | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
--- shell.h
|
||||
+++ shell.h 2016-03-08 10:22:38.169929522 +0000
|
||||
@@ -22,6 +22,9 @@
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
+#include <sys/types.h>
|
||||
+#include <unistd.h>
|
||||
+
|
||||
#include "bashjmp.h"
|
||||
|
||||
#include "command.h"
|
@ -1,97 +0,0 @@
|
||||
---
|
||||
examples/loadables/finfo.c | 3 +--
|
||||
examples/loadables/head.c | 2 --
|
||||
examples/loadables/id.c | 2 --
|
||||
examples/loadables/mkdir.c | 2 +-
|
||||
examples/loadables/pathchk.c | 2 --
|
||||
examples/loadables/print.c | 2 +-
|
||||
examples/loadables/tee.c | 2 --
|
||||
7 files changed, 3 insertions(+), 12 deletions(-)
|
||||
|
||||
--- examples/loadables/finfo.c
|
||||
+++ examples/loadables/finfo.c 2018-09-20 08:07:43.739129083 +0000
|
||||
@@ -108,7 +108,7 @@ int argc;
|
||||
char **argv;
|
||||
{
|
||||
register int i;
|
||||
- int mode, flags, opt;
|
||||
+ int flags, opt;
|
||||
|
||||
sh_optind = 0; /* XXX */
|
||||
prog = base_pathname(argv[0]);
|
||||
@@ -396,7 +396,6 @@ finfo_builtin(list)
|
||||
{
|
||||
int c, r;
|
||||
char **v;
|
||||
- WORD_LIST *l;
|
||||
|
||||
v = make_builtin_argv (list, &c);
|
||||
r = finfo_main (c, v);
|
||||
--- examples/loadables/head.c
|
||||
+++ examples/loadables/head.c 2018-09-20 08:07:43.739129083 +0000
|
||||
@@ -101,8 +101,6 @@ head_builtin (list)
|
||||
WORD_LIST *l;
|
||||
FILE *fp;
|
||||
|
||||
- char *t;
|
||||
-
|
||||
munge_list (list); /* change -num into -n num */
|
||||
|
||||
reset_internal_getopt ();
|
||||
--- examples/loadables/id.c
|
||||
+++ examples/loadables/id.c 2018-09-20 08:07:43.739129083 +0000
|
||||
@@ -64,8 +64,6 @@ static int id_flags;
|
||||
static uid_t ruid, euid;
|
||||
static gid_t rgid, egid;
|
||||
|
||||
-static char *id_user;
|
||||
-
|
||||
static int inituser ();
|
||||
|
||||
static int id_pruser ();
|
||||
--- examples/loadables/mkdir.c
|
||||
+++ examples/loadables/mkdir.c 2018-09-20 08:07:43.739129083 +0000
|
||||
@@ -170,7 +170,7 @@ make_path (path, nmode, parent_mode)
|
||||
while (*p == '/')
|
||||
p++;
|
||||
|
||||
- while (p = strchr (p, '/'))
|
||||
+ while ((p = strchr (p, '/')))
|
||||
{
|
||||
*p = '\0';
|
||||
if (stat (npath, &sb) != 0)
|
||||
--- examples/loadables/pathchk.c
|
||||
+++ examples/loadables/pathchk.c 2018-09-20 08:07:43.739129083 +0000
|
||||
@@ -292,10 +292,8 @@ validate_path (path, portability)
|
||||
if (*path == '\0')
|
||||
return 0;
|
||||
|
||||
-#ifdef lint
|
||||
/* Suppress `used before initialized' warning. */
|
||||
exists = 0;
|
||||
-#endif
|
||||
|
||||
/* Figure out the parent of the first element in PATH. */
|
||||
parent = xstrdup (*path == '/' ? "/" : ".");
|
||||
--- examples/loadables/print.c
|
||||
+++ examples/loadables/print.c 2018-09-20 08:07:43.739129083 +0000
|
||||
@@ -77,7 +77,7 @@ print_builtin (list)
|
||||
{
|
||||
int c, r, nflag, raw, ofd, sflag;
|
||||
intmax_t lfd;
|
||||
- char **v, *pfmt, *arg;
|
||||
+ char *pfmt;
|
||||
WORD_LIST *l;
|
||||
|
||||
nflag = raw = sflag = 0;
|
||||
--- examples/loadables/tee.c
|
||||
+++ examples/loadables/tee.c 2018-09-20 08:07:43.739129083 +0000
|
||||
@@ -70,8 +70,6 @@ tee_builtin (list)
|
||||
FLIST *fl;
|
||||
char *buf, *bp;
|
||||
|
||||
- char *t;
|
||||
-
|
||||
reset_internal_getopt ();
|
||||
append = nointr = 0;
|
||||
tee_flist = (FLIST *)NULL;
|
@ -1,97 +0,0 @@
|
||||
---
|
||||
lib/sh/tmpfile.c | 49 ++++++++++++++++++++++++++++++++++++++++++++++++-
|
||||
1 file changed, 48 insertions(+), 1 deletion(-)
|
||||
|
||||
--- lib/sh/tmpfile.c
|
||||
+++ lib/sh/tmpfile.c 2018-01-24 12:38:42.410481352 +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
|
||||
@@ -65,6 +73,8 @@ static unsigned long filenum = 1L;
|
||||
static char *
|
||||
get_sys_tmpdir ()
|
||||
{
|
||||
+ static int doshm;
|
||||
+
|
||||
if (sys_tmpdir)
|
||||
return sys_tmpdir;
|
||||
|
||||
@@ -91,6 +101,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;
|
||||
@@ -194,7 +229,8 @@ sh_mktmpfd (nameroot, flags, namep)
|
||||
{
|
||||
char *filename, *tdir, *lroot;
|
||||
int fd, tdlen;
|
||||
-
|
||||
+
|
||||
+enospace:
|
||||
filename = (char *)xmalloc (PATH_MAX + 1);
|
||||
tdir = get_tmpdir (flags);
|
||||
tdlen = strlen (tdir);
|
||||
@@ -217,6 +253,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;
|
||||
@@ -235,6 +275,13 @@ sh_mktmpfd (nameroot, flags, namep)
|
||||
}
|
||||
while (fd < 0 && errno == EEXIST);
|
||||
|
||||
+ if (fd < 0 && errno == ENOSPC && emergency_sys_tmpdir())
|
||||
+ {
|
||||
+ free (filename);
|
||||
+ filename = NULL;
|
||||
+ goto enospace;
|
||||
+ }
|
||||
+
|
||||
if (namep)
|
||||
*namep = filename;
|
||||
else
|
@ -1,31 +0,0 @@
|
||||
From: coolo@suse.com
|
||||
|
||||
perl 5.22 makes the long deprecated defined(@array) an hard
|
||||
error
|
||||
---
|
||||
support/texi2html | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
--- support/texi2html
|
||||
+++ support/texi2html 2016-03-08 11:49:40.596622296 +0000
|
||||
@@ -4855,9 +4855,9 @@ sub update_sec_num {
|
||||
my $ret;
|
||||
|
||||
$level--; # here we start at 0
|
||||
- if ($name =~ /^appendix/ || defined(@appendix_sec_num)) {
|
||||
+ if ($name =~ /^appendix/ || @appendix_sec_num) {
|
||||
# appendix style
|
||||
- if (defined(@appendix_sec_num)) {
|
||||
+ if (@appendix_sec_num) {
|
||||
&incr_sec_num($level, @appendix_sec_num);
|
||||
} else {
|
||||
@appendix_sec_num = ('A', 0, 0, 0);
|
||||
@@ -4865,7 +4865,7 @@ sub update_sec_num {
|
||||
$ret = join('.', @appendix_sec_num[0..$level]);
|
||||
} else {
|
||||
# normal style
|
||||
- if (defined(@normal_sec_num))
|
||||
+ if (@normal_sec_num)
|
||||
{
|
||||
&incr_sec_num($level, @normal_sec_num);
|
||||
}
|
@ -1,26 +0,0 @@
|
||||
---
|
||||
sig.c | 6 ++++++
|
||||
1 file changed, 6 insertions(+)
|
||||
|
||||
--- sig.c
|
||||
+++ sig.c 2018-11-29 08:13:00.103944580 +0000
|
||||
@@ -814,6 +814,8 @@ set_signal_handler (sig, handler)
|
||||
if (sig == SIGCHLD)
|
||||
act.sa_flags |= SA_RESTART; /* XXX */
|
||||
#endif
|
||||
+ if (handler == (trap_handler))
|
||||
+ act.sa_flags |= SA_NODEFER; /* XXX */
|
||||
/* Let's see if we can keep SIGWINCH from interrupting interruptible system
|
||||
calls, like open(2)/read(2)/write(2) */
|
||||
#if defined (SIGWINCH)
|
||||
@@ -826,6 +826,10 @@ set_signal_handler (sig, handler)
|
||||
it to be as close to SIG_IGN as possible. */
|
||||
if (sig == SIGTERM && handler == sigterm_sighandler)
|
||||
act.sa_flags |= SA_RESTART; /* XXX */
|
||||
+ else if (handler == (termsig_sighandler))
|
||||
+ act.sa_flags |= SA_NODEFER; /* XXX */
|
||||
+ if (sig == SIGTSTP || sig == SIGTTOU || sig == SIGTTIN || sig == SIGCONT)
|
||||
+ act.sa_flags |= SA_NODEFER; /* XXX */
|
||||
|
||||
sigemptyset (&act.sa_mask);
|
||||
sigemptyset (&oact.sa_mask);
|
@ -1,15 +0,0 @@
|
||||
---
|
||||
config-top.h | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
--- config-top.h
|
||||
+++ config-top.h 2018-09-20 08:15:45.026318359 +0000
|
||||
@@ -142,7 +142,7 @@
|
||||
|
||||
/* Define to 0 if you want the checkwinsize option off by default, 1 if you
|
||||
want it on. */
|
||||
-#define CHECKWINSIZE_DEFAULT 0
|
||||
+#define CHECKWINSIZE_DEFAULT 1
|
||||
|
||||
/* Define to 1 if you want to optimize for sequential array assignment when
|
||||
using indexed arrays, 0 if you want bash-4.2 behavior, which favors
|
BIN
bash-5.2-patches.tar.bz2
(Stored with Git LFS)
BIN
bash-5.2-patches.tar.bz2
(Stored with Git LFS)
Binary file not shown.
240
bash-5.2.dif
240
bash-5.2.dif
@ -1,240 +0,0 @@
|
||||
---
|
||||
Makefile.in | 2 +-
|
||||
config-top.h | 16 ++++++++++------
|
||||
doc/Makefile.in | 2 +-
|
||||
doc/bash.1 | 7 +++++--
|
||||
general.h | 3 +++
|
||||
parse.y | 2 +-
|
||||
shell.c | 6 +++++-
|
||||
support/man2html.c | 1 +
|
||||
support/rlvers.sh | 6 +++---
|
||||
support/shobj-conf | 5 +++--
|
||||
tests/glob.tests | 4 ++--
|
||||
tests/run-intl | 2 +-
|
||||
tests/run-read | 2 +-
|
||||
13 files changed, 37 insertions(+), 21 deletions(-)
|
||||
|
||||
--- Makefile.in
|
||||
+++ Makefile.in 2022-06-22 06:38:20.511747259 +0000
|
||||
@@ -466,7 +466,7 @@ SOURCES = $(CSOURCES) $(HSOURCES) $(BUI
|
||||
# headers in top-level source directory that get installed by install-headers
|
||||
INSTALLED_HEADERS = shell.h bashjmp.h command.h syntax.h general.h error.h \
|
||||
variables.h array.h assoc.h arrayfunc.h quit.h dispose_cmd.h \
|
||||
- make_cmd.h subst.h sig.h externs.h builtins.h \
|
||||
+ make_cmd.h subst.h sig.h externs.h builtins.h bashline.h \
|
||||
bashtypes.h xmalloc.h config-top.h config-bot.h \
|
||||
bashintl.h bashansi.h bashjmp.h alias.h hashlib.h \
|
||||
conftypes.h unwind_prot.h jobs.h siglist.h \
|
||||
--- config-top.h
|
||||
+++ config-top.h 2022-04-28 11:55:03.660248012 +0000
|
||||
@@ -60,10 +60,14 @@
|
||||
due to EPIPE. */
|
||||
/* #define DONT_REPORT_BROKEN_PIPE_WRITE_ERRORS */
|
||||
|
||||
+#ifndef _PATH_DEFPATH
|
||||
+# include <paths.h>
|
||||
+#endif
|
||||
+
|
||||
/* The default value of the PATH variable. */
|
||||
#ifndef DEFAULT_PATH_VALUE
|
||||
#define DEFAULT_PATH_VALUE \
|
||||
- "/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:."
|
||||
+ "/usr/local/bin:" _PATH_DEFPATH ":."
|
||||
#endif
|
||||
|
||||
/* If you want to unconditionally set a value for PATH in every restricted
|
||||
@@ -74,7 +78,7 @@
|
||||
the Posix.2 confstr () function, or CS_PATH define are not present. */
|
||||
#ifndef STANDARD_UTILS_PATH
|
||||
#define STANDARD_UTILS_PATH \
|
||||
- "/bin:/usr/bin:/sbin:/usr/sbin:/etc:/usr/etc"
|
||||
+ _PATH_STDPATH
|
||||
#endif
|
||||
|
||||
/* The default path for enable -f */
|
||||
@@ -97,20 +101,20 @@
|
||||
#define DEFAULT_BASHRC "~/.bashrc"
|
||||
|
||||
/* System-wide .bashrc file for interactive shells. */
|
||||
-/* #define SYS_BASHRC "/etc/bash.bashrc" */
|
||||
+#define SYS_BASHRC "/etc/bash.bashrc"
|
||||
|
||||
/* System-wide .bash_logout for login shells. */
|
||||
-/* #define SYS_BASH_LOGOUT "/etc/bash.bash_logout" */
|
||||
+#define SYS_BASH_LOGOUT "/etc/bash.bash_logout"
|
||||
|
||||
/* Define this to make non-interactive shells begun with argv[0][0] == '-'
|
||||
run the startup files when not in posix mode. */
|
||||
-/* #define NON_INTERACTIVE_LOGIN_SHELLS */
|
||||
+#define NON_INTERACTIVE_LOGIN_SHELLS
|
||||
|
||||
/* Define this if you want bash to try to check whether it's being run by
|
||||
sshd and source the .bashrc if so (like the rshd behavior). This checks
|
||||
for the presence of SSH_CLIENT or SSH2_CLIENT in the initial environment,
|
||||
which can be fooled under certain not-uncommon circumstances. */
|
||||
-/* #define SSH_SOURCE_BASHRC */
|
||||
+#define SSH_SOURCE_BASHRC
|
||||
|
||||
/* Define if you want the case-toggling operators (~[~]) and the
|
||||
`capcase' variable attribute (declare -c). */
|
||||
--- doc/Makefile.in
|
||||
+++ doc/Makefile.in 2022-04-28 11:53:04.334380153 +0000
|
||||
@@ -153,7 +153,7 @@ BASHREF_FILES = $(srcdir)/bashref.texi $
|
||||
# $(RM) $@
|
||||
# -${TEXI2PDF} $<
|
||||
|
||||
-all: ps info dvi text html $(MAN2HTML)
|
||||
+all: info html $(MAN2HTML)
|
||||
nodvi: ps info text html
|
||||
everything: all pdf
|
||||
|
||||
--- doc/bash.1
|
||||
+++ doc/bash.1 2022-06-22 06:37:14.908958305 +0000
|
||||
@@ -5745,8 +5745,8 @@ file (the \fIinputrc\fP file).
|
||||
The name of this file is taken from the value of the
|
||||
.SM
|
||||
.B INPUTRC
|
||||
-variable. If that variable is unset, the default is
|
||||
-.IR ~/.inputrc .
|
||||
+environment variable. If that variable is unset, readline will read both
|
||||
+.IR /etc/inputrc " and " ~/.inputrc .
|
||||
If that file does not exist or cannot be read, the ultimate default is
|
||||
.IR /etc/inputrc .
|
||||
When a program which uses the readline library starts up, the
|
||||
@@ -11706,6 +11706,9 @@ command history
|
||||
.TP
|
||||
.FN ~/.inputrc
|
||||
Individual \fIreadline\fP initialization file
|
||||
+.TP
|
||||
+.FN /etc/inputrc
|
||||
+System \fBreadline\fP initialization file
|
||||
.PD
|
||||
.SH AUTHORS
|
||||
Brian Fox, Free Software Foundation
|
||||
--- general.h
|
||||
+++ general.h 2022-04-28 11:53:04.334380153 +0000
|
||||
@@ -21,10 +21,13 @@
|
||||
#if !defined (_GENERAL_H_)
|
||||
#define _GENERAL_H_
|
||||
|
||||
+#include <time.h>
|
||||
+#include <sys/types.h>
|
||||
#include "stdc.h"
|
||||
|
||||
#include "bashtypes.h"
|
||||
#include "chartypes.h"
|
||||
+#include "bashline.h"
|
||||
|
||||
#if defined (HAVE_SYS_RESOURCE_H) && defined (RLIMTYPE)
|
||||
# if defined (HAVE_SYS_TIME_H)
|
||||
--- parse.y
|
||||
+++ parse.y 2022-04-28 11:53:04.334380153 +0000
|
||||
@@ -1498,7 +1498,7 @@ input_file_descriptor ()
|
||||
|
||||
#if defined (READLINE)
|
||||
char *current_readline_prompt = (char *)NULL;
|
||||
-char *current_readline_line = (char *)NULL;
|
||||
+unsigned char *current_readline_line = (unsigned char *)NULL;
|
||||
int current_readline_line_index = 0;
|
||||
|
||||
static int
|
||||
--- shell.c
|
||||
+++ shell.c 2022-04-28 11:56:12.623015117 +0000
|
||||
@@ -45,6 +45,7 @@
|
||||
#if defined (HAVE_UNISTD_H)
|
||||
# include <sys/types.h>
|
||||
# include <unistd.h>
|
||||
+# include <grp.h>
|
||||
#endif
|
||||
|
||||
#include "bashintl.h"
|
||||
@@ -511,7 +512,7 @@ main (argc, argv, env)
|
||||
read_but_dont_execute = 1;
|
||||
#endif
|
||||
|
||||
- if (running_setuid && privileged_mode == 0)
|
||||
+ if (running_setuid && privileged_mode == 0 /* && act_like_sh == 0 */)
|
||||
disable_priv_mode ();
|
||||
|
||||
/* Need to get the argument to a -c option processed in the
|
||||
@@ -1341,6 +1342,9 @@ disable_priv_mode ()
|
||||
{
|
||||
int e;
|
||||
|
||||
+ if (!current_user.user_name)
|
||||
+ get_current_user_info();
|
||||
+ initgroups (current_user.user_name, current_user.gid);
|
||||
#if HAVE_SETRESUID
|
||||
if (setresuid (current_user.uid, current_user.uid, current_user.uid) < 0)
|
||||
#else
|
||||
--- support/man2html.c
|
||||
+++ support/man2html.c 2022-04-28 11:53:04.338380081 +0000
|
||||
@@ -78,6 +78,7 @@
|
||||
#include <time.h>
|
||||
#include <sys/time.h>
|
||||
#include <errno.h>
|
||||
+#include <unistd.h>
|
||||
|
||||
#define NULL_TERMINATED(n) ((n) + 1)
|
||||
|
||||
--- support/rlvers.sh
|
||||
+++ support/rlvers.sh 2022-04-28 11:53:04.338380081 +0000
|
||||
@@ -27,10 +27,10 @@ TDIR=$TMPDIR/rlvers
|
||||
|
||||
# defaults
|
||||
CC=cc
|
||||
-RL_LIBDIR=/usr/local/lib
|
||||
-RL_INCDIR=/usr/local/include
|
||||
+RL_LIBDIR=/lib
|
||||
+RL_INCDIR=/usr/include
|
||||
|
||||
-TERMCAP_LIB="-ltermcap"
|
||||
+echo 'int main () { return 0; }' | gcc -ltinfo -o /dev/null -xc - > /dev/null 2>&1 && TERMCAP_LIB="-ltinfo" || TERMCAP_LIB="-lncurses"
|
||||
|
||||
# cannot rely on the presence of getopts
|
||||
while [ $# -gt 0 ]; do
|
||||
--- support/shobj-conf
|
||||
+++ support/shobj-conf 2022-04-28 11:57:29.117647038 +0000
|
||||
@@ -126,10 +126,11 @@ sunos5*|solaris2*)
|
||||
linux*-*|gnu*-*|k*bsd*-gnu-*|midnightbsd*|freebsd*|dragonfly*)
|
||||
SHOBJ_CFLAGS=-fPIC
|
||||
SHOBJ_LD='${CC}'
|
||||
- SHOBJ_LDFLAGS='-shared -Wl,-soname,$@'
|
||||
+ SHOBJ_LDFLAGS='-shared'
|
||||
|
||||
- SHLIB_XLDFLAGS='-Wl,-rpath,$(libdir) -Wl,-soname,`basename $@ $(SHLIB_MINOR)`'
|
||||
+ SHLIB_XLDFLAGS='-Wl,-rpath-link,$(libdir) -Wl,-soname,`basename $@ $(SHLIB_MINOR)`'
|
||||
SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)'
|
||||
+ echo 'int main () { return 0; }' | gcc -ltinfo -o /dev/null -xc - > /dev/null 2>&1 && SHLIB_LIBS=-ltinfo || SHLIB_LIBS=-lncurses
|
||||
;;
|
||||
|
||||
# Darwin/MacOS X
|
||||
--- tests/glob.tests
|
||||
+++ tests/glob.tests 2022-04-28 11:53:04.338380081 +0000
|
||||
@@ -34,8 +34,8 @@ ${THIS_SH} ./glob10.sub
|
||||
|
||||
MYDIR=$PWD # save where we are
|
||||
|
||||
-TESTDIR=$TMPDIR/glob-test-$$
|
||||
-mkdir $TESTDIR
|
||||
+TESTDIR=${TMPDIR:=/tmp}/glob-test-$$
|
||||
+mkdir -p $TESTDIR
|
||||
builtin cd $TESTDIR || { echo $0: cannot cd to $TESTDIR >&2 ; exit 1; }
|
||||
rm -rf *
|
||||
|
||||
--- tests/run-intl
|
||||
+++ tests/run-intl 2022-04-28 11:58:22.140698412 +0000
|
||||
@@ -2,4 +2,4 @@
|
||||
( diff -a ./intl.right ./intl.right >/dev/null 2>&1 ) && AFLAG=-a
|
||||
|
||||
${THIS_SH} ./intl.tests > ${BASH_TSTOUT}
|
||||
-diff $AFLAG ${BASH_TSTOUT} intl.right && rm -f ${BASH_TSTOUT}
|
||||
+diff -w $AFLAG ${BASH_TSTOUT} intl.right && rm -f ${BASH_TSTOUT}
|
||||
--- tests/run-read
|
||||
+++ tests/run-read 2022-04-28 11:53:04.338380081 +0000
|
||||
@@ -1,4 +1,4 @@
|
||||
echo "warning: please do not consider output differing only in the amount of" >&2
|
||||
echo "warning: white space to be an error." >&2
|
||||
${THIS_SH} ./read.tests > ${BASH_TSTOUT} 2>&1
|
||||
-diff ${BASH_TSTOUT} read.right && rm -f ${BASH_TSTOUT}
|
||||
+diff -w ${BASH_TSTOUT} read.right && rm -f ${BASH_TSTOUT}
|
BIN
bash-5.2.tar.gz
(Stored with Git LFS)
BIN
bash-5.2.tar.gz
(Stored with Git LFS)
Binary file not shown.
Binary file not shown.
@ -1,5 +0,0 @@
|
||||
addFilter(".*shared-library-without-dependency-information.*")
|
||||
addFilter(".*zero-length.*/etc/skel/\..*")
|
||||
addFilter(".*call-to-mktemp.*/usr/bin/bash.*")
|
||||
addFilter(".*W:.*patch-not-applied.*Patch.*:.*bash-4\.3-winch\.dif.*")
|
||||
addFilter(".*W:.*macro-in-comment.*%patch.*")
|
3627
bash.changes
3627
bash.changes
File diff suppressed because it is too large
Load Diff
25
bash.keyring
25
bash.keyring
@ -1,25 +0,0 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
mQGiBEEOsGwRBACFa0A1oa71HSZLWxAx0svXzhOZNQZOzqHmSuGOG92jIpQpr8Dp
|
||||
vgRh40YpAwdcXb8QG1J5yGAKeevNE1zCFaA725vGSdHUyypHouV0xoWwukYO6qly
|
||||
yX+2BZU+okBUqoWQkoWxiYaCSfzB2Ln7pmdys1fJhcgBKf3VjWCjd2XJTwCgoFJO
|
||||
wyBFJdugjfwjSoRSwDOIMf0D/iQKqlWhIO1LGpMrGX0il0/x4zj0NAcSwAk7LaPZ
|
||||
bN4UPjn5pqGEHBlf1+xDDQCkAoZ/VqESGZragl4VqJfxBr29Ag0UDvNbUbXoxQsA
|
||||
Rdero1M8GiAIRc50hj7HXFoERwenbNDJL86GPLAQOTGOCa4W2o29nFfFjQrsrrYH
|
||||
zVtyA/9oyKvTeEMJ7NA3VJdWcmn7gOu0FxEmSNhSoV1T4vP21Wf7f5niCCRKQLNy
|
||||
Uy0wEApQi4tSysdz+AbgAc0b/bHYVzIf2uO2lIEZQNNt+3g2bmXgloWmW5fsm/di
|
||||
50Gm1l1Na63d3RZ00SeFQos6WEwLUHEB0yp6KXluXLLIZitEJIheBBAWCAAGBQJa
|
||||
Xm/3AAoJEBu4nAYCNnRJGPQBAM2cca3+cMUKWtSTxt4gYWBbV+ORFbJtbprOmukg
|
||||
QNnEAQDrFDHtP9Wzo+R+0O7xUXjrkem0HcZmUKQPTim61wDRDbQaQ2hldCBSYW1l
|
||||
eSA8Y2hldEBjd3J1LmVkdT6IZgQTEQIAHgUCQQ6wbAIbAwYLCQgHAwIDFQIDAxYC
|
||||
AQIeAQIXgAASCRC7WGnwZOp0qwdlR1BHAAEBzs0An30UTMW8N1jOoJzNcXoopeLt
|
||||
g3k4AJ9pwNiyhlyeezLsSMFkvTPAbBv+wbkBDQRBDrBvEAQAkK6TAOKBEM+EC4j6
|
||||
V/7o/riVZqcgU5cid2qG9TXdwNtD9a3kvA/ObZBO93sX59wc6Bnwo4VJxsOmMlpG
|
||||
rAjJsxNwg3QHakEtf8LXRbVpj5xStdmBdQZUhIQyalo/2/TZq5OijtddUQcL5cs7
|
||||
0hTv/FpT3wUvr2Xr8rjF41IFEz8AAwcD/A0CZEGlzIrT5WCBnl6xBog/8vKiUCba
|
||||
rByat3d1mL6DbizvKNXQRTC9E/vEdENAWCQCjr75Bu55xT8n3SXGtWdDC5xmZ/P3
|
||||
OBYORP8yl8H8I1FIosWOFirbIeYdZPq8SPD1HL+EXo9zSiHVrrZRJ19ooCKKbSdX
|
||||
HFCY+aJG+0KZiFEEGBECAAkFAkEOsG8CGwwAEgkQu1hp8GTqdKsHZUdQRwABAeNw
|
||||
AJ9mWRUIPBrP81M71zLe3r2halU83ACdHB7SqT9Yv+B+EffjrGHkHccVsU0=
|
||||
=PsQ4
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
642
bash.spec
642
bash.spec
@ -1,642 +0,0 @@
|
||||
#
|
||||
# spec file for package bash
|
||||
#
|
||||
# Copyright (c) 2023 SUSE LLC
|
||||
#
|
||||
# All modifications and additions to the file contributed by third parties
|
||||
# remain the property of their copyright owners, unless otherwise agreed
|
||||
# upon. The license for this file, and modifications and additions to the
|
||||
# file, is the same license as for the pristine package itself (unless the
|
||||
# license for the pristine package is not an Open Source License, in which
|
||||
# case the license is the MIT License). An "Open Source License" is a
|
||||
# license that conforms to the Open Source Definition (Version 1.9)
|
||||
# published by the Open Source Initiative.
|
||||
|
||||
# Please submit bugfixes or comments via https://bugs.opensuse.org/
|
||||
#
|
||||
|
||||
|
||||
%if 0%{?suse_version} > 1500
|
||||
%bcond_with alternatives
|
||||
%else
|
||||
%bcond_without alternatives
|
||||
%endif
|
||||
# Unicode tests do alloc to much memory
|
||||
%bcond_with altarray
|
||||
%define rl_major 8
|
||||
%define rl_version 8.2
|
||||
|
||||
%define bextend %{nil}
|
||||
%define bversion 5.2
|
||||
%define bpatchlvl %(bash %{_sourcedir}/get_version_number.sh %{_sourcedir})
|
||||
%global _incdir %{_includedir}
|
||||
%global _ldldir %{_libdir}/bash
|
||||
%global _minsh 0
|
||||
%bcond_with import_function
|
||||
%bcond_with sjis
|
||||
Name: bash
|
||||
Version: %{bversion}.%{bpatchlvl}
|
||||
Release: 0
|
||||
Summary: The GNU Bourne-Again Shell
|
||||
# The package bash-completion is a source of
|
||||
# bugs which will hit at most this package
|
||||
#Recommends: bash-completion
|
||||
License: GPL-3.0-or-later
|
||||
Group: System/Shells
|
||||
URL: https://www.gnu.org/software/bash/bash.html
|
||||
# Git: https://git.savannah.gnu.org/cgit/bash.git
|
||||
Source0: https://ftp.gnu.org/gnu/bash/bash-%{bversion}%{bextend}.tar.gz
|
||||
Source1: bash-%{bversion}-patches.tar.bz2
|
||||
Source2: get_version_number.sh
|
||||
Source4: run-tests
|
||||
Source5: dot.bashrc
|
||||
Source6: dot.profile
|
||||
Source7: bash-rpmlintrc
|
||||
Source8: baselibs.conf
|
||||
# Remember unsafe method, compare with
|
||||
# https://lists.gnu.org/archive/html/bug-bash/2011-03/msg00070.html
|
||||
# https://lists.gnu.org/archive/html/bug-bash/2011-03/msg00071.html
|
||||
# https://lists.gnu.org/archive/html/bug-bash/2011-03/msg00073.html
|
||||
Source9: bash-4.2-history-myown.dif.bz2
|
||||
Source10: https://ftp.gnu.org/gnu/bash/bash-%{bversion}%{bextend}.tar.gz.sig
|
||||
# GPG key 7C0135FB088AAF6C66C650B9BB5869F064EA74AB Chet Ramey
|
||||
Source11: bash.keyring
|
||||
Patch0: bash-%{bversion}.dif
|
||||
Patch1: bash-2.03-manual.patch
|
||||
Patch3: bash-4.3-2.4.4.patch
|
||||
Patch4: bash-3.0-evalexp.patch
|
||||
Patch5: bash-3.0-warn-locale.patch
|
||||
Patch7: bash-4.3-decl.patch
|
||||
Patch9: bash-4.3-include-unistd.dif
|
||||
Patch10: bash-3.2-printf.patch
|
||||
Patch11: bash-4.3-loadables.dif
|
||||
Patch12: bash-4.1-completion.dif
|
||||
Patch13: bash-4.2-nscdunmap.dif
|
||||
Patch14: bash-4.3-sigrestart.patch
|
||||
# PATCH-FIX-UPSTREAM bnc#382214 -- disabled due bnc#806628 by -DBNC382214=0
|
||||
Patch16: bash-4.0-setlocale.dif
|
||||
# PATCH-EXTEND-SUSE bnc#828877 -- xterm resizing does not pass to all sub clients
|
||||
Patch18: bash-4.3-winch.dif
|
||||
Patch40: bash-4.1-bash.bashrc.dif
|
||||
# PATCH-FIX-SUSE For bsc#1065158 add support for broken Japanese locale Shift JIS
|
||||
Patch42: bash-4.3-SJIS.patch
|
||||
Patch46: man2html-no-timestamp.patch
|
||||
Patch47: bash-4.3-perl522.patch
|
||||
# PATCH-FIX-SUSE
|
||||
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
|
||||
# PATCH-FIX-SUSE
|
||||
Patch50: quotes-man2html.patch
|
||||
BuildRequires: autoconf
|
||||
BuildRequires: bison
|
||||
BuildRequires: fdupes
|
||||
BuildRequires: glibc-locale
|
||||
BuildRequires: glibc-locale-base
|
||||
BuildRequires: makeinfo
|
||||
BuildRequires: patchutils
|
||||
BuildRequires: pkgconfig
|
||||
BuildRequires: screen
|
||||
BuildRequires: sed
|
||||
%if %{with alternatives}
|
||||
BuildRequires: update-alternatives
|
||||
%endif
|
||||
BuildRequires: pkgconfig(audit)
|
||||
BuildRequires: pkgconfig(ncurses)
|
||||
# This has to be always the same version as included in the bash its self
|
||||
BuildRequires: pkgconfig(readline) = 8.2
|
||||
%if %{with alternatives}
|
||||
Requires(post): update-alternatives
|
||||
Requires(post): libreadline%{rl_major} = %{rl_version}
|
||||
Requires(preun):update-alternatives
|
||||
%endif
|
||||
Requires: libreadline%{rl_major} = %{rl_version}
|
||||
Suggests: bash-doc = %{version}
|
||||
Suggests: command-not-found
|
||||
Provides: /bin/bash
|
||||
%if %{with alternatives}
|
||||
Provides: /bin/sh
|
||||
%else
|
||||
Suggests: bash-sh
|
||||
%endif
|
||||
|
||||
%description
|
||||
Bash is an sh-compatible command interpreter that executes commands
|
||||
read from standard input or from a file. Bash incorporates useful
|
||||
features from the Korn and C shells (ksh and csh). Bash is intended to
|
||||
be a conformant implementation of the IEEE Posix Shell and Tools
|
||||
specification (IEEE Working Group 1003.2).
|
||||
|
||||
%package doc
|
||||
Summary: Documentation how to Use the GNU Bourne-Again Shell
|
||||
Group: Documentation/HTML
|
||||
Supplements: (bash and patterns-base-documentation)
|
||||
Provides: bash:%{_infodir}/bash.info.gz
|
||||
BuildArch: noarch
|
||||
|
||||
%description doc
|
||||
This package contains the documentation for using the bourne shell
|
||||
interpreter Bash.
|
||||
|
||||
%lang_package
|
||||
|
||||
%if %{without alternatives}
|
||||
%package sh
|
||||
Summary: Handle behaviour of /bin/sh
|
||||
Group: System/Shells
|
||||
Provides: alternative(sh)
|
||||
Conflicts: alternative(sh)
|
||||
PreReq: bash = %{version}
|
||||
BuildArch: noarch
|
||||
|
||||
%description sh
|
||||
Use bash as /bin/sh implementation.
|
||||
%endif
|
||||
|
||||
%package devel
|
||||
Summary: Include Files mandatory for Development of bash loadable builtins
|
||||
Group: Development/Languages/C and C++
|
||||
|
||||
%description devel
|
||||
This package contains the C header files for writing loadable new
|
||||
builtins for the interpreter Bash. Use the output of the command
|
||||
`pkg-config bash --cflags' on the compilers command line.
|
||||
|
||||
%package loadables
|
||||
Summary: Loadable bash builtins
|
||||
Group: System/Shells
|
||||
|
||||
%description loadables
|
||||
This package contains the examples for the ready-to-dynamic-load
|
||||
builtins found in the source tar ball of the bash:
|
||||
|
||||
basename Return non-directory portion of pathname.
|
||||
|
||||
cut cut(1) replacement.
|
||||
|
||||
dirname Return directory portion of pathname.
|
||||
|
||||
finfo Print file info.
|
||||
|
||||
getconf POSIX.2 getconf utility.
|
||||
|
||||
head Copy first part of files.
|
||||
|
||||
id POSIX.2 user identity.
|
||||
|
||||
ln Make links.
|
||||
|
||||
logname Print login name of current user.
|
||||
|
||||
mkdir Make directories.
|
||||
|
||||
pathchk Check pathnames for validity and portability.
|
||||
|
||||
print Loadable ksh-93 style print builtin.
|
||||
|
||||
printenv Minimal builtin clone of BSD printenv(1).
|
||||
|
||||
push Anyone remember TOPS-20?
|
||||
|
||||
realpath Canonicalize pathnames, resolving symlinks.
|
||||
|
||||
rmdir Remove directory.
|
||||
|
||||
sleep sleep for fractions of a second.
|
||||
|
||||
strftime Loadable builtin interface to strftime(3).
|
||||
|
||||
sync Sync the disks by forcing pending filesystem writes to
|
||||
complete.
|
||||
|
||||
tee Duplicate standard input.
|
||||
|
||||
tty Return terminal name.
|
||||
|
||||
uname Print system information.
|
||||
|
||||
unlink Remove a directory entry.
|
||||
|
||||
whoami Print out username of current user.
|
||||
|
||||
%if 0%{?suse_version} >= 1550
|
||||
%package legacybin
|
||||
Summary: Legacy usrmove helper files
|
||||
Group: System/Shells
|
||||
Requires: bash = %{version}-%{release}
|
||||
Requires: this-is-only-for-build-envs
|
||||
Conflicts: rpmlib(X-CheckUnifiedSystemdir)
|
||||
BuildArch: noarch
|
||||
|
||||
%description legacybin
|
||||
Legacy usrmove helper files for the build system. Do not install.
|
||||
%endif
|
||||
|
||||
%prep
|
||||
%if %{with sjis}
|
||||
%{warn:Shift JIS support is enabled}
|
||||
%else
|
||||
%{echo:Shift JIS support disabled}
|
||||
%endif
|
||||
%setup -q -n bash-%{bversion}%{bextend} -b1
|
||||
typeset -i level
|
||||
set +x
|
||||
for patch in ../bash-%{bversion}-patches/*-*[0-9]; do
|
||||
test -e $patch || break
|
||||
|
||||
let level=0 || true
|
||||
file=$(lsdiff --files=1 $patch)
|
||||
if test ! -e $file ; then
|
||||
file=${file#*/}
|
||||
let level++ || true
|
||||
fi
|
||||
test -e $file || exit 1
|
||||
sed -ri '/^\*\*\* \.\./{ s@\.\./bash-%{bversion}[^/]*/@@ }' $patch
|
||||
echo Patch $patch
|
||||
patch -s -p$level < $patch
|
||||
done
|
||||
set -x
|
||||
%patch1 -b .manual
|
||||
%patch3 -b .2.4.4
|
||||
%patch4 -b .evalexp
|
||||
%patch5 -b .warnlc
|
||||
%patch7 -b .decl
|
||||
%patch9 -b .unistd
|
||||
%patch10 -b .printf
|
||||
%patch11 -b .plugins
|
||||
%patch12 -b .completion
|
||||
%patch13 -b .nscdunmap
|
||||
%patch14 -b .sigrestart
|
||||
%patch16 -b .setlocale
|
||||
#%patch18 -p0 -b .winch
|
||||
%patch40 -b .bashrc
|
||||
%if %{with sjis}
|
||||
%patch42 -b .sjis
|
||||
%endif
|
||||
%patch46 -b .notimestamp
|
||||
%patch47 -b .perl522
|
||||
%if %{with import_function}
|
||||
%patch48 -b .eif
|
||||
%endif
|
||||
%patch49 -b .pthtmp
|
||||
%patch50 -b .qd
|
||||
%patch0
|
||||
|
||||
# This has to be always the same version as included in the bash its self
|
||||
rl1=($(sed -rn '/RL_READLINE_VERSION/p' lib/readline/readline.h))
|
||||
rl2=($(sed -rn '/RL_READLINE_VERSION/p' %{_includedir}/readline/readline.h))
|
||||
test ${rl1[2]} = ${rl2[2]} || exit 1
|
||||
|
||||
# Sometimes we face major ABI change(s) but only a minor version change
|
||||
rl1=($(sed -rn '/RL_VERSION_MAJOR/p' lib/readline/readline.h))
|
||||
test ${rl1[2]} = %{rl_major} || exit 1
|
||||
rl2=($(sed -rn '/RL_VERSION_MINOR/p' lib/readline/readline.h))
|
||||
test ${rl1[2]}.${rl2[2]} = %{rl_version} || exit 1
|
||||
|
||||
%if 0%{?qemu_user_space_build}
|
||||
# Something in qemu clobbers the signal mask to block SIGALRM during the
|
||||
# execution of this test, causing it to hang. Skip it.
|
||||
echo exit 0 > tests/read7.sub
|
||||
%endif
|
||||
|
||||
%build
|
||||
LANG=POSIX
|
||||
LC_ALL=$LANG
|
||||
unset LC_CTYPE
|
||||
SCREENDIR=$(mktemp -d ${PWD}/screen.XXXXXX) || exit 1
|
||||
SCREENRC=${SCREENDIR}/bash
|
||||
export SCREENRC SCREENDIR
|
||||
exec 0< /dev/null
|
||||
SCREENLOG=${SCREENDIR}/log
|
||||
cat > $SCREENRC<<-EOF
|
||||
deflogin off
|
||||
deflog on
|
||||
logfile $SCREENLOG
|
||||
logfile flush 1
|
||||
logtstamp off
|
||||
log on
|
||||
setsid on
|
||||
scrollback 0
|
||||
silence on
|
||||
utf8 on
|
||||
EOF
|
||||
HOSTTYPE=%{_target_cpu}
|
||||
VENDOR=%{_target_vendor}
|
||||
OSTYPE=%{_target_os}
|
||||
MACHTYPE=${HOSTTYPE}-${VENDOR}-${OSTYPE}
|
||||
export LANG LC_ALL HOSTTYPE VENDOR OSTYPE MACHTYPE
|
||||
cflags ()
|
||||
{
|
||||
local flag=$1; shift
|
||||
local var=$1; shift
|
||||
test -n "${flag}" -a -n "${var}" || return
|
||||
case "${!var}" in
|
||||
*${flag}*) return
|
||||
esac
|
||||
set -o noclobber
|
||||
case "$flag" in
|
||||
-Wl,*)
|
||||
if echo 'int main () { return 0; }' | \
|
||||
${CC:-gcc} -Werror $flag -o /dev/null -xc - > /dev/null 2>&1 ; then
|
||||
eval $var=\${$var:+\$$var\ }$flag
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
if ${CC:-gcc} -Werror ${flag/#-Wno-/-W} -S -o /dev/null -xc /dev/null > /dev/null 2>&1 ; then
|
||||
eval $var=\${$var:+\$$var\ }$flag
|
||||
fi
|
||||
if ${CXX:-g++} -Werror ${flag/#-Wno-/-W} -S -o /dev/null -xc++ /dev/null > /dev/null 2>&1 ; then
|
||||
eval $var=\${$var:+\$$var\ }$flag
|
||||
fi
|
||||
esac
|
||||
set +o noclobber
|
||||
}
|
||||
LARGEFILE="$(getconf LFS_CFLAGS)"
|
||||
CFLAGS="%{optflags} $LARGEFILE -D_GNU_SOURCE -DRECYCLES_PIDS -Wall -g"
|
||||
LDFLAGS=""
|
||||
#
|
||||
# Never ever put -DMUST_UNBLOCK_CHLD herein as this breaks bash
|
||||
#
|
||||
cflags -Wuninitialized CFLAGS
|
||||
cflags -Wextra CFLAGS
|
||||
cflags -Wno-unprototyped-calls CFLAGS
|
||||
cflags -Wno-switch-enum CFLAGS
|
||||
cflags -Wno-unused-variable CFLAGS
|
||||
cflags -Wno-unused-parameter CFLAGS
|
||||
cflags -Wno-parentheses CFLAGS
|
||||
cflags -ftree-loop-linear CFLAGS
|
||||
cflags -pipe CFLAGS
|
||||
cflags -DBNC382214=0 CFLAGS
|
||||
cflags -DIMPORT_FUNCTIONS_DEF=0 CFLAGS
|
||||
cflags -Wl,--as-needed LDFLAGS
|
||||
cflags -Wl,-O2 LDFLAGS
|
||||
cflags -Wl,-rpath,%{_ldldir} LDFLAGS
|
||||
# /proc is required for correct configuration
|
||||
test -d /dev/fd || { echo "/proc is not mounted!" >&2; exit 1; }
|
||||
CC=gcc
|
||||
%if %{_minsh}
|
||||
cflags -Os CFLAGS
|
||||
# cflags -U_FORTIFY_SOURCE CFLAGS
|
||||
# cflags -funswitch-loops CFLAGS
|
||||
# cflags -ftree-loop-im CFLAGS
|
||||
# cflags -ftree-loop-ivcanon CFLAGS
|
||||
# cflags -fprefetch-loop-arrays CFLAGS
|
||||
# cflags -fno-stack-protector CFLAGS
|
||||
# cflags -fno-unwind-tables CFLAGS
|
||||
# cflags -fno-asynchronous-unwind-tables CFLAGS
|
||||
%endif
|
||||
CFLAGS="$CFLAGS -DDEFAULT_LOADABLE_BUILTINS_PATH='\"%{_libdir}/%{name}\"'"
|
||||
CC_FOR_BUILD="$CC"
|
||||
CFLAGS_FOR_BUILD="$CFLAGS"
|
||||
export CC_FOR_BUILD CFLAGS_FOR_BUILD CFLAGS LDFLAGS CC
|
||||
autoconf
|
||||
#
|
||||
# We have a malloc with our glibc
|
||||
#
|
||||
SYSMALLOC="
|
||||
--without-gnu-malloc
|
||||
--without-bash-malloc
|
||||
--enable-mem-scramble
|
||||
"
|
||||
#
|
||||
# System readline library (comment out it not to be used)
|
||||
#
|
||||
READLINE="
|
||||
--with-installed-readline
|
||||
"
|
||||
bash support/mkconffiles -v
|
||||
%if %{_minsh}
|
||||
./configure --build=%{_target_cpu}-suse-linux \
|
||||
--prefix=%{_prefix} \
|
||||
--mandir=%{_mandir} \
|
||||
--infodir=%{_infodir} \
|
||||
--libdir=%{_libdir} \
|
||||
--with-curses \
|
||||
--with-afs \
|
||||
--with-gnu-ld \
|
||||
$SYSMALLOC \
|
||||
--enable-minimal-config \
|
||||
--enable-arith-for-command \
|
||||
--enable-array-variables \
|
||||
--disable-alt-array-implementation \
|
||||
--enable-brace-expansion \
|
||||
--enable-casemod-attributes \
|
||||
--enable-casemod-expansion \
|
||||
--enable-command-timing \
|
||||
--enable-cond-command \
|
||||
--enable-cond-regexp \
|
||||
--enable-coprocesses \
|
||||
--enable-directory-stack \
|
||||
--enable-dparen-arithmetic \
|
||||
--enable-extended-glob \
|
||||
--enable-job-control \
|
||||
--enable-net-redirections \
|
||||
--enable-process-substitution \
|
||||
--enable-glob-asciiranges-default \
|
||||
--disable-strict-posix-default \
|
||||
--enable-separate-helpfiles=%{_datadir}/bash/helpfiles \
|
||||
$READLINE
|
||||
%make_build Program=sh sh
|
||||
%make_build distclean
|
||||
%endif
|
||||
./configure --build=%{_target_cpu}-suse-linux \
|
||||
--prefix=%{_prefix} \
|
||||
--mandir=%{_mandir} \
|
||||
--infodir=%{_infodir} \
|
||||
--libdir=%{_libdir} \
|
||||
--docdir=%{_docdir}/%{name} \
|
||||
--with-curses \
|
||||
--with-afs \
|
||||
--with-gnu-ld \
|
||||
$SYSMALLOC \
|
||||
--enable-threads=posix \
|
||||
--enable-job-control \
|
||||
--enable-net-redirections \
|
||||
--enable-alias \
|
||||
--enable-readline \
|
||||
--enable-history \
|
||||
--enable-bang-history \
|
||||
--enable-directory-stack \
|
||||
--enable-process-substitution \
|
||||
--enable-prompt-string-decoding \
|
||||
--enable-select \
|
||||
--enable-help-builtin \
|
||||
--enable-separate-helpfiles \
|
||||
--enable-array-variables \
|
||||
%if %{with altarray}
|
||||
--enable-alt-array-implementation \
|
||||
%else
|
||||
--disable-alt-array-implementation \
|
||||
%endif
|
||||
--enable-brace-expansion \
|
||||
--enable-command-timing \
|
||||
--enable-disabled-builtins \
|
||||
--enable-glob-asciiranges-default \
|
||||
--enable-translatable-strings \
|
||||
--disable-strict-posix-default \
|
||||
--enable-multibyte \
|
||||
--enable-separate-helpfiles=%{_datadir}/bash/helpfiles \
|
||||
$READLINE
|
||||
sed -rn '/Configuration feature settings controllable by autoconf/,/End of configuration settings controllable by autoconf/p' < config.h
|
||||
profilecflags=CFLAGS="$CFLAGS"
|
||||
%if 0%{?do_profiling}
|
||||
profilecflags=CFLAGS="$CFLAGS %{cflags_profile_generate}"
|
||||
%endif
|
||||
makeopts="Machine=${HOSTTYPE} OS=${OSTYPE} VENDOR=${VENDOR} MACHTYPE=${MACHTYPE}"
|
||||
%make_build $makeopts "$profilecflags" \
|
||||
all printenv recho zecho xcase
|
||||
TMPDIR=$(mktemp -d /tmp/bash.XXXXXXXXXX) || exit 1
|
||||
> $SCREENLOG
|
||||
tail -q -s 0.5 -f $SCREENLOG & pid=$!
|
||||
env -i HOME=$PWD TERM=$TERM LD_LIBRARY_PATH=$LD_RUN_PATH TMPDIR=$TMPDIR \
|
||||
SCREENRC=$SCREENRC SCREENDIR=$SCREENDIR \
|
||||
screen -D -m %make_build -j1 TESTSCRIPT=%{SOURCE4} check
|
||||
kill -TERM $pid
|
||||
%if 0%{?do_profiling}
|
||||
rm -f jobs.gcda
|
||||
profilecflags=CFLAGS="$CFLAGS %{cflags_profile_feedback} -fprofile-correction"
|
||||
%make_build $makeopts "$profilecflags" clean
|
||||
%endif
|
||||
%make_build $makeopts "$profilecflags" all
|
||||
%make_build $makeopts -C examples/loadables/
|
||||
%make_build $makeopts documentation
|
||||
grep -F '$'\' doc/bash.html %{nil:test for boo#1203091}
|
||||
|
||||
%check
|
||||
%make_build -j1 check
|
||||
|
||||
%install
|
||||
%make_install
|
||||
make -C examples/loadables/ install-supported DESTDIR=%{buildroot} libdir=%{_libdir}
|
||||
mv -vf %{buildroot}%{_ldldir}/*.h %{buildroot}%{_includedir}/bash/
|
||||
mv -vf %{buildroot}%{_ldldir}/*.inc %{buildroot}%{_datadir}/bash
|
||||
rm -rf %{buildroot}/%{_lib}/pkgconfig
|
||||
sed -ri '/CC = gcc/s@(CC = gcc).*@\1@' %{buildroot}%{_libdir}/pkgconfig/bash.pc
|
||||
%if %{with alternatives}
|
||||
mkdir -p %{buildroot}%{_sysconfdir}/alternatives
|
||||
%endif
|
||||
#
|
||||
# It should be noted that the move of /bin/bash to /usr/bin/bash
|
||||
# had NOT done by me at 2019/02/08. Now only a symbolic link
|
||||
# remains here :(
|
||||
# The same had happen for the system POSIX shell /bin/sh
|
||||
#
|
||||
mkdir -p %{buildroot}/bin
|
||||
ln -sf %{_bindir}/bash %{buildroot}/bin/bash
|
||||
ln -sf %{_bindir}/sh %{buildroot}/bin/sh
|
||||
ln -sf bash %{buildroot}%{_bindir}/rbash
|
||||
%if %{with alternatives}
|
||||
ln -sf %{_sysconfdir}/alternatives/sh %{buildroot}%{_bindir}/sh
|
||||
%else
|
||||
ln -sf %{_bindir}/bash %{buildroot}%{_bindir}/sh
|
||||
%endif
|
||||
install -m 644 COMPAT NEWS %{buildroot}%{_docdir}/%{name}
|
||||
install -m 644 doc/FAQ %{buildroot}%{_docdir}/%{name}
|
||||
install -m 644 doc/INTRO %{buildroot}%{_docdir}/%{name}
|
||||
install -m 644 doc/*.html %{buildroot}%{_docdir}/%{name}
|
||||
install -m 644 doc/builtins.1 %{buildroot}%{_mandir}/man1/bash_builtins.1
|
||||
install -m 644 doc/rbash.1 %{buildroot}%{_mandir}/man1/rbash.1
|
||||
gzip -9f %{buildroot}%{_infodir}/*.inf*[^z] || true
|
||||
mkdir -p %{buildroot}%{_sysconfdir}/bash_completion.d
|
||||
sed 's/^|//' > %{buildroot}%{_docdir}/%{name}/BUGS <<\EOF
|
||||
Known problems
|
||||
--------------
|
||||
|
|
||||
This version of bash/readline supports multi byte handling
|
||||
that is e.g. wide character support for UTF-8. This causes
|
||||
problems in geting the current cursor position within the
|
||||
readline runtime library:
|
||||
|
|
||||
bash-%{bversion}> LANG=ja_JP
|
||||
bash-%{bversion}> echo -n "Hello"
|
||||
bash-%{bversion}>
|
||||
|
|
||||
In other words the prompt overwrites the output of the
|
||||
echo comand. The boolean variable byte-oriented
|
||||
set in %{_sysconfdir}/inputrc or $HOME/.inputrc avoids this
|
||||
but disables multi byte handling.
|
||||
EOF
|
||||
# remove unpackaged files
|
||||
mkdir -p %{buildroot}%{_sysconfdir}/skel
|
||||
install -m 644 %{SOURCE5} %{buildroot}%{_sysconfdir}/skel/.bashrc
|
||||
install -m 644 %{SOURCE6} %{buildroot}%{_sysconfdir}/skel/.profile
|
||||
touch -t 199605181720.50 %{buildroot}%{_sysconfdir}/skel/.bash_history
|
||||
chmod 600 %{buildroot}%{_sysconfdir}/skel/.bash_history
|
||||
%find_lang bash
|
||||
%fdupes -s %{buildroot}%{_datadir}/bash/helpfiles
|
||||
sed -ri '1{ s@/bin/sh@/bin/bash@ }' %{buildroot}%{_bindir}/bashbug
|
||||
|
||||
%if %{with alternatives}
|
||||
%post -p %{_bindir}/bash
|
||||
%{_sbindir}/update-alternatives --quiet --force \
|
||||
--install %{_bindir}/sh sh %{_bindir}/bash 10100
|
||||
|
||||
%preun -p %{_bindir}/bash
|
||||
if test "$1" = 0; then
|
||||
%{_sbindir}/update-alternatives --quiet --remove sh %{_bindir}/bash
|
||||
fi
|
||||
%endif
|
||||
|
||||
%files
|
||||
%license COPYING
|
||||
%config %attr(600,root,root) %{_sysconfdir}/skel/.bash_history
|
||||
%config %attr(644,root,root) %{_sysconfdir}/skel/.bashrc
|
||||
%config %attr(644,root,root) %{_sysconfdir}/skel/.profile
|
||||
%if %{with alternatives}
|
||||
%ghost %config %{_sysconfdir}/alternatives/sh
|
||||
%endif
|
||||
%dir %{_sysconfdir}/bash_completion.d
|
||||
%if 0%{?suse_version} < 1550
|
||||
/bin/bash
|
||||
%if %{with alternatives}
|
||||
/bin/sh
|
||||
%endif
|
||||
%endif
|
||||
%{_bindir}/bash
|
||||
%{_bindir}/bashbug
|
||||
%{_bindir}/rbash
|
||||
%if %{with alternatives}
|
||||
%{_bindir}/sh
|
||||
%endif
|
||||
%dir %{_datadir}/bash
|
||||
%dir %{_datadir}/bash/helpfiles
|
||||
%{_datadir}/bash/helpfiles/*
|
||||
%{_mandir}/man1/bash.1%{?ext_man}
|
||||
%{_mandir}/man1/bash_builtins.1%{?ext_man}
|
||||
%{_mandir}/man1/bashbug.1%{?ext_man}
|
||||
%{_mandir}/man1/rbash.1%{?ext_man}
|
||||
|
||||
%if %{without alternatives}
|
||||
%files sh
|
||||
%if 0%{?suse_version} < 1550
|
||||
/bin/sh
|
||||
%endif
|
||||
%{_bindir}/sh
|
||||
%endif
|
||||
|
||||
%files lang -f bash.lang
|
||||
|
||||
%files doc
|
||||
%{_infodir}/bash.info%{?ext_info}
|
||||
%doc %{_docdir}/%{name}
|
||||
|
||||
%files devel
|
||||
%dir %{_includedir}/bash/
|
||||
%dir %{_includedir}/bash/builtins/
|
||||
%dir %{_includedir}/bash/include/
|
||||
%{_incdir}/bash/*.h
|
||||
%{_incdir}/bash/builtins/*.h
|
||||
%{_incdir}/bash/include/*.h
|
||||
%{_libdir}/pkgconfig/bash.pc
|
||||
%{_datadir}/bash/*.inc
|
||||
|
||||
%files loadables
|
||||
%{_ldldir}
|
||||
|
||||
%if 0%{?suse_version} >= 1550
|
||||
%files legacybin
|
||||
/bin/bash
|
||||
/bin/sh
|
||||
%endif
|
||||
|
||||
%changelog
|
13
dot.bashrc
13
dot.bashrc
@ -1,13 +0,0 @@
|
||||
# Sample .bashrc for SUSE Linux
|
||||
# Copyright (c) SUSE Software Solutions Germany GmbH
|
||||
|
||||
# There are 3 different types of shells in bash: the login shell, normal shell
|
||||
# and interactive shell. Login shells read ~/.profile and interactive shells
|
||||
# read ~/.bashrc; in our setup, /etc/profile sources ~/.bashrc - thus all
|
||||
# settings made here will also take effect in a login shell.
|
||||
#
|
||||
# NOTE: It is recommended to make language settings in ~/.profile rather than
|
||||
# here, since multilingual X sessions would not work properly if LANG is over-
|
||||
# ridden in every subshell.
|
||||
|
||||
test -s ~/.alias && . ~/.alias || true
|
25
dot.profile
25
dot.profile
@ -1,25 +0,0 @@
|
||||
# Sample .profile for SUSE Linux
|
||||
# rewritten by Christian Steinruecken <cstein@suse.de>
|
||||
#
|
||||
# This file is read each time a login shell is started.
|
||||
# All other interactive shells will only read .bashrc; this is particularly
|
||||
# important for language settings, see below.
|
||||
|
||||
test -z "$PROFILEREAD" && . /etc/profile || true
|
||||
|
||||
# Some applications read the EDITOR variable to determine your favourite text
|
||||
# editor. So uncomment the line below and enter the editor of your choice :-)
|
||||
#export EDITOR=/usr/bin/vim
|
||||
#export EDITOR=/usr/bin/mcedit
|
||||
|
||||
# For some news readers it makes sense to specify the NEWSSERVER variable here
|
||||
#export NEWSSERVER=your.news.server
|
||||
|
||||
# Some people don't like fortune. If you uncomment the following lines,
|
||||
# you will have a fortune each time you log in ;-)
|
||||
|
||||
#if [ -x /usr/bin/fortune ] ; then
|
||||
# echo
|
||||
# /usr/bin/fortune
|
||||
# echo
|
||||
#fi
|
@ -1,16 +0,0 @@
|
||||
#!/bin/bash
|
||||
# Note: this file is used in the spec file, do not remove it
|
||||
# Print the highest version number of the patches from the archive
|
||||
sourcedir=$1
|
||||
test -n "${sourcedir}" || sourcedir=$PWD
|
||||
test -e ${sourcedir}/bash.spec || exit 1
|
||||
version=$(sed -rn '/^%define[[:space:]]+bversion/{s/^%define[[:space:]]+bversion[[:space:]]+([0-9]+\.[0-9]+)(\.[^\.]+)?/\1/p}' ${sourcedir}/bash.spec) || exit 1
|
||||
test -e ${sourcedir}/bash-${version}.tar.gz || exit 1
|
||||
last=($(tar Oxf ${sourcedir}/bash-${version}.tar.gz bash-${version}/configure.ac | sed -rn '/^define.bashvers/{s/^define\(bashvers,[[:space:]]([0-9\.]+)\)/\1/p}')) || exit 1
|
||||
test -e ${sourcedir}/bash-${version}-patches.tar.bz2 || echo ${last[0]}
|
||||
tar --wildcards -tf ${sourcedir}/bash-${version}-patches.tar.bz2 '*/bash[0-9][0-9]-*[0-9]' &> /dev/null || echo ${last[0]}
|
||||
OFS="$IFS"
|
||||
IFS=-
|
||||
last=($(tar --wildcards -tf ${sourcedir}/bash-${version}-patches.tar.bz2 '*/bash[0-9][0-9]-*[0-9]' | sed -r 's@\.patch$@@'| sort -t '-' -k 3,3 -n | tail -n 1))
|
||||
IFS="$OFS"
|
||||
echo ${last[3]/*0/}
|
@ -1,15 +0,0 @@
|
||||
---
|
||||
support/man2html.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
--- support/man2html.c
|
||||
+++ support/man2html.c 2010-09-03 20:49:56.288632000 +0000
|
||||
@@ -4076,7 +4076,7 @@ main(int argc, char **argv)
|
||||
if (subs)
|
||||
fputs("</DL>\n", stdout);
|
||||
fputs("</DL>\n", stdout);
|
||||
- print_sig();
|
||||
+ /* print_sig(); */
|
||||
fputs("</BODY>\n</HTML>\n", stdout);
|
||||
} else
|
||||
fprintf(stderr, "man2html: no output produced\n");
|
@ -1,27 +0,0 @@
|
||||
boo#1203091
|
||||
|
||||
---
|
||||
support/man2html.c | 12 ++++
|
||||
1 file changed, 12 insertions(+)
|
||||
|
||||
--- support/man2html.c
|
||||
+++ support/man2html.c 2022-09-12 08:27:06.352648345 +0000
|
||||
@@ -476,6 +476,18 @@ expand_char(int nr)
|
||||
charb[0] = nr / 256;
|
||||
charb[1] = nr % 256;
|
||||
charb[2] = '\0';
|
||||
+ if (charb[1] == 'q') {
|
||||
+ switch (charb[0]) {
|
||||
+ case 'a':
|
||||
+ strncpy(charb, "'", 1);
|
||||
+ charb[1] = '\0';
|
||||
+ break;
|
||||
+ case 'd':
|
||||
+ strncpy(charb, """, 6);
|
||||
+ charb[6] = '\0';
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
if (charb[0] == '<') { /* Fix up <= */
|
||||
charb[4] = charb[1];
|
||||
strncpy(charb, "<", 4);
|
76
run-tests
76
run-tests
@ -1,76 +0,0 @@
|
||||
#! /bin/sh
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
|
||||
: ${TMPDIR:=/tmp}
|
||||
export TMPDIR
|
||||
|
||||
# basic /bin/sh syntax
|
||||
SUFFIX=`${THIS_SH} -c 'echo $(( $RANDOM + $BASHPID ))'`
|
||||
|
||||
BASH_TSTOUT=${TMPDIR}/bashtst-$SUFFIX # for now
|
||||
export BASH_TSTOUT
|
||||
|
||||
trap 'rm -f $BASH_TSTOUT' 0 1 2 3 15
|
||||
|
||||
PATH=.:$PATH # just to get recho/zecho/printenv if not run via `make tests'
|
||||
export PATH
|
||||
|
||||
|
||||
# unset BASH_ENV only if it is set
|
||||
[ "${BASH_ENV+set}" = "set" ] && unset BASH_ENV
|
||||
# ditto for SHELLOPTS
|
||||
#[ "${SHELLOPTS+set}" = "set" ] && unset SHELLOPTS
|
||||
|
||||
: ${THIS_SH:=../bash}
|
||||
export THIS_SH
|
||||
|
||||
: ${BUILD_DIR:=..}
|
||||
export BUILD_DIR
|
||||
|
||||
${THIS_SH} ./version
|
||||
|
||||
rm -f ${BASH_TSTOUT}
|
||||
|
||||
echo Any output from any test, unless otherwise noted, indicates a possible anomaly
|
||||
|
||||
for x in run-*
|
||||
do
|
||||
case $x in
|
||||
$0|run-all|run-minimal|run-gprof|run-jobs) ;;
|
||||
*.orig|*~) ;;
|
||||
*) echo $x ; sh $x ; rm -f ${BASH_TSTOUT} ;;
|
||||
esac
|
||||
done
|
||||
|
||||
trap 'rm -f $tmp' EXIT HUP INT QUIT TERM
|
||||
tmp=$(mktemp /tmp/hello.XXXXXXXX) || exit 1
|
||||
echo '#!/bin/sh' > $tmp
|
||||
echo exit >> $tmp
|
||||
chmod 755 $tmp
|
||||
${THIS_SH} -c $tmp
|
||||
|
||||
typeset -i count=500
|
||||
echo '#########################'
|
||||
echo 'fork + /bin/sh -c runtime'
|
||||
time while ((count-- > 0)) ; do
|
||||
${THIS_SH} -c $tmp
|
||||
done
|
||||
echo '#########################'
|
||||
set -x
|
||||
read -t1 < /dev/tty
|
||||
set +x
|
||||
echo '#########################'
|
||||
exit 0
|
Loading…
Reference in New Issue
Block a user