addParam(new xmlrpcval($username, "string")); $message->addParam(new xmlrpcval($password, "string")); $client = new xmlrpc_client($path, $hostname, $port); $response = $client->send($message); if(!$response->faultCode()){ $session = explode("", $response->serialize()); $session = explode("faultCode().'] '.$response->faultString() ); } } function atheme_command($hostname, $port, $path, $sourceip, $username, $password, $service, $command, $params=NULL){ $message = new xmlrpcmsg("atheme.login"); $message->addParam(new xmlrpcval($username, "string")); $message->addParam(new xmlrpcval($password, "string")); $client = new xmlrpc_client($path, $hostname, $port); $response = $client->send($message); $session = NULL; if(!$response->faultCode()){ $session = explode("", $response->serialize()); $session = explode("faultCode()){ case 1: $m = __('Insufficient Parameters to login'); break; case 3: $m = __("Account is not registered"); break; case 5: $m = __("Invalid Username/Password"); break; case 6: $m = __("Account is frozen"); break; default: $m = __("Could not log in"); } return array(false,$m,$response->faultCode(),$response->faultString()); } $message = new xmlrpcmsg("atheme.command"); $message->addParam(new xmlrpcval($session, "string")); $message->addParam(new xmlrpcval($username, "string")); $message->addParam(new xmlrpcval($sourceip, "string")); $message->addParam(new xmlrpcval($service, "string")); $message->addParam(new xmlrpcval($command, "string")); if($params != NULL){ foreach($params as $param){ $message->addParam(new xmlrpcval($param, "string")); } } $response = $client->send($message); if(!$response->faultCode()){ $response = explode("", $response->serialize()); $response = explode("faultString(),$response->faultCode()); } } $ircret = ""; function ircputs($line){ global $msg; global $irc; $msg .= str_replace(get_conf('rehash-pass','string'),'**********',$line); try{ error_reporting(0); $r = fputs($irc,$line); error_reporting(E_ALL); }catch(Exception $e){ $r = false; ircclose($e->code,$e->message); } return $r; } function ircclose($code=0,$message=null,$ret_type='string'){ global $msg; global $irc; global $ircret; try{ error_reporting(0); $msg .= 'QUIT :'.$message; fputs($irc,'QUIT :'.$message); error_reporting(E_ALL); }catch(Exception $e){} while(!feof($irc) && $line = fgets($irc,128)){ if(is_string($line)){ $msg .= $line; } } fclose($irc); if($ret_type == 'string'){ $ircret = '{"code":'.$code.',"message":"'.$message.'","log":'.json_encode($msg).'}'; }else{ $ircret = array( 'code'=>$code, 'message'=>$message, 'log'=>$msg ); } return $ircret; } function isval($src,$prop,$val){ return isset($src[$prop]) && $src[$prop] == $val; } function ircrehash(){ global $msg; global $irc; global $ircret; global $u; global $user; if(!isset($u)){ $u = $user; } $msg = ''; if(!$irc = fsockopen(get_conf('irc-server'),get_conf('irc-port'))){return ircclose(1,__("Could not connect."));} stream_set_timeout($irc,1) or ircclose(2,__("Could not set timeout.")); while(!feof($irc)&&!$msg = fgets($irc,128)){} if(!ircputs("NICK RehashServ\r\n")){return $ircret;} if(!ircputs("USER RehashServ omni.irc.omnimaga.org RehashServ :RehashServ\r\n")){return $ircret;} while(!feof($irc)){ $line = fgets($irc,128); if(is_string($line)){ $msg .= $line; $data = explode(' ',$line); if(isval($data,1,'433')){ return ircclose(4,__("RehashServ is already running.")); }elseif(strrpos($line,'ERROR :Closing Link:') !== false){ return ircclose(3,__("IRC Server refused the connection.")); }elseif($data[0] == 'PING'){ if(!ircputs("PONG {$data[1]}")){return $ircret;} }elseif(isval($data,1,'001')){ break; } } } if(!ircputs("IDENTIFY ".get_conf('rehash-pass','string')."\r\n")){return $ircret;} while(!feof($irc)){ $line = fgets($irc,128); if(is_string($line)){ $msg .= $line; $data = explode(' ',$line); if(isval($data,1,'433')){ return ircclose(4,__("RehashServ is already running.")); }elseif(strrpos($line,'ERROR :Closing Link:') !== false){ return ircclose(3,__("IRC Server refused the connection.")); }elseif(strrpos($line,":You are now identified for") !== false){ break; }elseif(strrpos($line,'Password incorrect.') !== false){ return ircclose(5,__("Failed to authenticate with NickServ")); } } } if(!ircputs("HS ON\r\n")){return $ircret;} while(!feof($irc)){ $line = fgets($irc,128); if(is_string($line)){ $msg .= $line; $data = explode(' ',$line); if(isval($data,1,'433')){ return ircclose(4,__("RehashServ is already running.")); }elseif(strrpos($line,'ERROR :Closing Link:') !== false){ return ircclose(3,__("IRC Server refused the connection.")); }elseif(strrpos($line,':Your vhost of') !== false && strrpos($line,'is now activated') !== false){ break; }elseif(strrpos($line,"Please contact an Operator to get a vhost assigned to this nick") !== false){ return ircclose(6,__("vhost not set.")); } } } if(!ircputs("OPER RehashServ ".get_conf('rehash-pass','string')."\r\n")){return $ircret;} if(!ircputs("REHASH -global\r\n")){return $ircret;} if(!ircputs("WALLOPS :{$u['nick']} has rehashed the server\r\n")){return $ircret;} try{ error_reporting(0); $msg .= 'QUIT :'.$message; fputs($irc,'QUIT :'.$message); error_reporting(E_ALL); }catch(Exception $e){} while(!feof($irc) && $line = fgets($irc,128)){ if(is_string($line)){ $msg .= $line; } } fclose($irc); if(strrpos($msg,':*** Notice -- Configuration loaded without any problems ..') === false){ return '{"code":6,"message":"'.__('There is an error in the config. See console for output.').'","log":'.json_encode($msg).'}'; } return '{"code":0,"message":"'.__('Rehashed. View console for output.').'","log":'.json_encode($msg).'}'; } function irccommands($commands,$runas="RehashServ",$nick='RunServ',$isreg=true){ global $msg; global $irc; global $ircret; global $u; global $user; $ircret = array( 'code'=>1 ); if(!isset($u)){ $u = $user; } $msg = ''; if(!$irc = fsockopen(get_conf('irc-server'),get_conf('irc-port'))){return ircclose(1,__("Could not connect."),'array');} stream_set_timeout($irc,1) or ircclose(2,__("Could not set timeout."),'array'); while(!feof($irc)&&!$msg = fgets($irc,128)){} if($runas == 'RehashServ'){ if(!ircputs("NICK RehashServ\r\n")){return $ircret;} if(!ircputs("USER RehashServ omni.irc.omnimaga.org RehashServ :RehashServ\r\n")){return $ircret;} }else{ if(!ircputs("NICK {$nick}\r\n")){return $ircret;} if(!ircputs("USER {$runas} omni.irc.omnimaga.org {$runas} :{$runas}\r\n")){return $ircret;} } while(!feof($irc)){ $line = fgets($irc,128); if(is_string($line)){ $msg .= $line; $data = explode(' ',$line); if(isval($data,1,'433')){ return ircclose(4,__("RunServ is already running."),'array'); }elseif(strrpos($line,'ERROR :Closing Link:') !== false){ return ircclose(3,__("IRC Server refused the connection."),'array'); }elseif($data[0] == 'PING'){ if(!ircputs("PONG {$data[1]}")){return $ircret;} }elseif(isval($data,1,'001')){ break; } } } if($runas == 'RehashServ'){ if(!ircputs("OPER RehashServ ".get_conf('rehash-pass','string')."\r\n")){return $ircret;} if(!ircputs("IDENTIFY RehashServ ".get_conf('rehash-pass','string')."\r\n")){return $ircret;} }else if($isreg){ if(!ircputs("IDENTIFY {$runas} ".$_SESSION['password']."\r\n")){return $ircret;} } while(!feof($irc)){ $line = fgets($irc,128); if(is_string($line)){ $msg .= $line; $data = explode(' ',$line); if(isval($data,1,'433')){ return ircclose(4,__("RunServ is already running."),'array'); }elseif(isval($data,1,'375')){ while(!feof($irc)){ $line = fgets($irc,128); if(is_string($line)){ $msg .= $line; $data = explode(' ',$line); if(isval($data,1,'376')){ break; } } } if(!$isreg){ break; } }elseif(strrpos($line,'ERROR :Closing Link:') !== false){ return ircclose(3,__("IRC Server refused the connection."),'array'); }elseif(strrpos($line,":You are now identified for") !== false){ break; }elseif(strrpos($line,'Password incorrect.') !== false){ return ircclose(5,__("Failed to authenticate with NickServ"),'array'); } } } if($runas == 'RehashServ'){ if(!ircputs("HS ON\r\n")){return $ircret;} while(!feof($irc)){ $line = fgets($irc,128); if(is_string($line)){ $msg .= $line; $data = explode(' ',$line); if(isval($data,1,'433')){ return ircclose(4,__("RunServ is already running."),'array'); }elseif(strrpos($line,'ERROR :Closing Link:') !== false){ return ircclose(3,__("IRC Server refused the connection."),'array'); }elseif(strrpos($line,':Your vhost of') !== false && strrpos($line,'is now activated') !== false){ break; }elseif(strrpos($line,"Please contact an Operator to get a vhost assigned to this nick") !== false){ return ircclose(6,__("vhost not set."),'array'); } } } } foreach($commands as $k => $command){ if(!ircputs($command."\r\n")){return $ircret;} time_nanosleep(0, 250000000); } try{ error_reporting(0); $msg .= 'QUIT :'.$message; fputs($irc,'QUIT :'.$message); error_reporting(E_ALL); }catch(Exception $e){} while(!feof($irc) && $line = fgets($irc,128)){ if(is_string($line)){ $msg .= $line; } } $msg .= 'QUIT :Done'; fputs($irc,'QUIT :Done'); fclose($irc); return array( 'code'=>0, 'log'=>$msg ); } ?>