%PDF-1.5 %���� ºaâÚÎΞ-ÌE1ÍØÄ÷{òò2ÿ ÛÖ^ÔÀá TÎ{¦?§®¥kuµùÕ5sLOšuY
Server IP : 49.231.201.246 / Your IP : 216.73.216.248 Web Server : Apache/2.4.18 (Ubuntu) System : Linux 246 4.4.0-210-generic #242-Ubuntu SMP Fri Apr 16 09:57:56 UTC 2021 x86_64 User : root ( 0) PHP Version : 7.0.33-0ubuntu0.16.04.16 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_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority, MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /usr/share/webmin/useradmin/ |
Upload File : |
# freebsd-lib.pl # Functions for freebsd format last output $netinfo_domain = $config{'netinfo_domain'} || "."; # Mapping from OSX user properties to Webmin user hash keys %user_properties_map = ( 'RecordName' => 'user', 'UniqueID' => 'uid', 'PrimaryGroupID' => 'gid', 'RealName' => 'real', 'NFSHomeDirectory' => 'home', 'UserShell' => 'shell', ); # And to group hash keys %group_properties_map = ( 'RecordName' => 'group', 'PrimaryGroupID' => 'gid', 'GroupMembership' => 'members', ); # passfiles_type() # Returns 6 for macos netinfo user storage, 7 for new directory service sub passfiles_type { if (-x "/usr/bin/nidump") { # Old netinfo format users DB return 6; } elsif (-x "/usr/bin/dscl") { # New directory service DB return 7; } else { return 0; } } # groupfiles_type() # Returns 5 for macos netinfo group storage, 7 for new directory service sub groupfiles_type { if (-x "/usr/bin/nidump") { # Old netinfo format groups DB return 5; } elsif (-x "/usr/bin/dscl") { # New directory service DB return 7; } else { return 0; } } # open_last_command(handle, user, [max]) sub open_last_command { my ($fh, $user, $max) = @_; $max = " -n $max" if ($max); open($fh, "last$max $user |"); } # read_last_line(handle) # Parses a line of output from last into an array of # user, tty, host, login, logout, period sub read_last_line { $fh = $_[0]; while(1) { chop($line = <$fh>); if (!$line) { return (); } if ($line =~ /^(reboot|shutdown)/) { next; } if ($line =~ /^(\S+)\s+(\S+)\s+(\S+)?\s+(\S+\s+\S+\s+\d+\s+\d+:\d+)\s+\-\s+(\S+)\s+\((\d+:\d+)\)/) { return ($1, $2, $3, $4, $5 eq "shutdown" ? "Shutdown" : $5 eq "crash" ? "Crash" : $5, $6); } elsif ($line =~ /^(\S+)\s+(\S+)\s+(\S+)?\s+(\S+\s+\S+\s+\d+\s+\d+:\d+)\s+still/) { return ($1, $2, $3, $4); } } } # execute_dscl_command(command, arg, ...) # Executes some batch command with dscl, and calls error on failure sub execute_dscl_command { local ($cmd, @args) = @_; local $fullcmd = "dscl '$netinfo_domain' ".quotemeta($cmd); foreach my $a (@args) { $fullcmd .= " ".($a eq '' ? "''" : quotemeta($a)); } local $out = &backquote_command("$fullcmd 2>&1 </dev/null"); if ($?) { &error("<tt>".&html_escape($fullcmd)."</tt> failed : ". "<tt>".&html_escape($out)."</tt>"); } return $out; } # get_macos_password_hash(uid) # Given a user's ID, return the password hash. This is in SHA1 format, and the # first 4 bytes are the salt sub get_macos_password_hash { local ($uuid) = @_; return undef if (!$uuid); local $hashfile = &read_file_contents("/var/db/shadow/hash/$uuid"); if ($hashfile) { return substr($hashfile, 169, 48); } return undef; } # set_macos_password_hash(uuid, hash) # Updates the password hash for some OSX user sub set_macos_password_hash { local ($uuid, $pass) = @_; print STDERR "uuid=$uuid hash=$pass\n"; return 0 if (!$uuid); local $hashfile = &read_file_contents("/var/db/shadow/hash/$uuid"); if ($hashfile) { if (length($pass) > 48) { $pass = substr($pass, 0, 48); } elsif (length($pass) < 48) { $pass .= ("0" x (48-length($pass))); } substr($hashfile, 169, 48) = $pass; &open_tempfile(HASHFILE, ">/var/db/shadow/hash/$uuid"); &print_tempfile(HASHFILE, $hashfile); &close_tempfile(HASHFILE); return 1; } return 0; } 1;