[pve-devel] r4853 - pve-access-control/trunk

svn-commits at proxmox.com svn-commits at proxmox.com
Wed Jun 30 07:37:52 CEST 2010


Author: dietmar
Date: 2010-06-30 05:37:46 +0000 (Wed, 30 Jun 2010)
New Revision: 4853

Modified:
   pve-access-control/trunk/AccessControl.pm
   pve-access-control/trunk/ChangeLog
   pve-access-control/trunk/pveum
Log:
	* pveum: new roleadd/rolemod/roledel (Seth)

	* AccessControl.pm (modify_role): create role and modify privileges (Seth)

	* AccessControl.pm (delete_role): delete role functionality (Seth)



Modified: pve-access-control/trunk/AccessControl.pm
===================================================================
--- pve-access-control/trunk/AccessControl.pm	2010-06-29 06:49:41 UTC (rev 4852)
+++ pve-access-control/trunk/AccessControl.pm	2010-06-30 05:37:46 UTC (rev 4853)
@@ -655,6 +655,47 @@
     ident => 1, 
 };
 
+sub modify_role {
+
+    my ($role, $opts) = @_;
+    my $usercfg = load_user_config();
+
+    die "modify role '$role' failed - invalid characters in role name\n" if (!verify_rolename ($role));
+
+    if ($opts->{create}) {
+	die "add role '$role' failed - role already exists\n" if $usercfg->{roles}->{$role};	
+	$usercfg->{roles}->{$role} = {};
+    }
+
+    die "modify role '$role' failed - role does not exist\n" if !$usercfg->{roles}->{$role};
+
+    $usercfg->{roles}->{$role} = {} if !$opts->{append};
+    if ($opts->{privs}) {
+	foreach my $priv (split_list ($opts->{privs})) {
+	    if ($usercfg->{roles}->{$role} && defined ($valid_privs->{$priv})) {
+		$usercfg->{roles}->{$role}->{$priv} = 1;
+	    } else {
+		warn "modify role - ignore invalid priviledge '$priv'\n";
+	    } 
+	}	
+    }
+
+    save_user_config ($usercfg);
+}
+
+sub delete_role {
+    
+    my ($role) = @_;
+
+    my $usercfg = load_user_config();
+
+    delete ($usercfg->{roles}->{$role})
+        if $usercfg->{roles}->{$role};
+
+    save_user_config ($usercfg);
+
+}
+
 sub split_list {
     my $listtxt = shift || '';
 
@@ -810,6 +851,9 @@
 		    next;
 		}
 
+		# make sure to add the role (even if there are no privileges)
+		$cfg->{roles}->{$role} = {} if !$cfg->{roles}->{$role};
+
 		foreach my $priv (split_list ($privlist)) {
 		    if (defined ($valid_privs->{$priv})) {
 			$cfg->{roles}->{$role}->{$priv} = 1;

Modified: pve-access-control/trunk/ChangeLog
===================================================================
--- pve-access-control/trunk/ChangeLog	2010-06-29 06:49:41 UTC (rev 4852)
+++ pve-access-control/trunk/ChangeLog	2010-06-30 05:37:46 UTC (rev 4853)
@@ -1,3 +1,11 @@
+2010-06-29  Proxmox Support Team  <support at proxmox.com>
+
+	* pveum: new roleadd/rolemod/roledel (Seth)
+
+	* AccessControl.pm (modify_role): create role and modify privileges (Seth)
+
+	* AccessControl.pm (delete_role): delete role functionality (Seth)
+
 2010-06-28  Proxmox Support Team  <support at proxmox.com>
 
 	* pveum: new groupadd/groupdel (patch from Seth)

Modified: pve-access-control/trunk/pveum
===================================================================
--- pve-access-control/trunk/pveum	2010-06-29 06:49:41 UTC (rev 4852)
+++ pve-access-control/trunk/pveum	2010-06-30 05:37:46 UTC (rev 4853)
@@ -128,6 +128,50 @@
 
     exit(0);
 
+} elsif ($cmd eq 'roleadd') {
+
+    my $opts = {};
+
+    if (!GetOptions ($opts, 'privs=s')) {
+        exit (-1);
+    }
+
+    my $role = shift;
+
+    die "no role specified\n" if !$role;
+
+    $opts->{create} = 1;
+ 
+    PVE::AccessControl::modify_role($role, $opts);
+
+    exit(0);
+
+} elsif ($cmd eq 'rolemod') {
+
+    my $opts = {};
+
+    if (!GetOptions ($opts, 'append', 'privs=s')) {
+        exit (-1);
+    }
+
+    my $role = shift;
+
+    die "no role specified\n" if !$role;
+
+    PVE::AccessControl::modify_role($role, $opts);
+
+    exit(0);
+
+} elsif ($cmd eq 'roledel') {
+
+    my $role = shift;
+
+    die "no role specified\n" if !$role;
+
+    PVE::AccessControl::delete_role($role);
+
+    exit(0);
+
 } else {
 
     print_usage("unknown command '$cmd'");



More information about the pve-devel mailing list