diff --git a/modoboa/admin/forms.py b/modoboa/admin/forms.py index 2a4bf04f6..63be15029 100644 --- a/modoboa/admin/forms.py +++ b/modoboa/admin/forms.py @@ -276,6 +276,8 @@ class AliasForm(forms.ModelForm, DynamicForm): raise PermDeniedException(v) try: rcpt = Alias.objects.get(domain=domain, address=local_part) + if rcpt.full_address == self.cleaned_data["email"]: + rcpt = None except Alias.DoesNotExist: rcpt = None if rcpt is None: diff --git a/modoboa/admin/models.py b/modoboa/admin/models.py index b08d9e713..6a2134c29 100644 --- a/modoboa/admin/models.py +++ b/modoboa/admin/models.py @@ -1181,12 +1181,14 @@ class Alias(DatesAware): continue try: target = Alias.objects.get(domain__name=domname, address=localpart) + if target.full_address == self.full_address: + target = None except Alias.DoesNotExist: target = None if target is None: try: target = Mailbox.objects.get(address=localpart, - domain__name=domname) + domain__name=domname) except Mailbox.DoesNotExist: raise AdminError(_("Local recipient %s not found" % rcpt)) int_rcpts += [target] diff --git a/modoboa/admin/tests.py b/modoboa/admin/tests.py index 4067793c0..e894462e4 100644 --- a/modoboa/admin/tests.py +++ b/modoboa/admin/tests.py @@ -214,6 +214,20 @@ class AliasTestCase(ModoTestCase): self.assertRaises(Alias.DoesNotExist, Alias.objects.get, address="forward", domain__name="test.com") + def test_forward_and_local_copies(self): + values = dict(email="user@test.com", recipients="rcpt@dest.com") + self.check_ajax_post(reverse("modoboa.admin.views.newforward"), values) + fwd = Alias.objects.get(address="user", domain__name="test.com") + self.assertEqual(fwd.get_recipients_count(), 1) + + values["recipients"] = "rcpt@dest.com" + values["recipients_1"] = "user@test.com" + self.check_ajax_post(reverse("modoboa.admin.views.editalias", args=[fwd.id]), + values) + fwd = Alias.objects.get(pk=fwd.pk) + self.assertEqual(fwd.get_recipients_count(), 2) + self.assertEqual(fwd.aliases.count(), 0) + class PermissionsTestCase(ModoTestCase): fixtures = ["initial_users.json", "test_content.json"]