stta/stta/ldap_loglist.cgi
2021-10-01 20:35:43 +01:00

179 lines
6.0 KiB
Perl
Executable File

#!/usr/bin/perl
# ldap_loglist.cgi
# Select Users to Services with Tarantella
# STTA Rev. 1.3 Copyright (c) 2001-2004 Jesús Pérez Lorenzo --- license GNU GPL
# stta: (@#) 1.31051043346- [2004_01_29_102036]
require './stta-lib.pl';
$postform="ldap_loglist";
if ( $config{'has_ldapusers'} ne "true" || $config{'ldap_log_name'} eq "" ) {
&headerstta($text{'index_ldaploglist'}, "", $postform,undef,1,0,"$text{'headpage_right'}"."$text{'head_logout'}",undef,undef,"$text{head_below}","","" );
$err_msg=$text{'ldap_log_err'};
&footHere;
exit;
}
do "ldap-lib.pl";
$has_ldapusers="";
if ( $ldap_ok ne true && $config{has_ldapusers} eq "true" ){
$has_ldapusers=$config{'has_ldapusers'};
$config{'has_ldapusers'}="false";
}
&ReadParse();
if ($in{form}) { $postform = $in{form}; }
if ( !$in{filter} ) { &redirect("tta_filter.cgi?form=$postform"); }
if ( !$in{outscreen} && !$in{file} ) { &redirect("tta_filter.cgi?form=$postform"); }
$toScreen=$in{outscreen} || "";
$fileName=$in{file} || "" ;
$now = time();
$filter=$in{filter};
# $filter = "(cn=*)";
$ldap_server=$in{ldapserver};
$sysuser=$in{sysuser};
$syncuser=$in{syncuser};
$base=$in{base};
if ( $base ) {
$base="$base,$config{ldap_dnusers}";
} else {
$base=$config{ldap_dnusers};
};
$sort_on = ($in{sort_on}) ? $in{sort_on} : "sn";
&headerstta($text{'index_ldaploglist'}, "", $postform,undef,1,0,"$text{'headpage_right'}"."$text{'head_logout'}",undef,undef,"$text{head_below}","","" );
print "<hr><p>\n";
print "<p>\n";
print "<table width=100% border>\n";
print "<tr $tb> <td valig=top><font color='$revtext'><b> $text{'titidx_ldaploglist'}".&set_now($now)."</b></td></tr>";
print "<tr><td>";
$i=0;
@all_users=();
sub callbackSearch
{
my ( $conn, $entry) = @_;
if ( !defined($entry) ) { return };
$dn = $entry->dn;
@attrs = $entry->attributes; # Obtain attributes for this entry.
my (%all_users);
$all_users{dn} = $dn;
foreach my $var (@attrs) {
$attr = $entry->get_value( $var, asref => 1 );
if ( defined($attr) ) {
foreach my $value (@$attr) { $all_users{$var} = $value; }
}
}
$dn_ou=$dn;
$dn_ou=~s/,$config{ldap_base}//g;
$i_cn = $all_users{cn};
# @line=split(/,/, $dn_ou, -1);
# $dn_ou=~s/$line[0],//g;
$dn_ou=~s/cn=$i_cn,//g;
if ( $h_ou{$dn_ou}->{'obj'} eq $dn_ou ) {
$all_users{'grpalias'}=$h_ou{$dn_ou}->{'alias'};
$all_users{'ens'}=$h_ou{$dn_ou}->{'ens'}."/cn=".$i_cn;
} else {
$all_users{'grpalias'}=$dn_ou;
}
$all_users[$i++] = \%all_users;
$conn->pop_entry;
}
if ( $config{'has_ldapusers'} eq "true" && $ldap_server ne "0" ) {
&connect ();
%h_ou=&list_ous(2);
my $status_con = $ldapObj->search ( base => $base,
scope => "sub",
filter => "(cn=" . $filter . ")",
callback => \&callbackSearch
);
if ( $conn->code ) {
if ($conn->count == 0) { # if conncache is not defined we have nothing.
print $text{msg_1} . "\n"; }
} else {
print "<B>-- $text{'f_ldapserver'} ";
if ( "$ldap_server" eq "1" ) {
print $config{ldap_servertitle}." (".$config{ldap_server}.") ";
} elsif ( "$ldap_server" eq "2" ) {
print $config{ldap2_servertitle}." (".$config{ldap2_server}.") ";
}
}
}
if ( $config{'has_systemusers'} eq "true" && $sysuser eq "true" ) {
&foreign_require("useradmin", "user-lib.pl");
@ulist=&foreign_call("useradmin", "list_users");
%h_ulist=();
foreach $item (@ulist) { $h_ulist{$item->{user}} = $item }
%h_sysusers=&list_sysusers();
foreach $item (keys (%h_sysusers)) {
if ( $filter eq "*" || $h_sysusers{$item}->{name} =~ /$filter/ ) {
$all_users[$i]{dn} = "-";
$all_users[$i]{cn} = $h_sysusers{$item}->{name};
$all_users[$i]{sn} = $h_ulist{$item}{real};
$all_users[$i]{grpalias} = $h_sysusers{$item}->{grpalias};
$all_users[$i]{ens} = $h_sysusers{$item}->{ens};
$all_users[$i]{mail} = $h_sysusers{$item}->{email};
$all_users[$i]{description} = "uid=".$h_ulist{$item}{uid}." ".$h_sysusers{$item}->{where};
$i++;
}
}
}
if ($sort_on ne "browse") { print "<B>-- $text{'l_orderby'} "; }
if ($sort_on eq "browse") {
@users = sort {$a->{ens} cmp $b->{ens}} @all_users;
print $text{browse} . "\n";
}
elsif ($sort_on eq "mail") {
@users = sort {$a->{$sort_on} cmp $b->{$sort_on}} @all_users;
print $text{l_sn} . "\n";
}
elsif ($sort_on eq "sn") {
@users = sort {$a->{$sort_on} cmp $b->{$sort_on}} @all_users;
print $text{l_uid} . "\n";
}
elsif ($sort_on eq "cn") {
@users = sort {$a->{$sort_on} cmp $b->{$sort_on}} @all_users;
print $text{l_cn} . "\n";
}
else {
@users = sort {($a->{description} . $a->{cn}) cmp
($b->{description} . $b->{cn})} @all_users;
print $text{l_department} . "\n";
}
print "</tr><tr ><td><table width=100%>\n";
sub err_file_open
{
$err_msg="$text{f_error} $fileName";
&footHere;
exit;
}
$ReportOut="";
if ( $toScreen ne 1 ) {
$ReportOut=$fileName;
open (REPORTOUT,">$ReportOut") || &err_file_open();
}
if ( $ReportOut ) { select(REPORTOUT)}
$i = 0;
foreach $user (@users) {
$i_dn = $user->{dn};
$i_sysuser= "";
if ( $i_dn eq "-" ) {
$i_sysuser=$i_cn;
}
print "list::".$user->{cn}."::".$user->{password}."::".$user->{sn}."::".$i_dn."\n";
if ( $toScreen eq 1 ) { print "<br>"; }
$i++;
}
if ( $toScreen ne 1 ) { close(REPORTOUT); }
if ( $ReportOut ) { $| =1; select(STDOUT);}
print "<tr $cb> <td align=center>$text{user_made} $fileName </a></td></tr>\n";
print "<tr><tr></table></table><p>\n";
print "<p><p><p>\n";
if ( $has_ldapusers ne "" ) { $config{'has_ldapusers'}= $has_ldapusers }
&footer($config{'back_return'},$text{'index'});
do "footer.pl";
exit;