Server IP : 127.0.0.2 / Your IP : 18.118.30.3 Web Server : Apache/2.4.18 (Ubuntu) System : User : www-data ( ) PHP Version : 7.0.33-0ubuntu0.16.04.16 Disable Function : disk_free_space,disk_total_space,diskfreespace,dl,exec,fpaththru,getmyuid,getmypid,highlight_file,ignore_user_abord,leak,listen,link,opcache_get_configuration,opcache_get_status,passthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,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,php_uname,phpinfo,posix_ctermid,posix_getcwd,posix_getegid,posix_geteuid,posix_getgid,posix_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp,posix_getpid,posix,_getppid,posix_getpwnam,posix_getpwuid,posix_getrlimit,posix_getsid,posix_getuid,posix_isatty,posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,posix_setgid,posix_setpgid,posix_setsid,posix_setuid,posix_times,posix_ttyname,posix_uname,pclose,popen,proc_open,proc_close,proc_get_status,proc_nice,proc_terminate,shell_exec,source,show_source,system,virtual MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /usr/sbin/ |
Upload File : |
#!/usr/bin/perl -w =head1 NAME pam_getenv - get environment variables from /etc/environment =head1 SYNOPSIS pam_getenv B<[-l] [-s]> I<env_var> =head1 DESCRIPTION This tool will print out the value of I<env_var> from F</etc/environment>. It will attempt to expand environment variable references in the definition of I<env_var> but will fail if PAM items are expanded. The B<-l> option indicates the script should return an environment variable related to default locale information. The B<-s> option indicates that the script should return an system default environment variable. Currently neither the B<-l> or B<-s> options do anything. They are included because future versions of Debian may have a separate repository for the initial environment used by init scripts and for system locale information. These options will allow this script to be a stable interface even in that environment. =cut # Copyright 2004 by Sam Hartman # This script may be copied under the terms of the GNU GPL # version 2, or at your option any later version. use strict; use vars qw(*CONFIGFILE *ENVFILE); sub read_line($) { my $fh = shift; my $line; local $_; line: while (<$fh>) { chomp; s/^\s+//; s/\#.*$//; next if $_ eq ""; if (s/\\\s*$//) { $line .= $_; next line; } $line .= $_; last; } $line; } sub parse_line($) { my $var; my (%x, @x); local $_ = shift; return undef unless defined $_ and s/(\S+)\s//; $var->{Name} = $1; s/^\s*//; @x = split(/=([^"\s]\S*|"[^"]*")\s*/, $_); unless (scalar(@x)%2 == 0) { push @x, undef; } %x = @x; @{$var}{"Default", "Override"} = @x{"DEFAULT", "OVERRIDE"}; $var; } sub expand_val($) { my ($val) = @_; return undef unless $val; die "Cannot handle PAM items\n" if /(?<!\\)\@/; $val =~ s/(?<!\\)\$\{([^}]+)}/$ENV{$1}||""/eg; return $val; } my $lookup; while ($_ = shift) { next if $_ eq "-s"; next if $_ eq "-l"; $lookup = $_; last; } unless (defined $lookup) { die "Usage: pam_getenv [-l] [-s] env_var\n"; } my %allvars; open (CONFIGFILE, "/etc/security/pam_env.conf") or die "Cannot open environment file: $!\n"; while (my $var = parse_line(read_line(\*CONFIGFILE))) { my $val; unless ($val = expand_val($var->{Override})) { $val = expand_val($var->{Default}); } $allvars{$var->{Name}} = $val; } if (open (ENVFILE, "/etc/environment")) { while (my $line = read_line(\*ENVFILE)) { $line =~ s/^export //; $line =~ /(.*?)=(.+)/ or next; my ($var, $val) = ($1, $2); # This is bizarre logic (" and ' match each other, quotes are only # significant at the start and end of the string, and the trailing quote # may be omitted), but it's what pam_env does. $val =~ s/^["'](.*?)["']?$/$1/; $allvars{$var} = $val; } } if (exists $allvars{$lookup}) { print $allvars{$lookup}, "\n"; exit(0); }