3 * Copyright 2000 The OpenLDAP Foundation, All Rights Reserved.
4 * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
12 #include <ac/stdlib.h>
13 #include <ac/string.h>
14 #include <ac/unistd.h>
19 #include "lutil_ldap.h"
21 static int interaction(
22 sasl_interact_t *interact )
29 switch( interact->id ) {
30 case SASL_CB_NOECHOPROMPT:
34 case SASL_CB_ECHOPROMPT:
43 if( interact->challenge ) {
44 fprintf( stderr, "Challenge: %s\n", interact->challenge );
46 if( interact->defresult ) {
47 fprintf( stderr, "Default Result: %s\n", interact->defresult );
51 sprintf( input, "%s: ",
52 interact->prompt ? interact->prompt : "Interaction required" );
55 interact->result = (char *) getpassphrase( input );
56 interact->len = interact->result
57 ? strlen( interact->result ) : 0;
61 fputs( input, stderr );
64 interact->result = fgets( input, sizeof(input), stdin );
66 if( interact->result == NULL ) {
68 return LDAP_UNAVAILABLE;
72 interact->len = strlen(input);
74 if( interact->len > 0 && input[interact->len - 1] == '\n' ) {
75 /* input includes '\n', trim it */
77 input[interact->len] = '\0';
82 if( interact->len > 0 ) {
84 char *p = interact->result;
85 interact->result = strdup( p );
88 memset( p, '\0', interact->len );
92 interact->result = strdup("");
98 int lutil_sasl_interact(
102 sasl_interact_t *interact = in;
104 while( interact->id != SASL_CB_LIST_END ) {
105 int rc = interaction( interact );