OVH Cloud OVH Cloud

Qui utilise Cyrus?

2 réponses
Avatar
Mahakashyapa
Bonjour à tous!

J'utilise Cyrus dont l'authentification des utilisateurs passe par un
annuaire LDAP

Pour créer un compte de messagerie il me faut donc créer le compte dans
l'annuaire mais en plus de cela créer la boîte aux lettres Cyrus

Sachant que j'ai un bon nombre de boîtes à créer je cherche à automatiser la
création de la boîte

J'ai vu que cyradm supporter des scripts tcl, ce que j'ai chercher mais je
n'ai rien trouvé de postérieur à 1996.

Voilà, donc de votre côté comment faites-vous?

Merci d'avance!

Maha

2 réponses

Avatar
ZeGrunt
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Bonjour,

Mahakashyapa wrote:
Sachant que j'ai un bon nombre de boîtes à créer je cherche à
automatiser la

création de la boîte

J'ai vu que cyradm supporter des scripts tcl, ce que j'ai chercher mais je
n'ai rien trouvé de postérieur à 1996.

Voilà, donc de votre côté comment faites-vous?


Et bien, je me suis écrit un petit script Perl pour créer deux fichiers
(ldif et tcl) respectivement utilisés pour ajouter dans l'annuaire et
créer la boîte aux lettres dans cyrus (au passage en donnant des droits
à l'admin). Le script a été écrit pour ajouter un ou deux utilisateurs
de temps en temps mais il est facilement adaptable (du moins je le crois
;) ) et surtout très améliorable. Il nécessite trois fichiers de base
spécifiés au début du script et donnés également ci-après.

J'ai failli oublier, c'est fait pour marcher sous Linux et la commande
mkpasswd est nécessaire.

- -- >8 -- >8 -- generate_users.pl -- >8 -- >8 -- >8
#!/usr/bin/perl -w
# generate_users.pl

$ldap_nextuid_file = "LDAP/nextUidNumber.txt";
$ldap_output_file = "LDAP/add_users.ldif";
$imap_output_file = "IMAP/add_user_mailboxes.tcl";

# default UID number
$next_uid = 1000;

# Grab the next free UID number (kept in file)
if (open(LDAP_UID_INPUT, "<$ldap_nextuid_file")) {
$next_uid = <LDAP_UID_INPUT>;
close(LDAP_UID_INPUT);
}

# Check if we're already generated users and
# adapt the UID number accordingly
if (open(INPUT, "<$ldap_output_file")) {
while (<INPUT>) {
chomp;
if (/^uidNumber: ([0-9]{4})$/) {
$next_uid = $1 if $1 > $next_uid;
}
}
close(INPUT);
}
$next_uid++;

open(LDAP_OUTPUT, ">>$ldap_output_file") || die "Can't append to
$ldap_output_file : $!";
open(IMAP_OUTPUT, ">>$imap_output_file") || die "Can't append to
$imap_output_file : $!";

