Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:12488 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 26947 invoked by uid 1010); 31 Aug 2004 02:45:54 -0000 Delivered-To: ezmlm-scan-internals@lists.php.net Delivered-To: ezmlm-internals@lists.php.net Received: (qmail 26813 invoked from network); 31 Aug 2004 02:45:51 -0000 Received: from unknown (HELO novell.stoldgods.nu) (193.45.238.241) by pb1.pair.com with SMTP; 31 Aug 2004 02:45:51 -0000 Received: from localhost (localhost [127.0.0.1]) by novell.stoldgods.nu (Postfix) with ESMTP id BC17D13773; Tue, 31 Aug 2004 04:45:17 +0200 (CEST) Received: from novell.stoldgods.nu ([127.0.0.1]) by localhost (netsrv2 [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 24533-02; Tue, 31 Aug 2004 04:45:05 +0200 (CEST) Received: from novell.netiic.com (unknown [10.0.1.254]) (using TLSv1 with cipher RC4-MD5 (128/128 bits)) (No client certificate requested) by novell.stoldgods.nu (Postfix) with ESMTP id 4B8A313771; Tue, 31 Aug 2004 04:45:04 +0200 (CEST) To: internals@lists.php.net Date: Tue, 31 Aug 2004 04:43:55 +0200 User-Agent: KMail/1.7 Cc: sascha@schumann.cx MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_wX+MB1+JMI20Pfr" Message-ID: <200408310444.00094.magnus@php.net> X-Virus-Scanned: by amavisd-new-20030616-p10 at novell.stoldgods.nu Subject: [PATCH] Fix for FR #14924 (The POSIX access(2) function not available) (re-post) From: magnus@php.net (Magnus =?iso-8859-15?q?M=E4=E4tt=E4?=) --Boundary-00=_wX+MB1+JMI20Pfr Content-Type: text/plain; charset="iso-8859-15" Content-Transfer-Encoding: 7bit Content-Disposition: inline Hello! My mail probably got lost in all the fuzz about goto, etc. So here's the patch again.. It will fix FR #14924 and someone else was also asking for this feature in an unrelated bug report which I can't remember the number of. access(2) will report correct permissions for files when using ACLs too (is_writeable() etc does not). Sascha, since you made the comment "access() not supported, because it is braindead and dangerous and gives outdated results", do you have any objections ? Should I go ahead and commit it or should I close the bug as Won't Fix ? /Magnus -- Shell to DOS... Come in DOS, do you copy? Shell to DOS... --Boundary-00=_wX+MB1+JMI20Pfr Content-Type: text/x-diff; charset="iso-8859-15"; name="posix_access.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="posix_access.patch" Index: php_posix.h =================================================================== RCS file: /repository/php-src/ext/posix/php_posix.h,v retrieving revision 1.14 diff -u -r1.14 php_posix.h --- php_posix.h 8 Jan 2004 17:32:41 -0000 1.14 +++ php_posix.h 15 Aug 2004 18:46:31 -0000 @@ -90,6 +90,9 @@ PHP_FUNCTION(posix_mkfifo); #endif +/* POSIX.1, 5.6 */ +PHP_FUNCTION(posix_access); + /* POSIX.1, 9.2 */ PHP_FUNCTION(posix_getgrnam); PHP_FUNCTION(posix_getgrgid); Index: posix.c =================================================================== RCS file: /repository/php-src/ext/posix/posix.c,v retrieving revision 1.60 diff -u -r1.60 posix.c --- posix.c 18 Apr 2004 21:49:10 -0000 1.60 +++ posix.c 15 Aug 2004 18:46:32 -0000 @@ -108,6 +108,8 @@ PHP_FE(posix_mkfifo, NULL) #endif + /* POSIX.1, 5.6 */ + PHP_FE(posix_access, NULL) /* POSIX.1, 9.2 */ PHP_FE(posix_getgrnam, NULL) PHP_FE(posix_getgrgid, NULL) @@ -146,6 +148,10 @@ static PHP_MINIT_FUNCTION(posix) { ZEND_INIT_MODULE_GLOBALS(posix, php_posix_init_globals, NULL); + REGISTER_LONG_CONSTANT("POSIX_F_OK", F_OK, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("POSIX_X_OK", X_OK, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("POSIX_W_OK", W_OK, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("POSIX_R_OK", R_OK, CONST_CS | CONST_PERSISTENT); return SUCCESS; } /* }}} */ @@ -638,15 +644,46 @@ POSIX.1, 5.5.1 unlink() POSIX.1, 5.5.2 rmdir() POSIX.1, 5.5.3 rename() - POSIX.1, 5.6.x stat(), access(), chmod(), utime() - already supported by PHP (access() not supported, because it is - braindead and dangerous and gives outdated results). + POSIX.1, 5.6.x stat(), chmod(), utime() already supported by PHP. +*/ + +/* {{{ proto bool posix_access(string file [, int mode]) + Determine accessibility of a file (POSIX.1 5.6.3) */ +PHP_FUNCTION(posix_access) +{ + long mode = 0; + int filename_len, ret; + char *filename, *path; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &filename, &filename_len, &mode) == FAILURE) + return; + + path = expand_filepath(filename, NULL TSRMLS_CC); + + if (php_check_open_basedir_ex(path, 0 TSRMLS_CC)) { + efree(path); + POSIX_G(last_error) = EPERM; + RETURN_FALSE; + } + + ret = access(path, mode); + efree(path); + + if (ret) { + POSIX_G(last_error) = errno; + RETURN_FALSE; + } + + RETURN_TRUE; +} +/* }}} */ +/* POSIX.1, 6.x most I/O functions already supported by PHP. POSIX.1, 7.x tty functions, TODO POSIX.1, 8.x interactions with other C language functions - POSIX.1, 9.x system database access - */ + POSIX.1, 9.x system database access +*/ /* {{{ proto array posix_getgrnam(string groupname) Group database access (POSIX.1, 9.2.1) */ --Boundary-00=_wX+MB1+JMI20Pfr--