Hi,

On Fri, Sep 24, 2010 at 08:09:14AM -0600, Serge Dubrouski wrote:
> Thanks, Lars, for the explanation.
> 
> Dejan, can you fix it?

Fixed. Thanks Lars for keeping an eye on the traffic :)

Dejan

> On Thu, Sep 23, 2010 at 4:48 PM, Lars Ellenberg
> <lars.ellenb...@linbit.com> wrote:
> > On Wed, Sep 22, 2010 at 08:26:43AM -0600, Serge Dubrouski wrote:
> >> Thanks, Dejan -
> >>
> >> There was one more little patch for pgsql to replace:
> >>
> >>  ocf_run $quietrun su $OCF_RESKEY_pgdba -c "$*"
> >>
> >> with
> >>
> >>  ocf_run $quietrun su $OCF_RESKEY_pgdba -c "cd $OCF_RESKEY_pgdata; $@"
> >
> > Don't do that.
> > shell quoting is like gamling at times.
> >
> > o() {
> >        output=`"$@" 2>&1`;
> >        set +x;
> >        echo "----- result:";
> >        echo "$output";
> > };
> > p0() { ( set -x; o su lars -c "cd . ; $@" ); }
> > p1() { ( set -x; o su lars -c "cd . ; $*" ); }
> >
> > # invokation:
> >
> > The "$@" Variant:
> >  # p0 'printf "%s\n"' "a white space a" b c d
> >  + o su lars -c 'cd . ; printf "%s\n"' 'a white space a' b c d
> >  ++ su lars -c 'cd . ; printf "%s\n"' 'a white space a' b c d
> >  + output=
> >  + set +x
> >  ----- result:
> >
> >
> >        D'oh. Nothing. Why?
> >        Because the extra arguments have become extra arguments to su as 
> > well,
> >        and are no longer part of the script passed to -c.
> >
> > The "$*" Variant:
> >  # p1 'printf "%s\n"' "a white space a" b c d
> >  + o su lars -c 'cd . ; printf "%s\n" a white space a b c d'
> >  ++ su lars -c 'cd . ; printf "%s\n" a white space a b c d'
> >  + output='a
> >  white
> >  space
> >  a
> >  b
> >  c
> >  d'
> >  + set +x
> >  ----- result:
> >  a
> >  white
> >  space
> >  a
> >  b
> >  c
> >  d
> >
> >        Not too good, but at least acceptable.
> >
> > All in one parameter, special case, no difference with $* and $@
> >  # p1 'printf "%s\n" "a white space a" b c d'
> >  + o su lars -c 'cd . ; printf "%s\n" "a white space a" b c d'
> >  ++ su lars -c 'cd . ; printf "%s\n" "a white space a" b c d'
> >  + output='a white space a
> >  b
> >  c
> >  d'
> >  + set +x
> >  ----- result:
> >  a white space a
> >  b
> >  c
> >  d
> >
> >
> > It does not make a difference for the current use of runasowner,
> > as long as you use it always with exactly one parameter.
> >
> > But as that is non-obvious to most, and people are going to copy'n'paste
> > from that resource agent later, don't do the "$@".
> >
> > Expansion of $@ and $* within double quotes is very much different,
> > and $@ in this context is very likely wrong, as it may pass flags
> > to su which had been meant to be passed to the command run within -c.
> >
> > But yes, do the "cd $OCF_RESKEY_pgdata; $*".
> > No problem with that.
> >
> > --
> > : Lars Ellenberg
> > : LINBIT | Your Way to High Availability
> > : DRBD/HA support and consulting http://www.linbit.com
> >
> > DRBD® and LINBIT® are registered trademarks of LINBIT, Austria.
> > _______________________________________________________
> > Linux-HA-Dev: Linux-HA-Dev@lists.linux-ha.org
> > http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev
> > Home Page: http://linux-ha.org/
> >
> 
> 
> 
> -- 
> Serge Dubrouski.
> _______________________________________________________
> Linux-HA-Dev: Linux-HA-Dev@lists.linux-ha.org
> http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev
> Home Page: http://linux-ha.org/
_______________________________________________________
Linux-HA-Dev: Linux-HA-Dev@lists.linux-ha.org
http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev
Home Page: http://linux-ha.org/

Reply via email to