The ITS doesn't really handle MIME messages very well. Please just follow the guidelines on the OpenLDAP web site.
http://www.openldap.org/devel/contributing.html [email protected] wrote: > This is a multi-part message in MIME format. > > ------_=_NextPart_001_01CBA7B8.A7EC1D62 > Content-Type: text/plain; > charset="us-ascii" > Content-Transfer-Encoding: quoted-printable > > I created a function to support conversion from DER BitString encoded > data to RFC4517 Bit String Format. > > I tested it alone and it seems to work fine with normal and abnormal > situations. > > =20 > > I also wrote a proposal to the call that must be included at > ldap_X509dn2bv() function. > > =20 > > First comes the conversion function and after comes the proposal. > > =20 > > =20 > > /*****************************************************/ > > =20 > > #define BITS_PER_BYTE 8 > > #define SQUOTE_LENGTH 1 > > #define B_CHAR_LENGTH 1 > > #define STR_OVERHEAD (2*SQUOTE_LENGTH + B_CHAR_LENGTH) > > =20 > > int ldap_der_to_rfc4517_BitString (struct berval *berValue, > > struct berval *rfc4517Value) { > > > ber_len_t bitPadding=3D0; > > ber_len_t bits, maxBits; > > char *tmpStr; > > unsigned char byte; > > ber_len_t bitLength; > > ber_len_t valLen; > > unsigned char* valPtr; > > =20 > > rfc4517Value->bv_len=3D0; > > rfc4517Value->bv_val=3DNULL; > > =20 > > /* Gets padding and points to binary data */ > > valLen=3DberValue->bv_len; > > valPtr=3D(unsigned char*)berValue->bv_val; > > if (valLen) { > > bitPadding=3D(ber_len_t)(valPtr[0]); > > valLen--; > > valPtr++; > > } > > /* If Block is non DER encoding fixes to DER encoding */ > > if (bitPadding>=3D BITS_PER_BYTE) { > > if (valLen*BITS_PER_BYTE> bitPadding ) { > > valLen-=3D(bitPadding/BITS_PER_BYTE); > > bitPadding%=3DBITS_PER_BYTE; > > } else { > > valLen=3D0; > > bitPadding=3D0; > > } > > } > > /* Just in case bad encoding */ > > if (valLen*BITS_PER_BYTE< bitPadding ) { > > bitPadding=3D0; > > valLen=3D0; > > } > > =20 > > /* Gets buffer to hold RFC4517 Bit String format */ > > bitLength=3DvalLen*BITS_PER_BYTE-bitPadding; > > tmpStr=3DLDAP_MALLOC(bitLength + STR_OVERHEAD + 1); > > =20 > > if (!tmpStr) > > return LDAP_NO_MEMORY; > > =20 > > rfc4517Value->bv_val=3DtmpStr; > > rfc4517Value->bv_len=3DbitLength + STR_OVERHEAD; > > =20 > > /* Formatting in '*binary-digit'B format */ > > maxBits=3DBITS_PER_BYTE; > > *tmpStr=3D'\''; > > tmpStr++; > > while(valLen) { > > byte=3D*valPtr; > > if (valLen=3D=3D1) > > maxBits-=3DbitPadding; > > for (bits=3D0; bits<maxBits; bits++) { > > if (0x80& byte) > > *tmpStr=3D'1'; > > else > > *tmpStr=3D'0'; > > tmpStr++; > > byte<<=3D1; > > } > > valPtr++; > > valLen--; > > } > > *tmpStr=3D'\''; > > tmpStr++; > > *tmpStr=3D'B'; > > tmpStr++; > > *tmpStr=3D0; > > =20 > > return LDAP_SUCCESS; > > } > > =20 > > =20 > > /*****************************************************/ > > /*****************************************************/ > > =20 > > =20 > > /* > > * Other tags found in AVAs (X.520) > > */ > > #define LBER_TAG_BITSTRING ((ber_tag_t) 0x03UL) > > =20 > > =20 > > ldap_X509dn2bv function updated: > > =20 > > switch(tag) { > > case LBER_TAG_UNIVERSAL: > > /* This uses 32-bit ISO 10646-1 */ > > csize =3D 4; goto to_utf8; > > case LBER_TAG_BMP: > > /* This uses 16-bit ISO 10646-1 */ > > csize =3D 2; goto to_utf8; > > case LBER_TAG_BITSTRING: > > /* X.690 bitString value converted to RFC4517 Bit > String */ > > rc =3D ldap_der_to_rfc4517_BitString(&Val, > &newAVA->la_value ); > > goto after_utf8; > > case LBER_TAG_TELETEX: > > /* This uses 8-bit, assume ISO 8859-1 */ > > csize =3D 1; > > to_utf8: rc =3D ldap_ucs_to_utf8s(&Val, csize, > &newAVA->la_value ); > > after_utf8: newAVA->la_flags |=3D LDAP_AVA_FREE_VALUE; > > if (rc !=3D LDAP_SUCCESS) goto nomem; > > newAVA->la_flags =3D LDAP_AVA_NONPRINTABLE; > > break; > > case LBER_TAG_UTF8: > > newAVA->la_flags =3D LDAP_AVA_NONPRINTABLE; > > /* This is already in UTF-8 encoding */ > > case LBER_TAG_IA5: > > case LBER_TAG_PRINTABLE: > > /* These are always 7-bit strings */ > > newAVA->la_value =3D Val; > > default: > > ; > > } > > =20 > > > ------_=_NextPart_001_01CBA7B8.A7EC1D62 > Content-Type: text/html; > charset="us-ascii" > Content-Transfer-Encoding: quoted-printable > > <html xmlns:v=3D"urn:schemas-microsoft-com:vml" = > xmlns:o=3D"urn:schemas-microsoft-com:office:office" = > xmlns:w=3D"urn:schemas-microsoft-com:office:word" = > xmlns:x=3D"urn:schemas-microsoft-com:office:excel" = -- -- Howard Chu CTO, Symas Corp. http://www.symas.com Director, Highland Sun http://highlandsun.com/hyc/ Chief Architect, OpenLDAP http://www.openldap.org/project/
