#2966 Issue open
: STDOUT_STDERR_FILE used but never defined - /rear.help.stdout_stderr file shouldn't be there¶
schlomo opened issue at 2023-04-04 13:46:¶
I tried running fakeroot reat
because I just wanted to check the help
output and was surprised by the many error messages:
$ fakeroot usr/sbin/rear
usr/sbin/rear: line 554: /rear.help.stdout_stderr: Permission denied
chmod: cannot access '/rear.help.stdout_stderr': No such file or directory
usr/sbin/rear: line 559: /rear.help.stdout_stderr: Permission denied
/home/schlomo/src/rear/usr/share/rear/lib/framework-functions.sh: line 45: /rear.help.stdout_stderr: Permission denied
/home/schlomo/src/rear/usr/share/rear/lib/framework-functions.sh: line 45: /rear.help.stdout_stderr: Permission denied
/home/schlomo/src/rear/usr/share/rear/lib/framework-functions.sh: line 45: /rear.help.stdout_stderr: Permission denied
/home/schlomo/src/rear/usr/share/rear/lib/framework-functions.sh: line 45: /rear.help.stdout_stderr: Permission denied
/home/schlomo/src/rear/usr/share/rear/lib/framework-functions.sh: line 45: /rear.help.stdout_stderr: Permission denied
/home/schlomo/src/rear/usr/share/rear/lib/framework-functions.sh: line 45: /rear.help.stdout_stderr: Permission denied
OS_VENDOR=Ubuntu
OS_VERSION=22.04
/home/schlomo/src/rear/usr/share/rear/lib/framework-functions.sh: line 45: /rear.help.stdout_stderr: Permission denied
/home/schlomo/src/rear/usr/share/rear/lib/framework-functions.sh: line 45: /rear.help.stdout_stderr: Permission denied
/home/schlomo/src/rear/usr/share/rear/lib/framework-functions.sh: line 45: /rear.help.stdout_stderr: Permission denied
/home/schlomo/src/rear/usr/share/rear/lib/framework-functions.sh: line 45: /rear.help.stdout_stderr: Permission denied
/home/schlomo/src/rear/usr/share/rear/lib/framework-functions.sh: line 45: /rear.help.stdout_stderr: Permission denied
/home/schlomo/src/rear/usr/share/rear/lib/framework-functions.sh: line 45: /rear.help.stdout_stderr: Permission denied
Usage: rear [-h|--help] [-V|--version] [-dsSv] [-D|--debugscripts SET] [-c DIR] [-C CONFIG] [-r KERNEL] [--] COMMAND [ARGS...]
Relax-and-Recover comes with ABSOLUTELY NO WARRANTY; for details see
the GNU General Public License at: http://www.gnu.org/licenses/gpl.html
Available options:
-h --help usage information (this text)
It turns out that we use STDOUT_STDERR_FILE
but it seems like we never
set this variable
https://github.com/rear/rear/blob/ae9c64597d3b73112e8845e96ad1cb2ca40fac25/usr/share/rear/lib/framework-functions.sh#L45
Also, on my test system I find this file in /
[root@rear-ol8u7 ~]# ll /
total 32
lrwxrwxrwx. 1 root root 7 9. Okt 2021 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 5. Mär 03:26 boot
drwxr-xr-x. 19 root root 3320 3. Apr 14:17 dev
drwxr-xr-x. 150 root root 8192 3. Apr 20:49 etc
drwxr-xr-x. 3 root root 21 20. Feb 19:54 home
lrwxrwxrwx. 1 root root 7 9. Okt 2021 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 9. Okt 2021 lib64 -> usr/lib64
drwxr-xr-x. 2 root root 6 9. Okt 2021 media
drwxr-xr-x. 2 root root 6 9. Okt 2021 mnt
drwxr-xr-x. 4 root root 49 20. Feb 20:18 opt
dr-xr-xr-x. 207 root root 0 3. Apr 14:17 proc
-rw-------. 1 root root 624 2. Apr 15:39 rear.help.stdout_stderr
drwxr-xr-x. 3 root root 17 5. Mär 21:38 rear-local
dr-xr-x---. 7 root root 4096 4. Apr 15:43 root
drwxr-xr-x. 39 root root 1220 3. Apr 14:19 run
lrwxrwxrwx. 1 root root 8 9. Okt 2021 sbin -> usr/sbin
drwxr-xr-x. 3 root root 18 3. Apr 20:56 src
drwxr-xr-x. 2 root root 6 9. Okt 2021 srv
dr-xr-xr-x. 13 root root 0 3. Apr 14:17 sys
drwxrwxrwt. 11 root root 4096 4. Apr 15:43 tmp
drwxr-xr-x. 13 root root 158 20. Feb 19:29 usr
drwxr-xr-x. 21 root root 4096 20. Feb 19:48 var
@jsmeix it seems like you worked on this in #2633, can you please have another look? Maybe some change broke that without anybody noticing it.
jsmeix commented at 2023-04-05 07:13:¶
With current GitHub master code I get
# find usr/sbin/rear usr/share/rear -type f | xargs grep 'STDOUT_STDERR_FILE='
usr/sbin/rear:
STDOUT_STDERR_FILE="/dev/null"
STDOUT_STDERR_FILE="$TMP_DIR/$PROGRAM.$WORKFLOW.stdout_stderr"
usr/share/rear/lib/_input-output-functions.sh:
# In non-debug modes stdout and stderr are redirected to STDOUT_STDERR_FILE="$TMP_DIR/rear.$WORKFLOW.stdout_stderr" if possible
# but in certain cases (e.g. for the 'help' workflow where no $TMP_DIR exists) STDOUT_STDERR_FILE=/dev/null
@schlomo
it seems in your special case $TMP_DIR is not set?
schlomo commented at 2023-04-05 16:55:¶
You are right and I failed to use my IDE... nevertheless we need to
solve the problem of creating this file in /
.
Yes, if TMP_DIR
is not set then the following line silently gives a
false positive:
https://github.com/rear/rear/blob/0093828651efe64407d51d4801aaba6fe4dee835/usr/sbin/rear#L549
because of this behaviour:
[root@rear-ol8u7 ~]# test -d $sfdkjashdkfjahfdjk && echo yes
yes
[root@rear-ol8u7 ~]#
And this is a case where quoting the variable (or checking it) would have helped:
[root@rear-ol8u7 ~]# test -d "$sfdkjashdkfjahfdjk" && echo yes
[root@rear-ol8u7 ~]#
The problem is actually specific to the help
workflow because of
this:
https://github.com/rear/rear/blob/0093828651efe64407d51d4801aaba6fe4dee835/usr/sbin/rear#L498-L513
I guess that we should do this basic setup also for the help
workflow
as the other ReaR code heavily relies on it.
jsmeix commented at 2023-04-06 10:56:¶
Via
https://github.com/rear/rear/commit/99110661fc75e243ccac308f0b12b11142999834
I fixed the test -d $TMP_DIR
issue.
By the way:
The root cause of my buggy code was
that 'test' behaves inconsistent
# test && echo y || echo n
n
# test '' && echo y || echo n
n
# test -d && echo y || echo n
y
# test -d '' && echo y || echo n
n
# test -e && echo y || echo n
y
# test -e '' && echo y || echo n
n
depending on whether or not an operator is used and
it behaves "very inconsistent" when the '-a' and '-o'
operators are used as file operator versus as
so called (according to 'help test') "other operator":
# test -a '' -a -a '' && echo y || echo n
n
# test -a -a -a && echo y || echo n
y
# test -o '' -o -o '' && echo y || echo n
n
# test -o -o -o && echo y || echo n
y
jsmeix commented at 2023-04-06 11:08:¶
Regarding test "$WORKFLOW" != "help"
:
We have that four times in sbin/rear
in current GitHub master code at
# cat -n usr/sbin/rear | grep 'test.*WORKFLOW.*help'
498 if test "$WORKFLOW" != "help" ; then
575 if test "$WORKFLOW" != "help" ; then
723 test "$WORKFLOW" != "help" && LogPrint "Saving $RUNTIME_LOGFILE as $LOGFILE"
735 if test "$WORKFLOW" != "help" ; then
In the past I already had "a lot of (nor so) fun"
with the special behaviour of the 'help' workflow.
The special behaviour of the 'help' workflow was
already there when I encountered ReaR for the first time.
In general I would appreciate it if we could make
the 'help' workflow behave more like the other workflows.
schlomo commented at 2023-04-08 19:09:¶
Yes, totally agree with you. What would happen if we simply remove the special treatment? Maybe it's not so bad?
schlomo commented at 2023-04-23 09:23:¶
@rear/contributors any thoughts on completely removing the special
handling for the help
workflow to simplify things?
[Export of Github issue for rear/rear.]