diff options
Diffstat (limited to 'security/nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_x500name.c')
-rw-r--r-- | security/nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_x500name.c | 755 |
1 files changed, 0 insertions, 755 deletions
diff --git a/security/nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_x500name.c b/security/nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_x500name.c deleted file mode 100644 index 7fb006e02..000000000 --- a/security/nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_x500name.c +++ /dev/null @@ -1,755 +0,0 @@ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is the PKIX-C library. - * - * The Initial Developer of the Original Code is - * Sun Microsystems, Inc. - * Portions created by the Initial Developer are - * Copyright 2004-2007 Sun Microsystems, Inc. All Rights Reserved. - * - * Contributor(s): - * Sun Microsystems, Inc. - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ -/* - * pkix_pl_x500name.c - * - * X500Name Object Functions - * - */ - -#include "pkix_pl_x500name.h" - -/* --Private-X500Name-Functions------------------------------------- */ - -/* - * FUNCTION: pkix_pl_X500Name_ToString_Helper - * DESCRIPTION: - * - * Helper function that creates a string representation of the X500Name - * pointed to by "name" and stores it at "pString". - * - * PARAMETERS - * "name" - * Address of X500Name whose string representation is desired. - * Must be non-NULL. - * "pString" - * Address where object pointer will be stored. Must be non-NULL. - * "plContext" - Platform-specific context pointer. - * THREAD SAFETY: - * Thread Safe (see Thread Safety Definitions in Programmer's Guide) - * RETURNS: - * Returns NULL if the function succeeds. - * Returns a X500Name Error if the function fails in a non-fatal way. - * Returns a Fatal Error if the function fails in an unrecoverable way. - */ -static PKIX_Error * -pkix_pl_X500Name_ToString_Helper( - PKIX_PL_X500Name *name, - PKIX_PL_String **pString, - void *plContext) -{ - CERTName *nssDN = NULL; - char *utf8String = NULL; - PKIX_UInt32 utf8Length; - - PKIX_ENTER(X500NAME, "pkix_pl_X500Name_ToString_Helper"); - PKIX_NULLCHECK_TWO(name, pString); - nssDN = &name->nssDN; - - /* this should really be called CERT_NameToUTF8 */ - utf8String = CERT_NameToAsciiInvertible(nssDN, CERT_N2A_INVERTIBLE); - if (!utf8String){ - PKIX_ERROR(PKIX_CERTNAMETOASCIIFAILED); - } - - PKIX_X500NAME_DEBUG("\t\tCalling PL_strlen).\n"); - utf8Length = PL_strlen(utf8String); - - PKIX_CHECK(PKIX_PL_String_Create - (PKIX_UTF8, utf8String, utf8Length, pString, plContext), - PKIX_STRINGCREATEFAILED); - -cleanup: - - PR_Free(utf8String); - - PKIX_RETURN(X500NAME); -} - -/* - * FUNCTION: pkix_pl_X500Name_Destroy - * (see comments for PKIX_PL_DestructorCallback in pkix_pl_system.h) - */ -static PKIX_Error * -pkix_pl_X500Name_Destroy( - PKIX_PL_Object *object, - void *plContext) -{ - PKIX_PL_X500Name *name = NULL; - - PKIX_ENTER(X500NAME, "pkix_pl_X500Name_Destroy"); - PKIX_NULLCHECK_ONE(object); - - PKIX_CHECK(pkix_CheckType(object, PKIX_X500NAME_TYPE, plContext), - PKIX_OBJECTNOTANX500NAME); - - name = (PKIX_PL_X500Name *)object; - - /* PORT_FreeArena will destroy arena, and, allocated on it, CERTName - * and SECItem */ - if (name->arena) { - PORT_FreeArena(name->arena, PR_FALSE); - name->arena = NULL; - } - -cleanup: - - PKIX_RETURN(X500NAME); -} - -/* - * FUNCTION: pkix_pl_X500Name_ToString - * (see comments for PKIX_PL_ToStringCallback in pkix_pl_system.h) - */ -static PKIX_Error * -pkix_pl_X500Name_ToString( - PKIX_PL_Object *object, - PKIX_PL_String **pString, - void *plContext) -{ - PKIX_PL_X500Name *name = NULL; - char *string = NULL; - PKIX_UInt32 strLength = 0; - - PKIX_ENTER(X500NAME, "pkix_pl_X500Name_toString"); - PKIX_NULLCHECK_TWO(object, pString); - - PKIX_CHECK(pkix_CheckType(object, PKIX_X500NAME_TYPE, plContext), - PKIX_OBJECTNOTANX500NAME); - - name = (PKIX_PL_X500Name *)object; - string = CERT_NameToAscii(&name->nssDN); - if (!string){ - PKIX_ERROR(PKIX_CERTNAMETOASCIIFAILED); - } - strLength = PL_strlen(string); - - PKIX_CHECK(PKIX_PL_String_Create - (PKIX_ESCASCII, string, strLength, pString, plContext), - PKIX_STRINGCREATEFAILED); - -cleanup: - - PKIX_RETURN(X500NAME); -} - -/* - * FUNCTION: pkix_pl_X500Name_Hashcode - * (see comments for PKIX_PL_HashcodeCallback in pkix_pl_system.h) - */ -static PKIX_Error * -pkix_pl_X500Name_Hashcode( - PKIX_PL_Object *object, - PKIX_UInt32 *pHashcode, - void *plContext) -{ - PKIX_PL_X500Name *name = NULL; - SECItem *derBytes = NULL; - PKIX_UInt32 nameHash; - - PKIX_ENTER(X500NAME, "pkix_pl_X500Name_Hashcode"); - PKIX_NULLCHECK_TWO(object, pHashcode); - - PKIX_CHECK(pkix_CheckType(object, PKIX_X500NAME_TYPE, plContext), - PKIX_OBJECTNOTANX500NAME); - - name = (PKIX_PL_X500Name *)object; - - /* we hash over the bytes in the DER encoding */ - - derBytes = &name->derName; - - PKIX_CHECK(pkix_hash - (derBytes->data, derBytes->len, &nameHash, plContext), - PKIX_HASHFAILED); - - *pHashcode = nameHash; - -cleanup: - - PKIX_RETURN(X500NAME); -} - - -/* - * FUNCTION: pkix_pl_X500Name_Equals - * (see comments for PKIX_PL_Equals_Callback in pkix_pl_system.h) - */ -static PKIX_Error * -pkix_pl_X500Name_Equals( - PKIX_PL_Object *firstObject, - PKIX_PL_Object *secondObject, - PKIX_Boolean *pResult, - void *plContext) -{ - PKIX_UInt32 secondType; - - PKIX_ENTER(X500NAME, "pkix_pl_X500Name_Equals"); - PKIX_NULLCHECK_THREE(firstObject, secondObject, pResult); - - /* test that firstObject is an X500Name */ - PKIX_CHECK(pkix_CheckType(firstObject, PKIX_X500NAME_TYPE, plContext), - PKIX_FIRSTOBJECTARGUMENTNOTANX500NAME); - - /* - * Since we know firstObject is an X500Name, if both references are - * identical, they must be equal - */ - if (firstObject == secondObject){ - *pResult = PKIX_TRUE; - goto cleanup; - } - - /* - * If secondObject isn't an X500Name, we don't throw an error. - * We simply return a Boolean result of FALSE - */ - *pResult = PKIX_FALSE; - PKIX_CHECK(PKIX_PL_Object_GetType - (secondObject, &secondType, plContext), - PKIX_COULDNOTGETTYPEOFSECONDARGUMENT); - if (secondType != PKIX_X500NAME_TYPE) goto cleanup; - - PKIX_CHECK( - PKIX_PL_X500Name_Match((PKIX_PL_X500Name *)firstObject, - (PKIX_PL_X500Name *)secondObject, - pResult, plContext), - PKIX_X500NAMEMATCHFAILED); - -cleanup: - - PKIX_RETURN(X500NAME); -} - -/* - * FUNCTION: pkix_pl_X500Name_RegisterSelf - * DESCRIPTION: - * Registers PKIX_X500NAME_TYPE and its related functions with systemClasses[] - * THREAD SAFETY: - * Not Thread Safe - for performance and complexity reasons - * - * Since this function is only called by PKIX_PL_Initialize, which should - * only be called once, it is acceptable that this function is not - * thread-safe. - */ -PKIX_Error * -pkix_pl_X500Name_RegisterSelf(void *plContext) -{ - - extern pkix_ClassTable_Entry systemClasses[PKIX_NUMTYPES]; - pkix_ClassTable_Entry entry; - - PKIX_ENTER(X500NAME, "pkix_pl_X500Name_RegisterSelf"); - - entry.description = "X500Name"; - entry.objCounter = 0; - entry.typeObjectSize = sizeof(PKIX_PL_X500Name); - entry.destructor = pkix_pl_X500Name_Destroy; - entry.equalsFunction = pkix_pl_X500Name_Equals; - entry.hashcodeFunction = pkix_pl_X500Name_Hashcode; - entry.toStringFunction = pkix_pl_X500Name_ToString; - entry.comparator = NULL; - entry.duplicateFunction = pkix_duplicateImmutable; - - systemClasses[PKIX_X500NAME_TYPE] = entry; - - PKIX_RETURN(X500NAME); -} - -#ifdef BUILD_LIBPKIX_TESTS -/* - * FUNCTION: pkix_pl_X500Name_CreateFromUtf8 - * - * DESCRIPTION: - * Creates an X500Name object from the RFC1485 string representation pointed - * to by "stringRep", and stores the result at "pName". If the string cannot - * be successfully converted, a non-fatal error is returned. - * - * NOTE: ifdefed BUILD_LIBPKIX_TESTS function: this function is allowed to be - * called only by pkix tests programs. - * - * PARAMETERS: - * "stringRep" - * Address of the RFC1485 string to be converted. Must be non-NULL. - * "pName" - * Address where the X500Name result will be stored. Must be non-NULL. - * "plContext" - * Platform-specific context pointer. - * - * THREAD SAFETY: - * Thread Safe (see Thread Safety Definitions in Programmer's Guide) - * - * RETURNS: - * Returns NULL if the function succeeds. - * Returns an X500NAME Error if the function fails in a non-fatal way. - * Returns a Fatal Error if the function fails in an unrecoverable way. - */ -PKIX_Error * -pkix_pl_X500Name_CreateFromUtf8( - char *stringRep, - PKIX_PL_X500Name **pName, - void *plContext) -{ - PKIX_PL_X500Name *x500Name = NULL; - PRArenaPool *arena = NULL; - CERTName *nssDN = NULL; - SECItem *resultSecItem = NULL; - - PKIX_ENTER(X500NAME, "pkix_pl_X500Name_CreateFromUtf8"); - PKIX_NULLCHECK_TWO(pName, stringRep); - - nssDN = CERT_AsciiToName(stringRep); - if (nssDN == NULL) { - PKIX_ERROR(PKIX_COULDNOTCREATENSSDN); - } - - arena = nssDN->arena; - - /* create a PKIX_PL_X500Name object */ - PKIX_CHECK(PKIX_PL_Object_Alloc - (PKIX_X500NAME_TYPE, - sizeof (PKIX_PL_X500Name), - (PKIX_PL_Object **)&x500Name, - plContext), - PKIX_COULDNOTCREATEX500NAMEOBJECT); - - /* populate the nssDN field */ - x500Name->arena = arena; - x500Name->nssDN.arena = arena; - x500Name->nssDN.rdns = nssDN->rdns; - - resultSecItem = - SEC_ASN1EncodeItem(arena, &x500Name->derName, nssDN, - CERT_NameTemplate); - - if (resultSecItem == NULL){ - PKIX_ERROR(PKIX_SECASN1ENCODEITEMFAILED); - } - - *pName = x500Name; - -cleanup: - - if (PKIX_ERROR_RECEIVED){ - if (x500Name) { - PKIX_PL_Object_DecRef((PKIX_PL_Object*)x500Name, - plContext); - } else if (nssDN) { - CERT_DestroyName(nssDN); - } - } - - PKIX_RETURN(X500NAME); -} -#endif /* BUILD_LIBPKIX_TESTS */ - -/* - * FUNCTION: pkix_pl_X500Name_GetCERTName - * - * DESCRIPTION: - * - * Returns the pointer to CERTName member of X500Name structure. - * - * Returned pointed should not be freed.2 - * - * PARAMETERS: - * "xname" - * Address of X500Name whose OrganizationName is to be extracted. Must be - * non-NULL. - * "pCERTName" - * Address where result will be stored. Must be non-NULL. - * "plContext" - * Platform-specific context pointer. - * - * THREAD SAFETY: - * Thread Safe (see Thread Safety Definitions in Programmer's Guide) - * - * RETURNS: - * Returns NULL if the function succeeds. - * Returns a Fatal Error if the function fails in an unrecoverable way. - */ -PKIX_Error * -pkix_pl_X500Name_GetCERTName( - PKIX_PL_X500Name *xname, - CERTName **pCERTName, - void *plContext) -{ - PKIX_ENTER(X500NAME, "pkix_pl_X500Name_GetCERTName"); - PKIX_NULLCHECK_TWO(xname, pCERTName); - - *pCERTName = &xname->nssDN; - - PKIX_RETURN(X500NAME); -} - -/* --Public-Functions------------------------------------------------------- */ - -/* - * FUNCTION: PKIX_PL_X500Name_CreateFromCERTName (see comments in pkix_pl_pki.h) - */ - -PKIX_Error * -PKIX_PL_X500Name_CreateFromCERTName( - SECItem *derName, - CERTName *name, - PKIX_PL_X500Name **pName, - void *plContext) -{ - PRArenaPool *arena = NULL; - SECStatus rv = SECFailure; - PKIX_PL_X500Name *x500Name = NULL; - - PKIX_ENTER(X500NAME, "PKIX_PL_X500Name_CreateFromCERTName"); - PKIX_NULLCHECK_ONE(pName); - if (derName == NULL && name == NULL) { - PKIX_ERROR(PKIX_NULLARGUMENT); - } - - arena = PORT_NewArena(DER_DEFAULT_CHUNKSIZE); - if (arena == NULL) { - PKIX_ERROR(PKIX_OUTOFMEMORY); - } - - PKIX_CHECK(PKIX_PL_Object_Alloc - (PKIX_X500NAME_TYPE, - sizeof (PKIX_PL_X500Name), - (PKIX_PL_Object **)&x500Name, - plContext), - PKIX_COULDNOTCREATEX500NAMEOBJECT); - - x500Name->arena = arena; - x500Name->nssDN.arena = NULL; - - if (derName != NULL) { - rv = SECITEM_CopyItem(arena, &x500Name->derName, derName); - if (rv == SECFailure) { - PKIX_ERROR(PKIX_OUTOFMEMORY); - } - } - - if (name != NULL) { - rv = CERT_CopyName(arena, &x500Name->nssDN, name); - if (rv == SECFailure) { - PKIX_ERROR(PKIX_CERTCOPYNAMEFAILED); - } - } else { - rv = SEC_QuickDERDecodeItem(arena, &x500Name->nssDN, - CERT_NameTemplate, - &x500Name->derName); - if (rv == SECFailure) { - PKIX_ERROR(PKIX_SECQUICKDERDECODERFAILED); - } - } - - *pName = x500Name; - -cleanup: - if (PKIX_ERROR_RECEIVED) { - if (x500Name) { - PKIX_PL_Object_DecRef((PKIX_PL_Object*)x500Name, - plContext); - } else if (arena) { - PORT_FreeArena(arena, PR_FALSE); - } - } - - PKIX_RETURN(X500NAME); -} - -#ifdef BUILD_LIBPKIX_TESTS -/* - * FUNCTION: PKIX_PL_X500Name_Create (see comments in pkix_pl_pki.h) - * - * NOTE: ifdefed BUILD_LIBPKIX_TESTS function: this function is allowed - * to be called only by pkix tests programs. - */ -PKIX_Error * -PKIX_PL_X500Name_Create( - PKIX_PL_String *stringRep, - PKIX_PL_X500Name **pName, - void *plContext) -{ - char *utf8String = NULL; - PKIX_UInt32 utf8Length = 0; - - PKIX_ENTER(X500NAME, "PKIX_PL_X500Name_Create"); - PKIX_NULLCHECK_TWO(pName, stringRep); - - /* - * convert the input PKIX_PL_String to PKIX_UTF8_NULL_TERM. - * we need to use this format specifier because - * CERT_AsciiToName expects a NULL-terminated UTF8 string. - * Since UTF8 allow NUL characters in the middle of the - * string, this is buggy. However, as a workaround, using - * PKIX_UTF8_NULL_TERM gives us a NULL-terminated UTF8 string. - */ - - PKIX_CHECK(PKIX_PL_String_GetEncoded - (stringRep, - PKIX_UTF8_NULL_TERM, - (void **)&utf8String, - &utf8Length, - plContext), - PKIX_STRINGGETENCODEDFAILED); - - PKIX_CHECK( - pkix_pl_X500Name_CreateFromUtf8(utf8String, - pName, plContext), - PKIX_X500NAMECREATEFROMUTF8FAILED); - -cleanup: - PKIX_FREE(utf8String); - - PKIX_RETURN(X500NAME); -} -#endif /* BUILD_LIBPKIX_TESTS */ - -/* - * FUNCTION: PKIX_PL_X500Name_Match (see comments in pkix_pl_pki.h) - */ -PKIX_Error * -PKIX_PL_X500Name_Match( - PKIX_PL_X500Name *firstX500Name, - PKIX_PL_X500Name *secondX500Name, - PKIX_Boolean *pResult, - void *plContext) -{ - SECItem *firstDerName = NULL; - SECItem *secondDerName = NULL; - SECComparison cmpResult; - - PKIX_ENTER(X500NAME, "PKIX_PL_X500Name_Match"); - PKIX_NULLCHECK_THREE(firstX500Name, secondX500Name, pResult); - - if (firstX500Name == secondX500Name){ - *pResult = PKIX_TRUE; - goto cleanup; - } - - firstDerName = &firstX500Name->derName; - secondDerName = &secondX500Name->derName; - - PKIX_NULLCHECK_TWO(firstDerName->data, secondDerName->data); - - cmpResult = SECITEM_CompareItem(firstDerName, secondDerName); - if (cmpResult != SECEqual) { - cmpResult = CERT_CompareName(&firstX500Name->nssDN, - &secondX500Name->nssDN); - } - - *pResult = (cmpResult == SECEqual); - -cleanup: - - PKIX_RETURN(X500NAME); -} - -/* - * FUNCTION: pkix_pl_X500Name_GetSECName - * - * DESCRIPTION: - * Returns a copy of CERTName DER representation allocated on passed in arena. - * If allocation on arena can not be done, NULL is stored at "pSECName". - * - * PARAMETERS: - * "xname" - * Address of X500Name whose CERTName flag is to be encoded. Must be - * non-NULL. - * "arena" - * Address of the PRArenaPool to be used in the encoding, and in which - * "pSECName" will be allocated. Must be non-NULL. - * "pSECName" - * Address where result will be stored. Must be non-NULL. - * "plContext" - * Platform-specific context pointer. - * - * THREAD SAFETY: - * Thread Safe (see Thread Safety Definitions in Programmer's Guide) - * - * RETURNS: - * Returns NULL if the function succeeds. - * Returns a Fatal Error if the function fails in an unrecoverable way. - */ -PKIX_Error * -pkix_pl_X500Name_GetDERName( - PKIX_PL_X500Name *xname, - PRArenaPool *arena, - SECItem **pDERName, - void *plContext) -{ - SECItem *derName = NULL; - - PKIX_ENTER(X500NAME, "pkix_pl_X500Name_GetDERName"); - - PKIX_NULLCHECK_THREE(xname, arena, pDERName); - - /* Return NULL is X500Name was not created from DER */ - if (xname->derName.data == NULL) { - *pDERName = NULL; - goto cleanup; - } - - derName = SECITEM_ArenaDupItem(arena, &xname->derName); - if (derName == NULL) { - PKIX_ERROR(PKIX_OUTOFMEMORY); - } - - *pDERName = derName; -cleanup: - - PKIX_RETURN(X500NAME); -} - -/* - * FUNCTION: pkix_pl_X500Name_GetCommonName - * - * DESCRIPTION: - * Extracts the CommonName component of the X500Name object pointed to by - * "xname", and stores the result at "pCommonName". If the CommonName cannot - * be successfully extracted, NULL is stored at "pCommonName". - * - * The returned string must be freed with PORT_Free. - * - * PARAMETERS: - * "xname" - * Address of X500Name whose CommonName is to be extracted. Must be - * non-NULL. - * "pCommonName" - * Address where result will be stored. Must be non-NULL. - * "plContext" - * Platform-specific context pointer. - * - * THREAD SAFETY: - * Thread Safe (see Thread Safety Definitions in Programmer's Guide) - * - * RETURNS: - * Returns NULL if the function succeeds. - * Returns a Fatal Error if the function fails in an unrecoverable way. - */ -PKIX_Error * -pkix_pl_X500Name_GetCommonName( - PKIX_PL_X500Name *xname, - unsigned char **pCommonName, - void *plContext) -{ - PKIX_ENTER(X500NAME, "pkix_pl_X500Name_GetCommonName"); - PKIX_NULLCHECK_TWO(xname, pCommonName); - - *pCommonName = (unsigned char *)CERT_GetCommonName(&xname->nssDN); - - PKIX_RETURN(X500NAME); -} - -/* - * FUNCTION: pkix_pl_X500Name_GetCountryName - * - * DESCRIPTION: - * Extracts the CountryName component of the X500Name object pointed to by - * "xname", and stores the result at "pCountryName". If the CountryName cannot - * be successfully extracted, NULL is stored at "pCountryName". - * - * The returned string must be freed with PORT_Free. - * - * PARAMETERS: - * "xname" - * Address of X500Name whose CountryName is to be extracted. Must be - * non-NULL. - * "pCountryName" - * Address where result will be stored. Must be non-NULL. - * "plContext" - * Platform-specific context pointer. - * - * THREAD SAFETY: - * Thread Safe (see Thread Safety Definitions in Programmer's Guide) - * - * RETURNS: - * Returns NULL if the function succeeds. - * Returns a Fatal Error if the function fails in an unrecoverable way. - */ -PKIX_Error * -pkix_pl_X500Name_GetCountryName( - PKIX_PL_X500Name *xname, - unsigned char **pCountryName, - void *plContext) -{ - PKIX_ENTER(X500NAME, "pkix_pl_X500Name_GetCountryName"); - PKIX_NULLCHECK_TWO(xname, pCountryName); - - *pCountryName = (unsigned char*)CERT_GetCountryName(&xname->nssDN); - - PKIX_RETURN(X500NAME); -} - -/* - * FUNCTION: pkix_pl_X500Name_GetOrgName - * - * DESCRIPTION: - * Extracts the OrganizationName component of the X500Name object pointed to by - * "xname", and stores the result at "pOrgName". If the OrganizationName cannot - * be successfully extracted, NULL is stored at "pOrgName". - * - * The returned string must be freed with PORT_Free. - * - * PARAMETERS: - * "xname" - * Address of X500Name whose OrganizationName is to be extracted. Must be - * non-NULL. - * "pOrgName" - * Address where result will be stored. Must be non-NULL. - * "plContext" - * Platform-specific context pointer. - * - * THREAD SAFETY: - * Thread Safe (see Thread Safety Definitions in Programmer's Guide) - * - * RETURNS: - * Returns NULL if the function succeeds. - * Returns a Fatal Error if the function fails in an unrecoverable way. - */ -PKIX_Error * -pkix_pl_X500Name_GetOrgName( - PKIX_PL_X500Name *xname, - unsigned char **pOrgName, - void *plContext) -{ - PKIX_ENTER(X500NAME, "pkix_pl_X500Name_GetOrgName"); - PKIX_NULLCHECK_TWO(xname, pOrgName); - - *pOrgName = (unsigned char*)CERT_GetOrgName(&xname->nssDN); - - PKIX_RETURN(X500NAME); -} |