Magellan Linux

Diff of /alx-src/branches/alx-web-060/include/common-functions.php

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 2021 by niro, Mon May 9 21:58:32 2011 UTC revision 2594 by niro, Tue Jul 5 15:35:52 2011 UTC
# Line 1  Line 1 
1  <?  <?
2   include("config.inc.php");  include('config.inc.php');
3    include('ppping.inc.php');
4    
5   function exec_on_client($serial, $ip, $cmd, $verbose=0)  function sshdo($cmd, $ip, $user="root")
6   {  {
7   global $sshcmd;   global $privkey_file;
8     global $pubkey_file;
9    
10   $pubkey = mysql_query('select public_key from ssh_auth_clients where serial='.$serial.'');   if (!function_exists("ssh2_connect")) die("sshdo(): function ssh2_connect doesn't exist. You must install the ssh2 module from pecl library!");
  while ($row = mysql_fetch_row ($pubkey))  
  {  
  # write known hosts  
  $hostfile = fopen ($home."/.ssh/known_hosts","w");  
  fwrite($hostfile,$ip." ".$row[0],strlen($row[0])+strlen($ip)+1);  
  fclose($hostfile);  
11    
12   # exec the cmd   if(!($con = ssh2_connect($ip, "22")))
13   echo "sshcmd: '".$sshcmd."'<br>";   {
14     echo "sshdo(): failure, could not connect\n";
15     }
16     else
17     {
18     if(!ssh2_auth_pubkey_file($con, $user, $pubkey_file, $privkey_file))
19     {
20     echo "sshdo(): failure, could not login\n";
21     }
22     else
23     {
24     //echo "logged in\n";
25    
26   exec($sshcmd.' '.$ip.' "source /etc/profile;'.$cmd.'"', $outarr, $err);   if(!($stream = ssh2_exec($con, "source /etc/profile; ".$cmd."; echo '__RETVAL__:'$?")))
  if ($verbose == 1)  
27   {   {
28   echo "err: '".$err."'<br>";   echo "sshdo(): failure, could not execute command '".$cmd."'\n";
29   foreach( $outarr as $i )   }
30     else
31     {
32     // collect stream data
33     stream_set_blocking($stream, true);
34     $data = "";
35     while ($buf =  fread($stream,4096))
36   {   {
37   echo "outarr: '".$i."'<br>";   $data .= $buf;
38     //echo "buf=" .$buf."\n";
39   }   }
40     fclose($stream);
41     # get the last element of data as retval
42     $retval = explode('__RETVAL__:', trim($data));
43   }   }
   
  if($err != 0) echo '<script language="JavaScript">alert(\'Cmd "'.$cmd.'" *failed* on client #'.$serial.' .\')</script>';  
  else if ($verbose == 1) echo '<script language="JavaScript">alert(\'Cmd "'.$cmd.'" successfully run on client #'.$serial.' .\')</script>';  
   
  return $outarr;  
44   }   }
45   }   }
46    
47     // return an array -> 0=retval, 1=data
48     return array($retval[1], $retval[0]);
49    }
50    
51    function ssh_editvar($var, $value, $file)
52    {
53     global $ip;
54    
55     // sed cmd: ssh -l root 10.11.12.13 'sed -i -e "s|^\(VAR=\).*|\1\"VALUE\"| FILE'
56     sshdo('if [[ ! -z $(grep "^'.$var.'=" '.$file.') ]]; then sed -i -e "s|^\('.$var.'=\).*|\1\"'.$value.'\"|" '.$file.' ;else echo "'.$var.'=\"'.$value.'\"" >> '.$file.'; fi', $ip);
57    }
58    
59    function online($ip)
60    {
61     $ping = new PPPing();
62     $ping->hostname = $ip;
63     $ping->timeout = "0.3";
64     $result = $ping->Ping();
65    
66     if($result<0)
67     {
68     echo "error: ".$ping->strError($result);
69     $retval=1;
70     }
71     else
72     {
73     echo $result." ms";
74     $retval=0;
75     }
76     return $retval;
77    }
78  ?>  ?>

Legend:
Removed from v.2021  
changed lines
  Added in v.2594