Hi,
I am about to update my profile so its go the up to date zimbra version.
I am trying to migrate sme aliases from SME7 server install to latest version of zimbra OSE (8.0.7)
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:
# sudo ./aliascript.sh
syntax error at ./aliascript.sh line 34, near "err
# zmprov < aliases.zmp
#
################################################## ##############################
my "
BEGIN not safe after errors--compilation aborted at ./aliascript.sh line 40.
The script that I am running is:
#!/usr/bin/perl
################################################## ##############################
# $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:
# Bulk Provisioning - Zimbra :: Wiki
#
# 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 = 'foo.bar.com';
my $SOURCE_HOST = 'mail';
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.
I am about to update my profile so its go the up to date zimbra version.
I am trying to migrate sme aliases from SME7 server install to latest version of zimbra OSE (8.0.7)
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:
Quote:
# sudo ./aliascript.sh
syntax error at ./aliascript.sh line 34, near "err
# zmprov < aliases.zmp
#
################################################## ##############################
my "
BEGIN not safe after errors--compilation aborted at ./aliascript.sh line 40.
Quote:
#!/usr/bin/perl
################################################## ##############################
# $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:
# Bulk Provisioning - Zimbra :: Wiki
#
# 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 = 'foo.bar.com';
my $SOURCE_HOST = 'mail';
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;
}