Changeset View
Changeset View
Standalone View
Standalone View
pykolab/cli/cmd_add_alias.py
Show All 11 Lines | |||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of | # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||||
# GNU General Public License for more details. | # GNU General Public License for more details. | ||||
# You should have received a copy of the GNU General Public License | # You should have received a copy of the GNU General Public License | ||||
# along with this program. If not, see <http://www.gnu.org/licenses/>. | # along with this program. If not, see <http://www.gnu.org/licenses/>. | ||||
# | # | ||||
from __future__ import print_function | |||||
import sys | import sys | ||||
import commands | import commands | ||||
import pykolab | import pykolab | ||||
from pykolab.auth import Auth | from pykolab.auth import Auth | ||||
from pykolab.translate import _ | from pykolab.translate import _ | ||||
log = pykolab.getLogger('pykolab.cli') | log = pykolab.getLogger('pykolab.cli') | ||||
conf = pykolab.getConf() | conf = pykolab.getConf() | ||||
def __init__(): | def __init__(): | ||||
commands.register('add_alias', execute, description="Add alias.") | commands.register('add_alias', execute, description="Add alias.") | ||||
def execute(*args, **kw): | def execute(*args, **kw): | ||||
try: | try: | ||||
primary_rcpt_address = conf.cli_args.pop(0) | primary_rcpt_address = conf.cli_args.pop(0) | ||||
try: | try: | ||||
secondary_rcpt_address = conf.cli_args.pop(0) | secondary_rcpt_address = conf.cli_args.pop(0) | ||||
except: | except: | ||||
print >> sys.stderr, _("Specify the (new) alias address") | print(_("Specify the (new) alias address"), file=sys.stderr) | ||||
sys.exit(1) | sys.exit(1) | ||||
except: | except: | ||||
print >> sys.stderr, _("Specify the existing recipient address") | print(_("Specify the existing recipient address"), file=sys.stderr) | ||||
sys.exit(1) | sys.exit(1) | ||||
if len(primary_rcpt_address.split('@')) > 1: | if len(primary_rcpt_address.split('@')) > 1: | ||||
primary_rcpt_domain = primary_rcpt_address.split('@')[-1] | primary_rcpt_domain = primary_rcpt_address.split('@')[-1] | ||||
else: | else: | ||||
primary_rcpt_domain = conf.get('kolab', 'primary_domain') | primary_rcpt_domain = conf.get('kolab', 'primary_domain') | ||||
auth = Auth(domain=primary_rcpt_domain) | auth = Auth(domain=primary_rcpt_domain) | ||||
domains = auth.list_domains() | domains = auth.list_domains() | ||||
#print domains | #print domains | ||||
if len(secondary_rcpt_address.split('@')) > 1: | if len(secondary_rcpt_address.split('@')) > 1: | ||||
secondary_rcpt_domain = secondary_rcpt_address.split('@')[-1] | secondary_rcpt_domain = secondary_rcpt_address.split('@')[-1] | ||||
else: | else: | ||||
secondary_rcpt_domain = conf.get('kolab', 'primary_domain') | secondary_rcpt_domain = conf.get('kolab', 'primary_domain') | ||||
# Check if either is in fact a domain | # Check if either is in fact a domain | ||||
if not primary_rcpt_domain.lower() in domains.keys(): | if not primary_rcpt_domain.lower() in domains: | ||||
print >> sys.stderr, _("Domain %r is not a local domain") % (primary_rcpt_domain) | print(_("Domain %r is not a local domain") % (primary_rcpt_domain), file=sys.stderr) | ||||
sys.exit(1) | sys.exit(1) | ||||
if not secondary_rcpt_domain.lower() in domains.keys(): | if not secondary_rcpt_domain.lower() in domains: | ||||
print >> sys.stderr, _("Domain %r is not a local domain") % (secondary_rcpt_domain) | print(_("Domain %r is not a local domain") % (secondary_rcpt_domain), file=sys.stderr) | ||||
sys.exit(1) | sys.exit(1) | ||||
if not primary_rcpt_domain == secondary_rcpt_domain: | if not primary_rcpt_domain == secondary_rcpt_domain: | ||||
if not domains[primary_rcpt_domain] == domains[secondary_rcpt_domain]: | if not domains[primary_rcpt_domain] == domains[secondary_rcpt_domain]: | ||||
print >> sys.stderr, _("Primary and secondary domain do not have the same parent domain") | print(_("Primary and secondary domain do not have the same parent domain"), file=sys.stderr) | ||||
sys.exit(1) | sys.exit(1) | ||||
primary_recipient_dn = auth.find_recipient(primary_rcpt_address) | primary_recipient_dn = auth.find_recipient(primary_rcpt_address) | ||||
if primary_recipient_dn == [] or len(primary_recipient_dn) == 0: | if primary_recipient_dn == [] or len(primary_recipient_dn) == 0: | ||||
print >> sys.stderr, _("No such recipient %r") % (primary_rcpt_address) | print(_("No such recipient %r") % (primary_rcpt_address), file=sys.stderr) | ||||
sys.exit(1) | sys.exit(1) | ||||
secondary_recipient_dn = auth.find_recipient(secondary_rcpt_address) | secondary_recipient_dn = auth.find_recipient(secondary_rcpt_address) | ||||
if not secondary_recipient_dn == [] and not len(secondary_recipient_dn) == 0: | if not secondary_recipient_dn == [] and not len(secondary_recipient_dn) == 0: | ||||
print >> sys.stderr, _("Recipient for alias %r already exists") % (secondary_rcpt_address) | print(_("Recipient for alias %r already exists") % (secondary_rcpt_address), file=sys.stderr) | ||||
sys.exit(1) | sys.exit(1) | ||||
rcpt_attrs = conf.get_list('ldap', 'mail_attributes') | rcpt_attrs = conf.get_list('ldap', 'mail_attributes') | ||||
primary_rcpt_attr = rcpt_attrs[0] | primary_rcpt_attr = rcpt_attrs[0] | ||||
if len(rcpt_attrs) >= 2: | if len(rcpt_attrs) >= 2: | ||||
secondary_rcpt_attr = rcpt_attrs[1] | secondary_rcpt_attr = rcpt_attrs[1] | ||||
else: | else: | ||||
print >> sys.stderr, _("Environment is not configured for " + \ | print(_("Environment is not configured for " + \ | ||||
"users to hold secondary mail attributes") | "users to hold secondary mail attributes"), file=sys.stderr) | ||||
sys.exit(1) | sys.exit(1) | ||||
primary_recipient = auth.get_entry_attributes(primary_rcpt_domain, primary_recipient_dn, rcpt_attrs) | primary_recipient = auth.get_entry_attributes(primary_rcpt_domain, primary_recipient_dn, rcpt_attrs) | ||||
if not primary_recipient.has_key(primary_rcpt_attr): | if primary_rcpt_attr not in primary_recipient: | ||||
print >> sys.stderr, _("Recipient %r is not the primary recipient for address %r") % (primary_recipient, primary_rcpt_address) | print(_("Recipient %r is not the primary recipient for address %r") % (primary_recipient, primary_rcpt_address), file=sys.stderr) | ||||
sys.exit(1) | sys.exit(1) | ||||
if not primary_recipient.has_key(secondary_rcpt_attr): | if secondary_rcpt_attr not in primary_recipient: | ||||
auth.set_entry_attributes(primary_rcpt_domain, primary_recipient_dn, {secondary_rcpt_attr: [ secondary_rcpt_address ] }) | auth.set_entry_attributes(primary_rcpt_domain, primary_recipient_dn, {secondary_rcpt_attr: [ secondary_rcpt_address ] }) | ||||
else: | else: | ||||
if isinstance(primary_recipient[secondary_rcpt_attr], basestring): | if isinstance(primary_recipient[secondary_rcpt_attr], basestring): | ||||
new_secondary_rcpt_attrs = [ | new_secondary_rcpt_attrs = [ | ||||
primary_recipient[secondary_rcpt_attr], | primary_recipient[secondary_rcpt_attr], | ||||
secondary_rcpt_address | secondary_rcpt_address | ||||
] | ] | ||||
Show All 13 Lines |