From: Michael Andreen Date: Sat, 16 May 2009 15:20:12 +0000 (+0200) Subject: Converted the chattr command X-Git-Url: https://ruin.nu/git/?p=NDIRC.git;a=commitdiff_plain;h=6856d1e1ff5ced860d14929828d6662141342c47 Converted the chattr command --- diff --git a/Commands/Usermgm.pm b/Commands/Usermgm.pm index 5ec8a27..4ea75c1 100644 --- a/Commands/Usermgm.pm +++ b/Commands/Usermgm.pm @@ -86,4 +86,46 @@ UPDATE users SET hostmask = ?, password = '' WHERE uid = ? $f->finish; } +sub chattr + : Help(syntax: .chattr username [-]flags | % can be used for wildcards \%arro% will match barrow, if a - is given then flags will be removed, otherwise added) + : ACL(irc_chattr) +{ + my ($self,$c,$msg) = @_; + + my ($nick, $flags) = $msg =~ /^(\S+) ((\+|-)?\w+)$/ or die 'ARGS'; + my $dbh = $c->model; + + my $f = $dbh->prepare(q{SELECT uid,username FROM users WHERE username ILIKE ?}); + $f->execute($nick); + my $user = $f->fetchrow_hashref; + if ($f->rows == 1){ + my $update; + if ($flags =~ /^(-)/){ + $update = $dbh->prepare(q{ +DELETE FROM groupmembers WHERE uid = $1 AND + gid IN (SELECT gid FROM groups WHERE flag = ANY($2)) + }); + }else{ + $update = $dbh->prepare(q{ +INSERT INTO groupmembers (uid,gid) (SELECT $1,gid FROM groups + WHERE flag = ANY($2) AND gid NOT IN (SELECT gid FROM groupmembers WHERE uid = $1)) + }); + } + my @flags = split /\W*/,$flags; + $update->execute($user->{uid},\@flags); + $update = $dbh->prepare(q{ +SELECT concat(flag) +FROM (SELECT uid,flag FROM groupmembers NATURAL JOIN groups ORDER BY uid,flag ) g +WHERE uid = ? + }); + $flags = $dbh->selectrow_array($update,undef,$user->{uid}); + $c->reply("Flags for $user->{username} are now: $flags"); + }elsif ($f->rows == 0){ + $c->reply("No hit, maybe spelling mistake, or add % as wildcard"); + }else{ + $c->reply("More than 1 user matched, please refine the search"); + } + $f->finish; +} + 1; diff --git a/Usermgm.pm b/Usermgm.pm index e82bcd4..3c1c9bb 100644 --- a/Usermgm.pm +++ b/Usermgm.pm @@ -286,45 +286,6 @@ sub addPoints { } } -sub chattrG { - my ($msg, $command) = @_; - - my ($nick, $flags); - if(defined $msg && $msg =~ /^(\S+) ((\+|-)?\w+)$/){ - $nick = $1; - $flags = $2; - }else{ - $ND::server->command("notice $ND::nick syntax: .chattr nick [-]flags | % can be used for wildcards \%arro% will match barrow, if a - is given then flags will be removed, otherwise added"); - return; - } - if (hc()){# || ($flags =~ /^(\+|-)?x$/ && $ND::address eq 'Assassin.users.netgamers.org')){ - my $f = $ND::DBH->prepare("SELECT uid,username FROM users WHERE username ILIKE ?"); - $f->execute($nick); - my @user = $f->fetchrow(); - if ($f->rows == 1){ - my $add = 1; - $flags =~ /^(-)/; - my $update; - if ($1 eq "-"){ - $update = $ND::DBH->prepare("DELETE FROM groupmembers WHERE uid = ? AND gid = (SELECT gid FROM groups WHERE flag = ?)"); - }else{ - $update = $ND::DBH->prepare("INSERT INTO groupmembers (uid,gid) VALUES(?,(SELECT gid FROM groups WHERE flag = ?))"); - } - while ($flags =~ m/(\w)/g){ - $update->execute($user[0],$1); - } - $update = $ND::DBH->prepare("SELECT concat(flag) FROM (SELECT uid,flag FROM groupmembers NATURAL JOIN groups ORDER BY uid,flag ) g WHERE uid = ? "); - my @flags = $ND::DBH->selectrow_array($update,undef,$user[0]); - $ND::server->command("msg $ND::target Global flags for $user[1] are now: $flags[0]"); - }elsif ($f->rows == 0){ - $ND::server->command("msg $ND::target No hit, maybe spelling mistake, or add % as wildcard"); - }else{ - $ND::server->command("msg $ND::target More than 1 user matched, please refine the search"); - } - $f->finish; - } -} - sub setHost { my ($msg, $command) = @_; diff --git a/database/roles.sql b/database/roles.sql index b91fa58..c000716 100644 --- a/database/roles.sql +++ b/database/roles.sql @@ -11,6 +11,7 @@ INSERT INTO roles VALUES('irc_points_others'); INSERT INTO roles VALUES('irc_sms'); INSERT INTO roles VALUES('irc_adduser'); INSERT INTO roles VALUES('irc_deactivateuser'); +INSERT INTO roles VALUES('irc_chattr'); INSERT INTO group_roles (gid,role) VALUES(1,'irc_p_nick'); INSERT INTO group_roles (gid,role) VALUES(1,'irc_p_intel'); @@ -23,6 +24,7 @@ INSERT INTO group_roles (gid,role) VALUES(1,'irc_points_others'); INSERT INTO group_roles (gid,role) VALUES(1,'irc_sms'); INSERT INTO group_roles (gid,role) VALUES(1,'irc_adduser'); INSERT INTO group_roles (gid,role) VALUES(1,'irc_deactivateuser'); +INSERT INTO group_roles (gid,role) VALUES(1,'irc_chattr'); INSERT INTO group_roles (gid,role) VALUES(2,'irc_gs'); INSERT INTO group_roles (gid,role) VALUES(2,'irc_scan'); @@ -37,6 +39,7 @@ INSERT INTO group_roles (gid,role) VALUES(3,'irc_points_others'); INSERT INTO group_roles (gid,role) VALUES(3,'irc_sms'); INSERT INTO group_roles (gid,role) VALUES(3,'irc_adduser'); INSERT INTO group_roles (gid,role) VALUES(3,'irc_deactivateuser'); +INSERT INTO group_roles (gid,role) VALUES(3,'irc_chattr'); INSERT INTO group_roles (gid,role) VALUES(4,'irc_points_others');