From 90a184494b2ecc5642bce818760ff3ccf320cdfa Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Wed, 4 Jul 2012 18:22:48 +0200 Subject: [PATCH] Amavis SQL schema updated. This plugin now requires Amavis version 2.7.0 or higher. see #287 --- .../amavis/migrations/0001_initial.py | 23 ++++++++++++++----- .../amavis/migrations/0002_create_records.py | 19 +++++++++++---- modoboa/extensions/amavis/models.py | 19 ++++++++++++--- 3 files changed, 48 insertions(+), 13 deletions(-) diff --git a/modoboa/extensions/amavis/migrations/0001_initial.py b/modoboa/extensions/amavis/migrations/0001_initial.py index 9d844b1da..8955a2135 100644 --- a/modoboa/extensions/amavis/migrations/0001_initial.py +++ b/modoboa/extensions/amavis/migrations/0001_initial.py @@ -28,19 +28,22 @@ class Migration(SchemaMigration): 'priority': ('django.db.models.fields.IntegerField', [], {}) }, 'amavis.msgrcpt': { - 'Meta': {'unique_together': "(('mail', 'rid'),)", 'object_name': 'Msgrcpt', 'db_table': "u'msgrcpt'", 'managed': 'False'}, + 'Meta': {'unique_together': "(('partition_tag', 'mail', 'rseqnum'),)", 'object_name': 'Msgrcpt', 'db_table': "u'msgrcpt'", 'managed': 'False'}, 'bl': ('django.db.models.fields.CharField', [], {'max_length': '3', 'blank': 'True'}), 'bspam_level': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}), + 'content': ('django.db.models.fields.CharField', [], {'max_length': '3'}), 'ds': ('django.db.models.fields.CharField', [], {'max_length': '3'}), + 'is_local': ('django.db.models.fields.CharField', [], {'max_length': '3'}), 'mail': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['amavis.Msgs']", 'primary_key': 'True'}), 'partition_tag': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), 'rid': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['amavis.Maddr']", 'primary_key': 'True', 'db_column': "'rid'"}), 'rs': ('django.db.models.fields.CharField', [], {'max_length': '3'}), + 'rseqnum': ('django.db.models.fields.IntegerField', [], {'default': '0'}), 'smtp_resp': ('django.db.models.fields.CharField', [], {'max_length': '765', 'blank': 'True'}), 'wl': ('django.db.models.fields.CharField', [], {'max_length': '3', 'blank': 'True'}) }, 'amavis.msgs': { - 'Meta': {'object_name': 'Msgs', 'db_table': "u'msgs'", 'managed': 'False'}, + 'Meta': {'unique_together': "(('partition_tag', 'mail_id'),)", 'object_name': 'Msgs', 'db_table': "u'msgs'", 'managed': 'False'}, 'am_id': ('django.db.models.fields.CharField', [], {'max_length': '60'}), 'client_addr': ('django.db.models.fields.CharField', [], {'max_length': '765', 'blank': 'True'}), 'content': ('django.db.models.fields.CharField', [], {'max_length': '1', 'blank': 'True'}), @@ -49,6 +52,7 @@ class Migration(SchemaMigration): 'host': ('django.db.models.fields.CharField', [], {'max_length': '765'}), 'mail_id': ('django.db.models.fields.CharField', [], {'max_length': '12', 'primary_key': 'True'}), 'message_id': ('django.db.models.fields.CharField', [], {'max_length': '765', 'blank': 'True'}), + 'originating': ('django.db.models.fields.CharField', [], {'max_length': '3'}), 'partition_tag': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), 'policy': ('django.db.models.fields.CharField', [], {'max_length': '765', 'blank': 'True'}), 'quar_loc': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), @@ -67,6 +71,7 @@ class Migration(SchemaMigration): 'addr_extension_banned': ('django.db.models.fields.CharField', [], {'max_length': '192', 'null': 'True', 'blank': 'True'}), 'addr_extension_spam': ('django.db.models.fields.CharField', [], {'max_length': '192', 'null': 'True', 'blank': 'True'}), 'addr_extension_virus': ('django.db.models.fields.CharField', [], {'max_length': '192', 'null': 'True', 'blank': 'True'}), + 'archive_quarantine_to': ('django.db.models.fields.CharField', [], {'max_length': '192', 'null': 'True', 'blank': 'True'}), 'bad_header_admin': ('django.db.models.fields.CharField', [], {'max_length': '192', 'null': 'True', 'blank': 'True'}), 'bad_header_lover': ('django.db.models.fields.CharField', [], {'max_length': '3', 'null': 'True', 'blank': 'True'}), 'bad_header_quarantine_to': ('django.db.models.fields.CharField', [], {'max_length': '192', 'null': 'True', 'blank': 'True'}), @@ -75,15 +80,18 @@ class Migration(SchemaMigration): 'banned_quarantine_to': ('django.db.models.fields.CharField', [], {'max_length': '192', 'null': 'True', 'blank': 'True'}), 'banned_rulenames': ('django.db.models.fields.CharField', [], {'max_length': '192', 'null': 'True', 'blank': 'True'}), 'bypass_banned_checks': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '3', 'null': 'True'}), - 'bypass_header_checks': ('django.db.models.fields.CharField', [], {'max_length': '3', 'blank': 'True', 'null': 'True'}), + 'bypass_header_checks': ('django.db.models.fields.CharField', [], {'max_length': '3', 'null': 'True', 'blank': 'True'}), 'bypass_spam_checks': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '3', 'null': 'True'}), 'bypass_virus_checks': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '3', 'null': 'True'}), 'clean_quarantine_to': ('django.db.models.fields.CharField', [], {'max_length': '192', 'null': 'True', 'blank': 'True'}), + 'disclaimer_options': ('django.db.models.fields.CharField', [], {'max_length': '192', 'null': 'True', 'blank': 'True'}), + 'forward_method': ('django.db.models.fields.CharField', [], {'max_length': '192', 'null': 'True', 'blank': 'True'}), 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'message_size_limit': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), 'newvirus_admin': ('django.db.models.fields.CharField', [], {'max_length': '192', 'null': 'True', 'blank': 'True'}), - 'other_quarantine_to': ('django.db.models.fields.CharField', [], {'max_length': '192', 'null': 'True', 'blank': 'True'}), 'policy_name': ('django.db.models.fields.CharField', [], {'max_length': '96', 'blank': 'True'}), + 'sa_userconf': ('django.db.models.fields.CharField', [], {'max_length': '192', 'null': 'True', 'blank': 'True'}), + 'sa_username': ('django.db.models.fields.CharField', [], {'max_length': '192', 'null': 'True', 'blank': 'True'}), 'spam_admin': ('django.db.models.fields.CharField', [], {'max_length': '192', 'null': 'True', 'blank': 'True'}), 'spam_dsn_cutoff_level': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}), 'spam_kill_level': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}), @@ -93,8 +101,11 @@ class Migration(SchemaMigration): 'spam_quarantine_to': ('django.db.models.fields.CharField', [], {'max_length': '192', 'null': 'True', 'blank': 'True'}), 'spam_subject_tag': ('django.db.models.fields.CharField', [], {'max_length': '192', 'null': 'True', 'blank': 'True'}), 'spam_subject_tag2': ('django.db.models.fields.CharField', [], {'max_length': '192', 'null': 'True', 'blank': 'True'}), + 'spam_subject_tag3': ('django.db.models.fields.CharField', [], {'max_length': '192', 'null': 'True', 'blank': 'True'}), 'spam_tag2_level': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}), + 'spam_tag3_level': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}), 'spam_tag_level': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}), + 'uncheked_quarantine_to': ('django.db.models.fields.CharField', [], {'max_length': '192', 'null': 'True', 'blank': 'True'}), 'virus_admin': ('django.db.models.fields.CharField', [], {'max_length': '192', 'null': 'True', 'blank': 'True'}), 'virus_lover': ('django.db.models.fields.CharField', [], {'max_length': '3', 'null': 'True', 'blank': 'True'}), 'virus_quarantine_to': ('django.db.models.fields.CharField', [], {'max_length': '192', 'null': 'True', 'blank': 'True'}), @@ -103,7 +114,7 @@ class Migration(SchemaMigration): 'warnvirusrecip': ('django.db.models.fields.CharField', [], {'max_length': '3', 'null': 'True', 'blank': 'True'}) }, 'amavis.quarantine': { - 'Meta': {'ordering': "['-mail__time_num']", 'unique_together': "(('mail', 'chunk_ind'),)", 'object_name': 'Quarantine', 'db_table': "u'quarantine'", 'managed': 'False'}, + 'Meta': {'ordering': "['-mail__time_num']", 'unique_together': "(('partition_tag', 'mail', 'chunk_ind'),)", 'object_name': 'Quarantine', 'db_table': "u'quarantine'", 'managed': 'False'}, 'chunk_ind': ('django.db.models.fields.IntegerField', [], {}), 'mail': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['amavis.Msgs']", 'primary_key': 'True'}), 'mail_text': ('django.db.models.fields.TextField', [], {}), @@ -126,4 +137,4 @@ class Migration(SchemaMigration): } } - complete_apps = ['amavis'] + complete_apps = ['amavis'] \ No newline at end of file diff --git a/modoboa/extensions/amavis/migrations/0002_create_records.py b/modoboa/extensions/amavis/migrations/0002_create_records.py index 788145659..40c217434 100644 --- a/modoboa/extensions/amavis/migrations/0002_create_records.py +++ b/modoboa/extensions/amavis/migrations/0002_create_records.py @@ -99,19 +99,22 @@ class Migration(DataMigration): 'priority': ('django.db.models.fields.IntegerField', [], {}) }, 'amavis.msgrcpt': { - 'Meta': {'unique_together': "(('mail', 'rid'),)", 'object_name': 'Msgrcpt', 'db_table': "u'msgrcpt'", 'managed': 'False'}, + 'Meta': {'unique_together': "(('partition_tag', 'mail', 'rseqnum'),)", 'object_name': 'Msgrcpt', 'db_table': "u'msgrcpt'", 'managed': 'False'}, 'bl': ('django.db.models.fields.CharField', [], {'max_length': '3', 'blank': 'True'}), 'bspam_level': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}), + 'content': ('django.db.models.fields.CharField', [], {'max_length': '3'}), 'ds': ('django.db.models.fields.CharField', [], {'max_length': '3'}), + 'is_local': ('django.db.models.fields.CharField', [], {'max_length': '3'}), 'mail': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['amavis.Msgs']", 'primary_key': 'True'}), 'partition_tag': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), 'rid': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['amavis.Maddr']", 'primary_key': 'True', 'db_column': "'rid'"}), 'rs': ('django.db.models.fields.CharField', [], {'max_length': '3'}), + 'rseqnum': ('django.db.models.fields.IntegerField', [], {'default': '0'}), 'smtp_resp': ('django.db.models.fields.CharField', [], {'max_length': '765', 'blank': 'True'}), 'wl': ('django.db.models.fields.CharField', [], {'max_length': '3', 'blank': 'True'}) }, 'amavis.msgs': { - 'Meta': {'object_name': 'Msgs', 'db_table': "u'msgs'", 'managed': 'False'}, + 'Meta': {'unique_together': "(('partition_tag', 'mail_id'),)", 'object_name': 'Msgs', 'db_table': "u'msgs'", 'managed': 'False'}, 'am_id': ('django.db.models.fields.CharField', [], {'max_length': '60'}), 'client_addr': ('django.db.models.fields.CharField', [], {'max_length': '765', 'blank': 'True'}), 'content': ('django.db.models.fields.CharField', [], {'max_length': '1', 'blank': 'True'}), @@ -120,6 +123,7 @@ class Migration(DataMigration): 'host': ('django.db.models.fields.CharField', [], {'max_length': '765'}), 'mail_id': ('django.db.models.fields.CharField', [], {'max_length': '12', 'primary_key': 'True'}), 'message_id': ('django.db.models.fields.CharField', [], {'max_length': '765', 'blank': 'True'}), + 'originating': ('django.db.models.fields.CharField', [], {'max_length': '3'}), 'partition_tag': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), 'policy': ('django.db.models.fields.CharField', [], {'max_length': '765', 'blank': 'True'}), 'quar_loc': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), @@ -138,6 +142,7 @@ class Migration(DataMigration): 'addr_extension_banned': ('django.db.models.fields.CharField', [], {'max_length': '192', 'null': 'True', 'blank': 'True'}), 'addr_extension_spam': ('django.db.models.fields.CharField', [], {'max_length': '192', 'null': 'True', 'blank': 'True'}), 'addr_extension_virus': ('django.db.models.fields.CharField', [], {'max_length': '192', 'null': 'True', 'blank': 'True'}), + 'archive_quarantine_to': ('django.db.models.fields.CharField', [], {'max_length': '192', 'null': 'True', 'blank': 'True'}), 'bad_header_admin': ('django.db.models.fields.CharField', [], {'max_length': '192', 'null': 'True', 'blank': 'True'}), 'bad_header_lover': ('django.db.models.fields.CharField', [], {'max_length': '3', 'null': 'True', 'blank': 'True'}), 'bad_header_quarantine_to': ('django.db.models.fields.CharField', [], {'max_length': '192', 'null': 'True', 'blank': 'True'}), @@ -150,11 +155,14 @@ class Migration(DataMigration): 'bypass_spam_checks': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '3', 'null': 'True'}), 'bypass_virus_checks': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '3', 'null': 'True'}), 'clean_quarantine_to': ('django.db.models.fields.CharField', [], {'max_length': '192', 'null': 'True', 'blank': 'True'}), + 'disclaimer_options': ('django.db.models.fields.CharField', [], {'max_length': '192', 'null': 'True', 'blank': 'True'}), + 'forward_method': ('django.db.models.fields.CharField', [], {'max_length': '192', 'null': 'True', 'blank': 'True'}), 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'message_size_limit': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), 'newvirus_admin': ('django.db.models.fields.CharField', [], {'max_length': '192', 'null': 'True', 'blank': 'True'}), - 'other_quarantine_to': ('django.db.models.fields.CharField', [], {'max_length': '192', 'null': 'True', 'blank': 'True'}), 'policy_name': ('django.db.models.fields.CharField', [], {'max_length': '96', 'blank': 'True'}), + 'sa_userconf': ('django.db.models.fields.CharField', [], {'max_length': '192', 'null': 'True', 'blank': 'True'}), + 'sa_username': ('django.db.models.fields.CharField', [], {'max_length': '192', 'null': 'True', 'blank': 'True'}), 'spam_admin': ('django.db.models.fields.CharField', [], {'max_length': '192', 'null': 'True', 'blank': 'True'}), 'spam_dsn_cutoff_level': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}), 'spam_kill_level': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}), @@ -164,8 +172,11 @@ class Migration(DataMigration): 'spam_quarantine_to': ('django.db.models.fields.CharField', [], {'max_length': '192', 'null': 'True', 'blank': 'True'}), 'spam_subject_tag': ('django.db.models.fields.CharField', [], {'max_length': '192', 'null': 'True', 'blank': 'True'}), 'spam_subject_tag2': ('django.db.models.fields.CharField', [], {'max_length': '192', 'null': 'True', 'blank': 'True'}), + 'spam_subject_tag3': ('django.db.models.fields.CharField', [], {'max_length': '192', 'null': 'True', 'blank': 'True'}), 'spam_tag2_level': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}), + 'spam_tag3_level': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}), 'spam_tag_level': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}), + 'uncheked_quarantine_to': ('django.db.models.fields.CharField', [], {'max_length': '192', 'null': 'True', 'blank': 'True'}), 'virus_admin': ('django.db.models.fields.CharField', [], {'max_length': '192', 'null': 'True', 'blank': 'True'}), 'virus_lover': ('django.db.models.fields.CharField', [], {'max_length': '3', 'null': 'True', 'blank': 'True'}), 'virus_quarantine_to': ('django.db.models.fields.CharField', [], {'max_length': '192', 'null': 'True', 'blank': 'True'}), @@ -174,7 +185,7 @@ class Migration(DataMigration): 'warnvirusrecip': ('django.db.models.fields.CharField', [], {'max_length': '3', 'null': 'True', 'blank': 'True'}) }, 'amavis.quarantine': { - 'Meta': {'ordering': "['-mail__time_num']", 'unique_together': "(('mail', 'chunk_ind'),)", 'object_name': 'Quarantine', 'db_table': "u'quarantine'", 'managed': 'False'}, + 'Meta': {'ordering': "['-mail__time_num']", 'unique_together': "(('partition_tag', 'mail', 'chunk_ind'),)", 'object_name': 'Quarantine', 'db_table': "u'quarantine'", 'managed': 'False'}, 'chunk_ind': ('django.db.models.fields.IntegerField', [], {}), 'mail': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['amavis.Msgs']", 'primary_key': 'True'}), 'mail_text': ('django.db.models.fields.TextField', [], {}), diff --git a/modoboa/extensions/amavis/models.py b/modoboa/extensions/amavis/models.py index 09a462d31..1b52eb872 100644 --- a/modoboa/extensions/amavis/models.py +++ b/modoboa/extensions/amavis/models.py @@ -40,6 +40,7 @@ class Msgs(models.Model): policy = models.CharField(max_length=765, blank=True) client_addr = models.CharField(max_length=765, blank=True) size = models.IntegerField() + originating = models.CharField(max_length=3) content = models.CharField(max_length=1, blank=True) quar_type = models.CharField(max_length=1, blank=True) quar_loc = models.CharField(max_length=255, blank=True) @@ -52,11 +53,15 @@ class Msgs(models.Model): class Meta: db_table = u'msgs' managed = False + unique_together = ('partition_tag', 'mail_id') class Msgrcpt(models.Model): partition_tag = models.IntegerField(null=True, blank=True) mail = models.ForeignKey(Msgs, primary_key=True) rid = models.ForeignKey(Maddr, db_column='rid', primary_key=True) + rseqnum = models.IntegerField(default=0) + is_local = models.CharField(max_length=3) + content = models.CharField(max_length=3) ds = models.CharField(max_length=3) rs = models.CharField(max_length=3) bl = models.CharField(max_length=3, blank=True) @@ -66,7 +71,7 @@ class Msgrcpt(models.Model): class Meta: db_table = u'msgrcpt' managed = False - unique_together = ("mail", "rid") + unique_together = ("partition_tag", "mail", "rseqnum") class Policy(models.Model): policy_name = models.CharField(max_length=96, blank=True) @@ -110,11 +115,13 @@ class Policy(models.Model): virus_quarantine_to = models.CharField(max_length=192, blank=True, null=True) spam_quarantine_to = models.CharField(max_length=192, blank=True, null=True) banned_quarantine_to = models.CharField(max_length=192, blank=True, null=True) + uncheked_quarantine_to = models.CharField(max_length=192, blank=True, null=True) bad_header_quarantine_to = models.CharField(max_length=192, blank=True, null=True) clean_quarantine_to = models.CharField(max_length=192, blank=True, null=True) - other_quarantine_to = models.CharField(max_length=192, blank=True, null=True) + archive_quarantine_to = models.CharField(max_length=192, blank=True, null=True) spam_tag_level = models.FloatField(null=True, blank=True) spam_tag2_level = models.FloatField(null=True, blank=True) + spam_tag3_level = models.FloatField(null=True, blank=True) spam_kill_level = models.FloatField(null=True, blank=True) spam_dsn_cutoff_level = models.FloatField(null=True, blank=True) spam_quarantine_cutoff_level = models.FloatField(null=True, blank=True) @@ -132,8 +139,14 @@ class Policy(models.Model): spam_admin = models.CharField(max_length=192, blank=True, null=True) spam_subject_tag = models.CharField(max_length=192, blank=True, null=True) spam_subject_tag2 = models.CharField(max_length=192, blank=True, null=True) + spam_subject_tag3 = models.CharField(max_length=192, blank=True, null=True) message_size_limit = models.IntegerField(null=True, blank=True) banned_rulenames = models.CharField(max_length=192, blank=True, null=True) + disclaimer_options = models.CharField(max_length=192, blank=True, null=True) + forward_method = models.CharField(max_length=192, blank=True, null=True) + sa_userconf = models.CharField(max_length=192, blank=True, null=True) + sa_username = models.CharField(max_length=192, blank=True, null=True) + class Meta: db_table = u'policy' managed = False @@ -147,7 +160,7 @@ class Quarantine(models.Model): db_table = u'quarantine' managed = False ordering = ["-mail__time_num"] - unique_together = ("mail", "chunk_ind") + unique_together = ("partition_tag", "mail", "chunk_ind") class Users(models.Model): id = models.AutoField(primary_key=True)