#!/usr/bin/perl -w # # This will create a new mailbox and set a quota on the new user. Just be # sure that you installed the Cyrus::IMAP perl module. If you did # 'make all && make install' or installed Cyrus using the FreeBSD ports you # don't have to do anything at all. # # Change the params below to match your mailserver settins, and # your good to go! # # Author: # minor changes by Enrique use Cyrus::IMAP::Admin; # # CONFIGURATION PARAMS # my $cyrus_server = "localhost"; my $cyrus_user = "{{ cyrus_admin_user }}"; # MdP d�fini dans le LDAP my $cyrus_pass = "{{ cyrus_admin_pass }}"; # 10 Megs my $quota_size = "10240"; my $mechanism = "login"; # # EOC # if (!$ARGV[0]) { die "Usage: $0 [user to add] \n"; } else { $newuser = "$ARGV[0]" } sub createMailbox { my ($user, $subfolder) = @_; my $cyrus = Cyrus::IMAP::Admin->new($cyrus_server); $cyrus->authenticate($mechanism,'imap','',$cyrus_user,'0','10000',$cyrus_pass); if ($subfolder eq "INBOX") { $mailbox = "user/". $user; } else { $mailbox = "user/". $user .".". $subfolder; } $cyrus->create($mailbox); if ($cyrus->error) { print STDERR "Error: ", $mailbox," ", $cyrus->error, "\n"; } else { print "Created Mailbox: $mailbox \n"; } } sub setQuota { my ($user) = @_; my $cyrus = Cyrus::IMAP::Admin->new($cyrus_server); $cyrus->authenticate($mechanism,'imap','',$cyrus_user,'0','10000',$cyrus_pass); $mailbox = "user.". $user; $cyrus->setquota($mailbox,"STORAGE",$quota_size); if ($cyrus->error) { print STDERR "Error: ", $mailbox," ", $cyrus->error, "\n"; } else { print "Setting Quota: $mailbox at $quota_size \n"; } } sub subscribe { my ($user, $pwd, $subfolder) = @_; my $cyrus = Cyrus::IMAP::Admin->new($cyrus_server); print $user." - ".$pwd." - ".$subfolder."\n"; $cyrus->authenticate($mechanism,'imap','',$user,'0','10000',$pwd); $cyrus->subscribe("INBOX.".$subfolder); if ($cyrus->error) { print STDERR "Error: ", $subfolder," ", $cyrus->error, "\n"; } else { print "Subscription $subfolder OK ! \n"; } } sub setacl{ my ($user,$admin) = @_; $cyrus = Cyrus::IMAP::Admin->new($cyrus_server); $cyrus->authenticate($mechanism,'imap','',$cyrus_user,'0','10000',$cyrus_pass); $cyrus->setacl("user.".$user, $admin => "all"); if ($cyrus->error) { print STDERR "Error: ", $user," ", $cyrus->error, "\n"; } else { print "Set ACL at $admin for $user OK!\n"; } } #print "Adding User: ", $newuser, "\n"; # Cr�ation des bo�tes aux lettre createMailbox($newuser,'INBOX'); createMailbox($newuser,'Sent'); createMailbox($newuser,'Drafts'); createMailbox($newuser,'Trash'); createMailbox($newuser,'Junk'); # Quota setQuota($newuser); # Attribution des droits setacl($newuser,'cyrus'); setacl($newuser,'mailadmin'); # Subscription aux dossiers subscribe($newuser,'{{ plain_ldap_passwd }}','Sent'); subscribe($newuser,'{{ plain_ldap_passwd }}','Drafts'); subscribe($newuser,'{{ plain_ldap_passwd }}','Trash'); subscribe($newuser,'{{ plain_ldap_passwd }}','Junk'); # This portion below will set a password for the user you wanted to # add. The default password that it sets is "123{USERNAME}123". You # can obviously change it afterwards by doing "saslpasswd2 {USERNAME}" #system "echo 123". $newuser ."123 > .saslpass.tmp"; #system "saslpasswd2 -p $newuser < .saslpass.tmp"; #print "Generated Password: Completed \n"; #unlink(".saslpass.tmp");