alias.pm
changeset 3 1f0b4cd76cc8
parent 0 2a5f2464f8c6
child 48 36aca6fb0ab8
equal deleted inserted replaced
2:a8bab3a3ec80 3:1f0b4cd76cc8
    15 use Text::Wrap;
    15 use Text::Wrap;
    16 
    16 
    17 use password;
    17 use password;
    18 
    18 
    19 my $Cf;
    19 my $Cf;
    20 my ($ldap, $abase);
    20 my ($ldap, $abase, $ubase);
    21 
    21 
    22 sub _add();
    22 sub _add();
    23 sub _list();
    23 sub _list();
    24 sub _delete();
    24 sub _delete();
    25 sub uniq(@);
    25 sub uniq(@);
    26 sub verbose(@);
    26 sub verbose(@);
    27 sub columns();
    27 sub columns();
    28 
    28 
       
    29 sub OU_ACCOUNTS();
    29 sub OU_ALIASES();
    30 sub OU_ALIASES();
    30 sub OC_ALIAS();
    31 sub OC_ALIAS();
    31 sub AT_FORWARDINGADDRESS();
    32 sub AT_FORWARDINGADDRESS();
       
    33 sub AT_GROUP();
       
    34 sub AT_PRIMARYADDRESS();
    32 
    35 
    33 sub import(@) {
    36 sub import(@) {
    34     $Cf = shift;
    37     $Cf = shift;
    35 
    38 
    36     require constant;
    39     require constant;
       
    40     import constant OU_ACCOUNTS => $Cf->ldap_ou_accounts;
    37     import constant OU_ALIASES => $Cf->ldap_ou_aliases;
    41     import constant OU_ALIASES => $Cf->ldap_ou_aliases;
    38     import constant OC_ALIAS => $Cf->ldap_oc_alias;
    42     import constant OC_ALIAS => $Cf->ldap_oc_alias;
    39     import constant AT_FORWARDINGADDRESS => $Cf->ldap_at_forwardingaddress;
    43     import constant AT_FORWARDINGADDRESS => $Cf->ldap_at_forwardingaddress;
       
    44     import constant AT_GROUP => $Cf->ldap_at_group;
       
    45     import constant AT_PRIMARYADDRESS => $Cf->ldap_at_primaryaddress;
    40 
    46 
    41     $abase = OU_ALIASES . "," . $Cf->ldap_base;
    47     $abase = OU_ALIASES . "," . $Cf->ldap_base;
       
    48     $ubase = OU_ACCOUNTS . "," . $Cf->ldap_base;
    42 }
    49 }
    43 
    50 
    44 sub run($) {
    51 sub run($) {
    45     # Eigentlich brauchen wir für alles ldap
    52     # Eigentlich brauchen wir für alles ldap
    46     $ldap = new Net::LDAP $Cf->ldap_server or die;
    53     $ldap = new Net::LDAP $Cf->ldap_server or die;
   192 	    . ": "
   199 	    . ": "
   193 	    . join(", ", $e->get(AT_FORWARDINGADDRESS))
   200 	    . join(", ", $e->get(AT_FORWARDINGADDRESS))
   194 	    . "\n");
   201 	    . "\n");
   195 	    
   202 	    
   196     }
   203     }
       
   204 
       
   205     $filter = "(|" . join("", map { "(".AT_GROUP."=$_)" } @ARGV) . ")";
       
   206     $r = $ldap->search(
       
   207 	filter => $filter,
       
   208 	base => $ubase,
       
   209 	attrs => [AT_GROUP, AT_PRIMARYADDRESS]
       
   210     );
       
   211     die $r->error if $r->code;
       
   212 
       
   213     my %group;
       
   214     while (my $e = $r->shift_entry) {
       
   215 	my $mail = $e->get_value(AT_PRIMARYADDRESS);
       
   216 	foreach my $g ($e->get_value(AT_GROUP)) {
       
   217 	    push @{$group{$g}}, $mail;
       
   218 	}
       
   219     }
       
   220     foreach my $g (keys %group) {
       
   221 	print wrap("", "\t", "$g⇒ " . join(", ", @{$group{$g}}) . "\n");
       
   222     }
   197 }
   223 }
   198 
   224 
   199 sub verbose(@) {
   225 sub verbose(@) {
   200     printf STDERR @_;
   226     printf STDERR @_;
   201 }
   227 }