source: admin/WebConsole/comandos/gestores/gestor_Comandos.php @ f3499a3

918-git-images-111dconfigure-oglivegit-imageslgromero-new-oglivemainmaint-cronmount-efivarfsmultivmmultivm-ogboot-installerogClonningEngineogboot-installer-jenkinsoglive-ipv6test-python-scriptsticket-301ticket-50ticket-50-oldticket-577ticket-585ticket-611ticket-612ticket-693ticket-700ubu24tplunification2use-local-agent-oglivevarios-instalacion opengnsys-1.1.1b
Last change on this file since f3499a3 was ab84872, checked in by OpenGnSys Support Team <soporte-og@…>, 5 years ago

#915 Fix EliminarImagenCache? command on the WebConsole?

Carmelo reports that EliminarImagenCache? (Delete image from cache)
command does not work. The image remains in place after the execution
of the command.

This command is actually a wrapper of the command EjecutarScript?
(POST /shell) with a different ID. Since gestor_Comandos.php did not
expect a different ID, EliminarImagenCache? did not work.

This commit changes the behaviour of gestor_Comandos.php to handle
the EliminarImagenCache? ID and treat it as EjecutarScript?.

  • Property mode set to 100644
File size: 16.4 KB
Line 
1<?php
2// *************************************************************************************************************************************************
3// Aplicación WEB: ogAdmWebCon
4// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla
5// Fecha Creación: Año 2009-2010
6// Fecha Última modificación: Agosto-2010
7// Nombre del fichero: gestor_Comandos.php
8// Descripción :
9//              Gestor de todos los comandos
10// *************************************************************************************************************************************************
11include_once("../../includes/ctrlacc.php");
12include_once("../../includes/restfunctions.php");
13include_once("../../clases/AdoPhp.php");
14include_once("../../includes/constantes.php");
15include_once("../../includes/comunes.php");
16include_once("../../includes/CreaComando.php");
17include_once("../../includes/RecopilaIpesMacs.php");
18//________________________________________________________________________________________________________
19include_once("../includes/capturaacciones.php");
20//________________________________________________________________________________________________________
21
22define('OG_CMD_ID_WAKEUP', 1);
23define('OG_CMD_ID_POWEROFF', 2);
24define('OG_CMD_ID_RESTORE_IMAGE', 3);
25define('OG_CMD_ID_CREATE_IMAGE', 4);
26define('OG_CMD_ID_REBOOT', 5);
27define('OG_CMD_ID_HARDWARE', 6);
28define('OG_CMD_ID_SOFTWARE', 7);
29define("OG_CMD_ID_SCRIPT", 8);
30define('OG_CMD_ID_SESSION', 9);
31define('OG_CMD_ID_SETUP', 10);
32define('OG_CMD_ID_DELETE_CACHED_IMAGE', 11);
33define('OG_CMD_ID_CREATE_BASIC_IMAGE', 12);
34define('OG_CMD_ID_RESTORE_BASIC_IMAGE', 13);
35define('OG_CMD_ID_CREATE_INCREMENTAL_IMAGE', 14);
36define('OG_CMD_ID_RESTORE_INCREMENTAL_IMAGE', 15);
37define('OG_CMD_ID_SENDMESSAGE', 16);
38
39function run_command($idcomando, $cadenaip, $cadenamac, $atributos) {
40        global $cmd;
41        switch ($idcomando) {
42                case OG_CMD_ID_WAKEUP:
43                        include("wakeonlan_repo.php");
44                        break;
45                case OG_CMD_ID_SETUP:
46                        setup($cadenaip, $atributos);
47                        break;
48                case OG_CMD_ID_SESSION:
49                        session($cadenaip, $atributos);
50                        break;
51                case OG_CMD_ID_CREATE_BASIC_IMAGE:
52                        create_basic_image($cadenaip, $atributos);
53                        break;
54                case OG_CMD_ID_CREATE_INCREMENTAL_IMAGE:
55                        create_incremental_image($cadenaip, $atributos);
56                        break;
57                case OG_CMD_ID_RESTORE_BASIC_IMAGE:
58                        restore_basic_image($cadenaip, $atributos);
59                        break;
60                case OG_CMD_ID_RESTORE_INCREMENTAL_IMAGE:
61                        restore_incremental_image($cadenaip, $atributos);
62                        break;
63                case OG_CMD_ID_POWEROFF:
64                        poweroff($cadenaip);
65                        break;
66                case OG_CMD_ID_CREATE_IMAGE:
67                        create_image($cadenaip, $atributos);
68                        break;
69                case OG_CMD_ID_RESTORE_IMAGE:
70                        restore_image($cadenaip, $atributos);
71                        break;
72                case OG_CMD_ID_REBOOT:
73                        reboot($cadenaip);
74                        break;
75                case OG_CMD_ID_HARDWARE:
76                        hardware($cadenaip);
77                        break;
78                case OG_CMD_ID_SOFTWARE:
79                        software($cadenaip, $atributos);
80                        break;
81                case OG_CMD_ID_SCRIPT:
82                case OG_CMD_ID_DELETE_CACHED_IMAGE:
83                        shell(3, $cadenaip, $atributos);
84                        break;
85        }
86}
87
88// Recoge parametros de seguimiento
89$sw_ejya="";
90$sw_seguimiento="";
91$sw_ejprg="";
92$sw_mkprocedimiento="";
93$nombreprocedimiento="";
94$idprocedimiento="";
95$ordprocedimiento=0;
96$avisoRepo=false;
97
98$sw_mktarea="";
99$nombretarea="";
100$idtarea="";
101$ordtarea=0;
102
103if (isset($_POST["sw_ejya"]))   $sw_ejya=$_POST["sw_ejya"];
104if (isset($_POST["sw_seguimiento"]))    $sw_seguimiento=$_POST["sw_seguimiento"];
105
106if (isset($_POST["sw_ejprg"]))  $sw_ejprg=$_POST["sw_ejprg"];
107
108if (isset($_POST["sw_mkprocedimiento"]))        $sw_mkprocedimiento=$_POST["sw_mkprocedimiento"];
109if (isset($_POST["nombreprocedimiento"]))       $nombreprocedimiento=$_POST["nombreprocedimiento"];
110if (isset($_POST["idprocedimiento"]))   $idprocedimiento=$_POST["idprocedimiento"];
111if (isset($_POST["ordprocedimiento"]))  $ordprocedimiento=$_POST["ordprocedimiento"];
112if(empty($ordprocedimiento)) $ordprocedimiento=0;
113
114if (isset($_POST["sw_mktarea"]))        $sw_mktarea=$_POST["sw_mktarea"];
115if (isset($_POST["nombretarea"]))       $nombretarea=$_POST["nombretarea"];
116if (isset($_POST["idtarea"]))   $idtarea=$_POST["idtarea"];
117if (isset($_POST["ordtarea"]))  $ordtarea=$_POST["ordtarea"];
118if(empty($ordtarea)) $ordtarea=0;
119
120//__________________________________________________________________
121$cmd=CreaComando($cadenaconexion);
122if (!$cmd)
123        Header('Location: '.$pagerror.'?herror=2'); // Error de conexión con servidor B.D.
124//__________________________________________________________________
125$funcion="nfn=".$funcion.chr(13); // Nombre de la función que procesa el comando y el script que lo implementa
126$aplicacion=""; // Ámbito de aplicación (cadena de ipes separadas por ";" y de identificadores de ordenadores por ","
127$acciones=""; // Cadena de identificadores de acciones separadas por ";" para seguimiento
128
129
130
131$atributos=str_replace('@',chr(13),$atributos); // Reemplaza caracters
132$atributos=str_replace('#',chr(10),$atributos);
133$atributos=str_replace('$',chr(9),$atributos);
134
135
136//__________________________________________________________________
137?>
138<HTML>
139<HEAD>
140        <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
141        <SCRIPT language="javascript" src="../jscripts/comunescomandos.js"></SCRIPT>
142        <?php echo '<SCRIPT language="javascript" src="../../idiomas/javascripts/'.$idioma.'/comandos/comunescomandos_'.$idioma.'.js"></SCRIPT>'?>
143
144<?php
145//##################################################################
146/* Recopila identificadore ,ipes y macs para envío de comandos */
147$cadenaid="";
148$cadenaip="";
149$cadenamac="";
150$cadenaoga="";  // Clave de acceso a la API REST de OGAgent.
151
152if(!empty($filtro)){ // Ambito restringido a un subconjuto de ordenadores
153        if(substr($filtro,strlen($cadenaid)-1,1)==";") // Si el último caracter es una coma
154                $filtro=substr($filtro,0,strlen($filtro)-1); // Quita la coma
155}
156RecopilaIpesMacs($cmd,$ambito,$idambito,$filtro);
157
158/*--------------------------------------------------------------------------------------------------------------------
159        Creación de parametros para sentencias SQL
160--------------------------------------------------------------------------------------------------------------------*/
161$cmd->CreaParametro("@tipoaccion",0,1);
162$cmd->CreaParametro("@idtipoaccion",0,1);
163$cmd->CreaParametro("@descriaccion","",0);
164$cmd->CreaParametro("@idordenador",0,1);
165$cmd->CreaParametro("@ip","",0);
166$cmd->CreaParametro("@sesion",0,1);
167$cmd->CreaParametro("@parametros","",0);
168$cmd->CreaParametro("@fechahorareg","",0);
169$cmd->CreaParametro("@estado",0,1);
170$cmd->CreaParametro("@resultado",0,1);
171$cmd->CreaParametro("@idcentro",0,1);
172$cmd->CreaParametro("@idprocedimiento",0,1);
173$cmd->CreaParametro("@descripcion","",0);
174$cmd->CreaParametro("@idcomando",0,1);
175$cmd->CreaParametro("@idtarea",0,1);
176$cmd->CreaParametro("@ambito",0,1);
177$cmd->CreaParametro("@idambito",0,1);
178$cmd->CreaParametro("@restrambito","",0);
179$cmd->CreaParametro("@ordprocedimiento",0,1);
180$cmd->CreaParametro("@ordtarea",0,1);
181
182if($ambito==0){ // Ambito restringido a un subconjuto de ordenadores con formato (idordenador1,idordenador2,etc)
183        $cmd->ParamSetValor("@restrambito",$idambito);
184        $idambito=0;
185}
186if(!empty($filtro)){ // Ambito restringido a un subconjuto de ordenadores
187        $cmd->ParamSetValor("@restrambito",$filtro);
188}
189$resul=true;
190
191/*--------------------------------------------------------------------------------------------------------------------
192        Switch de ejecución inmediata y de seguimiento
193--------------------------------------------------------------------------------------------------------------------*/
194if($sw_ejya=='on' || $sw_ejprg=="on" ){
195        $parametros=$funcion.$atributos;
196        $aplicacion=chr(13)."ido=".$cadenaid.chr(13)."mac=".$cadenamac.chr(13)."iph=".$cadenaip.chr(13);
197        if($sw_seguimiento==1 || $sw_ejprg=="on"){ // Switch de ejecución con seguimiento o comando programado
198                $sesion=time();
199                $cmd->ParamSetValor("@tipoaccion",$EJECUCION_COMANDO);
200                $cmd->ParamSetValor("@idtipoaccion",$idcomando);
201                $cmd->ParamSetValor("@descriaccion",$descricomando);
202                $cmd->ParamSetValor("@sesion",$sesion);
203                $cmd->ParamSetValor("@idcomando",$idcomando);
204                $cmd->ParamSetValor("@parametros",$parametros);
205                $cmd->ParamSetValor("@fechahorareg",date("y/m/d H:i:s"));
206                if($sw_ejprg=="on") // Switch de ejecución con programación (se para el comando tarea para lanzarlo posteriormente)
207                        $cmd->ParamSetValor("@estado",$ACCION_DETENIDA);
208                else
209                        $cmd->ParamSetValor("@estado",$ACCION_INICIADA);
210                $cmd->ParamSetValor("@resultado",$ACCION_SINRESULTADO);
211                $cmd->ParamSetValor("@ambito",$ambito);
212                $cmd->ParamSetValor("@idambito",$idambito);                     
213                $cmd->ParamSetValor("@idcentro",$idcentro);
214                $auxID=explode(",",$cadenaid);
215                $auxIP=explode(";",$cadenaip);
216                for ($i=0;$i<sizeof($auxID);$i++){
217                        $cmd->ParamSetValor("@idordenador",$auxID[$i]);
218                        $cmd->ParamSetValor("@ip",$auxIP[$i]);
219                        $cmd->texto="INSERT INTO acciones (idordenador,tipoaccion,idtipoaccion,descriaccion,ip,
220                                                sesion,idcomando,parametros,fechahorareg,estado,resultado,ambito,idambito,restrambito,idcentro)
221                                                VALUES (@idordenador,@tipoaccion,@idtipoaccion,@descriaccion,@ip,
222                                                @sesion,@idcomando,@parametros,@fechahorareg,@estado,@resultado,@ambito,@idambito,@restrambito,@idcentro)";
223                        $resul=$cmd->Ejecutar();
224                }
225                $acciones=chr(13)."ids=".$sesion.chr(13); // Para seguimiento
226        }
227        if (!$resul){
228                echo '<SCRIPT language="javascript">';
229                echo 'resultado_comando(7);'.chr(13);
230                echo '</SCRIPT>';
231        }
232        else{
233                $ValorParametros=extrae_parametros($parametros,chr(13),'=');
234                $script=@urldecode($ValorParametros["scp"]);
235                if($sw_ejya=='on'){
236                        if (($sw_seguimiento == 1 || $sw_ejprg == "on") &&
237                            $idcomando != OG_CMD_ID_WAKEUP)
238                                run_schedule($cadenaip);
239                        else
240                                run_command($idcomando, $cadenaip, $cadenamac, $atributos);
241
242                        // En agente nuevo devuelvo siempre correcto
243                        $resulhidra = 1;
244
245                        // Comprobamos si el comando es soportado por el nuevo OGAgent
246                        $numip=0;
247                        $ogAgentNuevo = false;
248                        switch ($idcomando) {
249                                case OG_CMD_ID_POWEROFF:
250                                        // Apagar
251                                        $urlcomando = 'poweroff';
252                                        $ogAgentNuevo = true;
253                                        break;
254                                case OG_CMD_ID_REBOOT:
255                                        // Reiniciar
256                                        $urlcomando = 'reboot';
257                                        $ogAgentNuevo = true;
258                                        break;
259                                case OG_CMD_ID_SCRIPT:
260                                        // Ejecutar script
261                                        $urlcomando = 'script';
262                                        $ogAgentNuevo = true;
263                                        $client = (isset ($_POST['modoejecucion']) && $_POST['modoejecucion'] != '' ) ? $_POST['modoejecucion'] : 'true';
264                                        $paramsPost = '{"script":"'.base64_encode($script).'","client":"'.$client.'"}';
265                                        break;
266                                case OG_CMD_ID_SENDMESSAGE:
267                                        // Enviar mensaje
268                                        $urlcomando = 'popup';
269                                        $ogAgentNuevo = true;
270                                        $paramsPost = '{"title":"'.$_POST['titulo'].'","message":"'.$_POST['mensaje'].'"}';
271                                        break;
272                        }
273
274                        // Se envía acción al nuevo ogAgent
275                        if ( $ogAgentNuevo ) {
276                                // Send REST requests to new OGAgent clients.
277                                $urls = array();
278                                $ipsuccess = '';
279                                // Compose array of REST URLs.
280                                $auxIp = explode(';', $cadenaip);
281                                $auxKey = explode(";", $cadenaoga);
282                                $i = 0;
283                                foreach ($auxIp as $ip) {
284                                        $urls[$ip]['url'] = "https://$ip:8000/opengnsys/$urlcomando";
285                                        if (isset($auxKey[$i]))  $urls[$ip]['header'] = Array("Authorization: ".$auxKey[$i]);
286                                        if (isset($paramsPost))  $urls[$ip]['post'] = $paramsPost;
287                                        $i++;
288                                }
289                                // Launch concurrent requests.
290                                $responses = multiRequest($urls);
291                                // Process responses array (IP as array index).
292                                foreach ($responses as $ip => $resp) {
293                                        // Check if response code is OK (200).
294                                        if ($resp['code'] == 200) {
295                                                $ipsuccess .= "'".$ip."',";
296                                                $numip++;
297                                        }
298                                }
299                                // quitamos último carácter ','
300                                $ipsuccess=substr($ipsuccess, 0, -1);
301
302                                // Actualizamos la cola de acciones con los que no dan error
303                                if ( $numip >> 0 ) {
304                                        $fin= date ("Y-m-d H:i:s");
305                                        $cmd->texto="UPDATE acciones SET resultado='1', estado='3', ".
306                                                " descrinotificacion='', fechahorafin='".$fin."' ".
307                                                " WHERE ip IN  ($ipsuccess) AND idcomando='$idcomando' ".
308                                                " ORDER BY idaccion DESC LIMIT $numip";
309                                        $resul=$cmd->Ejecutar();
310                                }
311                        }
312                        // Mostramos mensaje con resultado
313                        if (!$resulhidra && $numip == 0){
314                                echo '<SCRIPT language="javascript">';
315                                echo 'resultado_comando(1);'.chr(13);
316                                echo '</SCRIPT>';
317                        }
318                        else{
319                                echo '<SCRIPT language="javascript">'.chr(13);
320                                if ($avisoRepo) {
321                                        echo 'resultado_comando(17);'.chr(13);
322                                } else {
323                                        echo 'resultado_comando(2);'.chr(13);
324                                }
325                                echo '</SCRIPT>'.chr(13);
326                        }               
327                }
328        }
329}
330/*--------------------------------------------------------------------------------------------------------------------
331        Switch de creación o inclusión en procedimiento
332--------------------------------------------------------------------------------------------------------------------*/
333if($sw_mkprocedimiento=='on' || $sw_mktarea=='on'){
334        $resul=false;
335        if($idprocedimiento==0 || $sw_mktarea=='on'){ // Nuevo procedimiento o Tarea
336                if($sw_mktarea=='on' && empty($nombreprocedimiento)){ // Si tarea con inclusión de procedimiento...
337                        if(!empty($nombretarea))
338                                $nombreprocedimiento="Proc($nombretarea)";      // .. tarea nueva
339                        else
340                                $nombreprocedimiento="Proc($idtarea)";  // .. inclusión en tarea
341                }
342                $cmd->ParamSetValor("@descripcion",$nombreprocedimiento);
343                $cmd->ParamSetValor("@idcentro",$idcentro);
344                $cmd->texto="INSERT INTO procedimientos(descripcion,idcentro) VALUES (@descripcion,@idcentro)";
345                $resul=$cmd->Ejecutar();
346                if($resul){
347                        if($idprocedimiento==0) // Cambia el identificador sólo si es nuevo procedimiento
348                                $idprocedimiento=$cmd->Autonumerico();
349                        if($sw_mktarea=='on')
350                                $idprocedimientotarea=$cmd->Autonumerico(); // Identificador para la tarea;     
351                }
352        }
353        if( $idprocedimiento>0 || $sw_mktarea=='on'){ //  inclusión en procedimiento existente
354                $cmd->ParamSetValor("@idprocedimiento",$idprocedimiento);
355                $cmd->ParamSetValor("@idcomando",$idcomando);
356                $cmd->ParamSetValor("@ordprocedimiento",$ordprocedimiento);
357                $parametros=$funcion.$atributos;
358                $cmd->ParamSetValor("@parametros",$parametros);
359                $cmd->texto="INSERT INTO procedimientos_acciones(idprocedimiento,orden,idcomando,parametros)
360                                    VALUES (@idprocedimiento,@ordprocedimiento,@idcomando,@parametros)";
361                $resul=$cmd->Ejecutar();
362                if($sw_mktarea=='on' && $idprocedimiento!=$idprocedimientotarea){ // Si es tarea se graba para su procedimiento independiente aunque los parametros sean los mismos
363                        $cmd->ParamSetValor("@idprocedimiento",$idprocedimientotarea);         
364                        $cmd->texto="INSERT INTO procedimientos_acciones(idprocedimiento,orden,idcomando,parametros)
365                                            VALUES (@idprocedimiento,@ordprocedimiento,@idcomando,@parametros)";
366                        $resul=$cmd->Ejecutar();
367                }
368        }
369        if (!$resul){
370                echo '<SCRIPT language="javascript">';
371                echo 'resultado_comando(3);'.chr(13);
372                echo '</SCRIPT>';
373        }
374        else{
375                if($sw_mkprocedimiento=='on'){
376                        echo '<SCRIPT language="javascript">'.chr(13);
377                        echo 'resultado_comando(4);'.chr(13);
378                        echo '</SCRIPT>'.chr(13);
379                }
380        }
381}       
382/*--------------------------------------------------------------------------------------------------------------------
383        Switch de creación o inclusión en tarea
384--------------------------------------------------------------------------------------------------------------------*/
385if($sw_mktarea=='on'){
386        $resul=false;
387        if($idtarea==0){ // Nueva tarea
388                $cmd->ParamSetValor("@descripcion",$nombretarea);
389                $cmd->ParamSetValor("@idcentro",$idcentro);
390                $cmd->ParamSetValor("@ambito",$ambito);
391                $cmd->ParamSetValor("@idambito",$idambito);             
392                $cmd->texto="INSERT INTO tareas(descripcion,idcentro,ambito,idambito,restrambito)
393                                        VALUES (@descripcion,@idcentro,@ambito,@idambito,@restrambito)";
394                $resul=$cmd->Ejecutar();
395                if($resul)
396                        $idtarea=$cmd->Autonumerico();
397        }
398        if($idtarea>0){ //  inclusión en tarea existente
399                $cmd->ParamSetValor("@idtarea",$idtarea);
400                $cmd->ParamSetValor("@idprocedimiento",$idprocedimientotarea);
401                $cmd->ParamSetValor("@ordtarea",$ordtarea);
402                $cmd->texto="INSERT INTO tareas_acciones(idtarea,orden,idprocedimiento)
403                                                        VALUES (@idtarea,@ordtarea,@idprocedimiento)";
404                $resul=$cmd->Ejecutar();
405                //echo $cmd->texto;
406        }
407        if (!$resul){
408                echo '<SCRIPT language="javascript">'.chr(13);
409                echo 'resultado_comando(5);'.chr(13);
410                echo '</SCRIPT>'.chr(13);
411        }
412        else{
413                echo '<SCRIPT language="javascript">'.chr(13);
414                echo 'resultado_comando(6);'.chr(13);
415                echo '</SCRIPT>'.chr(13);
416        }
417}
418/* Programación del comando */
419if ($resul){
420        if($sw_ejprg=="on" ){   
421                echo '<SCRIPT language="javascript">'.chr(13);
422                echo 'var whref="../../varios/programaciones.php?idcomando='.$idcomando.'";'.chr(13);
423                echo 'whref+="&sesion='.$sesion.'&descripcioncomando='.UrlEncode($descricomando).'&tipoaccion='.$EJECUCION_COMANDO.'";'.chr(13);
424                echo 'location.href=whref;';
425                echo '</SCRIPT>';
426        }
427}
428?>
429</HEAD>
430<BODY>
431</BODY>
432</HTML>
433
Note: See TracBrowser for help on using the repository browser.