On Tue, Oct 05, 2010 at 07:34:31PM +0200, Lars Ellenberg wrote:
> On Tue, Oct 05, 2010 at 04:03:47PM +0200, Dejan Muhamedagic wrote:
> > > So it is run periodically by root (well, the lrmd, as root).
> > > Even though the cwd of lrmd should be ok, permission wise, in case the
> > > script does cd into somewhere (I don't think it does, now) where someone
> > > with lesser privilege was able to place some evil *.so, the next command
> > > executed by the script may do interesting things.
> > 
> > I really doubt that, though it looks dangerous, there is a way to
> > exploit this without root access.
> 
> You never know.
> The script itself may not, but it starts something else,
> which may cd somewhere else, then fork/exec.
> 
> > > Simply doing
> > > #remove it, if present.
> > > LD_LIBRARY_PATH=${LD_LIBRARY_PATH#"$DIR_EXECUTABLE"}
> > > #remove possible remaining leading :
> > > LD_LIBRARY_PATH=${LD_LIBRARY_PATH#:}
> > > #prepend it
> > > LD_LIBRARY_PATH=$DIR_EXECUTABLE:$LD_LIBRARY_PATH
> > > #remove possible trailing :
> > > LD_LIBRARY_PATH=${LD_LIBRARY_PATH%:}
> > 
> > Hmm, this smells like bashisms, are they?
> 
> No, I don't think so.  But they are not strictly correct,
> if $D is only a prefix of the first component of $L...
> 
> Let's see, how about this (using dash as my
> "reference most stupid shell readily available"):
> 
> #!/bin/dash
> prepend_unless_member() {
>       local l d
>       l=$1 d=$2;
>       case $l in
>       "$d"|"$d":*|*:"$d"|*:"$d":*)
>               # already member
>               ;;
>       "")
>               # empty, don't add a separator
>               l=$d;;
>       *)
>               # prepend
>               l=$d:$l;;
>       esac;
>       echo "prepend '$d' to '$1' unless member results in $l";
> }
> 
> dir=TRY
> for l in "" $dir $dir:bla:foo bla:$dir:foo bla:foo:$dir bla bla:foo; do
>       prepend_unless_member "$l" "$dir"
> done
> 
> results in:
> prepend 'TRY' to '' unless member results in TRY
> prepend 'TRY' to 'TRY' unless member results in TRY
> prepend 'TRY' to 'TRY:bla:foo' unless member results in TRY:bla:foo
> prepend 'TRY' to 'bla:TRY:foo' unless member results in bla:TRY:foo
> prepend 'TRY' to 'bla:foo:TRY' unless member results in bla:foo:TRY
> prepend 'TRY' to 'bla' unless member results in TRY:bla
> prepend 'TRY' to 'bla:foo' unless member results in TRY:bla:foo
> 
> looks good to me.
> 
> If it is required that $d has to become the first component, not be
> directly duplicated, but possibly repeated in a later component, then
> -     "$d"|"$d":*|*:"$d"|*:"$d":*)
> +     "$d"|"$d":*)

Great. Can you please apply this to the repo.

Cheers,

Dejan

> -- 
> : 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: [email protected]
> http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev
> Home Page: http://linux-ha.org/
_______________________________________________________
Linux-HA-Dev: [email protected]
http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev
Home Page: http://linux-ha.org/

Reply via email to