version 1.1, 2012/02/21 23:48:02
|
version 1.1.1.2, 2012/05/29 12:34:43
|
Line 22
|
Line 22
|
#include "php.h" |
#include "php.h" |
#include <ctype.h> |
#include <ctype.h> |
#include "php_string.h" |
#include "php_string.h" |
#include "safe_mode.h" |
|
#include "ext/standard/head.h" |
#include "ext/standard/head.h" |
#include "ext/standard/file.h" |
#include "ext/standard/file.h" |
#include "basic_functions.h" |
#include "basic_functions.h" |
Line 61
|
Line 60
|
PHPAPI int php_exec(int type, char *cmd, zval *array, zval *return_value TSRMLS_DC) |
PHPAPI int php_exec(int type, char *cmd, zval *array, zval *return_value TSRMLS_DC) |
{ |
{ |
FILE *fp; |
FILE *fp; |
char *buf, *tmp=NULL; | char *buf; |
int l = 0, pclose_return; |
int l = 0, pclose_return; |
char *cmd_p, *b, *c, *d=NULL; | char *b, *d=NULL; |
php_stream *stream; |
php_stream *stream; |
size_t buflen, bufl = 0; |
size_t buflen, bufl = 0; |
#if PHP_SIGCHILD |
#if PHP_SIGCHILD |
void (*sig_handler)() = NULL; |
void (*sig_handler)() = NULL; |
#endif |
#endif |
|
|
if (PG(safe_mode)) { |
|
if ((c = strchr(cmd, ' '))) { |
|
*c = '\0'; |
|
c++; |
|
} |
|
if (strstr(cmd, "..")) { |
|
php_error_docref(NULL TSRMLS_CC, E_WARNING, "No '..' components allowed in path"); |
|
goto err; |
|
} |
|
|
|
b = strrchr(cmd, PHP_DIR_SEPARATOR); |
|
|
|
#ifdef PHP_WIN32 |
|
if (b && *b == '\\' && b == cmd) { |
|
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid absolute path."); |
|
goto err; |
|
} |
|
#endif |
|
|
|
spprintf(&d, 0, "%s%s%s%s%s", PG(safe_mode_exec_dir), (b ? "" : "/"), (b ? b : cmd), (c ? " " : ""), (c ? c : "")); |
|
if (c) { |
|
*(c - 1) = ' '; |
|
} |
|
cmd_p = php_escape_shell_cmd(d); |
|
efree(d); |
|
d = cmd_p; |
|
} else { |
|
cmd_p = cmd; |
|
} |
|
|
|
#if PHP_SIGCHILD |
#if PHP_SIGCHILD |
sig_handler = signal (SIGCHLD, SIG_DFL); |
sig_handler = signal (SIGCHLD, SIG_DFL); |
#endif |
#endif |
|
|
#ifdef PHP_WIN32 |
#ifdef PHP_WIN32 |
fp = VCWD_POPEN(cmd_p, "rb"); | fp = VCWD_POPEN(cmd, "rb"); |
#else |
#else |
fp = VCWD_POPEN(cmd_p, "r"); | fp = VCWD_POPEN(cmd, "r"); |
#endif |
#endif |
if (!fp) { |
if (!fp) { |
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to fork [%s]", cmd); |
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to fork [%s]", cmd); |
Line 140 PHPAPI int php_exec(int type, char *cmd, zval *array,
|
Line 109 PHPAPI int php_exec(int type, char *cmd, zval *array,
|
|
|
if (type == 1) { |
if (type == 1) { |
PHPWRITE(buf, bufl); |
PHPWRITE(buf, bufl); |
if (OG(ob_nesting_level) < 1) { | if (php_output_get_level(TSRMLS_C) < 1) { |
sapi_flush(TSRMLS_C); |
sapi_flush(TSRMLS_C); |
} |
} |
} else if (type == 2) { |
} else if (type == 2) { |
Line 170 PHPAPI int php_exec(int type, char *cmd, zval *array,
|
Line 139 PHPAPI int php_exec(int type, char *cmd, zval *array,
|
} |
} |
|
|
/* Return last line from the shell command */ |
/* Return last line from the shell command */ |
if (PG(magic_quotes_runtime)) { | RETVAL_STRINGL(buf, bufl, 1); |
int len; | |
| |
tmp = php_addslashes(buf, bufl, &len, 0 TSRMLS_CC); | |
RETVAL_STRINGL(tmp, len, 0); | |
} else { | |
RETVAL_STRINGL(buf, bufl, 1); | |
} | |
} else { /* should return NULL, but for BC we return "" */ |
} else { /* should return NULL, but for BC we return "" */ |
RETVAL_EMPTY_STRING(); |
RETVAL_EMPTY_STRING(); |
} |
} |
Line 484 PHP_FUNCTION(shell_exec)
|
Line 446 PHP_FUNCTION(shell_exec)
|
return; |
return; |
} |
} |
|
|
if (PG(safe_mode)) { |
|
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot execute using backquotes in Safe Mode"); |
|
RETURN_FALSE; |
|
} |
|
|
|
#ifdef PHP_WIN32 |
#ifdef PHP_WIN32 |
if ((in=VCWD_POPEN(command, "rt"))==NULL) { |
if ((in=VCWD_POPEN(command, "rt"))==NULL) { |
#else |
#else |
Line 520 PHP_FUNCTION(proc_nice)
|
Line 477 PHP_FUNCTION(proc_nice)
|
} |
} |
|
|
errno = 0; |
errno = 0; |
nice(pri); | php_ignore_value(nice(pri)); |
if (errno) { |
if (errno) { |
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Only a super user may attempt to increase the priority of a process"); |
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Only a super user may attempt to increase the priority of a process"); |
RETURN_FALSE; |
RETURN_FALSE; |