/* $OpenLDAP$ */
/*
- * Copyright 2000 The OpenLDAP Foundation, All Rights Reserved.
+ * Copyright 2000-2002 The OpenLDAP Foundation, All Rights Reserved.
* COPYING RESTRICTIONS APPLY, see COPYRIGHT file
*/
typedef struct lutil_sasl_defaults_s {
- unsigned flags;
char *mech;
char *realm;
char *authcid;
void *
lutil_sasl_defaults(
LDAP *ld,
- unsigned flags,
char *mech,
char *realm,
char *authcid,
if( defaults == NULL ) return NULL;
- defaults->flags = flags;
defaults->mech = mech;
defaults->realm = realm;
defaults->authcid = authcid;
}
static int interaction(
- sasl_interact_t *interact, lutilSASLdefaults *defaults )
+ unsigned flags,
+ sasl_interact_t *interact,
+ lutilSASLdefaults *defaults )
{
- unsigned flags = defaults ? defaults->flags : 0;
const char *dflt = interact->defresult;
char input[1024];
if( dflt && !*dflt ) dflt = NULL;
- if( flags != LUTIL_SASL_INTERACTIVE && dflt ) {
+ if( flags != LDAP_SASL_INTERACTIVE &&
+ ( dflt || interact->id == SASL_CB_USER ) )
+ {
goto use_default;
}
- if( flags == LUTIL_SASL_QUIET ) {
+ if( flags == LDAP_SASL_QUIET ) {
/* don't prompt */
return LDAP_OTHER;
}
} else {
use_default:
- /* must be empty */
+ /* input must be empty */
interact->result = strdup( (dflt && *dflt) ? dflt : "" );
interact->len = interact->result
? strlen( interact->result ) : 0;
int lutil_sasl_interact(
LDAP *ld,
+ unsigned flags,
void *defaults,
void *in )
{
sasl_interact_t *interact = in;
- fputs( "SASL Interaction\n", stderr );
+ if( flags == LDAP_SASL_INTERACTIVE ) {
+ fputs( "SASL Interaction\n", stderr );
+ }
while( interact->id != SASL_CB_LIST_END ) {
- int rc = interaction( interact, defaults );
+ int rc = interaction( flags, interact, defaults );
if( rc ) return rc;
interact++;