aboutsummaryrefslogtreecommitdiff
path: root/lib/libfetch/common.c
diff options
context:
space:
mode:
authorBaptiste Daroussin <bapt@FreeBSD.org>2017-02-20 00:14:31 +0000
committerBaptiste Daroussin <bapt@FreeBSD.org>2017-02-20 00:14:31 +0000
commitd8713bf36156f6c6179cc989fc370a7f9a0ca062 (patch)
tree64424ef80289d108c33eefd3b304034377707e16 /lib/libfetch/common.c
parentd893c36a3568d5bf28a900078d6ce42922be6e58 (diff)
Notes
Diffstat (limited to 'lib/libfetch/common.c')
-rw-r--r--lib/libfetch/common.c30
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"));