Friday, September 3, 2010

LDAP programming With Java












Contents
Preface. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvii
Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxi
PART I INTRODUCTION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
CHAPTER 1 WHAT CAN YOU FIND IN A DIRECTORY? . . . . . . . . . . 3
What Is a Directory?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
What’s That Phone Number? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Directory Clients for an Online Phone Book . . . . . . . . . . . . . . . . 7
Is He Really Who He Says He Is?. . . . . . . . . . . . . . . . . . . . . . . . . 10
Working Together. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Computers, Printers, Toasters . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
CHAPTER 2 THE LINGUA FRANCA OF DIRECTORIES IS LDAP . . . . 19
A Brief History of Electronic Directories . . . . . . . . . . . . . . . . . . . 19
I Heard It through the Grapevine . . . . . . . . . . . . . . . . . . . 19
Directories for the Internet . . . . . . . . . . . . . . . . . . . . . . . . 20
Directories for a Single Network:
Proprietary Solutions. . . . . . . . . . . . . . . . . . . . . . . . . . . 20
X.500: The “Heavyweight” Directory Service . . . . . . . . . 21
From Humble Beginnings . . . . . . . . . . . . . . . . . . . . . . . . . 22
Future Directions for LDAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
The LDAP Information and Naming Models:
How Directories Are Organized . . . . . . . . . . . . . . . . . . . . . . . 26
The LDAP Information Model . . . . . . . . . . . . . . . . . . . . . 26
The LDAP Naming Model . . . . . . . . . . . . . . . . . . . . . . . . 30
LDAP Spoken Here . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Many Roads to Rome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Directory SDK for C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Directory SDK for Java . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Java Naming and Directory Interface . . . . . . . . . . . . . . . . 35
CHAPTER 3 MAY WE INTRODUCE—
DIRECTORY SDK FOR JAVA. . . . . . . . . . . . . . . . . . . . . . 37
What Directory SDK for Java Can Do for You . . . . . . . . . . . . . . 37
Freedom from Protocol Handling . . . . . . . . . . . . . . . . . . . 37
The Use of Standard Java Objects for Returning
and Processing Data . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
Utility Classes for Handling LDAP-Specific Entities. . . . . 38
Full Access to All LDAP Services. . . . . . . . . . . . . . . . . . . . 38
Flexible Authentication Models . . . . . . . . . . . . . . . . . . . . 39
Write Once, Run Anywhere . . . . . . . . . . . . . . . . . . . . . . . 39
Multilayered Functionality . . . . . . . . . . . . . . . . . . . . . . . . 39
A Platform for Directory-Enabled Applications . . . . . . . . 39
What Else Can the SDK Do for Me? . . . . . . . . . . . . . . . . . . . . . . 40
Dynamic Organizational Chart. . . . . . . . . . . . . . . . . . . . . 40
Directory-Linking Tool . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Access Control for Existing or New Applications . . . . . . 43
Installation and Setup of the SDK . . . . . . . . . . . . . . . . . . . . . . . . 45
Staying Current . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Installing the SDK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
PART II GETTING STARTED. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
CHAPTER 4 SETTING UP YOUR OWN DIRECTORY . . . . . . . . . . . . . 51
Downloading and Installing Netscape Directory Server . . . . . . . 51
Before You Download and Install the Software . . . . . . . . 51
Downloading Netscape Directory Server . . . . . . . . . . . . . 52
Installing Netscape Directory Server . . . . . . . . . . . . . . . . . 52
Setting Up the Sample Database . . . . . . . . . . . . . . . . . . . . 55
Using the Command-Line Tools with Your New Directory . . . . 57
Finding Entries with LDAPSearch . . . . . . . . . . . . . . . . . . . 57
Adding Entries to the Directory . . . . . . . . . . . . . . . . . . . . 59
Understanding LDIF: How to Describe a
Directory Entry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Object Classes: Determining What Information
Makes Up an Entry . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Choosing a Distinguished Name:
Where Do You Want to Add the Entry? . . . . . . . . . . . . 64
Examples of Defining and Adding Entries . . . . . . . . . . . . 64
Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
CHAPTER 5 SEARCHING WITH THE SDK . . . . . . . . . . . . . . . . . . . . . 67
Our First Search . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
Host Name. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Port. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Base DN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Scope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
Search Preferences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Our First Search Program . . . . . . . . . . . . . . . . . . . . . . . . . 74
Using Search Filters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
Handling Results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Attributes in Detail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
I Want Only One Record and I Have the DN . . . . . . . . . . . . . . . 85
Searching and Comparing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
More on Filters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
Sorting. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
Authenticating for Searches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Improving Directory Search Performance . . . . . . . . . . . . . . . . . . 103
Use Indexed Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
Specify an Object Class to Get Only Entries
of the Desired Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
Retrieve Only Attributes You Need . . . . . . . . . . . . . . . . . 104
Keep the DN Handy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
Use compare Where It Makes Sense . . . . . . . . . . . . . . . . . 105
Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
CHAPTER 6 CREATING AND MAINTAINING INFORMATION . . . . . 107
Before We Can Update: Authentication Basics . . . . . . . . . . . . . . 107
Adding an Entry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
Summary of Steps to Add a New Entry. . . . . . . . . . . . . . . 111
Inserting Records from a Data File . . . . . . . . . . . . . . . . . . 113
Adding an Organizational Unit . . . . . . . . . . . . . . . . . . . . . 116
Processing Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
Modifying an Existing Entry . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
Summary of Steps to Modify an Existing Entry . . . . . . . . 118
Adding an Attribute. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
Modifying an Attribute . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
Removing an Attribute . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
Updating Multivalued Attributes . . . . . . . . . . . . . . . . . . . 120
Storing Binary Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
Storing Preferences and State. . . . . . . . . . . . . . . . . . . . . . . 135
Deleting an Entry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
Renaming an Entry: Modifying the RDN . . . . . . . . . . . . . . . . . . 151
Managing Groups. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
Adding a User to a Group . . . . . . . . . . . . . . . . . . . . . . . . . 161
Removing a User from a Group . . . . . . . . . . . . . . . . . . . . 161
Using the LDAPIsMember Bean. . . . . . . . . . . . . . . . . . . . . . 162
Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
CHAPTER 7 SECURING THE DATA. . . . . . . . . . . . . . . . . . . . . . . . . . . 165
No Standards for Access Control. . . . . . . . . . . . . . . . . . . . . . . . . 165
Setting Up an Access Control List . . . . . . . . . . . . . . . . . . . . . . . . 166
Viewing Access Control Lists through LDAP . . . . . . . . . . . . . . . 172
Modifying Access Control Lists through LDAP . . . . . . . . . . . . . 175
Authenticating to the Directory . . . . . . . . . . . . . . . . . . . . . . . . . . 176
Using Password-Based Authentication. . . . . . . . . . . . . . . . . . . . . 177
Communicating over Secure Sockets Layer . . . . . . . . . . . . . . . . . 178
Using Certificate-Based Authentication . . . . . . . . . . . . . . . . . . . . 181
Using SASL Authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
Authenticating with SASL in LDAP . . . . . . . . . . . . . . . . . 183
Callbacks in SASL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
The SASL Framework Classes. . . . . . . . . . . . . . . . . . . . . . 186
Preparing to Use an Existing Mechanism . . . . . . . . . . . . . 189
Your Own SaslClient and ClientFactory . . . . . . . . . . 190
Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
PART III GETTING DOWN AND DIRTY . . . . . . . . . . . . . . . . . . . . 197
CHAPTER 8 MORE POWER TO THE BROWSER:
AN APPLET THAT SPEAKS LDAP. . . . . . . . . . . . . . . . . . 199
What’s So Different about an Applet? . . . . . . . . . . . . . . . . . . . . . 199
Certificates and Signed Applets . . . . . . . . . . . . . . . . . . . . . . . . . . 200
Writing LDAP Applets for Netscape Navigator . . . . . . . . . . . . . 204
Requesting Connection Privileges . . . . . . . . . . . . . . . . . . . 204
Packaging Your Applet . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
Generating a Test Certificate . . . . . . . . . . . . . . . . . . . . . . . 209
Signing Your Code. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
Testing Your Applet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
Using the Codebase as a Principal . . . . . . . . . . . . . . . . . . . 215
Writing LDAP Applets for Microsoft Internet
Explorer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
Requesting Connection Privileges . . . . . . . . . . . . . . . . . . . 216
Packaging Your Applet . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
Generating a Test Certificate . . . . . . . . . . . . . . . . . . . . . . . 218
Signing Your Code. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
Creating a Web Page for the Applet . . . . . . . . . . . . . . . . . . . . . . . 221
Writing LDAP Applets for Java Plug-In Software . . . . . . . . . . . . 221
Packaging Your Applet . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
Generating a Key Pair and Self-signed Certificate. . . . . . . 222
Signing Your Code. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
Setting Up the End User’s System . . . . . . . . . . . . . . . . . . . 225
A Directory Viewer Applet. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
A Simple Example for Java Plug-In Software . . . . . . . . . . 229
Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
CHAPTER 9 SCRIPTING LDAP: JAVASCRIPT AND JAVA . . . . . . . . . 243
Accessing Java Applets from JavaScript. . . . . . . . . . . . . . . . . . . . 243
Accessing Java Objects from JavaScript. . . . . . . . . . . . . . . . . . . . 250
JavaScript Gotchas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254
Handling Java Exceptions in JavaScript . . . . . . . . . . . . . . 255
Handling Arrays of Strings . . . . . . . . . . . . . . . . . . . . . . . . 262
Requesting Privileges and Signing Your
JavaScript Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
Accessing the LDAP Classes from JScript
in Internet Explorer . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
CHAPTER 10 DON’T REDO IT, REUSE IT: LDAP JAVABEANS . . . . . . 267
Invisible LDAP JavaBeans . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
LDAPBasePropertySupport. . . . . . . . . . . . . . . . . . . . . . . . 269
LDAPSimpleAuth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
LDAPGetEntries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
Directory-Based Authentication in JavaScript . . . . . . . . . 287
Using PropertyChangeEvent Notifications . . . . . . . . . . . 289
Graphical LDAP JavaBeans . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292
A Directory Browser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292
A Directory Lister . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332
Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340
CHAPTER 11 MAKE YOUR APPLICATION
LOCATION-INDEPENDENT . . . . . . . . . . . . . . . . . . . . . . 341
The Teex Multicharacter-Set Text Editor. . . . . . . . . . . . . . . . . . . 342
The Teex JavaBean. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342
A Class for User Preferences . . . . . . . . . . . . . . . . . . . . . . . 344
Storing Preferences as Attributes in User Entries . . . . . . . 353
Saving Preferences as an Object in the Directory . . . . . . . 365
Using Directory Structure to Model Attributes. . . . . . . . . 369
Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375
CHAPTER 12 MODELING RELATIONSHIPS. . . . . . . . . . . . . . . . . . . . . 377
Mirroring an Organizational Structure . . . . . . . . . . . . . . . . . . . . 377
Attributes as Pointers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378
Parsing the Reporting Relationships
in a Directory. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380
An Alternative Strategy for Management
Parsing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392
An Organizational Chart Tree Component . . . . . . . . . . . 396
A More Traditional Organizational Chart
Component . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404
Inspecting Properties of an Entry . . . . . . . . . . . . . . . . . . . 408
Connecting the Property Table and the Directory
Viewers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415
Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421
CHAPTER 13 SERVLETS AND LDAP. . . . . . . . . . . . . . . . . . . . . . . . . . . 423
Overview of Servlets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423
Uses of LDAP in Servlets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424
Designing the LDAP Servlet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425
Location of Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426
Our Phone Book Servlet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427
Phone Book Lookups. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427
Accessibility with a Simple Browser . . . . . . . . . . . . . . . . . 427
Utilizing the Corporate LDAP Directory . . . . . . . . . . . . . 428
Customizability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428
Search Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428
Intranet and Extranet . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428
User Self-administration . . . . . . . . . . . . . . . . . . . . . . . . . . 428
Connection Pooling and Data Caching. . . . . . . . . . . . . . . 429
Accessibility over SSL . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429
Connection-Pooling Class . . . . . . . . . . . . . . . . . . . . . . . . . 429
Servlet Request-Response Model . . . . . . . . . . . . . . . . . . . 439
Setting Up and Using the Servlet . . . . . . . . . . . . . . . . . . . . . . . . . 484
Tips for Servlet Developers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 486
Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 486
PART IV BEYOND THE BASICS. . . . . . . . . . . . . . . . . . . . . . . . . . . 487
CHAPTER 14 OPTIONS AND CONSTRAINTS . . . . . . . . . . . . . . . . . . . 489
How Do They Affect Me? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489
A View into Options. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 490
TimeLimit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491
Referrals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492
BindProc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492
ReBindProc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492
HopLimit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492
Constraints for Searching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493
ServerTimeLimit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495
Dereference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 497
MaxResults. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 497
BatchSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 498
MaxBackLog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 498
Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 498
CHAPTER 15 ODDS AND ENDS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499
LDAP URLs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499
An IETF Standard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499
Using LDAP URLs in Java. . . . . . . . . . . . . . . . . . . . . . . . . 501
Not Your Average URL . . . . . . . . . . . . . . . . . . . . . . . . . . . 502
A Rose by Any Other Name. . . . . . . . . . . . . . . . . . . . . . . . . . . . 503
When What You Read Is Not What You Wrote . . . . . . . . . . . . . 505
Sometimes One Thread Is Not Enough . . . . . . . . . . . . . . . . . . . . 507
Don’t Step on My Settings . . . . . . . . . . . . . . . . . . . . . . . . . 510
A Cloned Connection Is a Safe Connection . . . . . . . . . . . 512
Performance, and How to Get It . . . . . . . . . . . . . . . . . . . . . . . . . 514
Breaking Up Is Hard to Do: Avoid
Unnecessary Connections . . . . . . . . . . . . . . . . . . . . . . . 514
Pool the Connections. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514
Fewer But Better Searches . . . . . . . . . . . . . . . . . . . . . . . . . 516
To Cache or Not to Cache . . . . . . . . . . . . . . . . . . . . . . . . . 516
Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 518
CHAPTER 16 ADVANCED TOPICS . . . . . . . . . . . . . . . . . . . . . . . . . . . . 519
Information about Information: Managing the Schema . . . . . . . 519
Programmatic Access through the Schema Classes. . . . . . 519
A Pretty Printer for Schema Contents . . . . . . . . . . . . . . . . 524
Controls: An Essential Extension. . . . . . . . . . . . . . . . . . . . . . . . . 534
Too Much Data: A Virtual List View . . . . . . . . . . . . . . . . 535
Call Me When You’re Ready: Persistent Search . . . . . . . . 554
Password Expiration Notification. . . . . . . . . . . . . . . . . . . 557
Trust Me: The Proxied Authorization Control . . . . . . . . . 559
Your Very Own Controls: Using the BER Package. . . . . . 561
When the Data Lives Elsewhere: Managing Referrals. . . . . . . . . 572
Catching and Processing Referral Exceptions. . . . . . . . . . 572
Automatic Referrals: Anonymous or under
Client Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 573
The manageDsaIT Control . . . . . . . . . . . . . . . . . . . . . . . . . 575
LDAPBind for Complete Client Control. . . . . . . . . . . . . . . 575
And Now for Something Completely Different:
Extended Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 576
Aiming for 24×7: Failover and Reconnecting . . . . . . . . . . . . . . . 579
Transparent Reconnection. . . . . . . . . . . . . . . . . . . . . . . . . 580
Controlling the Result Queue: The Connection Backlog . . . . . . 580
Down to the Wire: Using the Asynchronous Interface . . . . . . . . 581
Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 587
PART V APPENDICES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 589
APPENDIX A MORE TO LEARN ABOUT LDAP . . . . . . . . . . . . . . . . . . 591
Going to the Source: Internet Standards . . . . . . . . . . . . . . . . . . . 591
Where to Get RFCs and Internet Drafts . . . . . . . . . . . . . . 591
LDAP RFCs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 592
LDAP Internet Drafts . . . . . . . . . . . . . . . . . . . . . . . . . . . . 594
X.500 Documents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 598
Books about LDAP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 601
LDAP Concepts and Deployment . . . . . . . . . . . . . . . . . . . 601
LDAP Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 601
X.500 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 601
LDAP Information on the Internet. . . . . . . . . . . . . . . . . . . . . . . . 602
LDAP FAQs and Presentations . . . . . . . . . . . . . . . . . . . . . 602
LDAP Client SDKs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 602
LDAP Server Vendors . . . . . . . . . . . . . . . . . . . . . . . . . . . . 603
Add-On Products for LDAP Directories . . . . . . . . . . . . . . 603
Collections of LDAP Documents and Links . . . . . . . . . . . 604
X.500 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 604
Miscellaneous . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 604
Newsgroups Where LDAP Is Spoken. . . . . . . . . . . . . . . . . . . . . . 605
LDAP in Your Inbox. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 605
LDAP Servers at Your Disposal . . . . . . . . . . . . . . . . . . . . . . . . . . 606
APPENDIX B CLASSES OF THE LDAP SDK . . . . . . . . . . . . . . . . . . . . . 607
The netscape.ldap Package . . . . . . . . . . . . . . . . . . . . . . . . . . . . 607
LDAPConnection and Connection Management. . . . . . . . 607
Basic LDAP Message and Data Encapsulation . . . . . . . . . 612
Handling Messages from the Server . . . . . . . . . . . . . . . . . 618
Authentication and Reauthentication . . . . . . . . . . . . . . . . 619
Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 620
Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 621
Caching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 626
Client-Side Sorting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 627
Schema Representation . . . . . . . . . . . . . . . . . . . . . . . . . . . 628
Miscellaneous Utility Classes . . . . . . . . . . . . . . . . . . . . . . 631
The netscape.ldap.util Package . . . . . . . . . . . . . . . . . . . . . . . 633
DNs and RDNs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 633
LDIF Reader Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 634
Connection Pool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 637
APPENDIX C LDAP UTILITY CLASSES ON THE CD-ROM. . . . . . . . . . 639
The table Package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 639
The util Package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 645
APPENDIX D COMMON LDAP SCHEMA ELEMENTS. . . . . . . . . . . . . 657
Object Classes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 657
Abstract Object Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . 658
Structural Object Classes. . . . . . . . . . . . . . . . . . . . . . . . . . 658
Auxiliary Object Classes . . . . . . . . . . . . . . . . . . . . . . . . . . 661
Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 662
Attribute Syntaxes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 662
Attribute Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 663
APPENDIX E LDAP ERROR CODES . . . . . . . . . . . . . . . . . . . . . . . . . . . 669
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 673

Download
Another Java Books

No comments:

Post a Comment

Related Posts with Thumbnails

Put Your Ads Here!