Hi,

I have a FreeBSD 5.1 box with jails. Some of them are 'builded' (with make world and 
make distribution), others I have created 'by hand' by copying files in the jail until 
things start to work.

In one such 'handmade' jail I have deployed ftpd, apache with php,ssmtp. Everything 
seems to be working fine except for the php mail() function. 

As usual when there is no log message or warning giving a hint what is missing, I 
tried to strace the process.Started with creating a simple enough .php page, taken 
directly from a php manual:
<?php
        mail("[EMAIL PROTECTED]", "My Subject", "Line 1\nLine 2\nLine 3");
        ?>
I tested it out of the jail environment and it worked. Tested it in a 'builded' jail - 
also works.Strace is normal.
While trying to strace it while executing within such 'handmade' jail I get some 
output I have never seen:


# strace -ffp 43685
accept(16,


{...}, 0xbfbffb6c)           = 0
syscall_416(0x1e, 0xbfbffb10, 0xbfbffaf0) = 0
fcntl(0, F_SETFD, FD_CLOEXEC)           = 0
getsockname(0, {...}, 0xbfbffb6c)       = 0
setsockopt(0, 0x6 /* SOL_?? */, TCP_NODELAY, 0xbfbffb30, 4) = 0
read(0, "GET /mytest.php HTTP/1.1\r\nAccept"..., 4096) = 202
syscall_416(0x1e, 0xbfbfda70, 0xbfbfda50) = 0
gettimeofday({791289914, 1091177770}, NULL) = 0
stat("/site/html/mytest.php", {st_mode=S_IFREG|0644, st_size=74, ...}) = 0
sigprocmask(SIG_BLOCK, NULL, [])        = 0
umask(077)                              = 022
umask(022)                              = 077
sigprocmask(SIG_BLOCK, NULL, [])        = 0
setitimer(ITIMER_PROF, {it_interval={0, 2047}, it_value={0, 0}}, NULL) = 0
syscall_416(0x1b, 0xbfbff800, 0xbfbff7e0) = 0
sigprocmask(SIG_UNBLOCK, [], NULL)      = 0
sigprocmask(SIG_BLOCK, NULL, [])        = 0
__getcwd("", 4095)                      = 0
chdir("")                               = 0
lstat("", {st_mode=0415, st_size=1292785156096, ...}) = 0
lstat("?", {st_mode=0, st_size=408021893229, ...}) = 0
lstat("c", {st_mode=0234, st_size=1653562409295, ...}) = 0
setitimer(ITIMER_PROF, {it_interval={113, 107}, it_value={232, 0}}, NULL) = 0
syscall_416(0x1b, 0xbfbfe3a0, 0xbfbfe380) = 0
sigprocmask(SIG_UNBLOCK, [], NULL)      = 0
__getcwd("", 1024)                      = 0
lstat("", {st_mode=0151060, st_size=15960098996242, ...}) = 0
lstat("", {st_mode=0, st_size=2946347565072, ...}) = 0
lstat("", {st_mode=073620, st_size=17364553302034, ...}) = 0
open("/site/html/mytest.php", O_RDONLY) = 1
fstat(1, {st_mode=023, st_size=8070450533662672128, ...}) = 0
fstat(1, {st_mode=0162755, st_size=6875142181715337580, ...}) = 0
lseek(1, 0, SEEK_CUR)                   = 0
lseek(1, 0, SEEK_SET)                   = 0
read(1, "<?php\n\tmail(\"[EMAIL PROTECTED]", \"My "..., 8192) = 74
read(1, "", 8192)                       = 0
close(1)                                = 0
pipe([1, 3])                            = 1
vfork(strace: open("/proc/...", ...): No such file or directory
)                                 = 45534
--- SIGCHLD (Child exited) ---
fcntl(3, F_GETFL)                       = 0x2 (flags O_RDWR)
close(1)                                = 0
fstat(3, {st_mode=S_IFCHR|S_ISUID|0154, st_rdev=makedev(98, 577175598), ...}) = 0
write(3, "To: [EMAIL PROTECTED]: My Sub"..., 59) = -1 EPIPE (Broken pipe)
--- SIGPIPE (Broken pipe) ---
close(3)                                = 0
wait4(45534, [WIFSIGNALED(s) && WTERMSIG(s) == 106], 0, NULL) = 45534
chdir("

Line 1
Line 2
Line 3
Line 3\");
        ?>
") = 0
sigprocmask(SIG_BLOCK, NULL, [])        = 0
sigprocmask(SIG_BLOCK, NULL, [])        = 0
sigprocmask(SIG_BLOCK, NULL, [])        = 0
sigprocmask(SIG_BLOCK, NULL, [])        = 0
sigprocmask(SIG_BLOCK, NULL, [])        = 0
sigprocmask(SIG_BLOCK, NULL, [])        = 0
sigprocmask(SIG_BLOCK, NULL, [])        = 0
sigprocmask(SIG_BLOCK, NULL, [])        = 0
sigprocmask(SIG_BLOCK, NULL, [])        = 0
sigprocmask(SIG_BLOCK, NULL, [])        = 0
sigprocmask(SIG_BLOCK, NULL, [])        = 0
sigprocmask(SIG_BLOCK, NULL, [])        = 0
sigprocmask(SIG_BLOCK, NULL, [])        = 0
sigprocmask(SIG_BLOCK, NULL, [])        = 0
sigprocmask(SIG_BLOCK, NULL, [])        = 0
setitimer(ITIMER_PROF, {it_interval={0, 2047}, it_value={0, 0}}, NULL) = 0
umask(022)                              = 022
select(1, [], NULL, NULL, {0, 674295616}) = 0 (Timeout)
write(0, "HTTP/1.1 200 OK\r\nDate: Tue, 16 D"..., 210) = 210
 (sorry for the lenghty output)

This is a trace from one of the apache processes (the one which handles the GET 
request for the former page). We see that everything is fine UNTIL it comes time to 
fork() and invoke the php interpreter. I don't understand what happens when that time 
comes - strace cannot follow the vfork for some reasons. Of course I have tried with 
other parameters also -F -v -s 100 , but haven't obtained more information about that. 
I have mounted /proc in the jail, but the same problem occurs. I have also tried to 
run strace from within the jail - same error.

I would really appreciate any hint about what might be missing. Without strace I'm 
kind of blind :)

P.S.: One thing I almost forgot. I can execute jls from within the jail and see some 
information about the other jailed hosts. Probably shouldn't be like that?

TIA,
Emil Filipov
_______________________________________________
[EMAIL PROTECTED] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-questions
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to