svn commit: r284467 - in user/cperciva/freebsd-update-build/patches: 10.1-RELEASE 8.4-RELEASE 9.3-RELEASE
Xin LI
delphij at FreeBSD.org
Tue Jun 16 21:07:54 UTC 2015
Author: delphij
Date: Tue Jun 16 21:07:53 2015
New Revision: 284467
URL: https://svnweb.freebsd.org/changeset/base/284467
Log:
Add recent patches.
Added:
user/cperciva/freebsd-update-build/patches/10.1-RELEASE/10-EN-15:04.freebsd-update
user/cperciva/freebsd-update-build/patches/10.1-RELEASE/10-EN-15:05.ufs
user/cperciva/freebsd-update-build/patches/10.1-RELEASE/11-EN-15:06.file
user/cperciva/freebsd-update-build/patches/10.1-RELEASE/11-EN-15:07.zfs
user/cperciva/freebsd-update-build/patches/10.1-RELEASE/12-SA-15:10.openssl
user/cperciva/freebsd-update-build/patches/8.4-RELEASE/28-EN-15:04.freebsd-update
user/cperciva/freebsd-update-build/patches/8.4-RELEASE/29-EN-15:06.file
user/cperciva/freebsd-update-build/patches/8.4-RELEASE/30-SA-15:10.openssl
user/cperciva/freebsd-update-build/patches/9.3-RELEASE/14-EN-15:04.freebsd-update
user/cperciva/freebsd-update-build/patches/9.3-RELEASE/15-EN-15:06.file (contents, props changed)
user/cperciva/freebsd-update-build/patches/9.3-RELEASE/16-SA-15:10.openssl
Added: user/cperciva/freebsd-update-build/patches/10.1-RELEASE/10-EN-15:04.freebsd-update
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ user/cperciva/freebsd-update-build/patches/10.1-RELEASE/10-EN-15:04.freebsd-update Tue Jun 16 21:07:53 2015 (r284467)
@@ -0,0 +1,152 @@
+Index: usr.sbin/freebsd-update/freebsd-update.8
+===================================================================
+--- usr.sbin/freebsd-update/freebsd-update.8 (revision 282245)
++++ usr.sbin/freebsd-update/freebsd-update.8 (working copy)
+@@ -25,7 +25,7 @@
+ .\"
+ .\" $FreeBSD$
+ .\"
+-.Dd July 14, 2010
++.Dd March 2, 2015
+ .Dt FREEBSD-UPDATE 8
+ .Os FreeBSD
+ .Sh NAME
+@@ -36,10 +36,12 @@
+ .Op Fl b Ar basedir
+ .Op Fl d Ar workdir
+ .Op Fl f Ar conffile
++.Op Fl F
+ .Op Fl k Ar KEY
+ .Op Fl r Ar newrelease
+ .Op Fl s Ar server
+ .Op Fl t Ar address
++.Op Fl -not-running-from-cron
+ .Cm command ...
+ .Sh DESCRIPTION
+ The
+@@ -54,16 +56,16 @@ by the
+ .Fx
+ Release Engineering Team, e.g.,
+ .Fx
+-7.3-RELEASE and
++9.3-RELEASE and
+ .Fx
+-8.0-RELEASE, but not
++10.1-RELEASE, but not
+ .Fx
+-6.3-STABLE or
++9.3-STABLE or
+ .Fx
+-9.0-CURRENT.
++11-CURRENT.
+ .Sh OPTIONS
+ The following options are supported:
+-.Bl -tag -width "-f conffile"
++.Bl -tag -width "-r newrelease"
+ .It Fl b Ar basedir
+ Operate on a system mounted at
+ .Ar basedir .
+@@ -81,6 +83,10 @@ Read configuration options from
+ .Ar conffile .
+ (default:
+ .Pa /etc/freebsd-update.conf )
++.It Fl F
++Force
++.Nm Cm fetch
++to proceed where it normally would not, such as an unfinished upgrade
+ .It Fl k Ar KEY
+ Trust an RSA key with SHA256 of
+ .Ar KEY .
+@@ -98,12 +104,21 @@ Mail output of
+ command, if any, to
+ .Ar address .
+ (default: root, or as given in the configuration file.)
++.It Fl -not-running-from-cron
++Force
++.Nm Cm fetch
++to proceed when there is no controlling tty.
++This is for use by automated scripts and orchestration tools.
++Please do not run
++.Nm Cm fetch
++from crontab or similar using this flag, see:
++.Nm Cm cron
+ .El
+ .Sh COMMANDS
+ The
+ .Cm command
+ can be any one of the following:
+-.Bl -tag -width "-f conffile"
++.Bl -tag -width "rollback"
+ .It Cm fetch
+ Based on the currently installed world and the configuration
+ options set, fetch all available binary updates.
+Index: usr.sbin/freebsd-update/freebsd-update.sh
+===================================================================
+--- usr.sbin/freebsd-update/freebsd-update.sh (revision 282245)
++++ usr.sbin/freebsd-update/freebsd-update.sh (working copy)
+@@ -43,12 +43,15 @@ Options:
+ (default: /var/db/freebsd-update/)
+ -f conffile -- Read configuration options from conffile
+ (default: /etc/freebsd-update.conf)
++ -F -- Force a fetch operation to proceed
+ -k KEY -- Trust an RSA key with SHA256 hash of KEY
+ -r release -- Target for upgrade (e.g., 6.2-RELEASE)
+ -s server -- Server from which to fetch updates
+ (default: update.FreeBSD.org)
+ -t address -- Mail output of cron command, if any, to address
+ (default: root)
++ --not-running-from-cron
++ -- Run without a tty, for use by automated tools
+ Commands:
+ fetch -- Fetch updates from server
+ cron -- Sleep rand(3600) seconds, fetch updates, and send an
+@@ -399,6 +402,12 @@ init_params () {
+
+ # No commands specified yet
+ COMMANDS=""
++
++ # Force fetch to proceed
++ FORCEFETCH=0
++
++ # Run without a TTY
++ NOTTYOK=0
+ }
+
+ # Parse the command line
+@@ -411,6 +420,12 @@ parse_cmdline () {
+ if [ ! -z "${CONFFILE}" ]; then usage; fi
+ shift; CONFFILE="$1"
+ ;;
++ -F)
++ FORCEFETCH=1
++ ;;
++ --not-running-from-cron)
++ NOTTYOK=1
++ ;;
+
+ # Configuration file equivalents
+ -b)
+@@ -665,6 +680,14 @@ fetch_check_params () {
+ echo "(Did you mean 'upgrade' instead?)"
+ exit 1
+ fi
++
++ # Check that we have updates ready to install
++ if [ -f ${BDHASH}-install/kerneldone -a $FORCEFETCH -eq 0 ]; then
++ echo "You have a partially completed upgrade pending"
++ echo "Run '$0 install' first."
++ echo "Run '$0 fetch -F' to proceed anyway."
++ exit 1
++ fi
+ }
+
+ # Perform sanity checks etc. before fetching upgrades.
+@@ -3202,7 +3225,7 @@ get_params () {
+ # Fetch command. Make sure that we're being called
+ # interactively, then run fetch_check_params and fetch_run
+ cmd_fetch () {
+- if [ ! -t 0 ]; then
++ if [ ! -t 0 -a $NOTTYOK -eq 0 ]; then
+ echo -n "`basename $0` fetch should not "
+ echo "be run non-interactively."
+ echo "Run `basename $0` cron instead."
Added: user/cperciva/freebsd-update-build/patches/10.1-RELEASE/10-EN-15:05.ufs
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ user/cperciva/freebsd-update-build/patches/10.1-RELEASE/10-EN-15:05.ufs Tue Jun 16 21:07:53 2015 (r284467)
@@ -0,0 +1,313 @@
+Index: sys/ufs/ffs/ffs_softdep.c
+===================================================================
+--- sys/ufs/ffs/ffs_softdep.c (revision 282245)
++++ sys/ufs/ffs/ffs_softdep.c (working copy)
+@@ -735,9 +735,10 @@ static struct malloc_type *memtype[] = {
+ static void check_clear_deps(struct mount *);
+ static void softdep_error(char *, int);
+ static int softdep_process_worklist(struct mount *, int);
+-static int softdep_waitidle(struct mount *);
++static int softdep_waitidle(struct mount *, int);
+ static void drain_output(struct vnode *);
+ static struct buf *getdirtybuf(struct buf *, struct rwlock *, int);
++static int check_inodedep_free(struct inodedep *);
+ static void clear_remove(struct mount *);
+ static void clear_inodedeps(struct mount *);
+ static void unlinked_inodedep(struct mount *, struct inodedep *);
+@@ -1377,6 +1378,10 @@ softdep_flush(addr)
+ mp = (struct mount *)addr;
+ ump = VFSTOUFS(mp);
+ atomic_add_int(&stat_flush_threads, 1);
++ ACQUIRE_LOCK(ump);
++ ump->softdep_flags &= ~FLUSH_STARTING;
++ wakeup(&ump->softdep_flushtd);
++ FREE_LOCK(ump);
+ if (print_threads) {
+ if (stat_flush_threads == 1)
+ printf("Running %s at pid %d\n", bufdaemonproc->p_comm,
+@@ -1389,7 +1394,7 @@ softdep_flush(addr)
+ VFSTOUFS(mp)->softdep_jblocks->jb_suspended))
+ kthread_suspend_check();
+ ACQUIRE_LOCK(ump);
+- if ((ump->softdep_flags & FLUSH_CLEANUP) == 0)
++ if ((ump->softdep_flags & (FLUSH_CLEANUP | FLUSH_EXIT)) == 0)
+ msleep(&ump->softdep_flushtd, LOCK_PTR(ump), PVM,
+ "sdflush", hz / 2);
+ ump->softdep_flags &= ~FLUSH_CLEANUP;
+@@ -1419,11 +1424,9 @@ worklist_speedup(mp)
+
+ ump = VFSTOUFS(mp);
+ LOCK_OWNED(ump);
+- if ((ump->softdep_flags & (FLUSH_CLEANUP | FLUSH_EXIT)) == 0) {
++ if ((ump->softdep_flags & (FLUSH_CLEANUP | FLUSH_EXIT)) == 0)
+ ump->softdep_flags |= FLUSH_CLEANUP;
+- if (ump->softdep_flushtd->td_wchan == &ump->softdep_flushtd)
+- wakeup(&ump->softdep_flushtd);
+- }
++ wakeup(&ump->softdep_flushtd);
+ }
+
+ static int
+@@ -1468,14 +1471,10 @@ softdep_speedup(ump)
+ TAILQ_INSERT_TAIL(&softdepmounts, sdp, sd_next);
+ FREE_GBLLOCK(&lk);
+ if ((altump->softdep_flags &
+- (FLUSH_CLEANUP | FLUSH_EXIT)) == 0) {
++ (FLUSH_CLEANUP | FLUSH_EXIT)) == 0)
+ altump->softdep_flags |= FLUSH_CLEANUP;
+- altump->um_softdep->sd_cleanups++;
+- if (altump->softdep_flushtd->td_wchan ==
+- &altump->softdep_flushtd) {
+- wakeup(&altump->softdep_flushtd);
+- }
+- }
++ altump->um_softdep->sd_cleanups++;
++ wakeup(&altump->softdep_flushtd);
+ FREE_LOCK(altump);
+ }
+ }
+@@ -1887,8 +1886,8 @@ softdep_flushworklist(oldmnt, countp, td
+ struct thread *td;
+ {
+ struct vnode *devvp;
+- int count, error = 0;
+ struct ufsmount *ump;
++ int count, error;
+
+ /*
+ * Alternately flush the block device associated with the mount
+@@ -1897,6 +1896,7 @@ softdep_flushworklist(oldmnt, countp, td
+ * are found.
+ */
+ *countp = 0;
++ error = 0;
+ ump = VFSTOUFS(oldmnt);
+ devvp = ump->um_devvp;
+ while ((count = softdep_process_worklist(oldmnt, 1)) > 0) {
+@@ -1904,36 +1904,47 @@ softdep_flushworklist(oldmnt, countp, td
+ vn_lock(devvp, LK_EXCLUSIVE | LK_RETRY);
+ error = VOP_FSYNC(devvp, MNT_WAIT, td);
+ VOP_UNLOCK(devvp, 0);
+- if (error)
++ if (error != 0)
+ break;
+ }
+ return (error);
+ }
+
++#define SU_WAITIDLE_RETRIES 20
+ static int
+-softdep_waitidle(struct mount *mp)
++softdep_waitidle(struct mount *mp, int flags __unused)
+ {
+ struct ufsmount *ump;
+- int error;
+- int i;
++ struct vnode *devvp;
++ struct thread *td;
++ int error, i;
+
+ ump = VFSTOUFS(mp);
++ devvp = ump->um_devvp;
++ td = curthread;
++ error = 0;
+ ACQUIRE_LOCK(ump);
+- for (i = 0; i < 10 && ump->softdep_deps; i++) {
++ for (i = 0; i < SU_WAITIDLE_RETRIES && ump->softdep_deps != 0; i++) {
+ ump->softdep_req = 1;
+- if (ump->softdep_on_worklist)
+- panic("softdep_waitidle: work added after flush.");
+- msleep(&ump->softdep_deps, LOCK_PTR(ump), PVM, "softdeps", 1);
++ KASSERT((flags & FORCECLOSE) == 0 ||
++ ump->softdep_on_worklist == 0,
++ ("softdep_waitidle: work added after flush"));
++ msleep(&ump->softdep_deps, LOCK_PTR(ump), PVM | PDROP,
++ "softdeps", 10 * hz);
++ vn_lock(devvp, LK_EXCLUSIVE | LK_RETRY);
++ error = VOP_FSYNC(devvp, MNT_WAIT, td);
++ VOP_UNLOCK(devvp, 0);
++ if (error != 0)
++ break;
++ ACQUIRE_LOCK(ump);
+ }
+ ump->softdep_req = 0;
+- FREE_LOCK(ump);
+- error = 0;
+- if (i == 10) {
++ if (i == SU_WAITIDLE_RETRIES && error == 0 && ump->softdep_deps != 0) {
+ error = EBUSY;
+ printf("softdep_waitidle: Failed to flush worklist for %p\n",
+ mp);
+ }
+-
++ FREE_LOCK(ump);
+ return (error);
+ }
+
+@@ -1990,7 +2001,7 @@ retry_flush:
+ error = EBUSY;
+ }
+ if (!error)
+- error = softdep_waitidle(oldmnt);
++ error = softdep_waitidle(oldmnt, flags);
+ if (!error) {
+ if (oldmnt->mnt_kern_flag & MNTK_UNMOUNT) {
+ retry = 0;
+@@ -2490,9 +2501,18 @@ softdep_mount(devvp, mp, fs, cred)
+ /*
+ * Start our flushing thread in the bufdaemon process.
+ */
++ ACQUIRE_LOCK(ump);
++ ump->softdep_flags |= FLUSH_STARTING;
++ FREE_LOCK(ump);
+ kproc_kthread_add(&softdep_flush, mp, &bufdaemonproc,
+ &ump->softdep_flushtd, 0, 0, "softdepflush", "%s worker",
+ mp->mnt_stat.f_mntonname);
++ ACQUIRE_LOCK(ump);
++ while ((ump->softdep_flags & FLUSH_STARTING) != 0) {
++ msleep(&ump->softdep_flushtd, LOCK_PTR(ump), PVM, "sdstart",
++ hz / 2);
++ }
++ FREE_LOCK(ump);
+ /*
+ * When doing soft updates, the counters in the
+ * superblock may have gotten out of sync. Recomputation
+@@ -7629,17 +7649,13 @@ check_inode_unwritten(inodedep)
+ return (1);
+ }
+
+-/*
+- * Try to free an inodedep structure. Return 1 if it could be freed.
+- */
+ static int
+-free_inodedep(inodedep)
++check_inodedep_free(inodedep)
+ struct inodedep *inodedep;
+ {
+
+ LOCK_OWNED(VFSTOUFS(inodedep->id_list.wk_mp));
+- if ((inodedep->id_state & (ONWORKLIST | UNLINKED)) != 0 ||
+- (inodedep->id_state & ALLCOMPLETE) != ALLCOMPLETE ||
++ if ((inodedep->id_state & ALLCOMPLETE) != ALLCOMPLETE ||
+ !LIST_EMPTY(&inodedep->id_dirremhd) ||
+ !LIST_EMPTY(&inodedep->id_pendinghd) ||
+ !LIST_EMPTY(&inodedep->id_bufwait) ||
+@@ -7654,6 +7670,21 @@ free_inodedep(inodedep)
+ inodedep->id_nlinkdelta != 0 ||
+ inodedep->id_savedino1 != NULL)
+ return (0);
++ return (1);
++}
++
++/*
++ * Try to free an inodedep structure. Return 1 if it could be freed.
++ */
++static int
++free_inodedep(inodedep)
++ struct inodedep *inodedep;
++{
++
++ LOCK_OWNED(VFSTOUFS(inodedep->id_list.wk_mp));
++ if ((inodedep->id_state & (ONWORKLIST | UNLINKED)) != 0 ||
++ !check_inodedep_free(inodedep))
++ return (0);
+ if (inodedep->id_state & ONDEPLIST)
+ LIST_REMOVE(inodedep, id_deps);
+ LIST_REMOVE(inodedep, id_hash);
+@@ -13838,7 +13869,8 @@ softdep_check_suspend(struct mount *mp,
+ {
+ struct bufobj *bo;
+ struct ufsmount *ump;
+- int error;
++ struct inodedep *inodedep;
++ int error, unlinked;
+
+ bo = &devvp->v_bufobj;
+ ASSERT_BO_WLOCKED(bo);
+@@ -13899,6 +13931,20 @@ softdep_check_suspend(struct mount *mp,
+ break;
+ }
+
++ unlinked = 0;
++ if (MOUNTEDSUJ(mp)) {
++ for (inodedep = TAILQ_FIRST(&ump->softdep_unlinked);
++ inodedep != NULL;
++ inodedep = TAILQ_NEXT(inodedep, id_unlinked)) {
++ if ((inodedep->id_state & (UNLINKED | UNLINKLINKS |
++ UNLINKONLIST)) != (UNLINKED | UNLINKLINKS |
++ UNLINKONLIST) ||
++ !check_inodedep_free(inodedep))
++ continue;
++ unlinked++;
++ }
++ }
++
+ /*
+ * Reasons for needing more work before suspend:
+ * - Dirty buffers on devvp.
+@@ -13908,8 +13954,8 @@ softdep_check_suspend(struct mount *mp,
+ error = 0;
+ if (bo->bo_numoutput > 0 ||
+ bo->bo_dirty.bv_cnt > 0 ||
+- softdep_depcnt != 0 ||
+- ump->softdep_deps != 0 ||
++ softdep_depcnt != unlinked ||
++ ump->softdep_deps != unlinked ||
+ softdep_accdepcnt != ump->softdep_accdeps ||
+ secondary_writes != 0 ||
+ mp->mnt_secondary_writes != 0 ||
+Index: sys/ufs/ffs/ffs_vfsops.c
+===================================================================
+--- sys/ufs/ffs/ffs_vfsops.c (revision 282245)
++++ sys/ufs/ffs/ffs_vfsops.c (working copy)
+@@ -1502,8 +1502,11 @@ ffs_sync(mp, waitfor)
+ if (fs->fs_fmod != 0 && fs->fs_ronly != 0 && ump->um_fsckpid == 0)
+ panic("%s: ffs_sync: modification on read-only filesystem",
+ fs->fs_fsmnt);
+- if (waitfor == MNT_LAZY)
+- return (ffs_sync_lazy(mp));
++ if (waitfor == MNT_LAZY) {
++ if (!rebooting)
++ return (ffs_sync_lazy(mp));
++ waitfor = MNT_NOWAIT;
++ }
+
+ /*
+ * Write back each (modified) inode.
+@@ -1560,7 +1563,7 @@ loop:
+ /*
+ * Force stale filesystem control information to be flushed.
+ */
+- if (waitfor == MNT_WAIT) {
++ if (waitfor == MNT_WAIT || rebooting) {
+ if ((error = softdep_flushworklist(ump->um_mountp, &count, td)))
+ allerror = error;
+ /* Flushed work items may create new vnodes to clean */
+@@ -1577,9 +1580,12 @@ loop:
+ if (bo->bo_numoutput > 0 || bo->bo_dirty.bv_cnt > 0) {
+ BO_UNLOCK(bo);
+ vn_lock(devvp, LK_EXCLUSIVE | LK_RETRY);
+- if ((error = VOP_FSYNC(devvp, waitfor, td)) != 0)
+- allerror = error;
++ error = VOP_FSYNC(devvp, waitfor, td);
+ VOP_UNLOCK(devvp, 0);
++ if (MOUNTEDSOFTDEP(mp) && (error == 0 || error == EAGAIN))
++ error = ffs_sbupdate(ump, waitfor, 0);
++ if (error != 0)
++ allerror = error;
+ if (allerror == 0 && waitfor == MNT_WAIT)
+ goto loop;
+ } else if (suspend != 0) {
+Index: sys/ufs/ffs/softdep.h
+===================================================================
+--- sys/ufs/ffs/softdep.h (revision 282245)
++++ sys/ufs/ffs/softdep.h (working copy)
+@@ -1063,6 +1063,8 @@ struct mount_softdeps {
+ */
+ #define FLUSH_EXIT 0x0001 /* time to exit */
+ #define FLUSH_CLEANUP 0x0002 /* need to clear out softdep structures */
++#define FLUSH_STARTING 0x0004 /* flush thread not yet started */
++
+ /*
+ * Keep the old names from when these were in the ufsmount structure.
+ */
Added: user/cperciva/freebsd-update-build/patches/10.1-RELEASE/11-EN-15:06.file
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ user/cperciva/freebsd-update-build/patches/10.1-RELEASE/11-EN-15:06.file Tue Jun 16 21:07:53 2015 (r284467)
@@ -0,0 +1,6603 @@
+Index: contrib/file/ChangeLog
+===================================================================
+--- contrib/file/ChangeLog (revision 284174)
++++ contrib/file/ChangeLog (working copy)
+@@ -1,3 +1,97 @@
++2015-01-02 15:15 Christos Zoulas <christos at zoulas.com>
++
++ * release 5.22
++
++2015-01-01 12:01 Christos Zoulas <christos at zoulas.com>
++
++ * add indirect relative for TIFF/Exif
++
++2014-12-16 18:10 Christos Zoulas <christos at zoulas.com>
++
++ * restructure elf note printing to avoid repeated messages
++ * add note limit, suggested by Alexander Cherepanov
++
++2014-12-16 16:53 Christos Zoulas <christos at zoulas.com>
++
++ * Bail out on partial pread()'s (Alexander Cherepanov)
++ * Fix incorrect bounds check in file_printable (Alexander Cherepanov)
++
++2014-12-11 20:01 Christos Zoulas <christos at zoulas.com>
++
++ * PR/405: ignore SIGPIPE from uncompress programs
++ * change printable -> file_printable and use it in
++ more places for safety
++ * in ELF, instead of "(uses dynamic libraries)" when PT_INTERP
++ is present print the interpreter name.
++
++2014-12-10 20:01 Christos Zoulas <christos at zoulas.com>
++
++ * release 5.21
++
++2014-11-27 18:40 Christos Zoulas <christos at zoulas.com>
++
++ * Allow setting more parameters from the command line.
++ * Split name/use and indirect magic recursion limits.
++
++2014-11-27 11:12 Christos Zoulas <christos at zoulas.com>
++
++ * Adjust ELF parameters and the default recursion
++ level.
++ * Allow setting the recursion level dynamically.
++
++2014-11-24 8:55 Christos Zoulas <christos at zoulas.com>
++
++ * The following fixes resulted from Thomas Jarosch's fuzzing
++ tests that revealed severe performance issues on pathological
++ input:
++ - limit number of elf program and sections processing
++ - abort elf note processing quickly
++ - reduce the number of recursion levels from 20 to 10
++ - preserve error messages in indirect magic handling
++
++ This is tracked as CVE-2014-8116 and CVE-2014-8117
++
++2014-11-12 10:30 Christos Zoulas <christos at zoulas.com>
++
++ * fix bogus free in the user buffer case.
++
++2014-11-11 12:35 Christos Zoulas <christos at zoulas.com>
++
++ * fix out of bounds read for pascal strings
++ * fix memory leak (not freeing the head of each mlist)
++
++2014-11-07 10:25 Christos Zoulas <christos at zoulas.com>
++
++ * When printing strings from a file, convert them to printable
++ on a byte by byte basis, so that we don't get issues with
++ locale's trying to interpret random byte streams as UTF-8 and
++ having printf error out with EILSEQ.
++
++2014-10-17 11:48 Christos Zoulas <christos at zoulas.com>
++
++ * fix bounds in note reading (Francisco Alonso / Red Hat)
++
++2014-10-11 15:02 Christos Zoulas <christos at zoulas.com>
++
++ * fix autoconf glue for setlocale and locale_t; some OS's
++ have locale_t in xlocale.h
++
++2014-10-10 15:01 Christos Zoulas <christos at zoulas.com>
++
++ * release 5.20
++
++2014-08-17 10:01 Christos Zoulas <christos at zoulas.com>
++
++ * recognize encrypted CDF documents
++
++2014-08-04 9:18 Christos Zoulas <christos at zoulas.com>
++
++ * add magic_load_buffers from Brooks Davis
++
++2014-07-24 16:40 Christos Zoulas <christos at zoulas.com>
++
++ * add thumbs.db support
++
+ 2014-06-12 12:28 Christos Zoulas <christos at zoulas.com>
+
+ * release 5.19
+Index: contrib/file/README
+===================================================================
+--- contrib/file/README (revision 284174)
++++ contrib/file/README (working copy)
+@@ -1,6 +1,6 @@
+ ## README for file(1) Command ##
+
+- @(#) $File: README,v 1.48 2014/03/07 13:55:30 christos Exp $
++ @(#) $File: README,v 1.49 2015/01/02 20:23:04 christos Exp $
+
+ Mailing List: file at mx.gw.com
+ Mailing List archives: http://mx.gw.com/pipermail/file/
+@@ -25,8 +25,8 @@ A public read-only git repository of the same sour
+
+ https://github.com/file/file
+
+-The major changes for 5.x are CDF file parsing, indirect magic, and
+-overhaul in mime and ascii encoding handling.
++The major changes for 5.x are CDF file parsing, indirect magic, name/use
++(recursion) and overhaul in mime and ascii encoding handling.
+
+ The major feature of 4.x is the refactoring of the code into a library,
+ and the re-write of the file command in terms of that library. The library
+@@ -67,33 +67,41 @@ in magic(5) format please, to the maintainer, Chri
+ COPYING - read this first.
+ README - read this second (you are currently reading this file).
+ INSTALL - read on how to install
+-
+ src/apprentice.c - parses /etc/magic to learn magic
++src/asctime_r.c - replacement for OS's that don't have it.
+ src/apptype.c - used for OS/2 specific application type magic
+ src/asprintf.c - replacement for OS's that don't have it.
+ src/ascmagic.c - third & last set of tests, based on hardwired assumptions.
+-src/asctime_r.c - for systems that don't have it.
+-src/asprintf.c - for systems that don't have it.
+-src/cdf.c - parser for Microsoft Compound Document Files
++src/asctime_r.c - replacement for OS's that don't have it.
++src/asprintf.c - replacement for OS's that don't have it.
++src/cdf.[ch] - parser for Microsoft Compound Document Files
+ src/cdf_time.c - time converter for CDF.
+ src/compress.c - handles decompressing files to look inside.
+-src/ctime_r.c - for systems that don't have it.
++src/ctime_r.c - replacement for OS's that don't have it.
++src/elfclass.h - common code for elf 32/64.
+ src/encoding.c - handles unicode encodings
+ src/file.c - the main program
+ src/file.h - header file
++src/file_opts.h - list of options
++src/fmtcheck.c - replacement for OS's that don't have it.
+ src/fsmagic.c - first set of tests the program runs, based on filesystem info
+ src/funcs.c - utilility functions
+-src/getopt_long.c - for systems that don't have it.
+-src/getline.c - for systems that don't have it.
++src/getline.c - replacement for OS's that don't have it.
++src/getopt_long.c - replacement for OS's that don't have it.
+ src/is_tar.c, tar.h - knows about tarchives (courtesy John Gilmore).
+ src/names.h - header file for ascmagic.c
++src/magic.h.in - source file for magic.h
+ src/magic.c - the libmagic api
++src/pread.c - replacement for OS's that don't have it.
+ src/print.c - print results, errors, warnings.
+ src/readcdf.c - CDF wrapper.
+ src/readelf.[ch] - Stand-alone elf parsing code.
+ src/softmagic.c - 2nd set of tests, based on /etc/magic
+-src/strlcat.c - for systems that don't have it.
+-src/strlcpy.c - for systems that don't have it.
++src/mygetopt.h - replacement for OS's that don't have it.
++src/strcasestr.c - replacement for OS's that don't have it.
++src/strlcat.c - replacement for OS's that don't have it.
++src/strlcpy.c - replacement for OS's that don't have it.
++src/tar.h - tar file definitions
+ src/vasprintf.c - for systems that don't have it.
+ doc/file.man - man page for the command
+ doc/magic.man - man page for the magic file, courtesy Guy Harris.
+Index: contrib/file/TODO
+===================================================================
+--- contrib/file/TODO (revision 284174)
++++ contrib/file/TODO (working copy)
+@@ -15,3 +15,5 @@ small amount of C is needed (because fast executio
+ required for soft magic, not the more detailed information given by
+ hard-wired routines). In this regard, note that hplip, which is
+ BSD-licensed, has a magic reimplementation in Python.
++
++Read the kerberos magic entry for more ideas.
+Index: contrib/file/config.h.in
+===================================================================
+--- contrib/file/config.h.in (revision 284174)
++++ contrib/file/config.h.in (working copy)
+@@ -44,6 +44,9 @@
+ /* Define to 1 if you have the `fork' function. */
+ #undef HAVE_FORK
+
++/* Define to 1 if you have the `freelocale' function. */
++#undef HAVE_FREELOCALE
++
+ /* Define to 1 if fseeko (and presumably ftello) exists and is declared. */
+ #undef HAVE_FSEEKO
+
+@@ -95,9 +98,15 @@
+ /* Define to 1 if you have a working `mmap' system call. */
+ #undef HAVE_MMAP
+
++/* Define to 1 if you have the `newlocale' function. */
++#undef HAVE_NEWLOCALE
++
+ /* Define to 1 if you have the `pread' function. */
+ #undef HAVE_PREAD
+
++/* Define to 1 if you have the `setlocale' function. */
++#undef HAVE_SETLOCALE
++
+ /* Define to 1 if you have the <stddef.h> header file. */
+ #undef HAVE_STDDEF_H
+
+@@ -182,6 +191,9 @@
+ /* Define to 1 if you have the <unistd.h> header file. */
+ #undef HAVE_UNISTD_H
+
++/* Define to 1 if you have the `uselocale' function. */
++#undef HAVE_USELOCALE
++
+ /* Define to 1 if you have the `utime' function. */
+ #undef HAVE_UTIME
+
+@@ -219,6 +231,9 @@
+ /* Define to 1 if `vfork' works. */
+ #undef HAVE_WORKING_VFORK
+
++/* Define to 1 if you have the <xlocale.h> header file. */
++#undef HAVE_XLOCALE_H
++
+ /* Define to 1 if you have the <zlib.h> header file. */
+ #undef HAVE_ZLIB_H
+
+Index: contrib/file/configure
+===================================================================
+--- contrib/file/configure (revision 284174)
++++ contrib/file/configure (working copy)
+@@ -1,6 +1,6 @@
+ #! /bin/sh
+ # Guess values for system-dependent variables and create Makefiles.
+-# Generated by GNU Autoconf 2.69 for file 5.19.
++# Generated by GNU Autoconf 2.69 for file 5.22.
+ #
+ # Report bugs to <christos at astron.com>.
+ #
+@@ -590,8 +590,8 @@ MAKEFLAGS=
+ # Identity of this package.
+ PACKAGE_NAME='file'
+ PACKAGE_TARNAME='file'
+-PACKAGE_VERSION='5.19'
+-PACKAGE_STRING='file 5.19'
++PACKAGE_VERSION='5.22'
++PACKAGE_STRING='file 5.22'
+ PACKAGE_BUGREPORT='christos at astron.com'
+ PACKAGE_URL=''
+
+@@ -1327,7 +1327,7 @@ if test "$ac_init_help" = "long"; then
+ # Omit some internal or obsolete options to make the list less imposing.
+ # This message is too long to be a string in the A/UX 3.1 sh.
+ cat <<_ACEOF
+-\`configure' configures file 5.19 to adapt to many kinds of systems.
++\`configure' configures file 5.22 to adapt to many kinds of systems.
+
+ Usage: $0 [OPTION]... [VAR=VALUE]...
+
+@@ -1397,7 +1397,7 @@ fi
+
+ if test -n "$ac_init_help"; then
+ case $ac_init_help in
+- short | recursive ) echo "Configuration of file 5.19:";;
++ short | recursive ) echo "Configuration of file 5.22:";;
+ esac
+ cat <<\_ACEOF
+
+@@ -1507,7 +1507,7 @@ fi
+ test -n "$ac_init_help" && exit $ac_status
+ if $ac_init_version; then
+ cat <<\_ACEOF
+-file configure 5.19
++file configure 5.22
+ generated by GNU Autoconf 2.69
+
+ Copyright (C) 2012 Free Software Foundation, Inc.
+@@ -2163,7 +2163,7 @@ cat >config.log <<_ACEOF
+ This file contains any messages produced by compilers while
+ running configure, to aid debugging if configure makes a mistake.
+
+-It was created by file $as_me 5.19, which was
++It was created by file $as_me 5.22, which was
+ generated by GNU Autoconf 2.69. Invocation command line was
+
+ $ $0 $@
+@@ -3029,7 +3029,7 @@ fi
+
+ # Define the identity of the package.
+ PACKAGE='file'
+- VERSION='5.19'
++ VERSION='5.22'
+
+
+ cat >>confdefs.h <<_ACEOF
+@@ -12785,7 +12785,7 @@ fi
+
+ done
+
+-for ac_header in getopt.h err.h
++for ac_header in getopt.h err.h xlocale.h
+ do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+@@ -14191,7 +14191,7 @@ fi
+ fi
+
+
+-for ac_func in strerror strndup strtoul mkstemp mkostemp utimes utime wcwidth strtof
++for ac_func in strerror strndup strtoul mkstemp mkostemp utimes utime wcwidth strtof newlocale uselocale freelocale setlocale
+ do :
+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+@@ -14998,7 +14998,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ # report actual input values of CONFIG_FILES etc. instead of their
+ # values after options handling.
+ ac_log="
+-This file was extended by file $as_me 5.19, which was
++This file was extended by file $as_me 5.22, which was
+ generated by GNU Autoconf 2.69. Invocation command line was
+
+ CONFIG_FILES = $CONFIG_FILES
+@@ -15064,7 +15064,7 @@ _ACEOF
+ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
+ ac_cs_version="\\
+-file config.status 5.19
++file config.status 5.22
+ configured by $0, generated by GNU Autoconf 2.69,
+ with options \\"\$ac_cs_config\\"
+
+Index: contrib/file/configure.ac
+===================================================================
+--- contrib/file/configure.ac (revision 284174)
++++ contrib/file/configure.ac (working copy)
+@@ -1,5 +1,5 @@
+ dnl Process this file with autoconf to produce a configure script.
+-AC_INIT([file],[5.19],[christos at astron.com])
++AC_INIT([file],[5.22],[christos at astron.com])
+ AM_INIT_AUTOMAKE([subdir-objects foreign])
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+
+@@ -82,7 +82,7 @@ AC_HEADER_MAJOR
+ AC_HEADER_SYS_WAIT
+ AC_CHECK_HEADERS(stdint.h fcntl.h locale.h stdint.h inttypes.h unistd.h)
+ AC_CHECK_HEADERS(stddef.h utime.h wchar.h wctype.h limits.h)
+-AC_CHECK_HEADERS(getopt.h err.h)
++AC_CHECK_HEADERS(getopt.h err.h xlocale.h)
+ AC_CHECK_HEADERS(sys/mman.h sys/stat.h sys/types.h sys/utime.h sys/time.h)
+ AC_CHECK_HEADERS(zlib.h)
+
+@@ -138,7 +138,7 @@ else
+ fi])
+
+ dnl Checks for functions
+-AC_CHECK_FUNCS(strerror strndup strtoul mkstemp mkostemp utimes utime wcwidth strtof)
++AC_CHECK_FUNCS(strerror strndup strtoul mkstemp mkostemp utimes utime wcwidth strtof newlocale uselocale freelocale setlocale)
+
+ dnl Provide implementation of some required functions if necessary
+ AC_REPLACE_FUNCS(getopt_long asprintf vasprintf strlcpy strlcat getline ctime_r asctime_r pread strcasestr fmtcheck)
+Index: contrib/file/doc/file.man
+===================================================================
+--- contrib/file/doc/file.man (revision 284174)
++++ contrib/file/doc/file.man (working copy)
+@@ -1,5 +1,5 @@
+-.\" $File: file.man,v 1.106 2014/03/07 23:11:51 christos Exp $
+-.Dd January 30, 2014
++.\" $File: file.man,v 1.111 2014/12/16 23:18:40 christos Exp $
++.Dd December 16, 2014
+ .Dt FILE __CSECTION__
+ .Os
+ .Sh NAME
+@@ -16,6 +16,7 @@
+ .Op Fl F Ar separator
+ .Op Fl f Ar namefile
+ .Op Fl m Ar magicfiles
++.Op Fl P Ar name=value
+ .Ar
+ .Ek
+ .Nm
+@@ -303,6 +304,16 @@ or
+ attempt to preserve the access time of files analyzed, to pretend that
+ .Nm
+ never read them.
++.It Fl P , Fl Fl parameter Ar name=value
++Set various parameter limits.
++.Bl -column "elf_phnum" "Default" "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" -offset indent
++.It Sy "Name" Ta Sy "Default" Ta Sy "Explanation"
++.It Li indir Ta 15 Ta recursion limit for indirect magic
++.It Li name Ta 30 Ta use count limit for name/use magic
++.It Li elf_notes Ta 256 Ta max ELF notes processed
++.It Li elf_phnum Ta 128 Ta max ELF program sections processed
++.It Li elf_shnum Ta 32768 Ta max ELF sections processed
++.El
+ .It Fl r , Fl Fl raw
+ Don't translate unprintable characters to \eooo.
+ Normally
+@@ -385,6 +396,7 @@ options.
+ .Xr hexdump 1 ,
+ .Xr od 1 ,
+ .Xr strings 1 ,
++.Xr fstyp 8
+ .Sh STANDARDS CONFORMANCE
+ This program is believed to exceed the System V Interface Definition
+ of FILE(CMD), as near as one can determine from the vague language
+Index: contrib/file/doc/libmagic.man
+===================================================================
+--- contrib/file/doc/libmagic.man (revision 284174)
++++ contrib/file/doc/libmagic.man (working copy)
+@@ -1,4 +1,4 @@
+-.\" $File: libmagic.man,v 1.28 2014/03/02 14:47:16 christos Exp $
++.\" $File: libmagic.man,v 1.34 2014/12/16 23:18:40 christos Exp $
+ .\"
+ .\" Copyright (c) Christos Zoulas 2003.
+ .\" All Rights Reserved.
+@@ -25,7 +25,7 @@
+ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ .\" SUCH DAMAGE.
+ .\"
+-.Dd January 6, 2012
++.Dd December 16, 2014
+ .Dt LIBMAGIC 3
+ .Os
+ .Sh NAME
+@@ -40,6 +40,9 @@
+ .Nm magic_compile ,
+ .Nm magic_list ,
+ .Nm magic_load ,
++.Nm magic_load_buffers ,
++.Nm magic_setparam ,
++.Nm magic_getparam ,
+ .Nm magic_version
+ .Nd Magic number recognition library
+ .Sh LIBRARY
+@@ -71,6 +74,12 @@
+ .Ft int
+ .Fn magic_load "magic_t cookie" "const char *filename"
+ .Ft int
++.Fn magic_load_buffers "magic_t cookie" "void **buffers" "size_t *sizes" "size_t nbuffers"
++.Ft int
++.Fn magic_getparam "magic_t cookie" "int param" "void *value"
++.Ft int
++.Fn magic_setparam "magic_t cookie" "int param" "const void *value"
++.Ft int
+ .Fn magic_version "void"
+ .Sh DESCRIPTION
+ These functions
+@@ -253,6 +262,60 @@ adds
+ to the database filename as appropriate.
+ .Pp
+ The
++.Fn magic_load_buffers
++function takes an array of size
++.Fa nbuffers
++of
++.Fa buffers
++with a respective size for each in the array of
++.Fa sizes
++loaded with the contents of the magic databases from the filesystem.
++This function can be used in environment where the magic library does
++not have direct access to the filesystem, but can access the magic
++database via shared memory or other IPC means.
++.Pp
++The
++.Fn magic_getparam
++and
++.Fn magic_setparam
++allow getting and setting various limits related to the the magic
++library.
++.Bl -column "MAGIC_PARAM_ELF_PHNUM_MAX" "size_t" "Default" -offset indent
++.It Sy "Parameter" Ta Sy "Type" Ta Sy "Default"
++.It Li MAGIC_PARAM_INDIR_MAX Ta size_t Ta 15
++.It Li MAGIC_PARAM_NAME_MAX Ta size_t Ta 30
++.It Li MAGIC_PARAM_ELF_NOTES_MAX Ta size_t Ta 256
++.It Li MAGIC_PARAM_ELF_PHNUM_MAX Ta size_t Ta 128
++.It Li MAGIC_PARAM_ELF_SHNUM_MAX Ta size_t Ta 32768
++.El
++.Pp
++The
++.Dv MAGIC_PARAM_INDIR_RECURSION
++parameter controls how many levels of recursion will be followed for
++indirect magic entries.
++.Pp
++The
++.Dv MAGIC_PARAM_NAME_RECURSION
++parameter controls how many levels of recursion will be followed for
++for name/use calls.
++.Pp
++The
++.Dv MAGIC_PARAM_NAME_MAX
++parameter controls the maximum number of calls for name/use.
++.Pp
++The
++.Dv MAGIC_PARAM_NOTES_MAX
++parameter controls how many ELF notes will be processed.
++.Pp
++The
++.Dv MAGIC_PARAM_PHNUM_MAX
++parameter controls how many ELF program sections will be processed.
++.Pp
++The
++.Dv MAGIC_PARAM_SHNUM_MAX
++parameter controls how many ELF sections will be processed.
++.Pp
++The
+ .Fn magic_version
+ command returns the version number of this library which is compiled into
+ the shared library using the constant
+Index: contrib/file/doc/magic.man
+===================================================================
+--- contrib/file/doc/magic.man (revision 284174)
++++ contrib/file/doc/magic.man (working copy)
+@@ -1,5 +1,5 @@
+-.\" $File: magic.man,v 1.84 2014/06/03 19:01:34 christos Exp $
+-.Dd June 3, 2014
++.\" $File: magic.man,v 1.85 2015/01/01 17:07:34 christos Exp $
++.Dd January 1, 2015
*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
More information about the svn-src-user
mailing list