#!/usr/bin/perl # MimerDesk # Web based groupware and eLearning environment # www.mimerdesk.org # # Copyright (C) 2001 Ionstream Ltd. # www.ionstream.fi # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the Free # Software Foundation; either version 2 of the License, or (at your option) # any later version. # # This program is distributed with a hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License # for more details. # # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # $Id: userman.html,v 1.21 2002/07/30 20:17:44 inf Exp $ #"""""""""""""""""""""""""""""""""""""""""# # # # MimerDesk: Users # # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # # (c) Ionstream Oy 1999 - 2001 # # # # Programmed by: Teemu Arina # # # #_________________________________________# use strict; use vars qw ($APPLICATION $admin_status $USER $IP @months $trans $LAST_ACT $FORWARDED $TIME_USED $IDLE $form $ref $sth $htmlcolors); use lib::MimerDesk; use File::Path qw(rmtree); use Mail::Sendmail; use CGI::Carp "fatalsToBrowser"; ################# # Configuration # ################# $APPLICATION = 'Tools - Users'; ################ # Main program # ################ read_config('../config/mimerdesk.cfg'); $config{'sorting_default'} = 'info'; $config{'theme'} = 'default'; $htmlcolors = initialize('colors'); $form = decode_multipart(); $form->{'ID'} =~ tr/0-9//cd; $form->{'auth'} =~ tr/0-9a-z//cd; ($USER, $IP, $LAST_ACT, $FORWARDED, $TIME_USED, $IDLE) = authenticate($form->{'ID'}, $form->{'auth'}); $trans = lib::MimerDesk->new_gettext(program => 'users',language => $config{'language'}); $APPLICATION = $trans->gettext('Tools - Users'); @months = ( '', $trans->gettext('January'), $trans->gettext('February'), $trans->gettext('March'), $trans->gettext('April'), $trans->gettext('May'), $trans->gettext('June'), $trans->gettext('July'), $trans->gettext('August'), $trans->gettext('September'), $trans->gettext('October'), $trans->gettext('November'), $trans->gettext('December') ); lock_tables('READ', 'users'); db_list("SELECT * FROM users where nimi = '$USER'"); while (my $ref = $sth->fetchrow_hashref()) {$admin_status = $ref->{'flags'};} db_end(); unlock_tables(); print_template("$config{'theme'}_accfailure") if $admin_status !~ /U0/; if ($form->{'file-to-upload-01'} ne '') {if ($form->{'Upload'} ne 'Upload') {unlink($form->{'file-to-upload-01'});}} if ($form->{'quit'}) {redirect("$config{'loc_server'}$config{'bin_dir'}/index.html?ID=$form->{'ID'}&auth=$form->{'auth'}&quit=quit");} elsif ($form->{'viewchange'}) { if ($form->{'menu'} eq 'removeusers') {print_template("$config{'theme'}_usersremove");} elsif ($form->{'menu'} eq 'listusers') {print_template("$config{'theme'}_userlist");} elsif ($form->{'menu'} eq 'addusers') {print_template("$config{'theme'}_usersadd");} elsif ($form->{'menu'} eq 'disableusers') {print_template("$config{'theme'}_userlist");} elsif ($form->{'menu'} eq 'configure') {print_template("$config{'theme'}_userconfig");} elsif ($form->{'menu'} eq 'matrikkeli') {redirect("matrikkeli.html?ID=$form->{'ID'}&auth=$form->{'auth'}");} } elsif ($form->{'updateconfig'}) {update_config();} elsif ($form->{'Upload'}) {fileupload();} elsif ($form->{'Upload'}) {print_template("$config{'theme'}_usersadd");} elsif ($form->{'delete_users'} && $form->{'invite_these'} =~ tr/A-Za-z0-9_ //c == 0) {delete_users();} elsif ($form->{'add_user'} && $form->{'invite_these'} =~ tr/0-9 //c == 0) {add_user();} else {print_template("$config{'theme'}_usersadd");} ################# # Get user list # ################# sub get_userlist { my ($userlist,%columns,$sort); my $fulltemplate = shift; my @columns = qw(nimi info note2 note1 company note3 title expire); $userlist = starttable(cellpadding => 3,cellspacing => 1,gridcolor => 'black',width => '99%'). startrow(); %columns = (nimi => 'Username',expire => 'Expires'); lock_tables('READ', 'profileparts'); db_list("SELECT RECORD,NAME FROM profileparts"); while (my $ref = $sth->fetchrow_hashref()) {$columns{$ref->{'RECORD'}} = $ref->{'NAME'};} db_end(); unlock_tables(); foreach (@columns) { $userlist .= column(bgcolor => $htmlcolors->{'title'}, class => 'blackTitle', content => tagged('a',{href => "userman.html?ID=$form->{'ID'}&auth=$form->{'auth'}&menu=listusers&viewchange=1&order=$_", class => 'blackTitle', content => $columns{$_} })); } $userlist .= endrow(); if ($form->{'order'} && grep {$_ eq $form->{'order'}} @columns) {$sort = $form->{'order'};} else {$sort = $config{'sorting_default'};} lock_tables('READ', 'users'); db_list("SELECT * FROM users order by $sort"); while (my $ref = $sth->fetchrow_hashref()) { if ($ref->{'expire'} eq '-1') {$ref->{'expire'} = 'Never';} else { my (undef,undef,undef,$mday,$mon,$year) = utc_epoch2date($ref->{'expire'}); $ref->{'expire'} = "$year/$mon/$mday"; } $userlist .= startrow(). column(bgcolor => 'white',class => 'content',content => tagged('a',{href => "javascript:popUp2('user=$ref->{'nimi'}', 800, 600, '$ref->{'nimi'}')",content => $ref->{'nimi'}}).' '). column(bgcolor => 'white',class => 'content',content => $ref->{'info'}.' '). column(bgcolor => 'white',class => 'content',content => $ref->{'note2'}.' '). column(bgcolor => 'white',class => 'content',content => $ref->{'note1'}.' '). column(bgcolor => 'white',class => 'content',content => $ref->{'company'}.' '). column(bgcolor => 'white',class => 'content',content => $ref->{'note3'}.' '). column(bgcolor => 'white',class => 'content',content => $ref->{'title'}.' '). column(bgcolor => 'white',class => 'content',content => $ref->{'expire'}.' '). endrow(); } db_end(); unlock_tables(); $userlist .= endtable('hasgrid'); $$fulltemplate =~ s/<>/$userlist/m; } ######################## # update configuration # ######################## sub update_config { my ($lastfield,%specs); lock_tables('WRITE', 'profileparts'); ($lastfield) = db_select('PID','profileparts',undef,'PID DESC','1'); foreach ('A'..$lastfield->{'PID'}) { my ($visible,$editable) = (); if ($form->{"${_}_visible"}) {$visible = 'Y';} else {$visible = 'N';} if ($form->{"${_}_edit"}) {$editable = 'Y';} else {$editable = 'N';} %specs = (EDITABLE => $editable, VISIBLE => $visible); $specs{'NAME'} = prepare_fordb($form->{$_}) if $form->{$_} && $form->{$_} !~ /^phone[0-9]$/; db_update('profileparts',\%specs, "PID = '$_'"); } unlock_tables(); write_log("$USER changed custom field configuration!", 'notify'); print_template("$config{'theme'}_userconfig",'success',$trans->gettext('Saved changes.') ); } ############################### # Generate custom fields edit # ############################### sub gen_fieldedit { my ($fieldlist); my $fulltemplate = shift; $fieldlist = starttable(cellpadding => 2,cellspacing => 1,gridcolor => 'black',align => 'center',width => ''). startrow(). column(bgcolor => $htmlcolors->{'title'}, class => 'blackTitle', content => 'Enabled'). column(bgcolor => $htmlcolors->{'title'}, class => 'blackTitle', content => 'Field name'). column(bgcolor => $htmlcolors->{'title'}, class => 'blackTitle', content => 'Editable by user'). endrow(); lock_tables('READ', 'profileparts'); db_list("SELECT * FROM profileparts order by PID"); while (my $ref = $sth->fetchrow_hashref()) { my $checked = undef; my $checked2 = undef; $checked = 1 if $ref->{'VISIBLE'} eq 'Y'; $checked2 = 1 if $ref->{'EDITABLE'} eq 'Y'; $fieldlist .= startrow(). column(bgcolor => 'white', class => 'content', align => 'center', content => checkbox(name => "$ref->{'PID'}_visible", value => 1, checked => $checked)); if ($ref->{'NAME'} !~ /^phone[0-9]$/) { $fieldlist .= column(bgcolor => 'white', class => 'content', content => textfield(name => $ref->{'PID'}, value => $ref->{'NAME'}, size => 15, maxlength => 30)); } else { $fieldlist .= column(bgcolor => 'white', class => 'content', content => $ref->{'NAME'}); } $fieldlist .= column(bgcolor => 'white', class => 'content', align => 'center', content => checkbox(name => "$ref->{'PID'}_edit", value => 1, checked => $checked2)). endrow(); } db_end(); unlock_tables(); $fieldlist .= endtable('hasgrid'); $$fulltemplate =~ s/<>/$fieldlist/m; } #################################### # Delete users pages form handling # #################################### sub delete_users { # Todo: check if user exists foreach (split / /, $form->{'invite_these'}) { lock_tables('WRITE', 'users', 'groupusers','sessions','filedescs'); db_delete('groupusers',"USER = '$_'"); db_delete('sessions',"USER = '$_'"); db_delete('filedescs',"USER = '$_' and MODE = 'USER'"); my($refz) = db_select('UID','users',"nimi = '$_'"); my $user_messages = "$refz->{'UID'}_messages"; # the user's table name db_end(); db_delete('users',"nimi = '$_'"); unlock_tables(); drop_table($user_messages); write_log("User $_ was removed by $USER"); if (!rmtree("$config{'file_dir'}/users/$_")) { write_log( "$USER: Error deleting directory $config{'file_dir'}/users/$_. $!", 'error' ); } opendir(DIR, "$config{'dir_userpics'}") or write_log("$USER: Error opening dir $config{'dir_userpics'}. $!", 'error'); foreach my $user (readdir DIR) { next if /^\./; next if -d; if (/^$_\./) { unlink("$config{'loc_userpics'}/$user"); last; } } closedir DIR; } if (!$form->{'invite_these'}) {print_template("$config{'theme'}_usersremove",'error',$trans->gettext('You have to select atleast one user before you can delete anyone.') );} else { $form->{'invite_these'} =~ s/ /, /g; print_template("$config{'theme'}_usersremove",'success',$trans->gettext('The users you selected have been removed from the server including their files and home directory.'),"Users: $form->{'invite_these'}"); } } ################################ # Add user pages form handling # ################################ sub add_user { my($expire,$adduser,$flags); if ($form->{'username'} eq '') {print_template("$config{'theme'}_usersadd");} elsif (($form->{'username'} =~ tr/A-Za-z0-9_//c) > 0 || ($form->{'password'} =~ tr/A-Za-z0-9_//c) > 0) {print_template("$config{'theme'}_usersadd",'error',$trans->gettext('You have supplied illegal characters. The allowed ones are: A-Z, a-z, 0-9 and _.') );} lock_tables('WRITE', 'users'); db_list("select * from users where nimi = '$form->{'username'}'"); while (my $ref = $sth->fetchrow_hashref()) {$adduser = $ref->{'nimi'};} db_end(); if ($adduser) { unlock_tables(); print_template("$config{'theme'}_usersadd",'error',sprintf($trans->gettext('The user you tried to add already exists in the database. Please choose another username. User: %d'), $adduser) ); } $form->{'password1'} = crypt($form->{'password'}, 'aa'); my $current_date = time(); $flags .= "S0" if $form->{'sessions'}; $flags .= "N0" if $form->{'news'}; $flags .= "I0" if $form->{'config'}; $flags .= "L0" if $form->{'links'}; $flags .= "R0" if $form->{'reviews'}; $flags .= "M0" if $form->{'forums'}; $flags .= "C0" if $form->{'chat'}; $flags .= "G0" if $form->{'groups'}; $flags .= "U0" if $form->{'userman'}; $flags .= "P0" if $form->{'publicsite'}; $flags .= "V0" if $form->{'voting'}; $flags .= "T0" if $form->{'tv'}; # Matrikkeli # if($form->{'matr'} == 1) {$flags .= "A0";} # elsif($form->{'matr'} == 2) {$flags .= "A1";} # /Matrikkeli if ($form->{'expire'} eq 'no') {$expire = '-1';} else { $form->{'day'} =~ s/^day (\d+)/$1/; $form->{'month'} =~ s/^month (\d+)/$1/; $form->{'year'} =~ s/^year (\d+)/$1/; $expire = local_date2utc_epoch(0,0,0,$form->{'day'},$form->{'month'},$form->{'year'}); } my (%specs,$phonenumber); lock_tables('READ', 'profileparts'); db_list("SELECT RECORD,NAME,PID FROM profileparts where VISIBLE = 'Y' order by PID"); while (my $ref = $sth->fetchrow_hashref()) { if ($ref->{'NAME'} =~ /^phone(\d)$/) { $phonenumber = $1; $specs{$ref->{'RECORD'}} = qq[$form->{"phone${phonenumber}_menu"}|$form->{$ref->{'RECORD'}}]; } elsif ($ref->{'RECORD'} =~ /^age$/) { $form->{'age1'} =~ tr/0-9//cd; $form->{'age2'} =~ tr/0-9//cd; $form->{'age3'} =~ tr/0-9//cd; $specs{$ref->{'RECORD'}} = "$form->{'age1'}.$form->{'age2'}.$form->{'age3'}"; } else {$specs{$ref->{'RECORD'}} = $form->{$ref->{'RECORD'}};} } db_end(); unlock_tables(); my %user = ( 'nimi' => $form->{'username'}, 'password' => $form->{'password1'}, 'date' => $current_date, 'timezone' => $config{'timezone'}, 'expire' => $expire, 'account' => 'E', 'flags' => $flags, 'quota' => $config{'user_quota'}, %specs ); foreach (keys %user) {($user{$_}) = prepare_fordb($user{$_});} db_insert("users",\%user); db_end(); unlock_tables(); create_table(get_lastid().'_messages', 'IDnumber INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY', "folder varchar(20) binary not NULL default 'Inbox'", 'sender varchar(15) binary not null', 'target varchar(25) binary not null', 'time int unsigned NULL', 'status varchar(30) NULL', 'message text NULL'); lock_tables('WRITE', 'groupusers'); foreach (split / /, $form->{'invite_these'}) { my %group = ( 'GID' => $_, 'USER' => $form->{'username'}, 'RIGHTS' => $config{'new_groupmember'} ); db_insert('groupusers',\%group); } unlock_tables(); write_log("User $form->{'username'} was added by $USER"); mail_account($form->{'username'}, $form->{'password'}, $specs{'email'}) if $form->{'send_mail'} eq 'yes'; print_template("$config{'theme'}_usersadd", 'success',sprintf($trans->gettext('The user(s) has been successfully added into the database. User(s) added: %s'),$form->{'username'}), 'user_added'); } ################################## # Send account by e-mail to user # ################################## sub mail_account { my (%mail); my ($username, $password, $email) = @_; return if $email !~ /^.+\@.+$/; lock_tables('READ', 'mailmessages'); db_list("select * from mailmessages where MID = '1'"); while (my $ref = $sth->fetchrow_hashref()) { $mail{'subject'} = $ref->{'subject'}; $mail{'message'} = $ref->{'message'}; } db_end(); unlock_tables(); $mail{'message'} =~ s/<>/$username/gm; $mail{'message'} =~ s/<>/$password/gm; $Mail::Sendmail::mailcfg{'retries'} = 0; $mail{'From'} = "MimerDesk <$config{'monitor_mail'}>"; $mail{'To'} = "$email"; my $server = $config{'mail_server'}; $mail{'Smtp'} = $server if $server; if (sendmail(%mail)) {} else {write_log("Error sending message: $Mail::Sendmail::error", 'error');} } ################################## # Read the template and print it # ################################## sub print_template { my (@categories,$gen,$stuff,$ref,$fulltemplate,$template,%dropvalues,@order,$profile,$content,$section); my ($template,$mode,$text,$user_added) = @_; print_header('pragma'); $ref = get_template('maintemplate',$template); $ref->{'maintemplate'} =~ s/<>/$ref->{$template}/m; $fulltemplate = $ref->{'maintemplate'}; $fulltemplate = create_buttons($fulltemplate, 'Tools', 'Users', $form); $ref = get_template('js_doClock', 'js_help', 'js_gotosite'); my $javascripts = $ref->{'js_doClock'}.$ref->{'js_help'}.$ref->{'js_gotosite'}; $fulltemplate =~ s/<>/$javascripts/m; $fulltemplate =~ s/<>/minea/gm; $fulltemplate =~ s/<>/MimerDesk\: $APPLICATION/m; if ($form->{'menu'} eq 'listusers') {get_userlist(\$fulltemplate);} elsif ($form->{'menu'} eq 'removeusers') {$fulltemplate = gen_removeusers($fulltemplate);} elsif ($template eq "$config{'theme'}_usersadd") {$fulltemplate = gen_addusers($fulltemplate);} elsif ($template eq "$config{'theme'}_userconfig") {gen_fieldedit(\$fulltemplate);} # elsif ($form->{'menu'} eq 'disableusers') {$fulltemplate = gen_disableusers("SELECT * FROM users order by $config{'sorting_default'}",$fulltemplate);} $fulltemplate =~ s/<>/$config{'note1_name'}/gm; $fulltemplate =~ s/<>/$config{'note2_name'}/gm; if ($text) {$text .= "

