<?
// *************************************************************************************************************************************************
// Aplicación WEB: ogAdmWebCon
// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla
// Fecha Creación: Año 2009-2010
// Fecha Última modificación: Agosto-2010
// Nombre del fichero: shellconsola.php
// Descripción : 
//		Crea una consola remota para enviar comandos de la shell de forma remota y recibir el eco
// *************************************************************************************************************************************************
include_once("../includes/ctrlacc.php");
include_once("../clases/SockHidra.php");
include_once("../clases/AdoPhp.php");
include_once("../includes/constantes.php");
include_once("../includes/CreaComando.php");
include_once("../idiomas/php/".$idioma."/consolaremota_".$idioma.".php");
//________________________________________________________________________________________________________
$litambito=0; 
$idambito=0; 
$comando="";

if (isset($_POST["litambito"])) $litambito=$_POST["litambito"]; // Recoge parametros
if (isset($_POST["idambito"])) $idambito=$_POST["idambito"]; 
if (isset($_POST["comando"])) $comando=$_POST["comando"]; 

$nombrefuncion="ConsolaRemota"; 
$ejecutor="1"; 
$cadenaip="";

$cmd=CreaComando($cadenaconexion);
if (!$cmd)
	Header('Location: '.$pagerror.'?herror=2'); // Error de conexión con servidor B.D.
//________________________________________________________________________________________________________
if($cmd){ // Compone cadena ip recorriendo ámbitos
	switch($litambito){
			case $LITAMBITO_CENTROS :
				$cmd->texto="SELECT idcentro,nombrecentro FROM centros WHERE idcentro=".$idambito;
				RecorreCentro($cmd);
				break;
			case $LITAMBITO_GRUPOSAULAS :
				$cmd->texto="SELECT idgrupo,nombregrupo FROM grupos WHERE idgrupo=".$idambito." AND tipo=".$AMBITO_GRUPOSAULAS;
				RecorreGruposAulas($cmd);
				break;
			case $LITAMBITO_AULAS :
				$cmd->texto="SELECT idaula,nombreaula FROM aulas WHERE idaula=".$idambito;
				RecorreAulas($cmd);
				break;
			case $LITAMBITO_GRUPOSORDENADORES :
				$cmd->texto="SELECT idgrupo,nombregrupoordenador FROM gruposordenadores WHERE idgrupo=".$idambito;
				RecorreGruposOrdenadores($cmd);
				break;
			case $LITAMBITO_ORDENADORES :
				$cmd->texto="SELECT ip FROM ordenadores WHERE idordenador=".$idambito;
				RecorreOrdenadores($cmd);
				break;
	}
}
$resul=false;
if($cmd){
	$shidra=new SockHidra($servidorhidra,$hidraport); 
	$cadenaip=ereg_replace( ";", "','", $cadenaip );
	$cmd->texto="SELECT  ordenadores.ip as ipord,servidoresrembo.ip FROM ordenadores INNER JOIN servidoresrembo ON ordenadores.idservidorrembo =servidoresrembo.idservidorrembo WHERE ordenadores.ip IN ('".$cadenaip."') ORDER BY servidoresrembo.ip";
	$rs=new Recordset; 
	$rs->Comando=&$cmd; 
	if (!$rs->Abrir())	$resul=false; // Error al abrir recordset
	$rs->Primero(); 
	if(!$rs->EOF){
		$resul=true;
		$ipservidorrembo=trim($rs->campos["ip"]); // toma ip servidor rembo
		$cadenaip="";
		while(!$rs->EOF && $resul){
			if($ipservidorrembo!=trim($rs->campos["ip"])){ // compara si cambia el servidor rembo
				$parametros=$ejecutor;
				$parametros.="nfn=".$nombrefuncion.chr(13);
				$cadenaip=substr($cadenaip,0,strlen($cadenaip)-1); // Quita la coma
				$parametros.="iph=".$cadenaip.chr(13);
				$parametros.="rmb=".$ipservidorrembo.chr(13);
				$resul=manda_trama();
				$ipservidorrembo=trim($rs->campos["ip"]); // toma ip servidor rembo
				$cadenaip="";
			}
			$cadenaip.=trim($rs->campos["ipord"]).";"; // toma ip del cliente
			$rs->Siguiente();
		}
	}
	$rs->Cerrar();
	if($resul){
		$parametros=$ejecutor;
		$parametros.="nfn=".$nombrefuncion.chr(13);
		$parametros.="cmd=".$comando.chr(13);
		$cadenaip=substr($cadenaip,0,strlen($cadenaip)-1); // Quita la coma
		$parametros.="iph=".$cadenaip.chr(13);
		$parametros.="rmb=".$ipservidorrembo.chr(13);

		$resul=manda_trama();
	}
}

 if(!$resul)
	echo "alert('".$TbMsg[10]."');";

