mirror of
https://git.openldap.org/openldap/openldap.git
synced 2024-12-15 03:01:09 +08:00
use getpass() instead of mygetpass().
getpass() is implemented in -llutil (if needed).
This commit is contained in:
parent
5b218b7671
commit
6b94bc7e0e
@ -236,7 +236,7 @@ auth( char *who, int implicit )
|
||||
authmethod = LDAP_AUTH_SIMPLE;
|
||||
sprintf(prompt, " Enter your LDAP password: ");
|
||||
do {
|
||||
passwd = mygetpass(prompt);
|
||||
passwd = getpass(prompt);
|
||||
} while (passwd != NULL && *passwd == '\0');
|
||||
if (passwd == NULL) {
|
||||
(void) ldap_value_free(rdns);
|
||||
|
@ -278,7 +278,6 @@ void ka_StringToKey LDAP_P(( char *str, char *cell, des_cblock *key ));
|
||||
#endif
|
||||
|
||||
/* in util.c: */
|
||||
char *mygetpass LDAP_P(( char *prompt ));
|
||||
void printbase LDAP_P(( char *lead, char *s ));
|
||||
void fetch_buffer LDAP_P(( char *buffer, int length, FILE *where ));
|
||||
void fatal LDAP_P(( char *s ));
|
||||
|
@ -24,132 +24,12 @@
|
||||
#include <ac/time.h>
|
||||
#include <ac/unistd.h>
|
||||
|
||||
#ifdef HAVE_FCNTL_H
|
||||
#include <fcntl.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONIO_H
|
||||
#include <conio.h>
|
||||
#endif
|
||||
|
||||
#include <lber.h>
|
||||
#include <ldap.h>
|
||||
#include <ldapconfig.h>
|
||||
|
||||
#include "ud.h"
|
||||
|
||||
char *
|
||||
mygetpass( char *prompt )
|
||||
{
|
||||
#if !defined(HAVE_POSIX_TERMIOS) && !defined(HAVE_SGTTY_H)
|
||||
static char buf[256];
|
||||
int i, c;
|
||||
|
||||
#ifdef DEBUG
|
||||
if (debug & D_TRACE)
|
||||
printf("->mygetpass(%s)\n", prompt);
|
||||
#endif
|
||||
printf("%s", prompt);
|
||||
i = 0;
|
||||
while ( (c = getch()) != EOF && c != '\n' && c != '\r' )
|
||||
buf[i++] = c;
|
||||
if ( c == EOF )
|
||||
return( NULL );
|
||||
buf[i] = '\0';
|
||||
return (buf);
|
||||
#else
|
||||
int no_pass = 0;
|
||||
char i, j, k;
|
||||
TERMIO_TYPE ttyb;
|
||||
TERMFLAG_TYPE flags;
|
||||
static char pbuf[513];
|
||||
register char *p;
|
||||
register int c;
|
||||
FILE *fi;
|
||||
RETSIGTYPE (*sig)( int sig );
|
||||
|
||||
#ifdef DEBUG
|
||||
if (debug & D_TRACE)
|
||||
printf("->mygetpass(%s)\n", prompt);
|
||||
#endif
|
||||
/*
|
||||
* Stolen from the getpass() routine. Can't use the plain
|
||||
* getpass() for two reasons. One is that LDAP passwords
|
||||
* can be really, really long - much longer than 8 chars.
|
||||
* The second is that we like to make this client available
|
||||
* out of inetd via a Merit asynch port, and we need to be
|
||||
* able to do telnet control codes to turn on and off line
|
||||
* blanking.
|
||||
*/
|
||||
if ((fi = fdopen(open("/dev/tty", 2), "r")) == NULL)
|
||||
fi = stdin;
|
||||
else
|
||||
setbuf(fi, (char *)NULL);
|
||||
sig = SIGNAL (SIGINT, SIG_IGN);
|
||||
if (fi != stdin) {
|
||||
if (GETATTR(fileno(fi), &ttyb) < 0)
|
||||
perror("GETATTR");
|
||||
}
|
||||
flags = GETFLAGS( ttyb );
|
||||
SETFLAGS( ttyb, flags & ~ECHO );
|
||||
if (fi != stdin) {
|
||||
if (SETATTR(fileno(fi), &ttyb) < 0)
|
||||
perror("SETATTR");
|
||||
}
|
||||
|
||||
/* blank the line if through Merit */
|
||||
if (fi == stdin) {
|
||||
printf("%c%c%c", 255, 251, 1);
|
||||
fflush(stdout);
|
||||
(void) scanf("%c%c%c", &i, &j, &k);
|
||||
fflush(stdin);
|
||||
}
|
||||
|
||||
/* fetch the password */
|
||||
fprintf(stdout, "%s", prompt);
|
||||
fflush(stdout);
|
||||
for (p=pbuf; (c = getc(fi))!='\n' && c!=EOF;) {
|
||||
if (c == '\r')
|
||||
break;
|
||||
if (p < &pbuf[512])
|
||||
*p++ = c;
|
||||
}
|
||||
if (c == EOF)
|
||||
no_pass = 1;
|
||||
else {
|
||||
*p = '\0';
|
||||
if (*(p - 1) == '\r')
|
||||
*(p - 1) = '\0';
|
||||
}
|
||||
|
||||
/* unblank the line if through Merit */
|
||||
if (fi == stdin) {
|
||||
printf("%c%c%c", 255, 252, 1);
|
||||
fflush(stdout);
|
||||
(void) scanf("%c%c%c", &i, &j, &k);
|
||||
fflush(stdin);
|
||||
printf("\n"); fflush(stdout);
|
||||
}
|
||||
fprintf(stdout, "\n");
|
||||
fflush(stdout);
|
||||
|
||||
/* tidy up */
|
||||
SETFLAGS( ttyb, flags );
|
||||
if (fi != stdin) {
|
||||
if (SETATTR(fileno(fi), &ttyb) < 0)
|
||||
perror("SETATTR");
|
||||
}
|
||||
(void) SIGNAL (SIGINT, sig);
|
||||
if (fi != stdin)
|
||||
(void) fclose(fi);
|
||||
else
|
||||
i = getchar();
|
||||
if (no_pass)
|
||||
return(NULL);
|
||||
return(pbuf);
|
||||
#endif /* DOS */
|
||||
}
|
||||
|
||||
void
|
||||
printbase( char *lead, char *s )
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user