1 /* 2 +----------------------------------------------------------------------+ 3 | PHP Version 5 | 4 +----------------------------------------------------------------------+ 5 | Copyright (c) 1997-2016 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(TSRMLS_D)82long php_getuid(TSRMLS_D) 83 { 84 php_statpage(TSRMLS_C); 85 return (BG(page_uid)); 86 } 87 /* }}} */ 88 php_getgid(TSRMLS_D)89long php_getgid(TSRMLS_D) 90 { 91 php_statpage(TSRMLS_C); 92 return (BG(page_gid)); 93 } 94 95 /* {{{ proto int getmyuid(void) 96 Get PHP script owner's UID */ PHP_FUNCTION(getmyuid)97PHP_FUNCTION(getmyuid) 98 { 99 long uid; 100 101 if (zend_parse_parameters_none() == FAILURE) { 102 return; 103 } 104 105 uid = php_getuid(TSRMLS_C); 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 if (zend_parse_parameters_none() == FAILURE) { 121 return; 122 } 123 124 gid = php_getgid(TSRMLS_C); 125 if (gid < 0) { 126 RETURN_FALSE; 127 } else { 128 RETURN_LONG(gid); 129 } 130 } 131 /* }}} */ 132 133 /* {{{ proto int getmypid(void) 134 Get current process ID */ PHP_FUNCTION(getmypid)135PHP_FUNCTION(getmypid) 136 { 137 int pid; 138 139 if (zend_parse_parameters_none() == FAILURE) { 140 return; 141 } 142 143 pid = getpid(); 144 if (pid < 0) { 145 RETURN_FALSE; 146 } else { 147 RETURN_LONG((long) pid); 148 } 149 } 150 /* }}} */ 151 152 /* {{{ proto int getmyinode(void) 153 Get the inode of the current script being parsed */ PHP_FUNCTION(getmyinode)154PHP_FUNCTION(getmyinode) 155 { 156 if (zend_parse_parameters_none() == FAILURE) { 157 return; 158 } 159 160 php_statpage(TSRMLS_C); 161 if (BG(page_inode) < 0) { 162 RETURN_FALSE; 163 } else { 164 RETURN_LONG(BG(page_inode)); 165 } 166 } 167 /* }}} */ 168 php_getlastmod(TSRMLS_D)169PHPAPI long php_getlastmod(TSRMLS_D) 170 { 171 php_statpage(TSRMLS_C); 172 return BG(page_mtime); 173 } 174 175 /* {{{ proto int getlastmod(void) 176 Get time of last page modification */ PHP_FUNCTION(getlastmod)177PHP_FUNCTION(getlastmod) 178 { 179 long lm; 180 181 if (zend_parse_parameters_none() == FAILURE) { 182 return; 183 } 184 185 lm = php_getlastmod(TSRMLS_C); 186 if (lm < 0) { 187 RETURN_FALSE; 188 } else { 189 RETURN_LONG(lm); 190 } 191 } 192 /* }}} */ 193 194 /*nma 195 * Local variables: 196 * tab-width: 4 197 * c-basic-offset: 4 198 * End: 199 * vim600: sw=4 ts=4 fdm=marker 200 * vim<600: sw=4 ts=4 201 */ 202