'?>
CreaParametro("@tipoaccion",0,1);
$cmd->CreaParametro("@idtipoaccion",0,1);
$cmd->CreaParametro("@descriaccion","",0);
$cmd->CreaParametro("@idordenador",0,1);
$cmd->CreaParametro("@ip","",0);
$cmd->CreaParametro("@sesion",0,1);
$cmd->CreaParametro("@parametros","",0);
$cmd->CreaParametro("@fechahorareg","",0);
$cmd->CreaParametro("@estado",0,1);
$cmd->CreaParametro("@resultado",0,1);
$cmd->CreaParametro("@idcentro",0,1);
$cmd->CreaParametro("@idprocedimiento",0,1);
$cmd->CreaParametro("@descripcion","",0);
$cmd->CreaParametro("@idcomando",0,1);
$cmd->CreaParametro("@idtarea",0,1);
$cmd->CreaParametro("@ambito",0,1);
$cmd->CreaParametro("@idambito",0,1);
$cmd->CreaParametro("@restrambito","",0);
$cmd->CreaParametro("@ordprocedimiento",0,1);
$cmd->CreaParametro("@ordtarea",0,1);
if($ambito==0){ // Ambito restringido a un subconjuto de ordenadores con formato (idordenador1,idordenador2,etc)
$cmd->ParamSetValor("@restrambito",$idambito);
$idambito=0;
}
if(!empty($filtro)){ // Ambito restringido a un subconjuto de ordenadores
$cmd->ParamSetValor("@restrambito",$filtro);
}
$resul=true;
/*--------------------------------------------------------------------------------------------------------------------
Switch de ejecución inmediata y de seguimiento
--------------------------------------------------------------------------------------------------------------------*/
if($sw_ejya=='on' || $sw_ejprg=="on" ){
$parametros=$funcion.$atributos;
$aplicacion=chr(13)."ido=".$cadenaid.chr(13)."mac=".$cadenamac.chr(13)."iph=".$cadenaip.chr(13);
if($sw_seguimiento==1 || $sw_ejprg=="on"){ // Switch de ejecución con seguimiento o comando programado
$sesion = 0;
$cmd->ParamSetValor("@tipoaccion",$EJECUCION_COMANDO);
$cmd->ParamSetValor("@idtipoaccion",$idcomando);
$cmd->ParamSetValor("@descriaccion",$descricomando);
$cmd->ParamSetValor("@sesion",$sesion);
$cmd->ParamSetValor("@idcomando",$idcomando);
$cmd->ParamSetValor("@parametros",
clean_shell_params($idcomando, $parametros));
$cmd->ParamSetValor("@fechahorareg",date("y/m/d H:i:s"));
if($sw_ejprg=="on") // Switch de ejecución con programación (se para el comando tarea para lanzarlo posteriormente)
$cmd->ParamSetValor("@estado",$ACCION_DETENIDA);
else
$cmd->ParamSetValor("@estado",$ACCION_INICIADA);
$cmd->ParamSetValor("@resultado",$ACCION_SINRESULTADO);
$cmd->ParamSetValor("@ambito",$ambito);
$cmd->ParamSetValor("@idambito",$idambito);
$cmd->ParamSetValor("@idcentro",$idcentro);
$auxID=explode(",",$cadenaid);
$auxIP=explode(";",$cadenaip);
for ($i=0;$iParamSetValor("@idordenador",$auxID[$i]);
$cmd->ParamSetValor("@ip",$auxIP[$i]);
$cmd->texto="INSERT INTO acciones (idordenador,tipoaccion,idtipoaccion,descriaccion,ip,
sesion,idcomando,parametros,fechahorareg,estado,resultado,ambito,idambito,restrambito,idcentro)
VALUES (@idordenador,@tipoaccion,@idtipoaccion,@descriaccion,@ip,
@sesion,@idcomando,@parametros,@fechahorareg,@estado,@resultado,@ambito,@idambito,@restrambito,@idcentro)";
$resul=$cmd->Ejecutar();
if ($i == 0) {
$sesion = $cmd->Autonumerico();
$cmd->ParamSetValor("@sesion",$sesion);
}
}
$cmd->texto = "UPDATE acciones SET sesion=@sesion ".
"WHERE idaccion = @sesion";
$resul=$cmd->Ejecutar();
$acciones=chr(13)."ids=".$sesion.chr(13); // Para seguimiento
}
if (!$resul){
echo '';
}
else{
$ValorParametros=extrae_parametros($parametros,chr(13),'=');
$script=@urldecode($ValorParametros["scp"]);
if($sw_ejya=='on'){
if ($sw_seguimiento == 1) {
$when = now_params();
$resul = create_schedule(strval($sesion),
$EJECUCION_PROCEDIMIENTO,
"", $when['map_year'],
$when['map_month'],
0, 0, $when['map_day'],
$when['map_hour'],
$when['map_am_pm'],
$when['map_minute']);
} else {
run_command($idcomando, $cadenaip, $cadenamac, $netmasks_string, $atributos);
}
// En agente nuevo devuelvo siempre correcto
$resulhidra = 1;
// Comprobamos si el comando es soportado por el nuevo OGAgent
$numip=0;
$ogAgentNuevo = false;
switch ($idcomando) {
case OG_CMD_ID_POWEROFF:
// Apagar
$urlcomando = 'poweroff';
$ogAgentNuevo = true;
break;
case OG_CMD_ID_REBOOT:
// Reiniciar
$urlcomando = 'reboot';
$ogAgentNuevo = true;
break;
case OG_CMD_ID_SCRIPT:
// Ejecutar script
$urlcomando = 'script';
$ogAgentNuevo = true;
$client = (isset ($_POST['modoejecucion']) && $_POST['modoejecucion'] != '' ) ? $_POST['modoejecucion'] : 'true';
$paramsPost = '{"script":"'.base64_encode($script).'","client":"'.$client.'"}';
break;
case OG_CMD_ID_SENDMESSAGE:
// Enviar mensaje
$urlcomando = 'popup';
$ogAgentNuevo = true;
$paramsPost = '{"title":"'.$_POST['titulo'].'","message":"'.$_POST['mensaje'].'"}';
break;
}
// Se envía acción al nuevo ogAgent
if ( $ogAgentNuevo ) {
// Send REST requests to new OGAgent clients.
$urls = array();
$ipsuccess = '';
// Compose array of REST URLs.
$auxIp = explode(';', $cadenaip);
$auxKey = explode(";", $cadenaoga);
$i = 0;
foreach ($auxIp as $ip) {
$urls[$ip]['url'] = "https://$ip:8000/opengnsys/$urlcomando";
if (isset($auxKey[$i])) $urls[$ip]['header'] = Array("Authorization: ".$auxKey[$i]);
if (isset($paramsPost)) $urls[$ip]['post'] = $paramsPost;
$i++;
}
// Launch concurrent requests.
$responses = multiRequest($urls);
// Process responses array (IP as array index).
foreach ($responses as $ip => $resp) {
// Check if response code is OK (200).
if ($resp['code'] == 200) {
$ipsuccess .= "'".$ip."',";
$numip++;
}
}
// quitamos último carácter ','
$ipsuccess=substr($ipsuccess, 0, -1);
// Actualizamos la cola de acciones con los que no dan error
if ( $numip >> 0 ) {
$fin= date ("Y-m-d H:i:s");
$cmd->texto="UPDATE acciones SET resultado='1', estado='3', ".
" descrinotificacion='', fechahorafin='".$fin."' ".
" WHERE ip IN ($ipsuccess) AND idcomando='$idcomando' ".
" ORDER BY idaccion DESC LIMIT $numip";
$resul=$cmd->Ejecutar();
}
}
// Mostramos mensaje con resultado
if (!$resulhidra && $numip == 0){
echo '';
}
else{
echo ''.chr(13);
}
}
}
}
/*--------------------------------------------------------------------------------------------------------------------
Switch de creación o inclusión en procedimiento
--------------------------------------------------------------------------------------------------------------------*/
if($sw_mkprocedimiento=='on' || $sw_mktarea=='on'){
$resul=false;
if($idprocedimiento==0 || $sw_mktarea=='on'){ // Nuevo procedimiento o Tarea
if($sw_mktarea=='on' && empty($nombreprocedimiento)){ // Si tarea con inclusión de procedimiento...
if(!empty($nombretarea))
$nombreprocedimiento="Proc($nombretarea)"; // .. tarea nueva
else
$nombreprocedimiento="Proc($idtarea)"; // .. inclusión en tarea
}
$cmd->ParamSetValor("@descripcion",$nombreprocedimiento);
$cmd->ParamSetValor("@idcentro",$idcentro);
$cmd->texto="INSERT INTO procedimientos(descripcion,idcentro) VALUES (@descripcion,@idcentro)";
$resul=$cmd->Ejecutar();
if($resul){
if($idprocedimiento==0) // Cambia el identificador sólo si es nuevo procedimiento
$idprocedimiento=$cmd->Autonumerico();
if($sw_mktarea=='on')
$idprocedimientotarea=$cmd->Autonumerico(); // Identificador para la tarea;
}
}
if( $idprocedimiento>0 || $sw_mktarea=='on'){ // inclusión en procedimiento existente
$cmd->ParamSetValor("@idprocedimiento",$idprocedimiento);
$cmd->ParamSetValor("@idcomando",$idcomando);
$cmd->ParamSetValor("@ordprocedimiento",$ordprocedimiento);
if ($idcomando == OG_CMD_ID_SCRIPT)
$parametros=$funcion.substr(rawurldecode($atributos), 0, -2);
else
$parametros=$funcion.$atributos;
$cmd->ParamSetValor("@parametros",$parametros);
$cmd->texto="INSERT INTO procedimientos_acciones(idprocedimiento,orden,idcomando,parametros)
VALUES (@idprocedimiento,@ordprocedimiento,@idcomando,@parametros)";
$resul=$cmd->Ejecutar();
if($sw_mktarea=='on' && $idprocedimiento!=$idprocedimientotarea){ // Si es tarea se graba para su procedimiento independiente aunque los parametros sean los mismos
$cmd->ParamSetValor("@idprocedimiento",$idprocedimientotarea);
$cmd->texto="INSERT INTO procedimientos_acciones(idprocedimiento,orden,idcomando,parametros)
VALUES (@idprocedimiento,@ordprocedimiento,@idcomando,@parametros)";
$resul=$cmd->Ejecutar();
}
}
if (!$resul){
echo '';
}
else{
if($sw_mkprocedimiento=='on'){
echo ''.chr(13);
}
}
}
/*--------------------------------------------------------------------------------------------------------------------
Switch de creación o inclusión en tarea
--------------------------------------------------------------------------------------------------------------------*/
if($sw_mktarea=='on'){
$resul=false;
if($idtarea==0){ // Nueva tarea
$cmd->ParamSetValor("@descripcion",$nombretarea);
$cmd->ParamSetValor("@idcentro",$idcentro);
$cmd->ParamSetValor("@ambito",$ambito);
$cmd->ParamSetValor("@idambito",$idambito);
$cmd->texto="INSERT INTO tareas(descripcion,idcentro,ambito,idambito,restrambito)
VALUES (@descripcion,@idcentro,@ambito,@idambito,@restrambito)";
$resul=$cmd->Ejecutar();
if($resul)
$idtarea=$cmd->Autonumerico();
}
if($idtarea>0){ // inclusión en tarea existente
$cmd->ParamSetValor("@idtarea",$idtarea);
$cmd->ParamSetValor("@idprocedimiento",$idprocedimientotarea);
$cmd->ParamSetValor("@ordtarea",$ordtarea);
$cmd->texto="INSERT INTO tareas_acciones(idtarea,orden,idprocedimiento)
VALUES (@idtarea,@ordtarea,@idprocedimiento)";
$resul=$cmd->Ejecutar();
//echo $cmd->texto;
}
if (!$resul){
echo ''.chr(13);
}
else{
echo ''.chr(13);
}
}
/* Programación del comando */
if ($resul){
if($sw_ejprg=="on" ){
echo '';
}
}
?>