GNU Wget is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
+the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
GNU Wget is distributed in the hope that it will be useful,
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
-along with Wget; if not, write to the Free Software
-Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
+along with Wget. If not, see <http://www.gnu.org/licenses/>.
+
+In addition, as a special exception, the Free Software Foundation
+gives permission to link the code of its release of Wget with the
+OpenSSL project's "OpenSSL" library (or with modified versions of it
+that use the same license as the "OpenSSL" library), and distribute
+the linked executables. You must obey the GNU General Public License
+in all respects for all of the code used other than "OpenSSL". If you
+modify this file, you may extend this exception to your version of the
+file, but you are not obligated to do so. If you do not wish to do
+so, delete this exception statement from your version. */
/* This file used to be kept in synch with the code in Fetchmail, but
the latter has diverged since. */
#include <stdio.h>
#include <stdlib.h>
-#ifdef HAVE_STRING_H
-# include <string.h>
-#else
-# include <strings.h>
-#endif
-#include <sys/types.h>
+#include <string.h>
#include <errno.h>
#include "wget.h"
#include "netrc.h"
#include "init.h"
-#ifndef errno
-extern int errno;
-#endif
-
#define NETRC_FILE_NAME ".netrc"
acc_t *netrc_list;
-static acc_t *parse_netrc PARAMS ((const char *));
+static acc_t *parse_netrc (const char *);
/* Return the correct user and password, given the host, user (as
given in the URL), and password (as given in the URL). May return
if (home)
{
int err;
- struct stat buf;
+ struct_stat buf;
char *path = (char *)alloca (strlen (home) + 1
+ strlen (NETRC_FILE_NAME) + 1);
sprintf (path, "%s/%s", home, NETRC_FILE_NAME);
{
int length = 0;
int bufsize = 81;
- char *line = (char *)xmalloc (bufsize);
+ char *line = xmalloc (bufsize);
while (fgets (line + length, bufsize - length, fp))
{
if (a && ! a->acc)
{
/* Free any allocated space. */
- xfree (a->host);
- xfree (a->acc);
- xfree (a->passwd);
+ xfree_null (a->host);
+ xfree_null (a->acc);
+ xfree_null (a->passwd);
}
else
{
}
/* Allocate a new acc_t structure. */
- a = (acc_t *)xmalloc (sizeof (acc_t));
+ a = xmalloc (sizeof (acc_t));
}
/* Zero the structure, so that it is ready to use. */
null-terminated string once character to the left.
Used in processing \ and " constructs in the netrc file */
static void
-shift_left(char *string){
+shift_left(char *string)
+{
char *p;
for (p=string; *p; ++p)
parse_netrc (const char *path)
{
FILE *fp;
- char *line, *p, *tok, *premature_token;
+ char *line, *p, *tok;
+ const char *premature_token;
acc_t *current, *retval;
int ln, quote;
premature_token = NULL;
/* While there are lines in the file... */
- while ((line = read_whole_line (fp)))
+ while ((line = read_whole_line (fp)) != NULL)
{
ln ++;
p = line;
quote = 0;
+ /* Skip leading whitespace. */
+ while (*p && ISSPACE (*p))
+ p ++;
+
/* If the line is empty, then end any macro definition. */
if (last_token == tok_macdef && !*p)
/* End of macro if the line is empty. */
p ++;
}
- /* if field was quoted, squash the trailing quotation mark */
+ /* If field was quoted, squash the trailing quotation mark
+ and reset quote flag. */
if (quote)
- shift_left(p);
+ {
+ shift_left (p);
+ quote = 0;
+ }
/* Null-terminate the token, if it isn't already. */
if (*p)
while (l)
{
t = l->next;
- FREE_MAYBE (l->acc);
- FREE_MAYBE (l->passwd);
- FREE_MAYBE (l->host);
+ xfree_null (l->acc);
+ xfree_null (l->passwd);
+ xfree_null (l->host);
xfree (l);
l = t;
}
int
main (int argc, char **argv)
{
- struct stat sb;
+ struct_stat sb;
char *program_name, *file, *target;
acc_t *head, *a;