use $_<prog> (which expands to absolute paths) instead of trusting into a good $PATH
[util-vserver.git] / util-vserver / scripts / vrpm-preload
index 1036e5c..ec73503 100755 (executable)
@@ -20,11 +20,33 @@ set -e
 
 : ${UTIL_VSERVER_VARS:=/usr/lib/util-vserver/util-vserver-vars}
 test -e "$UTIL_VSERVER_VARS" || {
-    echo "Can not find util-vserver installation; aborting..." >&2
+    echo $"Can not find util-vserver installation (the file '$UTIL_VSERVER_VARS' would be expected); aborting..." >&2
     exit 1
 }
 . "$UTIL_VSERVER_VARS"
 
+function getCapFlags
+{
+    local ctx=$1
+    
+    if test "$ctx" && ! $_VSERVER_INFO - FEATURE migrate; then
+       set -- $($_CHCONTEXT_COMPAT --xid 1 \
+           $_SH -c "$_CAT /proc/[0-9]*/status | $_EGREP '^(CapBset|s_context|ctxflags)'" | \
+           $_GREP -B 1 -A 1 "^s_context: $ctx " | \
+           $_SED -e '1,3p;d' | $_AWK '{ print $2 }')
+    else
+       set --
+    fi
+
+    if test "$3"; then
+       RPM_FAKE_CAP=$[ ~0x$1 ]
+       RPM_FAKE_FLAGS=$3
+    else
+       RPM_FAKE_CAP=$[ ~0xd40c04ff ]
+       RPM_FAKE_FLAGS=4
+    fi
+}
+
 lib=$_RPM_FAKE_SO
 
 #scall_nr=$($_VSERVER_INFO  x SYSCALL_NEW_S_CONTEXT_NR  2>/dev/null)
@@ -45,10 +67,14 @@ test "$bin" || {
     exit 1
 }
 
+
+getCapFlags "$ctx"
+
+export RPM_FAKE_CAP RPM_FAKE_FLAGS
+
 #RPM_FAKE_S_CONTEXT_REV=$scall_rev \
 #RPM_FAKE_S_CONTEXT_NR=$scall_nr \
 RPM_FAKE_CHROOT=$vdir \
 RPM_FAKE_CTX=$ctx \
-RPM_FAKE_CAP=$[ ~0xd40c04ff ] \
 LD_PRELOAD=$lib${LD_PRELOAD:+:$LD_PRELOAD} \
 exec $bin "$@"