From 22adcb9cd1d99858f10e55dc140ceb19d382eee5 Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Thu, 16 Oct 2003 14:08:59 +0000 Subject: [PATCH] password promting support removed from libcurl --- include/curl/curl.h | 6 +- lib/Makefile.am | 4 +- lib/getpass.c | 224 -------------------------------------------- lib/getpass.h | 35 ------- lib/transfer.c | 1 - lib/url.c | 107 ++------------------- 6 files changed, 14 insertions(+), 363 deletions(-) delete mode 100644 lib/getpass.c delete mode 100644 lib/getpass.h diff --git a/include/curl/curl.h b/include/curl/curl.h index 5aa4cc923..0f9e38b5b 100644 --- a/include/curl/curl.h +++ b/include/curl/curl.h @@ -123,6 +123,7 @@ typedef size_t (*curl_read_callback)(char *buffer, size_t nitems, void *instream); + /* not used since 7.10.8, will be removed in a future release */ typedef int (*curl_passwd_callback)(void *clientp, const char *prompt, char *buffer, @@ -503,11 +504,10 @@ typedef enum { this option is used only if SSL_VERIFYPEER is true */ CINIT(CAINFO, OBJECTPOINT, 65), - /* Function pointer to replace the internal password prompt */ + /* OBSOLETE since 7.10.8 */ CINIT(PASSWDFUNCTION, FUNCTIONPOINT, 66), - /* Custom pointer that gets passed as first argument to the password - function */ + /* OBSOLETE since 7.10.8 */ CINIT(PASSWDDATA, OBJECTPOINT, 67), /* Maximum number of http redirects to follow */ diff --git a/lib/Makefile.am b/lib/Makefile.am index 63ca2c4c7..e09e921a5 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -64,13 +64,13 @@ endif libcurl_la_LDFLAGS = $(UNDEF) $(VERSION) $(ARESLIB) -libcurl_la_SOURCES = arpa_telnet.h file.c getpass.h netrc.h timeval.c \ +libcurl_la_SOURCES = arpa_telnet.h file.c netrc.h timeval.c \ base64.c file.h hostip.c progress.c timeval.h base64.h formdata.c \ hostip.h progress.h cookie.c formdata.h http.c sendf.c cookie.h ftp.c \ http.h sendf.h url.c dict.c ftp.h if2ip.c speedcheck.c url.h dict.h \ getdate.c if2ip.h speedcheck.h urldata.h getdate.h ldap.c ssluse.c \ version.c getenv.c ldap.h ssluse.h escape.c mprintf.c telnet.c escape.h \ -getpass.c netrc.c telnet.h getinfo.c getinfo.h transfer.c strequal.c \ +netrc.c telnet.h getinfo.c getinfo.h transfer.c strequal.c \ strequal.h easy.c security.h security.c krb4.c krb4.h memdebug.c \ memdebug.h inet_ntoa_r.h http_chunks.c http_chunks.h strtok.c strtok.h \ connect.c connect.h llist.c llist.h hash.c hash.h multi.c \ diff --git a/lib/getpass.c b/lib/getpass.c deleted file mode 100644 index 7db8f51a9..000000000 --- a/lib/getpass.c +++ /dev/null @@ -1,224 +0,0 @@ -/* ============================================================================ - * Copyright (C) 1998 - 2002, Daniel Stenberg, , et al. - * - * Redistribution and use are freely permitted provided that: - * - * 1) This header remain in tact. - * 2) The prototypes for getpass and getpass_r are not changed from: - * char *getpass(const char *prompt) - * char *getpass_r(const char *prompt, char* buffer, int buflen) - * 3) This source code is not used outside of this(getpass.c) file. - * 4) Any changes to this(getpass.c) source code are made publicly available. - * - * THIS SOFTWARE IS PROVIDED ``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 - * AUTHOR 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. - * ============================================================================ - * - * $Id$ - * - * The spirit of this license is to allow use of this source code in any - * project be it open or closed but still encourage the use of the open, - * library based equivilents. - * - * Author(s): - * Angus Mackay - * - * Contributor(s): - * Daniel Stenberg - */ - -#include "setup.h" /* setup.h is required for read() prototype */ - -#ifndef HAVE_GETPASS_R - -#ifndef WIN32 -#ifdef VMS -#include -#include -#include descrip -#include starlet -#include iodef -#include iosbdef -char *getpass_r(const char *prompt, char *buffer, size_t buflen) -{ - long sts; - short chan; - struct _iosb iosb; - $DESCRIPTOR(ttdesc, "TT"); - - buffer[0]='\0'; - if ((sts = sys$assign(&ttdesc, &chan,0,0)) & 1) { - if (((sts = sys$qiow(0, chan, IO$_READPROMPT | IO$M_NOECHO, &iosb, 0, 0, buffer, buflen, 0, 0, prompt, strlen(prompt))) & 1) && (iosb.iosb$w_status&1)) { - buffer[iosb.iosb$w_bcnt] = '\0'; - } - sts = sys$dassgn(chan); - } - return buffer; /* we always return success */ -} -#else /* VMS */ -#ifdef HAVE_TERMIOS_H -# if !defined(HAVE_TCGETATTR) && !defined(HAVE_TCSETATTR) -# undef HAVE_TERMIOS_H -# endif -#endif - -#ifndef RETSIGTYPE -# define RETSIGTYPE void -#endif - -#ifdef HAVE_UNISTD_H -#include -#endif -#include -#include -#ifdef HAVE_TERMIOS_H -# include -#else -# ifdef HAVE_TERMIO_H -# include -# else -# endif -#endif - -/* The last #include file should be: */ -#ifdef CURLDEBUG -#include "memdebug.h" -#endif - -char *getpass_r(const char *prompt, char *buffer, size_t buflen) -{ - FILE *infp; - char infp_fclose = 0; - FILE *outfp; - RETSIGTYPE (*sigint)(); -#ifdef SIGTSTP - RETSIGTYPE (*sigtstp)(); -#endif - size_t bytes_read; - int infd; - int outfd; -#ifdef HAVE_TERMIOS_H - struct termios orig; - struct termios noecho; -#else -# ifdef HAVE_TERMIO_H - struct termio orig; - struct termio noecho; -# else -# endif -#endif - - sigint = signal(SIGINT, SIG_IGN); -#ifdef SIGTSTP - sigtstp = signal(SIGTSTP, SIG_IGN); -#endif - - infp=fopen("/dev/tty", "r"); - if( NULL == infp ) - infp = stdin; - else - infp_fclose = 1; - - outfp = stderr; - - infd = fileno(infp); - outfd = fileno(outfp); - - /* dissable echo */ -#ifdef HAVE_TERMIOS_H - tcgetattr(outfd, &orig); - - noecho = orig; - noecho.c_lflag &= ~ECHO; - tcsetattr(outfd, TCSANOW, &noecho); -#else -# ifdef HAVE_TERMIO_H - ioctl(outfd, TCGETA, &orig); - noecho = orig; - noecho.c_lflag &= ~ECHO; - ioctl(outfd, TCSETA, &noecho); -# else -# endif -#endif - - fputs(prompt, outfp); - fflush(outfp); - - bytes_read=read(infd, buffer, buflen); - buffer[bytes_read > 0 ? (bytes_read -1) : 0] = '\0'; - - /* print a new line if needed */ -#ifdef HAVE_TERMIOS_H - fputs("\n", outfp); -#else -# ifdef HAVE_TERMIO_H - fputs("\n", outfp); -# else -# endif -#endif - - /* - * reset term charectaristics, use TCSAFLUSH incase the - * user types more than buflen - */ -#ifdef HAVE_TERMIOS_H - tcsetattr(outfd, TCSAFLUSH, &orig); -#else -# ifdef HAVE_TERMIO_H - ioctl(outfd, TCSETA, &orig); -# else -# endif -#endif - - signal(SIGINT, sigint); -#ifdef SIGTSTP - signal(SIGTSTP, sigtstp); -#endif - - if(infp_fclose) - fclose(infp); - - return buffer; /* we always return success */ -} -#endif /* VMS */ -#else /* WIN32 */ -#include -#include -char *getpass_r(const char *prompt, char *buffer, int buflen) -{ - int i; - printf("%s", prompt); - - for(i=0; i, et al. - * - * This software is licensed as described in the file COPYING, which - * you should have received as part of this distribution. The terms - * are also available at http://curl.haxx.se/docs/copyright.html. - * - * You may opt to use, copy, modify, merge, publish, distribute and/or sell - * copies of the Software, and permit persons to whom the Software is - * furnished to do so, under the terms of the COPYING file. - * - * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY - * KIND, either express or implied. - * - * $Id$ - ***************************************************************************/ -#ifndef HAVE_GETPASS_R -/* If there's a system-provided function named like this, we trust it is - also found in one of the standard headers. */ - -/* - * Returning NULL will abort the continued operation! - */ -char* getpass_r(const char *prompt, char* buffer, size_t buflen ); -#endif - -#endif diff --git a/lib/transfer.c b/lib/transfer.c index c7e9bac44..956a47996 100644 --- a/lib/transfer.c +++ b/lib/transfer.c @@ -86,7 +86,6 @@ #include "transfer.h" #include "sendf.h" #include "speedcheck.h" -#include "getpass.h" #include "progress.h" #include "getdate.h" #include "http.h" diff --git a/lib/url.c b/lib/url.c index c76ad9e7f..7271af1da 100644 --- a/lib/url.c +++ b/lib/url.c @@ -97,7 +97,6 @@ #include "if2ip.h" #include "transfer.h" #include "sendf.h" -#include "getpass.h" #include "progress.h" #include "cookie.h" #include "strequal.h" @@ -241,20 +240,6 @@ CURLcode Curl_close(struct SessionHandle *data) return CURLE_OK; } -static -int my_getpass(void *clientp, const char *prompt, char* buffer, int buflen ) -{ - char *retbuf; - clientp=NULL; /* prevent compiler warning */ - - retbuf = getpass_r(prompt, buffer, buflen); - if(NULL == retbuf) - return 1; - else - return 0; /* success */ -} - - CURLcode Curl_open(struct SessionHandle **curl) { /* We don't yet support specifying the URL at this point */ @@ -287,9 +272,6 @@ CURLcode Curl_open(struct SessionHandle **curl) /* use fread as default function to read input */ data->set.fread = (curl_read_callback)fread; - /* set the default passwd function */ - data->set.fpasswd = my_getpass; - data->set.infilesize = -1; /* we don't know any size */ data->state.current_speed = -1; /* init to negative == impossible */ @@ -949,25 +931,6 @@ CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option, ...) */ data->set.progress_client = va_arg(param, void *); break; - case CURLOPT_PASSWDFUNCTION: - /* - * Password prompt callback - */ - data->set.fpasswd = va_arg(param, curl_passwd_callback); - /* - * if the callback provided is null, reset the default callback - */ - if(!data->set.fpasswd) - { - data->set.fpasswd = my_getpass; - } - break; - case CURLOPT_PASSWDDATA: - /* - * Custom client data to pass to the password callback - */ - data->set.passwd_client = va_arg(param, void *); - break; case CURLOPT_PROXYUSERPWD: /* * user:password needed to use the proxy @@ -1936,8 +1899,6 @@ static CURLcode CreateConnection(struct SessionHandle *data, char endbracket; char user[MAX_CURL_USER_LENGTH]; char passwd[MAX_CURL_PASSWORD_LENGTH]; - bool passwdgiven=FALSE; /* set TRUE if an application-provided password has - been set */ int rc; #ifdef HAVE_SIGACTION @@ -2157,32 +2118,9 @@ static CURLcode CreateConnection(struct SessionHandle *data, if(conn->bits.proxy_user_passwd) { char proxyuser[MAX_CURL_USER_LENGTH]=""; char proxypasswd[MAX_CURL_PASSWORD_LENGTH]=""; - passwdgiven = FALSE; - if(*data->set.proxyuserpwd != ':') { - /* the name is given, get user+password */ - sscanf(data->set.proxyuserpwd, "%127[^:]:%127[^\n]", - proxyuser, proxypasswd); - if(strchr(data->set.proxyuserpwd, ':')) - /* a colon means the password was given, even if blank */ - passwdgiven = TRUE; - } - else { - /* no name given, get the password only */ - sscanf(data->set.proxyuserpwd+1, "%127[^\n]", proxypasswd); - passwdgiven = TRUE; - } - - /* check for password, if no ask for one */ - if( !proxypasswd[0] && !passwdgiven) { - if(data->set.fpasswd( data->set.passwd_client, - "proxy password:", - proxypasswd, - sizeof(proxypasswd))) { - failf(data, "Bad password from password callback"); - return CURLE_BAD_PASSWORD_ENTERED; - } - } + sscanf(data->set.proxyuserpwd, "%127[^:]:%127[^\n]", + proxyuser, proxypasswd); conn->proxyuser = strdup(proxyuser); if(!conn->proxyuser) @@ -2728,7 +2666,6 @@ static CURLcode CreateConnection(struct SessionHandle *data, user[0] =0; /* to make everything well-defined */ passwd[0]=0; - passwdgiven = FALSE; /* none given so far */ if (conn->protocol & (PROT_FTP|PROT_HTTP)) { /* This is a FTP or HTTP URL, we will now try to extract the possible @@ -2777,9 +2714,6 @@ static CURLcode CreateConnection(struct SessionHandle *data, strcpy(passwd, newpasswd); } free(newpasswd); - - /* we have set the password */ - passwdgiven = TRUE; } } } @@ -2795,47 +2729,24 @@ static CURLcode CreateConnection(struct SessionHandle *data, * so it doesn't have to be set in this block */ if (data->set.userpwd != NULL) { - if(*data->set.userpwd != ':') { - /* the name is given, get user+password */ - sscanf(data->set.userpwd, "%127[^:]:%127[^\n]", - user, passwd); - if(strchr(data->set.userpwd, ':')) - /* a colon means the password was given, even if blank */ - passwdgiven = TRUE; - } - else - /* no name given, starts with a colon, get the password only */ - sscanf(data->set.userpwd+1, "%127[^\n]", passwd); + /* the name is given, get user+password */ + sscanf(data->set.userpwd, "%127[^:]:%127[^\n]", + user, passwd); } - if ((data->set.use_netrc != CURL_NETRC_IGNORED) && - !passwdgiven) { /* need passwd */ + if (data->set.use_netrc != CURL_NETRC_IGNORED) { if(Curl_parsenetrc(conn->hostname, - user, - passwd)) { + user, passwd)) { infof(data, "Couldn't find host %s in the .netrc file, using defaults", conn->hostname); } - else { + else conn->bits.user_passwd = 1; /* enable user+password */ - passwdgiven = TRUE; - } } - /* if we have a user but no password, ask for one */ - if(conn->bits.user_passwd && !passwdgiven ) { - if(data->set.fpasswd(data->set.passwd_client, - "password:", passwd, - sizeof(passwd))) - return CURLE_BAD_PASSWORD_ENTERED; - } - - /* So we could have a password but no user; that's just too bad. */ - /* If our protocol needs a password and we have none, use the defaults */ if ( (conn->protocol & (PROT_FTP|PROT_HTTP)) && - !conn->bits.user_passwd && - !passwdgiven) { + !conn->bits.user_passwd) { strcpy(user, CURL_DEFAULT_USER); strcpy(passwd, CURL_DEFAULT_PASSWORD);