-diff -u --recursive --new-file krb5-1.7-vanilla/src/appl/gssftp/ftp/Makefile.in krb5-1.7/src/appl/gssftp/ftp/Makefile.in
---- krb5-1.7-vanilla/src/appl/gssftp/ftp/Makefile.in 2009-09-30 22:58:22.000000000 -0400
-+++ krb5-1.7/src/appl/gssftp/ftp/Makefile.in 2009-10-01 15:35:02.000000000 -0400
-@@ -12,14 +12,14 @@
- SRCS = $(srcdir)/cmds.c $(srcdir)/cmdtab.c $(srcdir)/domacro.c \
- $(srcdir)/ftp.c $(srcdir)/getpass.c $(srcdir)/glob.c \
- $(srcdir)/main.c $(srcdir)/radix.c \
-- $(srcdir)/ruserpass.c $(srcdir)/secure.c
-+ $(srcdir)/ruserpw.c $(srcdir)/secure.c
-
-
- OBJS = $(OUTPRE)cmds.$(OBJEXT) $(OUTPRE)cmdtab.$(OBJEXT) \
- $(OUTPRE)domacro.$(OBJEXT) $(OUTPRE)ftp.$(OBJEXT) \
- $(OUTPRE)getpass.$(OBJEXT) $(OUTPRE)glob.$(OBJEXT) \
- $(OUTPRE)main.$(OBJEXT) $(OUTPRE)radix.$(OBJEXT) \
-- $(OUTPRE)ruserpass.$(OBJEXT) $(OUTPRE)secure.$(OBJEXT)
-+ $(OUTPRE)ruserpw.$(OBJEXT) $(OUTPRE)secure.$(OBJEXT)
-
- LOCALINCLUDES = -I$(srcdir)/.. -I$(srcdir)
-
-@@ -47,7 +47,7 @@
- done
-
- ftp.o cmds.o main.o: $(srcdir)/../arpa/ftp.h
--ftp.o cmds.o cmdtab.o domacro.o main.o ruserpass.o: $(srcdir)/ftp_var.h
-+ftp.o cmds.o cmdtab.o domacro.o main.o ruserpw.o: $(srcdir)/ftp_var.h
- secure.o: secure.h
-
- cmds.o: $(srcdir)/cmds.c
-@@ -57,7 +57,7 @@
- glob.o: $(srcdir)/glob.c
- main.o: $(srcdir)/main.c
- pclose.o: $(srcdir)/pclose.c
--ruserpass.o: $(srcdir)/ruserpass.c
-+ruserpw.o: $(srcdir)/ruserpw.c
- domacro.o: $(srcdir)/domacro.c
- radix.o: $(srcdir)/radix.c
- secure.o: $(srcdir)/secure.c
-diff -u --recursive --new-file krb5-1.7-vanilla/src/appl/gssftp/ftp/deps krb5-1.7/src/appl/gssftp/ftp/deps
---- krb5-1.7-vanilla/src/appl/gssftp/ftp/deps 2009-09-30 22:58:24.000000000 -0400
-+++ krb5-1.7/src/appl/gssftp/ftp/deps 2009-10-01 15:35:02.000000000 -0400
-@@ -22,7 +22,7 @@
- $(SRCTOP)/include/port-sockets.h $(srcdir)/../arpa/ftp.h \
- ftp_var.h main.c
- $(OUTPRE)radix.$(OBJEXT): ftp_var.h radix.c
--$(OUTPRE)ruserpass.$(OBJEXT): ftp_var.h ruserpass.c
-+$(OUTPRE)ruserpw.$(OBJEXT): ftp_var.h ruserpw.c
- $(OUTPRE)secure.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \
- $(BUILDTOP)/include/gssapi/gssapi.h $(BUILDTOP)/include/gssapi/gssapi_generic.h \
- $(srcdir)/../arpa/ftp.h secure.c secure.h
-diff -u --recursive --new-file krb5-1.7-vanilla/src/appl/gssftp/ftp/ftp.c krb5-1.7/src/appl/gssftp/ftp/ftp.c
---- krb5-1.7-vanilla/src/appl/gssftp/ftp/ftp.c 2009-09-30 22:58:22.000000000 -0400
-+++ krb5-1.7/src/appl/gssftp/ftp/ftp.c 2009-10-01 15:35:03.000000000 -0400
-@@ -318,7 +318,7 @@
- int n, aflag = 0;
-
- l_user = pass = l_acct = 0;
-- if (ruserpass(host, &l_user, &pass, &l_acct) < 0) {
-+ if (ruserpw(host, &l_user, &pass, &l_acct) < 0) {
- code = -1;
- return(0);
- }
-diff -u --recursive --new-file krb5-1.7-vanilla/src/appl/gssftp/ftp/ftp_var.h krb5-1.7/src/appl/gssftp/ftp/ftp_var.h
---- krb5-1.7-vanilla/src/appl/gssftp/ftp/ftp_var.h 2009-09-30 22:58:23.000000000 -0400
-+++ krb5-1.7/src/appl/gssftp/ftp/ftp_var.h 2009-10-01 15:35:03.000000000 -0400
-@@ -274,8 +274,8 @@
- struct cmd *getcmd (char *);
-
-
--/* ruserpass.c */
--int ruserpass (char *, char **, char **, char **);
-+/* ruserpw.c */
-+int ruserpw (char *, char **, char **, char **);
-
- /* radix.h */
- int radix_encode (unsigned char *, unsigned char *, int *, int);
-diff -u --recursive --new-file krb5-1.7-vanilla/src/appl/gssftp/ftp/ruserpass.c krb5-1.7/src/appl/gssftp/ftp/ruserpass.c
---- krb5-1.7-vanilla/src/appl/gssftp/ftp/ruserpass.c 2009-09-30 22:58:24.000000000 -0400
-+++ krb5-1.7/src/appl/gssftp/ftp/ruserpass.c 1969-12-31 19:00:00.000000000 -0500
-@@ -1,293 +0,0 @@
--/*
-- * Copyright (c) 1985 Regents of the University of California.
-- * 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 acknowledgement:
-- * This product includes software developed by the University of
-- * California, Berkeley and its contributors.
-- * 4. Neither the name of the University nor the names of its contributors
-- * may be used to endorse or promote products derived from this software
-- * without specific prior written permission.
-- *
-- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
-- * ANY EXPRESS 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 REGENTS OR 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.
-- */
--
--#ifndef lint
--static char sccsid[] = "@(#)ruserpass.c 5.3 (Berkeley) 3/1/91";
--#endif /* not lint */
--
--#include <sys/types.h>
--#include <stdio.h>
--#include <string.h>
--#ifdef HAVE_STDLIB_H
--#include <stdlib.h>
--#endif
--#ifdef HAVE_UNISTD_H
--#include <unistd.h>
--#endif
--#include <ctype.h>
--#include <sys/stat.h>
--#include <errno.h>
--#include "ftp_var.h"
--
--#ifdef _WIN32
--#include <win-mac.h>
--#endif
--
--#ifndef MAXHOSTNAMELEN
--#define MAXHOSTNAMELEN 64
--#endif
--
--static int token (void);
--static FILE *cfile;
--
--#define DEFAULT 1
--#define LOGIN 2
--#define PASSWD 3
--#define ACCOUNT 4
--#define MACDEF 5
--#define ID 10
--#define MACH 11
--
--static char tokval[100];
--
--static struct toktab {
-- char *tokstr;
-- int tval;
--} toktab[]= {
-- { "default", DEFAULT },
-- { "login", LOGIN },
-- { "password", PASSWD },
-- { "passwd", PASSWD },
-- { "account", ACCOUNT },
-- { "machine", MACH },
-- { "macdef", MACDEF },
-- { NULL, 0 }
--};
--
--
--static int
--token()
--{
-- char *cp;
-- int c;
-- struct toktab *t;
--
-- if (feof(cfile))
-- return (0);
-- while ((c = getc(cfile)) != EOF &&
-- (c == '\n' || c == '\t' || c == ' ' || c == ','))
-- continue;
-- if (c == EOF)
-- return (0);
-- cp = tokval;
-- if (c == '"') {
-- while ((c = getc(cfile)) != EOF && c != '"') {
-- if (c == '\\')
-- c = getc(cfile);
-- *cp++ = c;
-- }
-- } else {
-- *cp++ = c;
-- while ((c = getc(cfile)) != EOF
-- && c != '\n' && c != '\t' && c != ' ' && c != ',') {
-- if (c == '\\')
-- c = getc(cfile);
-- *cp++ = c;
-- }
-- }
-- *cp = 0;
-- if (tokval[0] == 0)
-- return (0);
-- for (t = toktab; t->tokstr; t++)
-- if (!strcmp(t->tokstr, tokval))
-- return (t->tval);
-- return (ID);
--}
--
--int
--ruserpass(host, aname, apass, aacct)
-- char *host, **aname, **apass, **aacct;
--{
-- char *hdir, buf[FTP_BUFSIZ], *tmp;
-- char myname[MAXHOSTNAMELEN + 1], *mydomain;
-- int t, i, c, usedefault = 0;
-- struct stat stb;
--
-- hdir = getenv("HOME");
-- if (hdir == NULL)
-- hdir = ".";
-- (void) snprintf(buf, sizeof(buf), "%s/.netrc", hdir);
-- cfile = fopen(buf, "r");
-- if (cfile == NULL) {
-- if (errno != ENOENT)
-- perror(buf);
-- return(0);
-- }
-- if (gethostname(myname, sizeof(myname)) < 0)
-- myname[0] = '\0';
-- if ((mydomain = strchr(myname, '.')) == NULL)
-- mydomain = "";
--next:
-- while ((t = token())) switch(t) {
--
-- case DEFAULT:
-- usedefault = 1;
-- /* FALL THROUGH */
--
-- case MACH:
-- if (!usedefault) {
-- if (token() != ID)
-- continue;
-- /*
-- * Allow match either for user's input host name
-- * or official hostname. Also allow match of
-- * incompletely-specified host in local domain.
-- */
-- if (strcasecmp(host, tokval) == 0)
-- goto match;
-- if (strcasecmp(hostname, tokval) == 0)
-- goto match;
-- if ((tmp = strchr(hostname, '.')) != NULL &&
-- strcasecmp(tmp, mydomain) == 0 &&
-- strncasecmp(hostname, tokval,
-- (unsigned) (tmp-hostname)) == 0 &&
-- tokval[tmp - hostname] == '\0')
-- goto match;
-- if ((tmp = strchr(host, '.')) != NULL &&
-- strcasecmp(tmp, mydomain) == 0 &&
-- strncasecmp(host, tokval,
-- (unsigned ) (tmp - host)) == 0 &&
-- tokval[tmp - host] == '\0')
-- goto match;
-- continue;
-- }
-- match:
-- while ((t = token()) && t != MACH && t != DEFAULT) switch(t) {
--
-- case LOGIN:
-- if (token()) {
-- if (*aname == 0) {
-- *aname = strdup(tokval);
-- } else {
-- if (strcmp(*aname, tokval))
-- goto next;
-- }
-- }
-- break;
-- case PASSWD:
-- if (strcmp(*aname, "anonymous") &&
-- fstat(fileno(cfile), &stb) >= 0 &&
-- (stb.st_mode & 077) != 0) {
-- fprintf(stderr, "Error - .netrc file not correct mode.\n");
-- fprintf(stderr, "Remove password or correct mode.\n");
-- goto bad;
-- }
-- if (token() && *apass == 0) {
-- *apass = strdup(tokval);
-- }
-- break;
-- case ACCOUNT:
-- if (fstat(fileno(cfile), &stb) >= 0
-- && (stb.st_mode & 077) != 0) {
-- fprintf(stderr, "Error - .netrc file not correct mode.\n");
-- fprintf(stderr, "Remove account or correct mode.\n");
-- goto bad;
-- }
-- if (token() && *aacct == 0) {
-- *aacct = strdup(tokval);
-- }
-- break;
-- case MACDEF:
-- if (proxy) {
-- (void) fclose(cfile);
-- return(0);
-- }
-- while ((c = getc(cfile)) != EOF)
-- if (c != ' ' && c != '\t')
-- break;
-- if (c == EOF || c == '\n') {
-- printf("Missing macdef name argument.\n");
-- goto bad;
-- }
-- if (macnum == 16) {
-- printf("Limit of 16 macros have already been defined\n");
-- goto bad;
-- }
-- tmp = macros[macnum].mac_name;
-- *tmp++ = c;
-- for (i=0; i < 8 && (c=getc(cfile)) != EOF &&
-- !isspace(c); ++i) {
-- *tmp++ = c;
-- }
-- if (c == EOF) {
-- printf("Macro definition missing null line terminator.\n");
-- goto bad;
-- }
-- *tmp = '\0';
-- if (c != '\n') {
-- while ((c=getc(cfile)) != EOF && c != '\n');
-- }
-- if (c == EOF) {
-- printf("Macro definition missing null line terminator.\n");
-- goto bad;
-- }
-- if (macnum == 0) {
-- macros[macnum].mac_start = macbuf;
-- }
-- else {
-- macros[macnum].mac_start = macros[macnum-1].mac_end + 1;
-- }
-- tmp = macros[macnum].mac_start;
-- while (tmp != macbuf + 4096) {
-- if ((c=getc(cfile)) == EOF) {
-- printf("Macro definition missing null line terminator.\n");
-- goto bad;
-- }
-- *tmp = c;
-- if (*tmp == '\n') {
-- if (*(tmp-1) == '\0') {
-- macros[macnum++].mac_end = tmp - 1;
-- break;
-- }
-- *tmp = '\0';
-- }
-- tmp++;
-- }
-- if (tmp == macbuf + 4096) {
-- printf("4K macro buffer exceeded\n");
-- goto bad;
-- }
-- break;
-- default:
-- fprintf(stderr, "Unknown .netrc keyword %s\n", tokval);
-- break;
-- }
-- goto done;
-- }
--done:
-- (void) fclose(cfile);
-- return(0);
--bad:
-- (void) fclose(cfile);
-- return(-1);
--}
-diff -u --recursive --new-file krb5-1.7-vanilla/src/appl/gssftp/ftp/ruserpw.c krb5-1.7/src/appl/gssftp/ftp/ruserpw.c
---- krb5-1.7-vanilla/src/appl/gssftp/ftp/ruserpw.c 1969-12-31 19:00:00.000000000 -0500
-+++ krb5-1.7/src/appl/gssftp/ftp/ruserpw.c 2009-10-01 15:35:57.000000000 -0400
-@@ -0,0 +1,293 @@
-+/*
-+ * Copyright (c) 1985 Regents of the University of California.
-+ * 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 acknowledgement:
-+ * This product includes software developed by the University of
-+ * California, Berkeley and its contributors.
-+ * 4. Neither the name of the University nor the names of its contributors
-+ * may be used to endorse or promote products derived from this software
-+ * without specific prior written permission.
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
-+ * ANY EXPRESS 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 REGENTS OR 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.
-+ */
-+
-+#ifndef lint
-+static char sccsid[] = "@(#)ruserpw.c 5.3 (Berkeley) 3/1/91";
-+#endif /* not lint */
-+
-+#include <sys/types.h>
-+#include <stdio.h>
-+#include <string.h>
-+#ifdef HAVE_STDLIB_H
-+#include <stdlib.h>
-+#endif
-+#ifdef HAVE_UNISTD_H
-+#include <unistd.h>
-+#endif
-+#include <ctype.h>
-+#include <sys/stat.h>
-+#include <errno.h>
-+#include "ftp_var.h"
-+
-+#ifdef _WIN32
-+#include <win-mac.h>
-+#endif
-+
-+#ifndef MAXHOSTNAMELEN
-+#define MAXHOSTNAMELEN 64
-+#endif
-+
-+static int token (void);
-+static FILE *cfile;
-+
-+#define DEFAULT 1
-+#define LOGIN 2
-+#define PASSWD 3
-+#define ACCOUNT 4
-+#define MACDEF 5
-+#define ID 10
-+#define MACH 11
-+
-+static char tokval[100];
-+
-+static struct toktab {
-+ char *tokstr;
-+ int tval;
-+} toktab[]= {
-+ { "default", DEFAULT },
-+ { "login", LOGIN },
-+ { "password", PASSWD },
-+ { "passwd", PASSWD },
-+ { "account", ACCOUNT },
-+ { "machine", MACH },
-+ { "macdef", MACDEF },
-+ { NULL, 0 }
-+};
-+
-+
-+static int
-+token()
-+{
-+ char *cp;
-+ int c;
-+ struct toktab *t;
-+
-+ if (feof(cfile))
-+ return (0);
-+ while ((c = getc(cfile)) != EOF &&
-+ (c == '\n' || c == '\t' || c == ' ' || c == ','))
-+ continue;
-+ if (c == EOF)
-+ return (0);
-+ cp = tokval;
-+ if (c == '"') {
-+ while ((c = getc(cfile)) != EOF && c != '"') {
-+ if (c == '\\')
-+ c = getc(cfile);
-+ *cp++ = c;
-+ }
-+ } else {
-+ *cp++ = c;
-+ while ((c = getc(cfile)) != EOF
-+ && c != '\n' && c != '\t' && c != ' ' && c != ',') {
-+ if (c == '\\')
-+ c = getc(cfile);
-+ *cp++ = c;
-+ }
-+ }
-+ *cp = 0;
-+ if (tokval[0] == 0)
-+ return (0);
-+ for (t = toktab; t->tokstr; t++)
-+ if (!strcmp(t->tokstr, tokval))
-+ return (t->tval);
-+ return (ID);
-+}
-+
-+int
-+ruserpw(host, aname, apass, aacct)
-+ char *host, **aname, **apass, **aacct;
-+{
-+ char *hdir, buf[FTP_BUFSIZ], *tmp;
-+ char myname[MAXHOSTNAMELEN + 1], *mydomain;
-+ int t, i, c, usedefault = 0;
-+ struct stat stb;
-+
-+ hdir = getenv("HOME");
-+ if (hdir == NULL)
-+ hdir = ".";
-+ (void) snprintf(buf, sizeof(buf), "%s/.netrc", hdir);
-+ cfile = fopen(buf, "r");
-+ if (cfile == NULL) {
-+ if (errno != ENOENT)
-+ perror(buf);
-+ return(0);
-+ }
-+ if (gethostname(myname, sizeof(myname)) < 0)
-+ myname[0] = '\0';
-+ if ((mydomain = strchr(myname, '.')) == NULL)
-+ mydomain = "";
-+next:
-+ while ((t = token())) switch(t) {
-+
-+ case DEFAULT:
-+ usedefault = 1;
-+ /* FALL THROUGH */
-+
-+ case MACH:
-+ if (!usedefault) {
-+ if (token() != ID)
-+ continue;
-+ /*
-+ * Allow match either for user's input host name
-+ * or official hostname. Also allow match of
-+ * incompletely-specified host in local domain.
-+ */
-+ if (strcasecmp(host, tokval) == 0)
-+ goto match;
-+ if (strcasecmp(hostname, tokval) == 0)
-+ goto match;
-+ if ((tmp = strchr(hostname, '.')) != NULL &&
-+ strcasecmp(tmp, mydomain) == 0 &&
-+ strncasecmp(hostname, tokval,
-+ (unsigned) (tmp-hostname)) == 0 &&
-+ tokval[tmp - hostname] == '\0')
-+ goto match;
-+ if ((tmp = strchr(host, '.')) != NULL &&
-+ strcasecmp(tmp, mydomain) == 0 &&
-+ strncasecmp(host, tokval,
-+ (unsigned ) (tmp - host)) == 0 &&
-+ tokval[tmp - host] == '\0')
-+ goto match;
-+ continue;
-+ }
-+ match:
-+ while ((t = token()) && t != MACH && t != DEFAULT) switch(t) {
-+
-+ case LOGIN:
-+ if (token()) {
-+ if (*aname == 0) {
-+ *aname = strdup(tokval);
-+ } else {
-+ if (strcmp(*aname, tokval))
-+ goto next;
-+ }
-+ }
-+ break;
-+ case PASSWD:
-+ if (strcmp(*aname, "anonymous") &&
-+ fstat(fileno(cfile), &stb) >= 0 &&
-+ (stb.st_mode & 077) != 0) {
-+ fprintf(stderr, "Error - .netrc file not correct mode.\n");
-+ fprintf(stderr, "Remove password or correct mode.\n");
-+ goto bad;
-+ }
-+ if (token() && *apass == 0) {
-+ *apass = strdup(tokval);
-+ }
-+ break;
-+ case ACCOUNT:
-+ if (fstat(fileno(cfile), &stb) >= 0
-+ && (stb.st_mode & 077) != 0) {
-+ fprintf(stderr, "Error - .netrc file not correct mode.\n");
-+ fprintf(stderr, "Remove account or correct mode.\n");
-+ goto bad;
-+ }
-+ if (token() && *aacct == 0) {
-+ *aacct = strdup(tokval);
-+ }
-+ break;
-+ case MACDEF:
-+ if (proxy) {
-+ (void) fclose(cfile);
-+ return(0);
-+ }
-+ while ((c = getc(cfile)) != EOF)
-+ if (c != ' ' && c != '\t')
-+ break;
-+ if (c == EOF || c == '\n') {
-+ printf("Missing macdef name argument.\n");
-+ goto bad;
-+ }
-+ if (macnum == 16) {
-+ printf("Limit of 16 macros have already been defined\n");
-+ goto bad;
-+ }
-+ tmp = macros[macnum].mac_name;
-+ *tmp++ = c;
-+ for (i=0; i < 8 && (c=getc(cfile)) != EOF &&
-+ !isspace(c); ++i) {
-+ *tmp++ = c;
-+ }
-+ if (c == EOF) {
-+ printf("Macro definition missing null line terminator.\n");
-+ goto bad;
-+ }
-+ *tmp = '\0';
-+ if (c != '\n') {
-+ while ((c=getc(cfile)) != EOF && c != '\n');
-+ }
-+ if (c == EOF) {
-+ printf("Macro definition missing null line terminator.\n");
-+ goto bad;
-+ }
-+ if (macnum == 0) {
-+ macros[macnum].mac_start = macbuf;
-+ }
-+ else {
-+ macros[macnum].mac_start = macros[macnum-1].mac_end + 1;
-+ }
-+ tmp = macros[macnum].mac_start;
-+ while (tmp != macbuf + 4096) {
-+ if ((c=getc(cfile)) == EOF) {
-+ printf("Macro definition missing null line terminator.\n");
-+ goto bad;
-+ }
-+ *tmp = c;
-+ if (*tmp == '\n') {
-+ if (*(tmp-1) == '\0') {
-+ macros[macnum++].mac_end = tmp - 1;
-+ break;
-+ }
-+ *tmp = '\0';
-+ }
-+ tmp++;
-+ }
-+ if (tmp == macbuf + 4096) {
-+ printf("4K macro buffer exceeded\n");
-+ goto bad;
-+ }
-+ break;
-+ default:
-+ fprintf(stderr, "Unknown .netrc keyword %s\n", tokval);
-+ break;
-+ }
-+ goto done;
-+ }
-+done:
-+ (void) fclose(cfile);
-+ return(0);
-+bad:
-+ (void) fclose(cfile);
-+ return(-1);
-+}