Đầu tiên, import.pl đọc nội dung của một file LDIF và thêm mỗi mục trong file LDIF đĩ vào thư mục. Đây là điểm bắt đầu, nĩ tương tự như phiên bản cuối cùng của đoạn mã search.pl:
#!/usr/bin/perl ##
## Usage: ./import.pl filename ##
## Author: Gerald Carter <jerry@plainjoe.org> ##
use Net::LDAP; use Net::LDAP::LDIF;
## Connect and bind to the server.
$ldap = Net::LDAP->new ("ldap.plainjoe.org", port =>389, version => 3 )
or die $!;
## Secure data and credentials. $result = $ldap->start_tls( );
die $result->error( ) if $result->code( );
## Bind to the server. The account must have sufficient privileges because you will ## be adding new entries.
$result = $ldap->bind(
"cn=Directory Admin,ou=people,dc=plainjoe,dc=org", password => "secret");
die $result->error( ) if $result->code( );
## Open the LDIF file or fail. Check for existence first. die "$ARGV[0] not found!\n" unless ( -f $ARGV[0] ); $ldif = Net::LDAP::LDIF->new ($ARGV[0], "r") or die $!;
Một khi đoạn mã xử lý file đầu vào, ta cĩ thể thao tác với các nội dung trong đĩ. Net::LDAP::LDIF cĩ hàm eof ( ) để biết được đâu là phần kết thúc của file đầu vào. Vịng lặp sẽ lặp lại tới khi giá trị kiểm tra trả về của hàm sau là true:
while ( ! $ldif->eof ) {
## Get next entry and process input here. }
Việc lấy nội dung của LDIF tiếp theo trong file là vơ cùng dễ dàng vì các module của Net::LDAP::LDIF đã làm hết tất cả, bao gồm cả việc kiểm tra cú pháp của file. Nếu mục tiếp theo của file là valid, hàm read_entry ( ) sẽ trả về nĩ như là một đối tượng của Net::LDAP::Entry $entry = $ldif->read_entry( );
Nếu khơng cĩ lỗi xảy ra, script sẽ thêm nội dung nĩ vừa đọc được trong file vào thư mục, dùng
add ( ):
Vịng lặp cuối cùng sẽ như sau:
## Loop until the end-of-file. while ( ! $ldif->eof( ) ) { $entry = $ldif->read_entry( );
## Skip the entry if there is an error. if ( $ldif->error( ) ) {
print "Error msg: ", $ldif->error( ), "\n"; print "Error lines:\n", $ldif->error_lines( ), "\n"; next;
}
## Log to STDERR and continue in case of failure. $result = $ldap->add( $entry );
warn $result->error( ) if $result->code( ); }
Chú ý rằng bạn kiểm tra lỗi sau khi đã thêm nội dung vào thư mục. Bạn khơng thể giả sử rằng các nội dung được thêm thành cơng dựa trên các giá trị trả về của hàm read_entry ( ). Hàm này
chỉ đảm bảo các nội dung được nhập cú pháp chính xác, và đưa cho bạn một đối tượng Net::LDAP::Entry cĩ giá trị, nhưng các loại lỗi khác cĩ thể cĩ khi bạn thêm nội dung vào thư mục. Lý do phổ biến nhất là sự vi phạm lược đồ.
Sau khi đã hồn thành vịng lặp, ta ngắt kết nối và thốt:
$ldap->unbind( ); exit(0);