adding system_usernames config value
authorivan <ivan>
Fri, 9 Jan 2004 21:10:56 +0000 (21:10 +0000)
committerivan <ivan>
Fri, 9 Jan 2004 21:10:56 +0000 (21:10 +0000)
FS/FS/Conf.pm
FS/FS/svc_acct.pm

index b391fe4..2404e59 100644 (file)
@@ -1151,6 +1151,12 @@ httemplate/docs/config.html
     'type'        => 'checkbox',
   },
 
+  {
+    'key'         => 'system_usernames'
+    'section'     => 'username',
+    'description' => 'A list of system usernames that cannot be edited or removed, one per line.  Use a bare username to prohibit modification/deletion of the username in any domain, or username@domain to prohibit modification/deletetion of a specific username and domain.',
+    'type'        => 'textarea',
+  },
 );
 
 1;
index fce4436..3ddd70a 100644 (file)
@@ -427,6 +427,8 @@ The corresponding FS::cust_svc record will be deleted as well.
 sub delete {
   my $self = shift;
 
+  return "can't delete system account" if $self->_check_system;
+
   return "Can't delete an account which is a (svc_forward) source!"
     if qsearch( 'svc_forward', { 'srcsvc' => $self->svcnum } );
 
@@ -515,6 +517,8 @@ sub replace {
   my $error;
   warn "$me replacing $old with $new\n" if $DEBUG;
 
+  return "can't modify system account" if $old->_check_system;
+
   return "Username in use"
     if $old->username ne $new->username &&
       qsearchs( 'svc_acct', { 'username' => $new->username,
@@ -614,6 +618,7 @@ Called by the suspend method of FS::cust_pkg (see L<FS::cust_pkg>).
 
 sub suspend {
   my $self = shift;
+  return "can't suspend system account" if $self->_check_system;
   my %hash = $self->hash;
   unless ( $hash{_password} =~ /^\*SUSPENDED\* /
            || $hash{_password} eq '*'
@@ -839,6 +844,17 @@ sub check {
   $self->SUPER::check;
 }
 
+=item _check_system
+
+=cut
+
+sub _check_system {
+  my $self = shift;
+  scalar( grep { $self->username eq $_ || $self->email eq $_ }
+               $conf->config('system_usernames')
+        );
+}
+
 =item radius
 
 Depriciated, use radius_reply instead.