X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=netrc.c;h=a585e1a0be37c236336713b949f15e7f9b3926e6;hb=91644ff0b2e6eb3b26c5544a4a769ca4aaf08a14;hp=665a1f90b0733c4eb8e1728ec5fe1cb304583225;hpb=8f3f473c829e8691ef5566d73f3f130b492e36ba;p=~andy%2Ffetchmail diff --git a/netrc.c b/netrc.c index 665a1f90..a585e1a0 100644 --- a/netrc.c +++ b/netrc.c @@ -1,18 +1,22 @@ -/* netrc.c -- parse the .netrc file to get hosts, accounts, and passwords - +/* + * netrc.c -- parse the .netrc file to get hosts, accounts, and passwords + * Gordon Matzigkeit , 1996 Copyright assigned to Eric S. Raymond, October 2001. For license terms, see the file COPYING in this directory. - Compile with -DSTANDALONE to test this module. */ + Compile with -DSTANDALONE to test this module. + (Makefile.am should have a rule so you can just type "make netrc") +*/ + +#include "config.h" #include #include #include #include -#include "config.h" #include "fetchmail.h" #include "netrc.h" #include "i18n.h" @@ -25,7 +29,7 @@ # define xmalloc malloc # define xrealloc realloc -char *program_name = "netrc"; +const char *program_name = "netrc"; #endif /* Maybe add NEWENTRY to the account information list, LIST. NEWENTRY is @@ -73,8 +77,7 @@ maybe_add_to_list (netrc_entry **newentry, netrc_entry **list) list of entries. NULL is returned if the file could not be parsed. */ netrc_entry * -parse_netrc (file) - char *file; +parse_netrc (char *file) { FILE *fp; char buf[POPBUFSIZE+1], *p, *tok; @@ -102,12 +105,12 @@ parse_netrc (file) premature_token = NULL; /* While there are lines in the file... */ - while (fgets(buf, POPBUFSIZE, fp)) + while (fgets(buf, sizeof(buf) - 1, fp)) { ln++; /* Strip trailing CRLF */ - for (p = buf + strlen(buf) - 1; (p >= buf) && isspace(*p); p--) + for (p = buf + strlen(buf) - 1; (p >= buf) && isspace((unsigned char)*p); p--) *p = '\0'; /* Parse the line. */ @@ -129,7 +132,7 @@ parse_netrc (file) char *pp; /* Skip any whitespace. */ - while (*p && isspace (*p)) + while (*p && isspace ((unsigned char)*p)) p++; /* Discard end-of-line comments. */ @@ -139,7 +142,7 @@ parse_netrc (file) tok = pp = p; /* Find the end of the token. */ - while (*p && (quote_char || !isspace (*p))) + while (*p && (quote_char || !isspace ((unsigned char)*p))) { if (quote_char) { @@ -213,15 +216,9 @@ parse_netrc (file) if (premature_token) { -#ifdef HAVE_ERROR - error_at_line (0, file, ln, - GT_("warning: found \"%s\" before any host names"), - premature_token); -#else fprintf (stderr, GT_("%s:%d: warning: found \"%s\" before any host names\n"), file, ln, premature_token); -#endif premature_token = NULL; } @@ -294,9 +291,7 @@ parse_netrc (file) /* Return the netrc entry from LIST corresponding to HOST. NULL is returned if no such entry exists. */ netrc_entry * -search_netrc (list, host, login) - netrc_entry *list; - char *host, *login; +search_netrc (netrc_entry *list, char *host, char *login) { /* Look for the HOST in LIST. */ while (list) @@ -313,6 +308,20 @@ search_netrc (list, host, login) return list; } +void +free_netrc(netrc_entry *a) { + while(a) { + netrc_entry *n = a->next; + if (a->password != NULL) { + memset(a->password, 0x55, strlen(a->password)); + free(a->password); + } + xfree(a->login); + xfree(a->host); + xfree(a); + a = n; + } +} #ifdef STANDALONE #include @@ -320,13 +329,10 @@ search_netrc (list, host, login) #include -int -main (argc, argv) - int argc; - char **argv; +int main (int argc, char **argv) { struct stat sb; - char *program_name, *file, *host, *login; + char *file, *host, *login; netrc_entry *head, *a; program_name = argv[0]; @@ -334,6 +340,15 @@ main (argc, argv) host = argv[2]; login = argv[3]; + switch (argc) { + case 2: + case 4: + break; + default: + fprintf (stderr, "Usage: %s [ ]\n", argv[0]); + exit(EXIT_FAILURE); + } + if (stat (file, &sb)) { fprintf (stderr, "%s: cannot stat %s: %s\n", argv[0], file, @@ -350,8 +365,8 @@ main (argc, argv) if (host && login) { - int i, status; - status = 0; + int status; + status = EXIT_SUCCESS; printf("Host: %s, Login: %s\n", host, login); @@ -361,10 +376,10 @@ main (argc, argv) /* Print out the password (if any). */ if (a->password) { - fputc (' ', stdout); - fputs (a->password, stdout); + printf("Password: %s\n", a->password); } - } + } else + status = EXIT_FAILURE; fputc ('\n', stdout); exit (status); @@ -396,6 +411,8 @@ main (argc, argv) a = a->next; } + free_netrc(head); + exit (0); } #endif /* STANDALONE */