//=======================================================================================================
//	Manda una trama del comando shellconsola
//________________________________________________________________________________________________________
function manda_trama(){
	global $parametros;
	global $shidra;
	if ($shidra->conectar()){ // Se ha establecido la conexión con el servidor hidra
		$shidra->envia_comando($parametros);
		$shidra->desconectar();
		return(true);
	}
	return(false);
}
//________________________________________________________________________________________________________
function RecorreCentro($cmd){
	global $AMBITO_GRUPOSAULAS;
	$rs=new Recordset; 
	$rs->Comando=&$cmd; 
	if (!$rs->Abrir()) return; // Error al abrir recordset
	$rs->Primero(); 
	if(!$rs->EOF){
		$idcentro=$rs->campos["idcentro"];
		$cmd->texto="SELECT idgrupo,nombregrupo FROM grupos WHERE idcentro=".$idcentro." AND grupoid=0 AND tipo=".$AMBITO_GRUPOSAULAS." ORDER BY nombregrupo";
		RecorreGruposAulas($cmd);
		$cmd->texto="SELECT idaula,nombreaula FROM aulas WHERE idcentro=".$idcentro." AND grupoid=0 ORDER BY nombreaula";
		RecorreAulas($cmd);
	}
	$rs->Cerrar();
}
//________________________________________________________________________________________________________
function RecorreGruposAulas($cmd){
	global $AMBITO_GRUPOSAULAS;
	$rs=new Recordset; 
	$rs->Comando=&$cmd; 
	if (!$rs->Abrir()) return; // Error al abrir recordset
	$rs->Primero(); 
	while (!$rs->EOF){
		$idgrupo=$rs->campos["idgrupo"];
		$cmd->texto="SELECT idgrupo,nombregrupo FROM grupos WHERE grupoid=".$idgrupo." AND tipo=".$AMBITO_GRUPOSAULAS." ORDER BY nombregrupo";
		RecorreGruposAulas($cmd);
		$cmd->texto="SELECT idaula,nombreaula FROM aulas WHERE  grupoid=".$idgrupo." ORDER BY nombreaula";
		RecorreAulas($cmd);
		$rs->Siguiente();
	}
	$rs->Cerrar();
}
//________________________________________________________________________________________________________
function RecorreAulas($cmd){
	$rs=new Recordset; 
	$rs->Comando=&$cmd; 
	if (!$rs->Abrir()) return; // Error al abrir recordset
	$rs->Primero(); 
	while (!$rs->EOF){
		$idaula=$rs->campos["idaula"];
		$cmd->texto="SELECT idordenador,nombreordenador,ip,mac FROM ordenadores WHERE  idaula=".$idaula;
		$k=0;
		RecorreOrdenadores($cmd);
		$rs->Siguiente();
	}
	$rs->Cerrar();
}
//________________________________________________________________________________________________________
function RecorreGruposOrdenadores($cmd){
	$rs=new Recordset; 
	$rs->Comando=&$cmd; 
	if (!$rs->Abrir()) return; // Error al abrir recordset
	$rs->Primero(); 
	while (!$rs->EOF){
		$idgrupo=$rs->campos["idgrupo"];
		$cmd->texto="SELECT idgrupo,nombregrupoordenador FROM gruposOrdenadores WHERE grupoid=".$idgrupo." ORDER BY nombregrupoordenador";
		RecorreGruposOrdenadores($cmd);
		$cmd->texto="SELECT idordenador,nombreordenador,ip,mac FROM ordenadores WHERE  grupoid=".$idgrupo;
		RecorreOrdenadores($cmd);
		$rs->Siguiente();
	}
	$rs->Cerrar();
}
//________________________________________________________________________________________________________
function RecorreOrdenadores($cmd){
	global $cadenaip;
	$rs=new Recordset; 
	$rs->Comando=&$cmd; 
	if (!$rs->Abrir()) return; // Error al abrir recordset
	$rs->Primero(); 
	while (!$rs->EOF){
		$cadenaip.=$rs->campos["ip"].";";
		$rs->Siguiente();
	}
	$rs->Cerrar();
}
?>
