blob: d7fc7955cac78498cadd4869d28388ea0c095c1b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
package Spline::Srs;
use strict;
use warnings;
use Mail::SRS;
use Spline::Netstring;
use base 'Exporter';
our @EXPORT = qw( );
our @EXPORT_OK = qw(
check_exclude
srs_forward
srs_reverse
);
our $alias = 'spline.inf.fu-berlin.de';
our @excludes = (
'spline.inf.fu-berlin.de',
'.spline.inf.fu-berlin.de',
'spline.de',
'.spline.de',
);
my $srs = new Mail::SRS(
Secret => "",
MaxAge => 49,
HashLength => 5,
HashMin => 4,
);
sub check_exclude($@) {
my $addr = shift;
my @excludes = @_;
my @parts = split(/@/, $addr);
my $domain = $parts[-1];
for my $exclude (@excludes) {
if ($exclude =~ m/^\./) {
return 1 if $domain =~ m/\Q$exclude\E$/;
}
else {
return 1 if $domain eq $exclude;
}
}
return 0;
}
sub srs_forward($) {
my $addr = shift;
return if check_exclude($addr, @excludes);
return $srs->forward($addr, $alias);
}
sub srs_reverse($) {
my $addr = shift;
return $srs->reverse($addr);
}
sub handle($$) {
my ($map, $key) = @_;
my $result;
if ($map eq 'forward') {
$result = srs_forward($key);
}
elsif ($map eq 'reverse') {
$result = srs_reverse($key);
}
else {
return "PERM Invalid request";
}
if (!defined($result)) {
return 'NOTFOUND ';
}
else {
return 'OK ' . $result;
}
}
1;
# vim: set et ts=4:
|