summaryrefslogtreecommitdiffstats
path: root/usr/local/sbin/pfSsh.php
diff options
context:
space:
mode:
Diffstat (limited to 'usr/local/sbin/pfSsh.php')
-rwxr-xr-xusr/local/sbin/pfSsh.php176
1 files changed, 90 insertions, 86 deletions
diff --git a/usr/local/sbin/pfSsh.php b/usr/local/sbin/pfSsh.php
index 16aaa0a..068198f 100755
--- a/usr/local/sbin/pfSsh.php
+++ b/usr/local/sbin/pfSsh.php
@@ -1,5 +1,5 @@
#!/usr/local/bin/php -f
-
+
<?php
require_once("globals.inc");
@@ -11,39 +11,39 @@ echo ".";
require_once("util.inc");
echo ".";
-$shell_cmds = array("alias", "alloc", "bg", "bind", "bindkey", "break",
- "breaksw", "builtins", "case", "cd", "chdir", "command", "complete", "continue", "default",
- "dirs", "do", "done", "echo", "echotc", "elif", "else", "end", "endif", "endsw", "esac", "eval",
- "exec", "exit", "export", "false", "fc", "fg", "filetest", "fi", "for", "foreach", "getopts",
- "glob", "goto", "hash", "hashstat", "history", "hup", "if", "jobid", "jobs", "kill", "limit",
- "local", "log", "login", "logout", "ls-F", "nice", "nohup", "notify", "onintr", "popd",
- "printenv", "pushd", "pwd", "read", "readonly", "rehash", "repeat", "return", "sched", "set",
- "setenv", "settc", "setty", "setvar", "shift", "source", "stop", "suspend", "switch",
- "telltc", "test", "then", "time", "trap", "true", "type", "ulimit", "umask", "unalias",
- "uncomplete", "unhash", "unlimit", "unset", "unsetenv", "until", "wait", "where", "which",
- "while");
+$shell_cmds = array("alias", "alloc", "bg", "bind", "bindkey", "break",
+ "breaksw", "builtins", "case", "cd", "chdir", "command", "complete", "continue", "default",
+ "dirs", "do", "done", "echo", "echotc", "elif", "else", "end", "endif", "endsw", "esac", "eval",
+ "exec", "exit", "export", "false", "fc", "fg", "filetest", "fi", "for", "foreach", "getopts",
+ "glob", "goto", "hash", "hashstat", "history", "hup", "if", "jobid", "jobs", "kill", "limit",
+ "local", "log", "login", "logout", "ls-F", "nice", "nohup", "notify", "onintr", "popd",
+ "printenv", "pushd", "pwd", "read", "readonly", "rehash", "repeat", "return", "sched", "set",
+ "setenv", "settc", "setty", "setvar", "shift", "source", "stop", "suspend", "switch",
+ "telltc", "test", "then", "time", "trap", "true", "type", "ulimit", "umask", "unalias",
+ "uncomplete", "unhash", "unlimit", "unset", "unsetenv", "until", "wait", "where", "which",
+ "while");
function pipe_cmd($command, $text_to_pipe) {
$descriptorspec = array(
- 0 => array("pipe", "r"), // stdin
- 1 => array("pipe", "w"), // stdout
- 2 => array("pipe", "w")); // stderr ?? instead of a file
-
+ 0 => array("pipe", "r"), // stdin
+ 1 => array("pipe", "w"), // stdout
+ 2 => array("pipe", "w")); // stderr ?? instead of a file
+
$fd = proc_open("$command", $descriptorspec, $pipes);
if (is_resource($fd)) {
- fwrite($pipes[0], "{$text_to_pipe}");
- fclose($pipes[0]);
- while($s= fgets($pipes[1], 1024)) {
- // read from the pipe
- $buffer .= $s;
- }
- fclose($pipes[1]);
- fclose($pipes[2]);
+ fwrite($pipes[0], "{$text_to_pipe}");
+ fclose($pipes[0]);
+ while ($s= fgets($pipes[1], 1024)) {
+ // read from the pipe
+ $buffer .= $s;
+ }
+ fclose($pipes[1]);
+ fclose($pipes[2]);
}
return $buffer;
}
-if(!function_exists("readline")) {
+if (!function_exists("readline")) {
function readline() {
$fp = fopen('php://stdin', 'r');
$textinput = chop(fgets($fp));
@@ -53,21 +53,22 @@ if(!function_exists("readline")) {
}
function more($text, $count=24) {
- $counter=0;
- $lines = explode("\n", $text);
- foreach($lines as $line) {
- if($counter > $count) {
- echo "Press RETURN to continue ...";
- $fp = fopen('php://stdin', 'r');
- $pressreturn = chop(fgets($fp));
- if($pressreturn == "q" || $pressreturn == "quit")
- return;
- fclose($fp);
- $counter = 0;
- }
- echo "{$line}\n";
- $counter++;
- }
+ $counter=0;
+ $lines = explode("\n", $text);
+ foreach ($lines as $line) {
+ if ($counter > $count) {
+ echo "Press RETURN to continue ...";
+ $fp = fopen('php://stdin', 'r');
+ $pressreturn = chop(fgets($fp));
+ if ($pressreturn == "q" || $pressreturn == "quit") {
+ return;
+ }
+ fclose($fp);
+ $counter = 0;
+ }
+ echo "{$line}\n";
+ $counter++;
+ }
}
function show_help() {
@@ -75,7 +76,7 @@ function show_help() {
$show_help_text = <<<EOF
Enter a series of commands and then execute the set with "exec".
-
+
For example:
echo "foo"; // php command
echo "foo2"; // php command
@@ -95,54 +96,54 @@ $show_help_text = <<<EOF
/* to output a configuration array */
print_r(\$config);
-
+
/* to output the interfaces configuration portion of config.xml */
print_r(\$config['interfaces']);
-
+
/* to output the dhcp server configuration */
print_r(\$config['dhcpd']);
/* to exit the {$g['product_name']} developer shell */
exit
-
+
/* to output supported wireless modes for an interface */
print_r(get_wireless_modes(\"ath0\"));
-
+
/* to enable SSH */
\$config['system']['enablesshd'] = true;
-
+
/* change OPTX to the OPT interface name such as BACKHAUL */
\$config['interfaces']['optx']['wireless']['standard'] = "11a";
\$config['interfaces']['optx']['wireless']['mode'] = "hostap";
\$config['interfaces']['optx']['wireless']['channel'] = "6";
-
+
/* to enable dhcp server for an optx interface */
\$config['dhcpd']['optx']['enable'] = true;
\$config['dhcpd']['optx']['range']['from'] = "192.168.31.100";
\$config['dhcpd']['optx']['range']['to'] = "192.168.31.150";
-
+
/* to disable the firewall filter */
\$config['system']['disablefilter'] = true;
-
+
/* to enable an interface and configure it as a DHCP client */
\$config['interfaces']['optx']['disabled'] = false;
\$config['interfaces']['optx']['ipaddr'] = "dhcp";
-
+
/* to enable an interface and set a static IPv4 address */
\$config['interfaces']['wan']['enable'] = true;
\$config['interfaces']['wan']['ipaddr'] = "192.168.100.1";
\$config['interfaces']['wan']['subnet'] = "24";
-
+
/* to save out the new configuration (config.xml) */
write_config();
-
+
/* to reboot the system after saving */
system_reboot_sync();
-
+
EOF;
more($show_help_text);
-
+
}
$fp = fopen('php://stdin', 'r');
@@ -161,16 +162,16 @@ function completion($string, $index) {
readline_completion_function("completion");
-if($argc < 2) {
+if ($argc < 2) {
echo "Welcome to the {$g['product_name']} developer shell\n";
echo "\nType \"help\" to show common usage scenarios.\n";
echo "\nAvailable playback commands:\n ";
$files = scandir("/etc/phpshellsessions/");
$tccommands[] = "playback";
- foreach($files as $file) {
- if($file <> "." and $file <> "..") {
+ foreach ($files as $file) {
+ if ($file <> "." and $file <> "..") {
echo $file . " ";
- if(function_exists("readline_add_history")) {
+ if (function_exists("readline_add_history")) {
readline_add_history("playback $file");
$tccommands[] = "$file";
}
@@ -183,8 +184,8 @@ $recording = false;
$playback_file_split = array();
$playbackbuffer = "";
-if($argv[1]=="playback" or $argv[1]=="run") {
- if(!file_exists("/etc/phpshellsessions/{$argv[2]}")) {
+if ($argv[1]=="playback" or $argv[1]=="run") {
+ if (!file_exists("/etc/phpshellsessions/{$argv[2]}")) {
echo "Could not locate playback file.";
exit;
}
@@ -205,14 +206,14 @@ $tccommands[] = "reset";
$tccommands[] = "master";
$tccommands[] = "RELENG_1_2";
-while($shell_active == true) {
+while ($shell_active == true) {
$command = readline("{$g['product_name']} shell: ");
readline_add_history($command);
- $command_split = explode(" ", $command);
- $first_command = $command_split[0];
- if($first_command == "playback" || $first_command == "run") {
+ $command_split = explode(" ", $command);
+ $first_command = $command_split[0];
+ if ($first_command == "playback" || $first_command == "run") {
$playback_file = $command_split[1];
- if(!$playback_file || !file_exists("/etc/phpshellsessions/{$playback_file}")) {
+ if (!$playback_file || !file_exists("/etc/phpshellsessions/{$playback_file}")) {
$command = "";
echo "Could not locate playback file.\n";
} else {
@@ -222,42 +223,43 @@ while($shell_active == true) {
continue;
}
}
- if($first_command == "exit" or $first_command == "quit")
+ if ($first_command == "exit" or $first_command == "quit") {
die;
- if($first_command == "help" or $first_command == "?") {
+ }
+ if ($first_command == "help" or $first_command == "?") {
show_help();
$playbackbuffer = "";
continue;
}
- if($first_command == "exec" or $first_command == "exec;") {
+ if ($first_command == "exec" or $first_command == "exec;") {
playback_text($playbackbuffer);
$playbackbuffer = "";
continue;
}
- if($first_command == "stoprecording" || $first_command == "stoprecord" || $first_command == "stop") {
- if($recording) {
+ if ($first_command == "stoprecording" || $first_command == "stoprecord" || $first_command == "stop") {
+ if ($recording) {
fwrite($recording_fd, $playbackbuffer);
fclose($recording_fd);
$command = "";
conf_mount_ro();
echo "Recording stopped.\n";
- $recording = false;
+ $recording = false;
} else {
echo "No recording session in progress.\n";
$command = "";
}
}
- if($first_command == "showrecordings") {
+ if ($first_command == "showrecordings") {
show_recordings();
- $command = "";
+ $command = "";
}
- if($first_command == "reset") {
+ if ($first_command == "reset") {
$playbackbuffer = "";
echo "\nBuffer reset.\n\n";
continue;
}
- if($first_command == "record") {
- if(!$command_split[1]) {
+ if ($first_command == "record") {
+ if (!$command_split[1]) {
echo "usage: record playbackname\n";
$command = "";
} else {
@@ -265,10 +267,10 @@ while($shell_active == true) {
conf_mount_rw();
safe_mkdir("/etc/phpshellsessions");
$recording_fd = fopen("/etc/phpshellsessions/{$command_split[1]}","w");
- if(!$recording_fd) {
+ if (!$recording_fd) {
echo "Could not start recording session.\n";
$command = "";
- } else {
+ } else {
$recording = true;
echo "Recording of {$command_split[1]} started.\n";
$command = "";
@@ -281,28 +283,30 @@ while($shell_active == true) {
function show_recordings() {
conf_mount_rw();
safe_mkdir("/etc/phpshellsessions");
- if($recording)
+ if ($recording) {
conf_mount_ro();
+ }
echo "==> Sessions available for playback are:\n";
system("cd /etc/phpshellsessions && ls /etc/phpshellsessions");
- echo "==> end of list.\n";
+ echo "==> end of list.\n";
}
function returnlastchar($command) {
$commandlen = strlen($command);
$endofstring = substr($command, ($commandlen-1));
- return $endofstring;
+ return $endofstring;
}
function returnfirstchar($command) {
$commandlen = strlen($command);
$endofstring = substr($command, 0, 1);
- return $endofstring;
+ return $endofstring;
}
function str_replace_all($search,$replace,$subject) {
- while(strpos($subject,$search)!==false)
+ while (strpos($subject,$search)!==false) {
$subject = str_replace($search,$replace,$subject);
+ }
return $subject;
}
@@ -312,11 +316,11 @@ function playback_text($playback_file_contents) {
$playback_text .= "require_once('globals.inc');\n";
$playback_text .= "require_once('config.inc');\n";
$toquote = '"';
- $toquotereplace = '\\"';
- foreach($playback_file_split as $pfs) {
+ $toquotereplace = '\\"';
+ foreach ($playback_file_split as $pfs) {
$firstchar = returnfirstchar($pfs);
$currentline = $pfs;
- if($firstchar == "!") {
+ if ($firstchar == "!") {
/* XXX: encode " in $pfs */
$pfsa = str_replace($toquote, $toquotereplace, $currentline);
$playback_text .= str_replace("!", "system(\"", $pfsa) . "\");\n";
OpenPOWER on IntegriCloud