php doesn't reuse array indexes with [], so do some acrobatics to figure out a real channel id. fixes #4418
git-svn-id: file:///home/svn/framework3/trunk@12605 4d416f70-5f16-0410-b530-b9f4589650daunstable
parent
486c0556d0
commit
6e06b61e48
|
@ -31,7 +31,7 @@ if (!isset($GLOBALS['readers'])) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function my_print($str) {
|
function my_print($str) {
|
||||||
#error_log($str);
|
error_log($str);
|
||||||
}
|
}
|
||||||
|
|
||||||
my_print("Evaling main meterpreter stage");
|
my_print("Evaling main meterpreter stage");
|
||||||
|
@ -41,14 +41,18 @@ my_print("Evaling main meterpreter stage");
|
||||||
|
|
||||||
function dump_array($arr, $name=null) {
|
function dump_array($arr, $name=null) {
|
||||||
if (is_null($name)) {
|
if (is_null($name)) {
|
||||||
my_print(sprintf("Array (%s)", count($arr)));
|
$name = "Array";
|
||||||
} else {
|
|
||||||
my_print(sprintf("$name (%s)", count($arr)));
|
|
||||||
}
|
}
|
||||||
|
my_print(sprintf("$name (%s)", count($arr)));
|
||||||
foreach ($arr as $key => $val) {
|
foreach ($arr as $key => $val) {
|
||||||
|
if (is_array($val)) {
|
||||||
|
# recurse
|
||||||
|
dump_array($val, "{$name}[{$key}]");
|
||||||
|
} else {
|
||||||
my_print(sprintf(" $key ($val)"));
|
my_print(sprintf(" $key ($val)"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
function dump_readers() {
|
function dump_readers() {
|
||||||
global $readers;
|
global $readers;
|
||||||
dump_array($readers, 'Readers');
|
dump_array($readers, 'Readers');
|
||||||
|
@ -57,6 +61,10 @@ function dump_resource_map() {
|
||||||
global $resource_type_map;
|
global $resource_type_map;
|
||||||
dump_array($resource_type_map, 'Resource map');
|
dump_array($resource_type_map, 'Resource map');
|
||||||
}
|
}
|
||||||
|
function dump_channels($extra="") {
|
||||||
|
global $channels;
|
||||||
|
dump_array($channels, 'Channels '.$extra);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
# Doesn't exist before php 4.3
|
# Doesn't exist before php 4.3
|
||||||
|
@ -265,7 +273,7 @@ function core_channel_close($req, &$pkt) {
|
||||||
}
|
}
|
||||||
return ERROR_SUCCESS;
|
return ERROR_SUCCESS;
|
||||||
}
|
}
|
||||||
dump_array($channels, "Channel list after close");
|
dump_channels("after close");
|
||||||
|
|
||||||
return ERROR_FAILURE;
|
return ERROR_FAILURE;
|
||||||
}
|
}
|
||||||
|
@ -377,18 +385,36 @@ function register_channel($in, $out=null, $err=null) {
|
||||||
global $channels;
|
global $channels;
|
||||||
if ($out == null) { $out = $in; }
|
if ($out == null) { $out = $in; }
|
||||||
if ($err == null) { $err = $out; }
|
if ($err == null) { $err = $out; }
|
||||||
$id = count($channels);
|
|
||||||
$channels[] = array(0 => $in, 1 => $out, 2 => $err, 'type' => get_rtype($in));
|
$channels[] = array(0 => $in, 1 => $out, 2 => $err, 'type' => get_rtype($in));
|
||||||
|
|
||||||
|
# Grab the last index and use it as the new ID.
|
||||||
|
$id = end(array_keys($channels));
|
||||||
my_print("Created new channel $in, with id $id");
|
my_print("Created new channel $in, with id $id");
|
||||||
return $id;
|
return $id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#
|
||||||
|
# Channels look like this:
|
||||||
|
#
|
||||||
|
# Array
|
||||||
|
# (
|
||||||
|
# [0] => Array
|
||||||
|
# (
|
||||||
|
# [0] => Resource id #12
|
||||||
|
# [1] => Resource id #13
|
||||||
|
# [2] => Resource id #14
|
||||||
|
# [type] => 'stream'
|
||||||
|
# )
|
||||||
|
# )
|
||||||
|
#
|
||||||
function get_channel_id_from_resource($resource) {
|
function get_channel_id_from_resource($resource) {
|
||||||
global $channels;
|
global $channels;
|
||||||
for ($i = 0; $i < count($channels); $i++) {
|
if (empty($channels)) {
|
||||||
#dump_array($channels[$i], "channels[$i]");
|
return false;
|
||||||
if (in_array($resource, $channels[$i])) {
|
}
|
||||||
#my_print("Found channel id $i");
|
foreach ($channels as $i => $chan_ary) {
|
||||||
|
if (in_array($resource, $chan_ary)) {
|
||||||
|
my_print("Found channel id $i");
|
||||||
return $i;
|
return $i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -397,7 +423,8 @@ function get_channel_id_from_resource($resource) {
|
||||||
|
|
||||||
function get_channel_by_id($chan_id) {
|
function get_channel_by_id($chan_id) {
|
||||||
global $channels;
|
global $channels;
|
||||||
#my_print("Looking up channel id $chan_id");
|
my_print("Looking up channel id $chan_id");
|
||||||
|
dump_channels("in get_channel_by_id");
|
||||||
if (array_key_exists($chan_id, $channels)) {
|
if (array_key_exists($chan_id, $channels)) {
|
||||||
return $channels[$chan_id];
|
return $channels[$chan_id];
|
||||||
} else {
|
} else {
|
||||||
|
@ -947,4 +974,5 @@ while (false !== ($cnt = select($r, $w=null, $e=null, 1))) {
|
||||||
$r = $GLOBALS['readers'];
|
$r = $GLOBALS['readers'];
|
||||||
} # end main loop
|
} # end main loop
|
||||||
my_print("Finished");
|
my_print("Finished");
|
||||||
|
my_print("--------------------");
|
||||||
close($msgsock);
|
close($msgsock);
|
||||||
|
|
Loading…
Reference in New Issue