]> git.proxmox.com Git - pmg-api.git/blobdiff - PMG/RuleDB.pm
PMG::Cluster::sync_quarantine_db: skip files generated before cluster was created
[pmg-api.git] / PMG / RuleDB.pm
index c1d76b20910f77a5f8ffd3eed5af6d493258bcf3..542fd4a21f8164f552d6e2149b42a4a85c108194 100644 (file)
@@ -4,6 +4,7 @@ use strict;
 use warnings;
 use DBI;
 use HTML::Entities;
+use Data::Dumper;
 
 use PVE::SafeSyslog;
 
@@ -22,9 +23,8 @@ use PMG::RuleDB::IPAddress;
 use PMG::RuleDB::IPNet;
 use PMG::RuleDB::Domain;
 use PMG::RuleDB::ReceiverDomain;
-# fixme:
-#use Proxmox::RuleDB::LDAP;
-#use Proxmox::RuleDB::LDAPUser;
+use PMG::RuleDB::LDAP;
+use PMG::RuleDB::LDAPUser;
 use PMG::RuleDB::TimeFrame;
 use PMG::RuleDB::Spam;
 use PMG::RuleDB::ReportSpam;
@@ -61,25 +61,28 @@ sub close {
     $self->{dbh}->disconnect();
 }
 
