You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by co...@hyperreal.org on 1999/05/31 19:09:33 UTC
cvs commit: apache-1.3/src/include ap.h
coar 99/05/31 10:09:32
Modified: src/ap Makefile.tmpl
src/include ap.h
Added: src/ap ap_getpass.c
Log:
Prepare for some rework of htpasswd and htdigest by moving a
getpass() wrapper/abstraction into libap.
Revision Changes Path
1.32 +5 -2 apache-1.3/src/ap/Makefile.tmpl
Index: Makefile.tmpl
===================================================================
RCS file: /home/cvs/apache-1.3/src/ap/Makefile.tmpl,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -r1.31 -r1.32
--- Makefile.tmpl 1999/01/12 15:47:04 1.31
+++ Makefile.tmpl 1999/05/31 17:09:30 1.32
@@ -5,8 +5,8 @@
LIB=libap.a
-OBJS=ap_execve.o ap_cpystrn.o ap_signal.o \
- ap_slack.o ap_snprintf.o ap_fnmatch.o ap_md5c.o
+OBJS=ap_cpystrn.o ap_execve.o ap_fnmatch.o ap_getpass.o ap_md5c.o ap_signal.o \
+ ap_slack.o ap_snprintf.o
.c.o:
$(CC) -c $(INCLUDES) $(CFLAGS) $<
@@ -52,6 +52,9 @@
ap_fnmatch.o: ap_fnmatch.c $(INCDIR)/ap_config.h $(INCDIR)/ap_mmn.h \
$(INCDIR)/ap_config_auto.h $(OSDIR)/os.h $(OSDIR)/os-inline.c \
$(INCDIR)/ap_ctype.h $(INCDIR)/hsregex.h $(INCDIR)/fnmatch.h
+ap_getpass.o: ap_getpass.c $(INCDIR)/ap_config.h $(INCDIR)/ap_mmn.h \
+ $(INCDIR)/ap_config_auto.h $(OSDIR)/os.h $(OSDIR)/os-inline.c \
+ $(INCDIR)/ap_ctype.h $(INCDIR)/hsregex.h $(INCDIR)/ap.h
ap_md5c.o: ap_md5c.c $(INCDIR)/ap_config.h $(INCDIR)/ap_mmn.h \
$(INCDIR)/ap_config_auto.h $(OSDIR)/os.h $(OSDIR)/os-inline.c \
$(INCDIR)/ap_ctype.h $(INCDIR)/hsregex.h $(INCDIR)/ap_md5.h \
1.1 apache-1.3/src/ap/ap_getpass.c
Index: ap_getpass.c
===================================================================
/* ====================================================================
* Copyright (c) 1995-1999 The Apache Group. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. All advertising materials mentioning features or use of this
* software must display the following acknowledgment:
* "This product includes software developed by the Apache Group
* for use in the Apache HTTP server project (http://www.apache.org/)."
*
* 4. The names "Apache Server" and "Apache Group" must not be used to
* endorse or promote products derived from this software without
* prior written permission. For written permission, please contact
* apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache"
* nor may "Apache" appear in their names without prior written
* permission of the Apache Group.
*
* 6. Redistributions of any form whatsoever must retain the following
* acknowledgment:
* "This product includes software developed by the Apache Group
* for use in the Apache HTTP server project (http://www.apache.org/)."
*
* THIS SOFTWARE IS PROVIDED BY THE APACHE GROUP ``AS IS'' AND ANY
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE APACHE GROUP OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Group and was originally based
* on public domain software written at the National Center for
* Supercomputing Applications, University of Illinois, Urbana-Champaign.
* For more information on the Apache Group and the Apache HTTP server
* project, please see <http://www.apache.org/>.
*
*/
/*
* ap_getpass.c: abstraction to provide for obtaining a password from the
* command line in whatever way the OS supports. In the best case, it's a
* wrapper for the system library's getpass() routine; otherwise, we
* use one we define ourselves.
*/
#include "ap_config.h"
#include <sys/types.h>
#include <errno.h>
#include "ap.h"
#ifdef WIN32
#include <conio.h>
#endif
#ifndef CHARSET_EBCDIC
#define LF 10
#define CR 13
#else /* CHARSET_EBCDIC */
#define LF '\n'
#define CR '\r'
#endif /* CHARSET_EBCDIC */
#define MAX_STRING_LEN 256
#define ERR_OVERFLOW 5
#ifdef MPE
/*
* MPE lacks getpass() and a way to suppress stdin echo. So for now, just
* issue the prompt and read the results with echo. (Ugh).
*/
static char *getpass(const char *prompt)
{
static char password[MAX_STRING_LEN];
fputs(prompt, stderr);
gets((char *) &password);
if (strlen((char *) &password) > (MAX_STRING_LEN - 1)) {
password[MAX_STRING_LEN - 1] = '\0';
}
return (char *) &password;
}
#endif
#ifdef WIN32
/*
* Windows lacks getpass(). So we'll re-implement it here.
*/
static char *getpass(const char *prompt)
{
static char password[MAX_STRING_LEN];
int n = 0;
fputs(prompt, stderr);
while ((password[n] = _getch()) != '\r') {
if (password[n] >= ' ' && password[n] <= '~') {
n++;
printf("*");
}
else {
printf("\n");
fputs(prompt, stderr);
n = 0;
}
}
password[n] = '\0';
printf("\n");
if (n > (MAX_STRING_LEN - 1)) {
password[MAX_STRING_LEN - 1] = '\0';
}
return (char *) &password;
}
#endif
/*
* Use the OS getpass() routine (or our own) to obtain a password from
* the input stream.
*
* Exit values:
* 0: Success
* 5: Partial success; entered text truncated to the size of the
* destination buffer
*
* Restrictions: Truncation also occurs according to the host system's
* getpass() semantics, or at position 255 if our own version is used,
* but the caller is *not* made aware of it.
*/
API_EXPORT(int) ap_getpass(const char *prompt, char *pwbuf, size_t bufsiz)
{
char *pw_got;
int result = 0;
pw_got = getpass(prompt);
if (strlen(pw_got) > (bufsiz - 1)) {
result = ERR_OVERFLOW;
}
ap_cpystrn(pwbuf, pw_got, bufsiz);
return result;
}
1.21 +1 -0 apache-1.3/src/include/ap.h
Index: ap.h
===================================================================
RCS file: /home/cvs/apache-1.3/src/include/ap.h,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -r1.20 -r1.21
--- ap.h 1999/01/01 19:04:38 1.20
+++ ap.h 1999/05/31 17:09:31 1.21
@@ -69,6 +69,7 @@
int ap_slack(int, int);
int ap_execle(const char *, const char *, ...);
int ap_execve(const char *, const char *argv[], const char *envp[]);
+API_EXPORT(int) ap_getpass(const char *prompt, char *pwbuf, size_t bufsiz);
/* small utility macros to make things easier to read */