diff plugins/password/helpers/change_ldap_pass.pl @ 0:1e000243b222

vanilla 1.3.3 distro, I hope
author Charlie Root
date Thu, 04 Jan 2018 15:50:29 -0500
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/password/helpers/change_ldap_pass.pl	Thu Jan 04 15:50:29 2018 -0500
@@ -0,0 +1,87 @@
+#!/usr/bin/perl
+=pod
+Script to change the LDAP password using the set_password method
+to proper setting the password policy attributes
+author: Zbigniew Szmyd (zbigniew.szmyd@linseco.pl)
+version 1.0 2016-02-22
+=cut
+
+use Net::LDAP;
+use Net::LDAP::Extension::SetPassword;
+use URI;
+use utf8;
+binmode(STDOUT, ':utf8');
+
+my %PAR = ();
+if (my $param = shift @ARGV){
+    print "Password change in LDAP\n\n";
+    print "Run script without any parameter and pass the following data:\n";
+    print "URI\nbaseDN\nFilter\nbindDN\nbindPW\nLogin\nuserPass\nnewPass\nCAfile\n";
+    exit;
+}
+
+foreach my $param ('uri','base','filter','binddn','bindpw','user','pass','new_pass','ca'){
+    $PAR{$param} = <>;
+    $PAR{$param} =~ s/\r|\n//g;
+}
+
+my @servers = split (/\s+/, $PAR{'uri'});
+my $active_server = 0;
+
+my $ldap;
+while ((my $serwer = shift @servers) && !($active_server)) {
+    my $ldap_uri = URI->new($serwer);
+    if ($ldap_uri->secure) {
+        $ldap = Net::LDAP->new($ldap_uri->as_string,
+            version => 3,
+            verify  => 'require',
+            sslversion => 'tlsv1',
+            cafile  => $PAR{'ca'});
+    } else {
+        $ldap = Net::LDAP->new($ldap_uri->as_string, version => 3);
+    }
+    $active_server = 1 if ($ldap);
+}
+
+if ($active_server) {
+    my $mesg = $ldap->bind($PAR{'binddn'}, password => $PAR{'bindpw'});
+    if ($mesg->code != 0) {
+        print "Cannot login: ". $mesg->error;
+    } else {
+        # Wyszukanie users wg filtra
+        $PAR{'filter'} =~ s/\%login/$PAR{'user'}/;
+        my @search_args = (
+            base => $PAR{'base'},
+            scope  => 'sub',
+            filter => $PAR{'filter'},
+            attrs  => ['1.1'],
+        );
+        my $result = $ldap->search(@search_args);
+        if ($result->code) {
+            print $result->error;
+        } else {
+            my $count = $result->count;
+            if ($count == 1) {
+                my @users = $result->entries;
+                my $dn = $users[0]->dn();
+                $result = $ldap->bind($dn, password => $PAR{'pass'});
+                if ($result->code){
+                    print $result->error;
+                } else {
+                    $result = $ldap->set_password(newpasswd => $PAR{'new_pass'});
+                    if ($result->code) {
+                        print $result->error;
+                    } else {
+                        print "OK";
+                    }
+                }
+            } else {
+                print "User not found in LDAP\n" if $count == 0;
+                print "Found $count users\n";
+            }
+        }
+    }
+    $ldap->unbind();
+} else {
+    print "Cannot connect to any server";
+}