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

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-instalacionwebconsole3
Last change on this file since 1985678 was 9f1274e, checked in by ramon <ramongomez@…>, 7 years ago

#804: Sustituir funciones para compatibilidad con PHP 7 (split por explode y ereg... por preg_...).

git-svn-id: https://opengnsys.es/svn/branches/version1.1@5619 a21b9725-9963-47de-94b9-378ad31fedc9

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