LDAP is the wrong way to go about this, as Scalix doesn't use LDAP as a management tool as much as people expect. You can't create users or similar using it.
What I did was to write a perl script that compiled a complete userlist with attributes, then on the new machine I would run a corresponding import script that goes and creates the users again. It looks something like this (this is pre-Scalix 11). The code is definitely not the cleanest I have written, but it does the job.
Code: Select all
#!/usr/bin/perl
# Copyright Conversant Systems (Pty) Ltd
$base_dir = "ScalixBackup";
$bin_dir = "/opt/scalix/bin";
mkdir $base_dir;
@all_mailnodes = `$bin_dir/omshowmn -D -f`;
foreach $mailnode (@all_mailnodes) {
$mailnode =~ s/^\s+//g;
$mailnode =~ s/\*\*//g;
$mailnode =~ s/^\s+//g;
$mailnode =~ s/\s+$//g;
$mailnode =~ s/\s+/ /g;
($mailnode_name,$mailnode_domain) = split (/ /,$mailnode);
($ou1,$ou2,$ou3,$ou4) = split (/,/,$mailnode_name);
$mailnode_fqn = "OU1=".$ou1;
if ($ou2) {
$mailnode_fqn = $mailnode_fqn."/OU2=".$ou2;
if ($ou3) {
$mailnode_fqn = $mailnode_fqn."/OU3=".$ou3;
if ($ou4) {
$mailnode_fqn = $mailnode_fqn."/OU4=".$ou4;
}
}
}
$mailnode_dir = $base_dir."/".$mailnode_name;
mkdir $mailnode_dir;
@all_users = `$bin_dir/omshowu -m $mailnode_name`;
foreach $user (@all_users) {
$user =~ s/\/[\w\W]+//g;
$user =~ s/\s+$//g;
if ($user =~ / /) {
$has_firstname = "yes";
($firstname,$surname) = split (/ /,$user);
$name_fqn="S=".$surname."/G=".$firstname;
}
else {
$has_firstname = "no";
$surname = $user;
$name_fqn="S=".$surname;
}
$user =~ s/[\s\_]/./g;
$name_file = $mailnode_dir."/".$user;
$name_fqn =~ s/_/ /g;
$fqn = $name_fqn."/".$mailnode_fqn;
$user_details = `$bin_dir/omshowu -n "$fqn" -S`;
open OUTFILE, ">".$name_file.",details";
print OUTFILE $user_details;
close OUTFILE;
$file = $name_file.",store";
`$bin_dir/omcpoutu -n "$fqn" -f "$file"`
}
}
Still uses omcpoutu instead of sxmboxexp. It's fairly easy to write a import counterpart for this. Here's mine, in any event
Code: Select all
#!/usr/bin/perl
# Copyright Conversant Systems (Pty) Ltd
$bin_dir = "/opt/scalix/bin";
sub process_store
{
$cmd = "$bin_dir/omcpinu -f $file";
print "$cmd\n";
`$cmd\n`;
}
sub process_file
{
my $value, $key, $firstname, $surname, $username, $mailnode, $ia;
my $lang, $passwd, $alias, $alias_addr, $add, $cmd;
open FILE, $file;
while (<FILE>) {
($key, $value) = split ":";
chomp $key;
$key =~ s/^\s+//;
$key =~ s/\s+$//;
chomp $value;
$value =~ s/^\s+//;
$value =~ s/\s+$//;
if ($key eq "User Name") {
$username = $value;
if ($value =~ /\s/) {
($firstname, $surname) = split " ", $value;
$passwd = $firstname;
} else {
$firstname = "";
$surname = $value;
$passwd = $surname;
}
$passwd = lc $passwd;
}
if ($key eq "MailNode") {
$mailnode = $value;
}
if ($key eq "Internet Address") {
$ia = $value;
}
if ($key eq "Language") {
$lang = $value;
}
if ($key eq "Admin Capabilities") {
if ($value eq "YES") {
$add = $add . "-c admin,mboxadmin ";
}
}
if ($key eq "System Login") {
if ($value !~ /\d+/) {
$add = $add . "-u $value ";
}
}
if ($key =~ /\/INTERNET-ADDR/) {
$key =~ s/\s+//g;
$add = $add . "-a \"$key\" ";
}
}
close FILE;
$add =~ s/^\s+//;
$add =~ s/\s+$//;
$cmd = "$bin_dir/omaddu -n \"$username/$mailnode/INTERNET-ADDR=$ia\" -l ENGLISH -p $passwd $add";
#print "$cmd\n";
#`$cmd\n`;
$add = "";
}
@dirs = <*>;
foreach $dir (@dirs) {
@files = <$dir/*details>;
foreach $file (@files) {
process_file;
}
}
foreach $dir (@dirs) {
@files = <$dir/*store>;
foreach $file (@files) {
process_store;
}
}