migrating aliases & groups from SME7 to Zimbra using a p

Code junkies hangout here

Moderators: ChrisThornett, LXF moderators

migrating aliases & groups from SME7 to Zimbra using a p

Postby agarrett5 » Thu May 15, 2014 8:26 am

Hi,

I am trying to migrate SME aliases from SME7 server install to latest version of Zimbra OSE (8.0.7). Zimbra is sitting on top of Ubuntu server 12.04. The script is run on the SME server to generate zmprov commands to run in Zimbra.

I have downloaded a script from the research I have done to find out how to do this, but when the script is run I get errors.

The errors I get are:

perl -w aliascript.pl
Name "main::alias" used only once: possible typo at aliascript.pl line 143 (#1)
(W once) Typographical errors often show up as unique variable names.
If you had a good reason for having a unique name, then just mention it
again somehow to suppress the message. The our declaration is
provided for this purpose.

NOTE: This warning detects symbols that have been used only once so $c, @c,
%c, *c, &c, sub c{}, c(), and c (the filehandle or format) are considered
the same; if a program uses $c only once but also uses any of the others it
will not trigger this warning.

Name "main:u" used only once: possible typo at aliascript.pl line 150 (#1)


The script that I am running is:

#!/usr/bin/perl
use diagnostics;
################################################## ##############################
# $Id: aliases2zmprov,v 1.4 2007/03/07 22:18:56 dlbewley Exp $
#-------------------------------------------------------------------------------
# Description:
# Tool to create commands suitable for zmprov from a unix aliases file.
#
# Handles the case of an :include: construct.
# - Comments in include file are parsed as follows
# - "Foo" goes in LDAP description attribute, "Bar" in the displayname.
# # Description: foo
# # Name: Bar
#
# Handles the case of remote and multiple recipients by making a dist list.
# - A Zimbra alias must be associated with exactly one Zimbra account.
# - A Zimbra distribution list may contain users on remote hosts.
#
# See Also:
# http://wiki.zimbra.com/index.php?title=Bulk_Create
#
# Usage:
# ./aliases2zmprov /etc/aliases 1> aliases.zmp 2> aliases.err
# zmprov < aliases.zmp
#
################################################## ##############################

my @CNAME_SKIP= qw( ftp news postmaster root webmaster );
my @ALIAS_SKIP= qw( abuse mailer-daemon postmaster );
my @DISTRIBUTION_LISTS;
my $DOMAIN = 'abacuscover.com';
my $SOURCE_HOST = 'eserver';

use File::Basename;

while(<>) {
chomp;
s/#.*$//; # skip comments
next if /^\s*$/; # skip blank lines

my ($description,$display_name,@cnames);
my ($alias,$cname) = split(/:/,$_,2);

$alias =~ s/\s*//g;
# scrutinize the aliases
if (grep /^$alias$/, @ALIAS_SKIP) {
warn "skipping alias $alias -> $cname";
next;
}

$cname =~ s/\s*//g; # remove all spaces

# scrutinize the canonical names
if ($cname =~ m/:include:/) {
(($description, $display_name, $cnames_ref) =
parse_include($cname)) || next;
@cnames = @{$cnames_ref};
}
if ($cname =~ m/,/) {
# multiple recipients make this a list instead of an
alias
@cnames = split(/,/,$cname);
}

# if more than one cname then it is a dist list
if (length($cnames[0])) {
print "\n";
print "createDistributionList $alias\@$DOMAIN\n";
push (@DISTRIBUTION_LISTS, $alias);
if ($display_name) {
print "modifyDistributionList $alias\@$DOMAIN
displayname \"$display_name\"\n";
$display_name = undef;
}
if ($description) {
print "modifyDistributionList $alias\@$DOMAIN
description \"$description\"\n";
$description = undef;
}
foreach my $member (@cnames) {
# skip aliases to certain users
if (grep /^$member$/, @CNAME_SKIP) {
warn "skipping cname $member <- $alias";
next; # go to next member
}
# A Zimbra distribution list may contain users on
remote hosts.
if ($member =~ m/\@/) {
print "addDistributionListMember
$alias\@$DOMAIN $member\n";
} else {
print "addDistributionListMember
$alias\@$DOMAIN $member\@$DOMAIN\n";
}
}
print "\n";
@cnames=();
next; # go to next line of aliases file
}

# skip aliases to certain users
if (grep /^$cname$/, @CNAME_SKIP) {
warn "skipping cname $cname <- $alias";
next;
}
if ($cname =~ m/\/|\|/) {
# alias to a file or a program. don't try to
accomodate
warn "WARNING skipping cname $cname <- $alias it is a
file or pipe";
next;
}

# A Zimbra alias must be associated with exactly one
Zimbra account.
if ($cname =~ m/\@/) {
# alias to remote host. this could be created as a
dist list with 1 member
# that seems undersirable though.
print "\n";
print "createDistributionList $alias\@$DOMAIN\n";
print "addDistributionListMember $alias\@$DOMAIN
$cname\n";
print "\n";
next; # go to next line of aliases file
}
# is the cname a distribution_list already?
if (grep /^$cname$/, @DISTRIBUTION_LISTS) {
print "addDistributionListAlias $cname\@$DOMAIN
$alias\@$DOMAIN\n";
}
# are we sure that account $cname\@$DOMAIN exists?
else {
print "addAccountAlias $cname\@$DOMAIN
$alias\@$DOMAIN\n";
}
}

# read an included alias file. commens with Name: and
Description:
# are placed into LDAP attributes for the list
sub parse_include {
my $cname = shift;
my @cnames;
# need to pull in contents of file and make a dist
# list instead of an alias
my $fullfile = $cname;
$fullfile =~ s/:include://;
my ($file,$path) = fileparse($fullfile);
if (! -e $file) {
warn "WARNING skipping $alias -> $cname Please run
'scp $SOURCE_HOST:$fullfile .'";
return; # go to next line of aliases file
} else {
# process include file
open(F,$file) || warn "Can not read $file";
while (<F>) {
chomp;
(m/#\s*Department:*\s*(.*)/) && ($ou = $1); #
can't make use of this in zmprov mdl
if (m/#\s*Description:*\s*(.*)/) {
$description = $1;
$description =~ s/"/'/g; # don't blow our
command line
}
if (m/#\s*Name:*\s*(.*)/) {
$display_name = $1;
$display_name =~ s/"/'/g; # don't blow our
command line
}
s/#.*$//; # skip comments
next if /^\s*$/; # skip blank lines
push @cnames, $_;
}
}
return $description, $display_name, \@cnames;
}


I am assuming theres something within this I need to change as regards to tailoring it to the SME install? I'm not a coder at best of times! I suspect its something very simple I am missing here. Looks to me like theres a couple of things that need declaring.
agarrett5
 
Posts: 2
Joined: Thu May 15, 2014 8:17 am
Location: UK

Return to Programming

Who is online

Users browsing this forum: No registered users and 0 guests