#21958 [Com]: fopen fails in safe mode

From: Date: Wed, 04 Jun 2003 11:24:05 +0000
Subject: #21958 [Com]: fopen fails in safe mode
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-41129@lists.php.net to get a copy of this message
 ID:               21958
 Comment by:       ohp at pyrenet dot fr
 Reported By:      ct at swin dot edu dot au
 Status:           Assigned
 Bug Type:         Filesystem function related
 Operating System: Tru64 UNIX 5.1A
 PHP Version:      4.3.3-dev
 Assigned To:      wez
 New Comment:

Hi, Glad to see my patch works on AIX, not so glad it fails with TRU64
UNIX

Did you test with the same script/environment you wrote on Jan 30?

Did you try to log the value of path after each VCWD_REALPATH.

AFAICS, the whole bug comes from realpath doing nasty things when path
is NULL hence the strcopy I added.

Feel free to email directly. I'm not a PHP developper (I'd love the
help of one on this one) but I want to get rid of this bug.

Regards
Olivier


Previous Comments:
------------------------------------------------------------------------

[2003-06-01 23:54:24] ct at swin dot edu dot au

Patch makes no difference with Tru64 UNIX 5.1A and PHP 4.3.2.

------------------------------------------------------------------------

[2003-05-30 11:12:50] juha dot moisio at tietonauha dot fi

I tested that patch.
Works just fine in AIX 4.3.1 php 4.3.2

-Juha-

------------------------------------------------------------------------

[2003-05-28 10:47:42] ohp at pyrenet dot fr

after 2 strggling, I came with the following path on 
safe_mode.c against 4.3.2RC4.
Not sure it's the right thing to do.
could someone have a look?
Regards

*** main/safe_mode.c.orig	lun mrs 17 14:50:23 2003
--- main/safe_mode.c	mar mai 27 15:06:30 2003
***************
*** 66,71 ****
--- 66,72 ----
  			mode = CHECKUID_DISALLOW_FILE_NOT_EXISTS;
  		} else {
  			mode = CHECKUID_CHECK_FILE_AND_DIR;
+ 			flags=1;
  		}
  	}
  
***************
*** 81,86 ****
--- 82,88 ----
  	 * If that fails, passthrough and check 
directory...
  	 */
  	if (mode != CHECKUID_ALLOW_ONLY_DIR) {
+ 		strcpy(path,filename);
  		VCWD_REALPATH(filename, path);
  		ret = VCWD_STAT(path, &sb);
  		if (ret < 0) {

this works on Unixware 713

------------------------------------------------------------------------

[2003-05-27 06:29:50] ohp at pyrenet dot fr

I have made tons of research on this since yesterday.
It appears that realpath (at least on UW 713) set path to NULLL,
returns NULL with errno=2 in case of a non existing file on line 86 in
safe_mode.c then function proceeds to line  116 with a NULL path, all
functions fail and the file cannot be created.

Hope this help to create a patch (I'm trying to but don't know the code
enough too) Please someone help.

ohp@pyrenet.fr

------------------------------------------------------------------------

[2003-05-26 09:34:28] ohp at pyrenet dot fr

The bug is still there with php-4.3.2RC4 as an apache 1.3.27 module.
This is on Unixware 7.

with safe_mode=Off, file creation succeeds,
with safe_mode=On, file creattion fails with "failed to open stream: no
such file or directory ..."

I've tried setting the dir 777, make it owned by apache UID.. Nothing
worked.

A truss of the apache server showed that the last syscall before failed
was a pathconf(filename,...) returning ENOENT
File didn't exist so it's normal.

Please help

------------------------------------------------------------------------

The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
    http://bugs.php.net/21958

-- 
Edit this bug report at http://bugs.php.net/?id=21958&edit=1



Thread (26 messages)

« previous php.bugs (#41129) next »