account.pm
branchfoerste
changeset 69 430b3ecdbbf8
parent 68 e8285fb4fb63
child 70 66832ec269ad
--- a/account.pm	Tue Dec 13 21:50:43 2011 +0100
+++ b/account.pm	Tue Dec 13 22:47:23 2011 +0100
@@ -327,10 +327,14 @@
         if ( defined $Cf->aclgroups ) {
 
             my $ag = $Cf->aclgroups;
+            my $lag = $e->get_value(AT_ACLGROUPS); 
+            # groups should be supplied with leading '$' for consistency with
+            # dovecots imap acl, but should not be saved in ldap with it!
+            $ag =~ s/(^|,[+-]?)\K\$//g;
 
             if ( $ag =~ /(^|,\s*)[+-]/ ) {
                 my %x;
-                @x{ split /,/, $e->get_value(AT_ACLGROUPS) } = ();
+                @x{ split /,/, $lag } = ();
                 for ( split /,/, $ag ) {
                     if (s/^-//) {
                         delete $x{$_};
@@ -347,7 +351,7 @@
             if ($ag) {
                 $e->replace( (AT_ACLGROUPS) => $ag );
             } else {
-                $e->delete( AT_ACLGROUPS );
+                $e->delete( AT_ACLGROUPS ) if $lag;
             }
             $modified++;
         }
@@ -476,7 +480,8 @@
         my $ml   = join( ", ", $e->get_value(AT_ADDRESS) ) || "";           # ??
         my $mg   = join( ", ", $e->get_value(AT_GROUP) ) || "";             # ??
         my $forw = join( ", ", $e->get_value(AT_FORWARDINGADDRESS) ) || "";
-        my $ag   = $e->get_value(AT_ACLGROUPS);
+        my $ag   = join ',$', split /,/, $e->get_value(AT_ACLGROUPS);
+        $ag = "\$$ag" if $ag;
 
         print "$uid: $cn <$mr>";