mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-12-23 16:19:35 -05:00
ITS#7360 accept nss certname in the form of tokenname:certnickname
There are cases where the user may want to force the use of a particular PKCS11 device to use for a given certificate. Allow the user to do this with MozNSS by specifying the cert as "tokenname:certnickname" where token name is the name of a token/slot in a PKCS11 device and certnickname is the nickname of a certificate on that device.
This commit is contained in:
parent
1ebf95c31b
commit
a0e48e7246
1 changed files with 20 additions and 1 deletions
|
|
@ -2102,6 +2102,22 @@ tlsm_ctx_init( struct ldapoptions *lo, struct ldaptls *lt, int is_server )
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* returns true if the given string looks like
|
||||||
|
"tokenname" ":" "certnickname"
|
||||||
|
This is true if there is a ':' colon character
|
||||||
|
in the string and the colon is not the first
|
||||||
|
or the last character in the string
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
tlsm_is_tokenname_certnick( const char *certfile )
|
||||||
|
{
|
||||||
|
if ( certfile ) {
|
||||||
|
const char *ptr = PL_strchr( certfile, ':' );
|
||||||
|
return ptr && (ptr != certfile) && (*(ptr+1));
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
tlsm_deferred_ctx_init( void *arg )
|
tlsm_deferred_ctx_init( void *arg )
|
||||||
{
|
{
|
||||||
|
|
@ -2268,7 +2284,10 @@ tlsm_deferred_ctx_init( void *arg )
|
||||||
} else {
|
} else {
|
||||||
char *tmp_certname;
|
char *tmp_certname;
|
||||||
|
|
||||||
if ( ctx->tc_certdb_slot ) {
|
if ( tlsm_is_tokenname_certnick( lt->lt_certfile )) {
|
||||||
|
/* assume already in form tokenname:certnickname */
|
||||||
|
tmp_certname = PL_strdup( lt->lt_certfile );
|
||||||
|
} else if ( ctx->tc_certdb_slot ) {
|
||||||
tmp_certname = PR_smprintf( TLSM_CERTDB_DESC_FMT ":%s", ctx->tc_unique, lt->lt_certfile );
|
tmp_certname = PR_smprintf( TLSM_CERTDB_DESC_FMT ":%s", ctx->tc_unique, lt->lt_certfile );
|
||||||
} else {
|
} else {
|
||||||
tmp_certname = PR_smprintf( "%s", lt->lt_certfile );
|
tmp_certname = PR_smprintf( "%s", lt->lt_certfile );
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue