summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormark <mark>2010-10-04 22:17:22 +0000
committermark <mark>2010-10-04 22:17:22 +0000
commit22136ecc8353ff82c9a402218ce849db6cf05dab (patch)
tree209f07565e700c1749ac6645768c9513b0dc7bd8
parent594f6993d818db68b15ecfb6c339e5d23be50950 (diff)
fs_ system accounts, RT#8731
-rw-r--r--FS/FS/access_user.pm24
-rw-r--r--httemplate/edit/access_user.html18
-rw-r--r--httemplate/edit/process/access_user.html10
3 files changed, 46 insertions, 6 deletions
diff --git a/FS/FS/access_user.pm b/FS/FS/access_user.pm
index 72e914068..075733a68 100644
--- a/FS/FS/access_user.pm
+++ b/FS/FS/access_user.pm
@@ -132,9 +132,8 @@ sub insert {
sub htpasswd_kludge {
my $self = shift;
-
- #awful kludge to skip setting htpasswd for fs_* users
- return '' if $self->username =~ /^fs_/;
+
+ return '' if $self->is_system_user;
unshift @_, '-c' unless -e $htpasswd_file;
if (
@@ -512,6 +511,25 @@ sub default_customer_view {
}
+=item is_system_user
+
+Returns true if this user has the name of a known system account. These
+users will not appear in the htpasswd file and can't have passwords set.
+
+=cut
+
+sub is_system_user {
+ my $self = shift;
+ return grep { $_ eq $self->username } ( qw(
+ fs_queue
+ fs_daily
+ fs_selfservice
+ fs_signup
+ fs_bootstrap
+ fs_selfserv
+) );
+}
+
=back
=head1 BUGS
diff --git a/httemplate/edit/access_user.html b/httemplate/edit/access_user.html
index 22cf89621..86ce25374 100644
--- a/httemplate/edit/access_user.html
+++ b/httemplate/edit/access_user.html
@@ -20,9 +20,8 @@
'user_custnum' => 'Customer (optional)',
'disabled' => 'Disable employee',
},
- 'edit_callback' => sub { my( $c, $o ) = @_;
- $o->set('_password', '');
- },
+ 'edit_callback' => \&edit_callback,
+ 'field_callback'=> \&field_callback,
'viewall_dir' => 'browse',
'html_bottom' =>
sub {
@@ -62,4 +61,17 @@ my $check_user_custnum_search = <<END;
</SCRIPT>
END
+sub edit_callback {
+ my ($c, $o, $f, $opt) = @_;
+ $o->set('_password', '');
+}
+
+sub field_callback {
+ my ($c, $o, $f) = @_;
+ if($f->{'type'} eq 'password' and $o->is_system_user) {
+ $f->{'type'} = 'hidden';
+ $f->{'disabled'} = 1;
+ }
+}
+
</%init>
diff --git a/httemplate/edit/process/access_user.html b/httemplate/edit/process/access_user.html
index e6258a9b1..8e7e70a06 100644
--- a/httemplate/edit/process/access_user.html
+++ b/httemplate/edit/process/access_user.html
@@ -10,6 +10,7 @@
'process_m2m' => { 'link_table' => 'access_usergroup',
'target_table' => 'access_group',
},
+ 'precheck_callback'=> \&precheck_callback,
)
%>
% }
@@ -23,4 +24,13 @@ if ( FS::Conf->new->exists('disable_acl_changes') ) {
die "shouldn't be reached";
}
+sub precheck_callback {
+ my $cgi = shift;
+ my $o = FS::access_user->new({username => $cgi->param('username')});
+ if( $o->is_system_user and !$cgi->param('usernum') ) {
+ $cgi->param('username','');
+ return "username '".$o->username."' reserved for system account."
+ }
+ return '';
+}
</%init>