[pve-devel] r5523 - in pve-access-control/trunk: . PVE test
svn-commits at proxmox.com
svn-commits at proxmox.com
Tue Feb 15 11:05:05 CET 2011
Author: dietmar
Date: 2011-02-15 11:05:05 +0100 (Tue, 15 Feb 2011)
New Revision: 5523
Added:
pve-access-control/trunk/PVE/ACLCache.pm
Modified:
pve-access-control/trunk/ChangeLog
pve-access-control/trunk/PVE/AccessControl.pm
pve-access-control/trunk/PVE/Makefile
pve-access-control/trunk/test/perm-test1.pl
Log:
Modified: pve-access-control/trunk/ChangeLog
===================================================================
--- pve-access-control/trunk/ChangeLog 2011-02-15 09:54:34 UTC (rev 5522)
+++ pve-access-control/trunk/ChangeLog 2011-02-15 10:05:05 UTC (rev 5523)
@@ -1,5 +1,7 @@
2011-02-15 Proxmox Support Team <support at proxmox.com>
+ * PVE/ACLCache.pm: move code into new file.
+
* test/perm-test1.pl: modified to use new PVE::ACLCache class.
* PVE/AccessControl.pm: add new class PVE::ACLCache (speed up ACL
Added: pve-access-control/trunk/PVE/ACLCache.pm
===================================================================
--- pve-access-control/trunk/PVE/ACLCache.pm (rev 0)
+++ pve-access-control/trunk/PVE/ACLCache.pm 2011-02-15 10:05:05 UTC (rev 5523)
@@ -0,0 +1,88 @@
+package PVE::ACLCache;
+
+use strict;
+use warnings;
+use PVE::AccessControl;
+
+sub new {
+ my ($class, $user_cfg) = @_;
+
+ my $self = {
+ cfg => $user_cfg,
+ cache => {},
+ };
+
+ bless $self;
+
+ return $self;
+}
+
+sub compile {
+ my ($self, $user) = @_;
+
+ if ($user eq 'root') { # root can do anything
+ return {'/' => 'Administrator'};
+ }
+
+ my $res = {};
+ my $cfg = $self->{cfg};
+
+ foreach my $path (sort keys %{$cfg->{acl}}) {
+ my @ra = PVE::AccessControl::roles($cfg, $user, $path);
+
+ my $privs = {};
+ foreach my $role (@ra) {
+ if (my $privset = $cfg->{roles}->{$role}) {
+ foreach my $p (keys %$privset) {
+ $privs->{$p} = 1;
+ }
+ }
+ }
+
+ $res->{$path} = $privs;
+ }
+
+ return $res;
+}
+
+sub permissions {
+ my ($self, $user, $path) = @_;
+
+ my $cache = $self->{cache};
+
+ my $acl = $cache->{$user};
+
+ if (!$acl) {
+ $acl = $cache->{$user} = $self->compile($user);
+ }
+
+ my $perm;
+
+ if (!($perm = $acl->{$path})) {
+ $perm = {};
+ foreach my $p (sort keys %$acl) {
+ my $final = ($path eq $p);
+
+ next if !(($p eq '/') || $final || ($path =~ m|^$p/|));
+
+ $perm = $acl->{$p};
+ }
+ $acl->{$path} = $perm;
+ }
+
+ return $perm;
+}
+
+sub check {
+ my ($self, $user, $path, $privs) = @_;
+
+ my $perm = $self->permissions($user, $path);
+
+ foreach my $priv (@$privs) {
+ return undef if !$perm->{$priv};
+ };
+
+ return 1;
+};
+
+1;
Modified: pve-access-control/trunk/PVE/AccessControl.pm
===================================================================
--- pve-access-control/trunk/PVE/AccessControl.pm 2011-02-15 09:54:34 UTC (rev 5522)
+++ pve-access-control/trunk/PVE/AccessControl.pm 2011-02-15 10:05:05 UTC (rev 5523)
@@ -1054,90 +1054,4 @@
return 1;
}
-package PVE::ACLCache;
-
-use strict;
-use warnings;
-
-sub new {
- my ($class, $user_cfg) = @_;
-
- my $self = {
- cfg => $user_cfg,
- cache => {},
- };
-
- bless $self;
-
- return $self;
-}
-
-sub compile {
- my ($self, $user) = @_;
-
- if ($user eq 'root') { # root can do anything
- return {'/' => 'Administrator'};
- }
-
- my $res = {};
- my $cfg = $self->{cfg};
-
- foreach my $path (sort keys %{$cfg->{acl}}) {
- my @ra = PVE::AccessControl::roles($cfg, $user, $path);
-
- my $privs = {};
- foreach my $role (@ra) {
- if (my $privset = $cfg->{roles}->{$role}) {
- foreach my $p (keys %$privset) {
- $privs->{$p} = 1;
- }
- }
- }
-
- $res->{$path} = $privs;
- }
-
- return $res;
-}
-
-sub permissions {
- my ($self, $user, $path) = @_;
-
- my $cache = $self->{cache};
-
- my $acl = $cache->{$user};
-
- if (!$acl) {
- $acl = $cache->{$user} = $self->compile($user);
- }
-
- my $perm;
-
- if (!($perm = $acl->{$path})) {
- $perm = {};
- foreach my $p (sort keys %$acl) {
- my $final = ($path eq $p);
-
- next if !(($p eq '/') || $final || ($path =~ m|^$p/|));
-
- $perm = $acl->{$p};
- }
- $acl->{$path} = $perm;
- }
-
- return $perm;
-}
-
-sub check {
- my ($self, $user, $path, $privs) = @_;
-
- my $perm = $self->permissions($user, $path);
-
- foreach my $priv (@$privs) {
- return undef if !$perm->{$priv};
- };
-
- return 1;
-};
-
1;
Modified: pve-access-control/trunk/PVE/Makefile
===================================================================
--- pve-access-control/trunk/PVE/Makefile 2011-02-15 09:54:34 UTC (rev 5522)
+++ pve-access-control/trunk/PVE/Makefile 2011-02-15 10:05:05 UTC (rev 5523)
@@ -3,4 +3,5 @@
.PHONY: install
install:
install -D -m 0644 AccessControl.pm ${DESTDIR}${PERLDIR}/PVE/AccessControl.pm
+ install -D -m 0644 ACLCache.pm ${DESTDIR}${PERLDIR}/PVE/ACLCache.pm
make -C API2 install
\ No newline at end of file
Modified: pve-access-control/trunk/test/perm-test1.pl
===================================================================
--- pve-access-control/trunk/test/perm-test1.pl 2011-02-15 09:54:34 UTC (rev 5522)
+++ pve-access-control/trunk/test/perm-test1.pl 2011-02-15 10:05:05 UTC (rev 5523)
@@ -3,6 +3,7 @@
use strict;
use PVE::Tools;
use PVE::AccessControl;
+use PVE::ACLCache;
use Getopt::Long;
my $cfgfn = "user.cfg.ex1";
More information about the pve-devel
mailing list