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

168 lines
5.4 KiB
Perl
Executable File

#!/usr/bin/perl
# passwd.cgi
# 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';
if ( $config{'has_ldapusers'} eq "true" ) {
do "ldap-lib.pl";
}
&ReadParse();
$dn = $in{dn};
$filter = $in{filter};
$base = $in{base};
$username=$in{username};
$password=$in{password};
if ($username eq "" ) { &redirect("tta_selusr.cgi?form=passwd"); }
if (!$dn) { &redirect("tta_selusr.cgi?form=passwd"); }
if ( $dn ne "-" && !$password) { &redirect("tta_selusr.cgi?form=passwd"); }
&headerstta($text{'index_passwd'}, "", "passwd",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";
if ( "$username" eq "*" ) {
$dn="*";
print "<tr $tb> <td><font color='$revtext'><b> $text{'titidx_passwd'} -- [ $base - $filter ] </b></td> </tr>\n";
} else {
%h_ou=&list_ous();
$organizationname="";
$ens_ou="";
$aliasou=$in{userou};
if ( $h_ou{$aliasou}->{'alias'} ne $aliasou ) {
$err_msg=$text{'list_err'};
&footHere;
exit;
}
$dn_ou=$h_ou{$aliasou}->{'obj'};
$organizationname=$h_ou{$aliasou}->{'name'};
$ens_ou=$h_ou{$aliasou}->{'ens'};
print "<tr $tb> <td><font color='$revtext'><b> $text{'titidx_passwd'} -- $username ($organizationname)</b></td> </tr>\n";
}
print "<tr $cb> <td><table width=100%>\n";
if ($dn eq "-" ) {
if ( $in{syncuser} eq "true" ) { &make_remote_user("modify",$username); }
&footHere;
exit;
}
$i=0;
@all_users=();
%h_ou=&list_ous(2);
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};
$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 ( $username eq "*" && $config{'has_ldapusers'} eq "true" && $ldap_server ne "0" ) {
if ( $base ) {
$base="$base,$config{ldap_dnusers}";
} else {
$base=$config{ldap_dnusers};
}
$ldap_server=1;
&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"; }
}
}
if ( $username ne "*" ) {
$all_users{dn} = $dn;
$all_users{cn} = $username;
$dn_ou=$dn;
$i_cn=$username;
$dn_ou=~s/,$config{ldap_base}//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;
}
%h_ou=&list_ous();
$i = 0;
$i_ou ="";
$lastgrp="";
foreach $user (@all_users) {
$i_dn = $user->{dn};
$i_cn = $user->{cn};
$i_ou = $user->{grpalias};
$surname = $user->{surname};
$i_sysuser= "";
if ( $i_dn eq "-" ) { $i_sysuser=$i_cn; }
$user_line = "";
$user_line .= " $user->{cn}";
$user_line .= " $user->{sn}";
$user_line .= " $user->{description}";
$user_line .= "[".$h_ou{$i_ou}->{'name'}."] ";
# $user_line .= "<b>DN:</b> $user->{dn}";
$i++;
$dn=$i_dn;
$username=$i_cn;
$ldap_server=1;
&connect ();
if ( &mod_usr_password() eq 0 ) {
if ( $config{ldap2_server}.length gt 0 ) {
$ldap_server=2;
&connect ();
if ( &mod_usr_password() ne 0 ) { &err_replication() }
}
if ( $config{'ldap_log_name'} ne "" ) {
$lin_user="mod::".$username."::".$password."::".$surname."::".$dn;
&lock_file($config{'ldap_log_name'});
open(FILELDAPLOG, ">>$config{'ldap_log_name'}");
print FILELDAPLOG "$lin_user\n";
close (FILELDAPLOG);
&unlock_file($config{'ldap_log_name'});
}
$str=$text{'user_update'}.$username." ($surname) -> ".$dn;
&additional_log('passwd.cgi', "passwd", $str);
&webmin_log($config{'ldap_log_name'}, "passwd", "modify",$lin_user);
print "<tr><td><b>$text{'user_update'}... LDAP </b> --> $user_line </td></tr>\n";
}
}
print "<tr></tr>\n";
print "<p><tr><td><b> ".&text('l_total',$i)."</b></td><td><p>\n";
print "<tr><tr></table></table><hr><p>\n";
&footer($config{'back_return'},$text{'index'});
print "<p><p><p>\n";
do "footer.pl";
exit;