use warnings;
use DBI;
use HTML::Entities;
+use Data::Dumper;
use PVE::SafeSyslog;
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;
$self->{dbh}->disconnect();
}
+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,
+ $name, $info, $obj->oclass());
+
+ my $lid = PMG::Utils::lastid($self->{dbh}, 'objectgroup_id_seq');
+
+ $og = PMG::RuleDB::Group->new($name, $info, $obj->oclass());
+ $og->{id} = $lid;
+
+ $obj->{ogroup} = $lid;
+ $id = $obj->save($self, 1);
+ $obj->{id} = $id; # just to be sure
+
+ $self->{dbh}->commit;
+ };
+ if (my $err = $@) {
+ $self->{dbh}->rollback;
+ die $err;
+ }
+ return $og;
+}
+
sub load_groups {
my ($self, $rule) = @_;
$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});
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) = @_;
return undef;
}
-sub new_action {
- my ($self, $obj) = @_;
-
- my $og;
-
- defined($obj) || die "proxmox: undefined object";
-
- eval {
-
- $self->{dbh}->begin_work;
-
- $self->{dbh}->do("INSERT INTO Objectgroup " .
- "(Name, Info, Class) " .
- "VALUES (?, ?, ?)", undef,
- decode_entities($obj->otype_text()),
- $obj->oinfo(),
- $obj->oclass());
-
- my $lid = PMG::Utils::lastid($self->{dbh}, 'objectgroup_id_seq');
-
- $og = PMG::RuleDB::Group->new();
- $og->{id} = $lid;
-
- $obj->{ogroup} = $lid;
- $obj->save($self, 1);
-
- $self->{dbh}->commit;
- };
- if (my $err = $@) {
- $self->{dbh}->rollback;
- die $err;
- }
-
- return $og;
-}
-
sub delete_group {
my ($self, $groupid) = @_;
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();
$obj->load_attr($self, $objid, $ogroup, $value);
}
+sub load_object_full {
+ my ($self, $id, $gid, $exp_otype) = @_;
+
+ my $obj = $self->load_object($id);
+ die "object '$id' does not exists\n" if !defined($obj);
+
+ my $otype = $obj->otype();
+ die "wrong object type ($otype != $exp_otype)\n"
+ if defined($exp_otype) && $otype != $exp_otype;
+
+ die "wrong object group ($obj->{ogroup} != $gid)\n"
+ if $obj->{ogroup} != $gid;
+
+ return $obj;
+}
+
sub load_group_by_name {
my ($self, $name) = @_;
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";
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";
$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});
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)