summaryrefslogtreecommitdiffstats
path: root/usr.sbin
diff options
context:
space:
mode:
authorobrien <obrien@FreeBSD.org>2002-11-06 08:57:03 +0000
committerobrien <obrien@FreeBSD.org>2002-11-06 08:57:03 +0000
commit4bf9f3289bd2f79108b0f79707eede824339b2a8 (patch)
tree91cea206640ba25c0ebd7b191689bcd3300ce9e2 /usr.sbin
parenta349f5fa5c27e42d22b2ebacaf0d06a33f2a7550 (diff)
downloadFreeBSD-src-4bf9f3289bd2f79108b0f79707eede824339b2a8.zip
FreeBSD-src-4bf9f3289bd2f79108b0f79707eede824339b2a8.tar.gz
Break fileGetURL() out into its own file so that pkg_install/lib consumers
pkg_{create,delete} don't need to needlessly link with libfetch.
Diffstat (limited to 'usr.sbin')
-rw-r--r--usr.sbin/pkg_install/create/Makefile4
-rw-r--r--usr.sbin/pkg_install/delete/Makefile4
-rw-r--r--usr.sbin/pkg_install/lib/Makefile2
-rw-r--r--usr.sbin/pkg_install/lib/file.c112
-rw-r--r--usr.sbin/pkg_install/lib/url.c144
5 files changed, 149 insertions, 117 deletions
diff --git a/usr.sbin/pkg_install/create/Makefile b/usr.sbin/pkg_install/create/Makefile
index 4128517..08173e5 100644
--- a/usr.sbin/pkg_install/create/Makefile
+++ b/usr.sbin/pkg_install/create/Makefile
@@ -7,8 +7,8 @@ CFLAGS+= ${DEBUG} -I${.CURDIR}/../lib
WARNS?= 2
-DPADD= ${LIBINSTALL} ${LIBFETCH} ${LIBMD}
-LDADD= ${LIBINSTALL} -lfetch -lmd
+DPADD= ${LIBINSTALL} ${LIBMD}
+LDADD= ${LIBINSTALL} -lmd
.if !defined(NOCRYPT) && !defined(NOSECURE) && !defined(NO_OPENSSL)
DPADD+= ${LIBSSL} ${LIBCRYPTO}
diff --git a/usr.sbin/pkg_install/delete/Makefile b/usr.sbin/pkg_install/delete/Makefile
index 47642cc..7002e75 100644
--- a/usr.sbin/pkg_install/delete/Makefile
+++ b/usr.sbin/pkg_install/delete/Makefile
@@ -7,8 +7,8 @@ CFLAGS+= ${DEBUG} -I${.CURDIR}/../lib
WARNS?= 2
-DPADD= ${LIBINSTALL} ${LIBFETCH} ${LIBMD}
-LDADD= ${LIBINSTALL} -lfetch -lmd
+DPADD= ${LIBINSTALL} ${LIBMD}
+LDADD= ${LIBINSTALL} -lmd
.if !defined(NOCRYPT) && !defined(NOSECURE) && !defined(NO_OPENSSL)
DPADD+= ${LIBSSL} ${LIBCRYPTO}
diff --git a/usr.sbin/pkg_install/lib/Makefile b/usr.sbin/pkg_install/lib/Makefile
index 7b0e2f8..2a79f71 100644
--- a/usr.sbin/pkg_install/lib/Makefile
+++ b/usr.sbin/pkg_install/lib/Makefile
@@ -3,7 +3,7 @@
LIB= install
INTERNALLIB= YES
SRCS= file.c msg.c plist.c str.c exec.c global.c pen.c match.c \
- deps.c version.c pkgwrap.c
+ deps.c version.c pkgwrap.c url.c
CFLAGS+= ${DEBUG}
diff --git a/usr.sbin/pkg_install/lib/file.c b/usr.sbin/pkg_install/lib/file.c
index a51e8be..94b058e 100644
--- a/usr.sbin/pkg_install/lib/file.c
+++ b/usr.sbin/pkg_install/lib/file.c
@@ -137,118 +137,6 @@ isURL(const char *fname)
* Try and fetch a file by URL, returning the directory name for where
* it's unpacked, if successful.
*/
-char *
-fileGetURL(const char *base, const char *spec)
-{
- char *cp, *rp;
- char fname[FILENAME_MAX];
- char pen[FILENAME_MAX];
- char buf[8192];
- FILE *ftp;
- pid_t tpid;
- int pfd[2], pstat, r, w;
- char *hint;
- int fd;
-
- rp = NULL;
- /* Special tip that sysinstall left for us */
- hint = getenv("PKG_ADD_BASE");
- if (!isURL(spec)) {
- if (!base && !hint)
- return NULL;
- /*
- * We've been given an existing URL (that's known-good) and now we need
- * to construct a composite one out of that and the basename we were
- * handed as a dependency.
- */
- if (base) {
- strcpy(fname, base);
- /*
- * Advance back two slashes to get to the root of the package
- * hierarchy
- */
- cp = strrchr(fname, '/');
- if (cp) {
- *cp = '\0'; /* chop name */
- cp = strrchr(fname, '/');
- }
- if (cp) {
- *(cp + 1) = '\0';
- strcat(cp, "All/");
- strcat(cp, spec);
- /* XXX: need to handle .tgz also */
- strcat(cp, ".tbz");
- }
- else
- return NULL;
- }
- else {
- /*
- * Otherwise, we've been given an environment variable hinting
- * at the right location from sysinstall
- */
- strcpy(fname, hint);
- strcat(fname, spec);
- /* XXX: need to handle .tgz also */
- strcat(fname, ".tbz");
- }
- }
- else
- strcpy(fname, spec);
-
- if ((ftp = fetchGetURL(fname, Verbose ? "v" : NULL)) == NULL) {
- printf("Error: FTP Unable to get %s: %s\n",
- fname, fetchLastErrString);
- return NULL;
- }
-
- if (isatty(0) || Verbose)
- printf("Fetching %s...", fname), fflush(stdout);
- pen[0] = '\0';
- if ((rp = make_playpen(pen, 0)) == NULL) {
- printf("Error: Unable to construct a new playpen for FTP!\n");
- fclose(ftp);
- return NULL;
- }
- if (pipe(pfd) == -1) {
- warn("pipe()");
- cleanup(0);
- exit(2);
- }
- if ((tpid = fork()) == -1) {
- warn("pipe()");
- cleanup(0);
- exit(2);
- }
- if (!tpid) {
- dup2(pfd[0], 0);
- for (fd = getdtablesize() - 1; fd >= 3; --fd)
- close(fd);
- /* XXX: need to handle .tgz also */
- execl("/usr/bin/tar", "tar", Verbose ? "-xjvf" : "-xjf", "-",
- (char *)0);
- _exit(2);
- }
- close(pfd[0]);
- for (;;) {
- if ((r = fread(buf, 1, sizeof buf, ftp)) < 1)
- break;
- if ((w = write(pfd[1], buf, r)) != r)
- break;
- }
- if (ferror(ftp))
- warn("warning: error reading from server");
- fclose(ftp);
- close(pfd[1]);
- if (w == -1)
- warn("warning: error writing to tar");
- tpid = waitpid(tpid, &pstat, 0);
- if (Verbose)
- printf("tar command returns %d status\n", WEXITSTATUS(pstat));
- if (rp && (isatty(0) || Verbose))
- printf(" Done.\n");
- return rp;
-}
char *
fileFindByPath(const char *base, const char *fname)
diff --git a/usr.sbin/pkg_install/lib/url.c b/usr.sbin/pkg_install/lib/url.c
new file mode 100644
index 0000000..5ee33f3
--- /dev/null
+++ b/usr.sbin/pkg_install/lib/url.c
@@ -0,0 +1,144 @@
+/*
+ * FreeBSD install - a package for the installation and maintainance
+ * of non-core utilities.
+ *
+ * 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.
+ *
+ * Jordan K. Hubbard
+ * 18 July 1993
+ *
+ * URL file access utilities.
+ *
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include "lib.h"
+#include <err.h>
+#include <fetch.h>
+#include <sys/wait.h>
+
+/*
+ * Try and fetch a file by URL, returning the directory name for where
+ * it's unpacked, if successful.
+ */
+char *
+fileGetURL(const char *base, const char *spec)
+{
+ char *cp, *rp;
+ char fname[FILENAME_MAX];
+ char pen[FILENAME_MAX];
+ char buf[8192];
+ FILE *ftp;
+ pid_t tpid;
+ int pfd[2], pstat, r, w;
+ char *hint;
+ int fd;
+
+ rp = NULL;
+ /* Special tip that sysinstall left for us */
+ hint = getenv("PKG_ADD_BASE");
+ if (!isURL(spec)) {
+ if (!base && !hint)
+ return NULL;
+ /*
+ * We've been given an existing URL (that's known-good) and now we need
+ * to construct a composite one out of that and the basename we were
+ * handed as a dependency.
+ */
+ if (base) {
+ strcpy(fname, base);
+ /*
+ * Advance back two slashes to get to the root of the package
+ * hierarchy
+ */
+ cp = strrchr(fname, '/');
+ if (cp) {
+ *cp = '\0'; /* chop name */
+ cp = strrchr(fname, '/');
+ }
+ if (cp) {
+ *(cp + 1) = '\0';
+ strcat(cp, "All/");
+ strcat(cp, spec);
+ /* XXX: need to handle .tgz also */
+ strcat(cp, ".tbz");
+ }
+ else
+ return NULL;
+ }
+ else {
+ /*
+ * Otherwise, we've been given an environment variable hinting
+ * at the right location from sysinstall
+ */
+ strcpy(fname, hint);
+ strcat(fname, spec);
+ /* XXX: need to handle .tgz also */
+ strcat(fname, ".tbz");
+ }
+ }
+ else
+ strcpy(fname, spec);
+
+ if ((ftp = fetchGetURL(fname, Verbose ? "v" : NULL)) == NULL) {
+ printf("Error: FTP Unable to get %s: %s\n",
+ fname, fetchLastErrString);
+ return NULL;
+ }
+
+ if (isatty(0) || Verbose)
+ printf("Fetching %s...", fname), fflush(stdout);
+ pen[0] = '\0';
+ if ((rp = make_playpen(pen, 0)) == NULL) {
+ printf("Error: Unable to construct a new playpen for FTP!\n");
+ fclose(ftp);
+ return NULL;
+ }
+ if (pipe(pfd) == -1) {
+ warn("pipe()");
+ cleanup(0);
+ exit(2);
+ }
+ if ((tpid = fork()) == -1) {
+ warn("pipe()");
+ cleanup(0);
+ exit(2);
+ }
+ if (!tpid) {
+ dup2(pfd[0], 0);
+ for (fd = getdtablesize() - 1; fd >= 3; --fd)
+ close(fd);
+ /* XXX: need to handle .tgz also */
+ execl("/usr/bin/tar", "tar", Verbose ? "-xjvf" : "-xjf", "-",
+ (char *)0);
+ _exit(2);
+ }
+ close(pfd[0]);
+ for (;;) {
+ if ((r = fread(buf, 1, sizeof buf, ftp)) < 1)
+ break;
+ if ((w = write(pfd[1], buf, r)) != r)
+ break;
+ }
+ if (ferror(ftp))
+ warn("warning: error reading from server");
+ fclose(ftp);
+ close(pfd[1]);
+ if (w == -1)
+ warn("warning: error writing to tar");
+ tpid = waitpid(tpid, &pstat, 0);
+ if (Verbose)
+ printf("tar command returns %d status\n", WEXITSTATUS(pstat));
+ if (rp && (isatty(0) || Verbose))
+ printf(" Done.\n");
+ return rp;
+}
OpenPOWER on IntegriCloud