1 : /*
2 : +----------------------------------------------------------------------+
3 : | PHP Version 6 |
4 : +----------------------------------------------------------------------+
5 : | Copyright (c) 1997-2009 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: pageinfo.c 290190 2009-11-03 21:21:34Z guenter $ */
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 : */
60 : PHPAPI void php_statpage(TSRMLS_D)
61 4 : {
62 : struct stat *pstat;
63 :
64 4 : pstat = sapi_get_stat(TSRMLS_C);
65 :
66 4 : if (BG(page_uid)==-1 || BG(page_gid)==-1) {
67 1 : if(pstat) {
68 1 : BG(page_uid) = pstat->st_uid;
69 1 : BG(page_gid) = pstat->st_gid;
70 1 : BG(page_inode) = pstat->st_ino;
71 1 : BG(page_mtime) = pstat->st_mtime;
72 : } else { /* handler for situations where there is no source file, ex. php -r */
73 0 : BG(page_uid) = getuid();
74 0 : BG(page_gid) = getgid();
75 : }
76 : }
77 4 : }
78 : /* }}} */
79 :
80 : /* {{{ php_getuid
81 : */
82 : long php_getuid(void)
83 1 : {
84 : TSRMLS_FETCH();
85 :
86 1 : php_statpage(TSRMLS_C);
87 1 : return (BG(page_uid));
88 : }
89 : /* }}} */
90 :
91 : long php_getgid(void) /* {{{ */
92 1 : {
93 : TSRMLS_FETCH();
94 :
95 1 : php_statpage(TSRMLS_C);
96 1 : return (BG(page_gid));
97 : }
98 : /* }}} */
99 :
100 : /* {{{ proto int getmyuid(void) U
101 : Get PHP script owner's UID */
102 : PHP_FUNCTION(getmyuid)
103 1 : {
104 : long uid;
105 :
106 1 : uid = php_getuid();
107 1 : if (uid < 0) {
108 0 : RETURN_FALSE;
109 : } else {
110 1 : RETURN_LONG(uid);
111 : }
112 : }
113 : /* }}} */
114 :
115 : /* {{{ proto int getmygid(void) U
116 : Get PHP script owner's GID */
117 : PHP_FUNCTION(getmygid)
118 1 : {
119 : long gid;
120 :
121 1 : gid = php_getgid();
122 1 : if (gid < 0) {
123 0 : RETURN_FALSE;
124 : } else {
125 1 : RETURN_LONG(gid);
126 : }
127 : }
128 : /* }}} */
129 :
130 : /* {{{ proto int getmypid(void) U
131 : Get current process ID */
132 : PHP_FUNCTION(getmypid)
133 3 : {
134 : int pid;
135 :
136 3 : pid = getpid();
137 3 : if (pid < 0) {
138 0 : RETURN_FALSE;
139 : } else {
140 3 : RETURN_LONG((long) pid);
141 : }
142 : }
143 : /* }}} */
144 :
145 : /* {{{ proto int getmyinode(void) U
146 : Get the inode of the current script being parsed */
147 : PHP_FUNCTION(getmyinode)
148 1 : {
149 1 : php_statpage(TSRMLS_C);
150 1 : if (BG(page_inode) < 0) {
151 0 : RETURN_FALSE;
152 : } else {
153 1 : RETURN_LONG(BG(page_inode));
154 : }
155 : }
156 : /* }}} */
157 :
158 : PHPAPI time_t php_getlastmod(TSRMLS_D) /* {{{ */
159 1 : {
160 1 : php_statpage(TSRMLS_C);
161 1 : return BG(page_mtime);
162 : }
163 : /* }}} */
164 :
165 : /* {{{ proto int getlastmod(void) U
166 : Get time of last page modification */
167 : PHP_FUNCTION(getlastmod)
168 1 : {
169 1 : long lm = php_getlastmod(TSRMLS_C);
170 1 : if (lm < 0) {
171 0 : RETURN_FALSE;
172 : } else {
173 1 : RETURN_LONG(lm);
174 : }
175 : }
176 : /* }}} */
177 :
178 : /*
179 : * Local variables:
180 : * tab-width: 4
181 : * c-basic-offset: 4
182 : * End:
183 : * vim600: sw=4 ts=4 fdm=marker
184 : * vim<600: sw=4 ts=4
185 : */
|