Commit 03434f0b authored by Franco Fichtner's avatar Franco Fichtner

src: remove the unused phpshellsessions developer tools

parent 10002c22
require_once("config.inc");
require("auth.inc");
require_once("functions.inc");
global $g, $config, $argv, $userindex;
$userindex = index_users();
$args = array_slice($argv, 3);
$password = "";
$confpassword = "";
$username = "";
$fp = fopen('php://stdin', 'r');
// If the first parameter is empty, ask for username
if (empty($args[0])) {
echo gettext("Enter username: ");
$username = fgets($fp);
} else {
$username = $args[0];
}
$username = trim($username);
// If the user does not exist, bail
$user =& getUserEntry($username);
if ($user == NULL) {
printf(gettext("User '%s' does not exist.\n"), $username);
exit(-1);
} else {
printf(gettext("Changing password for '%s'.\n"), $username);
}
// If the user does exist, prompt for password
while (empty($password)) {
echo gettext("New Password") . ": ";
exec('/bin/stty -echo');
$password = trim(fgets($fp));
exec('/bin/stty echo');
echo "\n";
}
// Confirm password
while (empty($confpassword)) {
echo gettext("Confirm New Password") . ": ";
exec('/bin/stty -echo');
$confpassword = trim(fgets($fp));
exec('/bin/stty echo');
echo "\n";
}
// Check if user is disabled
if (is_account_disabled($username)) {
echo gettext("Account is disabled, would you like to re-enable? [y|n]") . ": ";
if (strcasecmp(chop(fgets($fp)), "y") == 0) {
unset($user['disabled']);
}
}
// Check if user is expired
if (is_account_expired($username)) {
echo gettext("Account is expired, would you like to clear the expiration date? [y|n]") . ": ";
if (strcasecmp(chop(fgets($fp)), "y") == 0) {
unset($user['expires']);
}
}
fclose($fp);
// Compare password and confirm
if ($password == $confpassword) {
//Reset password
local_user_set_password($user, $password);
local_user_set($user);
write_config(sprintf(gettext("password changed for user '%s' from console."), $username));
exit(0);
} else {
echo gettext("New and Confirm passwords did not match.") . "\n";
exit(-1);
}
! echo "Disabling CARP..."
require_once("config.inc");
require_once("interfaces.inc");
require_once("util.inc");
set_single_sysctl("net.inet.carp.allow", "0");
if(is_array($config['virtualip']['vip'])) {
$viparr = &$config['virtualip']['vip'];
foreach ($viparr as $vip) {
switch ($vip['mode']) {
case "carp":
interface_vip_bring_down($vip);
sleep(1);
break;
}
}
}
global $config;
$config = parse_config(true);
unset($config['dhcpd']);
echo "Disabling DHCP Server on all interfaces...";
write_config("pfSsh.php disabled dhcp on all interfaces");
services_dhcpd_configure();
echo "done.\n";
global $config;
$config = parse_config(true);
$config['system']['webgui']['nohttpreferercheck'] = true;
echo "Disabling HTTP referer check...";
write_config("PHP shell disabled HTTP referer check");
echo "done.\n";
global $config;
require_once("filter.inc");
require("shaper.inc");
$config = parse_config(true);
echo "Adding allow all rule...\n";
$filterent = array();
$filterent["type"] = "pass";
$filterent["interface"] = "wan";
$filterent["source"]["any"] = "";
$filterent["destination"]["any"] = "";
$filterent["statetype"] = "keep state";
$filterent["os"] = "";
$filterent["descr"] = "Allow all ipv4 via pfSsh.php";
$config["filter"]["rule"][] = $filterent;
$filterent = array();
$filterent["type"] = "pass";
$filterent["ipprotocol"] = "inet6";
$filterent["interface"] = "wan";
$filterent["source"]["any"] = "";
$filterent["destination"]["any"] = "";
$filterent["statetype"] = "keep state";
$filterent["os"] = "";
$filterent["descr"] = "Allow all ipv6 via pfSsh.php";
$config["filter"]["rule"][] = $filterent;
echo "Turning off block private networks (if on)...\n";
unset($config["interfaces"]["wan"]["blockpriv"]);
unlink_if_exists("/tmp/config.cache");
write_config("pfSsh.php added allow all wan rule");
unlink_if_exists("/tmp/config.cache");
unset($config['interfaces']['wan']['blockbogons']);
$config = parse_config(true);
echo "Reloading the filter configuration...";
filter_configure_sync();
echo "\n\n";
! echo "Enabling CARP..."
require_once("config.inc");
require_once("interfaces.inc");
require_once("util.inc");
if(is_array($config['virtualip']['vip'])) {
$viparr = &$config['virtualip']['vip'];
foreach ($viparr as $vip) {
switch ($vip['mode']) {
case "carp":
interface_carp_configure($vip);
sleep(1);
break;
}
}
}
interfaces_carp_setup();
set_single_sysctl("net.inet.carp.allow", "1");
global $config;
echo "Starting enablesshd...";
require("config.inc");
echo ".";
$config = parse_config(true);
echo ".";
$config['system']['enablesshd'] = true;
echo ".";
write_config("pfSsh.php enabled sshd");
echo "\nEnabling SSHD, please wait...";
send_event("service reload sshd");
echo "\n\n";
This diff is collapsed.
require_once("config.inc");
require_once("util.inc");
require_once("pkg-utils.inc");
global $g, $config, $argv, $command_split;
if(is_array($command_split))
$args = array_slice($command_split, 2);
else
$args = array_slice($argv, 3);
$pkg_name = $args[0];
$install_type = empty($args[1]) ? "normal" : $args[1];
echo "Installing package \"{$pkg_name}\"...\n";
echo "Trying to fetch package info...";
$pkg_info = get_pkg_info();
if ($pkg_info) {
echo " Done.\n";
} else {
$xmlrpc_base_url = get_active_xml_rpc_base_url();
echo "\n" . sprintf(gettext(' >>> Unable to communicate with %1$s. Please verify DNS and interface configuration, and that %2$s has functional Internet connectivity.'), $xmlrpc_base_url, $g['product_name']) . "\n";
return;
}
$static_output = "";
$pkg_interface = "console";
if (empty($pkg_info[$pkg_name]))
echo "\nPackage not found.\n";
elseif ($install_type == "normal")
install_package($pkg_name, $pkg_info[$pkg_name], true);
elseif ($install_type == "xmlonly")
install_package_xml($pkg_name);
else
echo "Invalid install type. Valid values are: normal, xmlonly.\n";
echo "\nDone.\n";
require_once("config.inc");
require_once("util.inc");
global $g, $config;
echo "Installed packages:\n";
foreach($config['installedpackages']['package'] as $package) {
$name = str_pad("{$package['name']}-{$package['version']}", 30);
$descr = $package['descr'];
$line = "{$name} {$descr}";
if (strlen($line) > 80)
$line = substr($line, 0, 77) . "...";
echo "{$line}\n";
}
global $config;
$config = parse_config(true);
unset($config['installedpackages']);
echo "Clearing package configuration information...\n";
write_config("pfSsh.php cleared package configuration data.");
$config = parse_config(true);
echo "Removing startup files from /usr/local/etc/rc.d/...\n";
exec("rm /usr/local/etc/rc.d/*");
require("config.inc");
require_once("functions.inc");
require_once("filter.inc");
require_once("shaper.inc");
require_once("rrd.inc");
/* Much of this borrowed from firewall_shaper.php */
echo gettext("Removing shaper settings...\n");
unset($config['shaper']['queue']);
unset($queue);
unset($altq);
foreach ($config['filter']['rule'] as $key => $rule) {
if (isset($rule['wizard']) && $rule['wizard'] == "yes")
unset($config['filter']['rule'][$key]);
}
if (write_config()) {
echo gettext("Shaper Successfully Removed.\n");
} else {
echo gettext("Unable to write config.xml (Access Denied?)\n");
}
filter_configure();
! echo "Killing dhcp server..."
! killall dhcpd
! echo "Restarting dhcp server..."
services_dhcpd_configure();
! echo "Restarting ipsec..."
require_once("config.inc");
require_once("ipsec.inc");
require_once("vpn.inc");
vpn_ipsec_configure();
require_once("config.inc");
require_once("util.inc");
require_once("service-utils.inc");
function usage() {
echo "Usage: playback svc <action> <service name> [service-specific options]\n\n";
echo "Examples:\n";
echo "playback svc stop dhcpd\n";
echo "playback svc restart openvpn client 2\n";
echo "playback svc stop captiveportal zone1\n";
echo "\n";
}
global $g, $config, $argv, $command_split;
if(is_array($command_split))
$args = array_slice($command_split, 2);
else
$args = array_slice($argv, 3);
if (empty($args[0])) {
usage();
}
$extras = array();
// start, stop, restart
$action = $args[0];
// dhcpd, openvpn, etc.
$svc_name = $args[1];
// Handle servive-specific options.
switch ($svc_name) {
case "openvpn":
if (in_array($args[2], array("server", "client"))) {
$extras['vpnmode'] = $args[2];
} else {
echo "Invalid OpenVPN mode (server, client)\n";
return;
}
if (is_numeric($args[3])) {
$extras['id'] = $args[3];
} else {
echo "Invalid OpenVPN ID, must be numeric\n";
return;
}
$vpnsvc = find_service_by_openvpn_vpnid($extras['id']);
if (empty($vpnsvc)) {
echo "No OpenVPN client or server found with that ID.\n";
return;
}
break;
case "captiveportal":
if (is_validaliasname($args[2])) {
$extras['zone'] = $args[2];
} else {
echo "Invalid Captive Portal Zone.\n";
return;
}
$cpzone = find_service_by_cp_zone($extras['zone']);
if (empty($cpzone)) {
echo "No Captive Portal Zone found with that name.\n";
return;
}
break;
}
switch ($action) {
case "restart":
echo "Attempting to issue {$action} to {$svc_name} service...\n";
$savemsg = service_control_restart($svc_name, $extras);
break;
case "start":
echo "Attempting to issue {$action} to {$svc_name} service...\n";
$savemsg = service_control_start($svc_name, $extras);
break;
case "stop":
echo "Attempting to issue {$action} to {$svc_name} service...\n";
$savemsg = service_control_stop($svc_name, $extras);
break;
case "status":
switch ($svc_name) {
case "openvpn":
$service = $vpnsvc;
break;
case "captiveportal":
$service = $cpzone;
break;
default:
$service = find_service_by_name($svc_name);
break;
}
$savemsg = get_service_status($service) ? "Service {$svc_name} is running." : "Service {$svc_name} is stopped.";
break;
}
echo "\n{$savemsg}\n";
require_once("config.inc");
require_once("util.inc");
require_once("pkg-utils.inc");
global $g, $config, $argv, $command_split;
if(is_array($command_split))
$args = array_slice($command_split, 2);
else
$args = array_slice($argv, 3);
$pkg_name = $args[0];
$remove_type = empty($args[1]) ? "normal" : $args[1];
$pkg_info = array();
echo "Removing package \"{$pkg_name}\"...\n";
foreach($config['installedpackages']['package'] as $package) {
if ($pkg_name == $package['name'])
$pkg_info = $package;
}
$static_output = "";
$pkg_interface = "console";
if (empty($pkg_info))
echo "\nPackage not installed.\n";
elseif ($remove_type == "normal")
uninstall_package($pkg_name);
elseif ($remove_type == "xmlonly")
delete_package_xml($pkg_name);
else
echo "Invalid removal type. Valid values are: normal, xmlonly.\n";
echo "\nDone.\n";
#!/usr/local/bin/php -f
<?php
require_once("globals.inc");
echo "Starting the {$g['product_name']} shell system";
require_once("functions.inc");
echo ".";
require_once("config.inc");
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");
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
$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]);
}
return $buffer;
}
if(!function_exists("readline")) {
function readline() {
$fp = fopen('php://stdin', 'r');
$textinput = chop(fgets($fp));
fclose($fp);
}
return $textinput;
}
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++;
}
}
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
! echo "heh" # shell command
exec
Example commands:
startrecording <recordingfilename>
stoprecording <recordingfilename>
showrecordings
parse_config(true); # reloads the \$config array
\$temp = print_r(\$config, true);
more(\$temp);
/* 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 php {$g['product_name']} 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 set it for dhcp */
\$config['interfaces']['optx']['disabled'] = false;
\$config['interfaces']['optx']['ipaddr'] = "dhcp";
/* to enable an interface and set a static ip address */
\$config['interfaces']['wan']['disabled'] = false;
\$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');
echo ".\n\n";
$pkg_interface='console';
$shell_active = true;
$tccommands = array();
function completion($string, $index) {
global $tccommands;
return $tccommands;
}
readline_completion_function("completion");
if($argc < 2) {
echo "Welcome to the {$g['product_name']} php shell system\n";
echo "Written by Scott Ullrich (sullrich@gmail.com)\n";
echo "\nType \"help\" to show common usage scenarios.\n";
echo "\nAvailable playback commands:\n ";
$files = scandir("/usr/local/etc/phpshellsessions/");
$tccommands[] = "playback";
foreach($files as $file) {
if($file <> "." and $file <> "..") {
echo $file . " ";
if(function_exists("readline_add_history")) {
readline_add_history("playback $file");
$tccommands[] = "$file";
}
}
}
echo "\n\n";
}
$recording = false;
$playback_file_split = array();
$playbackbuffer = "";
if($argv[1]=="playback" or $argv[1]=="run") {
if(!file_exists("/usr/local/etc/phpshellsessions/{$argv[2]}")) {
echo "Could not locate playback file.";
exit;
}
playback_file($argv[2]);
exit;
}
// Define more commands
$tccommands[] = "exit";
$tccommands[] = "quit";
$tccommands[] = "?";
$tccommands[] = "exec";
$tccommands[] = "startrecording";
$tccommands[] = "stoprecording";
$tccommands[] = "showrecordings";
$tccommands[] = "record";
$tccommands[] = "reset";
$tccommands[] = "master";
$tccommands[] = "RELENG_1_2";
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") {
$playback_file = $command_split[1];
if(!$playback_file || !file_exists("/usr/local/etc/phpshellsessions/{$playback_file}")) {
$command = "";
echo "Could not locate playback file.\n";
} else {
$command = "";
echo "\nPlayback of file {$command_split[1]} started.\n\n";
playback_file("{$playback_file}");
continue;
}
}
if($first_command == "exit" or $first_command == "quit")
die;
if($first_command == "help" or $first_command == "?") {
show_help();
$playbackbuffer = "";
continue;
}
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) {
fwrite($recording_fd, $playbackbuffer);
fclose($recording_fd);
$command = "";
conf_mount_ro();
echo "Recording stopped.\n";
$recording = false;
} else {
echo "No recording session in progress.\n";
$command = "";
}
}
if($first_command == "showrecordings") {
show_recordings();
$command = "";
}
if($first_command == "reset") {
$playbackbuffer = "";
echo "\nBuffer reset.\n\n";
continue;
}
if($first_command == "record") {
if(!$command_split[1]) {
echo "usage: record playbackname\n";
$command = "";
} else {
/* time to record */
conf_mount_rw();
safe_mkdir("/usr/local/etc/phpshellsessions");
$recording_fd = fopen("/usr/local/etc/phpshellsessions/{$command_split[1]}","w");
if(!$recording_fd) {
echo "Could not start recording session.\n";
$command = "";
} else {
$recording = true;
echo "Recording of {$command_split[1]} started.\n";
$command = "";
}
}
}
$playbackbuffer .= $command . "\n";
}
function show_recordings() {
conf_mount_rw();
safe_mkdir("/usr/local/etc/phpshellsessions");
if($recording)
conf_mount_ro();
echo "==> Sessions available for playback are:\n";
system("cd /usr/local/etc/phpshellsessions && ls /usr/local/etc/phpshellsessions");
echo "==> end of list.\n";
}
function returnlastchar($command) {
$commandlen = strlen($command);
$endofstring = substr($command, ($commandlen-1));
return $endofstring;
}
function returnfirstchar($command) {
$commandlen = strlen($command);
$endofstring = substr($command, 0, 1);
return $endofstring;
}
function str_replace_all($search,$replace,$subject) {
while(strpos($subject,$search)!==false)
$subject = str_replace($search,$replace,$subject);
return $subject;
}
function playback_text($playback_file_contents) {
$playback_file_split = explode("\n", $playback_file_contents);
$playback_text = "require_once('functions.inc');\n";
$playback_text .= "require_once('globals.inc');\n";
$playback_text .= "require_once('config.inc');\n";
$toquote = '"';
$toquotereplace = '\\"';
foreach($playback_file_split as $pfs) {
$firstchar = returnfirstchar($pfs);
$currentline = $pfs;
if($firstchar == "!") {
/* XXX: encode " in $pfs */
$pfsa = str_replace($toquote, $toquotereplace, $currentline);
$playback_text .= str_replace("!", "system(\"", $pfsa) . "\");\n";
} else if ($firstchar == "=") {
/* XXX: encode " in $pfs */
$pfsa = str_replace($toquote, $toquotereplace, $currentline);
$currentline .= str_replace("!", "system(\"", $pfsa) . "\");\n";
} else {
$playback_text .= $pfs . "\n";
}
}
global $config;
eval($playback_text);
}
function playback_file($playback_file) {
$playback_file_contents = file_get_contents("/usr/local/etc/phpshellsessions/{$playback_file}");
playback_text($playback_file_contents);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment