Reduce the number of DN normalization
. Adding SLAPI_TARGET_SDN as well as its macros, SLAPI_SEARCH_TARGET_
SDN SLAPI_ADD_TARGET_SDN, SLAPI_MODIFY_TARGET_SDN, etc.
. Adding SLAPI_MODRDN_NEWSUPERIOR_SDN.
. SLAPI_TARGET_DN and SLAPI_MODRDN_NEWSUPERIOR are kept for the back-
ward compatibility. But they are marked as deprecated. They are
pointing dn in SLAPI_TARGET_SDN and SLAPI_MODRDN_NEWSUPERIOR_SDN,
respectively.
. slapi_pblock_set(.., SLAPI_TARGET_DN/SLAPI_MODRDN_NEWSUPERIOR, dn)
takes dn string and reset Slapi_DN to SLAPI_TARGET_SDN/SLAPI_MODRDN_
NEWSUPERIOR_SDN.
. slapi_pblock_get(.., SLAPI_TARGET_DN/SLAPI_MODRDN_NEWSUPERIOR, &dn)
retrieves dn out of SLAPI_TARGET_SDN/SLAPI_MODRDN_NEWSUPERIOR_SDN.
. Replacing slapi_dn_normalization_ext call with generating Slapi_DN
APIs (e.g., slapi_sdn_new_dn_...) as much as possible and stash it
in pblock using SLAPI_TARGET_SDN.
. When a normalized DN string is needed, get it using slapi_sdn_get_[n]dn
from the stashed Slapi_DN.
. Introduced a new field "udn" to Slapi_DN.
"udn" is an original DN.
"dn" is its normalized DN.
"ndn" is its case-lowered normalized DN.
Note: slapi_sdn_get_ndn_len represents the length of the normalized
DN, which is "dn" as well as "ndn". Thus, instead of calling strlen
for the normalized dn, using slapi_sdn_get_ndn_len, as much as possible.
. Taking advantage of the knowledge of the stage of the DN, call the
most efficient DN creating API (e.g., slapi_sdn_new_dn_... vs.
slapi_sdn_new_normdn_... vs. slapi_sdn_new_ndn_...)
Others
. Replacing inefficient array assignment with memset (acl.c) and
memcpy (idl_common.c).
. Fixing invalid memory access in LASDnsBuild (lib/libaccess/lasdns.cpp).
. Fixing compiler warnings.
Reviewed by rmeggins@redhat.com (Thank you, Rich!!)