4.2Xĩa bớt nội dung:

Một phần của tài liệu Đồ án tin học nghiên cứu về giao thức LDAP (Trang 172 - 173)

Tiếp theo ta sẽ nĩi tới việc xĩa các nội dung. Hàm delete ( ) yêu cầu một DN để xác định nội dung cần xĩa. Hàm rmtree.pl chấp nhận DN từ dịng lệnh (ví dụ: rmtree.pl

"ou=test,dc=plainjoe,dc=org") và xĩa các cây tương ứng với DN đĩ.

Nên thực hiện các đoạn mã đĩ như thế nào? Tốt nhất là xĩa các mục từ phía dưới cây đi lên. Việc này sẽ hạn chế việc để lại nội dung trống trong cây, vì ta xĩa từ dưới lên thì khơng cĩ node nào ở dưới phần ta xĩa. Để thực hiện việc xĩa từ dưới lên, dùng hàm chương trình con DeleteLdapTree( ), nĩ sẽ xĩa một mục chỉ khi nào các mục con của mục đĩ đã được xĩa.

#!/usr/bin/perl ##

## Usage: ./rmtree.pl DN ##

## Author: Gerald Carter <jerry@plainjoe.org> ##

use Net::LDAP;

#######################################################

## Perform a depth-first search on the $dn, deleting entries from the bottom up. ## Parameters: $handle (handle to Net::LDAP object)

## $dn (DN of entry to remove) sub DeleteLdapTree {

my ( $handle, $dn ) = @_; my ( $result ); my ( $result );

scope => one, filter => "(objectclass=*)" ); if ( $msg->code( ) ) { $msg->error( ); return; }

foreach $entry in ( $msg->all_entries ) { DeleteLdapTree( $handle, $entry->dn( ) ); }

$result = $handle->delete( $dn );

warn $result->error( ) if $result->code( );

print "Removed $dn\n";

return; }

Vịng lặp sẽ lặp lại tới khi nào xĩa hết các mục cần thiết, nĩ là hàm đệ quy, gọi lại chính nĩ sau mỗi lần xĩa.

Để thực hiện đoạn mã này, đầu tiên phải kết nối tới server thư mục và ràng buộc server như một người dùng đặc biệt với các đặc quyền thích hợp. Như vậy, đoạn code sẽ là:

## 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( );

Để thực hiện việc xĩa, đoạn mã sẽ xác nhận DN trong command line cĩ đúng trong thư mục hay khơng.

$msg = $ldap->search( base => $ARGV[0], scope => base, (adsbygoogle = window.adsbygoogle || []).push({});

filter => "(objectclass=*)" ); die $msg->error( ) if $msg->code( );

Khi đã chắc chắn các nội dung đã cĩ sẵn, đoạn mã chỉ cần gọi chương trình con DeleteLdapTree( ) là xong.

DeleteLdapTree( $ldap, $ARGV[0] );

Sau khi cây con đã được xĩa, đoạn mã ngắt kết nối và thốt:

$ldap->unbind( ); exit(0);

Một phần của tài liệu Đồ án tin học nghiên cứu về giao thức LDAP (Trang 172 - 173)