Ниже приведен скрипт на Perl, который в основном извлекает отчеты username
и password
из ldapserver
и сохраняет их в файл, это прекрасно работает в ОС Solaris, хотя при использовании этого на хосте Linux он выдает ошибки..
Код сценария:
#!/usr/bin/perl -w
use Net::LDAP;
use File::Copy;
#my $login = $ARGV[0];
my $ldaphost = "ldapserver.freesocks.com";
my $base = "o=freesocks.com";
my $pbase = "ou=people,o=freesocks.com";
my $bindid = "uid=ldapbind,ou=Groups, o=freesocks.com";
my $bindpwd = "ldapbind";
my $ldap = Net::LDAP->new($ldaphost) or die "$@";
my $mesg = $ldap->bind( $bindid, password => $bindpwd );
$mesg->code && die "Can't bind to LDAP server $ldaphost";
$passwd = $ldap->search(filter=>"(objectClass=*)", base=>"ou=people,o=freesocks.com");
open (HTPASSWD, ">.htpasswd_tmp") || die "can't write .htpasswd file!";
@entries = $passwd->entries;
foreach $entry (@entries) {
my $login= $entry->get_value("uid");
my $pass = $entry->get_value("userPassword");
#$pass =~ s/{crypt}//g;
$pass =~ s/\{crypt\}//ig;
if ($login =~ /^\D/ && $pass =~ /^[^*]/) {
print HTPASSWD "$login:$pass\n";
}
}
close HTPASSWD;
move (".htpasswd_tmp", ".htpasswd");
$ldap->unbind;
ОШИБКИ:
Use of uninitialized value $pass in substitution (s///) at ./get_htpasswd2.pl line 27, <DATA> line 522.
Use of uninitialized value $login in pattern match (m//) at ./get_htpasswd2.pl line 28, <DATA> line 522.
Use of uninitialized value $pass in substitution (s///) at ./get_htpasswd2.pl line 27, <DATA> line 522.
Use of uninitialized value $login in pattern match (m//) at ./get_htpasswd2.pl line 28, <DATA> line 522.
Use of uninitialized value $pass in substitution (s///) at ./get_htpasswd2.pl line 27, <DATA> line 522.
Use of uninitialized value $pass in pattern match (m//) at ./get_htpasswd2.pl line 28, <DATA> line 522.
При работе в ОС Solaris он работает. Отлично.
Результат включенОС СОЛНЦА:
favio:v7qRAmjxdPBbQ
sunilrdo:WSXNMu7ImdcAA
fredio:Z2QlGX8bss/sE
zoonga:cgz6F9DMrkaWA
Я никогда не использовал Perl, поэтому стараюсь понять, мне нужна ваша помощь / совет, чтобы получить правильные результаты.