diff options
| author | ailin-nemui | 2016-12-07 14:19:36 +0100 | 
|---|---|---|
| committer | GitHub | 2016-12-07 14:19:36 +0100 | 
| commit | 9835e818c8d83cf9f8ff97d182d29fd3838ae771 (patch) | |
| tree | f3c53be6c29adbd3ad932b372f483febfbcf2bf0 | |
| parent | cbed72aee90e754a19b6308248f51914cbbff024 (diff) | |
| parent | 994d8ebc5abda99d3d672c4219ae42f083fa9c46 (diff) | |
| download | scripts.irssi.org-9835e818c8d83cf9f8ff97d182d29fd3838ae771.tar.bz2 | |
Merge pull request #326 from IsaacG/add_ident.pl
Add ident.pl - automatically identify from file-based pws
| -rw-r--r-- | scripts/ident.pl | 68 | 
1 files changed, 68 insertions, 0 deletions
| diff --git a/scripts/ident.pl b/scripts/ident.pl new file mode 100644 index 0000000..a4854f2 --- /dev/null +++ b/scripts/ident.pl @@ -0,0 +1,68 @@ +#!/usr/bin/perl -w + +use strict; +use Irssi; +use POSIX; + +use vars qw($VERSION %IRSSI); + +$VERSION = "1.0"; +%IRSSI = ( +    authors     => 'Isaac Good', +    contact     => "irssi\@isaacgood.com; irc.freenode.net/yitz", +    name        => 'ident', +    description => 'Ident to NickServs', +    name        => "ident", +    description => "Automatically IDENTIFY when prompted", +    license     => 'MIT', +); + + +my %pw; + + +sub LoadPasswords { +    # Load the passwords from file. +    delete @pw{keys %pw}; +    my $filename = Irssi::get_irssi_dir() . '/passwords'; +    my $FH; +    unless(open $FH, "<", $filename) +    { +        print "Can not open $filename"; +        return 0; +    } +    while (my $line = <$FH>) +    { +        chomp $line; +        next unless ($line); +        my ($tag, $password) = split(/  */, $line, 2); +        next unless ($tag and $password); +        $pw{$tag} = $password; +    } +    return 1; +} + + +sub notice { +    my ($server, $data, $nick, $host) = @_; +    my ($channel, $msg) = split(/ :/, $data, 2); +    my $l = 0; + +    # Test the notice. Must be from nickserv and be asking you to identify. +    return undef unless (lc($nick) eq 'nickserv'); +    return undef unless (lc($msg) =~ /msg nickserv identify/); +    # Check it's a direct message and we have a password for this network. +    return undef unless (lc($channel) eq lc($server->{'nick'})); +    return undef unless ($pw{$server->{'chatnet'}}); + +    my $pw = $pw{$server->{'chatnet'}}; +    # Use the /quote nickserv approach to reduce chance of leaking the password to a bad actor, ie someone pretending to be nickserv. +    $server->command("^quote nickserv identify $pw"); + +    return undef; +} + + +if (LoadPasswords()) { +    Irssi::signal_add('event notice', \¬ice); +} | 
