source: admin/WebConsole/comandos/gestores/gestor_Comandos.php @ 062ea34

918-git-images-111dconfigfileconfigure-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
Last change on this file since 062ea34 was a82d414, checked in by Ramón M. Gómez <ramongomez@…>, 5 years ago

#915 #932: Fix lost variable in Wake-On-Lan function.

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