use strict;
use vars qw( @ISA $nossh_hack $conf $dir_prefix @shells $usernamemin
$usernamemax $passwordmin $username_letter $username_letterfirst
- $username_noperiod
+ $username_noperiod $username_uppercase
$shellmachine $useradd $usermod $userdel $mydomain
$cyrus_server $cyrus_admin_user $cyrus_admin_pass
+ $dirhash
$icradius_dbh
@saltset @pw_set);
use Carp;
$username_letter = $conf->exists('username-letter');
$username_letterfirst = $conf->exists('username-letterfirst');
$username_noperiod = $conf->exists('username-noperiod');
+ $username_uppercase = $conf->exists('username-uppercase');
$mydomain = $conf->config('domain');
if ( $conf->exists('cyrus') ) {
($cyrus_server, $cyrus_admin_user, $cyrus_admin_pass) =
} else {
$icradius_dbh = '';
}
+ $dirhash = $conf->config('dirhash') || 0;
};
@saltset = ( 'a'..'z' , 'A'..'Z' , '0'..'9' , '.' , '/' );
return $error if $error;
my $ulen = $usernamemax || $self->dbdef_table->column('username')->length;
- $recref->{username} =~ /^([a-z0-9_\-\.]{$usernamemin,$ulen})$/
- or return "Illegal username";
- $recref->{username} = $1;
+ if ( $username_uppercase ) {
+ $recref->{username} =~ /^([a-z0-9_\-\.]{$usernamemin,$ulen})$/i
+ or return "Illegal username: ". $recref->{username};
+ $recref->{username} = $1;
+ } else {
+ $recref->{username} =~ /^([a-z0-9_\-\.]{$usernamemin,$ulen})$/
+ or return "Illegal username: ". $recref->{username};
+ $recref->{username} = $1;
+ }
+
if ( $username_letterfirst ) {
$recref->{username} =~ /^[a-z]/ or return "Illegal username";
} elsif ( $username_letter ) {
return "Only root can have uid 0"
if $recref->{uid} == 0 && $recref->{username} ne 'root';
- $error = $self->ut_textn('finger');
- return $error if $error;
+# $error = $self->ut_textn('finger');
+# return $error if $error;
+ $self->getfield('finger') =~
+ /^([\w \t\!\@\#\$\%\&\(\)\-\+\;\:\'\"\,\.\?\/\*\<\>]*)$/
+ or return "Illegal finger: ". $self->getfield('finger');
+ $self->setfield('finger', $1);
$recref->{dir} =~ /^([\/\w\-]*)$/
or return "Illegal directory";
- $recref->{dir} = $1 ||
- $dir_prefix . '/' . $recref->{username}
- #$dir_prefix . '/' . substr($recref->{username},0,1). '/' . $recref->{username}
+ $recref->{dir} = $1;
+ unless ( $recref->{dir} ) {
+ $recref->{dir} = $dir_prefix . '/';
+ if ( $dirhash > 0 ) {
+ for my $h ( 1 .. $dirhash ) {
+ $recref->{dir} .= substr($recref->{username}, $h-1, 1). '/';
+ }
+ } elsif ( $dirhash < 0 ) {
+ for my $h ( reverse $dirhash .. -1 ) {
+ $recref->{dir} .= substr($recref->{username}, $h, 1). '/';
+ }
+ }
+ $recref->{dir} .= $recref->{username};
;
+ }
unless ( $recref->{username} eq 'sync' ) {
if ( grep $_ eq $recref->{shell}, @shells ) {
use IO::File;
my $reader = IO::File->new();
my $writer = IO::File->new();
- my $error = IO::file->new();
+ my $error = IO::File->new();
&Net::SSH::sshopen3( $host, $reader, $writer, $error, @cmd_and_args) or die $!;
my $output_stream = <$writer>;
my $error_stream = <$error>;
if ( length $error_stream ) {
- warn "[FS::svc_acct::ssh] STDERR $error_stream";
+ #warn "[FS::svc_acct::ssh] STDERR $error_stream";
+ die "[FS::svc_acct::ssh] STDERR $error_stream";
}
if ( length $output_stream ) {
warn "[FS::svc_acct::ssh] STDOUT $output_stream";
=head1 VERSION
-$Id: svc_acct.pm,v 1.44 2001-09-19 19:39:24 ivan Exp $
+$Id: svc_acct.pm,v 1.50 2001-10-02 11:10:19 ivan Exp $
=head1 BUGS