-sub new_action {
-    my ($self, $obj) = @_;
+sub create_group_with_obj {
+    my ($self, $obj, $name, $info) = @_;
 
     my $og;
     my $id;
 
     defined($obj) || die "proxmox: undefined object";
 
+    $name //= '';
+    $info //= '';
+
     eval {
 
        $self->{dbh}->begin_work;
 
-        $self->{dbh}->do ("INSERT INTO Objectgroup (Name, Info, Class) " .
-                         "VALUES (?, ?, ?)", undef,
-                         decode_entities($obj->otype_text()), '', $obj->oclass());
+        $self->{dbh}->do("INSERT INTO Objectgroup (Name, Info, Class) " .
+                        "VALUES (?, ?, ?)", undef,
+                        $name, $info, $obj->oclass());
 
        my $lid = PMG::Utils::lastid($self->{dbh}, 'objectgroup_id_seq');
 
-       $og = PMG::RuleDB::Group->new();
+       $og = PMG::RuleDB::Group->new($name, $info, $obj->oclass());
        $og->{id} = $lid;
 
        $obj->{ogroup} = $lid;
@@ -112,7 +115,7 @@ sub load_groups {
 
     $sth->execute($rule->{id});
 
-    my ($from, $to, $when, $what, $action) = ((), (), (), (), ());
+    my ($from, $to, $when, $what, $action) = ([], [], [], [], []);
 
     while (my $ref = $sth->fetchrow_hashref()) {
        my $og = PMG::RuleDB::Group->new($ref->{name}, $ref->{info});
@@ -140,6 +143,21 @@ sub load_groups {
     return ($from, $to, $when, $what, $action);
 }
 
+sub load_groups_by_name {
+    my ($self, $rule) = @_;
+
+    my ($from, $to, $when, $what, $action) =
+       $self->load_groups($rule);
+
+    return {
+       from => $from,
+       to => $to,
+       when => $when,
+       what => $what,
+       action => $action,
+    };
+}
+
 sub save_group {
     my ($self, $og) = @_;
 
@@ -297,13 +315,12 @@ sub get_object {
     elsif ($otype == PMG::RuleDB::IPNet::otype) {
        $obj = PMG::RuleDB::IPNet->new();
     }
-# fixme
-#    elsif ($otype == Proxmox::RuleDB::LDAP::otype) {
-#      $obj = Proxmox::RuleDB::LDAP->new();
-#    }
-#    elsif ($otype == Proxmox::RuleDB::LDAPUser::otype) {
-#      $obj = Proxmox::RuleDB::LDAPUser->new();
-#    }
+    elsif ($otype == PMG::RuleDB::LDAP::otype) {
+       $obj = PMG::RuleDB::LDAP->new();
+    }
+    elsif ($otype == PMG::RuleDB::LDAPUser::otype) {
+       $obj = PMG::RuleDB::LDAPUser->new();
+    }
     # WHEN OBJECTS
     elsif ($otype == PMG::RuleDB::TimeFrame::otype) {
        $obj = PMG::RuleDB::TimeFrame->new();
@@ -642,18 +659,19 @@ sub delete_testrules {
     return 1;
 }
 
-sub create_group_with_obj {
-    my ($self, $obj, $name, $desc) = @_;
-
-    my $og = PMG::RuleDB::Group->new($name, $desc, $obj->oclass());
-    $self->save_group($og);
-    $self->group_add_object($og, $obj);
-
-    return $og;
-}
+my $grouptype_hash = {
+    from => 0,
+    to => 1,
+    when => 2,
+    what => 3,
+    action => 4,
+};
 
 sub rule_add_group {
-    my ($self, $ruleid, $groupid, $gtype) = @_;
+    my ($self, $ruleid, $groupid, $gtype_str) = @_;
+
+    my $gtype = $grouptype_hash->{$gtype_str} //
+       die "unknown group type '$gtype_str'\n";
 
     defined($ruleid) || die "undefined rule id: ERROR";
     defined($groupid) || die "undefined group id: ERROR";
@@ -669,35 +687,38 @@ sub rule_add_group {
 sub rule_add_from_group {
     my ($self, $rule, $group) = @_;
 
-    $self->rule_add_group($rule->{id}, $group->{id}, 0);
+    $self->rule_add_group($rule->{id}, $group->{id}, 'from');
 }
 
 sub rule_add_to_group {
     my ($self, $rule, $group) = @_;
 
-    $self->rule_add_group($rule->{id}, $group->{id}, 1);
+    $self->rule_add_group($rule->{id}, $group->{id}, 'to');
 }
 
 sub rule_add_when_group {
     my ($self, $rule, $group) = @_;
 
-    $self->rule_add_group($rule->{id}, $group->{id}, 2);
+    $self->rule_add_group($rule->{id}, $group->{id}, 'when');
 }
 
 sub rule_add_what_group {
     my ($self, $rule, $group) = @_;
 
-    $self->rule_add_group($rule->{id}, $group->{id}, 3);
+    $self->rule_add_group($rule->{id}, $group->{id}, 'what');
 }
 
 sub rule_add_action {
     my ($self, $rule, $group) = @_;
 
-    $self->rule_add_group($rule->{id}, $group->{id}, 4);
+    $self->rule_add_group($rule->{id}, $group->{id}, 'action');
 }
 
 sub rule_remove_group {
-    my ($self, $ruleid, $groupid, $gtype) = @_;
+    my ($self, $ruleid, $groupid, $gtype_str) = @_;
+
+    my $gtype = $grouptype_hash->{$gtype_str} //
+       die "unknown group type '$gtype_str'\n";
 
     defined($ruleid) || die "undefined rule id: ERROR";
     defined($groupid) || die "undefined group id: ERROR";
@@ -722,6 +743,7 @@ sub load_rule {
     $sth->execute($id);
 
     my $ref = $sth->fetchrow_hashref();
+    die "rule '$id' does not exist\n" if !defined($ref);
 
     my $rule = PMG::RuleDB::Rule->new($ref->{name}, $ref->{priority},
                                      $ref->{active}, $ref->{direction});
@@ -811,7 +833,7 @@ Add an object group to the rule.
 
 Possible values for $gtype are:
 
-    0 = FROM, 1 = TO, 2 = WHEN, 3 = WHAT, 4 = ACTION
+    'from' 'to', 'when', 'what', 'action'
 
 =head3  $ruledb->rule_remove_group ($rule, $og, $gtype)