1/*
2 +----------------------------------------------------------------------+
3 | PHP Version 5 |
4 +----------------------------------------------------------------------+
5 | Copyright (c) 1997-2015 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 */
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 */
82long php_getuid(TSRMLS_D)
83{
84 php_statpage(TSRMLS_C);
85 return (BG(page_uid));
86}
87/* }}} */
88
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 */
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 */
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 */
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 */
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
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 */
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