public static function release_command($nick, $ircdata = array()) { $unick = $ircdata[0]; $password = $ircdata[1]; // get the parameters. if (trim($unick) == '' || trim($password) == '') { services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_INVALID_SYNTAX_RE, array('help' => 'RELEASE')); return false; } // invalid syntax if ($user = services::user_exists($unick, false, array('display', 'pass', 'salt'))) { if ($user->pass == sha1($password . $user->salt) || core::$nicks[$nick]['ircop'] && services::user_exists($nick, true, array('display', 'identified')) !== false) { if (!isset(self::$held_nicks[$unick])) { services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_NO_HOLD, array('nick' => $unick)); return false; // nickname isnt locked. } ircd::remove_client($unick, 'RELEASED by ' . $nick); core::alog(core::$config->nickserv->nick . ': RELEASE command on ' . $unick . ' used by ' . core::get_full_hostname($nick)); timer::remove(array('ns_recover', 'remove_callback', array($unick))); // if they are, remove client, respectively // unsetting data and removing them. services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_NICK_RELEASED, array('nick' => $unick)); // tell the user their nick has been released (Y) } else { services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_INVALID_PASSWORD); // password isn't correct } } else { services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_ISNT_REGISTERED, array('nick' => $unick)); return false; // doesn't even exist.. } }
public function main(&$ircdata, $startup = false) { if (ircd::on_connect(&$ircdata)) { $nick = core::get_nick(&$ircdata, core::$config->server->ircd == 'inspircd12' ? 4 : 3); // get nick if ($user = services::user_exists($nick, false, array('display', 'identified', 'validated', 'last_hostmask', 'suspended'))) { if ($user->validated == 0 && $user->suspended == 0) { ircd::on_user_logout($nick); // they shouldn't really have registered mode services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_AWAITING_VALIDATION); } elseif ($user->identified == 0 && $user->suspended == 0) { self::_registered_nick($nick, $user); } elseif ($user->identified == 1 && $user->last_hostmask == core::get_full_hostname($nick)) { ircd::on_user_login($nick); if (!$startup) { core::alog(core::$config->nickserv->nick . ': ' . core::$nicks[$nick]['ident'] . '@' . core::$nicks[$nick]['host'] . ' automatically identified for ' . $nick); } } else { self::_registered_nick($nick, $user); } } // is the user existing? } // on connect let them know that they're using // an identified nickname if (ircd::on_nick_change(&$ircdata)) { $nick = core::get_nick($ircdata, 2); $old_nick = core::$nicks[$nick]['onick']; // get the nicknames timer::remove(array('ns_identify', 'secured_callback', array($old_nick))); // remove the secured timer. if there is one ircd::on_user_logout($nick); // we remove the registered mode if ($user = services::user_exists($nick, false, array('display', 'identified', 'validated', 'last_hostmask', 'suspended'))) { if ($user->validated == 0 && $user->suspended == 0) { ircd::on_user_logout($nick); // they shouldn't really have registered mode services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_AWAITING_VALIDATION); } elseif ($user->identified == 0 && $user->suspended == 0) { self::_registered_nick($nick, $user); } elseif ($user->identified == 1 && $user->last_hostmask == core::get_full_hostname($nick)) { ircd::on_user_login($nick); core::alog(core::$config->nickserv->nick . ': ' . core::$nicks[$nick]['ident'] . '@' . core::$nicks[$nick]['host'] . ' automatically identified for ' . $nick); } else { self::_registered_nick($nick, $user); } } // is the new nick registered? let them know } if (ircd::on_quit(&$ircdata)) { $nick = core::get_nick(&$ircdata, 0); timer::remove(array('ns_identify', 'secured_callback', array($nick))); // remove the secured timer. if there is one database::update('users', array('identified' => 0, 'last_timestamp' => core::$network_time), array('display', '=', $nick)); // change nick to unidentified imo } }