Update to bash-5.1 patchlevel 12
This commit is contained in:
parent
df6273fad2
commit
667315bd13
49
bash-5.1-patch-10.patch
Normal file
49
bash-5.1-patch-10.patch
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
From 910fcdc415abeb3d7d85fb46ee0d3e804a4c47a6 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Chet Ramey <chet.ramey@case.edu>
|
||||||
|
Date: Wed, 17 Nov 2021 16:45:23 -0500
|
||||||
|
Subject: [PATCH] Bash-5.1 patch 10: fix for wait -n being interrupted by a
|
||||||
|
trapped signal
|
||||||
|
|
||||||
|
---
|
||||||
|
builtins/wait.def | 5 ++++-
|
||||||
|
patchlevel.h | 2 +-
|
||||||
|
2 files changed, 5 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/builtins/wait.def b/builtins/wait.def
|
||||||
|
index 824c83fe..e70a4d94 100644
|
||||||
|
--- a/builtins/wait.def
|
||||||
|
+++ b/builtins/wait.def
|
||||||
|
@@ -111,7 +111,8 @@ int
|
||||||
|
wait_builtin (list)
|
||||||
|
WORD_LIST *list;
|
||||||
|
{
|
||||||
|
- int status, code, opt, nflag, wflags;
|
||||||
|
+ int status, code, opt, nflag;
|
||||||
|
+ volatile int wflags;
|
||||||
|
char *vname;
|
||||||
|
SHELL_VAR *pidvar;
|
||||||
|
struct procstat pstat;
|
||||||
|
@@ -180,6 +181,8 @@ wait_builtin (list)
|
||||||
|
last_command_exit_signal = wait_signal_received;
|
||||||
|
status = 128 + wait_signal_received;
|
||||||
|
wait_sigint_cleanup ();
|
||||||
|
+ if (wflags & JWAIT_WAITING)
|
||||||
|
+ unset_waitlist ();
|
||||||
|
WAIT_RETURN (status);
|
||||||
|
}
|
||||||
|
|
||||||
|
diff --git a/patchlevel.h b/patchlevel.h
|
||||||
|
index 17586ff7..75246e44 100644
|
||||||
|
--- a/patchlevel.h
|
||||||
|
+++ b/patchlevel.h
|
||||||
|
@@ -25,6 +25,6 @@
|
||||||
|
regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
|
||||||
|
looks for to find the patch level (for the sccs version string). */
|
||||||
|
|
||||||
|
-#define PATCHLEVEL 9
|
||||||
|
+#define PATCHLEVEL 10
|
||||||
|
|
||||||
|
#endif /* _PATCHLEVEL_H_ */
|
||||||
|
--
|
||||||
|
2.31.1
|
||||||
|
|
79
bash-5.1-patch-11.patch
Normal file
79
bash-5.1-patch-11.patch
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
From c839339fbfd2bb7ee4a523b64c7f3734ba36b9bc Mon Sep 17 00:00:00 2001
|
||||||
|
From: Chet Ramey <chet.ramey@case.edu>
|
||||||
|
Date: Wed, 17 Nov 2021 16:46:40 -0500
|
||||||
|
Subject: [PATCH] Bash-5.1 patch 11: save and restore alias parsing when
|
||||||
|
performing compound array assignment
|
||||||
|
|
||||||
|
---
|
||||||
|
parse.y | 4 ----
|
||||||
|
patchlevel.h | 2 +-
|
||||||
|
y.tab.c | 4 ----
|
||||||
|
3 files changed, 1 insertion(+), 9 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/parse.y b/parse.y
|
||||||
|
index df1231da..f25575b5 100644
|
||||||
|
--- a/parse.y
|
||||||
|
+++ b/parse.y
|
||||||
|
@@ -6493,10 +6493,8 @@ parse_string_to_word_list (s, flags, whom)
|
||||||
|
old_expand_aliases = expand_aliases;
|
||||||
|
|
||||||
|
push_stream (1);
|
||||||
|
-#if 0 /* TAG: bash-5.2 Alex fxmbsw7 Ratchev <fxmbsw7@gmail.com> 11/17/2020 */
|
||||||
|
if (ea = expanding_alias ())
|
||||||
|
parser_save_alias ();
|
||||||
|
-#endif
|
||||||
|
last_read_token = WORD; /* WORD to allow reserved words here */
|
||||||
|
current_command_line_count = 0;
|
||||||
|
echo_input_at_read = expand_aliases = 0;
|
||||||
|
@@ -6531,10 +6529,8 @@ parse_string_to_word_list (s, flags, whom)
|
||||||
|
last_read_token = '\n';
|
||||||
|
pop_stream ();
|
||||||
|
|
||||||
|
-#if 0 /* TAG: bash-5.2 */
|
||||||
|
if (ea)
|
||||||
|
parser_restore_alias ();
|
||||||
|
-#endif
|
||||||
|
|
||||||
|
#if defined (HISTORY)
|
||||||
|
remember_on_history = old_remember_on_history;
|
||||||
|
diff --git a/patchlevel.h b/patchlevel.h
|
||||||
|
index 75246e44..8b14f289 100644
|
||||||
|
--- a/patchlevel.h
|
||||||
|
+++ b/patchlevel.h
|
||||||
|
@@ -25,6 +25,6 @@
|
||||||
|
regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
|
||||||
|
looks for to find the patch level (for the sccs version string). */
|
||||||
|
|
||||||
|
-#define PATCHLEVEL 10
|
||||||
|
+#define PATCHLEVEL 11
|
||||||
|
|
||||||
|
#endif /* _PATCHLEVEL_H_ */
|
||||||
|
diff --git a/y.tab.c b/y.tab.c
|
||||||
|
index dcc5b7f3..c11d7aaa 100644
|
||||||
|
--- a/y.tab.c
|
||||||
|
+++ b/y.tab.c
|
||||||
|
@@ -8787,10 +8787,8 @@ parse_string_to_word_list (s, flags, whom)
|
||||||
|
old_expand_aliases = expand_aliases;
|
||||||
|
|
||||||
|
push_stream (1);
|
||||||
|
-#if 0 /* TAG: bash-5.2 Alex fxmbsw7 Ratchev <fxmbsw7@gmail.com> 11/17/2020 */
|
||||||
|
if (ea = expanding_alias ())
|
||||||
|
parser_save_alias ();
|
||||||
|
-#endif
|
||||||
|
last_read_token = WORD; /* WORD to allow reserved words here */
|
||||||
|
current_command_line_count = 0;
|
||||||
|
echo_input_at_read = expand_aliases = 0;
|
||||||
|
@@ -8825,10 +8823,8 @@ parse_string_to_word_list (s, flags, whom)
|
||||||
|
last_read_token = '\n';
|
||||||
|
pop_stream ();
|
||||||
|
|
||||||
|
-#if 0 /* TAG: bash-5.2 */
|
||||||
|
if (ea)
|
||||||
|
parser_restore_alias ();
|
||||||
|
-#endif
|
||||||
|
|
||||||
|
#if defined (HISTORY)
|
||||||
|
remember_on_history = old_remember_on_history;
|
||||||
|
--
|
||||||
|
2.31.1
|
||||||
|
|
195
bash-5.1-patch-12.patch
Normal file
195
bash-5.1-patch-12.patch
Normal file
@ -0,0 +1,195 @@
|
|||||||
|
From 15409324f1974d41c183904ad575da7188058c1c Mon Sep 17 00:00:00 2001
|
||||||
|
From: Chet Ramey <chet.ramey@case.edu>
|
||||||
|
Date: Wed, 17 Nov 2021 16:47:24 -0500
|
||||||
|
Subject: [PATCH] Bash-5.1 patch 12: fix race condition with child processes
|
||||||
|
and resetting trapped signals
|
||||||
|
|
||||||
|
---
|
||||||
|
command.h | 1 +
|
||||||
|
execute_cmd.c | 8 +++++++-
|
||||||
|
jobs.c | 2 ++
|
||||||
|
nojobs.c | 2 ++
|
||||||
|
patchlevel.h | 2 +-
|
||||||
|
sig.c | 10 +++++++++-
|
||||||
|
subst.c | 2 ++
|
||||||
|
trap.c | 26 ++++++++++++++++++++++++++
|
||||||
|
8 files changed, 50 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/command.h b/command.h
|
||||||
|
index 914198f9..b8477528 100644
|
||||||
|
--- a/command.h
|
||||||
|
+++ b/command.h
|
||||||
|
@@ -124,6 +124,7 @@ enum command_type { cm_for, cm_case, cm_while, cm_if, cm_simple, cm_select,
|
||||||
|
#define SUBSHELL_PROCSUB 0x20 /* subshell caused by <(command) or >(command) */
|
||||||
|
#define SUBSHELL_COPROC 0x40 /* subshell from a coproc pipeline */
|
||||||
|
#define SUBSHELL_RESETTRAP 0x80 /* subshell needs to reset trap strings on first call to trap */
|
||||||
|
+#define SUBSHELL_IGNTRAP 0x100 /* subshell should reset trapped signals from trap_handler */
|
||||||
|
|
||||||
|
/* A structure which represents a word. */
|
||||||
|
typedef struct word_desc {
|
||||||
|
diff --git a/execute_cmd.c b/execute_cmd.c
|
||||||
|
index 90129e06..425679a2 100644
|
||||||
|
--- a/execute_cmd.c
|
||||||
|
+++ b/execute_cmd.c
|
||||||
|
@@ -1547,6 +1547,9 @@ execute_in_subshell (command, asynchronous, pipe_in, pipe_out, fds_to_close)
|
||||||
|
clear_pending_traps ();
|
||||||
|
reset_signal_handlers ();
|
||||||
|
subshell_environment |= SUBSHELL_RESETTRAP;
|
||||||
|
+ /* Note that signal handlers have been reset, so we should no longer
|
||||||
|
+ reset the handler and resend trapped signals to ourselves. */
|
||||||
|
+ subshell_environment &= ~SUBSHELL_IGNTRAP;
|
||||||
|
|
||||||
|
/* We are in a subshell, so forget that we are running a trap handler or
|
||||||
|
that the signal handler has changed (we haven't changed it!) */
|
||||||
|
@@ -4320,7 +4323,8 @@ execute_simple_command (simple_command, pipe_in, pipe_out, async, fds_to_close)
|
||||||
|
already_forked = 1;
|
||||||
|
cmdflags |= CMD_NO_FORK;
|
||||||
|
|
||||||
|
- subshell_environment = SUBSHELL_FORK; /* XXX */
|
||||||
|
+ /* We redo some of what make_child() does with SUBSHELL_IGNTRAP */
|
||||||
|
+ subshell_environment = SUBSHELL_FORK|SUBSHELL_IGNTRAP; /* XXX */
|
||||||
|
if (pipe_in != NO_PIPE || pipe_out != NO_PIPE)
|
||||||
|
subshell_environment |= SUBSHELL_PIPE;
|
||||||
|
if (async)
|
||||||
|
@@ -4574,6 +4578,7 @@ run_builtin:
|
||||||
|
trap strings if we run trap to change a signal disposition. */
|
||||||
|
reset_signal_handlers ();
|
||||||
|
subshell_environment |= SUBSHELL_RESETTRAP;
|
||||||
|
+ subshell_environment &= ~SUBSHELL_IGNTRAP;
|
||||||
|
|
||||||
|
if (async)
|
||||||
|
{
|
||||||
|
@@ -5514,6 +5519,7 @@ execute_disk_command (words, redirects, command_line, pipe_in, pipe_out,
|
||||||
|
reset_terminating_signals (); /* XXX */
|
||||||
|
/* Cancel traps, in trap.c. */
|
||||||
|
restore_original_signals ();
|
||||||
|
+ subshell_environment &= ~SUBSHELL_IGNTRAP;
|
||||||
|
|
||||||
|
#if defined (JOB_CONTROL)
|
||||||
|
FREE (p);
|
||||||
|
diff --git a/jobs.c b/jobs.c
|
||||||
|
index a581f305..7c3b6e83 100644
|
||||||
|
--- a/jobs.c
|
||||||
|
+++ b/jobs.c
|
||||||
|
@@ -2217,6 +2217,8 @@ make_child (command, flags)
|
||||||
|
signals to the default state for a new process. */
|
||||||
|
pid_t mypid;
|
||||||
|
|
||||||
|
+ subshell_environment |= SUBSHELL_IGNTRAP;
|
||||||
|
+
|
||||||
|
/* If this ends up being changed to modify or use `command' in the
|
||||||
|
child process, go back and change callers who free `command' in
|
||||||
|
the child process when this returns. */
|
||||||
|
diff --git a/nojobs.c b/nojobs.c
|
||||||
|
index c5fc83d9..f2563ca0 100644
|
||||||
|
--- a/nojobs.c
|
||||||
|
+++ b/nojobs.c
|
||||||
|
@@ -575,6 +575,8 @@ make_child (command, flags)
|
||||||
|
last_asynchronous_pid = getpid ();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
+ subshell_environment |= SUBSHELL_IGNTRAP;
|
||||||
|
+
|
||||||
|
default_tty_job_signals ();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
diff --git a/patchlevel.h b/patchlevel.h
|
||||||
|
index 8b14f289..eb2aca52 100644
|
||||||
|
--- a/patchlevel.h
|
||||||
|
+++ b/patchlevel.h
|
||||||
|
@@ -25,6 +25,6 @@
|
||||||
|
regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
|
||||||
|
looks for to find the patch level (for the sccs version string). */
|
||||||
|
|
||||||
|
-#define PATCHLEVEL 11
|
||||||
|
+#define PATCHLEVEL 12
|
||||||
|
|
||||||
|
#endif /* _PATCHLEVEL_H_ */
|
||||||
|
diff --git a/sig.c b/sig.c
|
||||||
|
index 6964d862..e6537d26 100644
|
||||||
|
--- a/sig.c
|
||||||
|
+++ b/sig.c
|
||||||
|
@@ -55,7 +55,8 @@
|
||||||
|
# include "bashhist.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
-extern void initialize_siglist ();
|
||||||
|
+extern void initialize_siglist PARAMS((void));
|
||||||
|
+extern void set_original_signal PARAMS((int, SigHandler *));
|
||||||
|
|
||||||
|
#if !defined (JOB_CONTROL)
|
||||||
|
extern void initialize_job_signals PARAMS((void));
|
||||||
|
@@ -255,6 +256,13 @@ initialize_terminating_signals ()
|
||||||
|
sigaction (XSIG (i), &act, &oact);
|
||||||
|
XHANDLER(i) = oact.sa_handler;
|
||||||
|
XSAFLAGS(i) = oact.sa_flags;
|
||||||
|
+
|
||||||
|
+#if 0
|
||||||
|
+ set_original_signal (XSIG(i), XHANDLER(i)); /* optimization */
|
||||||
|
+#else
|
||||||
|
+ set_original_signal (XSIG(i), act.sa_handler); /* optimization */
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
/* Don't do anything with signals that are ignored at shell entry
|
||||||
|
if the shell is not interactive. */
|
||||||
|
/* XXX - should we do this for interactive shells, too? */
|
||||||
|
diff --git a/subst.c b/subst.c
|
||||||
|
index 462752de..327de083 100644
|
||||||
|
--- a/subst.c
|
||||||
|
+++ b/subst.c
|
||||||
|
@@ -5951,6 +5951,7 @@ process_substitute (string, open_for_read_in_child)
|
||||||
|
free_pushed_string_input ();
|
||||||
|
/* Cancel traps, in trap.c. */
|
||||||
|
restore_original_signals (); /* XXX - what about special builtins? bash-4.2 */
|
||||||
|
+ subshell_environment &= ~SUBSHELL_IGNTRAP;
|
||||||
|
QUIT; /* catch any interrupts we got post-fork */
|
||||||
|
setup_async_signals ();
|
||||||
|
#if 0
|
||||||
|
@@ -6382,6 +6383,7 @@ command_substitute (string, quoted, flags)
|
||||||
|
}
|
||||||
|
QUIT; /* catch any interrupts we got post-fork */
|
||||||
|
subshell_environment |= SUBSHELL_RESETTRAP;
|
||||||
|
+ subshell_environment &= ~SUBSHELL_IGNTRAP;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined (JOB_CONTROL)
|
||||||
|
diff --git a/trap.c b/trap.c
|
||||||
|
index c7f8ded5..1b27fb3a 100644
|
||||||
|
--- a/trap.c
|
||||||
|
+++ b/trap.c
|
||||||
|
@@ -481,6 +481,32 @@ trap_handler (sig)
|
||||||
|
SIGRETURN (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
+ /* This means we're in a subshell, but have not yet reset the handler for
|
||||||
|
+ trapped signals. We're not supposed to execute the trap in this situation;
|
||||||
|
+ we should restore the original signal and resend the signal to ourselves
|
||||||
|
+ to preserve the Posix "signal traps that are not being ignored shall be
|
||||||
|
+ set to the default action" semantics. */
|
||||||
|
+ if ((subshell_environment & SUBSHELL_IGNTRAP) && trap_list[sig] != (char *)IGNORE_SIG)
|
||||||
|
+ {
|
||||||
|
+ sigset_t mask;
|
||||||
|
+
|
||||||
|
+ /* Paranoia */
|
||||||
|
+ if (original_signals[sig] == IMPOSSIBLE_TRAP_HANDLER)
|
||||||
|
+ original_signals[sig] = SIG_DFL;
|
||||||
|
+
|
||||||
|
+ restore_signal (sig);
|
||||||
|
+
|
||||||
|
+ /* Make sure we let the signal we just caught through */
|
||||||
|
+ sigemptyset (&mask);
|
||||||
|
+ sigprocmask (SIG_SETMASK, (sigset_t *)NULL, &mask);
|
||||||
|
+ sigdelset (&mask, sig);
|
||||||
|
+ sigprocmask (SIG_SETMASK, &mask, (sigset_t *)NULL);
|
||||||
|
+
|
||||||
|
+ kill (getpid (), sig);
|
||||||
|
+
|
||||||
|
+ SIGRETURN (0);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
if ((sig >= NSIG) ||
|
||||||
|
(trap_list[sig] == (char *)DEFAULT_SIG) ||
|
||||||
|
(trap_list[sig] == (char *)IGNORE_SIG))
|
||||||
|
--
|
||||||
|
2.31.1
|
||||||
|
|
50
bash-5.1-patch-9.patch
Normal file
50
bash-5.1-patch-9.patch
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
From fed42742e0b33b358610bf62c7474f55e6465205 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Chet Ramey <chet.ramey@case.edu>
|
||||||
|
Date: Wed, 17 Nov 2021 16:44:19 -0500
|
||||||
|
Subject: [PATCH] Bash-5.1 patch 9: fix bash malloc implementation of
|
||||||
|
malloc_usable_size
|
||||||
|
|
||||||
|
---
|
||||||
|
lib/malloc/malloc.c | 13 ++++++-------
|
||||||
|
patchlevel.h | 2 +-
|
||||||
|
2 files changed, 7 insertions(+), 8 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/lib/malloc/malloc.c b/lib/malloc/malloc.c
|
||||||
|
index 439f8ef1..92e6efa5 100644
|
||||||
|
--- a/lib/malloc/malloc.c
|
||||||
|
+++ b/lib/malloc/malloc.c
|
||||||
|
@@ -1286,13 +1286,12 @@ malloc_usable_size (mem)
|
||||||
|
p = (union mhead *) ap - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
- /* XXX - should we return 0 if ISFREE? */
|
||||||
|
- maxbytes = binsize(p->mh_index);
|
||||||
|
-
|
||||||
|
- /* So the usable size is the maximum number of bytes in the bin less the
|
||||||
|
- malloc overhead */
|
||||||
|
- maxbytes -= MOVERHEAD + MSLOP;
|
||||||
|
- return (maxbytes);
|
||||||
|
+ /* return 0 if ISFREE */
|
||||||
|
+ if (p->mh_alloc == ISFREE)
|
||||||
|
+ return 0;
|
||||||
|
+
|
||||||
|
+ /* Since we use bounds checking, the usable size is the last requested size. */
|
||||||
|
+ return (p->mh_nbytes);
|
||||||
|
}
|
||||||
|
|
||||||
|
#if !defined (NO_VALLOC)
|
||||||
|
diff --git a/patchlevel.h b/patchlevel.h
|
||||||
|
index 10fde2ee..17586ff7 100644
|
||||||
|
--- a/patchlevel.h
|
||||||
|
+++ b/patchlevel.h
|
||||||
|
@@ -25,6 +25,6 @@
|
||||||
|
regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
|
||||||
|
looks for to find the patch level (for the sccs version string). */
|
||||||
|
|
||||||
|
-#define PATCHLEVEL 8
|
||||||
|
+#define PATCHLEVEL 9
|
||||||
|
|
||||||
|
#endif /* _PATCHLEVEL_H_ */
|
||||||
|
--
|
||||||
|
2.31.1
|
||||||
|
|
@ -1,12 +1,12 @@
|
|||||||
#% define beta_tag rc2
|
#% define beta_tag rc2
|
||||||
%define patchleveltag .8
|
%define patchleveltag .12
|
||||||
%define baseversion 5.1
|
%define baseversion 5.1
|
||||||
%bcond_without tests
|
%bcond_without tests
|
||||||
|
|
||||||
Version: %{baseversion}%{patchleveltag}
|
Version: %{baseversion}%{patchleveltag}
|
||||||
Name: bash
|
Name: bash
|
||||||
Summary: The GNU Bourne Again shell
|
Summary: The GNU Bourne Again shell
|
||||||
Release: 3%{?dist}
|
Release: 1%{?dist}
|
||||||
License: GPLv3+
|
License: GPLv3+
|
||||||
Url: https://www.gnu.org/software/bash
|
Url: https://www.gnu.org/software/bash
|
||||||
Source0: https://ftp.gnu.org/gnu/bash/bash-%{baseversion}.tar.gz
|
Source0: https://ftp.gnu.org/gnu/bash/bash-%{baseversion}.tar.gz
|
||||||
@ -20,7 +20,7 @@ Source3: dot-bash_logout
|
|||||||
|
|
||||||
# Official upstream patches
|
# Official upstream patches
|
||||||
# Patches are converted to apply with '-p1'
|
# Patches are converted to apply with '-p1'
|
||||||
%{lua:for i=1,8 do print(string.format("Patch%u: bash-5.1-patch-%u.patch\n", i, i)) end}
|
%{lua:for i=1,12 do print(string.format("Patch%u: bash-5.1-patch-%u.patch\n", i, i)) end}
|
||||||
|
|
||||||
# Other patches
|
# Other patches
|
||||||
# We don't want to add '/etc:/usr/etc' in standard utils path.
|
# We don't want to add '/etc:/usr/etc' in standard utils path.
|
||||||
@ -318,6 +318,9 @@ end
|
|||||||
%{_libdir}/pkgconfig/%{name}.pc
|
%{_libdir}/pkgconfig/%{name}.pc
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Fri Nov 26 2021 Siteshwar Vashisht <svashisht@redhat.com> - 5.1.12-1
|
||||||
|
- Update to bash-5.1 patchlevel 12
|
||||||
|
|
||||||
* Fri Nov 05 2021 Siteshwar Vashisht <svashisht@redhat.com> - 5.1.8-3
|
* Fri Nov 05 2021 Siteshwar Vashisht <svashisht@redhat.com> - 5.1.8-3
|
||||||
- Add a runtime option to enable history logging to syslog
|
- Add a runtime option to enable history logging to syslog
|
||||||
Resolves: #2020528
|
Resolves: #2020528
|
||||||
|
Loading…
Reference in New Issue
Block a user