[b]Hi,
i'm using opensolaris 2008.05 updated to b96 and writing a little C program 
(with setuid) to exec a java jar.

Here the code:[/b]

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>

int main() {
        pid_t pid;
        int status;
        if ((pid = fork()) < 0) {
                printf("Fork error\n");
                exit(0);
        } else if (pid == 0) { //child
                execl ("/usr/java/bin/java","java", "-jar", "DD.jar", NULL);
        exit(0);
        } else { //father
                waitpid(pid,&status,0);       
        }
}

[b]then i do:[/b]
gcc runner.c -o runner
pfexec chown root:root runner
pfexec chmod u+s runner

[b]when execute runner, this error will be returned:[/b]
ld.so.1: java: fatal: libjli.so: open failed: No such file or directory
[b]
here the truss output:[/b]
    *** SUID: ruid/euid/suid = 101 / 0 / 0  ***
execve("runner", 0x08047A48, 0x08047A50)  argc = 1
mmap(0x00000000, 4096, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANON, 
-1, 0) = 0xD1FB0000
resolvepath("/usr/lib/ld.so.1", "/lib/ld.so.1", 1023) = 12
getcwd("/export/home/marco", 1016)              = 0
resolvepath("/export/home/marco/runner", "/export/home/marco/runner", 1023) = 25
xstat(2, "/export/home/marco/runner", 0x080476F8) = 0
open("/var/ld/ld.config", O_RDONLY)             Err#2 ENOENT
sysconfig(_CONFIG_PAGESIZE)                     = 4096
xstat(2, "/usr/ccs/lib/libc.so.1", 0x08046E58)  Err#2 ENOENT
xstat(2, "/lib/libc.so.1", 0x08046E58)          = 0
resolvepath("/lib/libc.so.1", "/lib/libc.so.1", 1023) = 14
open("/lib/libc.so.1", O_RDONLY)                = 3
mmap(0x00010000, 32768, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_ALIGN, 3, 0) = 
0xD1FA0000
mmap(0x00010000, 1355776, PROT_NONE, 
MAP_PRIVATE|MAP_NORESERVE|MAP_ANON|MAP_ALIGN, -1, 0) = 0xD1E50000
mmap(0xD1E50000, 1246521, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_TEXT, 
3, 0) = 0xD1E50000
mmap(0xD1F91000, 30830, PROT_READ|PROT_WRITE|PROT_EXEC, 
MAP_PRIVATE|MAP_FIXED|MAP_INITDATA, 3, 1249280) = 0xD1F91000
mmap(0xD1F99000, 4744, PROT_READ|PROT_WRITE|PROT_EXEC, 
MAP_PRIVATE|MAP_FIXED|MAP_ANON, -1, 0) = 0xD1F99000
munmap(0xD1F81000, 65536)                       = 0
memcntl(0xD1E50000, 187424, MC_ADVISE, MADV_WILLNEED, 0, 0) = 0
close(3)                                        = 0
mmap(0x00010000, 24576, PROT_READ|PROT_WRITE|PROT_EXEC, 
MAP_PRIVATE|MAP_ANON|MAP_ALIGN, -1, 0) = 0xD1E40000
munmap(0xD1FA0000, 32768)                       = 0
getcontext(0x080474A0)
getrlimit(RLIMIT_STACK, 0x08047498)             = 0
getpid()                                        = 900 [899]
lwp_private(0, 1, 0xD1E42A00)                   = 0x000001C3
setustack(0xD1E42A60)
sysi86(SI86FPSTART, 0xD1F9999C, 0x0000133F, 0x00001F80) = 0x00000001
brk(0x08061120)                                 = 0
brk(0x08063120)                                 = 0
schedctl()                                      = 0xD1E3A000
ld.so.1: java: fatal: libjli.so: open failed: No such file or directory
forkx(0)                                        = 901
lwp_sigmask(SIG_SETMASK, 0x00000000, 0x00000000) = 0xFFBFFEFF [0x0000FFFF]
waitid(P_PID, 901, 0x08047960, WEXITED|WTRAPPED) = 0
_exit(901)

[b]
the very strange behavior is that if i execute java -jar DD.jar in a shell, it 
works !!!![/b]

for moderators: plz if i choose the wrong session plz move my post. TNX
--
This message posted from opensolaris.org

Reply via email to