diff options
| author | Baptiste Daroussin <bapt@FreeBSD.org> | 2017-02-20 00:14:31 +0000 |
|---|---|---|
| committer | Baptiste Daroussin <bapt@FreeBSD.org> | 2017-02-20 00:14:31 +0000 |
| commit | d8713bf36156f6c6179cc989fc370a7f9a0ca062 (patch) | |
| tree | 64424ef80289d108c33eefd3b304034377707e16 /lib/libfetch/common.c | |
| parent | d893c36a3568d5bf28a900078d6ce42922be6e58 (diff) | |
Notes
Diffstat (limited to 'lib/libfetch/common.c')
| -rw-r--r-- | lib/libfetch/common.c | 30 |
1 files changed, 21 insertions, 9 deletions
diff --git a/lib/libfetch/common.c b/lib/libfetch/common.c index 41453143a11e..8ec7d018aa3d 100644 --- a/lib/libfetch/common.c +++ b/lib/libfetch/common.c @@ -1339,16 +1339,11 @@ fetch_read_word(FILE *f) return (word); } -/* - * Get authentication data for a URL from .netrc - */ -int -fetch_netrc_auth(struct url *url) +static int +fetch_netrc_open(void) { + const char *p; char fn[PATH_MAX]; - const char *word; - char *p; - FILE *f; if ((p = getenv("NETRC")) != NULL) { if (snprintf(fn, sizeof(fn), "%s", p) >= (int)sizeof(fn)) { @@ -1368,8 +1363,25 @@ fetch_netrc_auth(struct url *url) return (-1); } - if ((f = fopen(fn, "r")) == NULL) + return (open(fn, O_RDONLY)); +} + +/* + * Get authentication data for a URL from .netrc + */ +int +fetch_netrc_auth(struct url *url) +{ + const char *word; + FILE *f; + + if (url->netrcfd == -2) + url->netrcfd = fetch_netrc_open(); + if (url->netrcfd < 0) + return (-1); + if ((f = fdopen(url->netrcfd, "r")) == NULL) return (-1); + rewind(f); while ((word = fetch_read_word(f)) != NULL) { if (strcmp(word, "default") == 0) { DEBUG(fetch_info("Using default .netrc settings")); |
