Các lớp Net::LDAP::Extension và Net::LDAP::Control cung cấp cách để thực hiện việc mở rộng. Các mở rộng LDAP mới được công bố trong RFC rất có thể được bao gồm như một lệnh hoặc một gói trong các modul Net::LDAP sau này. Chương trình con start_tls( ) là một ví dụ. Do đó, bạn có thể không bao giò cần thực hiện việc mở rộng từ đầu. Tuy nhiên, cũng nên biết nó hoạt động như thế nào.
package Net::LDAP::Extension::SetPassword; require Net::LDAP::Extension; @ISA = qw(Net::LDAP::Extension); use Convert::ASN1; my $passwdModReq = Convert::ASN1->new; $passwdModReq->prepare(q<SEQUENCE {
user [1] STRING OPTIONAL, oldpasswd [2] STRING OPTIONAL, newpasswd [3] STRING OPTIONAL }>);
my $passwdModRes = Convert::ASN1->new; $passwdModRes->prepare(q<SEQUENCE {
genPasswd [0] STRING OPTIONAL }>); sub Net::LDAP::set_password { my $ldap = shift; my %opt = @_; my $res = $ldap->extension( name => '1.3.6.1.4.1.4203.1.11.1', value => $passwdModReq->encode(\%opt) );
bless $res; # Naughty :-) } sub gen_password { my $self = shift; my $out = $passwdModRes->decode($self->response); $out->{genPasswd}; } 1;
Lệnh extension( ) yêu cầu 2 thông số: OID của yêu cầu mở rộng (ví dụ: 1.3.6.1.4.1.4203.1.11.1) và chuỗi mã hóa bát phân của bất kỳ thông số nào được định nghĩa bởi việc mở rộng. Trong trường hợp này, thông số value chứa các định danh user, các chuỗi mật khẩu cũ và mới.
Việc mở rộng rất dễ dàng bằng cách thực hiện đoạn mã sau:
$msg = $ldap->set_password( user => "username", oldpassword => "old", newpassword => "new" );
Nhiều lệnh kiểm soát cũng được thực hiện như các lớp Net::LDAP. Net::LDAP::Control::Paged
Thực hiện kiểm soát các trang kết quả được sử dụng để phân vùng các kết quả của tìm kiếm LDAP vào khối quản lý. Việc kiểm soát này được mô tả trong RFC 2696
Net::LDAP::Control::ProxyAuth
Thực hiện cơ chế chứng thực proxy được mô tả bởi Internet-Draft draft-weltman-ldapv3- proxy-XX.txt. Việc kiểm soát này, được hỗ trợ bởi Netscape's Directory Server v4.1, cho phép một khách hàng liên kết như một thực thể và thực hiện các hoạt động như các thực thể khác.
Net::LDAP::Control::Sort, Net::LDAP::Control::SortResult
Thực hiện kiểm soát Server Side Sorting (sắp xếp Server Side) cho các kết quả tìm kiếm mô tả trong RFC 2891
Net::LDAP::Control::VLV, Net::LDAP::Control::VLVResponse
Thực hiện kiểm soát view list ảo được mô tả trong draft-ietf-ldapext-ldapv3-vlv-XX.txt. Việc kiểm soát này được dùng để view cửa sổ trược của kết quả tìm kiếm. Tính năng này được sử dụng bởi các ứng dụng address book.
Việc dùng các lệnh kiểm soát này là vấn đề về đọc tài liệu và làm theo những mẫu có sẵn. Để tiện cho việc chỉ ra cách dùng lớp kiểm soát, ta sẽ mở rộng đoạn mã saslsearch.pl được dùng để
tìm kiếm server Windows AD.
Chương trình con DoSearch( ), có 2 thông số đầu vào: một đối tượng Net::LDAP đã được kết nối tới server, và một DN sẽ được dùng như là hậu tố cơ bản của việc tìm kiếm:
sub DoSearch {