From 47111e90d3eb5e397e3fa30d27ba0a500d952ebe Mon Sep 17 00:00:00 2001 From: delphij Date: Tue, 13 May 2014 23:24:14 +0000 Subject: [PATCH] Add pkg bootstrapping, configuration and public keys. [EN-14:03] Improve build repeatability for kldxref(8). [EN-14:04] Fix data corruption with ciss(4). [EN-14:05] Approved by: so git-svn-id: svn://svn.freebsd.org/base/releng/9.1@265988 ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f --- UPDATING | 10 ++++++ etc/Makefile | 1 + etc/mtree/BSD.root.dist | 2 ++ etc/mtree/BSD.usr.dist | 8 +++++ etc/pkg/FreeBSD.conf | 16 +++++++++ etc/pkg/Makefile | 10 ++++++ share/Makefile | 1 + share/keys/Makefile | 5 +++ share/keys/pkg/Makefile | 5 +++ share/keys/pkg/trusted/Makefile | 10 ++++++ .../pkg/trusted/pkg.freebsd.org.2013102301 | 4 +++ share/man/man7/hier.7 | 12 ++++++- sys/conf/newvers.sh | 2 +- sys/dev/ciss/ciss.c | 35 ++++++------------- usr.sbin/kldxref/kldxref.c | 12 ++++++- usr.sbin/pkg/pkg.c | 30 +++------------- 16 files changed, 111 insertions(+), 52 deletions(-) create mode 100644 etc/pkg/FreeBSD.conf create mode 100644 etc/pkg/Makefile create mode 100644 share/keys/Makefile create mode 100644 share/keys/pkg/Makefile create mode 100644 share/keys/pkg/trusted/Makefile create mode 100644 share/keys/pkg/trusted/pkg.freebsd.org.2013102301 diff --git a/UPDATING b/UPDATING index fb1410e1..5313d128 100644 --- a/UPDATING +++ b/UPDATING @@ -9,6 +9,16 @@ handbook. Items affecting the ports and packages system can be found in /usr/ports/UPDATING. Please read that file before running portupgrade. +20140513: p13 FreeBSD-EN-14:03.pkg + FreeBSD-EN-14:04.kldxref + FreeBSD-EN-14:05.ciss + + Add pkg bootstrapping, configuration and public keys. [EN-14:03] + + Improve build repeatability for kldxref(8). [EN-14:04] + + Fix data corruption with ciss(4). [EN-14:05] + 20140430: p12 FreeBSD-SA-14:08.tcp Fix TCP reassembly vulnerability. [SA-14:08] diff --git a/etc/Makefile b/etc/Makefile index 48124b94..6f35b594 100644 --- a/etc/Makefile +++ b/etc/Makefile @@ -205,6 +205,7 @@ distribution: ${_+_}cd ${.CURDIR}/devd; ${MAKE} install ${_+_}cd ${.CURDIR}/gss; ${MAKE} install ${_+_}cd ${.CURDIR}/periodic; ${MAKE} install + ${_+_}cd ${.CURDIR}/pkg; ${MAKE} install ${_+_}cd ${.CURDIR}/rc.d; ${MAKE} install ${_+_}cd ${.CURDIR}/../gnu/usr.bin/send-pr; ${MAKE} etc-gnats-freefall ${_+_}cd ${.CURDIR}/../share/termcap; ${MAKE} etc-termcap diff --git a/etc/mtree/BSD.root.dist b/etc/mtree/BSD.root.dist index a6cba247..86b93e13 100644 --- a/etc/mtree/BSD.root.dist +++ b/etc/mtree/BSD.root.dist @@ -52,6 +52,8 @@ weekly .. .. + pkg + .. ppp .. rc.d diff --git a/etc/mtree/BSD.usr.dist b/etc/mtree/BSD.usr.dist index eb1b89b4..da19083b 100644 --- a/etc/mtree/BSD.usr.dist +++ b/etc/mtree/BSD.usr.dist @@ -398,6 +398,14 @@ .. .. .. + keys + pkg + revoked + .. + trusted + .. + .. + .. locale UTF-8 .. diff --git a/etc/pkg/FreeBSD.conf b/etc/pkg/FreeBSD.conf new file mode 100644 index 00000000..e4eec8f1 --- /dev/null +++ b/etc/pkg/FreeBSD.conf @@ -0,0 +1,16 @@ +# $FreeBSD$ +# +# To disable this repository, instead of modifying or removing this file, +# create a /usr/local/etc/pkg/repos/FreeBSD.conf file: +# +# mkdir -p /usr/local/etc/pkg/repos +# echo "FreeBSD: { enabled: no }" > /usr/local/etc/pkg/repos/FreeBSD.conf +# + +FreeBSD: { + url: "pkg+http://pkg.FreeBSD.org/${ABI}/latest", + mirror_type: "srv", + signature_type: "fingerprints", + fingerprints: "/usr/share/keys/pkg", + enabled: yes +} diff --git a/etc/pkg/Makefile b/etc/pkg/Makefile new file mode 100644 index 00000000..abc8c64c --- /dev/null +++ b/etc/pkg/Makefile @@ -0,0 +1,10 @@ +# $FreeBSD$ + +NO_OBJ= + +FILES= FreeBSD.conf + +FILESDIR= /etc/pkg +FILESMODE= 644 + +.include diff --git a/share/Makefile b/share/Makefile index 5ccf1659..828c7bd4 100644 --- a/share/Makefile +++ b/share/Makefile @@ -10,6 +10,7 @@ SUBDIR= ${_colldef} \ ${_doc} \ ${_examples} \ ${_i18n} \ + keys \ ${_man} \ ${_me} \ misc \ diff --git a/share/keys/Makefile b/share/keys/Makefile new file mode 100644 index 00000000..d685b064 --- /dev/null +++ b/share/keys/Makefile @@ -0,0 +1,5 @@ +# $FreeBSD$ + +SUBDIR= pkg + +.include diff --git a/share/keys/pkg/Makefile b/share/keys/pkg/Makefile new file mode 100644 index 00000000..1d83caf9 --- /dev/null +++ b/share/keys/pkg/Makefile @@ -0,0 +1,5 @@ +# $FreeBSD$ + +SUBDIR= trusted + +.include diff --git a/share/keys/pkg/trusted/Makefile b/share/keys/pkg/trusted/Makefile new file mode 100644 index 00000000..ee0d4c92 --- /dev/null +++ b/share/keys/pkg/trusted/Makefile @@ -0,0 +1,10 @@ +# $FreeBSD$ + +NO_OBJ= + +FILES= pkg.freebsd.org.2013102301 + +FILESDIR= /usr/share/keys/pkg/trusted +FILESMODE= 644 + +.include diff --git a/share/keys/pkg/trusted/pkg.freebsd.org.2013102301 b/share/keys/pkg/trusted/pkg.freebsd.org.2013102301 new file mode 100644 index 00000000..3a144a33 --- /dev/null +++ b/share/keys/pkg/trusted/pkg.freebsd.org.2013102301 @@ -0,0 +1,4 @@ +# $FreeBSD$ + +function: "sha256" +fingerprint: "b0170035af3acc5f3f3ae1859dc717101b4e6c1d0a794ad554928ca0cbb2f438" diff --git a/share/man/man7/hier.7 b/share/man/man7/hier.7 index b7aa57eb..a89098dd 100644 --- a/share/man/man7/hier.7 +++ b/share/man/man7/hier.7 @@ -32,7 +32,7 @@ .\" @(#)hier.7 8.1 (Berkeley) 6/5/93 .\" $FreeBSD$ .\" -.Dd May 25, 2008 +.Dd October 29, 2013 .Dt HIER 7 .Os .Sh NAME @@ -546,6 +546,16 @@ ASCII text files used by various games device description file for device name .It Pa info/ GNU Info hypertext system +.It Pa keys/ +known trusted and revoked keys. +.Bl -tag -width ".Pa keys/pkg/" -compact +.It Pa keys/pkg/ +fingerprints for +.Xr pkg 7 +and +.Xr pkg 8 +.El +.Pp .It Pa locale/ localization files; see diff --git a/sys/conf/newvers.sh b/sys/conf/newvers.sh index 7b1e34d8..0c858cc9 100644 --- a/sys/conf/newvers.sh +++ b/sys/conf/newvers.sh @@ -32,7 +32,7 @@ TYPE="FreeBSD" REVISION="9.1" -BRANCH="RELEASE-p12" +BRANCH="RELEASE-p13" if [ "X${BRANCH_OVERRIDE}" != "X" ]; then BRANCH=${BRANCH_OVERRIDE} fi diff --git a/sys/dev/ciss/ciss.c b/sys/dev/ciss/ciss.c index 3d5ab571..0311444e 100644 --- a/sys/dev/ciss/ciss.c +++ b/sys/dev/ciss/ciss.c @@ -179,8 +179,6 @@ static int ciss_cam_emulate(struct ciss_softc *sc, struct ccb_scsiio *csio); static void ciss_cam_poll(struct cam_sim *sim); static void ciss_cam_complete(struct ciss_request *cr); static void ciss_cam_complete_fixup(struct ciss_softc *sc, struct ccb_scsiio *csio); -static struct cam_periph *ciss_find_periph(struct ciss_softc *sc, - int bus, int target); static int ciss_name_device(struct ciss_softc *sc, int bus, int target); /* periodic status monitoring */ @@ -3337,27 +3335,6 @@ ciss_cam_complete_fixup(struct ciss_softc *sc, struct ccb_scsiio *csio) } -/******************************************************************************** - * Find a peripheral attached at (target) - */ -static struct cam_periph * -ciss_find_periph(struct ciss_softc *sc, int bus, int target) -{ - struct cam_periph *periph; - struct cam_path *path; - int status; - - status = xpt_create_path(&path, NULL, cam_sim_path(sc->ciss_cam_sim[bus]), - target, 0); - if (status == CAM_REQ_CMP) { - periph = cam_periph_find(path, NULL); - xpt_free_path(path); - } else { - periph = NULL; - } - return(periph); -} - /******************************************************************************** * Name the device at (target) * @@ -3367,12 +3344,22 @@ static int ciss_name_device(struct ciss_softc *sc, int bus, int target) { struct cam_periph *periph; + struct cam_path *path; + int status; if (CISS_IS_PHYSICAL(bus)) return (0); - if ((periph = ciss_find_periph(sc, bus, target)) != NULL) { + + status = xpt_create_path(&path, NULL, cam_sim_path(sc->ciss_cam_sim[bus]), + target, 0); + + if (status == CAM_REQ_CMP) { + mtx_lock(&sc->ciss_mtx); + periph = cam_periph_find(path, NULL); sprintf(sc->ciss_logical[bus][target].cl_name, "%s%d", periph->periph_name, periph->unit_number); + mtx_unlock(&sc->ciss_mtx); + xpt_free_path(path); return(0); } sc->ciss_logical[bus][target].cl_name[0] = 0; diff --git a/usr.sbin/kldxref/kldxref.c b/usr.sbin/kldxref/kldxref.c index b4de191b..30245d08 100644 --- a/usr.sbin/kldxref/kldxref.c +++ b/usr.sbin/kldxref/kldxref.c @@ -275,6 +275,16 @@ usage(void) exit(1); } +static int +compare(const FTSENT *const *a, const FTSENT *const *b) +{ + if ((*a)->fts_info == FTS_D && (*b)->fts_info != FTS_D) + return 1; + if ((*a)->fts_info != FTS_D && (*b)->fts_info == FTS_D) + return -1; + return strcmp((*a)->fts_name, (*b)->fts_name); +} + int main(int argc, char *argv[]) { @@ -316,7 +326,7 @@ main(int argc, char *argv[]) err(1, "%s", argv[0]); } - ftsp = fts_open(argv, fts_options, 0); + ftsp = fts_open(argv, fts_options, compare); if (ftsp == NULL) exit(1); diff --git a/usr.sbin/pkg/pkg.c b/usr.sbin/pkg/pkg.c index 8dc7bcfd..e764469a 100644 --- a/usr.sbin/pkg/pkg.c +++ b/usr.sbin/pkg/pkg.c @@ -282,10 +282,7 @@ static int bootstrap_pkg(void) { FILE *remote; - FILE *config; - char *site; char url[MAXPATHLEN]; - char conf[MAXPATHLEN]; char abi[BUFSIZ]; char tmppkg[MAXPATHLEN]; char buf[10240]; @@ -300,7 +297,6 @@ bootstrap_pkg(void) last = 0; ret = -1; remote = NULL; - config = NULL; printf("Bootstrapping pkg please wait\n"); @@ -355,26 +351,6 @@ bootstrap_pkg(void) if ((ret = extract_pkg_static(fd, pkgstatic, MAXPATHLEN)) == 0) ret = install_pkg_static(pkgstatic, tmppkg); - snprintf(conf, MAXPATHLEN, "%s/etc/pkg.conf", - getenv("LOCALBASE") ? getenv("LOCALBASE") : _LOCALBASE); - - if (access(conf, R_OK) == -1) { - site = strrchr(url, '/'); - if (site == NULL) - goto cleanup; - site[0] = '\0'; - site = strrchr(url, '/'); - if (site == NULL) - goto cleanup; - site[0] = '\0'; - - config = fopen(conf, "w+"); - if (config == NULL) - goto cleanup; - fprintf(config, "packagesite: %s\n", url); - fclose(config); - } - goto cleanup; fetchfail: @@ -391,7 +367,11 @@ cleanup: static const char confirmation_message[] = "The package management tool is not yet installed on your system.\n" -"Do you want to fetch and install it now? [y/N]: "; +"The mechanism for doing this is not secure on FreeBSD 9.1. To securely install\n" +"pkg(8), use ports from a portsnap checkout:\n" +" # portsnap fetch extract\n" +" # make -C /usr/ports/ports-mgmt/pkg install clean\n" +"Do you still want to fetch and install it now? [y/N]: "; static int pkg_query_yes_no(void) -- 2.42.0