";} %dropvalues = ( 'work' => $trans->gettext('Work'), 'home' => $trans->gettext('Home'), 'other' => $trans->gettext('Other'), 'fax' => $trans->gettext('Fax'), 'mobile' => $trans->gettext('Mobile'), ); @order = qw(work home mobile fax other); $fulltemplate =~ s/<>/$text
/m; $fulltemplate =~ s/<>/$mode/m; $fulltemplate = replace_tags($fulltemplate, $USER, $form->{'auth'}, $form->{'ID'}, $TIME_USED); $fulltemplate = add_popups($fulltemplate, $USER, $form->{'auth'}, $form->{'ID'}); if ($template ne "$config{'theme'}_usersadd") { print $fulltemplate; db_end('disconnect'); exit; } $form = undef if $user_added; # Quick hack: If user has been added, empty form my $profile = starttable(width => '70%',align => 'center',cellspacing => 1,cellpadding => 2,gridcolor => 'black'). startrow(bgcolor => "$htmlcolors->{'title'}"). column(class => 'blackTitle',align => 'center',colspan => 2,content => "User information"). endrow(). startrow(). column(class => 'content',width => 135,bgcolor => "$htmlcolors->{'sectitle'}",content => ' '.$trans->gettext('Username') ). column(class => 'content',bgcolor => '#FFFFFF',content => textfield(name => 'username', value => $form->{'username'}, size => 30, maxlength => 15)). endrow(); lock_tables('READ', 'profileparts'); db_list("SELECT * FROM profileparts where VISIBLE = 'Y' order by PID"); while (my $ref = $sth->fetchrow_hashref()) { if ($ref->{'NAME'} =~ /^phone(\d)$/) { my $phonenumber = $1; $section = dropdownmenu(name => "phone${phonenumber}_menu", order => \@order, default => 'work', values => \%dropvalues); } else {$section = " $ref->{'NAME'}";} if ($ref->{'RECORD'} eq 'age') { $content = textfield(name => 'age1', value => $form->{'age1'}, size => 2, maxlength => 2).'.'. textfield(name => 'age2', value => $form->{'age2'}, size => 2, maxlength => 2).'.'. textfield(name => 'age3', value => $form->{'age3'}, size => 4, maxlength => 4); } else { $content = textfield(name => $ref->{'RECORD'}, value => $form->{$ref->{'RECORD'}}, size => 30, maxlength => $ref->{'SIZE'}); } $profile .= startrow(). column(class => 'content',width => 135,bgcolor => "$htmlcolors->{'sectitle'}",content => $section). column(class => 'content',bgcolor => '#FFFFFF',content => $content). endrow(); } db_end(); unlock_tables(); $profile .= startrow(). column(class => 'content',width => 135,bgcolor => "$htmlcolors->{'sectitle'}",content => ' '.$trans->gettext('Password') ). column(class => 'content', bgcolor => '#FFFFFF', content => textfield(name => 'password', value => $form->{'password'}, size => 15, maxlength => 15).'  '. tagged('a',{href => 'javascript:getPassword()', content => image(align => 'absmiddle', src => "$config{'loc_pictures'}/generatepassword.gif")})). endrow(). endtable('hasgrid'); $fulltemplate =~ s/<>/$profile/m; print $fulltemplate; db_end('disconnect'); exit; } ################## # HTML generator # ################## sub html_generator { my ($white_space); if ($_[0] eq 'start'){return "\n";} elsif ($_[3]){$white_space = "";} elsif ($_[0] eq 'end'){return "\n";} elsif ($_[2] eq 'yes'){$white_space = " $_[1]";} elsif ($_[2] eq 'user') {$white_space = " $_[1]";} else {$white_space = "$_[1]";} return "$white_space\n"; } ############################## # Generoi add users listaus # ############################## sub gen_addusers { my ($groups); my ($fulltemplate) = @_; lock_tables('READ', 'groups'); db_list("select GID,GRPNAME from groups order by GRPNAME"); while (my $ref = $sth->fetchrow_hashref()) {$groups .= qq[\n];} db_end(); unlock_tables(); $fulltemplate =~ s/<>/$groups/m; return $fulltemplate; } ########################### # Generoi delete listaus # ########################### sub gen_removeusers { my ($users); my ($fulltemplate) = @_; lock_tables('READ', 'users'); db_list("select nimi,info from users order by nimi"); while (my $ref = $sth->fetchrow_hashref()) { if($ref->{'nimi'} ne $USER && $ref->{'nimi'} ne 'sysadmin') {$users .= qq[\n];} } db_end(); unlock_tables(); $fulltemplate =~ s/<>/$users/m; return $fulltemplate; } ################################## # Siirretyn tiedoston käsittely # ################################## sub fileupload { my ($line_number,$user_count,$rivi,$realname,$note1,$note2,$username,$password,$adduser); open FILE, "<$form->{'file-to-upload-01'}" or write_log("$USER: Could not open file named $form->{'file-to-upload-01'}!", "error"); flock FILE, 1; my @syntax = ; close FILE; unlink($form->{'file-to-upload-01'}); foreach $rivi (@syntax) { $line_number = $line_number + 1; next if $rivi =~ /^\#/; if ($rivi =~ /\;/ && $rivi !~ /(.*)\;(.*)\;(.*)\;(.*)\;(.*);/) {print_template("$config{'theme'}_usersadd",'error', sprintf($trans->gettext('Syntax error. The line must contain atleast four symbols and all the fields must be filled. Error in line: %s'), $line_number));} else { chomp $rivi; $rivi =~ /(.*)\;(.*)\;(.*)\;(.*)\;(.*);/; $realname = $1; $realname =~ tr/\/\&\;\`\'\\\"\|\*\?\~\<\>\^\(\)\[\]\{\}\n\r//d; $note1 = $2; $note1 =~ s/\;//g; $note2 = $3; $note2 =~ s/\;//g; $username = $4; $password = $5; if (($username =~ tr/A-Za-z0-9_//c) > 0 || ($password =~ tr/A-Za-z0-9_//c) > 0) {print_template("$config{'theme'}_usersadd",'error',sprintf($trans->gettext('You have supplied illegal characters. The allowed ones are: A-Z, a-z, 0-9 and _. Error in line: %s'), $line_number) );} elsif (length($password) < $config{'min_pass_length'}) {print_template("$config{'theme'}_usersadd",'error',sprintf($trans->gettext('The password is too short! Error in line: %s'), $line_number) );} else { lock_tables('READ', 'users'); db_list("select * from users where nimi = '$username'"); while (my $ref = $sth->fetchrow_hashref()) {$adduser = $ref->{'nimi'};} db_end(); unlock_tables(); if ($adduser eq $username) {print_template("$config{'theme'}_usersadd",'error',sprintf($trans->gettext('The user you tried to add already exists in the database. Please choose another username. Error in line: %s'), $line_number) );} } } } foreach $rivi (@syntax) { next if $rivi =~ /^\#/; chomp $rivi; $user_count = $user_count + 1; $rivi =~ /^(.*)\;(.*)\;(.*)\;(.*)\;(.*)\;/; $realname = $1; $realname =~ tr/\/\&\;\`\'\\\"\|\*\?\~\<\>\^\(\)\[\]\{\}\n\r//d; $note1 = $2; $note1 =~ s/\;//g; $note2 = $3; $note2 =~ s/\;//g; $username = $4; $username = lc $username; $password = $5; $password = crypt($password, 'aa'); lock_tables('WRITE', 'users'); my %user = ( 'nimi' => $username, 'info' => $realname, 'timezone' => $config{'timezone'}, 'note1' => $note1, 'note2' => $note2, 'password' => $password, 'date' => time(), 'expire' => '-1', 'quota' => $config{'user_quota'} ); db_insert('users',\%user); create_table(get_lastid().'_messages', 'IDnumber INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY', "folder varchar(20) binary not NULL default 'Inbox'", 'sender varchar(15) binary not null', 'target varchar(25) binary not null', 'time int unsigned NULL', 'status varchar(30) NULL', 'message text NULL'); unlock_tables(); write_log("User $username was added by $USER"); } print_template("$config{'theme'}_usersadd",'success',sprintf($trans->gettext('The user(s) has been successfully added into the database. Number of users: %s'), $user_count) ); }