Add support for pseudonyms on minilists

This commit is contained in:
Daniel Berteaud 2014-01-08 19:05:08 +01:00
parent 754accf27d
commit ef53acbdd2
1 changed files with 52 additions and 0 deletions

View File

@ -0,0 +1,52 @@
{
$OUT = '';
my (undef, undef, $uid, $gid, undef, undef, undef, $dir, undef)
= getpwnam("alias");
unless (defined $uid && defined $gid && defined $dir)
{
my $msg =
"Failed to obtain user details for \'alias\' "
. "while processing pseudonym assignments.";
warn "$msg\n";
$OUT = $msg;
return;
}
my $alias_assign = "alias:${uid}:${gid}:${dir}";
undef $uid;
undef $gid;
undef $dir;
use esmith::AccountsDB;
my $adb = esmith::AccountsDB->open_ro();
foreach $pseudonym ( $adb->pseudonyms )
{
next if ( $pseudonym->key =~ /@/ ); # user@domain goes in virtualdomains
my $account = $pseudonym->prop('Account');
unless ($account)
{
my $key = $pseudonym->key;
warn "pseudonym $key has no account property";
next;
}
$account = $adb->get($pseudonym->prop('Account'));
unless ($account)
{
my $key = $pseudonym->key;
warn "pseudonym $key points to account which does not exist";
next;
}
if ($account->prop('type') eq "minilist")
{
$OUT .= "=" . $pseudonym->key . ":${alias_assign}:-:" . $account->key . ":\n";
$OUT .= "+" . $pseudonym->key . "-:${alias_assign}:-:" . $account->key . ":\n";
next;
}
}
chomp($OUT);
$OUT = "=alias:${alias_assign}:::" unless $OUT;
}