1 /* 2 +----------------------------------------------------------------------+ 3 | PHP Version 5 | 4 +----------------------------------------------------------------------+ 5 | Copyright (c) 1997-2013 The PHP Group | 6 +----------------------------------------------------------------------+ 7 | This source file is subject to version 3.01 of the PHP license, | 8 | that is bundled with this package in the file LICENSE, and is | 9 | available through the world-wide-web at the following url: | 10 | http://www.php.net/license/3_01.txt | 11 | If you did not receive a copy of the PHP license and are unable to | 12 | obtain it through the world-wide-web, please send a note to | 13 | license@php.net so we can mail you a copy immediately. | 14 +----------------------------------------------------------------------+ 15 | Author: Jim Winstead <jimw@php.net> | 16 +----------------------------------------------------------------------+ 17 */ 18 19 /* $Id$ */ 20 21 #include "php.h" 22 #include "pageinfo.h" 23 #include "SAPI.h" 24 25 #include <stdio.h> 26 #include <stdlib.h> 27 #if HAVE_PWD_H 28 #ifdef PHP_WIN32 29 #include "win32/pwd.h" 30 #else 31 #include <pwd.h> 32 #endif 33 #endif 34 #if HAVE_GRP_H 35 # ifdef PHP_WIN32 36 # include "win32/grp.h" 37 # else 38 # include <grp.h> 39 # endif 40 #endif 41 #ifdef PHP_WIN32 42 #undef getgid 43 #define getgroups(a, b) 0 44 #define getgid() 1 45 #define getuid() 1 46 #endif 47 #if HAVE_UNISTD_H 48 #include <unistd.h> 49 #endif 50 #include <sys/stat.h> 51 #include <sys/types.h> 52 #ifdef PHP_WIN32 53 #include <process.h> 54 #endif 55 56 #include "ext/standard/basic_functions.h" 57 58 /* {{{ php_statpage 59 */ php_statpage(TSRMLS_D)60PHPAPI void php_statpage(TSRMLS_D) 61 { 62 struct stat *pstat; 63 64 pstat = sapi_get_stat(TSRMLS_C); 65 66 if (BG(page_uid)==-1 || BG(page_gid)==-1) { 67 if(pstat) { 68 BG(page_uid) = pstat->st_uid; 69 BG(page_gid) = pstat->st_gid; 70 BG(page_inode) = pstat->st_ino; 71 BG(page_mtime) = pstat->st_mtime; 72 } else { /* handler for situations where there is no source file, ex. php -r */ 73 BG(page_uid) = getuid(); 74 BG(page_gid) = getgid(); 75 } 76 } 77 } 78 /* }}} */ 79 80 /* {{{ php_getuid 81 */ php_getuid(void)82long php_getuid(void) 83 { 84 TSRMLS_FETCH(); 85 86 php_statpage(TSRMLS_C); 87 return (BG(page_uid)); 88 } 89 /* }}} */ 90 php_getgid(void)91long php_getgid(void) 92 { 93 TSRMLS_FETCH(); 94 95 php_statpage(TSRMLS_C); 96 return (BG(page_gid)); 97 } 98 99 /* {{{ proto int getmyuid(void) 100 Get PHP script owner's UID */ PHP_FUNCTION(getmyuid)101PHP_FUNCTION(getmyuid) 102 { 103 long uid; 104 105 uid = php_getuid(); 106 if (uid < 0) { 107 RETURN_FALSE; 108 } else { 109 RETURN_LONG(uid); 110 } 111 } 112 /* }}} */ 113 114 /* {{{ proto int getmygid(void) 115 Get PHP script owner's GID */ PHP_FUNCTION(getmygid)116PHP_FUNCTION(getmygid) 117 { 118 long gid; 119 120 gid = php_getgid(); 121 if (gid < 0) { 122 RETURN_FALSE; 123 } else { 124 RETURN_LONG(gid); 125 } 126 } 127 /* }}} */ 128 129 /* {{{ proto int getmypid(void) 130 Get current process ID */ PHP_FUNCTION(getmypid)131PHP_FUNCTION(getmypid) 132 { 133 int pid; 134 135 pid = getpid(); 136 if (pid < 0) { 137 RETURN_FALSE; 138 } else { 139 RETURN_LONG((long) pid); 140 } 141 } 142 /* }}} */ 143 144 /* {{{ proto int getmyinode(void) 145 Get the inode of the current script being parsed */ PHP_FUNCTION(getmyinode)146PHP_FUNCTION(getmyinode) 147 { 148 php_statpage(TSRMLS_C); 149 if (BG(page_inode) < 0) { 150 RETURN_FALSE; 151 } else { 152 RETURN_LONG(BG(page_inode)); 153 } 154 } 155 /* }}} */ 156 php_getlastmod(TSRMLS_D)157PHPAPI long php_getlastmod(TSRMLS_D) 158 { 159 php_statpage(TSRMLS_C); 160 return BG(page_mtime); 161 } 162 163 /* {{{ proto int getlastmod(void) 164 Get time of last page modification */ PHP_FUNCTION(getlastmod)165PHP_FUNCTION(getlastmod) 166 { 167 long lm = php_getlastmod(TSRMLS_C); 168 if (lm < 0) { 169 RETURN_FALSE; 170 } else { 171 RETURN_LONG(lm); 172 } 173 } 174 /* }}} */ 175 176 /* 177 * Local variables: 178 * tab-width: 4 179 * c-basic-offset: 4 180 * End: 181 * vim600: sw=4 ts=4 fdm=marker 182 * vim<600: sw=4 ts=4 183 */ 184