Update krb5 to 1.8
[openwrt/svn-archive/archive.git] / net / krb5 / patches / 001-uclibc-symbol-collision-fix.patch
index 7a98835d44c0effb6212d7da351cbff3f4dbab6c..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 (file)
@@ -1,670 +0,0 @@
-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);
-+}