]> jfr.im git - irc/SurrealServices/srsv.git/commitdiff
allow admins/opers to add services-rank, but only
authortabris <redacted>
Wed, 3 Apr 2013 17:03:44 +0000 (17:03 +0000)
committertabris <redacted>
Wed, 3 Apr 2013 17:03:44 +0000 (17:03 +0000)
if the rank is less than their own.

git-svn-id: http://svn.tabris.net/repos/srsv@3606 70d4eda1-72e9-0310-a436-91e5bd24443c

branches/0.4.3/modules/serviceslibs/adminserv.pm

index 9d8a0516f8bfecb54911e1f7ca1346be19f004dc..600595e4ce2f01b4d00767eaa76b32041b9597f0 100644 (file)
@@ -171,39 +171,36 @@ sub dispatch($$$) {
 }
 
 sub as_svs_add($$$) {
-       my ($user, $nick, $level) = @_;
+       my ($user, $target_nick, $target_level) = @_;
        my $src = get_user_nick($user);
+       my $target_nickreg = nickserv::get_root_nick($target_nick);
+       my ($src_level, $user_oper) = get_best_svs_level($user);
 
-       my ($root, $oper) = validate_chg($user, $nick);
-       return unless $oper;
-
-       if(get_svs_level($root) >= S_ROOT) {
+       if($target_level >= $src_level) {
                notice($user, $err_deny);
                return;
        }
 
-       $create_svsop->execute($root);
-       $set_svs_level->execute($level, $oper, $root);
-       
-       notice($user, "\002$nick\002 is now a \002Services $levels[$level]\002.");
-       wlog($asnick, LOG_INFO(), "$src added $root as a Services $levels[$level].");
+       $create_svsop->execute($target_nickreg);
+       $set_svs_level->execute($target_level, $user_oper, $target_nickreg);
+
+       notice($user, "\002$target_nick\002 is now a \002Services $levels[$target_level]\002.");
+       wlog($asnick, LOG_INFO(), "$src added $target_nickreg as a Services $levels[$target_level].");
 }
 
 sub as_svs_del($$) {
-       my ($user, $nick) = @_;
+       my ($user, $target_nick) = @_;
        my $src = get_user_nick($user);
+       my $target_nickreg = nickserv::get_root_nick($target_nick);
 
-       my ($root, $oper) = validate_chg($user, $nick);
-       return unless $oper;
-
-       if(get_svs_level($root) >= S_ROOT) {
+       if(get_svs_level($target_nickreg) >= get_svs_level($src)) {
                notice($user, $err_deny);
                return;
        }
-       
-       $delete_svsop->execute($root);
-       notice($user, "\002$nick\002 has been stripped of services rank.");
-       wlog($asnick, LOG_INFO(), "$src stripped $root of services rank.")
+
+       $delete_svsop->execute($target_nickreg);
+       notice($user, "\002$target_nickreg\002 has been stripped of services rank.");
+       wlog($asnick, LOG_INFO(), "$src stripped $target_nickreg of services rank.")
 }
 
 sub as_svs_list($$) {
@@ -245,21 +242,21 @@ sub as_staff($) {
 ### DATABASE UTILITY FUNCTIONS ###
 
 sub validate_chg($$) {
-       my ($user, $nick) = @_;
-       my ($oper);
+       my ($user, $target_nick) = @_;
+       my ($user_oper);
 
-       unless($oper = is_svsop($user, S_ROOT)) {
+       unless($user_oper = is_svsop($user, S_ROOT)) {
                notice($user, $err_deny);
                return undef;
        }
 
-       my $root = nickserv::get_root_nick($nick);
-       unless($root) {
-               notice($user, "The nick \002$nick\002 is not registered.");
+       my $target_nickreg = nickserv::get_root_nick($target_nick);
+       unless($target_nickreg) {
+               notice($user, "The nick \002$target_nick\002 is not registered.");
                return undef;
        }
 
-       return ($root, $oper);
+       return ($target_nickreg, $user_oper);
 }
 
 sub can_do($$) {