svn commit: r313974 - head/lib/libfetch
Baptiste Daroussin
bapt at FreeBSD.org
Mon Feb 20 00:14:33 UTC 2017
Author: bapt
Date: Mon Feb 20 00:14:31 2017
New Revision: 313974
URL: https://svnweb.freebsd.org/changeset/base/313974
Log:
Add a file descriptor in struct url for netrc
When using libfetch in an application that drops privileges when fetching
like pkg(8) then user complain because the application does not read anymore
${HOME}/.netrc. Now a caller can prepare a fd to the said file and manually
assign it to the structure.
It is also a first step to allow to capsicumize libfetch applications
Reviewed by: allanjude, des
Approved by: des
Differential Revision: https://reviews.freebsd.org/D9678
Modified:
head/lib/libfetch/common.c
head/lib/libfetch/fetch.c
head/lib/libfetch/fetch.h
Modified: head/lib/libfetch/common.c
==============================================================================
--- head/lib/libfetch/common.c Sun Feb 19 22:00:11 2017 (r313973)
+++ head/lib/libfetch/common.c Mon Feb 20 00:14:31 2017 (r313974)
@@ -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"));
Modified: head/lib/libfetch/fetch.c
==============================================================================
--- head/lib/libfetch/fetch.c Sun Feb 19 22:00:11 2017 (r313973)
+++ head/lib/libfetch/fetch.c Mon Feb 20 00:14:31 2017 (r313974)
@@ -284,6 +284,7 @@ fetchMakeURL(const char *scheme, const c
seturl(pwd);
#undef seturl
u->port = port;
+ u->netrcfd = -2;
return (u);
}
Modified: head/lib/libfetch/fetch.h
==============================================================================
--- head/lib/libfetch/fetch.h Sun Feb 19 22:00:11 2017 (r313973)
+++ head/lib/libfetch/fetch.h Mon Feb 20 00:14:31 2017 (r313974)
@@ -47,6 +47,7 @@ struct url {
off_t offset;
size_t length;
time_t ims_time;
+ int netrcfd;
};
struct url_stat {
More information about the svn-src-head
mailing list