28.11.2024 04:31, Kirill A. Korinsky пишет: > Index: patches/patch-ejabberdctl_template > =================================================================== > RCS file: patches/patch-ejabberdctl_template > diff -N patches/patch-ejabberdctl_template > --- /dev/null 1 Jan 1970 00:00:00 -0000 > +++ patches/patch-ejabberdctl_template 28 Nov 2024 01:26:59 -0000 > @@ -0,0 +1,14 @@ > +OpenBSD su treats -c before username as class, and don't requires --
doesn't require > + > +Index: ejabberdctl.template > +--- ejabberdctl.template.orig > ++++ ejabberdctl.template > +@@ -126,7 +126,7 @@ set_dist_client() > + exec_cmd() > + { > + case $EXEC_CMD in > +- as_install_user) su -s /bin/sh -c 'exec "$0" "$@"' "$INSTALLUSER" > -- "$@" ;; > ++ as_install_user) su -s /bin/sh "$INSTALLUSER" -c 'exec "$0" "$@"' > "$@" ;; > + as_current_user) "$@" ;; I don't understand why argv is passed twice, the one inside the -c string is enough, no? Isn't $@ the whole command incl. argv[0] aka. $0? If so, 'exec_cmd echo foo' would print "echo foo" and not "foo" due to the 'exec $0'. Can't this be what a couple of base scripts do in their unpriv() helper? su -s /bin/sh "$INSTALLUSER" -c "'$@'" > + esac > + } >