--- a/alias.pm Tue Jul 31 10:46:37 2007 +0000
+++ b/alias.pm Fri Feb 21 11:56:39 2014 +0100
@@ -1,4 +1,5 @@
package alias;
+
# © Heiko Schlittermann
# $Id$
# $URL$
@@ -7,17 +8,17 @@
use warnings;
use Net::LDAP;
use Net::LDAP::Constant qw(
- LDAP_ALREADY_EXISTS
- LDAP_NO_SUCH_OBJECT
- LDAP_NO_SUCH_ATTRIBUTE
- LDAP_TYPE_OR_VALUE_EXISTS);
+ LDAP_ALREADY_EXISTS
+ LDAP_NO_SUCH_OBJECT
+ LDAP_NO_SUCH_ATTRIBUTE
+ LDAP_TYPE_OR_VALUE_EXISTS);
use Net::LDAP::Entry;
use Text::Wrap;
use password;
my $Cf;
-my ($ldap, $abase, $ubase);
+my ( $ldap, $abase, $ubase );
sub _add();
sub _list();
@@ -37,142 +38,151 @@
$Cf = shift;
require constant;
- import constant OU_ACCOUNTS => $Cf->ldap_ou_accounts;
- import constant OU_ALIASES => $Cf->ldap_ou_aliases;
- import constant OC_ALIAS => $Cf->ldap_oc_alias;
+ import constant OU_ACCOUNTS => $Cf->ldap_ou_accounts;
+ import constant OU_ALIASES => $Cf->ldap_ou_aliases;
+ import constant OC_ALIAS => $Cf->ldap_oc_alias;
import constant AT_FORWARDINGADDRESS => $Cf->ldap_at_forwardingaddress;
- import constant AT_GROUP => $Cf->ldap_at_group;
- import constant AT_PRIMARYADDRESS => $Cf->ldap_at_primaryaddress;
+ import constant AT_GROUP => $Cf->ldap_at_group;
+ import constant AT_PRIMARYADDRESS => $Cf->ldap_at_primaryaddress;
$abase = OU_ALIASES . "," . $Cf->ldap_base;
$ubase = OU_ACCOUNTS . "," . $Cf->ldap_base;
}
sub run($) {
+
# Eigentlich brauchen wir für alles ldap
$ldap = new Net::LDAP $Cf->ldap_server or die;
- my $r = $ldap->bind($Cf->ldap_bind_dn,
- password => $Cf->ldap_password || $ENV{LDAP_PASS} || password::ask("LDAP (". $Cf->ldap_bind_dn .") password: "));
+ my $r = $ldap->bind( $Cf->ldap_bind_dn,
+ password => $Cf->ldap_password
+ || $ENV{LDAP_PASS}
+ || password::ask( "LDAP (" . $Cf->ldap_bind_dn . ") password: " ) );
die $r->error, "\n" if $r->code;
-
- if ($Cf->list) { _list() }
- elsif ($Cf->add) { _add() }
- elsif ($Cf->delete) { _delete() }
- elsif ($Cf->modify) { _modify() }
- else { die "Need action (--add|--modify|--list|--delete)\n" };
+ if ( $Cf->list ) { _list() }
+ elsif ( $Cf->add ) { _add() }
+ elsif ( $Cf->delete ) { _delete() }
+ elsif ( $Cf->modify ) { _modify() }
+ else { die "Need action (--add|--modify|--list|--delete)\n" }
}
sub _add() {
-# Wenn's den Alias schon gibt, wird er nicht mehr
-# angelegt
+
+ # Wenn's den Alias schon gibt, wird er nicht mehr
+ # angelegt
die "Need alias name for creation\n" if not @ARGV;
die "Need members\n" if not defined $Cf->members;
- my $alias = shift @ARGV;
+ my $alias = shift @ARGV;
my @members = split /,/, $Cf->members;
- my $dn = "mail=$alias,$abase";
+ my $dn = "mail=$alias,$abase";
my $r;
verbose("$alias:\n");
verbose("\t$dn...");
- $r = $ldap->search(base => $abase, filter => "(mail=$alias)");
+ $r = $ldap->search( base => $abase, filter => "(mail=$alias)" );
die $r->error if $r->code;
die "Multiple entries not expected" if $r->count > 1;
-
- $r = $ldap->add($dn, attrs => [
- objectClass => OC_ALIAS,
- mail => $alias,
- (AT_FORWARDINGADDRESS) => \@members
- ]);
- if ($r->code == LDAP_ALREADY_EXISTS) { verbose "exists" }
- elsif ($r->code) { die $r->error }
- else { verbose "ok" }
+
+ $r = $ldap->add(
+ $dn,
+ attrs => [
+ objectClass => OC_ALIAS,
+ mail => $alias,
+ (AT_FORWARDINGADDRESS) => \@members
+ ]
+ );
+ if ( $r->code == LDAP_ALREADY_EXISTS ) { verbose "exists" }
+ elsif ( $r->code ) { die $r->error }
+ else { verbose "ok" }
verbose("\n");
}
sub _modify() {
-# Auch hier gehen wir davon aus, daß die dn direkt aus dem Alias-Namen folgt:
-# dn: cn=USER,...
-# Jetzt behandeln wir lediglich die Modifikation auf Basis eines
-# alias-Namens!
+
+ # Auch hier gehen wir davon aus, daß die dn direkt aus dem Alias-Namen folgt:
+ # dn: cn=USER,...
+ # Jetzt behandeln wir lediglich die Modifikation auf Basis eines
+ # alias-Namens!
my (@users) = @ARGV or die "Need alias names(s)\n";
my @members = split /,/, $Cf->members;
my @add = grep { s/^\+// } @_ = @members;
- my @del = grep { s/^-// } @_ = @members;
+ my @del = grep { s/^-// } @_ = @members;
my @set = grep { !/^[\+-]/ } @members;
-
foreach my $alias (@ARGV) {
- my $dn = "mail=$alias,$abase";
- verbose "$alias:";
+ my $dn = "mail=$alias,$abase";
+ verbose "$alias:";
- my $r = $ldap->search(base => $abase, filter => "(mail=$alias)");
- die $r->error if $r->code;
+ my $r = $ldap->search( base => $abase, filter => "(mail=$alias)" );
+ die $r->error if $r->code;
- if ($r->count == 0) {
- verbose " not found\n";
- next;
- }
+ if ( $r->count == 0 ) {
+ verbose " not found\n";
+ next;
+ }
- while (my $e = $r->shift_entry) {
+ while ( my $e = $r->shift_entry ) {
- verbose "\n\t" . $e->dn . " ";
+ verbose "\n\t" . $e->dn . " ";
- if (@set) {
- $e->replace((AT_FORWARDINGADDRESS) => \@set);
- } else {
- @add and $e->replace((AT_FORWARDINGADDRESS) => [uniq $e->get(AT_FORWARDINGADDRESS), @add]);
- @del and $e->delete((AT_FORWARDINGADDRESS) => \@del);
- }
+ if (@set) {
+ $e->replace( (AT_FORWARDINGADDRESS) => \@set );
+ } else {
+ @add
+ and $e->replace( (AT_FORWARDINGADDRESS) =>
+ [ uniq $e->get(AT_FORWARDINGADDRESS), @add ] );
+ @del and $e->delete( (AT_FORWARDINGADDRESS) => \@del );
+ }
- $e->dump if $Cf->debug;
+ $e->dump if $Cf->debug;
- my $r = $e->update($ldap);
- if ($r->code == LDAP_NO_SUCH_ATTRIBUTE) {
- verbose "no member";
- } elsif ($r->code) {
- die $r->error . "/" . $r->code;
- } else {
- verbose "ok";
- }
- }
+ my $r = $e->update($ldap);
+ if ( $r->code == LDAP_NO_SUCH_ATTRIBUTE ) {
+ verbose "no member";
+ } elsif ( $r->code ) {
+ die $r->error . "/" . $r->code;
+ } else {
+ verbose "ok";
+ }
+ }
- print "\n";
+ print "\n";
}
}
sub _delete() {
-# Wir gehen davon aus, daß es einen dn mail=ALIAS,ou=MailAliases,...
-# gibt und löschen diesen gnadenlos.
+
+ # Wir gehen davon aus, daß es einen dn mail=ALIAS,ou=MailAliases,...
+ # gibt und löschen diesen gnadenlos.
- if (!@ARGV) {
- print "User: ";
- chomp($_ = <>);
- @ARGV = ($_);
+ if ( !@ARGV ) {
+ print "User: ";
+ chomp( $_ = <> );
+ @ARGV = ($_);
}
foreach (@ARGV) {
- my $dn = "mail=$_,$abase";
+ my $dn = "mail=$_,$abase";
- verbose("$_:\n");
- verbose("\tdeleting $dn...");
- my $r = $ldap->delete($dn);
+ verbose("$_:\n");
+ verbose("\tdeleting $dn...");
+ my $r = $ldap->delete($dn);
- if ($r->code == LDAP_NO_SUCH_OBJECT) {
- verbose("doesn't exist");
- } elsif ($r->code == 0) {
- verbose("ok");
- } else {
- die $r->error;
- }
-
- verbose("\n");
+ if ( $r->code == LDAP_NO_SUCH_OBJECT ) {
+ verbose("doesn't exist");
+ } elsif ( $r->code == 0 ) {
+ verbose("ok");
+ } else {
+ die $r->error;
+ }
+
+ verbose("\n");
}
}
@@ -180,45 +190,45 @@
sub _list() {
my $filter;
@ARGV = ("*") unless @ARGV;
- $filter = "(|" . join("", map { "(mail=$_)" } @ARGV) . ")";
+ $filter = "(|" . join( "", map { "(mail=$_)" } @ARGV ) . ")";
my $r = $ldap->search(
- filter => $filter,
- base => $abase,
- attrs => [qw/mail/, AT_FORWARDINGADDRESS],
+ filter => $filter,
+ base => $abase,
+ attrs => [ qw/mail/, AT_FORWARDINGADDRESS ],
);
die $r->error if $r->code;
$Text::Wrap::columns = columns() || 80;
- while (my $e = $r->shift_entry) {
- my $mail = $e->get("mail");
+ while ( my $e = $r->shift_entry ) {
+ my $mail = $e->get("mail");
- print wrap("", "\t", $e->get_value("mail")
- . ": "
- . join(", ", $e->get(AT_FORWARDINGADDRESS))
- . "\n");
-
+ print wrap( "", "\t",
+ $e->get_value("mail") . ": "
+ . join( ", ", $e->get(AT_FORWARDINGADDRESS) )
+ . "\n" );
+
}
- $filter = "(|" . join("", map { "(".AT_GROUP."=$_)" } @ARGV) . ")";
+ $filter = "(|" . join( "", map { "(" . AT_GROUP . "=$_)" } @ARGV ) . ")";
$r = $ldap->search(
- filter => $filter,
- base => $ubase,
- attrs => [AT_GROUP, AT_PRIMARYADDRESS]
+ filter => $filter,
+ base => $ubase,
+ attrs => [ AT_GROUP, AT_PRIMARYADDRESS ]
);
die $r->error if $r->code;
my %group;
- while (my $e = $r->shift_entry) {
- my $mail = $e->get_value(AT_PRIMARYADDRESS);
- foreach my $g ($e->get_value(AT_GROUP)) {
- push @{$group{$g}}, $mail;
- }
+ while ( my $e = $r->shift_entry ) {
+ my $mail = $e->get_value(AT_PRIMARYADDRESS);
+ foreach my $g ( $e->get_value(AT_GROUP) ) {
+ push @{ $group{$g} }, $mail;
+ }
}
- foreach my $g (keys %group) {
- print wrap("", "\t", "$g⇒ " . join(", ", @{$group{$g}}) . "\n");
+ foreach my $g ( keys %group ) {
+ print wrap( "", "\t", "$g⇒ " . join( ", ", @{ $group{$g} } ) . "\n" );
}
}
@@ -238,4 +248,5 @@
}
1;
+
# vim:sts=4 sw=4 aw ai sm: