source: LATMOS-Accounts/lib/LATMOS/Accounts/Bases/Mail.pm @ 305

Last change on this file since 305 was 305, checked in by nanardon, 15 years ago
  • add mail aliases/revaliases support
File size: 3.1 KB
Line 
1package LATMOS::Accounts::Bases::Mail;
2
3use 5.010000;
4use strict;
5use warnings;
6
7use base qw(LATMOS::Accounts::Bases);
8use LATMOS::Accounts::Log;
9
10our $VERSION = (q$Rev: 641 $ =~ /^Rev: (\d+) /)[0];
11
12sub new {
13    my ($class, %options) = @_;
14
15    my $base = {
16        file => {
17            aliases => $options{aliases} || '/etc/aliases',
18            revaliases => $options{revaliases} || '/etc/revaliases',
19        },
20        aliases => {},
21        revaliases => {},
22    };
23
24    bless($base, $class);
25}
26
27sub load {
28    my ($self) = @_;
29
30    # warning, comment will be strip !
31    if (open(my $handle, '<', $self->{file}{aliases})) {
32        while (my $line = <$handle>) {
33            chomp($line);
34            $line =~ s/^#.*//;
35            my ($name, $forward) = $line =~ /^([^:]+):(.*)$/;
36            $self->{aliases}{$name} = $forward;
37        }
38        close($handle);
39    } else {
40        $self->log(LA_ERR, "Cannot open file '%s` for reading",
41            $self->{file}{aliases});
42        return;
43    }
44
45    if (open(my $handle, '<', $self->{file}{revaliases})) { 
46        while (my $line = <$handle>) {
47            chomp($line);
48            $line =~ s/^#.*//;
49            my ($name, $as) = $line =~ /^([^:]+):(.*)$/;
50            $self->{revaliases}{$name} = $as;
51        }
52        close($handle);
53    } else {
54        $self->log(LA_ERR, "Cannot open file '%s` for reading",
55            $self->{file}{revaliases});
56        return;
57    }
58
59    return 1;
60}
61
62sub _commit {
63    my ($self) = @_;
64
65    if (open(my $handle, '>', $self->{file}{aliases})) {
66        foreach (sort keys %{ $self->{aliases} }) {
67            printf $handle "%s:%s\n", $_, $self->{aliases}{$_};
68        }
69        close($handle);
70        $self->log(LA_INFO, $self->{file}{aliases} . " saved");
71    } else {
72        $self->log(LA_ERR, "Cannot open file '%s` for writing",
73            $self->{file}{aliases});
74        return;
75    }
76
77    if (open(my $handle, '>', $self->{file}{revaliases})) {
78        foreach (sort keys %{ $self->{revaliases} }) {
79            printf $handle "%s:%s\n", $_, $self->{revaliases}{$_};
80        }
81        close($handle);
82        $self->log(LA_INFO, $self->{file}{revaliases} . " saved");
83    } else {
84        $self->log(LA_ERR, "Cannot open file '%s` for writing",
85            $self->{file}{revaliases});
86        return;
87    }
88
89}
90
91sub list_objects {
92    my ($self, $type) = @_;
93
94    $type = lc($type);
95    lc($type) =~ /^(aliases|revaliases)$/ or return;
96
97    return sort keys %{ $self->{$type} };
98}
99
100sub create_object {
101    my ($self, $otype, $id, %data) = @_;
102
103    $otype = lc($otype);
104    if ($self->{$otype}{$id}) {
105        return;
106    } elsif ($data{forward} && $otype =~ /^aliases$/i) {
107        $self->{$otype}{$id} = $data{forward};
108        return 1;
109    } elsif ($data{as} && $otype =~ /^revaliases$/i) {
110        $self->{$otype}{$id} = $data{as};
111        return 1;
112    } else {
113        return;
114    }
115}
116
117sub delete_object {
118    my ($self, $otype, $id) = @_;
119   
120    $otype = lc($otype);
121    $otype =~ /^(aliases|revaliases)$/ or return;
122    if ($self->{$otype}{$id}) {
123        delete($self->{$otype}{$id});
124        return 1;
125    } else {
126        return;
127    }
128}
129
1301;
Note: See TracBrowser for help on using the repository browser.