quota update script

Sebastian Hagedorn Hagedorn at uni-koeln.de
Wed Nov 16 10:11:44 EST 2005


Hi,

--On 16. November 2005 10:39:37 -0300 Bartosz Jozwiak <bartek at cq-link.sr> 
wrote:

> I am running Cyrus IMAP for sometime right now.
> We have around 2000 users. I will like to upgrade
> quota for each user.
> Does anybody has a script which could do it fast?

I use the attached script.

Cheers, Sebastian Hagedorn
-- 
Sebastian Hagedorn - RZKR-R1 (Gebäude 52), Zimmer 18
Zentrum für angewandte Informatik - Universitätsweiter Service RRZK
Universität zu Köln / Cologne University - Tel. +49-221-478-5587
Skype: shagedorn
-------------- next part --------------
#!/usr/bin/perl

#
# HG, 2005-04-13
# Set the quota for all users in specified file
# File format: username	quota
#
# Usage: massquota.pl filename

use strict;
use warnings;

my $adminuser = "cyrus";
my $server = "cyrus.rrz.uni-koeln.de" ;

use Cyrus::IMAP::Admin;
#use Getopt::Long;

my $user = "";
my $quota = -1;
my $result;

#my $result = GetOptions('user=s' => \$user, 'quota=i' => \$quota);

die "Usage: $0 filename" if @ARGV!=1;

open IN, $ARGV[0] or die "Can't open file '$ARGV[0]': $!";

my $imapcon = Cyrus::IMAP::Admin->new($server) || die "Unable to connect to $server";

unless ($imapcon) {
    die "Error creating IMAP connection object\n" ;
}

$result = $imapcon->authenticate(-user => $adminuser, -mechanism => "DIGEST-MD5") ;

# print "Authenticate-Result: $result\n";
die "Authentication failed" unless $result;

if ($imapcon->error) {
    die $imapcon->error ;
}

while (<IN>) {
	chomp;
	next if /^$/;
	next if /^#/;
	($user, $quota) = split;
	unless (defined $user and defined $quota) {
		print STDERR "Illegal file format: $_\n";
		next;
	}
	if ($quota < 0 or $quota > 2000000) {
		print STDERR "$user can't get quota $quota. Quota has to be >= 0 and <= 2000000\n";
		next;
	}
	my @boxes = $imapcon->listmailbox("user/$user");

	if ($imapcon->error) {
        	print STDERR "Error: $user, ", $imapcon->error,"\n";
		next;
	}

	if (@boxes == 0) {
		print STDERR "Mailbox does not exist: user/$user\n";
		next;
	}

	my %current_quota=$imapcon->listquota("user/$user");
	if ($imapcon->error) {
		print STDERR "Warning: $user apparently has no quota root yet - it will be created\n";
	}

	$result = $imapcon->setquota("user/$user", "STORAGE", $quota);
	if ($imapcon->error) {
		print STDERR "Error: $user, ", $imapcon->error,"\n";
		next;
	}

	%current_quota=$imapcon->listquota("user/$user");
	if ($imapcon->error) {
        	print STDERR "Error: $user, ", $imapcon->error,"\n";
        	next;
	}

	print "Quota for user/$user has been set to $current_quota{'STORAGE'}[1]\n";
}

$imapcon->send('', '', 'LOGOUT');



More information about the Info-cyrus mailing list