$end = 0;
while (!$end) {
print "Enter the user's first name: ";
$first_name = <STDIN>;
print "Enter the user's last name: ";
$last_name = <STDIN>;
print "Enter the user's ";
$password = `mkpasswd`;
chomp($first_name);
chomp($last_name);
chomp($password);


$first_name =~ tr/[A-Z]/[a-z]/;
$last_name =~ tr/[A-Z]/[a-z]/;
$mail_accept = $first_name . "." . $last_name;

if ($first_name =~ /^([a-z])(.*)/) {
$uid = $1 . $last_name;
$first_name = $1;
$first_name =~ tr/[a-z]/[A-Z]/;
$first_name .= $2;
}

if ($last_name =~ /^([a-z])(.*)/) {
$last_name = $1;
$last_name =~ tr/[a-z]/[A-Z]/;
$last_name .= $2;
}

print << "EOT";
# $uid, People, somewhere, com
dn: uid=$uid, ou=People, dc=somewhere, dc=com
objectClass: top
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
objectClass: mailAccount
cn: $first_name $last_name
givenName: $first_name
gecos: $first_name $last_name
gidNumber: 100
homeDirectory: /home/$uid
loginShell: /bin/bash
mail: $
mailAccept: $mail_accept
mailDrop: $uid
sn: $last_name
uid: $uid
uidNumber: $next_uid
userPassword: {CRYPT}$password
EOT

$response = "";
while (!($response =~ /^[yn]$/i)) {
print "Is this correct (Y/n) ?";
$response = <STDIN>;
$response = "y" if $response =~ /^$/i;
}

if ($response =~ /^y$/) {
# LDAP stuff
print LDAP_OUTPUT << "EOT";
# $uid, People, somewhere, com
dn: uid=$uid, ou=People, dc=somewhere, dc=com
objectClass: top
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
objectClass: mailAccount
cn: $first_name $last_name
givenName: $first_name
gecos: $first_name $last_name
gidNumber: 100
homeDirectory: /home/$uid
loginShell: /bin/bash
mail: $
mailAccept: $mail_accept
mailDrop: $uid
sn: $last_name
uid: $uid
uidNumber: $next_uid
userPassword: {CRYPT}$password

EOT
print "$first_name $last_name has been added to
$ldap_output_filen";

# IMAP stuff
print IMAP_OUTPUT "cyr_conn createmailbox user.$uidn";
print IMAP_OUTPUT "cyr_conn setaclmailbox user.$uid admin alln";
print "${uid}'s mailbox has been added to $imap_output_filen";

# UID stuff
open(LDAP_UID_INPUT, ">$ldap_nextuid_file") || die "Can't create
$ldap_nextuid_file (uid was $next_uid) : $!";
print LDAP_UID_INPUT $next_uid;
close(LDAP_UID_INPUT);
$next_uid++;
}
$response = "";
while (!($response =~ /^[yn]$/i)) {
print "Do you want to continue (Y/n) ?";
$response = <STDIN>;
$response = "y" if $response =~ /^$/i;
}
$end = 1 if $response =~ /^n$/;
}

close(LDAP_OUTPUT);
close(IMAP_OUTPUT);

print "Bye.n";
#EOF
- -- 8< -- 8< -- generate_users.pl -- 8< -- 8< -- 8<

- -- >8 -- >8 -- LDAP/nextUidNumber.txt -- >8 -- >8 -- >8
# nextUid = 1000
- -- 8< -- 8< -- LDAP/nextUidNumber.txt -- 8< -- 8< -- 8<

- -- >8 -- >8 -- LDAP/add_users.ldif -- >8 -- >8 -- >8
# add_users.ldif
- -- 8< -- 8< -- LDAP/add_users.ldif -- 8< -- 8< -- 8<

- -- >8 -- >8 -- IMAP/add_user_mailboxes.tcl -- >8 -- >8 -- >8
cyradm connect cyr_conn localhost
eval cyr_conn authenticate -pwcommand {{
set hostname %h
if {[string length %u] == 0} {
puts -nonewline "$hostname userid: "
flush stdout
gets stdin userid
} else {set userid %u}
puts -nonewline "$hostname password: "
flush stdout
exec stty -echo >@stdout
gets stdin passwd
exec stty echo >@stdout
puts ""
list $userid $passwd
} }

- -- 8< -- 8< -- IMAP/add_user_mailboxes.tcl -- 8< -- 8< -- 8<

Merci d'avance!


Pas de quoi, j'espère que ça servira. ;)

A+

ZeGrunt.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.1 (MingW32)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFAyawynLjyGhlEgFIRAvvvAJ4hzYH4ZQRre9yBYYzB/Y0OyGnZqwCfRIXk
O/fpLLG+bw7+pNo0mA4dDfw =geHU
-----END PGP SIGNATURE-----

Avatar
Manuel Guesdon
Salut,

On Fri, 11 Jun 2004 08:38:13 +0200, Mahakashyapa wrote:
[..]
Sachant que j'ai un bon nombre de boîtes à créer je cherche à automatiser la
création de la boîte

J'ai vu que cyradm supporter des scripts tcl, ce que j'ai chercher mais je
n'ai rien trouvé de postérieur à 1996.


Il y a une librairie php qui fait ca.
Recherche cyradm-php.lib, libcyradm ou cyradm.php
Ca s'emploie comme ca par exemple:
$CA=new cyradm;
$CA->imap_login();
$CA->createmb("user.LeUser");
$CA->imap_logout();

Ou regarde cyradm (c'est du script) et Cyrus::IMAP::Admin tu y trouves les
fonctions
createmailbox
deletemailbox
...


Manuel