]> git.proxmox.com Git - pmg-api.git/blobdiff - PMG/UserConfig.pm
implement new role 'helpdesk'
[pmg-api.git] / PMG / UserConfig.pm
index f1134e4aac9e8ee7a7b62f8f47d03b1f54ba0123..f3bc2e315b304ee4942315a8f0ef3179be0742ea 100644 (file)
@@ -81,7 +81,7 @@ my $schema = {
        role => {
            description => "User role. Role 'root' is reseved for the Unix Superuser.",
            type => 'string',
-           enum => ['root', 'admin', 'qmanager', 'audit'],
+           enum => ['root', 'admin', 'helpdesk', 'qmanager', 'audit'],
        },
        firstname => {
            description => "First name.",
@@ -129,10 +129,19 @@ $update_schema->{properties}->{delete} = {
     optional => 1,
 };
 
-my $verity_entry = sub {
+my $verify_entry = sub {
     my ($entry) = @_;
 
     my $errors = {};
+    my $userid = $entry->{userid};
+    if (defined(my $username = $entry->{username})) {
+       if ($userid !~ /^\Q$username\E\@/) {
+           $errors->{'username'} = 'invalid username for userid';
+       }
+    } else {
+       # make sure the username's length is checked
+       $entry->{username} = ($userid =~ s/\@.*$//r);
+    }
     PVE::JSONSchema::check_prop($entry, $schema, '', $errors);
     if (scalar(%$errors)) {
        raise "verify entry failed\n", errors => $errors;
@@ -194,7 +203,7 @@ sub read_user_conf {
                    $d->{$k} = $+{$k} if $+{$k};
                }
                eval {
-                   $verity_entry->($d);
+                   $verify_entry->($d);
                    $cfg->{$d->{userid}} = $d;
                    die "role 'root' is reserved\n"
                        if $d->{role} eq 'root' && $d->{userid} ne 'root@pmg';
@@ -232,19 +241,13 @@ sub write_user_conf {
        $d->{userid} = $userid;
 
        die "invalid userid '$userid'\n" if $userid eq 'root@pmg';
+       $verify_entry->($d);
+       $cfg->{$d->{userid}} = $d;
 
-       eval {
-           $verity_entry->($d);
-           $cfg->{$d->{userid}} = $d;
-
-           if ($d->{userid} ne 'root@pam') {
-               die "role 'root' is reserved\n" if $d->{role} eq 'root';
-               die "unable to add users for realm '$d->{realm}'\n"
-                   if $d->{realm} && $d->{realm} ne 'pmg';
-           }
-       };
-       if (my $err = $@) {
-           die $err;
+       if ($d->{userid} ne 'root@pam') {
+           die "role 'root' is reserved\n" if $d->{role} eq 'root';
+           die "unable to add users for realm '$d->{realm}'\n"
+               if $d->{realm} && $d->{realm} ne 'pmg';
        }
 
        my $line;