Server IP : 195.201.23.43 / Your IP : 3.149.255.21 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/samba/ |
Upload File : |
#!/usr/bin/perl # make_epass.cgi # Create or update the samba password file from the list of Unix users require './samba-lib.pl'; &ReadParse(); # check acls &error_setup("$text{'eacl_aviol'}ask_epass.cgi"); &error("$text{'eacl_np'} $text{'eacl_pmpass'}") unless $access{'maint_makepass'}; # make &ui_print_header(undef, $text{'mkpass_title'}, ""); &error_setup($text{'mkpass_convfail'}); $| = 1; if ($config{'smb_passwd'} =~ /^(.*)\/([^\/]+)$/) { mkdir($1, 0700); } &lock_file($config{'smb_passwd'}); @ulist = &list_users(); map { $suser{$_->{'name'}} = $_ } @ulist; print "$text{'mkpass_msg'}<p>\n"; @skip = split(/[ \t,]/ , $in{"skip_list"}); @include = split(/[ \t,]/ , $in{"include_list"}); print &ui_columns_start([ $text{'mkpass_user'}, $text{'mkpass_action'} ]); setpwent(); while(@uinfo = getpwent()) { # Get new and existing user details local ($c1, $c2, $m); local $huinfo = &html_escape($uinfo[0]); $uexists{$uinfo[0]}++; local $su = $suser{$uinfo[0]}; # Check if this user would be skipped if ($in{'who'} == 1 && &check_user_list(\@uinfo, \@skip) || $in{'who'} == 0 && !&check_user_list(\@uinfo, \@include)) { $skipcount++; } elsif ($su && $in{"update"}) { if ($su->{'opts'}) { # new-style user if ($uinfo[2] == $su->{'uid'}) { $m = $text{'mkpass_same'}; } else { $su->{'uid'} = $uinfo[2]; $su->{'real'} = $uinfo[6]; &modify_user($su); $m = $text{'mkpass_update'}; $c1 = "<i>"; $c2 = "</i>"; $modified++; } } else { # old-style user if ($uinfo[2] == $su->{'uid'} && $uinfo[6] eq $su->{'real'} && $uinfo[7] eq $su->{'home'} && $uinfo[8] eq $su->{'shell'}) { $m = $text{'mkpass_same'}; } else { $su->{'uid'} = $uinfo[2]; $su->{'real'} = $uinfo[6]; $su->{'home'} = $uinfo[7]; $su->{'shell'} = $uinfo[8]; &modify_user($su); $m = $text{'mkpass_update'}; $c1 = "<i>"; $c2 = "</i>"; $modified++; } } } elsif ($in{"add"} && !$su) { local $nu = { 'name' => $uinfo[0], 'uid' => $uinfo[2] }; local @flags = ("U"); $c1 = "<b>"; $c2 = "</b>"; $m = $text{'mkpass_add'}; if ($in{'newmode'} == 0) { $nu->{'pass1'} = "NO PASSWORDXXXXXXXXXXXXXXXXXXXXX"; $nu->{'pass2'} = $nu->{'pass1'}; push(@flags, "N"); } else { $nu->{'pass1'} = $nu->{'pass2'} = ("X" x 32); if ($in{'newmode'} == 2) { $setpass{$uinfo[0]} = $in{'newpass'}; } else { push(@flags, "D"); } } if ($samba_version < 2) { $nu->{'real'} = $uinfo[6]; $nu->{'home'} = $uinfo[7]; $nu->{'shell'} = $uinfo[8]; } else { $nu->{'opts'} = \@flags; } &create_user($nu, $in{'newmode'} == 2 ? $in{'newpass'} : undef); $created++; } if ($m) { print &ui_columns_row([ &html_escape($uinfo[0]), $c1.$m.$c2 ]); } } endpwent() if ($gconfig{'os_type'} ne 'hpux'); # Delete missing users, if needed if ($in{"delete"}) { foreach $u (@ulist) { if (!$uexists{$u->{'name'}}) { # delete this samba user.. &delete_user($u); print &ui_columns_row([ &html_escape($u->{'name'}), "<font color=#ff0000>$text{'mkpass_del'}</font>", ]); $deleted++; } } } print &ui_columns_end(); if ($skipcount) { print &text('mkpass_skipcount', $skipcount),"<p>\n"; } # Update the passwords of new users foreach $u (keys %setpass) { &set_password($u, $setpass{$u}) || &error($text{'mkpass_passfail'}); } &unlock_file($config{'smb_passwd'}); &webmin_log("epass", undef, undef, { 'modified' => $modified, 'created' => $created, 'deleted' => $deleted } ); &ui_print_footer("", $text{'index_sharelist'}); # check_user_list(&uinfo, &list) # Checks if some user matches a username / UID list sub check_user_list { local ($uinfo, $skip) = @_; local $skipme = 0; foreach my $s (@$skip) { if ($s eq $uinfo->[0]) { $skipme++; } elsif ($s =~ /^(\d+)$/ && $s == $uinfo->[2]) { $skipme++; } elsif ($s =~ /^(\d+)\-(\d+)$/ && $uinfo->[2] >= $1 && $uinfo->[2] <= $2) { $skipme++; } elsif ($s =~ /^(\d+)\-$/ && $uinfo->[2] >= $1) { $skipme++; } elsif ($s =~ /^\-(\d+)$/ && $uinfo->[2] <= $1) { $skipme++; } elsif ($s =~ /^\@(.*)$/) { local @ginfo = getgrnam($1); local @mems = split(/\s+/, $ginfo[3]); $skipme++ if ($uinfo->[3] == $ginfo[2] || &indexof($uinfo->[0], @mems) >= 0); } } return $skipme; }Private