diff options
Diffstat (limited to 'libre')
127 files changed, 22574 insertions, 597 deletions
diff --git a/libre/audacious-plugins-libre/PKGBUILD b/libre/audacious-plugins-libre/PKGBUILD index 51668c454..59011736c 100644 --- a/libre/audacious-plugins-libre/PKGBUILD +++ b/libre/audacious-plugins-libre/PKGBUILD @@ -1,4 +1,4 @@ -# $Id: PKGBUILD 162794 2012-06-30 14:17:02Z bisson $ +# $Id: PKGBUILD 164182 2012-07-27 00:15:41Z bisson $ # Contributor: Alexander Fehr <pizzapunk gmail com> # Contributor: William Rea <sillywilly@gmail.com> # Maintainer: Gaetan Bisson <bisson@archlinux.org> @@ -7,8 +7,8 @@ _pkgname=audacious-plugins pkgname=audacious-plugins-libre -pkgver=3.2.4 -pkgrel=2 +pkgver=3.3 +pkgrel=1 pkgdesc='Plugins for Audacious without unfree plugins' url='http://audacious-media-player.org/' arch=('i686' 'x86_64') @@ -60,7 +60,7 @@ optdepends=('oss: Open Sound System v4 output' 'libcue: CUE playlist format') source=("http://distfiles.audacious-media-player.org/${_pkgname}-${pkgver}.tar.bz2") -sha1sums=('7538a0391504ce4a92967dc7c5bd4948751efa91') +sha1sums=('2ce65a9d9a2d5d5cbe41befa70c89f36fff43286') build() { # Retrieve upstream & remove plugin 'psf' due to issues mentioned above. sed -i s/enable_psf=yes/enable_psf=no/ ${_pkgname}-$pkgver/configure diff --git a/libre/filesystem/PKGBUILD b/libre/filesystem/PKGBUILD index 215001c4e..add2fa659 100644 --- a/libre/filesystem/PKGBUILD +++ b/libre/filesystem/PKGBUILD @@ -1,11 +1,11 @@ -# $Id: PKGBUILD 162111 2012-06-20 09:33:31Z tomegun $ +# $Id: PKGBUILD 163827 2012-07-20 23:47:38Z tomegun $ # Maintainer: Tom Gundersen <teg@jklm.no> # Maintainer (Parabola): Nicolás Reynolds <fauno@kiwwwi.com.ar> # Maintainer (Parabola): André Silva <emulatorman@lavabit.com> pkgname=filesystem -pkgver=2012.6 -pkgrel=4 +pkgver=2012.7 +pkgrel=1 pkgdesc='Base filesystem for Parabola' arch=('any') license=('GPL') @@ -87,7 +87,7 @@ md5sums=('45940618da782cc391c59f88ab3333c3' '8a9042a2cedf6b6b47eb8973f14289cb' 'b8355d9d2782f424f4cedcf682651be0' 'ca716f853860199c1286e7939b2f2666' - 'e5d8323a4dbee7a6d0d2a19cbf4b819f' + '1745349eb24ed21b4cfaa6f423bddb76' '7bc65f234dfb6abf24e7c3b03e86f4ff' 'd41d8cd98f00b204e9800998ecf8427e' '0e145e18fea8fd190b30d45764f5707c' diff --git a/libre/filesystem/crypttab b/libre/filesystem/crypttab index dd6994b5a..195945a74 100644 --- a/libre/filesystem/crypttab +++ b/libre/filesystem/crypttab @@ -1,33 +1,17 @@ -# crypttab: Mappings for encrypted partitions +# crypttab: mappings for encrypted partitions # # Each mapped device will be created in /dev/mapper, so your /etc/fstab -# should use the /dev/mapper/{NAME} paths for encrypted devices. +# should use the /dev/mapper/<name> paths for encrypted devices. # -# Each PASSWORD field can be an absolute pathname to a key file (starting -# with a slash, recommended) or a literal string that will be used as -# a passphrase. To use special characters in the passphrase, surround it -# by quotes, the usual bash quoting rules apply. -# There are two special keywords that cannot be used as passphrases: -# - ASK ask for a passphrase on boot -# - SWAP use a random key and create a swapspace afterwards -# WARNING: use the SWAP keyword carefully, as it overwrites the data -# on the specified partition -# -# To create a key file: -# hashalot -n 32 ripemd160 >/etc/crytfs.key -# or -# dd if=/dev/urandom of=/etc/cryptfs.key bs=256 count=1 -# -# To pass additional options to cryptsetup for non-LUKS partitions, use the -# fourth column. +# The Arch specific syntax has been deprecated, see crypttab(5) for the +# new supported syntax. # # NOTE: Do not list your root (/) partition here, it must be set up # beforehand by the initramfs (/etc/mkinitcpio.conf). - -# NAME SOURCE DEVICE PASSWORD OPTIONS -#home /dev/hda4 mypassword -#data1 /dev/hda3 "my \"password\"" -#data2 /dev/hda5 /etc/cryptfs.key -#swap /dev/hdx4 SWAP -c aes-cbc-essiv:sha256 -s 256 -#vol /dev/hdb7 ASK +# <name> <device> <password> <options> +# home /dev/hda4 /etc/mypassword1 +# data1 /dev/hda3 /etc/mypassword2 +# data2 /dev/hda5 /etc/cryptfs.key +# swap /dev/hdx4 /dev/urandom swap,cipher=aes-cbc-essiv:sha256,size=256 +# vol /dev/hdb7 none diff --git a/libre/h-client/PKGBUILD b/libre/h-client/PKGBUILD index e77a2437e..821517397 100644 --- a/libre/h-client/PKGBUILD +++ b/libre/h-client/PKGBUILD @@ -1,10 +1,10 @@ # Maintainer: Michał Masłowski <mtjm@mtjm.eu> pkgname=h-client -_pkgver=0.0a0.dev-r107 +_pkgver=0.0a0.dev-r118 pkgver=${_pkgver/-/.} pkgrel=1 -pkgdesc="A client for an h-source server (such as http://www.h-node.com)" +pkgdesc="A client for an h-source server (such as http://www.h-node.org/)" arch=('any') url="https://savannah.nongnu.org/projects/h-client/" license=('GPL3') @@ -12,8 +12,9 @@ depends=('python2' 'python2-distribute' 'python-pycurl' 'pygtk') options=(!emptydirs) # Official source is in SVN, this is made by "python2 setup.py sdist" # on a machine having Subversion 1.6.x (e.g. on Trisquel 4.0). -source=("https://mtjm.eu/releases/hclient-${_pkgver}.tar.gz") -sha512sums=('d820871fcf3f92e6e31aa02273ae413bf066524eaf245f1d4cf7dc8b0ba5799eb07bf86dd28861c8878c73147bbcae563668cb3a6fa9c3382c751e6717d85f0c') +source=("https://mtjm.eu/releases/hclient-${_pkgver}.tar.gz"{,.sig}) +sha512sums=('af962c67b363435cfa74f7c420760b0254ba3e7c1e6611d5ff276e6595e30dadf1b5d588cd2469647efdbb0099f70a027b9f65d8aeefc70ea712c9ef5d7cbace' + '7d4746297c4a0bd328b1e57f596e827b4a12d2f703d074f7e87ea0c9e3f747c2cfd48da971e81fdaf27939d463b359fac4638820f08486ef28502e769168692d') build() { cd "$srcdir/hclient-${_pkgver}" diff --git a/libre/initscripts/PKGBUILD b/libre/initscripts/PKGBUILD index cc509fdd3..a209713b3 100644 --- a/libre/initscripts/PKGBUILD +++ b/libre/initscripts/PKGBUILD @@ -1,39 +1,30 @@ -# $Id: PKGBUILD 160065 2012-05-29 18:46:25Z tomegun $ +# $Id: PKGBUILD 164178 2012-07-26 23:40:45Z tomegun $ # Maintainer: Tom Gundersen <teg@jklm.no> # Contributor: Thomas Bächler <thomas@archlinux.org> # Contributor: Aaron Griffin <aaron@archlinux.org> # Maintainer (Parabola): Nicolas Reynolds <fauno@kiwwwi.com.ar> pkgname=initscripts -pkgver=2012.07.14 +pkgver=2012.07.29 pkgrel=1 pkgdesc="System initialization/bootup scripts (Parabola branding)" arch=('any') url="https://parabolagnulinux.org" license=('GPL2') groups=('base') -backup=(etc/inittab etc/rc.conf etc/rc.local etc/rc.local.shutdown etc/conf.d/wireless) +backup=(etc/inittab etc/rc.conf etc/rc.local etc/rc.local.shutdown) depends=('glibc' 'bash' 'coreutils' 'systemd-tools' 'iproute2' 'ncurses' 'findutils' 'sysvinit') -optdepends=('bridge-utils: Network bridging support' - 'dhcpcd: DHCP network configuration' - 'net-tools: legacy network support' - 'wireless_tools: Wireless networking') +optdepends=('dhcpcd: DHCP network configuration' + 'bridge-utils: Legacy network bridging support' + 'net-tools: Legacy network support' + 'wireless_tools: Legacy wireless networking') makedepends=(asciidoc) install=initscripts.install -source=("https://repo.parabolagnulinux.org/other/${pkgname}-${pkgver}.tar.xz" - 0001-remove-run-nologin-before-leaving-rc.multi.patch - 'wireless.conf.d') - -build() { - cd ${srcdir}/${pkgname}-${pkgver} -# patch -Np1 <"$srcdir/0001-remove-run-nologin-before-leaving-rc.multi.patch" -} +source=("https://repo.parabolagnulinux.org/other/${pkgname}-${pkgver}.tar.xz"{,.sig}) package() { cd ${srcdir}/${pkgname}-${pkgver} make DESTDIR=${pkgdir} install - install -D -m644 ${srcdir}/wireless.conf.d ${pkgdir}/etc/conf.d/wireless } -md5sums=('15e2f373be03b25b0033fd4fb4820d30' - 'ba32b9d723c20b38487669fb3c00d3d5' - '027576534885b8d5dded9be546057b12') +md5sums=('0fc663f1ad8e7512f5907d498e09be21' + '372f08fcb40e31c0e88a9715354e3b19') diff --git a/libre/liferea-libre/PKGBUILD b/libre/liferea-libre/PKGBUILD index 35529f458..706b2d0d7 100644 --- a/libre/liferea-libre/PKGBUILD +++ b/libre/liferea-libre/PKGBUILD @@ -1,11 +1,11 @@ # $Id: PKGBUILD 161863 2012-06-15 23:14:52Z eric $ # Maintainer: Eric Bélanger <eric@archlinux.org> # Contributor (Parabola): bitlord -# Contributor (Parabola): André Silva <andre.paulista@adinet.com.uy> +# Contributor (Parabola): André Silva <emulatorman@lavabit.com> _pkgname=liferea pkgname=liferea-libre -pkgver=1.8.6 +pkgver=1.8.7 pkgrel=1 pkgdesc="A desktop news aggregator for online news feeds and weblogs" arch=('i686' 'x86_64') @@ -20,7 +20,7 @@ options=('!libtool' '!emptydirs') install=liferea.install source=(http://downloads.sourceforge.net/sourceforge/${_pkgname}/${_pkgname}-${pkgver}.tar.gz remove-non-free-suggestions.patch) -sha1sums=('c469d87da4b0512270376aa360c7a955d02153c3' +sha1sums=('3cdadae3b3bcec2da048257b72a5d7c11a9621f1' '0d68c567c3d37932a49709c58c37c3f138fd19cb') build() { diff --git a/libre/linux-libre/3.4.4-fix-backlight-regression.patch b/libre/linux-libre/3.4.4-fix-backlight-regression.patch deleted file mode 100644 index a0cf0b1db..000000000 --- a/libre/linux-libre/3.4.4-fix-backlight-regression.patch +++ /dev/null @@ -1,38 +0,0 @@ -Subject: Still use ACPI backlight control if _DOS doesn't exist - -This is a regression introduced by commit -ea9f8856bd6d4ed45885b06a338f7362cd6c60e5 - -https://bugzilla.kernel.org/show_bug.cgi?id=43168 - -Some platforms don't have _DOS control method, but the ACPI -backlight still works. -We do not want to lose the backlight control ability on these platforms. - -CC : Igor Murzov <intergalactic.anonymous@gmail.com> -Signed-off-by: Zhang Rui <rui.zhang@intel.com> ---- - drivers/acpi/video.c | 10 ++++++++-- - 1 file changed, 8 insertions(+), 2 deletions(-) - -Index: rtd3/drivers/acpi/video.c -=================================================================== ---- rtd3.orig/drivers/acpi/video.c -+++ rtd3/drivers/acpi/video.c -@@ -565,8 +565,14 @@ acpi_video_bus_DOS(struct acpi_video_bus - video->dos_setting = arg0.integer.value; - status = acpi_evaluate_object(video->device->handle, "_DOS", - &args, NULL); -- if (ACPI_FAILURE(status)) -- return -EIO; -+ if (ACPI_FAILURE(status)) { -+ /* -+ * some platforms don't have _DOS, but the ACPI -+ * backlight control still works -+ */ -+ ACPI_DEBUG_PRINT((ACPI_DB_INFO, "No _DOS\n")); -+ return 0; -+ } - - return 0; - } diff --git a/libre/linux-libre/PKGBUILD b/libre/linux-libre/PKGBUILD index 759a5fea1..0ef52901a 100644 --- a/libre/linux-libre/PKGBUILD +++ b/libre/linux-libre/PKGBUILD @@ -11,18 +11,19 @@ pkgbase=linux-libre pkgname=('linux-libre' 'linux-libre-headers' 'linux-libre-docs') # Build stock -LIBRE kernel # pkgname=linux-custom # Build kernel with a different name _kernelname=-LIBRE -_basekernel=3.4 -_sublevel=6 -pkgver=${_basekernel}.${_sublevel} +_basekernel=3.5 +#_sublevel=6 +#pkgver=${_basekernel}.${_sublevel} +pkgver=${_basekernel} _lxopkgver=${_basekernel}.6 # nearly always the same as pkgver -pkgrel=1 +pkgrel=2 arch=('i686' 'x86_64' 'mips64el') url="http://linux-libre.fsfla.org/" license=('GPL2') makedepends=('xmlto' 'docbook-xsl') options=('!strip') source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_basekernel}-gnu/linux-libre-${_basekernel}-gnu.tar.xz" - "http://linux-libre.fsfla.org/pub/linux-libre/releases/${pkgver}-gnu/patch-${_basekernel}-gnu-${pkgver}-gnu.xz" + #"http://linux-libre.fsfla.org/pub/linux-libre/releases/${pkgver}-gnu/patch-${_basekernel}-gnu-${pkgver}-gnu.xz" # the main kernel config files 'config.i686' 'config.x86_64' # standard config files for mkinitcpio ramdisk @@ -31,20 +32,17 @@ source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_basekernel}-gn 'Kbuild.platforms' 'boot-logo.patch' 'change-default-console-loglevel.patch' - 'i915-fix-ghost-tv-output.patch' - '3.4.4-fix-backlight-regression.patch' + 'avmfritz-only-few-bytes-are-transfered-on-a-conn.patch' "http://www.linux-libre.fsfla.org/pub/linux-libre/lemote/gnewsense/pool/linux-patches-${_lxopkgver}-gnu_0loongsonlibre_mipsel.tar.bz2") -md5sums=('a5e128ca059cceb8b69148b41ff4ac6f' - 'fe16da96e942fcfc195fc53ff93e3864' - '669c3f9d5c6a2109bad8e511287826c3' - '454231e14419e56a5281eb7bc6fde83e' +md5sums=('2407fc9563a74acaf38aa0c06516eb1c' + '7f0b7950bc9d2a20cdb6b850e6e4eb5a' + 'a796ea383eb136cb38fab0a52b6d2f52' 'e49ac236dfeef709f91a3d993ea7b62c' '2967cecc3af9f954ccc822fd63dca6ff' '8267264d9a8966e57fdacd1fa1fc65c4' '04b21c79df0a952c22d681dd4f4562df' '9d3c56a4b999c8bfbd4018089a62f662' - '263725f20c0b9eb9c353040792d644e5' - '80a46681386bb87813989faeb92bdd9a' + '2afcc001cc178be72e3a19d95f4bd5eb' 'a9338d11a2b23fe0cd43cc4fee5aed42') if [ "$CARCH" != "mips64el" ]; then # Don't use the Loongson-specific patches on non-mips64el arches. @@ -62,24 +60,16 @@ build() { # Add freedo as boot logo patch -Np1 -i "${srcdir}/boot-logo.patch" - # Some chips detect a ghost TV output - # mailing list discussion: http://lists.freedesktop.org/archives/intel-gfx/2011-April/010371.html - # Arch Linux bug report: FS#19234 - # - # It is unclear why this patch wasn't merged upstream, it was accepted, - # then dropped because the reasoning was unclear. However, it is clearly - # needed. - patch -Np1 -i "${srcdir}/i915-fix-ghost-tv-output.patch" - - # Fix backlight control on some laptops: - # https://bugzilla.kernel.org/show_bug.cgi?id=43168 - patch -Np1 -i "${srcdir}/3.4.4-fix-backlight-regression.patch" # set DEFAULT_CONSOLE_LOGLEVEL to 4 (same value as the 'quiet' kernel param) # remove this when a Kconfig knob is made available by upstream # (relevant patch sent upstream: https://lkml.org/lkml/2011/7/26/227) patch -Np1 -i "${srcdir}/change-default-console-loglevel.patch" + # fix avmfritz capi20 functionallity + # https://bugzilla.kernel.org/show_bug.cgi?id=45271 + patch -Np1 -i "${srcdir}/avmfritz-only-few-bytes-are-transfered-on-a-conn.patch" + if [ "$CARCH" == "mips64el" ]; then sed -i "s|^EXTRAVERSION.*|EXTRAVERSION =-libre|" Makefile sed -r "s|^( SUBLEVEL = ).*|\1$_sublevel|" \ @@ -286,7 +276,7 @@ package_linux-libre-headers() { cp drivers/media/video/*.h "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/video/" - for i in bt8xx cpia2 cx25840 cx88 em28xx et61x251 pwc saa7134 sn9c102; do + for i in bt8xx cpia2 cx25840 cx88 em28xx pwc saa7134 sn9c102; do mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/video/${i}" cp -a drivers/media/video/${i}/*.h "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/video/${i}" done diff --git a/libre/linux-libre/avmfritz-only-few-bytes-are-transfered-on-a-conn.patch b/libre/linux-libre/avmfritz-only-few-bytes-are-transfered-on-a-conn.patch new file mode 100644 index 000000000..f8bb193c6 --- /dev/null +++ b/libre/linux-libre/avmfritz-only-few-bytes-are-transfered-on-a-conn.patch @@ -0,0 +1,48 @@ +From 285c08154eede7dc4387bfc925967c884594dcc9 Mon Sep 17 00:00:00 2001 +From: Karsten Keil <keil@b1-systems.de> +Date: Sat, 28 Jul 2012 20:10:04 +0200 +Subject: [PATCH] mISDN: Bugfix only few bytes are transfered on a connection + +The test for the fillempty condition was wrong in one place. +Changed the variable to the right boolean type. + +Signed-off-by: Karsten Keil <keil@b1-systems.de> +--- + drivers/isdn/hardware/mISDN/avmfritz.c | 7 ++++--- + 1 files changed, 4 insertions(+), 3 deletions(-) + +diff --git a/drivers/isdn/hardware/mISDN/avmfritz.c b/drivers/isdn/hardware/mISDN/avmfritz.c +index c08fc60..fa6ca47 100644 +--- a/drivers/isdn/hardware/mISDN/avmfritz.c ++++ b/drivers/isdn/hardware/mISDN/avmfritz.c +@@ -449,7 +449,8 @@ hdlc_fill_fifo(struct bchannel *bch) + { + struct fritzcard *fc = bch->hw; + struct hdlc_hw *hdlc; +- int count, fs, cnt = 0, idx, fillempty = 0; ++ int count, fs, cnt = 0, idx; ++ bool fillempty = false; + u8 *p; + u32 *ptr, val, addr; + +@@ -462,7 +463,7 @@ hdlc_fill_fifo(struct bchannel *bch) + return; + count = fs; + p = bch->fill; +- fillempty = 1; ++ fillempty = true; + } else { + count = bch->tx_skb->len - bch->tx_idx; + if (count <= 0) +@@ -477,7 +478,7 @@ hdlc_fill_fifo(struct bchannel *bch) + hdlc->ctrl.sr.cmd |= HDLC_CMD_XME; + } + ptr = (u32 *)p; +- if (fillempty) { ++ if (!fillempty) { + pr_debug("%s.B%d: %d/%d/%d", fc->name, bch->nr, count, + bch->tx_idx, bch->tx_skb->len); + bch->tx_idx += count; +-- +1.7.7 + diff --git a/libre/linux-libre/config.i686 b/libre/linux-libre/config.i686 index a6e1a6310..a66ebeaa7 100644 --- a/libre/linux-libre/config.i686 +++ b/libre/linux-libre/config.i686 @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/i386 3.4.0-1 Kernel Configuration +# Linux/i386 3.5.0-2 Kernel Configuration # # CONFIG_64BIT is not set CONFIG_X86_32=y @@ -9,10 +9,6 @@ CONFIG_X86=y CONFIG_INSTRUCTION_DECODER=y CONFIG_OUTPUT_FORMAT="elf32-i386" CONFIG_ARCH_DEFCONFIG="arch/x86/configs/i386_defconfig" -CONFIG_GENERIC_CMOS_UPDATE=y -CONFIG_CLOCKSOURCE_WATCHDOG=y -CONFIG_GENERIC_CLOCKEVENTS=y -CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y CONFIG_LOCKDEP_SUPPORT=y CONFIG_STACKTRACE_SUPPORT=y CONFIG_HAVE_LATENCYTOP_SUPPORT=y @@ -26,9 +22,7 @@ CONFIG_GENERIC_GPIO=y CONFIG_ARCH_MAY_HAVE_PC_FDC=y # CONFIG_RWSEM_GENERIC_SPINLOCK is not set CONFIG_RWSEM_XCHGADD_ALGORITHM=y -CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y CONFIG_GENERIC_CALIBRATE_DELAY=y -# CONFIG_GENERIC_TIME_VSYSCALL is not set CONFIG_ARCH_HAS_CPU_RELAX=y CONFIG_ARCH_HAS_DEFAULT_IDLE=y CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y @@ -46,11 +40,12 @@ CONFIG_HAVE_INTEL_TXT=y CONFIG_X86_32_SMP=y CONFIG_X86_HT=y CONFIG_ARCH_HWEIGHT_CFLAGS="-fcall-saved-ecx -fcall-saved-edx" -CONFIG_KTIME_SCALAR=y CONFIG_ARCH_CPU_PROBE_RELEASE=y +CONFIG_ARCH_SUPPORTS_UPROBES=y CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" CONFIG_HAVE_IRQ_WORK=y CONFIG_IRQ_WORK=y +CONFIG_BUILDTIME_EXTABLE_SORT=y # # General setup @@ -101,6 +96,20 @@ CONFIG_IRQ_DOMAIN=y # CONFIG_IRQ_DOMAIN_DEBUG is not set CONFIG_IRQ_FORCED_THREADING=y CONFIG_SPARSE_IRQ=y +CONFIG_CLOCKSOURCE_WATCHDOG=y +CONFIG_KTIME_SCALAR=y +CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_GENERIC_CLOCKEVENTS_BUILD=y +CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y +CONFIG_GENERIC_CLOCKEVENTS_MIN_ADJUST=y +CONFIG_GENERIC_CMOS_UPDATE=y + +# +# Timers subsystem +# +CONFIG_TICK_ONESHOT=y +CONFIG_NO_HZ=y +CONFIG_HIGH_RES_TIMERS=y # # RCU Subsystem @@ -108,6 +117,7 @@ CONFIG_SPARSE_IRQ=y CONFIG_TREE_PREEMPT_RCU=y CONFIG_PREEMPT_RCU=y CONFIG_RCU_FANOUT=32 +CONFIG_RCU_FANOUT_LEAF=16 # CONFIG_RCU_FANOUT_EXACT is not set CONFIG_RCU_FAST_NO_HZ=y # CONFIG_TREE_RCU_TRACE is not set @@ -139,7 +149,6 @@ CONFIG_BLK_CGROUP=y CONFIG_NAMESPACES=y CONFIG_UTS_NS=y CONFIG_IPC_NS=y -CONFIG_USER_NS=y CONFIG_PID_NS=y CONFIG_NET_NS=y CONFIG_SCHED_AUTOGROUP=y @@ -182,7 +191,6 @@ CONFIG_HAVE_PERF_EVENTS=y # Kernel Performance Events And Counters # CONFIG_PERF_EVENTS=y -CONFIG_PERF_COUNTERS=y # CONFIG_DEBUG_PERF_USE_VMALLOC is not set CONFIG_VM_EVENT_COUNTERS=y CONFIG_PCI_QUIRKS=y @@ -196,9 +204,11 @@ CONFIG_OPROFILE=m # CONFIG_OPROFILE_EVENT_MULTIPLEX is not set CONFIG_HAVE_OPROFILE=y CONFIG_OPROFILE_NMI_TIMER=y -# CONFIG_KPROBES is not set +CONFIG_KPROBES=y CONFIG_JUMP_LABEL=y +CONFIG_UPROBES=y CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y +CONFIG_KRETPROBES=y CONFIG_USER_RETURN_NOTIFIER=y CONFIG_HAVE_IOREMAP_PROT=y CONFIG_HAVE_KPROBES=y @@ -206,7 +216,9 @@ CONFIG_HAVE_KRETPROBES=y CONFIG_HAVE_OPTPROBES=y CONFIG_HAVE_ARCH_TRACEHOOK=y CONFIG_HAVE_DMA_ATTRS=y +CONFIG_HAVE_DMA_CONTIGUOUS=y CONFIG_USE_GENERIC_SMP_HELPERS=y +CONFIG_GENERIC_SMP_IDLE_THREAD=y CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y CONFIG_HAVE_DMA_API_DEBUG=y CONFIG_HAVE_HW_BREAKPOINT=y @@ -218,6 +230,8 @@ CONFIG_ARCH_HAVE_NMI_SAFE_CMPXCHG=y CONFIG_HAVE_ALIGNED_STRUCT_PAGE=y CONFIG_HAVE_CMPXCHG_LOCAL=y CONFIG_HAVE_CMPXCHG_DOUBLE=y +CONFIG_HAVE_ARCH_SECCOMP_FILTER=y +CONFIG_SECCOMP_FILTER=y # # GCOV-based kernel profiling @@ -312,11 +326,6 @@ CONFIG_FREEZER=y # Processor type and features # CONFIG_ZONE_DMA=y -CONFIG_TICK_ONESHOT=y -CONFIG_NO_HZ=y -CONFIG_HIGH_RES_TIMERS=y -CONFIG_GENERIC_CLOCKEVENTS_BUILD=y -CONFIG_GENERIC_CLOCKEVENTS_MIN_ADJUST=y CONFIG_SMP=y CONFIG_X86_MPPARSE=y # CONFIG_X86_BIGSMP is not set @@ -451,7 +460,9 @@ CONFIG_HWPOISON_INJECT=m CONFIG_TRANSPARENT_HUGEPAGE=y CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y # CONFIG_TRANSPARENT_HUGEPAGE_MADVISE is not set +CONFIG_CROSS_MEMORY_ATTACH=y CONFIG_CLEANCACHE=y +CONFIG_FRONTSWAP=y # CONFIG_HIGHPTE is not set CONFIG_X86_CHECK_BIOS_CORRUPTION=y CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK=y @@ -496,6 +507,10 @@ CONFIG_HIBERNATION=y CONFIG_PM_STD_PARTITION="" CONFIG_PM_SLEEP=y CONFIG_PM_SLEEP_SMP=y +CONFIG_PM_AUTOSLEEP=y +CONFIG_PM_WAKELOCKS=y +CONFIG_PM_WAKELOCKS_LIMIT=100 +CONFIG_PM_WAKELOCKS_GC=y CONFIG_PM_RUNTIME=y CONFIG_PM=y CONFIG_PM_DEBUG=y @@ -632,7 +647,6 @@ CONFIG_PCI_LABEL=y CONFIG_ISA_DMA_API=y CONFIG_ISA=y # CONFIG_EISA is not set -# CONFIG_MCA is not set # CONFIG_SCx200 is not set CONFIG_OLPC=y CONFIG_OLPC_XO1_PM=y @@ -678,6 +692,7 @@ CONFIG_RAPIDIO=y CONFIG_RAPIDIO_TSI721=y CONFIG_RAPIDIO_DISC_TIMEOUT=30 # CONFIG_RAPIDIO_ENABLE_RX_TX_PORTS is not set +CONFIG_RAPIDIO_DMA_ENGINE=y CONFIG_RAPIDIO_DEBUG=y CONFIG_RAPIDIO_TSI57X=y CONFIG_RAPIDIO_CPS_XX=y @@ -705,6 +720,7 @@ CONFIG_PACKET=y CONFIG_UNIX=y CONFIG_UNIX_DIAG=m CONFIG_XFRM=y +CONFIG_XFRM_ALGO=m CONFIG_XFRM_USER=m # CONFIG_XFRM_SUB_POLICY is not set # CONFIG_XFRM_MIGRATE is not set @@ -843,6 +859,7 @@ CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=m CONFIG_NETFILTER_XT_TARGET_CT=m CONFIG_NETFILTER_XT_TARGET_DSCP=m CONFIG_NETFILTER_XT_TARGET_HL=m +CONFIG_NETFILTER_XT_TARGET_HMARK=m CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m CONFIG_NETFILTER_XT_TARGET_LED=m CONFIG_NETFILTER_XT_TARGET_LOG=m @@ -1003,7 +1020,6 @@ CONFIG_IP_NF_ARP_MANGLE=m # CONFIG_NF_DEFRAG_IPV6=m CONFIG_NF_CONNTRACK_IPV6=m -CONFIG_IP6_NF_QUEUE=m CONFIG_IP6_NF_IPTABLES=m CONFIG_IP6_NF_MATCH_AH=m CONFIG_IP6_NF_MATCH_EUI64=m @@ -1057,7 +1073,9 @@ CONFIG_IP_DCCP_TFRC_LIB=y # DCCP Kernel Hacking # # CONFIG_IP_DCCP_DEBUG is not set +CONFIG_NET_DCCPPROBE=m CONFIG_IP_SCTP=m +CONFIG_NET_SCTPPROBE=m # CONFIG_SCTP_DBG_MSG is not set # CONFIG_SCTP_DBG_OBJCNT is not set # CONFIG_SCTP_HMAC_NONE is not set @@ -1099,11 +1117,11 @@ CONFIG_IPDDP_ENCAP=y CONFIG_IPDDP_DECAP=y # CONFIG_X25 is not set # CONFIG_LAPB is not set -# CONFIG_ECONET is not set # CONFIG_WAN_ROUTER is not set CONFIG_PHONET=m CONFIG_IEEE802154=m CONFIG_IEEE802154_6LOWPAN=m +CONFIG_MAC802154=m CONFIG_NET_SCHED=y # @@ -1127,6 +1145,8 @@ CONFIG_NET_SCH_DRR=m CONFIG_NET_SCH_MQPRIO=m CONFIG_NET_SCH_CHOKE=m CONFIG_NET_SCH_QFQ=m +CONFIG_NET_SCH_CODEL=m +CONFIG_NET_SCH_FQ_CODEL=m CONFIG_NET_SCH_INGRESS=m CONFIG_NET_SCH_PLUG=m @@ -1162,6 +1182,7 @@ CONFIG_NET_SCH_FIFO=y # CONFIG_DCB is not set CONFIG_DNS_RESOLVER=y CONFIG_BATMAN_ADV=m +CONFIG_BATMAN_ADV_BLA=y # CONFIG_BATMAN_ADV_DEBUG is not set CONFIG_OPENVSWITCH=m CONFIG_RPS=y @@ -1174,6 +1195,7 @@ CONFIG_BQL=y # Network testing # CONFIG_NET_PKTGEN=m +CONFIG_NET_TCPPROBE=m CONFIG_NET_DROP_MONITOR=y CONFIG_HAMRADIO=y @@ -1339,6 +1361,8 @@ CONFIG_CEPH_LIB=m # CONFIG_CEPH_LIB_USE_DNS_RESOLVER is not set CONFIG_NFC=m CONFIG_NFC_NCI=m +CONFIG_NFC_HCI=m +# CONFIG_NFC_SHDLC is not set # CONFIG_NFC_LLCP is not set # @@ -1370,6 +1394,7 @@ CONFIG_EXTRA_FIRMWARE="" CONFIG_REGMAP=y CONFIG_REGMAP_I2C=m CONFIG_DMA_SHARED_BUFFER=y +# CONFIG_CMA is not set CONFIG_CONNECTOR=y CONFIG_PROC_EVENTS=y CONFIG_MTD=m @@ -1500,7 +1525,6 @@ CONFIG_MTD_UBI=m CONFIG_MTD_UBI_WL_THRESHOLD=4096 CONFIG_MTD_UBI_BEB_RESERVE=1 # CONFIG_MTD_UBI_GLUEBI is not set -# CONFIG_MTD_UBI_DEBUG is not set CONFIG_OF=y # @@ -1512,7 +1536,6 @@ CONFIG_OF_PROMTREE=y CONFIG_OF_ADDRESS=y CONFIG_OF_IRQ=y CONFIG_OF_DEVICE=y -CONFIG_OF_GPIO=y CONFIG_OF_I2C=m CONFIG_OF_NET=y CONFIG_OF_MDIO=m @@ -1599,7 +1622,8 @@ CONFIG_SENSORS_APDS990X=m CONFIG_HMC6352=m CONFIG_DS1682=m CONFIG_VMWARE_BALLOON=m -CONFIG_BMP085=m +CONFIG_BMP085=y +CONFIG_BMP085_I2C=m # CONFIG_PCH_PHUB is not set CONFIG_USB_SWITCH_FSA9480=m CONFIG_C2PORT=m @@ -1629,6 +1653,7 @@ CONFIG_SENSORS_LIS3_I2C=m # Altera FPGA firmware download module # CONFIG_ALTERA_STAPL=m +CONFIG_INTEL_MEI=m CONFIG_HAVE_IDE=y # CONFIG_IDE is not set @@ -1764,6 +1789,7 @@ CONFIG_SCSI_PAS16=m CONFIG_SCSI_QLOGIC_FAS=m CONFIG_SCSI_QLOGIC_1280=m CONFIG_SCSI_QLA_FC=m +CONFIG_TCM_QLA2XXX=m CONFIG_SCSI_QLA_ISCSI=m CONFIG_SCSI_LPFC=m # CONFIG_SCSI_LPFC_DEBUG_FS is not set @@ -1936,6 +1962,7 @@ CONFIG_TCM_PSCSI=m CONFIG_LOOPBACK_TARGET=m CONFIG_TCM_FC=m CONFIG_ISCSI_TARGET=m +CONFIG_SBP_TARGET=m CONFIG_FUSION=y CONFIG_FUSION_SPI=m CONFIG_FUSION_FC=m @@ -1972,10 +1999,12 @@ CONFIG_EQUALIZER=m CONFIG_MII=m CONFIG_IEEE802154_DRIVERS=m CONFIG_IEEE802154_FAKEHARD=m +CONFIG_IEEE802154_FAKELB=m CONFIG_IFB=m CONFIG_NET_TEAM=m CONFIG_NET_TEAM_MODE_ROUNDROBIN=m CONFIG_NET_TEAM_MODE_ACTIVEBACKUP=m +CONFIG_NET_TEAM_MODE_LOADBALANCE=m CONFIG_MACVLAN=m CONFIG_MACVTAP=m CONFIG_NETCONSOLE=m @@ -2118,10 +2147,13 @@ CONFIG_E1000=m CONFIG_E1000E=m CONFIG_IGB=m CONFIG_IGB_DCA=y +CONFIG_IGB_PTP=y CONFIG_IGBVF=m CONFIG_IXGB=m CONFIG_IXGBE=m +CONFIG_IXGBE_HWMON=y CONFIG_IXGBE_DCA=y +CONFIG_IXGBE_PTP=y CONFIG_IXGBEVF=m CONFIG_NET_VENDOR_I825XX=y CONFIG_ELPLUS=m @@ -2211,8 +2243,8 @@ CONFIG_EPIC100=m CONFIG_SMSC9420=m CONFIG_NET_VENDOR_STMICRO=y CONFIG_STMMAC_ETH=m -CONFIG_STMMAC_PLATFORM=m -CONFIG_STMMAC_PCI=m +# CONFIG_STMMAC_PLATFORM is not set +CONFIG_STMMAC_PCI=y # CONFIG_STMMAC_DEBUG_FS is not set # CONFIG_STMMAC_DA is not set CONFIG_STMMAC_RING=y @@ -2230,6 +2262,12 @@ CONFIG_NET_VENDOR_VIA=y CONFIG_VIA_RHINE=m # CONFIG_VIA_RHINE_MMIO is not set CONFIG_VIA_VELOCITY=m +CONFIG_NET_VENDOR_WIZNET=y +CONFIG_WIZNET_W5100=m +CONFIG_WIZNET_W5300=m +# CONFIG_WIZNET_BUS_DIRECT is not set +# CONFIG_WIZNET_BUS_INDIRECT is not set +CONFIG_WIZNET_BUS_ANY=y CONFIG_NET_VENDOR_XIRCOM=y CONFIG_PCMCIA_XIRC2PS=m # CONFIG_FDDI is not set @@ -2256,6 +2294,8 @@ CONFIG_STE10XP=m CONFIG_LSI_ET1011C_PHY=m CONFIG_MICREL_PHY=m # CONFIG_MDIO_BITBANG is not set +CONFIG_MDIO_BUS_MUX=m +CONFIG_MDIO_BUS_MUX_GPIO=m CONFIG_PLIP=m CONFIG_PPP=m CONFIG_PPP_BSDCOMP=m @@ -2274,7 +2314,6 @@ CONFIG_SLHC=m # CONFIG_SLIP_COMPRESSED is not set # CONFIG_SLIP_SMART is not set # CONFIG_SLIP_MODE_SLIP6 is not set -# CONFIG_TR is not set # # USB Network Adapters @@ -2389,6 +2428,7 @@ CONFIG_BRCMUTIL=m CONFIG_BRCMSMAC=m CONFIG_BRCMFMAC=m CONFIG_BRCMFMAC_SDIO=y +# CONFIG_BRCMFMAC_SDIO_OOB is not set CONFIG_BRCMFMAC_USB=y # CONFIG_BRCMDBG is not set CONFIG_HOSTAP=m @@ -2470,17 +2510,19 @@ CONFIG_RTL8192CU=m CONFIG_RTLWIFI=m # CONFIG_RTLWIFI_DEBUG is not set CONFIG_RTL8192C_COMMON=m +CONFIG_WL_TI=y CONFIG_WL1251=m CONFIG_WL1251_SDIO=m -CONFIG_WL12XX_MENU=m CONFIG_WL12XX=m -CONFIG_WL12XX_SDIO=m +CONFIG_WLCORE=m +CONFIG_WLCORE_SDIO=m CONFIG_WL12XX_PLATFORM_DATA=y CONFIG_ZD1211RW=m # CONFIG_ZD1211RW_DEBUG is not set CONFIG_MWIFIEX=m CONFIG_MWIFIEX_SDIO=m CONFIG_MWIFIEX_PCIE=m +CONFIG_MWIFIEX_USB=m # # WiMAX Wireless Broadband devices @@ -2647,6 +2689,7 @@ CONFIG_INPUT=y CONFIG_INPUT_FF_MEMLESS=m CONFIG_INPUT_POLLDEV=m CONFIG_INPUT_SPARSEKMAP=m +CONFIG_INPUT_MATRIXKMAP=m # # Userland interfaces @@ -2675,6 +2718,7 @@ CONFIG_KEYBOARD_TCA6416=m CONFIG_KEYBOARD_TCA8418=m CONFIG_KEYBOARD_MATRIX=m # CONFIG_KEYBOARD_LM8323 is not set +CONFIG_KEYBOARD_LM8333=m # CONFIG_KEYBOARD_MAX7359 is not set CONFIG_KEYBOARD_MCS=m CONFIG_KEYBOARD_MPR121=m @@ -2762,6 +2806,7 @@ CONFIG_TOUCHSCREEN_ILI210X=m CONFIG_TOUCHSCREEN_GUNZE=m CONFIG_TOUCHSCREEN_ELO=m CONFIG_TOUCHSCREEN_WACOM_W8001=m +CONFIG_TOUCHSCREEN_WACOM_I2C=m CONFIG_TOUCHSCREEN_MAX11801=m CONFIG_TOUCHSCREEN_MCS5000=m CONFIG_TOUCHSCREEN_MTOUCH=m @@ -2778,6 +2823,7 @@ CONFIG_TOUCHSCREEN_WM9705=y CONFIG_TOUCHSCREEN_WM9712=y CONFIG_TOUCHSCREEN_WM9713=y CONFIG_TOUCHSCREEN_USB_COMPOSITE=m +CONFIG_TOUCHSCREEN_MC13783=m CONFIG_TOUCHSCREEN_USB_EGALAX=y CONFIG_TOUCHSCREEN_USB_PANJIT=y CONFIG_TOUCHSCREEN_USB_3M=y @@ -2802,11 +2848,11 @@ CONFIG_TOUCHSCREEN_TSC2007=m CONFIG_TOUCHSCREEN_ST1232=m CONFIG_TOUCHSCREEN_TPS6507X=m CONFIG_INPUT_MISC=y -CONFIG_INPUT_AB8500_PONKEY=m CONFIG_INPUT_AD714X=m CONFIG_INPUT_AD714X_I2C=m CONFIG_INPUT_BMA150=m CONFIG_INPUT_PCSPKR=m +CONFIG_INPUT_MC13783_PWRBUTTON=m CONFIG_INPUT_MMA8450=m CONFIG_INPUT_MPU3050=m CONFIG_INPUT_APANEL=m @@ -2953,7 +2999,6 @@ CONFIG_TCG_ATMEL=m CONFIG_TCG_INFINEON=m CONFIG_TELCLOCK=m CONFIG_DEVPORT=y -CONFIG_RAMOOPS=m CONFIG_I2C=m CONFIG_I2C_BOARDINFO=y CONFIG_I2C_COMPAT=y @@ -3054,6 +3099,7 @@ CONFIG_DP83640_PHY=m CONFIG_PTP_1588_CLOCK_PCH=m CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y CONFIG_GPIOLIB=y +CONFIG_OF_GPIO=y # CONFIG_DEBUG_GPIO is not set CONFIG_GPIO_SYSFS=y @@ -3063,6 +3109,7 @@ CONFIG_GPIO_SYSFS=y # CONFIG_GPIO_GENERIC_PLATFORM is not set # CONFIG_GPIO_IT8761E is not set CONFIG_GPIO_SCH=m +CONFIG_GPIO_ICH=m # CONFIG_GPIO_VX855 is not set # @@ -3217,6 +3264,7 @@ CONFIG_SENSORS_SCH5636=m CONFIG_SENSORS_ADS1015=m CONFIG_SENSORS_ADS7828=m CONFIG_SENSORS_AMC6821=m +CONFIG_SENSORS_INA2XX=m CONFIG_SENSORS_THMC50=m CONFIG_SENSORS_TMP102=m CONFIG_SENSORS_TMP401=m @@ -3236,6 +3284,7 @@ CONFIG_SENSORS_W83L786NG=m CONFIG_SENSORS_W83627HF=m CONFIG_SENSORS_W83627EHF=m CONFIG_SENSORS_APPLESMC=m +CONFIG_SENSORS_MC13783_ADC=m # # ACPI drivers @@ -3266,6 +3315,7 @@ CONFIG_IB700_WDT=m CONFIG_IBMASR=m CONFIG_WAFER_WDT=m CONFIG_I6300ESB_WDT=m +CONFIG_IE6XX_WDT=m CONFIG_ITCO_WDT=m CONFIG_ITCO_VENDOR_SUPPORT=y CONFIG_IT8712F_WDT=m @@ -3344,21 +3394,23 @@ CONFIG_MFD_SM501=m CONFIG_MFD_SM501_GPIO=y CONFIG_HTC_PASIC3=m CONFIG_UCB1400_CORE=m +CONFIG_MFD_LM3533=m # CONFIG_TPS6105X is not set CONFIG_TPS65010=m CONFIG_TPS6507X=m CONFIG_MFD_TPS65217=m # CONFIG_MFD_TMIO is not set -CONFIG_MFD_WM8400=m CONFIG_MFD_PCF50633=m CONFIG_PCF50633_ADC=m CONFIG_PCF50633_GPIO=m +CONFIG_MFD_MC13783=m +CONFIG_MFD_MC13XXX=m +CONFIG_MFD_MC13XXX_I2C=m CONFIG_ABX500_CORE=y -CONFIG_AB8500_CORE=y -# CONFIG_AB8500_DEBUG is not set CONFIG_MFD_CS5535=m # CONFIG_MFD_TIMBERDALE is not set CONFIG_LPC_SCH=m +CONFIG_LPC_ICH=m CONFIG_MFD_RDC321X=m # CONFIG_MFD_JANZ_CMODIO is not set CONFIG_MFD_VX855=m @@ -3430,7 +3482,9 @@ CONFIG_MEDIA_TUNER_MXL5007T=m CONFIG_MEDIA_TUNER_MC44S803=m CONFIG_MEDIA_TUNER_MAX2165=m CONFIG_MEDIA_TUNER_TDA18218=m +CONFIG_MEDIA_TUNER_FC0011=m CONFIG_MEDIA_TUNER_TDA18212=m +CONFIG_MEDIA_TUNER_TUA9001=m CONFIG_VIDEO_V4L2=m CONFIG_VIDEOBUF_GEN=m CONFIG_VIDEOBUF_DMA_SG=m @@ -3549,6 +3603,7 @@ CONFIG_VIDEO_THS7303=m CONFIG_VIDEO_M52790=m CONFIG_VIDEO_VIVI=m CONFIG_V4L_USB_DRIVERS=y +CONFIG_VIDEO_AU0828=m CONFIG_USB_VIDEO_CLASS=m CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y CONFIG_USB_GSPCA=m @@ -3606,7 +3661,7 @@ CONFIG_VIDEO_HDPVR=m CONFIG_VIDEO_EM28XX=m CONFIG_VIDEO_EM28XX_ALSA=m CONFIG_VIDEO_EM28XX_DVB=m -CONFIG_VIDEO_EM28XX_RC=y +CONFIG_VIDEO_EM28XX_RC=m CONFIG_VIDEO_TLG2300=m CONFIG_VIDEO_CX231XX=m CONFIG_VIDEO_CX231XX_RC=y @@ -3616,7 +3671,6 @@ CONFIG_VIDEO_TM6000=m CONFIG_VIDEO_TM6000_ALSA=m CONFIG_VIDEO_TM6000_DVB=m CONFIG_VIDEO_USBVISION=m -CONFIG_USB_ET61X251=m CONFIG_USB_SN9C102=m CONFIG_USB_PWC=m # CONFIG_USB_PWC_DEBUG is not set @@ -3626,7 +3680,6 @@ CONFIG_USB_ZR364XX=m CONFIG_USB_STKWEBCAM=m CONFIG_USB_S2255=m CONFIG_V4L_PCI_DRIVERS=y -CONFIG_VIDEO_AU0828=m CONFIG_VIDEO_BT848=m CONFIG_VIDEO_BT848_DVB=y CONFIG_VIDEO_CX18=m @@ -3741,6 +3794,7 @@ CONFIG_DVB_USB_TECHNISAT_USB2=m CONFIG_DVB_USB_IT913X=m CONFIG_DVB_USB_MXL111SF=m CONFIG_DVB_USB_RTL28XXU=m +CONFIG_DVB_USB_AF9035=m CONFIG_DVB_TTUSB_BUDGET=m CONFIG_DVB_TTUSB_DEC=m CONFIG_SMS_SIANO_MDTV=m @@ -3890,8 +3944,11 @@ CONFIG_DVB_OR51132=m CONFIG_DVB_BCM3510=m CONFIG_DVB_LGDT330X=m CONFIG_DVB_LGDT3305=m +CONFIG_DVB_LG2160=m CONFIG_DVB_S5H1409=m CONFIG_DVB_AU8522=m +CONFIG_DVB_AU8522_DTV=m +CONFIG_DVB_AU8522_V4L=m CONFIG_DVB_S5H1411=m # @@ -3923,6 +3980,7 @@ CONFIG_DVB_TDA665x=m CONFIG_DVB_IX2505V=m CONFIG_DVB_IT913X_FE=m CONFIG_DVB_M88RS2000=m +CONFIG_DVB_AF9033=m # # Tools to develop new frontends @@ -3975,6 +4033,9 @@ CONFIG_DRM_GMA500=m CONFIG_DRM_GMA600=y CONFIG_DRM_GMA3600=y CONFIG_DRM_UDL=m +CONFIG_DRM_AST=m +CONFIG_DRM_MGAG200=m +CONFIG_DRM_CIRRUS_QEMU=m # CONFIG_STUB_POULSBO is not set CONFIG_VGASTATE=m CONFIG_VIDEO_OUTPUT_CONTROL=m @@ -4048,12 +4109,14 @@ CONFIG_FB_VIRTUAL=m # CONFIG_FB_METRONOME is not set # CONFIG_FB_MB862XX is not set # CONFIG_FB_BROADSHEET is not set +# CONFIG_FB_AUO_K190X is not set # CONFIG_EXYNOS_VIDEO is not set CONFIG_BACKLIGHT_LCD_SUPPORT=y CONFIG_LCD_CLASS_DEVICE=m CONFIG_LCD_PLATFORM=m CONFIG_BACKLIGHT_CLASS_DEVICE=y # CONFIG_BACKLIGHT_GENERIC is not set +CONFIG_BACKLIGHT_LM3533=m CONFIG_BACKLIGHT_PROGEAR=m CONFIG_BACKLIGHT_APPLE=m # CONFIG_BACKLIGHT_SAHARA is not set @@ -4084,6 +4147,7 @@ CONFIG_FONT_8x16=y # CONFIG_FONT_SUN8x16 is not set # CONFIG_FONT_SUN12x22 is not set # CONFIG_FONT_10x18 is not set +CONFIG_FONT_AUTOSELECT=y # CONFIG_LOGO is not set CONFIG_SOUND=m CONFIG_SOUND_OSS_CORE=y @@ -4229,7 +4293,6 @@ CONFIG_SND_HDA_INPUT_BEEP_MODE=1 CONFIG_SND_HDA_INPUT_JACK=y CONFIG_SND_HDA_PATCH_LOADER=y CONFIG_SND_HDA_CODEC_REALTEK=y -CONFIG_SND_HDA_ENABLE_REALTEK_QUIRKS=y CONFIG_SND_HDA_CODEC_ANALOG=y CONFIG_SND_HDA_CODEC_SIGMATEL=y CONFIG_SND_HDA_CODEC_VIA=y @@ -4287,16 +4350,13 @@ CONFIG_SND_PDAUDIOCF=m # CONFIG_SND_SOC is not set # CONFIG_SOUND_PRIME is not set CONFIG_AC97_BUS=m -CONFIG_HID_SUPPORT=y -CONFIG_HID=m -CONFIG_HIDRAW=y # -# USB Input Devices +# HID support # -CONFIG_USB_HID=m -CONFIG_HID_PID=y -CONFIG_USB_HIDDEV=y +CONFIG_HID=m +CONFIG_HIDRAW=y +CONFIG_HID_GENERIC=m # # Special HID drivers @@ -4305,6 +4365,7 @@ CONFIG_HID_A4TECH=m CONFIG_HID_ACRUX=m CONFIG_HID_ACRUX_FF=y CONFIG_HID_APPLE=m +CONFIG_HID_AUREAL=m CONFIG_HID_BELKIN=m CONFIG_HID_CHERRY=m CONFIG_HID_CHICONY=m @@ -4362,12 +4423,18 @@ CONFIG_HID_TOPSEED=m CONFIG_HID_THRUSTMASTER=m CONFIG_THRUSTMASTER_FF=y CONFIG_HID_WACOM=m -CONFIG_HID_WACOM_POWER_SUPPLY=y CONFIG_HID_WIIMOTE=m CONFIG_HID_WIIMOTE_EXT=y CONFIG_HID_ZEROPLUS=m CONFIG_ZEROPLUS_FF=y CONFIG_HID_ZYDACRON=m + +# +# USB HID support +# +CONFIG_USB_HID=m +CONFIG_HID_PID=y +CONFIG_USB_HIDDEV=y CONFIG_USB_ARCH_HAS_OHCI=y CONFIG_USB_ARCH_HAS_EHCI=y CONFIG_USB_ARCH_HAS_XHCI=y @@ -4381,8 +4448,6 @@ CONFIG_USB=m # # Miscellaneous USB options # -CONFIG_USB_DEVICEFS=y -# CONFIG_USB_DEVICE_CLASS is not set CONFIG_USB_DYNAMIC_MINORS=y CONFIG_USB_SUSPEND=y # CONFIG_USB_OTG is not set @@ -4421,9 +4486,15 @@ CONFIG_USB_R8A66597_HCD=m CONFIG_USB_RENESAS_USBHS_HCD=m CONFIG_USB_WHCI_HCD=m CONFIG_USB_HWA_HCD=m +# CONFIG_USB_HCD_BCMA is not set +# CONFIG_USB_HCD_SSB is not set CONFIG_USB_MUSB_HDRC=m CONFIG_USB_MUSB_TUSB6010=m CONFIG_MUSB_PIO_ONLY=y +CONFIG_USB_CHIPIDEA=m +CONFIG_USB_CHIPIDEA_UDC=y +CONFIG_USB_CHIPIDEA_HOST=y +# CONFIG_USB_CHIPIDEA_DEBUG is not set CONFIG_USB_RENESAS_USBHS=m # @@ -4537,6 +4608,7 @@ CONFIG_USB_SERIAL_OPTICON=m CONFIG_USB_SERIAL_VIVOPAY_SERIAL=m CONFIG_USB_SERIAL_ZIO=m CONFIG_USB_SERIAL_SSU100=m +CONFIG_USB_SERIAL_QT2=m # CONFIG_USB_SERIAL_DEBUG is not set # @@ -4563,6 +4635,11 @@ CONFIG_USB_IOWARRIOR=m CONFIG_USB_TEST=m CONFIG_USB_ISIGHTFW=m CONFIG_USB_YUREX=m + +# +# USB Physical Layer drivers +# +CONFIG_USB_ISP1301=m CONFIG_USB_ATM=m CONFIG_USB_SPEEDTOUCH=m CONFIG_USB_CXACRU=m @@ -4574,6 +4651,10 @@ CONFIG_USB_GADGET=m # CONFIG_USB_GADGET_DEBUG_FS is not set CONFIG_USB_GADGET_VBUS_DRAW=2 CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS=2 + +# +# USB Peripheral Controller +# CONFIG_USB_FUSB300=m CONFIG_USB_R8A66597=m CONFIG_USB_RENESAS_USBHS_UDC=m @@ -4581,12 +4662,10 @@ CONFIG_USB_MV_UDC=m CONFIG_USB_GADGET_MUSB_HDRC=m CONFIG_USB_M66592=m CONFIG_USB_AMD5536UDC=m -CONFIG_USB_CI13XXX_PCI=m CONFIG_USB_NET2272=m CONFIG_USB_NET2272_DMA=y CONFIG_USB_NET2280=m CONFIG_USB_GOKU=m -CONFIG_USB_LANGWELL=m CONFIG_USB_EG20T=m CONFIG_USB_DUMMY_HCD=m CONFIG_USB_GADGET_DUALSPEED=y @@ -4606,6 +4685,7 @@ CONFIG_USB_FUNCTIONFS_GENERIC=y CONFIG_USB_FILE_STORAGE=m # CONFIG_USB_FILE_STORAGE_TEST is not set # CONFIG_USB_MASS_STORAGE is not set +CONFIG_USB_GADGET_TARGET=m CONFIG_USB_G_SERIAL=m CONFIG_USB_MIDI_GADGET=m CONFIG_USB_G_PRINTER=m @@ -4625,7 +4705,6 @@ CONFIG_USB_G_WEBCAM=m CONFIG_USB_OTG_UTILS=y # CONFIG_USB_GPIO_VBUS is not set CONFIG_NOP_USB_XCEIV=m -# CONFIG_AB8500_USB is not set CONFIG_UWB=m CONFIG_UWB_HWA=m CONFIG_UWB_WHCI=m @@ -4680,6 +4759,7 @@ CONFIG_LEDS_CLASS=y # LED drivers # CONFIG_LEDS_LM3530=m +CONFIG_LEDS_LM3533=m CONFIG_LEDS_PCA9532=m # CONFIG_LEDS_PCA9532_GPIO is not set # CONFIG_LEDS_GPIO is not set @@ -4693,6 +4773,7 @@ CONFIG_LEDS_BD2802=m CONFIG_LEDS_INTEL_SS4200=m CONFIG_LEDS_LT3593=m CONFIG_LEDS_DELL_NETBOOKS=m +CONFIG_LEDS_MC13783=m CONFIG_LEDS_TCA6507=m CONFIG_LEDS_OT200=m CONFIG_LEDS_TRIGGERS=y @@ -4709,6 +4790,7 @@ CONFIG_LEDS_TRIGGER_DEFAULT_ON=m # # iptables trigger is under Netfilter config (LED target) # +CONFIG_LEDS_TRIGGER_TRANSIENT=m CONFIG_ACCESSIBILITY=y CONFIG_A11Y_BRAILLE_CONSOLE=y # CONFIG_INFINIBAND is not set @@ -4796,11 +4878,11 @@ CONFIG_RTC_DRV_BQ4802=m CONFIG_RTC_DRV_RP5C01=m CONFIG_RTC_DRV_V3020=m CONFIG_RTC_DRV_PCF50633=m -CONFIG_RTC_DRV_AB8500=m # # on-CPU RTC drivers # +CONFIG_RTC_DRV_MC13XXX=m CONFIG_DMADEVICES=y # CONFIG_DMADEVICES_DEBUG is not set @@ -4843,6 +4925,7 @@ CONFIG_VIRTIO_RING=y CONFIG_VIRTIO_PCI=m CONFIG_VIRTIO_BALLOON=m CONFIG_VIRTIO_MMIO=m +CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y # # Microsoft Hyper-V guest support @@ -4861,6 +4944,8 @@ CONFIG_PRISM2_USB=m CONFIG_ECHO=m CONFIG_COMEDI=m # CONFIG_COMEDI_DEBUG is not set +CONFIG_COMEDI_DEFAULT_BUF_SIZE_KB=2048 +CONFIG_COMEDI_DEFAULT_BUF_MAXSIZE_KB=20480 CONFIG_COMEDI_MISC_DRIVERS=m CONFIG_COMEDI_KCOMEDILIB=m CONFIG_COMEDI_BOND=m @@ -4880,9 +4965,13 @@ CONFIG_COMEDI_PCL816=m CONFIG_COMEDI_PCL818=m CONFIG_COMEDI_PCM3724=m CONFIG_COMEDI_PCM3730=m +CONFIG_COMEDI_AMPLC_DIO200_ISA=m +CONFIG_COMEDI_AMPLC_PC236_ISA=m +CONFIG_COMEDI_AMPLC_PC263_ISA=m CONFIG_COMEDI_RTI800=m CONFIG_COMEDI_RTI802=m CONFIG_COMEDI_DAS16M1=m +CONFIG_COMEDI_DAS08_ISA=m CONFIG_COMEDI_DAS16=m CONFIG_COMEDI_DAS800=m CONFIG_COMEDI_DAS1800=m @@ -4934,12 +5023,13 @@ CONFIG_COMEDI_ADL_PCI9118=m CONFIG_COMEDI_ADV_PCI1710=m CONFIG_COMEDI_ADV_PCI1723=m CONFIG_COMEDI_ADV_PCI_DIO=m -CONFIG_COMEDI_AMPLC_DIO200=m -CONFIG_COMEDI_AMPLC_PC236=m -CONFIG_COMEDI_AMPLC_PC263=m +CONFIG_COMEDI_AMPLC_DIO200_PCI=m +CONFIG_COMEDI_AMPLC_PC236_PCI=m +CONFIG_COMEDI_AMPLC_PC263_PCI=m CONFIG_COMEDI_AMPLC_PCI224=m CONFIG_COMEDI_AMPLC_PCI230=m CONFIG_COMEDI_CONTEC_PCI_DIO=m +CONFIG_COMEDI_DAS08_PCI=m CONFIG_COMEDI_DT3000=m CONFIG_COMEDI_DYNA_PCI10XX=m CONFIG_COMEDI_UNIOXX5=m @@ -4986,8 +5076,11 @@ CONFIG_COMEDI_MITE=m CONFIG_COMEDI_NI_TIO=m CONFIG_COMEDI_NI_LABPC=m CONFIG_COMEDI_8255=m -CONFIG_COMEDI_DAS08=m CONFIG_COMEDI_FC=m +CONFIG_COMEDI_AMPLC_DIO200=m +CONFIG_COMEDI_AMPLC_PC236=m +CONFIG_COMEDI_AMPLC_PC263=m +CONFIG_COMEDI_DAS08=m # CONFIG_FB_OLPC_DCON is not set CONFIG_ASUS_OLED=m # CONFIG_PANEL is not set @@ -5013,12 +5106,9 @@ CONFIG_LINE6_USB=m # CONFIG_LINE6_USB_RAW is not set # CONFIG_LINE6_USB_IMPULSE_RESPONSE is not set CONFIG_USB_SERIAL_QUATECH2=m -CONFIG_USB_SERIAL_QUATECH_USB2=m CONFIG_VT6655=m CONFIG_VT6656=m -# CONFIG_VME_BUS is not set CONFIG_DX_SEP=m -# CONFIG_IIO is not set CONFIG_ZRAM=m # CONFIG_ZRAM_DEBUG is not set CONFIG_ZCACHE=y @@ -5056,7 +5146,6 @@ CONFIG_SPEAKUP_SYNTH_TXPRT=m CONFIG_SPEAKUP_SYNTH_DUMMY=m CONFIG_TOUCHSCREEN_CLEARPAD_TM1217=m CONFIG_TOUCHSCREEN_SYNAPTICS_I2C_RMI4=m -CONFIG_INTEL_MEI=m CONFIG_STAGING_MEDIA=y CONFIG_DVB_AS102=m CONFIG_DVB_CXD2099=m @@ -5094,6 +5183,16 @@ CONFIG_LIRC_ZILOG=m # CONFIG_ANDROID is not set # CONFIG_PHONE is not set CONFIG_USB_WPAN_HCD=m +CONFIG_IPACK_BUS=m +CONFIG_BOARD_TPCI200=m +CONFIG_SERIAL_IPOCTAL=m +CONFIG_WIMAX_GDM72XX=m +CONFIG_WIMAX_GDM72XX_QOS=y +CONFIG_WIMAX_GDM72XX_K_MODE=y +CONFIG_WIMAX_GDM72XX_WIMAX2=y +CONFIG_WIMAX_GDM72XX_USB=y +# CONFIG_WIMAX_GDM72XX_SDIO is not set +CONFIG_WIMAX_GDM72XX_USB_PM=y CONFIG_X86_PLATFORM_DEVICES=y CONFIG_ACER_WMI=m CONFIG_ACERHDF=m @@ -5166,6 +5265,15 @@ CONFIG_INTEL_IOMMU_FLOPPY_WA=y # CONFIG_VIRT_DRIVERS=y # CONFIG_PM_DEVFREQ is not set +CONFIG_EXTCON=m + +# +# Extcon Device Drivers +# +CONFIG_EXTCON_GPIO=m +CONFIG_MEMORY=y +# CONFIG_IIO is not set +# CONFIG_VME_BUS is not set # # Firmware Drivers @@ -5315,11 +5423,9 @@ CONFIG_JFFS2_ZLIB=y CONFIG_JFFS2_RTIME=y # CONFIG_JFFS2_RUBIN is not set CONFIG_UBIFS_FS=m -CONFIG_UBIFS_FS_XATTR=y # CONFIG_UBIFS_FS_ADVANCED_COMPR is not set CONFIG_UBIFS_FS_LZO=y CONFIG_UBIFS_FS_ZLIB=y -# CONFIG_UBIFS_FS_DEBUG is not set CONFIG_LOGFS=m CONFIG_CRAMFS=m CONFIG_SQUASHFS=m @@ -5338,6 +5444,7 @@ CONFIG_OMFS_FS=m # CONFIG_QNX6FS_FS is not set # CONFIG_ROMFS_FS is not set CONFIG_PSTORE=y +CONFIG_PSTORE_RAM=m # CONFIG_SYSV_FS is not set CONFIG_UFS_FS=m # CONFIG_UFS_FS_WRITE is not set @@ -5347,6 +5454,7 @@ CONFIG_EXOFS_FS=m CONFIG_ORE=m CONFIG_NETWORK_FILESYSTEMS=y CONFIG_NFS_FS=m +CONFIG_NFS_V2=y CONFIG_NFS_V3=y CONFIG_NFS_V3_ACL=y CONFIG_NFS_V4=y @@ -5435,6 +5543,17 @@ CONFIG_NLS_ISO8859_14=m CONFIG_NLS_ISO8859_15=m CONFIG_NLS_KOI8_R=m CONFIG_NLS_KOI8_U=m +CONFIG_NLS_MAC_ROMAN=m +CONFIG_NLS_MAC_CELTIC=m +CONFIG_NLS_MAC_CENTEURO=m +CONFIG_NLS_MAC_CROATIAN=m +CONFIG_NLS_MAC_CYRILLIC=m +CONFIG_NLS_MAC_GAELIC=m +CONFIG_NLS_MAC_GREEK=m +CONFIG_NLS_MAC_ICELAND=m +CONFIG_NLS_MAC_INUIT=m +CONFIG_NLS_MAC_ROMANIAN=m +CONFIG_NLS_MAC_TURKISH=m CONFIG_NLS_UTF8=m CONFIG_DLM=m # CONFIG_DLM_DEBUG is not set @@ -5450,6 +5569,7 @@ CONFIG_ENABLE_WARN_DEPRECATED=y CONFIG_FRAME_WARN=1024 CONFIG_MAGIC_SYSRQ=y CONFIG_STRIP_ASM_SYMS=y +# CONFIG_READABLE_ASM is not set CONFIG_UNUSED_SYMBOLS=y CONFIG_DEBUG_FS=y # CONFIG_HEADERS_CHECK is not set @@ -5462,6 +5582,8 @@ CONFIG_HARDLOCKUP_DETECTOR=y CONFIG_BOOTPARAM_HARDLOCKUP_PANIC_VALUE=0 # CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 +# CONFIG_PANIC_ON_OOPS is not set +CONFIG_PANIC_ON_OOPS_VALUE=0 CONFIG_DETECT_HUNG_TASK=y CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=120 # CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set @@ -5507,6 +5629,7 @@ CONFIG_RCU_CPU_STALL_TIMEOUT=60 # CONFIG_RCU_CPU_STALL_VERBOSE is not set # CONFIG_RCU_CPU_STALL_INFO is not set # CONFIG_RCU_TRACE is not set +# CONFIG_KPROBES_SANITY_TEST is not set # CONFIG_BACKTRACE_SELF_TEST is not set # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set # CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set @@ -5518,7 +5641,6 @@ CONFIG_CPU_NOTIFIER_ERROR_INJECT=m # CONFIG_DEBUG_PAGEALLOC is not set CONFIG_USER_STACKTRACE_SUPPORT=y CONFIG_NOP_TRACER=y -CONFIG_HAVE_FTRACE_NMI_ENTER=y CONFIG_HAVE_FUNCTION_TRACER=y CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y CONFIG_HAVE_FUNCTION_GRAPH_FP_TEST=y @@ -5529,7 +5651,6 @@ CONFIG_HAVE_SYSCALL_TRACEPOINTS=y CONFIG_HAVE_C_RECORDMCOUNT=y CONFIG_TRACER_MAX_TRACE=y CONFIG_RING_BUFFER=y -CONFIG_FTRACE_NMI_ENTER=y CONFIG_EVENT_TRACING=y CONFIG_EVENT_POWER_TRACING_DEPRECATED=y CONFIG_CONTEXT_SWITCH_TRACER=y @@ -5549,6 +5670,9 @@ CONFIG_BRANCH_PROFILE_NONE=y # CONFIG_PROFILE_ALL_BRANCHES is not set CONFIG_STACK_TRACER=y CONFIG_BLK_DEV_IO_TRACE=y +CONFIG_KPROBE_EVENT=y +CONFIG_UPROBE_EVENT=y +CONFIG_PROBE_EVENTS=y CONFIG_DYNAMIC_FTRACE=y CONFIG_FUNCTION_PROFILER=y CONFIG_FTRACE_MCOUNT_RECORD=y @@ -5580,6 +5704,7 @@ CONFIG_DEBUG_RODATA=y CONFIG_DOUBLEFAULT=y # CONFIG_IOMMU_STRESS is not set CONFIG_HAVE_MMIOTRACE_SUPPORT=y +# CONFIG_X86_DECODER_SELFTEST is not set CONFIG_IO_DELAY_TYPE_0X80=0 CONFIG_IO_DELAY_TYPE_0XED=1 CONFIG_IO_DELAY_TYPE_UDELAY=2 @@ -5759,6 +5884,7 @@ CONFIG_HAVE_KVM_EVENTFD=y CONFIG_KVM_APIC_ARCHITECTURE=y CONFIG_KVM_MMIO=y CONFIG_KVM_ASYNC_PF=y +CONFIG_HAVE_KVM_MSI=y CONFIG_VIRTUALIZATION=y CONFIG_KVM=m CONFIG_KVM_INTEL=m @@ -5773,6 +5899,8 @@ CONFIG_BINARY_PRINTF=y # CONFIG_RAID6_PQ=m CONFIG_BITREVERSE=y +CONFIG_GENERIC_STRNCPY_FROM_USER=y +CONFIG_GENERIC_STRNLEN_USER=y CONFIG_GENERIC_FIND_FIRST_BIT=y CONFIG_GENERIC_PCI_IOMAP=y CONFIG_GENERIC_IOMAP=y @@ -5811,6 +5939,8 @@ CONFIG_DECOMPRESS_XZ=y CONFIG_DECOMPRESS_LZO=y CONFIG_GENERIC_ALLOCATOR=y CONFIG_REED_SOLOMON=m +CONFIG_REED_SOLOMON_ENC8=y +CONFIG_REED_SOLOMON_DEC8=y CONFIG_REED_SOLOMON_DEC16=y CONFIG_BCH=m CONFIG_BCH_CONST_PARAMS=y @@ -5829,3 +5959,4 @@ CONFIG_NLATTR=y CONFIG_LRU_CACHE=m CONFIG_AVERAGE=y CONFIG_CORDIC=m +CONFIG_DDR=y diff --git a/libre/linux-libre/config.x86_64 b/libre/linux-libre/config.x86_64 index 9f3698ac2..350a2b905 100644 --- a/libre/linux-libre/config.x86_64 +++ b/libre/linux-libre/config.x86_64 @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/x86_64 3.4.1-1 Kernel Configuration +# Linux/x86_64 3.5.0-2 Kernel Configuration # CONFIG_64BIT=y # CONFIG_X86_32 is not set @@ -9,11 +9,6 @@ CONFIG_X86=y CONFIG_INSTRUCTION_DECODER=y CONFIG_OUTPUT_FORMAT="elf64-x86-64" CONFIG_ARCH_DEFCONFIG="arch/x86/configs/x86_64_defconfig" -CONFIG_GENERIC_CMOS_UPDATE=y -CONFIG_CLOCKSOURCE_WATCHDOG=y -CONFIG_GENERIC_CLOCKEVENTS=y -CONFIG_ARCH_CLOCKSOURCE_DATA=y -CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y CONFIG_LOCKDEP_SUPPORT=y CONFIG_STACKTRACE_SUPPORT=y CONFIG_HAVE_LATENCYTOP_SUPPORT=y @@ -28,9 +23,7 @@ CONFIG_GENERIC_GPIO=y CONFIG_ARCH_MAY_HAVE_PC_FDC=y # CONFIG_RWSEM_GENERIC_SPINLOCK is not set CONFIG_RWSEM_XCHGADD_ALGORITHM=y -CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y CONFIG_GENERIC_CALIBRATE_DELAY=y -CONFIG_GENERIC_TIME_VSYSCALL=y CONFIG_ARCH_HAS_CPU_RELAX=y CONFIG_ARCH_HAS_DEFAULT_IDLE=y CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y @@ -48,11 +41,12 @@ CONFIG_HAVE_INTEL_TXT=y CONFIG_X86_64_SMP=y CONFIG_X86_HT=y CONFIG_ARCH_HWEIGHT_CFLAGS="-fcall-saved-rdi -fcall-saved-rsi -fcall-saved-rdx -fcall-saved-rcx -fcall-saved-r8 -fcall-saved-r9 -fcall-saved-r10 -fcall-saved-r11" -# CONFIG_KTIME_SCALAR is not set CONFIG_ARCH_CPU_PROBE_RELEASE=y +CONFIG_ARCH_SUPPORTS_UPROBES=y CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" CONFIG_HAVE_IRQ_WORK=y CONFIG_IRQ_WORK=y +CONFIG_BUILDTIME_EXTABLE_SORT=y # # General setup @@ -99,8 +93,25 @@ CONFIG_GENERIC_HARDIRQS=y CONFIG_GENERIC_IRQ_PROBE=y CONFIG_GENERIC_IRQ_SHOW=y CONFIG_GENERIC_PENDING_IRQ=y +CONFIG_IRQ_DOMAIN=y +# CONFIG_IRQ_DOMAIN_DEBUG is not set CONFIG_IRQ_FORCED_THREADING=y CONFIG_SPARSE_IRQ=y +CONFIG_CLOCKSOURCE_WATCHDOG=y +CONFIG_ARCH_CLOCKSOURCE_DATA=y +CONFIG_GENERIC_TIME_VSYSCALL=y +CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_GENERIC_CLOCKEVENTS_BUILD=y +CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y +CONFIG_GENERIC_CLOCKEVENTS_MIN_ADJUST=y +CONFIG_GENERIC_CMOS_UPDATE=y + +# +# Timers subsystem +# +CONFIG_TICK_ONESHOT=y +CONFIG_NO_HZ=y +CONFIG_HIGH_RES_TIMERS=y # # RCU Subsystem @@ -108,6 +119,7 @@ CONFIG_SPARSE_IRQ=y CONFIG_TREE_PREEMPT_RCU=y CONFIG_PREEMPT_RCU=y CONFIG_RCU_FANOUT=64 +CONFIG_RCU_FANOUT_LEAF=16 # CONFIG_RCU_FANOUT_EXACT is not set CONFIG_RCU_FAST_NO_HZ=y # CONFIG_TREE_RCU_TRACE is not set @@ -139,7 +151,6 @@ CONFIG_BLK_CGROUP=y CONFIG_NAMESPACES=y CONFIG_UTS_NS=y CONFIG_IPC_NS=y -CONFIG_USER_NS=y CONFIG_PID_NS=y CONFIG_NET_NS=y CONFIG_SCHED_AUTOGROUP=y @@ -182,7 +193,6 @@ CONFIG_HAVE_PERF_EVENTS=y # Kernel Performance Events And Counters # CONFIG_PERF_EVENTS=y -CONFIG_PERF_COUNTERS=y # CONFIG_DEBUG_PERF_USE_VMALLOC is not set CONFIG_VM_EVENT_COUNTERS=y CONFIG_PCI_QUIRKS=y @@ -196,9 +206,11 @@ CONFIG_OPROFILE=m # CONFIG_OPROFILE_EVENT_MULTIPLEX is not set CONFIG_HAVE_OPROFILE=y CONFIG_OPROFILE_NMI_TIMER=y -# CONFIG_KPROBES is not set +CONFIG_KPROBES=y CONFIG_JUMP_LABEL=y +CONFIG_UPROBES=y CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y +CONFIG_KRETPROBES=y CONFIG_USER_RETURN_NOTIFIER=y CONFIG_HAVE_IOREMAP_PROT=y CONFIG_HAVE_KPROBES=y @@ -207,6 +219,7 @@ CONFIG_HAVE_OPTPROBES=y CONFIG_HAVE_ARCH_TRACEHOOK=y CONFIG_HAVE_DMA_ATTRS=y CONFIG_USE_GENERIC_SMP_HELPERS=y +CONFIG_GENERIC_SMP_IDLE_THREAD=y CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y CONFIG_HAVE_DMA_API_DEBUG=y CONFIG_HAVE_HW_BREAKPOINT=y @@ -219,6 +232,8 @@ CONFIG_HAVE_ALIGNED_STRUCT_PAGE=y CONFIG_HAVE_CMPXCHG_LOCAL=y CONFIG_HAVE_CMPXCHG_DOUBLE=y CONFIG_ARCH_WANT_OLD_COMPAT_IPC=y +CONFIG_HAVE_ARCH_SECCOMP_FILTER=y +CONFIG_SECCOMP_FILTER=y # # GCOV-based kernel profiling @@ -313,11 +328,6 @@ CONFIG_FREEZER=y # Processor type and features # CONFIG_ZONE_DMA=y -CONFIG_TICK_ONESHOT=y -CONFIG_NO_HZ=y -CONFIG_HIGH_RES_TIMERS=y -CONFIG_GENERIC_CLOCKEVENTS_BUILD=y -CONFIG_GENERIC_CLOCKEVENTS_MIN_ADJUST=y CONFIG_SMP=y CONFIG_X86_X2APIC=y CONFIG_X86_MPPARSE=y @@ -439,7 +449,9 @@ CONFIG_HWPOISON_INJECT=m CONFIG_TRANSPARENT_HUGEPAGE=y CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y # CONFIG_TRANSPARENT_HUGEPAGE_MADVISE is not set +CONFIG_CROSS_MEMORY_ATTACH=y CONFIG_CLEANCACHE=y +CONFIG_FRONTSWAP=y CONFIG_X86_CHECK_BIOS_CORRUPTION=y CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK=y CONFIG_X86_RESERVE_LOW=64 @@ -484,6 +496,10 @@ CONFIG_HIBERNATION=y CONFIG_PM_STD_PARTITION="" CONFIG_PM_SLEEP=y CONFIG_PM_SLEEP_SMP=y +CONFIG_PM_AUTOSLEEP=y +CONFIG_PM_WAKELOCKS=y +CONFIG_PM_WAKELOCKS_LIMIT=100 +CONFIG_PM_WAKELOCKS_GC=y CONFIG_PM_RUNTIME=y CONFIG_PM=y CONFIG_PM_DEBUG=y @@ -633,6 +649,7 @@ CONFIG_RAPIDIO=y CONFIG_RAPIDIO_TSI721=y CONFIG_RAPIDIO_DISC_TIMEOUT=30 # CONFIG_RAPIDIO_ENABLE_RX_TX_PORTS is not set +CONFIG_RAPIDIO_DMA_ENGINE=y CONFIG_RAPIDIO_DEBUG=y CONFIG_RAPIDIO_TSI57X=y CONFIG_RAPIDIO_CPS_XX=y @@ -657,6 +674,7 @@ CONFIG_COMPAT_FOR_U64_ALIGNMENT=y CONFIG_SYSVIPC_COMPAT=y CONFIG_KEYS_COMPAT=y CONFIG_HAVE_TEXT_POKE_SMP=y +CONFIG_X86_DEV_DMA_OPS=y CONFIG_NET=y CONFIG_COMPAT_NETLINK_MESSAGES=y @@ -667,6 +685,7 @@ CONFIG_PACKET=y CONFIG_UNIX=y CONFIG_UNIX_DIAG=m CONFIG_XFRM=y +CONFIG_XFRM_ALGO=m CONFIG_XFRM_USER=m # CONFIG_XFRM_SUB_POLICY is not set # CONFIG_XFRM_MIGRATE is not set @@ -805,6 +824,7 @@ CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=m CONFIG_NETFILTER_XT_TARGET_CT=m CONFIG_NETFILTER_XT_TARGET_DSCP=m CONFIG_NETFILTER_XT_TARGET_HL=m +CONFIG_NETFILTER_XT_TARGET_HMARK=m CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m CONFIG_NETFILTER_XT_TARGET_LED=m CONFIG_NETFILTER_XT_TARGET_LOG=m @@ -965,7 +985,6 @@ CONFIG_IP_NF_ARP_MANGLE=m # CONFIG_NF_DEFRAG_IPV6=m CONFIG_NF_CONNTRACK_IPV6=m -CONFIG_IP6_NF_QUEUE=m CONFIG_IP6_NF_IPTABLES=m CONFIG_IP6_NF_MATCH_AH=m CONFIG_IP6_NF_MATCH_EUI64=m @@ -1019,7 +1038,9 @@ CONFIG_IP_DCCP_TFRC_LIB=y # DCCP Kernel Hacking # # CONFIG_IP_DCCP_DEBUG is not set +CONFIG_NET_DCCPPROBE=m CONFIG_IP_SCTP=m +CONFIG_NET_SCTPPROBE=m # CONFIG_SCTP_DBG_MSG is not set # CONFIG_SCTP_DBG_OBJCNT is not set # CONFIG_SCTP_HMAC_NONE is not set @@ -1057,11 +1078,11 @@ CONFIG_IPDDP_ENCAP=y CONFIG_IPDDP_DECAP=y # CONFIG_X25 is not set # CONFIG_LAPB is not set -# CONFIG_ECONET is not set # CONFIG_WAN_ROUTER is not set CONFIG_PHONET=m CONFIG_IEEE802154=m CONFIG_IEEE802154_6LOWPAN=m +CONFIG_MAC802154=m CONFIG_NET_SCHED=y # @@ -1085,6 +1106,8 @@ CONFIG_NET_SCH_DRR=m CONFIG_NET_SCH_MQPRIO=m CONFIG_NET_SCH_CHOKE=m CONFIG_NET_SCH_QFQ=m +CONFIG_NET_SCH_CODEL=m +CONFIG_NET_SCH_FQ_CODEL=m CONFIG_NET_SCH_INGRESS=m CONFIG_NET_SCH_PLUG=m @@ -1120,6 +1143,7 @@ CONFIG_NET_SCH_FIFO=y # CONFIG_DCB is not set CONFIG_DNS_RESOLVER=y CONFIG_BATMAN_ADV=m +CONFIG_BATMAN_ADV_BLA=y # CONFIG_BATMAN_ADV_DEBUG is not set CONFIG_OPENVSWITCH=m CONFIG_RPS=y @@ -1127,13 +1151,13 @@ CONFIG_RFS_ACCEL=y CONFIG_XPS=y CONFIG_NETPRIO_CGROUP=m CONFIG_BQL=y -CONFIG_HAVE_BPF_JIT=y CONFIG_BPF_JIT=y # # Network testing # CONFIG_NET_PKTGEN=m +CONFIG_NET_TCPPROBE=m CONFIG_NET_DROP_MONITOR=y CONFIG_HAMRADIO=y @@ -1294,6 +1318,8 @@ CONFIG_CEPH_LIB=m # CONFIG_CEPH_LIB_USE_DNS_RESOLVER is not set CONFIG_NFC=m CONFIG_NFC_NCI=m +CONFIG_NFC_HCI=m +# CONFIG_NFC_SHDLC is not set # CONFIG_NFC_LLCP is not set # @@ -1302,6 +1328,7 @@ CONFIG_NFC_NCI=m CONFIG_PN544_NFC=m CONFIG_NFC_PN533=m CONFIG_NFC_WILINK=m +CONFIG_HAVE_BPF_JIT=y # # Device Drivers @@ -1452,7 +1479,6 @@ CONFIG_MTD_UBI=m CONFIG_MTD_UBI_WL_THRESHOLD=4096 CONFIG_MTD_UBI_BEB_RESERVE=1 # CONFIG_MTD_UBI_GLUEBI is not set -# CONFIG_MTD_UBI_DEBUG is not set CONFIG_PARPORT=m CONFIG_PARPORT_PC=m CONFIG_PARPORT_SERIAL=m @@ -1532,7 +1558,8 @@ CONFIG_SENSORS_APDS990X=m CONFIG_HMC6352=m CONFIG_DS1682=m CONFIG_VMWARE_BALLOON=m -CONFIG_BMP085=m +CONFIG_BMP085=y +CONFIG_BMP085_I2C=m CONFIG_PCH_PHUB=m CONFIG_USB_SWITCH_FSA9480=m CONFIG_C2PORT=m @@ -1562,6 +1589,7 @@ CONFIG_SENSORS_LIS3_I2C=m # Altera FPGA firmware download module # CONFIG_ALTERA_STAPL=m +CONFIG_INTEL_MEI=m CONFIG_HAVE_IDE=y # CONFIG_IDE is not set @@ -1685,6 +1713,7 @@ CONFIG_SCSI_IPR=m # CONFIG_SCSI_IPR_DUMP is not set CONFIG_SCSI_QLOGIC_1280=m CONFIG_SCSI_QLA_FC=m +CONFIG_TCM_QLA2XXX=m CONFIG_SCSI_QLA_ISCSI=m CONFIG_SCSI_LPFC=m # CONFIG_SCSI_LPFC_DEBUG_FS is not set @@ -1844,6 +1873,7 @@ CONFIG_TCM_PSCSI=m CONFIG_LOOPBACK_TARGET=m CONFIG_TCM_FC=m CONFIG_ISCSI_TARGET=m +CONFIG_SBP_TARGET=m CONFIG_FUSION=y CONFIG_FUSION_SPI=m CONFIG_FUSION_FC=m @@ -1881,10 +1911,12 @@ CONFIG_EQUALIZER=m CONFIG_MII=m CONFIG_IEEE802154_DRIVERS=m CONFIG_IEEE802154_FAKEHARD=m +CONFIG_IEEE802154_FAKELB=m CONFIG_IFB=m CONFIG_NET_TEAM=m CONFIG_NET_TEAM_MODE_ROUNDROBIN=m CONFIG_NET_TEAM_MODE_ACTIVEBACKUP=m +CONFIG_NET_TEAM_MODE_LOADBALANCE=m CONFIG_MACVLAN=m CONFIG_MACVTAP=m CONFIG_NETCONSOLE=m @@ -2015,10 +2047,13 @@ CONFIG_E1000=m CONFIG_E1000E=m CONFIG_IGB=m CONFIG_IGB_DCA=y +CONFIG_IGB_PTP=y CONFIG_IGBVF=m CONFIG_IXGB=m CONFIG_IXGBE=m +CONFIG_IXGBE_HWMON=y CONFIG_IXGBE_DCA=y +CONFIG_IXGBE_PTP=y CONFIG_IXGBEVF=m CONFIG_NET_VENDOR_I825XX=y CONFIG_ZNET=m @@ -2091,8 +2126,8 @@ CONFIG_EPIC100=m CONFIG_SMSC9420=m CONFIG_NET_VENDOR_STMICRO=y CONFIG_STMMAC_ETH=m -CONFIG_STMMAC_PLATFORM=m -CONFIG_STMMAC_PCI=m +# CONFIG_STMMAC_PLATFORM is not set +CONFIG_STMMAC_PCI=y # CONFIG_STMMAC_DEBUG_FS is not set # CONFIG_STMMAC_DA is not set CONFIG_STMMAC_RING=y @@ -2110,6 +2145,12 @@ CONFIG_NET_VENDOR_VIA=y CONFIG_VIA_RHINE=m # CONFIG_VIA_RHINE_MMIO is not set CONFIG_VIA_VELOCITY=m +CONFIG_NET_VENDOR_WIZNET=y +CONFIG_WIZNET_W5100=m +CONFIG_WIZNET_W5300=m +# CONFIG_WIZNET_BUS_DIRECT is not set +# CONFIG_WIZNET_BUS_INDIRECT is not set +CONFIG_WIZNET_BUS_ANY=y CONFIG_NET_VENDOR_XIRCOM=y CONFIG_PCMCIA_XIRC2PS=m # CONFIG_FDDI is not set @@ -2154,7 +2195,6 @@ CONFIG_SLHC=m # CONFIG_SLIP_COMPRESSED is not set # CONFIG_SLIP_SMART is not set # CONFIG_SLIP_MODE_SLIP6 is not set -# CONFIG_TR is not set # # USB Network Adapters @@ -2269,6 +2309,7 @@ CONFIG_BRCMUTIL=m CONFIG_BRCMSMAC=m CONFIG_BRCMFMAC=m CONFIG_BRCMFMAC_SDIO=y +# CONFIG_BRCMFMAC_SDIO_OOB is not set CONFIG_BRCMFMAC_USB=y # CONFIG_BRCMDBG is not set CONFIG_HOSTAP=m @@ -2350,17 +2391,19 @@ CONFIG_RTL8192CU=m CONFIG_RTLWIFI=m # CONFIG_RTLWIFI_DEBUG is not set CONFIG_RTL8192C_COMMON=m +CONFIG_WL_TI=y CONFIG_WL1251=m CONFIG_WL1251_SDIO=m -CONFIG_WL12XX_MENU=m CONFIG_WL12XX=m -CONFIG_WL12XX_SDIO=m +CONFIG_WLCORE=m +CONFIG_WLCORE_SDIO=m CONFIG_WL12XX_PLATFORM_DATA=y CONFIG_ZD1211RW=m # CONFIG_ZD1211RW_DEBUG is not set CONFIG_MWIFIEX=m CONFIG_MWIFIEX_SDIO=m CONFIG_MWIFIEX_PCIE=m +CONFIG_MWIFIEX_USB=m # # WiMAX Wireless Broadband devices @@ -2513,6 +2556,7 @@ CONFIG_INPUT=y CONFIG_INPUT_FF_MEMLESS=m CONFIG_INPUT_POLLDEV=m CONFIG_INPUT_SPARSEKMAP=m +CONFIG_INPUT_MATRIXKMAP=m # # Userland interfaces @@ -2541,6 +2585,7 @@ CONFIG_KEYBOARD_TCA6416=m CONFIG_KEYBOARD_TCA8418=m CONFIG_KEYBOARD_MATRIX=m # CONFIG_KEYBOARD_LM8323 is not set +CONFIG_KEYBOARD_LM8333=m # CONFIG_KEYBOARD_MAX7359 is not set CONFIG_KEYBOARD_MCS=m CONFIG_KEYBOARD_MPR121=m @@ -2623,6 +2668,7 @@ CONFIG_TOUCHSCREEN_ILI210X=m CONFIG_TOUCHSCREEN_GUNZE=m CONFIG_TOUCHSCREEN_ELO=m CONFIG_TOUCHSCREEN_WACOM_W8001=m +CONFIG_TOUCHSCREEN_WACOM_I2C=m CONFIG_TOUCHSCREEN_MAX11801=m CONFIG_TOUCHSCREEN_MCS5000=m CONFIG_TOUCHSCREEN_MTOUCH=m @@ -2638,6 +2684,7 @@ CONFIG_TOUCHSCREEN_WM9705=y CONFIG_TOUCHSCREEN_WM9712=y CONFIG_TOUCHSCREEN_WM9713=y CONFIG_TOUCHSCREEN_USB_COMPOSITE=m +CONFIG_TOUCHSCREEN_MC13783=m CONFIG_TOUCHSCREEN_USB_EGALAX=y CONFIG_TOUCHSCREEN_USB_PANJIT=y CONFIG_TOUCHSCREEN_USB_3M=y @@ -2662,11 +2709,11 @@ CONFIG_TOUCHSCREEN_TSC2007=m CONFIG_TOUCHSCREEN_ST1232=m CONFIG_TOUCHSCREEN_TPS6507X=m CONFIG_INPUT_MISC=y -CONFIG_INPUT_AB8500_PONKEY=m CONFIG_INPUT_AD714X=m CONFIG_INPUT_AD714X_I2C=m CONFIG_INPUT_BMA150=m CONFIG_INPUT_PCSPKR=m +CONFIG_INPUT_MC13783_PWRBUTTON=m CONFIG_INPUT_MMA8450=m CONFIG_INPUT_MPU3050=m CONFIG_INPUT_APANEL=m @@ -2809,7 +2856,6 @@ CONFIG_TCG_ATMEL=m CONFIG_TCG_INFINEON=m CONFIG_TELCLOCK=m CONFIG_DEVPORT=y -CONFIG_RAMOOPS=m CONFIG_I2C=m CONFIG_I2C_BOARDINFO=y CONFIG_I2C_COMPAT=y @@ -2916,6 +2962,7 @@ CONFIG_GPIO_SYSFS=y # CONFIG_GPIO_GENERIC_PLATFORM is not set # CONFIG_GPIO_IT8761E is not set CONFIG_GPIO_SCH=m +CONFIG_GPIO_ICH=m # CONFIG_GPIO_VX855 is not set # @@ -3068,6 +3115,7 @@ CONFIG_SENSORS_SCH5636=m CONFIG_SENSORS_ADS1015=m CONFIG_SENSORS_ADS7828=m CONFIG_SENSORS_AMC6821=m +CONFIG_SENSORS_INA2XX=m CONFIG_SENSORS_THMC50=m CONFIG_SENSORS_TMP102=m CONFIG_SENSORS_TMP401=m @@ -3087,6 +3135,7 @@ CONFIG_SENSORS_W83L786NG=m CONFIG_SENSORS_W83627HF=m CONFIG_SENSORS_W83627EHF=m CONFIG_SENSORS_APPLESMC=m +CONFIG_SENSORS_MC13783_ADC=m # # ACPI drivers @@ -3117,6 +3166,7 @@ CONFIG_IB700_WDT=m CONFIG_IBMASR=m CONFIG_WAFER_WDT=m CONFIG_I6300ESB_WDT=m +CONFIG_IE6XX_WDT=m CONFIG_ITCO_WDT=m CONFIG_ITCO_VENDOR_SUPPORT=y CONFIG_IT8712F_WDT=m @@ -3183,26 +3233,28 @@ CONFIG_BCMA_HOST_PCI=y # # Multifunction device drivers # -CONFIG_MFD_CORE=y +CONFIG_MFD_CORE=m CONFIG_MFD_SM501=m CONFIG_MFD_SM501_GPIO=y CONFIG_HTC_PASIC3=m CONFIG_UCB1400_CORE=m +CONFIG_MFD_LM3533=m # CONFIG_TPS6105X is not set CONFIG_TPS65010=m CONFIG_TPS6507X=m CONFIG_MFD_TPS65217=m # CONFIG_MFD_TMIO is not set -CONFIG_MFD_WM8400=m CONFIG_MFD_PCF50633=m CONFIG_PCF50633_ADC=m CONFIG_PCF50633_GPIO=m +CONFIG_MFD_MC13783=m +CONFIG_MFD_MC13XXX=m +CONFIG_MFD_MC13XXX_I2C=m CONFIG_ABX500_CORE=y -CONFIG_AB8500_CORE=y -# CONFIG_AB8500_DEBUG is not set CONFIG_MFD_CS5535=m # CONFIG_MFD_TIMBERDALE is not set CONFIG_LPC_SCH=m +CONFIG_LPC_ICH=m CONFIG_MFD_RDC321X=m # CONFIG_MFD_JANZ_CMODIO is not set CONFIG_MFD_VX855=m @@ -3274,7 +3326,9 @@ CONFIG_MEDIA_TUNER_MXL5007T=m CONFIG_MEDIA_TUNER_MC44S803=m CONFIG_MEDIA_TUNER_MAX2165=m CONFIG_MEDIA_TUNER_TDA18218=m +CONFIG_MEDIA_TUNER_FC0011=m CONFIG_MEDIA_TUNER_TDA18212=m +CONFIG_MEDIA_TUNER_TUA9001=m CONFIG_VIDEO_V4L2=m CONFIG_VIDEOBUF_GEN=m CONFIG_VIDEOBUF_DMA_SG=m @@ -3393,6 +3447,7 @@ CONFIG_VIDEO_THS7303=m CONFIG_VIDEO_M52790=m CONFIG_VIDEO_VIVI=m CONFIG_V4L_USB_DRIVERS=y +CONFIG_VIDEO_AU0828=m CONFIG_USB_VIDEO_CLASS=m CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y CONFIG_USB_GSPCA=m @@ -3450,7 +3505,7 @@ CONFIG_VIDEO_HDPVR=m CONFIG_VIDEO_EM28XX=m CONFIG_VIDEO_EM28XX_ALSA=m CONFIG_VIDEO_EM28XX_DVB=m -CONFIG_VIDEO_EM28XX_RC=y +CONFIG_VIDEO_EM28XX_RC=m CONFIG_VIDEO_TLG2300=m CONFIG_VIDEO_CX231XX=m CONFIG_VIDEO_CX231XX_RC=y @@ -3460,7 +3515,6 @@ CONFIG_VIDEO_TM6000=m CONFIG_VIDEO_TM6000_ALSA=m CONFIG_VIDEO_TM6000_DVB=m CONFIG_VIDEO_USBVISION=m -CONFIG_USB_ET61X251=m CONFIG_USB_SN9C102=m CONFIG_USB_PWC=m # CONFIG_USB_PWC_DEBUG is not set @@ -3470,7 +3524,6 @@ CONFIG_USB_ZR364XX=m CONFIG_USB_STKWEBCAM=m CONFIG_USB_S2255=m CONFIG_V4L_PCI_DRIVERS=y -CONFIG_VIDEO_AU0828=m CONFIG_VIDEO_BT848=m CONFIG_VIDEO_BT848_DVB=y CONFIG_VIDEO_CX18=m @@ -3584,6 +3637,7 @@ CONFIG_DVB_USB_TECHNISAT_USB2=m CONFIG_DVB_USB_IT913X=m CONFIG_DVB_USB_MXL111SF=m CONFIG_DVB_USB_RTL28XXU=m +CONFIG_DVB_USB_AF9035=m CONFIG_DVB_TTUSB_BUDGET=m CONFIG_DVB_TTUSB_DEC=m CONFIG_SMS_SIANO_MDTV=m @@ -3733,8 +3787,11 @@ CONFIG_DVB_OR51132=m CONFIG_DVB_BCM3510=m CONFIG_DVB_LGDT330X=m CONFIG_DVB_LGDT3305=m +CONFIG_DVB_LG2160=m CONFIG_DVB_S5H1409=m CONFIG_DVB_AU8522=m +CONFIG_DVB_AU8522_DTV=m +CONFIG_DVB_AU8522_V4L=m CONFIG_DVB_S5H1411=m # @@ -3766,6 +3823,7 @@ CONFIG_DVB_TDA665x=m CONFIG_DVB_IX2505V=m CONFIG_DVB_IT913X_FE=m CONFIG_DVB_M88RS2000=m +CONFIG_DVB_AF9033=m # # Tools to develop new frontends @@ -3812,6 +3870,9 @@ CONFIG_DRM_GMA500=m CONFIG_DRM_GMA600=y CONFIG_DRM_GMA3600=y CONFIG_DRM_UDL=m +CONFIG_DRM_AST=m +CONFIG_DRM_MGAG200=m +CONFIG_DRM_CIRRUS_QEMU=m # CONFIG_STUB_POULSBO is not set CONFIG_VGASTATE=m CONFIG_VIDEO_OUTPUT_CONTROL=m @@ -3883,12 +3944,14 @@ CONFIG_XEN_FBDEV_FRONTEND=m # CONFIG_FB_METRONOME is not set # CONFIG_FB_MB862XX is not set # CONFIG_FB_BROADSHEET is not set +# CONFIG_FB_AUO_K190X is not set # CONFIG_EXYNOS_VIDEO is not set CONFIG_BACKLIGHT_LCD_SUPPORT=y CONFIG_LCD_CLASS_DEVICE=m CONFIG_LCD_PLATFORM=m CONFIG_BACKLIGHT_CLASS_DEVICE=y # CONFIG_BACKLIGHT_GENERIC is not set +CONFIG_BACKLIGHT_LM3533=m CONFIG_BACKLIGHT_PROGEAR=m CONFIG_BACKLIGHT_APPLE=m # CONFIG_BACKLIGHT_SAHARA is not set @@ -3918,6 +3981,7 @@ CONFIG_FONT_8x16=y # CONFIG_FONT_SUN8x16 is not set # CONFIG_FONT_SUN12x22 is not set # CONFIG_FONT_10x18 is not set +CONFIG_FONT_AUTOSELECT=y # CONFIG_LOGO is not set CONFIG_SOUND=m CONFIG_SOUND_OSS_CORE=y @@ -4027,7 +4091,6 @@ CONFIG_SND_HDA_INPUT_BEEP_MODE=1 CONFIG_SND_HDA_INPUT_JACK=y CONFIG_SND_HDA_PATCH_LOADER=y CONFIG_SND_HDA_CODEC_REALTEK=y -CONFIG_SND_HDA_ENABLE_REALTEK_QUIRKS=y CONFIG_SND_HDA_CODEC_ANALOG=y CONFIG_SND_HDA_CODEC_SIGMATEL=y CONFIG_SND_HDA_CODEC_VIA=y @@ -4084,16 +4147,13 @@ CONFIG_SND_PDAUDIOCF=m # CONFIG_SND_SOC is not set # CONFIG_SOUND_PRIME is not set CONFIG_AC97_BUS=m -CONFIG_HID_SUPPORT=y -CONFIG_HID=m -CONFIG_HIDRAW=y # -# USB Input Devices +# HID support # -CONFIG_USB_HID=m -CONFIG_HID_PID=y -CONFIG_USB_HIDDEV=y +CONFIG_HID=m +CONFIG_HIDRAW=y +CONFIG_HID_GENERIC=m # # Special HID drivers @@ -4102,6 +4162,7 @@ CONFIG_HID_A4TECH=m CONFIG_HID_ACRUX=m CONFIG_HID_ACRUX_FF=y CONFIG_HID_APPLE=m +CONFIG_HID_AUREAL=m CONFIG_HID_BELKIN=m CONFIG_HID_CHERRY=m CONFIG_HID_CHICONY=m @@ -4159,12 +4220,18 @@ CONFIG_HID_TOPSEED=m CONFIG_HID_THRUSTMASTER=m CONFIG_THRUSTMASTER_FF=y CONFIG_HID_WACOM=m -CONFIG_HID_WACOM_POWER_SUPPLY=y CONFIG_HID_WIIMOTE=m CONFIG_HID_WIIMOTE_EXT=y CONFIG_HID_ZEROPLUS=m CONFIG_ZEROPLUS_FF=y CONFIG_HID_ZYDACRON=m + +# +# USB HID support +# +CONFIG_USB_HID=m +CONFIG_HID_PID=y +CONFIG_USB_HIDDEV=y CONFIG_USB_ARCH_HAS_OHCI=y CONFIG_USB_ARCH_HAS_EHCI=y CONFIG_USB_ARCH_HAS_XHCI=y @@ -4178,8 +4245,6 @@ CONFIG_USB=m # # Miscellaneous USB options # -CONFIG_USB_DEVICEFS=y -# CONFIG_USB_DEVICE_CLASS is not set CONFIG_USB_DYNAMIC_MINORS=y CONFIG_USB_SUSPEND=y # CONFIG_USB_OTG is not set @@ -4218,9 +4283,15 @@ CONFIG_USB_R8A66597_HCD=m CONFIG_USB_RENESAS_USBHS_HCD=m CONFIG_USB_WHCI_HCD=m CONFIG_USB_HWA_HCD=m +# CONFIG_USB_HCD_BCMA is not set +# CONFIG_USB_HCD_SSB is not set CONFIG_USB_MUSB_HDRC=m CONFIG_USB_MUSB_TUSB6010=m CONFIG_MUSB_PIO_ONLY=y +CONFIG_USB_CHIPIDEA=m +CONFIG_USB_CHIPIDEA_UDC=y +CONFIG_USB_CHIPIDEA_HOST=y +# CONFIG_USB_CHIPIDEA_DEBUG is not set CONFIG_USB_RENESAS_USBHS=m # @@ -4334,6 +4405,7 @@ CONFIG_USB_SERIAL_OPTICON=m CONFIG_USB_SERIAL_VIVOPAY_SERIAL=m CONFIG_USB_SERIAL_ZIO=m CONFIG_USB_SERIAL_SSU100=m +CONFIG_USB_SERIAL_QT2=m # CONFIG_USB_SERIAL_DEBUG is not set # @@ -4360,6 +4432,11 @@ CONFIG_USB_IOWARRIOR=m CONFIG_USB_TEST=m CONFIG_USB_ISIGHTFW=m CONFIG_USB_YUREX=m + +# +# USB Physical Layer drivers +# +CONFIG_USB_ISP1301=m CONFIG_USB_ATM=m CONFIG_USB_SPEEDTOUCH=m CONFIG_USB_CXACRU=m @@ -4371,13 +4448,16 @@ CONFIG_USB_GADGET=m # CONFIG_USB_GADGET_DEBUG_FS is not set CONFIG_USB_GADGET_VBUS_DRAW=2 CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS=2 + +# +# USB Peripheral Controller +# CONFIG_USB_R8A66597=m CONFIG_USB_RENESAS_USBHS_UDC=m CONFIG_USB_MV_UDC=m CONFIG_USB_GADGET_MUSB_HDRC=m CONFIG_USB_M66592=m CONFIG_USB_AMD5536UDC=m -CONFIG_USB_CI13XXX_PCI=m CONFIG_USB_NET2272=m CONFIG_USB_NET2272_DMA=y CONFIG_USB_NET2280=m @@ -4401,6 +4481,7 @@ CONFIG_USB_FUNCTIONFS_GENERIC=y CONFIG_USB_FILE_STORAGE=m # CONFIG_USB_FILE_STORAGE_TEST is not set # CONFIG_USB_MASS_STORAGE is not set +CONFIG_USB_GADGET_TARGET=m CONFIG_USB_G_SERIAL=m CONFIG_USB_MIDI_GADGET=m CONFIG_USB_G_PRINTER=m @@ -4420,7 +4501,6 @@ CONFIG_USB_G_WEBCAM=m CONFIG_USB_OTG_UTILS=y # CONFIG_USB_GPIO_VBUS is not set CONFIG_NOP_USB_XCEIV=m -# CONFIG_AB8500_USB is not set CONFIG_UWB=m CONFIG_UWB_HWA=m CONFIG_UWB_WHCI=m @@ -4475,6 +4555,7 @@ CONFIG_LEDS_CLASS=y # LED drivers # CONFIG_LEDS_LM3530=m +CONFIG_LEDS_LM3533=m CONFIG_LEDS_PCA9532=m # CONFIG_LEDS_PCA9532_GPIO is not set # CONFIG_LEDS_GPIO is not set @@ -4488,6 +4569,7 @@ CONFIG_LEDS_BD2802=m CONFIG_LEDS_INTEL_SS4200=m CONFIG_LEDS_LT3593=m CONFIG_LEDS_DELL_NETBOOKS=m +CONFIG_LEDS_MC13783=m CONFIG_LEDS_TCA6507=m CONFIG_LEDS_OT200=m CONFIG_LEDS_TRIGGERS=y @@ -4504,6 +4586,7 @@ CONFIG_LEDS_TRIGGER_DEFAULT_ON=m # # iptables trigger is under Netfilter config (LED target) # +CONFIG_LEDS_TRIGGER_TRANSIENT=m CONFIG_ACCESSIBILITY=y CONFIG_A11Y_BRAILLE_CONSOLE=y # CONFIG_INFINIBAND is not set @@ -4589,11 +4672,11 @@ CONFIG_RTC_DRV_BQ4802=m CONFIG_RTC_DRV_RP5C01=m CONFIG_RTC_DRV_V3020=m CONFIG_RTC_DRV_PCF50633=m -CONFIG_RTC_DRV_AB8500=m # # on-CPU RTC drivers # +CONFIG_RTC_DRV_MC13XXX=m CONFIG_DMADEVICES=y # CONFIG_DMADEVICES_DEBUG is not set @@ -4636,6 +4719,7 @@ CONFIG_VIRTIO_RING=m CONFIG_VIRTIO_PCI=m CONFIG_VIRTIO_BALLOON=m CONFIG_VIRTIO_MMIO=m +CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y # # Microsoft Hyper-V guest support @@ -4675,6 +4759,8 @@ CONFIG_PRISM2_USB=m CONFIG_ECHO=m CONFIG_COMEDI=m # CONFIG_COMEDI_DEBUG is not set +CONFIG_COMEDI_DEFAULT_BUF_SIZE_KB=2048 +CONFIG_COMEDI_DEFAULT_BUF_MAXSIZE_KB=20480 CONFIG_COMEDI_MISC_DRIVERS=m CONFIG_COMEDI_KCOMEDILIB=m CONFIG_COMEDI_BOND=m @@ -4706,12 +4792,13 @@ CONFIG_COMEDI_ADL_PCI9118=m CONFIG_COMEDI_ADV_PCI1710=m CONFIG_COMEDI_ADV_PCI1723=m CONFIG_COMEDI_ADV_PCI_DIO=m -CONFIG_COMEDI_AMPLC_DIO200=m -CONFIG_COMEDI_AMPLC_PC236=m -CONFIG_COMEDI_AMPLC_PC263=m +CONFIG_COMEDI_AMPLC_DIO200_PCI=m +CONFIG_COMEDI_AMPLC_PC236_PCI=m +CONFIG_COMEDI_AMPLC_PC263_PCI=m CONFIG_COMEDI_AMPLC_PCI224=m CONFIG_COMEDI_AMPLC_PCI230=m CONFIG_COMEDI_CONTEC_PCI_DIO=m +CONFIG_COMEDI_DAS08_PCI=m CONFIG_COMEDI_DT3000=m CONFIG_COMEDI_DYNA_PCI10XX=m CONFIG_COMEDI_UNIOXX5=m @@ -4758,8 +4845,11 @@ CONFIG_COMEDI_MITE=m CONFIG_COMEDI_NI_TIO=m CONFIG_COMEDI_NI_LABPC=m CONFIG_COMEDI_8255=m -CONFIG_COMEDI_DAS08=m CONFIG_COMEDI_FC=m +CONFIG_COMEDI_AMPLC_DIO200=m +CONFIG_COMEDI_AMPLC_PC236=m +CONFIG_COMEDI_AMPLC_PC263=m +CONFIG_COMEDI_DAS08=m CONFIG_ASUS_OLED=m # CONFIG_PANEL is not set CONFIG_R8187SE=m @@ -4784,12 +4874,9 @@ CONFIG_LINE6_USB=m # CONFIG_LINE6_USB_RAW is not set # CONFIG_LINE6_USB_IMPULSE_RESPONSE is not set CONFIG_USB_SERIAL_QUATECH2=m -CONFIG_USB_SERIAL_QUATECH_USB2=m CONFIG_VT6655=m CONFIG_VT6656=m -# CONFIG_VME_BUS is not set CONFIG_DX_SEP=m -# CONFIG_IIO is not set CONFIG_ZRAM=m # CONFIG_ZRAM_DEBUG is not set CONFIG_ZCACHE=y @@ -4827,7 +4914,6 @@ CONFIG_SPEAKUP_SYNTH_TXPRT=m CONFIG_SPEAKUP_SYNTH_DUMMY=m CONFIG_TOUCHSCREEN_CLEARPAD_TM1217=m CONFIG_TOUCHSCREEN_SYNAPTICS_I2C_RMI4=m -CONFIG_INTEL_MEI=m CONFIG_STAGING_MEDIA=y CONFIG_DVB_AS102=m CONFIG_DVB_CXD2099=m @@ -4865,6 +4951,16 @@ CONFIG_LIRC_ZILOG=m # CONFIG_ANDROID is not set # CONFIG_PHONE is not set CONFIG_USB_WPAN_HCD=m +CONFIG_IPACK_BUS=m +CONFIG_BOARD_TPCI200=m +CONFIG_SERIAL_IPOCTAL=m +CONFIG_WIMAX_GDM72XX=m +CONFIG_WIMAX_GDM72XX_QOS=y +CONFIG_WIMAX_GDM72XX_K_MODE=y +CONFIG_WIMAX_GDM72XX_WIMAX2=y +CONFIG_WIMAX_GDM72XX_USB=y +# CONFIG_WIMAX_GDM72XX_SDIO is not set +CONFIG_WIMAX_GDM72XX_USB_PM=y CONFIG_X86_PLATFORM_DEVICES=y CONFIG_ACER_WMI=m CONFIG_ACERHDF=m @@ -4938,6 +5034,15 @@ CONFIG_IRQ_REMAP=y # CONFIG_VIRT_DRIVERS=y # CONFIG_PM_DEVFREQ is not set +CONFIG_EXTCON=m + +# +# Extcon Device Drivers +# +CONFIG_EXTCON_GPIO=m +CONFIG_MEMORY=y +# CONFIG_IIO is not set +# CONFIG_VME_BUS is not set # # Firmware Drivers @@ -5088,11 +5193,9 @@ CONFIG_JFFS2_ZLIB=y CONFIG_JFFS2_RTIME=y # CONFIG_JFFS2_RUBIN is not set CONFIG_UBIFS_FS=m -CONFIG_UBIFS_FS_XATTR=y # CONFIG_UBIFS_FS_ADVANCED_COMPR is not set CONFIG_UBIFS_FS_LZO=y CONFIG_UBIFS_FS_ZLIB=y -# CONFIG_UBIFS_FS_DEBUG is not set CONFIG_LOGFS=m CONFIG_CRAMFS=m CONFIG_SQUASHFS=m @@ -5111,6 +5214,7 @@ CONFIG_OMFS_FS=m # CONFIG_QNX6FS_FS is not set # CONFIG_ROMFS_FS is not set CONFIG_PSTORE=y +CONFIG_PSTORE_RAM=m # CONFIG_SYSV_FS is not set CONFIG_UFS_FS=m # CONFIG_UFS_FS_WRITE is not set @@ -5120,6 +5224,7 @@ CONFIG_EXOFS_FS=m CONFIG_ORE=m CONFIG_NETWORK_FILESYSTEMS=y CONFIG_NFS_FS=m +CONFIG_NFS_V2=y CONFIG_NFS_V3=y CONFIG_NFS_V3_ACL=y CONFIG_NFS_V4=y @@ -5208,6 +5313,17 @@ CONFIG_NLS_ISO8859_14=m CONFIG_NLS_ISO8859_15=m CONFIG_NLS_KOI8_R=m CONFIG_NLS_KOI8_U=m +CONFIG_NLS_MAC_ROMAN=m +CONFIG_NLS_MAC_CELTIC=m +CONFIG_NLS_MAC_CENTEURO=m +CONFIG_NLS_MAC_CROATIAN=m +CONFIG_NLS_MAC_CYRILLIC=m +CONFIG_NLS_MAC_GAELIC=m +CONFIG_NLS_MAC_GREEK=m +CONFIG_NLS_MAC_ICELAND=m +CONFIG_NLS_MAC_INUIT=m +CONFIG_NLS_MAC_ROMANIAN=m +CONFIG_NLS_MAC_TURKISH=m CONFIG_NLS_UTF8=m CONFIG_DLM=m # CONFIG_DLM_DEBUG is not set @@ -5223,6 +5339,7 @@ CONFIG_ENABLE_WARN_DEPRECATED=y CONFIG_FRAME_WARN=2048 CONFIG_MAGIC_SYSRQ=y CONFIG_STRIP_ASM_SYMS=y +# CONFIG_READABLE_ASM is not set CONFIG_UNUSED_SYMBOLS=y CONFIG_DEBUG_FS=y # CONFIG_HEADERS_CHECK is not set @@ -5235,6 +5352,8 @@ CONFIG_HARDLOCKUP_DETECTOR=y CONFIG_BOOTPARAM_HARDLOCKUP_PANIC_VALUE=0 # CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 +# CONFIG_PANIC_ON_OOPS is not set +CONFIG_PANIC_ON_OOPS_VALUE=0 CONFIG_DETECT_HUNG_TASK=y CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=120 # CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set @@ -5279,6 +5398,7 @@ CONFIG_RCU_CPU_STALL_TIMEOUT=60 # CONFIG_RCU_CPU_STALL_VERBOSE is not set # CONFIG_RCU_CPU_STALL_INFO is not set # CONFIG_RCU_TRACE is not set +# CONFIG_KPROBES_SANITY_TEST is not set # CONFIG_BACKTRACE_SELF_TEST is not set # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set # CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set @@ -5290,7 +5410,6 @@ CONFIG_CPU_NOTIFIER_ERROR_INJECT=m # CONFIG_DEBUG_PAGEALLOC is not set CONFIG_USER_STACKTRACE_SUPPORT=y CONFIG_NOP_TRACER=y -CONFIG_HAVE_FTRACE_NMI_ENTER=y CONFIG_HAVE_FUNCTION_TRACER=y CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y CONFIG_HAVE_FUNCTION_GRAPH_FP_TEST=y @@ -5301,7 +5420,6 @@ CONFIG_HAVE_SYSCALL_TRACEPOINTS=y CONFIG_HAVE_C_RECORDMCOUNT=y CONFIG_TRACER_MAX_TRACE=y CONFIG_RING_BUFFER=y -CONFIG_FTRACE_NMI_ENTER=y CONFIG_EVENT_TRACING=y CONFIG_EVENT_POWER_TRACING_DEPRECATED=y CONFIG_CONTEXT_SWITCH_TRACER=y @@ -5321,6 +5439,9 @@ CONFIG_BRANCH_PROFILE_NONE=y # CONFIG_PROFILE_ALL_BRANCHES is not set CONFIG_STACK_TRACER=y CONFIG_BLK_DEV_IO_TRACE=y +CONFIG_KPROBE_EVENT=y +CONFIG_UPROBE_EVENT=y +CONFIG_PROBE_EVENTS=y CONFIG_DYNAMIC_FTRACE=y CONFIG_FUNCTION_PROFILER=y CONFIG_FTRACE_MCOUNT_RECORD=y @@ -5352,6 +5473,7 @@ CONFIG_DEBUG_RODATA=y # CONFIG_IOMMU_DEBUG is not set # CONFIG_IOMMU_STRESS is not set CONFIG_HAVE_MMIOTRACE_SUPPORT=y +# CONFIG_X86_DECODER_SELFTEST is not set CONFIG_IO_DELAY_TYPE_0X80=0 CONFIG_IO_DELAY_TYPE_0XED=1 CONFIG_IO_DELAY_TYPE_UDELAY=2 @@ -5533,6 +5655,7 @@ CONFIG_HAVE_KVM_EVENTFD=y CONFIG_KVM_APIC_ARCHITECTURE=y CONFIG_KVM_MMIO=y CONFIG_KVM_ASYNC_PF=y +CONFIG_HAVE_KVM_MSI=y CONFIG_VIRTUALIZATION=y CONFIG_KVM=m CONFIG_KVM_INTEL=m @@ -5546,6 +5669,8 @@ CONFIG_BINARY_PRINTF=y # CONFIG_RAID6_PQ=m CONFIG_BITREVERSE=y +CONFIG_GENERIC_STRNCPY_FROM_USER=y +CONFIG_GENERIC_STRNLEN_USER=y CONFIG_GENERIC_FIND_FIRST_BIT=y CONFIG_GENERIC_PCI_IOMAP=y CONFIG_GENERIC_IOMAP=y @@ -5583,6 +5708,8 @@ CONFIG_DECOMPRESS_XZ=y CONFIG_DECOMPRESS_LZO=y CONFIG_GENERIC_ALLOCATOR=y CONFIG_REED_SOLOMON=m +CONFIG_REED_SOLOMON_ENC8=y +CONFIG_REED_SOLOMON_DEC8=y CONFIG_REED_SOLOMON_DEC16=y CONFIG_BCH=m CONFIG_BCH_CONST_PARAMS=y @@ -5601,3 +5728,4 @@ CONFIG_NLATTR=y CONFIG_LRU_CACHE=m CONFIG_AVERAGE=y CONFIG_CORDIC=m +CONFIG_DDR=y diff --git a/libre/linux-libre/i915-fix-ghost-tv-output.patch b/libre/linux-libre/i915-fix-ghost-tv-output.patch deleted file mode 100644 index 3b631361a..000000000 --- a/libre/linux-libre/i915-fix-ghost-tv-output.patch +++ /dev/null @@ -1,26 +0,0 @@ -Signed-off-by: Zhao Yakui <yakui.zhao@intel.com> -Tested-by: Santi <santi@agolina.net> ---- - drivers/gpu/drm/i915/intel_tv.c | 9 +++++++++ - 1 files changed, 9 insertions(+), 0 deletions(-) - -diff --git a/drivers/gpu/drm/i915/intel_tv.c b/drivers/gpu/drm/i915/intel_tv.c -index dc83b7a..c8f67bf 100644 ---- a/drivers/gpu/drm/i915/intel_tv.c -+++ b/drivers/gpu/drm/i915/intel_tv.c -@@ -1267,6 +1267,15 @@ - DAC_B_0_7_V | - DAC_C_0_7_V); - -+ /* -+ * The TV sense state should be cleared to zero on cantiga platform. Otherwise -+ * the TV is misdetected. This is hardware requirement. -+ */ -+ if (IS_GM45(dev)) -+ tv_dac &= ~(TVDAC_STATE_CHG_EN | TVDAC_A_SENSE_CTL | -+ TVDAC_B_SENSE_CTL | TVDAC_C_SENSE_CTL); -+ -+ - I915_WRITE(TV_CTL, tv_ctl); - I915_WRITE(TV_DAC, tv_dac); - POSTING_READ(TV_DAC); diff --git a/libre/linux-libre/linux-libre.install b/libre/linux-libre/linux-libre.install index 38394ad7b..5f1005477 100644 --- a/libre/linux-libre/linux-libre.install +++ b/libre/linux-libre/linux-libre.install @@ -2,7 +2,7 @@ # arg 2: the old package version KERNEL_NAME= -KERNEL_VERSION=3.4.6-1-LIBRE +KERNEL_VERSION=3.5.0-2-LIBRE # set a sane PATH to ensure that critical utils like depmod will be found export PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin' diff --git a/libre/lirc-libre/PKGBUILD b/libre/lirc-libre/PKGBUILD index 1738c0aae..4b3384c25 100644 --- a/libre/lirc-libre/PKGBUILD +++ b/libre/lirc-libre/PKGBUILD @@ -6,14 +6,14 @@ _pkgbase=lirc pkgbase=lirc-libre pkgname=('lirc-libre' 'lirc-utils-libre') pkgver=0.9.0 -pkgrel=22 +pkgrel=25 epoch=1 -_extramodules=extramodules-3.4-LIBRE +_extramodules=extramodules-3.5-LIBRE arch=('i686' 'x86_64' 'mips64el') url="http://www.lirc.org/" license=('GPL') ### NOTICE don't forget to bump version in depends in package_lirc -makedepends=('help2man' 'linux-libre-headers>=3.4' 'linux-libre-headers<3.5' 'alsa-lib' 'libx11' 'libftdi' 'libirman' 'python2') +makedepends=('help2man' 'linux-libre-headers>=3.5' 'linux-libre-headers<3.6' 'alsa-lib' 'libx11' 'libftdi' 'libirman' 'python2') options=('!makeflags' '!strip') source=(http://prdownloads.sourceforge.net/${_pkgbase}/${_pkgbase}-${pkgver}.tar.bz2 lirc_wpc8769l.patch diff --git a/libre/lirc-libre/lirc.install b/libre/lirc-libre/lirc.install index c50e384c8..b39282da6 100644 --- a/libre/lirc-libre/lirc.install +++ b/libre/lirc-libre/lirc.install @@ -1,4 +1,4 @@ -EXTRAMODULES=extramodules-3.4-LIBRE +EXTRAMODULES=extramodules-3.5-LIBRE post_install() { # updating module dependencies diff --git a/libre/luxrays-libre/PKGBUILD b/libre/luxrays-libre/PKGBUILD index 279e6622e..54cc019c9 100644 --- a/libre/luxrays-libre/PKGBUILD +++ b/libre/luxrays-libre/PKGBUILD @@ -3,9 +3,15 @@ # Maintainer (Parabola): Márcio Silva <coadde@adinet.com.uy> _pkgname=luxrays pkgname=luxrays-libre +<<<<<<< HEAD pkgver=1.0rc3 _pkgver=eb749c000ffc pkgrel=1 +======= +pkgver=1.0rc2 +_pkgver=8707be9e6dc9 +pkgrel=2 +>>>>>>> 49036a91fc7b4725702d34335419075ec4aff4f3 epoch=0 pkgdesc="Accelerate the ray intersection process by using CPUs (without OpenCL)" arch=('i686' 'x86_64' 'mips64el') diff --git a/libre/luxrender-libre/PKGBUILD b/libre/luxrender-libre/PKGBUILD index 1430ae826..122a87207 100644 --- a/libre/luxrender-libre/PKGBUILD +++ b/libre/luxrender-libre/PKGBUILD @@ -6,7 +6,7 @@ pkgname=luxrender-libre pkgver=1.0rc2 _pkgver=008805644181 -pkgrel=2 +pkgrel=3 pkgdesc="Rendering system for physically correct, unbiased image synthesis (without OpenCL)" arch=('i686' 'x86_64' 'mips64el') url="http://www.luxrender.net/" diff --git a/libre/parabola-themes-slim/PKGBUILD b/libre/parabola-themes-slim/PKGBUILD index 9c29caf0b..a921253da 100644 --- a/libre/parabola-themes-slim/PKGBUILD +++ b/libre/parabola-themes-slim/PKGBUILD @@ -6,7 +6,7 @@ replaces=('archlinux-themes-slim') conflicts=('archlinux-themes-slim') pkgname=parabola-themes-slim pkgver=1.0 -pkgrel=1 +pkgrel=1.1 pkgdesc="a theme parabolero to the Slim login manager" arch=('any') url="https://parabolagnulinux.org/" diff --git a/libre/virtualbox-modules-lts/60-vboxguest.rules b/libre/virtualbox-libre-modules-lts/60-vboxguest.rules index 6285f7249..6285f7249 100644 --- a/libre/virtualbox-modules-lts/60-vboxguest.rules +++ b/libre/virtualbox-libre-modules-lts/60-vboxguest.rules diff --git a/libre/virtualbox-modules-lts/LocalConfig.kmk b/libre/virtualbox-libre-modules-lts/LocalConfig.kmk index af79f90cd..af79f90cd 100644 --- a/libre/virtualbox-modules-lts/LocalConfig.kmk +++ b/libre/virtualbox-libre-modules-lts/LocalConfig.kmk diff --git a/libre/virtualbox-libre-modules-lts/PKGBUILD b/libre/virtualbox-libre-modules-lts/PKGBUILD new file mode 100644 index 000000000..b571d605b --- /dev/null +++ b/libre/virtualbox-libre-modules-lts/PKGBUILD @@ -0,0 +1,153 @@ +# $Id$ +# Maintainer: Bartłomiej Piotrowski <nospam@bpiotrowski.pl> +# Maintainer (Parabola): Márcio Silva <coadde@lavabit.com> +# Maintainer (Parabola): André Silva <emulatorman@lavabit.com> +# Maintainer (Parabola): Jorge López <jorginho@lavabit.com> + +pkgbase=virtualbox-libre-modules-lts +pkgname=('virtualbox-libre-modules-lts' 'virtualbox-libre-parabola-modules-lts') +pkgver=4.1.18 +pkgrel=3.1 +arch=('i686' 'x86_64') +url='http://virtualbox.org' +license=('GPL') +makedepends=('libstdc++5' 'bin86' 'dev86' 'iasl' 'libxslt' 'libxml2' 'libpng' 'libidl2' 'xalan-c' 'sdl' 'linux-libre-lts' 'linux-libre-lts-headers') +[[ $CARCH == "x86_64" ]] && makedepends=("${makedepends[@]}" 'gcc-multilib' 'lib32-glibc') +source=(http://download.virtualbox.org/virtualbox/${pkgver}/VirtualBox-${pkgver}.tar.bz2 + LocalConfig.kmk 60-vboxguest.rules os_blag_64.png os_blag.png + os_dragora_64.png os_dragora.png os_dynebolic.png os_gnewsense_64.png os_gnewsense.png + os_gnu_64.png os_gnuhurd.png os_gnulinux_64.png os_gnulinux.png os_gnu.png + os_musix_64.png os_musix.png os_parabola_64.png os_parabola.png os_trisquel_64.png + os_trisquel.png os_ututo_64.png os_ututo.png os_venenux.png libre.patch + free-distros.patch) +md5sums=('38db0a87cba659b484af868b0c2bd3ac' + '4c88bd122677a35f68abd76eb01b378b' + 'ed1341881437455d9735875ddf455fbe' + '8538dba8686d7449cb481c9bae9d722a' + '545c925b46f2ac95e5f8ae407fad101a' + 'f6416f509c2e5460e4dc624e0a57f3c1' + 'bbfb59dd517c020a23701b480187a355' + 'efacfdb61918286ea9bc89866b8fd239' + '7c3eb09995e8bafeef414374e44ad4ce' + 'a49ed3ab6bd0fb084de0ab3dd97ae93e' + '6b432b3305ed446125eef052c38355a6' + 'a70022a468bd3e9daf01818d2d74ac3c' + '6b432b3305ed446125eef052c38355a6' + 'a70022a468bd3e9daf01818d2d74ac3c' + 'a70022a468bd3e9daf01818d2d74ac3c' + '380eb2ab6cad3da198094585853c129c' + 'a60bb9a98abcc3c34156f9051d00df9a' + '3a908ef6952bcf987e63ef2fe4e98d24' + '02e87c39c353634cecacf98f1707fa15' + '0cf41a41e7a415d404d5584e047fd450' + '449cde3b58390284b59c5d663de3edc9' + 'c7951fe6888d939f3a7d0dafe477e82b' + '4da8eeb2ece7e475fc7a0d1003da26c6' + '5e4187af59726d71c5be48d0cd816c34' + 'a9e4724b56ddf99bb2e9a8fab8ad43ba' + 'f7d275fc52e5f3cfafd85646c2914063') + +_extramodules=extramodules-3.0-LIBRE-LTS +_kernver=3.0.38-1-LIBRE-LTS + +export KERN_DIR=/usr/lib/modules/${_kernver}/build/ +export KERN_INCL=/usr/src/linux-${_kernver}/include/ + +build() { + cd "$srcdir/VirtualBox-${pkgver}" + + patch -Np1 -i "$srcdir/libre.patch" + patch -Np1 -i "$srcdir/free-distros.patch" + + ## Removing Nonfree directories + rm -rv "./include/VBox/ExtPack" + rm -rv "./src/VBox/ExtPacks" + rm -rv "./src/VBox/Main/src-helper-apps" + + ## Removing Oracle VM VirtualBox Extension Pack icons + rm -v "./src/VBox/Resources/darwin/virtualbox-vbox-extpack.icns" + rm -v "./src/VBox/Resources/other/virtualbox-vbox-extpack-"{16px,20px,24px,32px,40px,48px,64px,72px,80px,96px,128px,256px,512px}.png + rm -v "./src/VBox/Resources/win/OSE/virtualbox-vbox-extpack.ico" + rm -v "./src/VBox/Frontends/VirtualBox/images/extension_pack_"{16px,32px,disabled{_16px,_32px},install{_16px,_32px},install_disabled{_16px,_32px},uninstall{_16px,_32px},uninstall_disabled{_16px,_32px}}.png + + ## Adding free distros icons + for i in {gnuhurd,dynebolic,venenux,{gnu{,linux},parabola,gnewsense,blag,dragora,ututo,musix,trisquel}{,_64}}; do + cp -v "$srcdir/os_${i}.png" "./src/VBox/Frontends/VirtualBox/images" + done + + ## Removing non-free OS icons + rm -v "./src/VBox/Frontends/VirtualBox/images/os_"{{{arch,turbo}linux,debian,fedora,gentoo,linux{24,26},macosx,mandriva,{free,net,open}bsd,redhat,solaris,opensuse,oracle{,solaris},ubuntu,win{2k{3,8},7,8,vista,xp},xandros}{,_64},dos,jrockitve,l4,linux{,22,_other},netware,qnx,os2{_other,ecs,warp{3,4,45}},win{2k,31,95,98,_other,me,nt4}}.png + + cp "$srcdir/LocalConfig.kmk" . + + ./configure \ + --with-linux=/usr/src/linux-${_kernver} \ + --disable-java \ + --disable-docs \ + --disable-xpcom \ + --disable-python \ + --disable-sdl-ttf \ + --disable-alsa \ + --disable-pulse \ + --disable-dbus \ + --disable-opengl \ + --build-headless \ + --nofatal + source ./env.sh + kmk all + + make -C "$srcdir/VirtualBox-${pkgver}/out/linux.$BUILD_PLATFORM_ARCH/release/bin/src" + make -C "$srcdir/VirtualBox-${pkgver}/out/linux.$BUILD_PLATFORM_ARCH/release/bin/additions/src" +} + +package_virtualbox-libre-parabola-modules-lts(){ + pkgdesc="Additions only for Parabola guests (long-term supported kernel modules)" + license=('GPL') + install=virtualbox-libre-parabola-modules-lts.install + depends=('linux-libre-lts>=3.0' 'linux-libre-lts<3.1') + replaces=('virtualbox-archlinux-modules-lts') + conflicts=('virtualbox-archlinux-modules-lts') + provides=("virtualbox-archlinux-modules-lts=$pkgver" "virtualbox-archlinux-modules=$pkgver") + + source "$srcdir/VirtualBox-${pkgver}/env.sh" + + cd "$srcdir/VirtualBox-${pkgver}/out/linux.$BUILD_PLATFORM_ARCH/release/bin/additions/src" + + for module in vboxguest.ko vboxsf.ko vboxvideo.ko; do + install -D -m644 ${module} \ + "$pkgdir/usr/lib/modules/${_extramodules}/${module}" + done + + install -D -m 0644 "$srcdir/60-vboxguest.rules" \ + "$pkgdir/usr/lib/udev/rules.d/60-vboxguest.rules" + + find "${pkgdir}" -name '*.ko' -exec gzip -9 {} \; +} + +package_virtualbox-libre-modules-lts(){ + pkgdesc="Long-term supported kernel modules for VirtualBox" + license=('GPL') + install=virtualbox-libre-modules-lts.install + depends=('linux-libre-lts>=3.0' 'linux-libre-lts<3.1') + replaces=('virtualbox-modules-lts') + conflicts=('virtualbox-modules-lts') + provides=("virtualbox-modules-lts=$pkgver" "virtualbox-modules=$pkgver") + + source "$srcdir/VirtualBox-${pkgver}/env.sh" + + cd "$srcdir/VirtualBox-${pkgver}/out/linux.$BUILD_PLATFORM_ARCH/release/bin/src" + + install -D -m644 vboxdrv.ko \ + "$pkgdir/usr/lib/modules/${_extramodules}/vboxdrv.ko" + + install -D -m644 vboxnetadp.ko \ + "$pkgdir/usr/lib/modules/${_extramodules}/vboxnetadp.ko" + + install -D -m644 vboxnetflt.ko \ + "$pkgdir/usr/lib/modules/${_extramodules}/vboxnetflt.ko" + + install -D -m644 vboxpci.ko \ + "$pkgdir/usr/lib/modules/${_extramodules}/vboxpci.ko" + + find "${pkgdir}" -name '*.ko' -exec gzip -9 {} + +} diff --git a/libre/virtualbox-libre-modules-lts/free-distros.patch b/libre/virtualbox-libre-modules-lts/free-distros.patch new file mode 100644 index 000000000..7920fb6ab --- /dev/null +++ b/libre/virtualbox-libre-modules-lts/free-distros.patch @@ -0,0 +1,1383 @@ +--- VirtualBox-4.1.18.orig/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UINewVMWzd.cpp 2012-07-25 14:51:03.569003667 -0300 ++++ VirtualBox-4.1.18/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UINewVMWzd.cpp 2012-07-25 14:51:03.652333615 -0300 +@@ -44,94 +44,38 @@ + * first matching string found, will be used. */ + static const osTypePattern gs_OSTypePattern[] = + { +- { QRegExp("DOS", Qt::CaseInsensitive), "DOS" }, + +- /* Windows */ +- { QRegExp("Wi.*98", Qt::CaseInsensitive), "Windows98" }, +- { QRegExp("Wi.*95", Qt::CaseInsensitive), "Windows95" }, +- { QRegExp("Wi.*Me", Qt::CaseInsensitive), "WindowsMe" }, +- { QRegExp("(Wi.*NT)|(NT4)", Qt::CaseInsensitive), "WindowsNT4" }, +- { QRegExp("((Wi.*XP)|(\\bXP\\b)).*64", Qt::CaseInsensitive), "WindowsXP_64" }, +- { QRegExp("(Wi.*XP)|(\\bXP\\b)", Qt::CaseInsensitive), "WindowsXP" }, +- { QRegExp("((Wi.*2003)|(W2K3)).*64", Qt::CaseInsensitive), "Windows2003_64" }, +- { QRegExp("(Wi.*2003)|(W2K3)", Qt::CaseInsensitive), "Windows2003" }, +- { QRegExp("((Wi.*V)|(Vista)).*64", Qt::CaseInsensitive), "WindowsVista_64" }, +- { QRegExp("(Wi.*V)|(Vista)", Qt::CaseInsensitive), "WindowsVista" }, +- { QRegExp("((Wi.*2008)|(W2K8)).*64", Qt::CaseInsensitive), "Windows2008_64" }, +- { QRegExp("(Wi.*2008)|(W2K8)", Qt::CaseInsensitive), "Windows2008" }, +- { QRegExp("(Wi.*2000)|(W2K)", Qt::CaseInsensitive), "Windows2000" }, +- { QRegExp("(Wi.*7.*64)|(W7.*64)", Qt::CaseInsensitive), "Windows7_64" }, +- { QRegExp("(Wi.*7)|(W7)", Qt::CaseInsensitive), "Windows7" }, +- { QRegExp("(Wi.*8.*64)|(W8.*64)", Qt::CaseInsensitive), "Windows8_64" }, +- { QRegExp("(Wi.*8)|(W8)", Qt::CaseInsensitive), "Windows8" }, +- { QRegExp("Wi.*3", Qt::CaseInsensitive), "Windows31" }, +- { QRegExp("Wi", Qt::CaseInsensitive), "WindowsXP" }, +- +- /* Solaris */ +- { QRegExp("((Op.*So)|(os20[01][0-9])|(So.*1[01])|(India)|(Neva)).*64", Qt::CaseInsensitive), "OpenSolaris_64" }, +- { QRegExp("(Op.*So)|(os20[01][0-9])|(So.*1[01])|(India)|(Neva)", Qt::CaseInsensitive), "OpenSolaris" }, +- { QRegExp("So.*64", Qt::CaseInsensitive), "Solaris_64" }, +- { QRegExp("So", Qt::CaseInsensitive), "Solaris" }, +- +- /* OS/2 */ +- { QRegExp("OS[/|!-]{,1}2.*W.*4.?5", Qt::CaseInsensitive), "OS2Warp45" }, +- { QRegExp("OS[/|!-]{,1}2.*W.*4", Qt::CaseInsensitive), "OS2Warp4" }, +- { QRegExp("OS[/|!-]{,1}2.*W", Qt::CaseInsensitive), "OS2Warp3" }, +- { QRegExp("(OS[/|!-]{,1}2.*e)|(eCS.*)", Qt::CaseInsensitive), "OS2eCS" }, +- { QRegExp("OS[/|!-]{,1}2", Qt::CaseInsensitive), "OS2" }, +- +- /* Code names for Linux distributions */ +- { QRegExp("((edgy)|(feisty)|(gutsy)|(hardy)|(intrepid)|(jaunty)|(karmic)|(lucid)|(maverick)|(natty)|(oneiric)|(precise)).*64", Qt::CaseInsensitive), "Ubuntu_64" }, +- { QRegExp("(edgy)|(feisty)|(gutsy)|(hardy)|(intrepid)|(jaunty)|(karmic)|(lucid)|(maverick)|(natty)|(oneiric)|(precise)", Qt::CaseInsensitive), "Ubuntu" }, +- { QRegExp("((sarge)|(etch)|(lenny)|(squeeze)|(wheezy)|(sid)).*64", Qt::CaseInsensitive), "Debian_64" }, +- { QRegExp("(sarge)|(etch)|(lenny)|(squeeze)|(wheezy)|(sid)", Qt::CaseInsensitive), "Debian" }, +- { QRegExp("((moonshine)|(werewolf)|(sulphur)|(cambridge)|(leonidas)|(constantine)|(goddard)|(laughlin)|(lovelock)|(verne)).*64", Qt::CaseInsensitive), "Fedora_64" }, +- { QRegExp("(moonshine)|(werewolf)|(sulphur)|(cambridge)|(leonidas)|(constantine)|(goddard)|(laughlin)|(lovelock)|(verne)", Qt::CaseInsensitive), "Fedora" }, +- +- /* Regular names of Linux distributions */ +- { QRegExp("Arc.*64", Qt::CaseInsensitive), "ArchLinux_64" }, +- { QRegExp("Arc", Qt::CaseInsensitive), "ArchLinux" }, +- { QRegExp("Deb.*64", Qt::CaseInsensitive), "Debian_64" }, +- { QRegExp("Deb", Qt::CaseInsensitive), "Debian" }, +- { QRegExp("((SU)|(Nov)|(SLE)).*64", Qt::CaseInsensitive), "OpenSUSE_64" }, +- { QRegExp("(SU)|(Nov)|(SLE)", Qt::CaseInsensitive), "OpenSUSE" }, +- { QRegExp("Fe.*64", Qt::CaseInsensitive), "Fedora_64" }, +- { QRegExp("Fe", Qt::CaseInsensitive), "Fedora" }, +- { QRegExp("((Gen)|(Sab)).*64", Qt::CaseInsensitive), "Gentoo_64" }, +- { QRegExp("(Gen)|(Sab)", Qt::CaseInsensitive), "Gentoo" }, +- { QRegExp("Man.*64", Qt::CaseInsensitive), "Mandriva_64" }, +- { QRegExp("Man", Qt::CaseInsensitive), "Mandriva" }, +- { QRegExp("((Red)|(rhel)|(cen)).*64", Qt::CaseInsensitive), "RedHat_64" }, +- { QRegExp("(Red)|(rhel)|(cen)", Qt::CaseInsensitive), "RedHat" }, +- { QRegExp("Tur.*64", Qt::CaseInsensitive), "Turbolinux_64" }, +- { QRegExp("Tur", Qt::CaseInsensitive), "Turbolinux" }, +- { QRegExp("Ub.*64", Qt::CaseInsensitive), "Ubuntu_64" }, +- { QRegExp("Ub", Qt::CaseInsensitive), "Ubuntu" }, +- { QRegExp("Xa.*64", Qt::CaseInsensitive), "Xandros_64" }, +- { QRegExp("Xa", Qt::CaseInsensitive), "Xandros" }, +- { QRegExp("((Or)|(oel)).*64", Qt::CaseInsensitive), "Oracle_64" }, +- { QRegExp("(Or)|(oel)", Qt::CaseInsensitive), "Oracle" }, +- { QRegExp("((Li)|(lnx)).*2.?2", Qt::CaseInsensitive), "Linux22" }, +- { QRegExp("((Li)|(lnx)).*2.?4.*64", Qt::CaseInsensitive), "Linux24_64" }, +- { QRegExp("((Li)|(lnx)).*2.?4", Qt::CaseInsensitive), "Linux24" }, +- { QRegExp("((((Li)|(lnx)).*2.?6)|(LFS)).*64", Qt::CaseInsensitive), "Linux26_64" }, +- { QRegExp("(((Li)|(lnx)).*2.?6)|(LFS)", Qt::CaseInsensitive), "Linux26" }, +- { QRegExp("((Li)|(lnx)).*64", Qt::CaseInsensitive), "Linux26_64" }, +- { QRegExp("(Li)|(lnx)", Qt::CaseInsensitive), "Linux26" }, ++ /* Code names for GNU/Linux distributions */ ++ { QRegExp("((Taranis)|(Dagda)|(Brigantia)).*64", Qt::CaseInsensitive), "Trisquel_64" }, ++ { QRegExp("(Taranis)|(Dagda)|(Brigantia)", Qt::CaseInsensitive), "Trisquel" }, ++ { QRegExp("((metad)|(parkes)|(three)).*64", Qt::CaseInsensitive), "gNewSense_64" }, ++ { QRegExp("(deltah)|(metad)|(parkes)|(three)", Qt::CaseInsensitive), "gNewSense" }, ++ { QRegExp("((90k)|(119k)|(140k)|(160k)|(90000)|(119000)|(140000)|(160000)|(Spartakus)).*64", Qt::CaseInsensitive), "Blag_64" }, ++ { QRegExp("(90k)|(119k)|(140k)|(160k)|(90000)|(119000)|(140000)|(160000)|(Spartakus)", Qt::CaseInsensitive), "Blag" }, ++ ++ /* Regular names of GNU/Linux distributions and GNU-Hurd */ ++ { QRegExp("Pa.*64", Qt::CaseInsensitive), "Parabola_64" }, ++ { QRegExp("Pa", Qt::CaseInsensitive), "Parabola" }, ++ { QRegExp("((gNe)|(new)|(Sen)).*64", Qt::CaseInsensitive), "gNewSense_64" }, ++ { QRegExp("(gNe)|(new)|(Sen)", Qt::CaseInsensitive), "gNewSense" }, ++ { QRegExp("Bla.*64", Qt::CaseInsensitive), "Blag_64" }, ++ { QRegExp("Bla", Qt::CaseInsensitive), "Blag" }, ++ { QRegExp("Dra.*64", Qt::CaseInsensitive), "Dragora_64" }, ++ { QRegExp("Dra", Qt::CaseInsensitive), "Dragora" }, ++ { QRegExp("((Utu)|(XS)).*64", Qt::CaseInsensitive), "Ututo_64" }, ++ { QRegExp("(Utu)|(XS)", Qt::CaseInsensitive), "Ututo" }, ++ { QRegExp("Mus.*64", Qt::CaseInsensitive), "Musix_64" }, ++ { QRegExp("Mus", Qt::CaseInsensitive), "Musix" }, ++ { QRegExp("Tri.*64", Qt::CaseInsensitive), "Trisquel_64" }, ++ { QRegExp("Tri", Qt::CaseInsensitive), "Trisquel" }, ++ { QRegExp("Dyn", Qt::CaseInsensitive), "Dynebolic" }, ++ { QRegExp("Ven", Qt::CaseInsensitive), "Venenux" }, ++ { QRegExp("GNU", Qt::CaseInsensitive), "GNU" }, ++ { QRegExp("Hu", Qt::CaseInsensitive), "GNUHurd" }, ++ { QRegExp("((Li)|(lnx)).*64", Qt::CaseInsensitive), "GNULinux_64" }, ++ { QRegExp("(Li)|(lnx)", Qt::CaseInsensitive), "GNULinux" }, + + /* Other */ +- { QRegExp("L4", Qt::CaseInsensitive), "L4" }, +- { QRegExp("((Fr.*B)|(fbsd)).*64", Qt::CaseInsensitive), "FreeBSD_64" }, +- { QRegExp("(Fr.*B)|(fbsd)", Qt::CaseInsensitive), "FreeBSD" }, +- { QRegExp("Op.*B.*64", Qt::CaseInsensitive), "OpenBSD_64" }, +- { QRegExp("Op.*B", Qt::CaseInsensitive), "OpenBSD" }, +- { QRegExp("Ne.*B.*64", Qt::CaseInsensitive), "NetBSD_64" }, +- { QRegExp("Ne.*B", Qt::CaseInsensitive), "NetBSD" }, +- { QRegExp("QN", Qt::CaseInsensitive), "QNX" }, +- { QRegExp("((Mac)|(Tig)|(Leop)|(osx)).*64", Qt::CaseInsensitive), "MacOS_64" }, +- { QRegExp("(Mac)|(Tig)|(Leop)|(osx)", Qt::CaseInsensitive), "MacOS" }, +- { QRegExp("Net", Qt::CaseInsensitive), "Netware" }, +- { QRegExp("Rocki", Qt::CaseInsensitive), "JRockitVE" }, + { QRegExp("Ot", Qt::CaseInsensitive), "Other" }, + }; + +--- VirtualBox-4.1.18.orig/src/VBox/Main/xml/Settings.cpp 2012-07-25 15:14:50.498764160 -0300 ++++ VirtualBox-4.1.18/src/VBox/Main/xml/Settings.cpp 2012-07-25 15:14:50.548761649 -0300 +@@ -3227,40 +3227,18 @@ + } aConvertOSTypes[] = + { + { "unknown", "Other" }, +- { "dos", "DOS" }, +- { "win31", "Windows31" }, +- { "win95", "Windows95" }, +- { "win98", "Windows98" }, +- { "winme", "WindowsMe" }, +- { "winnt4", "WindowsNT4" }, +- { "win2k", "Windows2000" }, +- { "winxp", "WindowsXP" }, +- { "win2k3", "Windows2003" }, +- { "winvista", "WindowsVista" }, +- { "win2k8", "Windows2008" }, +- { "os2warp3", "OS2Warp3" }, +- { "os2warp4", "OS2Warp4" }, +- { "os2warp45", "OS2Warp45" }, +- { "ecs", "OS2eCS" }, +- { "linux22", "Linux22" }, +- { "linux24", "Linux24" }, +- { "linux26", "Linux26" }, +- { "archlinux", "ArchLinux" }, +- { "debian", "Debian" }, +- { "opensuse", "OpenSUSE" }, +- { "fedoracore", "Fedora" }, +- { "gentoo", "Gentoo" }, +- { "mandriva", "Mandriva" }, +- { "redhat", "RedHat" }, +- { "ubuntu", "Ubuntu" }, +- { "xandros", "Xandros" }, +- { "freebsd", "FreeBSD" }, +- { "openbsd", "OpenBSD" }, +- { "netbsd", "NetBSD" }, +- { "netware", "Netware" }, +- { "solaris", "Solaris" }, +- { "opensolaris", "OpenSolaris" }, +- { "l4", "L4" } ++ { "gnu", "GNU" }, ++ { "gnuhurd", "GNUHurd" }, ++ { "gnulinux", "GNULinux" }, ++ { "parabola", "Parabola" }, ++ { "gnewsense", "gNewSense" }, ++ { "blag", "Blag" }, ++ { "dragora", "Dragora" }, ++ { "ututo", "Ututo" }, ++ { "musix", "Musix" }, ++ { "trisquel", "Trisquel" }, ++ { "dynebolic", "Dynebolic" }, ++ { "venenux", "Venenux" }, + }; + + void MachineConfigFile::convertOldOSType_pre1_5(Utf8Str &str) +--- VirtualBox-4.1.18.orig/src/VBox/Main/xml/SettingsConverter.xsl 2012-07-25 15:21:04.553581275 -0300 ++++ VirtualBox-4.1.18/src/VBox/Main/xml/SettingsConverter.xsl 2012-07-25 15:21:04.593579427 -0300 +@@ -729,40 +729,18 @@ + <xsl:attribute name="OSType"> + <xsl:choose> + <xsl:when test="@OSType='unknown'">Other</xsl:when> +- <xsl:when test="@OSType='dos'">DOS</xsl:when> +- <xsl:when test="@OSType='win31'">Windows31</xsl:when> +- <xsl:when test="@OSType='win95'">Windows95</xsl:when> +- <xsl:when test="@OSType='win98'">Windows98</xsl:when> +- <xsl:when test="@OSType='winme'">WindowsMe</xsl:when> +- <xsl:when test="@OSType='winnt4'">WindowsNT4</xsl:when> +- <xsl:when test="@OSType='win2k'">Windows2000</xsl:when> +- <xsl:when test="@OSType='winxp'">WindowsXP</xsl:when> +- <xsl:when test="@OSType='win2k3'">Windows2003</xsl:when> +- <xsl:when test="@OSType='winvista'">WindowsVista</xsl:when> +- <xsl:when test="@OSType='win2k8'">Windows2008</xsl:when> +- <xsl:when test="@OSType='os2warp3'">OS2Warp3</xsl:when> +- <xsl:when test="@OSType='os2warp4'">OS2Warp4</xsl:when> +- <xsl:when test="@OSType='os2warp45'">OS2Warp45</xsl:when> +- <xsl:when test="@OSType='ecs'">OS2eCS</xsl:when> +- <xsl:when test="@OSType='linux22'">Linux22</xsl:when> +- <xsl:when test="@OSType='linux24'">Linux24</xsl:when> +- <xsl:when test="@OSType='linux26'">Linux26</xsl:when> +- <xsl:when test="@OSType='archlinux'">ArchLinux</xsl:when> +- <xsl:when test="@OSType='debian'">Debian</xsl:when> +- <xsl:when test="@OSType='opensuse'">OpenSUSE</xsl:when> +- <xsl:when test="@OSType='fedoracore'">Fedora</xsl:when> +- <xsl:when test="@OSType='gentoo'">Gentoo</xsl:when> +- <xsl:when test="@OSType='mandriva'">Mandriva</xsl:when> +- <xsl:when test="@OSType='redhat'">RedHat</xsl:when> +- <xsl:when test="@OSType='ubuntu'">Ubuntu</xsl:when> +- <xsl:when test="@OSType='xandros'">Xandros</xsl:when> +- <xsl:when test="@OSType='freebsd'">FreeBSD</xsl:when> +- <xsl:when test="@OSType='openbsd'">OpenBSD</xsl:when> +- <xsl:when test="@OSType='netbsd'">NetBSD</xsl:when> +- <xsl:when test="@OSType='netware'">Netware</xsl:when> +- <xsl:when test="@OSType='solaris'">Solaris</xsl:when> +- <xsl:when test="@OSType='opensolaris'">OpenSolaris</xsl:when> +- <xsl:when test="@OSType='l4'">L4</xsl:when> ++ <xsl:when test="@OSType='gnu'">GNU</xsl:when> ++ <xsl:when test="@OSType='gnuhurd'">GNUHurd</xsl:when> ++ <xsl:when test="@OSType='gnulinux'">GNULinux</xsl:when> ++ <xsl:when test="@OSType='parabola'">Parabola</xsl:when> ++ <xsl:when test="@OSType='gnewsense'">gNewSense</xsl:when> ++ <xsl:when test="@OSType='blag'">Blag</xsl:when> ++ <xsl:when test="@OSType='dragora'">Dragora</xsl:when> ++ <xsl:when test="@OSType='ututo'">Ututo</xsl:when> ++ <xsl:when test="@OSType='musix'">Musix</xsl:when> ++ <xsl:when test="@OSType='trisquel'">Trisquel</xsl:when> ++ <xsl:when test="@OSType='dynebolic'">Dynebolic</xsl:when> ++ <xsl:when test="@OSType='venenux'">Venenux</xsl:when> + </xsl:choose> + </xsl:attribute> + <xsl:apply-templates select="@*[name()!='OSType']" mode="v1.5"/> +--- VirtualBox-4.1.18.orig/src/VBox/Main/xml/VirtualBox-settings-common.xsd 2012-07-25 15:04:37.856003691 -0300 ++++ VirtualBox-4.1.18/src/VBox/Main/xml/VirtualBox-settings-common.xsd 2012-07-25 15:04:37.892668156 -0300 +@@ -137,75 +137,27 @@ + <xsd:simpleType name="TGuestOSType"> + <xsd:restriction base="xsd:string"> + <xsd:enumeration value="Other"/> +- <xsd:enumeration value="DOS"/> +- <xsd:enumeration value="Netware"/> +- <xsd:enumeration value="L4"/> +- <xsd:enumeration value="Windows31"/> +- <xsd:enumeration value="Windows95"/> +- <xsd:enumeration value="Windows98"/> +- <xsd:enumeration value="WindowsMe"/> +- <xsd:enumeration value="WindowsNT4"/> +- <xsd:enumeration value="Windows2000"/> +- <xsd:enumeration value="WindowsXP"/> +- <xsd:enumeration value="WindowsXP_64"/> +- <xsd:enumeration value="Windows2003"/> +- <xsd:enumeration value="Windows2003_64"/> +- <xsd:enumeration value="WindowsVista"/> +- <xsd:enumeration value="WindowsVista_64"/> +- <xsd:enumeration value="Windows2008"/> +- <xsd:enumeration value="Windows2008_64"/> +- <xsd:enumeration value="Windows7"/> +- <xsd:enumeration value="Windows7_64"/> +- <xsd:enumeration value="Windows8"/> +- <xsd:enumeration value="Windows8_64"/> +- <xsd:enumeration value="WindowsNT"/> +- <xsd:enumeration value="OS2Warp3"/> +- <xsd:enumeration value="OS2Warp4"/> +- <xsd:enumeration value="OS2Warp45"/> +- <xsd:enumeration value="OS2eCS"/> +- <xsd:enumeration value="OS2"/> +- <xsd:enumeration value="Linux22"/> +- <xsd:enumeration value="Linux24"/> +- <xsd:enumeration value="Linux24_64"/> +- <xsd:enumeration value="Linux26"/> +- <xsd:enumeration value="Linux26_64"/> +- <xsd:enumeration value="ArchLinux"/> +- <xsd:enumeration value="ArchLinux_64"/> +- <xsd:enumeration value="Debian"/> +- <xsd:enumeration value="Debian_64"/> +- <xsd:enumeration value="OpenSUSE"/> +- <xsd:enumeration value="OpenSUSE_64"/> +- <xsd:enumeration value="Fedora"/> +- <xsd:enumeration value="Fedora_64"/> +- <xsd:enumeration value="Gentoo"/> +- <xsd:enumeration value="Gentoo_64"/> +- <xsd:enumeration value="Mandriva"/> +- <xsd:enumeration value="Mandriva_64"/> +- <xsd:enumeration value="RedHat"/> +- <xsd:enumeration value="RedHat_64"/> +- <xsd:enumeration value="Turbolinux"/> +- <xsd:enumeration value="Turbolinux_64"/> +- <xsd:enumeration value="Ubuntu"/> +- <xsd:enumeration value="Ubuntu_64"/> +- <xsd:enumeration value="Xandros"/> +- <xsd:enumeration value="Xandros_64"/> +- <xsd:enumeration value="Oracle"/> +- <xsd:enumeration value="Oracle_64"/> +- <xsd:enumeration value="Linux"/> +- <xsd:enumeration value="FreeBSD"/> +- <xsd:enumeration value="FreeBSD_64"/> +- <xsd:enumeration value="OpenBSD"/> +- <xsd:enumeration value="OpenBSD_64"/> +- <xsd:enumeration value="NetBSD"/> +- <xsd:enumeration value="NetBSD_64"/> +- <xsd:enumeration value="Solaris"/> +- <xsd:enumeration value="Solaris_64"/> +- <xsd:enumeration value="OpenSolaris"/> +- <xsd:enumeration value="OpenSolaris_64"/> +- <xsd:enumeration value="QNX"/> +- <xsd:enumeration value="MacOS"/> +- <xsd:enumeration value="MacOS_64"/> +- <xsd:enumeration value="JRockitVE"/> ++ <xsd:enumeration value="GNU"/> ++ <xsd:enumeration value="GNU_64"/> ++ <xsd:enumeration value="GNUHurd"/> ++ <xsd:enumeration value="GNULinux"/> ++ <xsd:enumeration value="GNULinux_64"/> ++ <xsd:enumeration value="Parabola"/> ++ <xsd:enumeration value="Parabola_64"/> ++ <xsd:enumeration value="gNewSense"/> ++ <xsd:enumeration value="gNewSense_64"/> ++ <xsd:enumeration value="Blag"/> ++ <xsd:enumeration value="Blag_64"/> ++ <xsd:enumeration value="Dragora"/> ++ <xsd:enumeration value="Dragora_64"/> ++ <xsd:enumeration value="Ututo"/> ++ <xsd:enumeration value="Ututo_64"/> ++ <xsd:enumeration value="Musix"/> ++ <xsd:enumeration value="Musix_64"/> ++ <xsd:enumeration value="Trisquel"/> ++ <xsd:enumeration value="Trisquel_64"/> ++ <xsd:enumeration value="Dynebolic"/> ++ <xsd:enumeration value="Venenux"/> + </xsd:restriction> + </xsd:simpleType> + +--- VirtualBox-4.1.18.orig/src/VBox/Frontends/VirtualBox/VirtualBox2.qrc 2012-07-25 15:40:56.733096866 -0300 ++++ VirtualBox-4.1.18/src/VBox/Frontends/VirtualBox/VirtualBox2.qrc 2012-07-25 15:40:56.796426519 -0300 +@@ -1,75 +1,27 @@ + <!DOCTYPE RCC><RCC version="1.0"> + <qresource prefix="/"> +- <file alias="os_archlinux.png">images/os_archlinux.png</file> +- <file alias="os_archlinux_64.png">images/os_archlinux_64.png</file> +- <file alias="os_debian.png">images/os_debian.png</file> +- <file alias="os_debian_64.png">images/os_debian_64.png</file> +- <file alias="os_dos.png">images/os_dos.png</file> +- <file alias="os_fedora.png">images/os_fedora.png</file> +- <file alias="os_fedora_64.png">images/os_fedora_64.png</file> +- <file alias="os_freebsd.png">images/os_freebsd.png</file> +- <file alias="os_freebsd_64.png">images/os_freebsd_64.png</file> +- <file alias="os_gentoo.png">images/os_gentoo.png</file> +- <file alias="os_gentoo_64.png">images/os_gentoo_64.png</file> +- <file alias="os_jrockitve.png">images/os_jrockitve.png</file> +- <file alias="os_l4.png">images/os_l4.png</file> +- <file alias="os_linux_other.png">images/os_linux_other.png</file> +- <file alias="os_linux22.png">images/os_linux22.png</file> +- <file alias="os_linux24.png">images/os_linux24.png</file> +- <file alias="os_linux24_64.png">images/os_linux24_64.png</file> +- <file alias="os_linux26.png">images/os_linux26.png</file> +- <file alias="os_linux26_64.png">images/os_linux26_64.png</file> +- <file alias="os_mandriva.png">images/os_mandriva.png</file> +- <file alias="os_mandriva_64.png">images/os_mandriva_64.png</file> +- <file alias="os_netbsd.png">images/os_netbsd.png</file> +- <file alias="os_netbsd_64.png">images/os_netbsd_64.png</file> +- <file alias="os_netware.png">images/os_netware.png</file> +- <file alias="os_openbsd.png">images/os_openbsd.png</file> +- <file alias="os_openbsd_64.png">images/os_openbsd_64.png</file> +- <file alias="os_oraclesolaris.png">images/os_oraclesolaris.png</file> +- <file alias="os_oraclesolaris_64.png">images/os_oraclesolaris_64.png</file> +- <file alias="os_opensuse.png">images/os_opensuse.png</file> +- <file alias="os_opensuse_64.png">images/os_opensuse_64.png</file> +- <file alias="os_os2_other.png">images/os_os2_other.png</file> +- <file alias="os_os2ecs.png">images/os_os2ecs.png</file> +- <file alias="os_os2warp3.png">images/os_os2warp3.png</file> +- <file alias="os_os2warp4.png">images/os_os2warp4.png</file> +- <file alias="os_os2warp45.png">images/os_os2warp45.png</file> ++ <file alias="os_parabola.png">images/os_parabola.png</file> ++ <file alias="os_parabola_64.png">images/os_parabola_64.png</file> ++ <file alias="os_gnewsense.png">images/os_gnewsense.png</file> ++ <file alias="os_gnewsense_64.png">images/os_gnewsense_64.png</file> ++ <file alias="os_blag.png">images/os_blag.png</file> ++ <file alias="os_blag_64.png">images/os_blag_64.png</file> ++ <file alias="os_ututo.png">images/os_ututo.png</file> ++ <file alias="os_ututo_64.png">images/os_ututo_64.png</file> ++ <file alias="os_gnu.png">images/os_gnu.png</file> ++ <file alias="os_gnu_64.png">images/os_gnu_64.png</file> ++ <file alias="os_gnuhurd.png">images/os_gnuhurd.png</file> ++ <file alias="os_gnulinux.png">images/os_gnulinux.png</file> ++ <file alias="os_gnulinux_64.png">images/os_gnulinux_64.png</file> ++ <file alias="os_musix.png">images/os_musix.png</file> ++ <file alias="os_musix_64.png">images/os_musix_64.png</file> ++ <file alias="os_dragora.png">images/os_dragora.png</file> ++ <file alias="os_dragora_64.png">images/os_dragora_64.png</file> + <file alias="os_other.png">images/os_other.png</file> +- <file alias="os_qnx.png">images/os_qnx.png</file> +- <file alias="os_redhat.png">images/os_redhat.png</file> +- <file alias="os_redhat_64.png">images/os_redhat_64.png</file> +- <file alias="os_turbolinux.png">images/os_turbolinux.png</file> +- <file alias="os_turbolinux_64.png">images/os_turbolinux_64.png</file> +- <file alias="os_solaris.png">images/os_solaris.png</file> +- <file alias="os_solaris_64.png">images/os_solaris_64.png</file> +- <file alias="os_ubuntu.png">images/os_ubuntu.png</file> +- <file alias="os_ubuntu_64.png">images/os_ubuntu_64.png</file> +- <file alias="os_win_other.png">images/os_win_other.png</file> +- <file alias="os_win2k.png">images/os_win2k.png</file> +- <file alias="os_win2k3.png">images/os_win2k3.png</file> +- <file alias="os_win2k3_64.png">images/os_win2k3_64.png</file> +- <file alias="os_win2k8.png">images/os_win2k8.png</file> +- <file alias="os_win2k8_64.png">images/os_win2k8_64.png</file> +- <file alias="os_win31.png">images/os_win31.png</file> +- <file alias="os_win7.png">images/os_win7.png</file> +- <file alias="os_win7_64.png">images/os_win7_64.png</file> +- <file alias="os_win8.png">images/os_win8.png</file> +- <file alias="os_win8_64.png">images/os_win8_64.png</file> +- <file alias="os_win95.png">images/os_win95.png</file> +- <file alias="os_win98.png">images/os_win98.png</file> +- <file alias="os_winme.png">images/os_winme.png</file> +- <file alias="os_winnt4.png">images/os_winnt4.png</file> +- <file alias="os_winvista.png">images/os_winvista.png</file> +- <file alias="os_winvista_64.png">images/os_winvista_64.png</file> +- <file alias="os_winxp.png">images/os_winxp.png</file> +- <file alias="os_winxp_64.png">images/os_winxp_64.png</file> +- <file alias="os_xandros.png">images/os_xandros.png</file> +- <file alias="os_xandros_64.png">images/os_xandros_64.png</file> +- <file alias="os_oracle.png">images/os_oracle.png</file> +- <file alias="os_oracle_64.png">images/os_oracle_64.png</file> +- <file alias="os_macosx.png">images/os_macosx.png</file> +- <file alias="os_macosx_64.png">images/os_macosx_64.png</file> ++ <file alias="os_dynebolic.png">images/os_dynebolic.png</file> ++ <file alias="os_venenux.png">images/os_venenux.png</file> ++ <file alias="os_trisquel.png">images/os_trisquel.png</file> ++ <file alias="os_trisquel_64.png">images/os_trisquel_64.png</file> + <file alias="hd_16px.png">images/hd_16px.png</file> + <file alias="hd_disabled_16px.png">images/hd_disabled_16px.png</file> + <file alias="hd_32px.png">images/hd_32px.png</file> +--- VirtualBox-4.1.18.orig/src/VBox/Main/src-all/Global.cpp 2012-06-20 10:17:34.000000000 -0300 ++++ VirtualBox-4.1.18/src/VBox/Main/src-all/Global.cpp 2012-07-25 19:32:44.482993976 -0300 +@@ -35,284 +35,90 @@ + VBOXOSTYPE_Unknown, VBOXOSHINT_NONE, + 64, 4, 2 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE, + StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows31, "Windows 3.1", +- VBOXOSTYPE_Win31, VBOXOSHINT_NONE, +- 32, 4, 1 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_SB16 }, +- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows95, "Windows 95", +- VBOXOSTYPE_Win95, VBOXOSHINT_NONE, +- 64, 4, 2 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows98, "Windows 98", +- VBOXOSTYPE_Win98, VBOXOSHINT_NONE, +- 64, 4, 2 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_WindowsMe, "Windows Me", +- VBOXOSTYPE_WinMe, VBOXOSHINT_NONE, +- 64, 4, 4 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_WindowsNT4, "Windows NT 4", +- VBOXOSTYPE_WinNT4, VBOXOSHINT_NONE, +- 128, 16, 2 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows2000, "Windows 2000", +- VBOXOSTYPE_Win2k, VBOXOSHINT_USBTABLET, +- 168, 16, 4 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_WindowsXP, "Windows XP", +- VBOXOSTYPE_WinXP, VBOXOSHINT_USBTABLET, +- 192, 16, 10 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_WindowsXP_64, "Windows XP (64 bit)", +- VBOXOSTYPE_WinXP_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET, +- 192, 16, 10 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows2003, "Windows 2003", +- VBOXOSTYPE_Win2k3, VBOXOSHINT_USBTABLET, +- 256, 16, 20 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows2003_64, "Windows 2003 (64 bit)", +- VBOXOSTYPE_Win2k3_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET, +- 256, 16, 20 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_HDA }, +- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_WindowsVista, "Windows Vista", +- VBOXOSTYPE_WinVista, VBOXOSHINT_USBTABLET, +- 512, 16, 25 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA }, +- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_WindowsVista_64, "Windows Vista (64 bit)", +- VBOXOSTYPE_WinVista_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET, +- 512, 16, 25 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA }, +- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows2008, "Windows 2008", +- VBOXOSTYPE_Win2k8, VBOXOSHINT_USBTABLET, +- 512, 16, 25 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA }, +- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows2008_64, "Windows 2008 (64 bit)", +- VBOXOSTYPE_Win2k8_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET, +- 512, 16, 25 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA }, +- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows7, "Windows 7", +- VBOXOSTYPE_Win7, VBOXOSHINT_USBTABLET, +- 512, 16, 25 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA }, +- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows7_64, "Windows 7 (64 bit)", +- VBOXOSTYPE_Win7_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET, +- 512, 16, 25 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA }, +- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows8, "Windows 8", +- VBOXOSTYPE_Win8, VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET | VBOXOSHINT_PAE, +- 1024,128, 25 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA }, +- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows8_64, "Windows 8 (64 bit)", +- VBOXOSTYPE_Win8_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET, +- 1536,128, 25 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA }, +- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_WindowsNT, "Other Windows", +- VBOXOSTYPE_WinNT, VBOXOSHINT_NONE, +- 512, 16, 20 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Linux22, "Linux 2.2", +- VBOXOSTYPE_Linux22, VBOXOSHINT_RTCUTC, +- 64, 4, 2 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Linux24, "Linux 2.4", +- VBOXOSTYPE_Linux24, VBOXOSHINT_RTCUTC, +- 128, 4, 4 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Linux24_64, "Linux 2.4 (64 bit)", +- VBOXOSTYPE_Linux24_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC, +- 128, 4, 4 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, ++ { "GNU", "GNU", SchemaDefs_OSTypeId_GNU, "GNU", ++ VBOXOSTYPE_GNU, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, ++ 256, 4, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, ++ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, ++ { "GNU", "GNU", SchemaDefs_OSTypeId_GNU_64, "GNU (64 bit)", ++ VBOXOSTYPE_GNU_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, ++ 256, 4, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, ++ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, ++ { "GNU-Hurd", "GNU-Hurd", SchemaDefs_OSTypeId_GNUHurd, "GNU-Hurd", ++ VBOXOSTYPE_GNUHurd, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, ++ 256, 4, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, + StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Linux26, "Linux 2.6", +- VBOXOSTYPE_Linux26, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, ++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_GNULinux, "GNU/Linux", ++ VBOXOSTYPE_GNULinux, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, + 256, 4, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, + StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Linux26_64, "Linux 2.6 (64 bit)", +- VBOXOSTYPE_Linux26_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, ++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_GNULinux_64, "GNU/Linux (64 bit)", ++ VBOXOSTYPE_GNULinux_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, + 256, 4, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, + StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_ArchLinux, "Arch Linux", +- VBOXOSTYPE_ArchLinux, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, ++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Parabola, "Parabola GNU/Linux-libre", ++ VBOXOSTYPE_Parabola, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, + 256, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, + StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_ArchLinux_64, "Arch Linux (64 bit)", +- VBOXOSTYPE_ArchLinux_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, ++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Parabola_64, "Parabola GNU/Linux-libre (64 bit)", ++ VBOXOSTYPE_Parabola_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, + 256, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, + StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Debian, "Debian", +- VBOXOSTYPE_Debian, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, ++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_gNewSense, "gNewSense", ++ VBOXOSTYPE_gNewSense, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, + 384, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, + StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Debian_64, "Debian (64 bit)", +- VBOXOSTYPE_Debian_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, ++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_gNewSense_64, "gNewSense (64 bit)", ++ VBOXOSTYPE_gNewSense_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, + 384, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, + StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97}, +- { "Linux", "Linux", SchemaDefs_OSTypeId_OpenSUSE, "openSUSE", +- VBOXOSTYPE_OpenSUSE, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, +- 512, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_OpenSUSE_64, "openSUSE (64 bit)", +- VBOXOSTYPE_OpenSUSE_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, +- 512, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Fedora, "Fedora", +- VBOXOSTYPE_FedoraCore, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, ++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Blag, "Blag Linux and GNU", ++ VBOXOSTYPE_Blag, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, + 768, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, + StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Fedora_64, "Fedora (64 bit)", +- VBOXOSTYPE_FedoraCore_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, ++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Blag_64, "Blag Linux and GNU (64 bit)", ++ VBOXOSTYPE_Blag_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, + 768, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, + StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Gentoo, "Gentoo", +- VBOXOSTYPE_Gentoo, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, ++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Dragora, "Dragora", ++ VBOXOSTYPE_Dragora, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, + 256, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, + StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Gentoo_64, "Gentoo (64 bit)", +- VBOXOSTYPE_Gentoo_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, ++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Dragora_64, "Dragora (64 bit)", ++ VBOXOSTYPE_Dragora_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, + 256, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, + StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Mandriva, "Mandriva", +- VBOXOSTYPE_Mandriva, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, +- 512, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Mandriva_64, "Mandriva (64 bit)", +- VBOXOSTYPE_Mandriva_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, +- 512, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_RedHat, "Red Hat", +- VBOXOSTYPE_RedHat, VBOXOSHINT_RTCUTC | VBOXOSHINT_PAE, +- 512, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, ++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Ututo, "Ututo XS", ++ VBOXOSTYPE_Ututo, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, ++ 256, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, + StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_RedHat_64, "Red Hat (64 bit)", +- VBOXOSTYPE_RedHat_x64, VBOXOSHINT_64BIT | VBOXOSHINT_PAE | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC, +- 512, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, ++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Ututo_64, "Ututo XS (64 bit)", ++ VBOXOSTYPE_Ututo_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, ++ 256, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, + StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Turbolinux, "Turbolinux", +- VBOXOSTYPE_Turbolinux, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, ++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Musix, "Musix", ++ VBOXOSTYPE_Musix, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, + 384, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, + StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Turbolinux, "Turbolinux (64 bit)", +- VBOXOSTYPE_Turbolinux_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, ++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Musix_64, "Musix (64 bit)", ++ VBOXOSTYPE_Musix_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, + 384, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Ubuntu, "Ubuntu", +- VBOXOSTYPE_Ubuntu, VBOXOSHINT_RTCUTC | VBOXOSHINT_PAE | VBOXOSHINT_USBTABLET, ++ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97}, ++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Trisquel, "Trisquel", ++ VBOXOSTYPE_Trisquel, VBOXOSHINT_RTCUTC | VBOXOSHINT_PAE | VBOXOSHINT_USBTABLET, + 512, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, + StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Ubuntu_64, "Ubuntu (64 bit)", +- VBOXOSTYPE_Ubuntu_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, ++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Trisquel_64, "Trisquel (64 bit)", ++ VBOXOSTYPE_Trisquel_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, + 512, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, + StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Xandros, "Xandros", +- VBOXOSTYPE_Xandros, VBOXOSHINT_RTCUTC, +- 256, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Xandros_64, "Xandros (64 bit)", +- VBOXOSTYPE_Xandros_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC, +- 256, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Oracle, "Oracle", +- VBOXOSTYPE_Oracle, VBOXOSHINT_RTCUTC | VBOXOSHINT_PAE, +- 512, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, ++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Dynebolic, "Dyne:bolic", ++ VBOXOSTYPE_Dynebolic, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, ++ 256, 4, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, + StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Oracle_64, "Oracle (64 bit)", +- VBOXOSTYPE_Oracle_x64, VBOXOSHINT_64BIT | VBOXOSHINT_PAE | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC, +- 512, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, ++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Venenux, "Venenux", ++ VBOXOSTYPE_Venenux, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, ++ 384, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, + StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Linux, "Other Linux", +- VBOXOSTYPE_Linux, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, +- 256, 12, 8 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Solaris", "Solaris", SchemaDefs_OSTypeId_Solaris, "Oracle Solaris 10 5/09 and earlier", +- VBOXOSTYPE_Solaris, VBOXOSHINT_NONE, +- 768, 12, 16 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Solaris", "Solaris", SchemaDefs_OSTypeId_Solaris_64, "Oracle Solaris 10 5/09 and earlier (64 bit)", +- VBOXOSTYPE_Solaris_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC, +- 1536, 12, 16 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Solaris", "Solaris", SchemaDefs_OSTypeId_OpenSolaris, "Oracle Solaris 10 10/09 and later", +- VBOXOSTYPE_OpenSolaris, VBOXOSHINT_USBTABLET, +- 768, 12, 16 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_IntelAhci, StorageBus_SATA, +- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Solaris", "Solaris", SchemaDefs_OSTypeId_OpenSolaris_64, "Oracle Solaris 10 10/09 and later (64 bit)", +- VBOXOSTYPE_OpenSolaris_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET, +- 1536, 12, 16 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_IntelAhci, StorageBus_SATA, +- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "BSD", "BSD", SchemaDefs_OSTypeId_FreeBSD, "FreeBSD", +- VBOXOSTYPE_FreeBSD, VBOXOSHINT_NONE, +- 128, 4, 2 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "BSD", "BSD", SchemaDefs_OSTypeId_FreeBSD_64, "FreeBSD (64 bit)", +- VBOXOSTYPE_FreeBSD_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC, +- 128, 4, 2 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "BSD", "BSD", SchemaDefs_OSTypeId_OpenBSD, "OpenBSD", +- VBOXOSTYPE_OpenBSD, VBOXOSHINT_HWVIRTEX, +- 64, 4, 2 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "BSD", "BSD", SchemaDefs_OSTypeId_OpenBSD_64, "OpenBSD (64 bit)", +- VBOXOSTYPE_OpenBSD_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC, +- 64, 4, 2 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "BSD", "BSD", SchemaDefs_OSTypeId_NetBSD, "NetBSD", +- VBOXOSTYPE_NetBSD, VBOXOSHINT_NONE, +- 64, 4, 2 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "BSD", "BSD", SchemaDefs_OSTypeId_NetBSD_64, "NetBSD (64 bit)", +- VBOXOSTYPE_NetBSD_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC, +- 64, 4, 2 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "OS2", "IBM OS/2", SchemaDefs_OSTypeId_OS2Warp3, "OS/2 Warp 3", +- VBOXOSTYPE_OS2Warp3, VBOXOSHINT_HWVIRTEX, +- 48, 4, 1 * _1G64, NetworkAdapterType_Am79C973, 1, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "OS2", "IBM OS/2", SchemaDefs_OSTypeId_OS2Warp4, "OS/2 Warp 4", +- VBOXOSTYPE_OS2Warp4, VBOXOSHINT_HWVIRTEX, +- 64, 4, 2 * _1G64, NetworkAdapterType_Am79C973, 1, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "OS2", "IBM OS/2", SchemaDefs_OSTypeId_OS2Warp45, "OS/2 Warp 4.5", +- VBOXOSTYPE_OS2Warp45, VBOXOSHINT_HWVIRTEX, +- 96, 4, 2 * _1G64, NetworkAdapterType_Am79C973, 1, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "OS2", "IBM OS/2", SchemaDefs_OSTypeId_OS2eCS, "eComStation", +- VBOXOSTYPE_ECS, VBOXOSHINT_HWVIRTEX, +- 96, 4, 2 * _1G64, NetworkAdapterType_Am79C973, 1, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "OS2", "IBM OS/2", SchemaDefs_OSTypeId_OS2, "Other OS/2", +- VBOXOSTYPE_OS2, VBOXOSHINT_HWVIRTEX, +- 96, 4, 2 * _1G64, NetworkAdapterType_Am79C973, 1, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "MacOS", "Mac OS X", SchemaDefs_OSTypeId_MacOS, "Mac OS X Server", +- VBOXOSTYPE_MacOS, VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_EFI | VBOXOSHINT_PAE | VBOXOSHINT_USBHID | VBOXOSHINT_HPET | VBOXOSHINT_USBTABLET, +- 1024, 4, 20 * _1G64, NetworkAdapterType_I82543GC, 0, +- StorageControllerType_ICH6, StorageBus_IDE, StorageControllerType_IntelAhci, StorageBus_SATA, +- ChipsetType_ICH9, AudioControllerType_HDA }, +- { "MacOS", "Mac OS X", SchemaDefs_OSTypeId_MacOS_64, "Mac OS X Server (64 bit)", +- VBOXOSTYPE_MacOS_x64, VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_EFI | VBOXOSHINT_PAE | VBOXOSHINT_64BIT | VBOXOSHINT_USBHID | VBOXOSHINT_HPET | VBOXOSHINT_USBTABLET, +- 1024, 4, 20 * _1G64, NetworkAdapterType_I82543GC, 0, +- StorageControllerType_ICH6, StorageBus_IDE, StorageControllerType_IntelAhci, StorageBus_SATA, +- ChipsetType_ICH9, AudioControllerType_HDA }, +- { "Other", "Other", SchemaDefs_OSTypeId_DOS, "DOS", +- VBOXOSTYPE_DOS, VBOXOSHINT_NONE, +- 32, 4, 500 * _1M, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_SB16 }, +- { "Other", "Other", SchemaDefs_OSTypeId_Netware, "Netware", +- VBOXOSTYPE_Netware, VBOXOSHINT_HWVIRTEX, +- 512, 4, 4 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Other", "Other", SchemaDefs_OSTypeId_L4, "L4", +- VBOXOSTYPE_L4, VBOXOSHINT_NONE, +- 64, 4, 2 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Other", "Other", SchemaDefs_OSTypeId_QNX, "QNX", +- VBOXOSTYPE_QNX, VBOXOSHINT_HWVIRTEX, +- 512, 4, 4 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Other", "Other", SchemaDefs_OSTypeId_JRockitVE, "JRockitVE", +- VBOXOSTYPE_JRockitVE, VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_PAE, +- 1024, 4, 8 * _1G64, NetworkAdapterType_I82545EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_BusLogic, StorageBus_SCSI, ChipsetType_PIIX3, AudioControllerType_AC97 }, + }; + + /** +--- VirtualBox-4.1.18.orig/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp 2012-07-25 21:44:01.290876720 -0300 ++++ VirtualBox-4.1.18/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp 2012-07-25 22:00:57.819380802 -0300 +@@ -4875,75 +4875,27 @@ + static const char *kOSTypeIcons [][2] = + { + {"Other", ":/os_other.png"}, +- {"DOS", ":/os_dos.png"}, +- {"Netware", ":/os_netware.png"}, +- {"L4", ":/os_l4.png"}, +- {"Windows31", ":/os_win31.png"}, +- {"Windows95", ":/os_win95.png"}, +- {"Windows98", ":/os_win98.png"}, +- {"WindowsMe", ":/os_winme.png"}, +- {"WindowsNT4", ":/os_winnt4.png"}, +- {"Windows2000", ":/os_win2k.png"}, +- {"WindowsXP", ":/os_winxp.png"}, +- {"WindowsXP_64", ":/os_winxp_64.png"}, +- {"Windows2003", ":/os_win2k3.png"}, +- {"Windows2003_64", ":/os_win2k3_64.png"}, +- {"WindowsVista", ":/os_winvista.png"}, +- {"WindowsVista_64", ":/os_winvista_64.png"}, +- {"Windows2008", ":/os_win2k8.png"}, +- {"Windows2008_64", ":/os_win2k8_64.png"}, +- {"Windows7", ":/os_win7.png"}, +- {"Windows7_64", ":/os_win7_64.png"}, +- {"Windows8", ":/os_win8.png"}, +- {"Windows8_64", ":/os_win8_64.png"}, +- {"WindowsNT", ":/os_win_other.png"}, +- {"OS2Warp3", ":/os_os2warp3.png"}, +- {"OS2Warp4", ":/os_os2warp4.png"}, +- {"OS2Warp45", ":/os_os2warp45.png"}, +- {"OS2eCS", ":/os_os2ecs.png"}, +- {"OS2", ":/os_os2_other.png"}, +- {"Linux22", ":/os_linux22.png"}, +- {"Linux24", ":/os_linux24.png"}, +- {"Linux24_64", ":/os_linux24_64.png"}, +- {"Linux26", ":/os_linux26.png"}, +- {"Linux26_64", ":/os_linux26_64.png"}, +- {"ArchLinux", ":/os_archlinux.png"}, +- {"ArchLinux_64", ":/os_archlinux_64.png"}, +- {"Debian", ":/os_debian.png"}, +- {"Debian_64", ":/os_debian_64.png"}, +- {"OpenSUSE", ":/os_opensuse.png"}, +- {"OpenSUSE_64", ":/os_opensuse_64.png"}, +- {"Fedora", ":/os_fedora.png"}, +- {"Fedora_64", ":/os_fedora_64.png"}, +- {"Gentoo", ":/os_gentoo.png"}, +- {"Gentoo_64", ":/os_gentoo_64.png"}, +- {"Mandriva", ":/os_mandriva.png"}, +- {"Mandriva_64", ":/os_mandriva_64.png"}, +- {"RedHat", ":/os_redhat.png"}, +- {"RedHat_64", ":/os_redhat_64.png"}, +- {"Turbolinux", ":/os_turbolinux.png"}, +- {"Turbolinux_64", ":/os_turbolinux_64.png"}, +- {"Ubuntu", ":/os_ubuntu.png"}, +- {"Ubuntu_64", ":/os_ubuntu_64.png"}, +- {"Xandros", ":/os_xandros.png"}, +- {"Xandros_64", ":/os_xandros_64.png"}, +- {"Oracle", ":/os_oracle.png"}, +- {"Oracle_64", ":/os_oracle_64.png"}, +- {"Linux", ":/os_linux_other.png"}, +- {"FreeBSD", ":/os_freebsd.png"}, +- {"FreeBSD_64", ":/os_freebsd_64.png"}, +- {"OpenBSD", ":/os_openbsd.png"}, +- {"OpenBSD_64", ":/os_openbsd_64.png"}, +- {"NetBSD", ":/os_netbsd.png"}, +- {"NetBSD_64", ":/os_netbsd_64.png"}, +- {"Solaris", ":/os_solaris.png"}, +- {"Solaris_64", ":/os_solaris_64.png"}, +- {"OpenSolaris", ":/os_oraclesolaris.png"}, +- {"OpenSolaris_64", ":/os_oraclesolaris_64.png"}, +- {"QNX", ":/os_qnx.png"}, +- {"MacOS", ":/os_macosx.png"}, +- {"MacOS_64", ":/os_macosx_64.png"}, +- {"JRockitVE", ":/os_jrockitve.png"}, ++ {"GNU", ":/os_gnu.png"}, ++ {"GNU_64", ":/os_gnu_64.png"}, ++ {"GNUHurd", ":/os_gnuhurd.png"}, ++ {"GNULinux", ":/os_gnulinux.png"}, ++ {"GNULinux_64", ":/os_gnulinux_64.png"}, ++ {"Parabola", ":/os_parabola.png"}, ++ {"Parabola_64", ":/os_parabola_64.png"}, ++ {"gNewSense", ":/os_gnewsense.png"}, ++ {"gNewSense_64", ":/os_gnewsense_64.png"}, ++ {"Blag", ":/os_blag.png"}, ++ {"Blag_64", ":/os_blag_64.png"}, ++ {"Dragora", ":/os_dragora.png"}, ++ {"Dragora_64", ":/os_dragora_64.png"}, ++ {"Ututo", ":/os_ututo.png"}, ++ {"Ututo_64", ":/os_ututo_64.png"}, ++ {"Musix", ":/os_musix.png"}, ++ {"Musix_64", ":/os_musix_64.png"}, ++ {"Trisquel", ":/os_trisquel.png"}, ++ {"Trisquel_64", ":/os_trisquel_64.png"}, ++ {"Dynebolic", ":/os_dynebolic.png"}, ++ {"Venenux", ":/os_venenux.png"}, + }; + for (uint n = 0; n < SIZEOF_ARRAY (kOSTypeIcons); ++ n) + { +--- VirtualBox-4.1.18.orig/src/VBox/Frontends/VirtualBox/src/widgets/VBoxOSTypeSelectorWidget.cpp.orig 2012-06-20 10:16:38.000000000 -0300 ++++ VirtualBox-4.1.18/src/VBox/Frontends/VirtualBox/src/widgets/VBoxOSTypeSelectorWidget.cpp 2012-07-25 22:07:51.232436783 -0300 +@@ -192,17 +192,10 @@ + if (typeIndex != -1) + mCbType->setCurrentIndex (typeIndex); + } +- /* Or select WinXP item for Windows family as default */ +- else if (familyId == "Windows") ++ /* Or select Parabola GNU/Linux-libre item for GNU/Linux family as default */ ++ else if (familyId == "GNU/Linux") + { +- int xpIndex = mCbType->findData ("WindowsXP", RoleTypeID); +- if (xpIndex != -1) +- mCbType->setCurrentIndex (xpIndex); +- } +- /* Or select Ubuntu item for Linux family as default */ +- else if (familyId == "Linux") +- { +- int ubIndex = mCbType->findData ("Ubuntu", RoleTypeID); ++ int ubIndex = mCbType->findData ("Parabola", RoleTypeID); + if (ubIndex != -1) + mCbType->setCurrentIndex (ubIndex); + } +--- VirtualBox-4.1.18.orig/include/VBox/ostypes.h 2012-06-20 10:07:51.000000000 -0300 ++++ VirtualBox-4.1.18/include/VBox/ostypes.h 2012-07-25 23:20:57.322757456 -0300 +@@ -43,77 +43,27 @@ + typedef enum VBOXOSTYPE + { + VBOXOSTYPE_Unknown = 0, +- VBOXOSTYPE_DOS = 0x10000, +- VBOXOSTYPE_Win31 = 0x15000, +- VBOXOSTYPE_Win9x = 0x20000, +- VBOXOSTYPE_Win95 = 0x21000, +- VBOXOSTYPE_Win98 = 0x22000, +- VBOXOSTYPE_WinMe = 0x23000, +- VBOXOSTYPE_WinNT = 0x30000, +- VBOXOSTYPE_WinNT4 = 0x31000, +- VBOXOSTYPE_Win2k = 0x32000, +- VBOXOSTYPE_WinXP = 0x33000, +- VBOXOSTYPE_WinXP_x64 = 0x33100, +- VBOXOSTYPE_Win2k3 = 0x34000, +- VBOXOSTYPE_Win2k3_x64 = 0x34100, +- VBOXOSTYPE_WinVista = 0x35000, +- VBOXOSTYPE_WinVista_x64 = 0x35100, +- VBOXOSTYPE_Win2k8 = 0x36000, +- VBOXOSTYPE_Win2k8_x64 = 0x36100, +- VBOXOSTYPE_Win7 = 0x37000, +- VBOXOSTYPE_Win7_x64 = 0x37100, +- VBOXOSTYPE_Win8 = 0x38000, +- VBOXOSTYPE_Win8_x64 = 0x38100, +- VBOXOSTYPE_OS2 = 0x40000, +- VBOXOSTYPE_OS2Warp3 = 0x41000, +- VBOXOSTYPE_OS2Warp4 = 0x42000, +- VBOXOSTYPE_OS2Warp45 = 0x43000, +- VBOXOSTYPE_ECS = 0x44000, +- VBOXOSTYPE_Linux = 0x50000, +- VBOXOSTYPE_Linux_x64 = 0x50100, +- VBOXOSTYPE_Linux22 = 0x51000, +- VBOXOSTYPE_Linux24 = 0x52000, +- VBOXOSTYPE_Linux24_x64 = 0x52100, +- VBOXOSTYPE_Linux26 = 0x53000, +- VBOXOSTYPE_Linux26_x64 = 0x53100, +- VBOXOSTYPE_ArchLinux = 0x54000, +- VBOXOSTYPE_ArchLinux_x64 = 0x54100, +- VBOXOSTYPE_Debian = 0x55000, +- VBOXOSTYPE_Debian_x64 = 0x55100, +- VBOXOSTYPE_OpenSUSE = 0x56000, +- VBOXOSTYPE_OpenSUSE_x64 = 0x56100, +- VBOXOSTYPE_FedoraCore = 0x57000, +- VBOXOSTYPE_FedoraCore_x64 = 0x57100, +- VBOXOSTYPE_Gentoo = 0x58000, +- VBOXOSTYPE_Gentoo_x64 = 0x58100, +- VBOXOSTYPE_Mandriva = 0x59000, +- VBOXOSTYPE_Mandriva_x64 = 0x59100, +- VBOXOSTYPE_RedHat = 0x5A000, +- VBOXOSTYPE_RedHat_x64 = 0x5A100, +- VBOXOSTYPE_Turbolinux = 0x5B000, +- VBOXOSTYPE_Turbolinux_x64 = 0x5B100, +- VBOXOSTYPE_Ubuntu = 0x5C000, +- VBOXOSTYPE_Ubuntu_x64 = 0x5C100, +- VBOXOSTYPE_Xandros = 0x5D000, +- VBOXOSTYPE_Xandros_x64 = 0x5D100, +- VBOXOSTYPE_Oracle = 0x5E000, +- VBOXOSTYPE_Oracle_x64 = 0x5E100, +- VBOXOSTYPE_FreeBSD = 0x60000, +- VBOXOSTYPE_FreeBSD_x64 = 0x60100, +- VBOXOSTYPE_OpenBSD = 0x61000, +- VBOXOSTYPE_OpenBSD_x64 = 0x61100, +- VBOXOSTYPE_NetBSD = 0x62000, +- VBOXOSTYPE_NetBSD_x64 = 0x62100, +- VBOXOSTYPE_Netware = 0x70000, +- VBOXOSTYPE_Solaris = 0x80000, +- VBOXOSTYPE_Solaris_x64 = 0x80100, +- VBOXOSTYPE_OpenSolaris = 0x81000, +- VBOXOSTYPE_OpenSolaris_x64 = 0x81100, +- VBOXOSTYPE_L4 = 0x90000, +- VBOXOSTYPE_QNX = 0xA0000, +- VBOXOSTYPE_MacOS = 0xB0000, +- VBOXOSTYPE_MacOS_x64 = 0xB0100, +- VBOXOSTYPE_JRockitVE = 0xC0000, ++ VBOXOSTYPE_GNU = 0x10000, ++ VBOXOSTYPE_GNU_x64 = 0x10100, ++ VBOXOSTYPE_GNUHurd = 0x20000, ++ VBOXOSTYPE_GNULinux = 0x30000, ++ VBOXOSTYPE_GNULinux_x64 = 0x30100, ++ VBOXOSTYPE_Parabola = 0x31000, ++ VBOXOSTYPE_Parabola_x64 = 0x31100, ++ VBOXOSTYPE_gNewSense = 0x32000, ++ VBOXOSTYPE_gNewSense_x64 = 0x32100, ++ VBOXOSTYPE_Blag = 0x33000, ++ VBOXOSTYPE_Blag_x64 = 0x33100, ++ VBOXOSTYPE_Dragora = 0x34000, ++ VBOXOSTYPE_Dragora_x64 = 0x34100, ++ VBOXOSTYPE_Ututo = 0x35000, ++ VBOXOSTYPE_Ututo_x64 = 0x35100, ++ VBOXOSTYPE_Musix = 0x36000, ++ VBOXOSTYPE_Musix_x64 = 0x36100, ++ VBOXOSTYPE_Trisquel = 0x37000, ++ VBOXOSTYPE_Trisquel_x64 = 0x37100, ++ VBOXOSTYPE_Dynebolic = 0x38000, ++ VBOXOSTYPE_Venenux = 0x39000, + /** The bit number which indicates 64-bit or 32-bit. */ + #define VBOXOSTYPE_x64_BIT 8 + /** The mask which indicates 64-bit. */ +@@ -129,16 +79,11 @@ + typedef enum VBOXOSFAMILY + { + VBOXOSFAMILY_Unknown = 0, +- VBOXOSFAMILY_Windows32 = 1, +- VBOXOSFAMILY_Windows64 = 2, +- VBOXOSFAMILY_Linux32 = 3, +- VBOXOSFAMILY_Linux64 = 4, +- VBOXOSFAMILY_FreeBSD32 = 5, +- VBOXOSFAMILY_FreeBSD64 = 6, +- VBOXOSFAMILY_Solaris32 = 7, +- VBOXOSFAMILY_Solaris64 = 8, +- VBOXOSFAMILY_MacOSX32 = 9, +- VBOXOSFAMILY_MacOSX64 = 10, ++ VBOXOSFAMILY_GNU32 = 1, ++ VBOXOSFAMILY_GNU64 = 2, ++ VBOXOSFAMILY_GNUHurd = 3, ++ VBOXOSFAMILY_GNULinux32 = 4, ++ VBOXOSFAMILY_GNULinux64 = 5, + /** The usual 32-bit hack. */ + VBOXOSFAMILY_32BIT_HACK = 0x7fffffff + } VBOXOSFAMILY; +--- VirtualBox-4.1.18.orig/src/VBox/Main/src-server/ApplianceImpl.cpp 2012-06-20 10:17:35.000000000 -0300 ++++ VirtualBox-4.1.18/src/VBox/Main/src-server/ApplianceImpl.cpp 2012-07-26 01:28:50.033551279 -0300 +@@ -49,94 +49,33 @@ + g_osTypes[] = + { + { ovf::CIMOSType_CIMOS_Unknown, SchemaDefs_OSTypeId_Other }, +- { ovf::CIMOSType_CIMOS_OS2, SchemaDefs_OSTypeId_OS2 }, +- { ovf::CIMOSType_CIMOS_OS2, SchemaDefs_OSTypeId_OS2Warp3 }, +- { ovf::CIMOSType_CIMOS_OS2, SchemaDefs_OSTypeId_OS2Warp4 }, +- { ovf::CIMOSType_CIMOS_OS2, SchemaDefs_OSTypeId_OS2Warp45 }, +- { ovf::CIMOSType_CIMOS_MSDOS, SchemaDefs_OSTypeId_DOS }, +- { ovf::CIMOSType_CIMOS_WIN3x, SchemaDefs_OSTypeId_Windows31 }, +- { ovf::CIMOSType_CIMOS_WIN95, SchemaDefs_OSTypeId_Windows95 }, +- { ovf::CIMOSType_CIMOS_WIN98, SchemaDefs_OSTypeId_Windows98 }, +- { ovf::CIMOSType_CIMOS_WINNT, SchemaDefs_OSTypeId_WindowsNT }, +- { ovf::CIMOSType_CIMOS_WINNT, SchemaDefs_OSTypeId_WindowsNT4 }, +- { ovf::CIMOSType_CIMOS_NetWare, SchemaDefs_OSTypeId_Netware }, +- { ovf::CIMOSType_CIMOS_NovellOES, SchemaDefs_OSTypeId_Netware }, +- { ovf::CIMOSType_CIMOS_Solaris, SchemaDefs_OSTypeId_Solaris }, +- { ovf::CIMOSType_CIMOS_SunOS, SchemaDefs_OSTypeId_Solaris }, +- { ovf::CIMOSType_CIMOS_FreeBSD, SchemaDefs_OSTypeId_FreeBSD }, +- { ovf::CIMOSType_CIMOS_NetBSD, SchemaDefs_OSTypeId_NetBSD }, +- { ovf::CIMOSType_CIMOS_QNX, SchemaDefs_OSTypeId_QNX }, +- { ovf::CIMOSType_CIMOS_Windows2000, SchemaDefs_OSTypeId_Windows2000 }, +- { ovf::CIMOSType_CIMOS_WindowsMe, SchemaDefs_OSTypeId_WindowsMe }, +- { ovf::CIMOSType_CIMOS_OpenBSD, SchemaDefs_OSTypeId_OpenBSD }, +- { ovf::CIMOSType_CIMOS_WindowsXP, SchemaDefs_OSTypeId_WindowsXP }, +- { ovf::CIMOSType_CIMOS_WindowsXPEmbedded, SchemaDefs_OSTypeId_WindowsXP }, +- { ovf::CIMOSType_CIMOS_WindowsEmbeddedforPointofService, SchemaDefs_OSTypeId_WindowsXP }, +- { ovf::CIMOSType_CIMOS_MicrosoftWindowsServer2003, SchemaDefs_OSTypeId_Windows2003 }, +- { ovf::CIMOSType_CIMOS_MicrosoftWindowsServer2003_64, SchemaDefs_OSTypeId_Windows2003_64 }, +- { ovf::CIMOSType_CIMOS_WindowsXP_64, SchemaDefs_OSTypeId_WindowsXP_64 }, +- { ovf::CIMOSType_CIMOS_WindowsVista, SchemaDefs_OSTypeId_WindowsVista }, +- { ovf::CIMOSType_CIMOS_WindowsVista_64, SchemaDefs_OSTypeId_WindowsVista_64 }, +- { ovf::CIMOSType_CIMOS_MicrosoftWindowsServer2008, SchemaDefs_OSTypeId_Windows2008 }, +- { ovf::CIMOSType_CIMOS_MicrosoftWindowsServer2008_64, SchemaDefs_OSTypeId_Windows2008_64 }, +- { ovf::CIMOSType_CIMOS_FreeBSD_64, SchemaDefs_OSTypeId_FreeBSD_64 }, +- { ovf::CIMOSType_CIMOS_MACOS, SchemaDefs_OSTypeId_MacOS }, +- { ovf::CIMOSType_CIMOS_MACOS, SchemaDefs_OSTypeId_MacOS_64 }, // there is no CIM 64-bit type for this +- +- // Linuxes +- { ovf::CIMOSType_CIMOS_RedHatEnterpriseLinux, SchemaDefs_OSTypeId_RedHat }, +- { ovf::CIMOSType_CIMOS_RedHatEnterpriseLinux_64, SchemaDefs_OSTypeId_RedHat_64 }, +- { ovf::CIMOSType_CIMOS_Solaris_64, SchemaDefs_OSTypeId_Solaris_64 }, +- { ovf::CIMOSType_CIMOS_SUSE, SchemaDefs_OSTypeId_OpenSUSE }, +- { ovf::CIMOSType_CIMOS_SLES, SchemaDefs_OSTypeId_OpenSUSE }, +- { ovf::CIMOSType_CIMOS_NovellLinuxDesktop, SchemaDefs_OSTypeId_OpenSUSE }, +- { ovf::CIMOSType_CIMOS_SUSE_64, SchemaDefs_OSTypeId_OpenSUSE_64 }, +- { ovf::CIMOSType_CIMOS_SLES_64, SchemaDefs_OSTypeId_OpenSUSE_64 }, +- { ovf::CIMOSType_CIMOS_LINUX, SchemaDefs_OSTypeId_Linux }, +- { ovf::CIMOSType_CIMOS_LINUX, SchemaDefs_OSTypeId_Linux22 }, +- { ovf::CIMOSType_CIMOS_SunJavaDesktopSystem, SchemaDefs_OSTypeId_Linux }, +- { ovf::CIMOSType_CIMOS_TurboLinux, SchemaDefs_OSTypeId_Turbolinux }, +- { ovf::CIMOSType_CIMOS_TurboLinux_64, SchemaDefs_OSTypeId_Turbolinux_64 }, +- { ovf::CIMOSType_CIMOS_Mandriva, SchemaDefs_OSTypeId_Mandriva }, +- { ovf::CIMOSType_CIMOS_Mandriva_64, SchemaDefs_OSTypeId_Mandriva_64 }, +- { ovf::CIMOSType_CIMOS_Ubuntu, SchemaDefs_OSTypeId_Ubuntu }, +- { ovf::CIMOSType_CIMOS_Ubuntu_64, SchemaDefs_OSTypeId_Ubuntu_64 }, +- { ovf::CIMOSType_CIMOS_Debian, SchemaDefs_OSTypeId_Debian }, +- { ovf::CIMOSType_CIMOS_Debian_64, SchemaDefs_OSTypeId_Debian_64 }, +- { ovf::CIMOSType_CIMOS_Linux_2_4_x, SchemaDefs_OSTypeId_Linux24 }, +- { ovf::CIMOSType_CIMOS_Linux_2_4_x_64, SchemaDefs_OSTypeId_Linux24_64 }, +- { ovf::CIMOSType_CIMOS_Linux_2_6_x, SchemaDefs_OSTypeId_Linux26 }, +- { ovf::CIMOSType_CIMOS_Linux_2_6_x_64, SchemaDefs_OSTypeId_Linux26_64 }, +- { ovf::CIMOSType_CIMOS_Linux_64, SchemaDefs_OSTypeId_Linux26_64 }, +- +- // types that we have support for but CIM doesn't +- { ovf::CIMOSType_CIMOS_Linux_2_6_x, SchemaDefs_OSTypeId_ArchLinux }, +- { ovf::CIMOSType_CIMOS_Linux_2_6_x_64, SchemaDefs_OSTypeId_ArchLinux_64 }, +- { ovf::CIMOSType_CIMOS_Linux_2_6_x, SchemaDefs_OSTypeId_Fedora }, +- { ovf::CIMOSType_CIMOS_Linux_2_6_x_64, SchemaDefs_OSTypeId_Fedora_64 }, +- { ovf::CIMOSType_CIMOS_Linux_2_6_x, SchemaDefs_OSTypeId_Gentoo }, +- { ovf::CIMOSType_CIMOS_Linux_2_6_x_64, SchemaDefs_OSTypeId_Gentoo_64 }, +- { ovf::CIMOSType_CIMOS_Linux_2_6_x, SchemaDefs_OSTypeId_Xandros }, +- { ovf::CIMOSType_CIMOS_Linux_2_6_x_64, SchemaDefs_OSTypeId_Xandros_64 }, +- { ovf::CIMOSType_CIMOS_Solaris, SchemaDefs_OSTypeId_OpenSolaris }, +- { ovf::CIMOSType_CIMOS_Solaris_64, SchemaDefs_OSTypeId_OpenSolaris_64 }, +- +- // types added with CIM 2.25.0 follow: +- { ovf::CIMOSType_CIMOS_WindowsServer2008R2, SchemaDefs_OSTypeId_Windows2008 }, // duplicate, see above +-// { ovf::CIMOSType_CIMOS_VMwareESXi = 104, // we can't run ESX in a VM +- { ovf::CIMOSType_CIMOS_Windows7, SchemaDefs_OSTypeId_Windows7 }, +- { ovf::CIMOSType_CIMOS_Windows7, SchemaDefs_OSTypeId_Windows7_64 }, // there is no CIM 64-bit type for this +- { ovf::CIMOSType_CIMOS_CentOS, SchemaDefs_OSTypeId_RedHat }, +- { ovf::CIMOSType_CIMOS_CentOS_64, SchemaDefs_OSTypeId_RedHat_64 }, +- { ovf::CIMOSType_CIMOS_OracleEnterpriseLinux, SchemaDefs_OSTypeId_Oracle }, +- { ovf::CIMOSType_CIMOS_OracleEnterpriseLinux_64, SchemaDefs_OSTypeId_Oracle_64 }, +- { ovf::CIMOSType_CIMOS_eComStation, SchemaDefs_OSTypeId_OS2eCS } +- +- // there are no CIM types for these, so these turn to "other" on export: +- // SchemaDefs_OSTypeId_OpenBSD +- // SchemaDefs_OSTypeId_OpenBSD_64 +- // SchemaDefs_OSTypeId_NetBSD +- // SchemaDefs_OSTypeId_NetBSD_64 ++ ++ // Custom OS ++ { ovf::CIMOSType_CIMOS_GNU, SchemaDefs_OSTypeId_GNU }, ++ { ovf::CIMOSType_CIMOS_GNU_64, SchemaDefs_OSTypeId_GNU_64 }, ++ { ovf::CIMOSType_CIMOS_GNUHurd, SchemaDefs_OSTypeId_GNUHurd }, ++ { ovf::CIMOSType_CIMOS_GNULinux, SchemaDefs_OSTypeId_GNULinux }, ++ { ovf::CIMOSType_CIMOS_GNULinux_64, SchemaDefs_OSTypeId_GNULinux_64 }, ++ ++ // GNU/Linux free distros ++ { ovf::CIMOSType_CIMOS_gNewSense, SchemaDefs_OSTypeId_gNewSense }, ++ { ovf::CIMOSType_CIMOS_gNewSense_64, SchemaDefs_OSTypeId_gNewSense_64 }, ++ { ovf::CIMOSType_CIMOS_Dragora, SchemaDefs_OSTypeId_Dragora }, ++ { ovf::CIMOSType_CIMOS_Dragora_64, SchemaDefs_OSTypeId_Dragora_64 }, ++ { ovf::CIMOSType_CIMOS_Musix, SchemaDefs_OSTypeId_Musix }, ++ { ovf::CIMOSType_CIMOS_Musix_64, SchemaDefs_OSTypeId_Musix_64 }, ++ { ovf::CIMOSType_CIMOS_Trisquel, SchemaDefs_OSTypeId_Trisquel }, ++ { ovf::CIMOSType_CIMOS_Trisquel_64, SchemaDefs_OSTypeId_Trisquel_64 }, ++ { ovf::CIMOSType_CIMOS_Dynebolic, SchemaDefs_OSTypeId_Dynebolic }, ++ { ovf::CIMOSType_CIMOS_Venenux, SchemaDefs_OSTypeId_Venenux }, ++ ++ // GNU/Linux free distros that we have support for but CIM doesn't ++ { ovf::CIMOSType_CIMOS_GNULinux, SchemaDefs_OSTypeId_Parabola }, ++ { ovf::CIMOSType_CIMOS_GNULinux_64, SchemaDefs_OSTypeId_Parabola_64 }, ++ { ovf::CIMOSType_CIMOS_GNULinux, SchemaDefs_OSTypeId_Blag }, ++ { ovf::CIMOSType_CIMOS_GNULinux_64, SchemaDefs_OSTypeId_Blag_64 }, ++ { ovf::CIMOSType_CIMOS_GNULinux, SchemaDefs_OSTypeId_Ututo }, ++ { ovf::CIMOSType_CIMOS_GNULinux_64, SchemaDefs_OSTypeId_Ututo_64 }, + + }; + +@@ -150,53 +89,34 @@ + /* These are the 32-Bit ones. They are sorted by priority. */ + static const osTypePattern g_osTypesPattern[] = + { +- {"Windows NT", SchemaDefs_OSTypeId_WindowsNT4}, +- {"Windows XP", SchemaDefs_OSTypeId_WindowsXP}, +- {"Windows 2000", SchemaDefs_OSTypeId_Windows2000}, +- {"Windows 2003", SchemaDefs_OSTypeId_Windows2003}, +- {"Windows Vista", SchemaDefs_OSTypeId_WindowsVista}, +- {"Windows 2008", SchemaDefs_OSTypeId_Windows2008}, +- {"SUSE", SchemaDefs_OSTypeId_OpenSUSE}, +- {"Novell", SchemaDefs_OSTypeId_OpenSUSE}, +- {"Red Hat", SchemaDefs_OSTypeId_RedHat}, +- {"Mandriva", SchemaDefs_OSTypeId_Mandriva}, +- {"Ubuntu", SchemaDefs_OSTypeId_Ubuntu}, +- {"Debian", SchemaDefs_OSTypeId_Debian}, +- {"QNX", SchemaDefs_OSTypeId_QNX}, +- {"Linux 2.4", SchemaDefs_OSTypeId_Linux24}, +- {"Linux 2.6", SchemaDefs_OSTypeId_Linux26}, +- {"Linux", SchemaDefs_OSTypeId_Linux}, +- {"OpenSolaris", SchemaDefs_OSTypeId_OpenSolaris}, +- {"Solaris", SchemaDefs_OSTypeId_OpenSolaris}, +- {"FreeBSD", SchemaDefs_OSTypeId_FreeBSD}, +- {"NetBSD", SchemaDefs_OSTypeId_NetBSD}, +- {"Windows 95", SchemaDefs_OSTypeId_Windows95}, +- {"Windows 98", SchemaDefs_OSTypeId_Windows98}, +- {"Windows Me", SchemaDefs_OSTypeId_WindowsMe}, +- {"Windows 3.", SchemaDefs_OSTypeId_Windows31}, +- {"DOS", SchemaDefs_OSTypeId_DOS}, +- {"OS2", SchemaDefs_OSTypeId_OS2} ++ ++ {"Parabola GNU/Linux-libre", SchemaDefs_OSTypeId_Parabola}, ++ {"gNewSense", SchemaDefs_OSTypeId_gNewSense}, ++ {"Blag Linux and GNU", SchemaDefs_OSTypeId_Blag}, ++ {"Dragora", SchemaDefs_OSTypeId_Dragora}, ++ {"Ututo XS", SchemaDefs_OSTypeId_Ututo}, ++ {"Musix", SchemaDefs_OSTypeId_Musix}, ++ {"Trisquel", SchemaDefs_OSTypeId_Trisquel}, ++ {"Dyne:bolic", SchemaDefs_OSTypeId_Dynebolic}, ++ {"Venenux", SchemaDefs_OSTypeId_Venenux}, ++ {"GNU", SchemaDefs_OSTypeId_GNU}, ++ {"GNU-Hurd", SchemaDefs_OSTypeId_GNUHurd}, ++ {"GNU/Linux", SchemaDefs_OSTypeId_GNULinux}, ++ + }; + + /* These are the 64-Bit ones. They are sorted by priority. */ + static const osTypePattern g_osTypesPattern64[] = + { +- {"Windows XP", SchemaDefs_OSTypeId_WindowsXP_64}, +- {"Windows 2003", SchemaDefs_OSTypeId_Windows2003_64}, +- {"Windows Vista", SchemaDefs_OSTypeId_WindowsVista_64}, +- {"Windows 2008", SchemaDefs_OSTypeId_Windows2008_64}, +- {"SUSE", SchemaDefs_OSTypeId_OpenSUSE_64}, +- {"Novell", SchemaDefs_OSTypeId_OpenSUSE_64}, +- {"Red Hat", SchemaDefs_OSTypeId_RedHat_64}, +- {"Mandriva", SchemaDefs_OSTypeId_Mandriva_64}, +- {"Ubuntu", SchemaDefs_OSTypeId_Ubuntu_64}, +- {"Debian", SchemaDefs_OSTypeId_Debian_64}, +- {"Linux 2.4", SchemaDefs_OSTypeId_Linux24_64}, +- {"Linux 2.6", SchemaDefs_OSTypeId_Linux26_64}, +- {"Linux", SchemaDefs_OSTypeId_Linux26_64}, +- {"OpenSolaris", SchemaDefs_OSTypeId_OpenSolaris_64}, +- {"Solaris", SchemaDefs_OSTypeId_OpenSolaris_64}, +- {"FreeBSD", SchemaDefs_OSTypeId_FreeBSD_64}, ++ {"Parabola GNU/Linux-libre", SchemaDefs_OSTypeId_Parabola_64}, ++ {"gNewSense", SchemaDefs_OSTypeId_gNewSense_64}, ++ {"Blag Linux and GNU", SchemaDefs_OSTypeId_Blag_64}, ++ {"Dragora", SchemaDefs_OSTypeId_Dragora_64}, ++ {"Ututo XS", SchemaDefs_OSTypeId_Ututo_64}, ++ {"Musix", SchemaDefs_OSTypeId_Musix_64}, ++ {"Trisquel", SchemaDefs_OSTypeId_Trisquel_64}, ++ {"GNU", SchemaDefs_OSTypeId_GNU_64}, ++ {"GNU/Linux", SchemaDefs_OSTypeId_GNULinux_64}, + }; + + /** +--- VirtualBox-4.1.18.orig/src/VBox/Main/include/ovfreader.h 2012-06-20 10:17:34.000000000 -0300 ++++ VirtualBox-4.1.18/src/VBox/Main/include/ovfreader.h 2012-07-26 03:51:21.807619186 -0300 +@@ -34,119 +34,24 @@ + + enum CIMOSType_T + { +- CIMOSType_CIMOS_Unknown = 0, +- CIMOSType_CIMOS_Other = 1, +- CIMOSType_CIMOS_MACOS = 2, +- CIMOSType_CIMOS_ATTUNIX = 3, +- CIMOSType_CIMOS_DGUX = 4, +- CIMOSType_CIMOS_DECNT = 5, +- CIMOSType_CIMOS_Tru64UNIX = 6, +- CIMOSType_CIMOS_OpenVMS = 7, +- CIMOSType_CIMOS_HPUX = 8, +- CIMOSType_CIMOS_AIX = 9, +- CIMOSType_CIMOS_MVS = 10, +- CIMOSType_CIMOS_OS400 = 11, +- CIMOSType_CIMOS_OS2 = 12, +- CIMOSType_CIMOS_JavaVM = 13, +- CIMOSType_CIMOS_MSDOS = 14, +- CIMOSType_CIMOS_WIN3x = 15, +- CIMOSType_CIMOS_WIN95 = 16, +- CIMOSType_CIMOS_WIN98 = 17, +- CIMOSType_CIMOS_WINNT = 18, +- CIMOSType_CIMOS_WINCE = 19, +- CIMOSType_CIMOS_NCR3000 = 20, +- CIMOSType_CIMOS_NetWare = 21, +- CIMOSType_CIMOS_OSF = 22, +- CIMOSType_CIMOS_DCOS = 23, +- CIMOSType_CIMOS_ReliantUNIX = 24, +- CIMOSType_CIMOS_SCOUnixWare = 25, +- CIMOSType_CIMOS_SCOOpenServer = 26, +- CIMOSType_CIMOS_Sequent = 27, +- CIMOSType_CIMOS_IRIX = 28, +- CIMOSType_CIMOS_Solaris = 29, +- CIMOSType_CIMOS_SunOS = 30, +- CIMOSType_CIMOS_U6000 = 31, +- CIMOSType_CIMOS_ASERIES = 32, +- CIMOSType_CIMOS_HPNonStopOS = 33, +- CIMOSType_CIMOS_HPNonStopOSS = 34, +- CIMOSType_CIMOS_BS2000 = 35, +- CIMOSType_CIMOS_LINUX = 36, +- CIMOSType_CIMOS_Lynx = 37, +- CIMOSType_CIMOS_XENIX = 38, +- CIMOSType_CIMOS_VM = 39, +- CIMOSType_CIMOS_InteractiveUNIX = 40, +- CIMOSType_CIMOS_BSDUNIX = 41, +- CIMOSType_CIMOS_FreeBSD = 42, +- CIMOSType_CIMOS_NetBSD = 43, +- CIMOSType_CIMOS_GNUHurd = 44, +- CIMOSType_CIMOS_OS9 = 45, +- CIMOSType_CIMOS_MACHKernel = 46, +- CIMOSType_CIMOS_Inferno = 47, +- CIMOSType_CIMOS_QNX = 48, +- CIMOSType_CIMOS_EPOC = 49, +- CIMOSType_CIMOS_IxWorks = 50, +- CIMOSType_CIMOS_VxWorks = 51, +- CIMOSType_CIMOS_MiNT = 52, +- CIMOSType_CIMOS_BeOS = 53, +- CIMOSType_CIMOS_HPMPE = 54, +- CIMOSType_CIMOS_NextStep = 55, +- CIMOSType_CIMOS_PalmPilot = 56, +- CIMOSType_CIMOS_Rhapsody = 57, +- CIMOSType_CIMOS_Windows2000 = 58, +- CIMOSType_CIMOS_Dedicated = 59, +- CIMOSType_CIMOS_OS390 = 60, +- CIMOSType_CIMOS_VSE = 61, +- CIMOSType_CIMOS_TPF = 62, +- CIMOSType_CIMOS_WindowsMe = 63, +- CIMOSType_CIMOS_CalderaOpenUNIX = 64, +- CIMOSType_CIMOS_OpenBSD = 65, +- CIMOSType_CIMOS_NotApplicable = 66, +- CIMOSType_CIMOS_WindowsXP = 67, +- CIMOSType_CIMOS_zOS = 68, +- CIMOSType_CIMOS_MicrosoftWindowsServer2003 = 69, +- CIMOSType_CIMOS_MicrosoftWindowsServer2003_64 = 70, +- CIMOSType_CIMOS_WindowsXP_64 = 71, +- CIMOSType_CIMOS_WindowsXPEmbedded = 72, +- CIMOSType_CIMOS_WindowsVista = 73, +- CIMOSType_CIMOS_WindowsVista_64 = 74, +- CIMOSType_CIMOS_WindowsEmbeddedforPointofService = 75, +- CIMOSType_CIMOS_MicrosoftWindowsServer2008 = 76, +- CIMOSType_CIMOS_MicrosoftWindowsServer2008_64 = 77, +- CIMOSType_CIMOS_FreeBSD_64 = 78, +- CIMOSType_CIMOS_RedHatEnterpriseLinux = 79, +- CIMOSType_CIMOS_RedHatEnterpriseLinux_64 = 80, +- CIMOSType_CIMOS_Solaris_64 = 81, +- CIMOSType_CIMOS_SUSE = 82, +- CIMOSType_CIMOS_SUSE_64 = 83, +- CIMOSType_CIMOS_SLES = 84, +- CIMOSType_CIMOS_SLES_64 = 85, +- CIMOSType_CIMOS_NovellOES = 86, +- CIMOSType_CIMOS_NovellLinuxDesktop = 87, +- CIMOSType_CIMOS_SunJavaDesktopSystem = 88, +- CIMOSType_CIMOS_Mandriva = 89, +- CIMOSType_CIMOS_Mandriva_64 = 90, +- CIMOSType_CIMOS_TurboLinux = 91, +- CIMOSType_CIMOS_TurboLinux_64 = 92, +- CIMOSType_CIMOS_Ubuntu = 93, +- CIMOSType_CIMOS_Ubuntu_64 = 94, +- CIMOSType_CIMOS_Debian = 95, +- CIMOSType_CIMOS_Debian_64 = 96, +- CIMOSType_CIMOS_Linux_2_4_x = 97, +- CIMOSType_CIMOS_Linux_2_4_x_64 = 98, +- CIMOSType_CIMOS_Linux_2_6_x = 99, +- CIMOSType_CIMOS_Linux_2_6_x_64 = 100, +- CIMOSType_CIMOS_Linux_64 = 101, +- CIMOSType_CIMOS_Other_64 = 102, +- // types added with CIM 2.25.0 follow: +- CIMOSType_CIMOS_WindowsServer2008R2 = 103, +- CIMOSType_CIMOS_VMwareESXi = 104, +- CIMOSType_CIMOS_Windows7 = 105, +- CIMOSType_CIMOS_CentOS = 106, +- CIMOSType_CIMOS_CentOS_64 = 107, +- CIMOSType_CIMOS_OracleEnterpriseLinux = 108, +- CIMOSType_CIMOS_OracleEnterpriseLinux_64 = 109, +- CIMOSType_CIMOS_eComStation = 110 +- // no new types added with CIM 2.26.0 ++ CIMOSType_CIMOS_Unknown = 0, ++ CIMOSType_CIMOS_Other = 1, ++ CIMOSType_CIMOS_Other_64 = 2, ++ CIMOSType_CIMOS_gNewSense = 3, ++ CIMOSType_CIMOS_gNewSense_64 = 4, ++ CIMOSType_CIMOS_Dragora = 5, ++ CIMOSType_CIMOS_Dragora_64 = 6, ++ CIMOSType_CIMOS_Musix = 7, ++ CIMOSType_CIMOS_Musix_64 = 8, ++ CIMOSType_CIMOS_Trisquel = 9, ++ CIMOSType_CIMOS_Trisquel_64 = 10, ++ CIMOSType_CIMOS_Dynebolic = 11, ++ CIMOSType_CIMOS_Venenux = 12, ++ CIMOSType_CIMOS_GNU = 13, ++ CIMOSType_CIMOS_GNU_64 = 14, ++ CIMOSType_CIMOS_GNUHurd = 15, ++ CIMOSType_CIMOS_GNULinux = 16, ++ CIMOSType_CIMOS_GNULinux_64 = 17 + }; + + +--- VirtualBox-4.1.18.orig/src/VBox/Additions/common/VBoxGuest/VBoxGuest-linux.c 2012-06-20 10:09:01.000000000 -0300 ++++ VirtualBox-4.1.18/src/VBox/Additions/common/VBoxGuest/VBoxGuest-linux.c 2012-07-26 15:32:55.309812685 -0300 +@@ -622,16 +622,16 @@ + * Call the common device extension initializer. + */ + #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) && defined(RT_ARCH_X86) +- VBOXOSTYPE enmOSType = VBOXOSTYPE_Linux26; ++ VBOXOSTYPE enmOSType = VBOXOSTYPE_GNULinux; + #elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) && defined(RT_ARCH_AMD64) +- VBOXOSTYPE enmOSType = VBOXOSTYPE_Linux26_x64; ++ VBOXOSTYPE enmOSType = VBOXOSTYPE_GNULinux_x64; + #elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 0) && defined(RT_ARCH_X86) +- VBOXOSTYPE enmOSType = VBOXOSTYPE_Linux24; ++ VBOXOSTYPE enmOSType = VBOXOSTYPE_GNULinux; + #elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 0) && defined(RT_ARCH_AMD64) +- VBOXOSTYPE enmOSType = VBOXOSTYPE_Linux24_x64; ++ VBOXOSTYPE enmOSType = VBOXOSTYPE_GNULinux_x64; + #else + # warning "huh? which arch + version is this?" +- VBOXOSTYPE enmOsType = VBOXOSTYPE_Linux; ++ VBOXOSTYPE enmOsType = VBOXOSTYPE_GNULinux; + #endif + rc = VBoxGuestInitDevExt(&g_DevExt, + g_IOPortBase, diff --git a/libre/virtualbox-libre-modules-lts/libre.patch b/libre/virtualbox-libre-modules-lts/libre.patch new file mode 100644 index 000000000..e51d0c0a7 --- /dev/null +++ b/libre/virtualbox-libre-modules-lts/libre.patch @@ -0,0 +1,5765 @@ +--- VirtualBox-4.1.18.orig/Config.kmk 2012-07-24 16:38:43.981310996 -0300 ++++ VirtualBox-4.1.18/Config.kmk 2012-07-24 16:38:44.001309865 -0300 +@@ -56,9 +56,6 @@ + PROPS_SYSMODS_ACCUMULATE_L += INTERMEDIATES + PROPS_MISCBINS_ACCUMULATE_L += INTERMEDIATES + +-# Misc names used bye the install paths below. +-VBOX_PUEL_MANGLED_NAME := Oracle_VM_VirtualBox_Extension_Pack +- + # Install paths + ## @todo This will change after 4.1 is branched off! + # What is now 'bin' and 'lib' will be moved down under 'staged/', except on +@@ -125,9 +122,6 @@ + endif + + INST_DOC = doc/ +-INST_EXTPACK = $(INST_BIN)ExtensionPacks/ +-INST_EXTPACK_CERTS = $(INST_BIN)ExtPackCertificates/ +-INST_EXTPACK_PUEL = $(INST_EXTPACK)$(VBOX_PUEL_MANGLED_NAME)/ + INST_PACKAGES = packages/ + + VBOX_PATH_SDK = $(patsubst %/,%,$(PATH_STAGE)/$(INST_SDK)) +@@ -136,7 +130,6 @@ + VBOX_PATH_ADDITIONS = $(patsubst %/,%,$(PATH_STAGE)/$(INST_ADDITIONS)) + VBOX_PATH_ADDITIONS_ISO = $(patsubst %/,%,$(PATH_STAGE)/$(INST_ADDITIONS_ISO)) + VBOX_PATH_ADDITIONS_LIB = $(patsubst %/,%,$(PATH_STAGE)/$(INST_ADDITIONS_LIB)) +-VBOX_PATH_EXTPACK_PUEL= $(patsubst %/,%,$(PATH_STAGE)/$(INST_EXTPACK_PUEL)) + VBOX_PATH_PACKAGES = $(patsubst %/,%,$(PATH_STAGE)/$(INST_PACKAGES)) + + +@@ -208,7 +201,6 @@ + export VBOX_ADDITIONS_SH_MODE = release + export VBOX_DOCUMENTATION_SH_MODE = release + export VBOX_EFI_SH_MODE = release +- export VBOX_EXTPACKS_SH_MODE = release + endif + + # Some info on the vendor +@@ -361,8 +353,6 @@ + VBOX_WITH_USB = 1 + # Enable the USB 1.1 controller plus virtual USB HID devices. + VBOX_WITH_VUSB = 1 +-# Enable the USB 2.0 controller. +-VBOX_WITH_EHCI = 1 + # Enable the ISCSI feature. + VBOX_WITH_ISCSI = 1 + # Enable INIP support in the ISCSI feature. +@@ -430,9 +420,6 @@ + ifdef VBOX_WITH_USB + VBOX_WITH_VUSB = 1 + endif +-ifdef VBOX_WITH_EHCI +- VBOX_WITH_EHCI_IMPL = 1 +-endif + ifdef VBOX_WITH_PCI_PASSTHROUGH + VBOX_WITH_PCI_PASSTHROUGH_IMPL = 1 + endif +@@ -591,15 +578,6 @@ + ## @} + + +-## @name Extension pack +-## @{ +-# Enables the extension pack feature. +-VBOX_WITH_EXTPACK = 1 +-# Enables separating code into the Oracle VM VirtualBox Extension Pack, dubbed PUEL. +-VBOX_WITH_EXTPACK_PUEL = 1 +-# Enables building+packing the Oracle VM VirtualBox Extension Pack, includes VBOX_WITH_EXTPACK_PUEL +-VBOX_WITH_EXTPACK_PUEL_BUILD = 1 +-## @} + + ## @name Misc + ## @{ +@@ -777,14 +755,6 @@ + # Skip stuff. + # + +-ifdef VBOX_ONLY_EXTPACKS +- # Clear some VBOX_WITH_XXX variables instead of adding ifdefs all over the place. +- VBOX_WITH_DEBUGGER = +- VBOX_WITH_ADDITIONS = +- VBOX_WITH_VBOXDRV = +- VBOX_WITH_TESTCASES = +-endif +- + # VBOX_QUICK can be used by core developers to speed to the build + ifdef VBOX_QUICK + # undefine variables by assigning blank. +@@ -848,7 +818,6 @@ + VBOX_WITH_TESTSUITE= + VBOX_WITH_QTGUI= + VBOX_WITH_USB= +- VBOX_WITH_EHCI= + VBOX_WITH_DOCS= + VBOX_WITH_PDM_ASYNC_COMPLETION= + VBOX_WITH_KCHMVIEWER= +@@ -870,7 +839,6 @@ + VBOX_WITH_CROGL= + VBOX_WITH_DEBUGGER= + VBOX_WITH_DOCS= +- VBOX_WITH_EHCI= + VBOX_WITH_HARDENING= + VBOX_WITH_HEADLESS= + VBOX_WITH_HGCM= +@@ -952,9 +920,6 @@ + # + ifdef VBOX_OSE + VBOX_WITH_VRDP= +- VBOX_WITH_EHCI_IMPL= +- VBOX_WITH_EXTPACK_PUEL= +- VBOX_WITH_EXTPACK_PUEL_BUILD= + VBOX_WITH_PCI_PASSTHROUGH_IMPL= + VBOX_WITH_OS2_ADDITIONS_BIN= + VBOX_WITH_SECURELABEL= +@@ -1082,10 +1047,6 @@ + VBOX_WITH_KCHMVIEWER= + endif + +-ifdef VBOX_WITH_EXTPACK_PUEL_BUILD +- VBOX_WITH_EXTPACK_PUEL = 1 +-endif +- + # + # Mark OSE builds clearly, helps figuring out limitations more easily. + # +@@ -1679,9 +1640,6 @@ + # biossums (set BIOS checksums) + VBOX_BIOSSUMS ?= $(PATH_OBJ)/biossums/biossums$(HOSTSUFF_EXE) + +-# RTManifest (extension pack manifest utility) +-VBOX_RTMANIFEST ?= $(PATH_OBJ)/bldRTManifest/bldRTManifest$(HOSTSUFF_EXE) +- + # filesplitter (splits java files) + VBOX_FILESPLIT ?= $(PATH_OBJ)/filesplitter/filesplitter$(HOSTSUFF_EXE) + +@@ -2461,13 +2419,6 @@ + SDK_VBOX_OPENSSL2_LIBS = $(NO_SUCH_VARIABLE) + endif + +-SDK_VBoxOpenSslExtPack = Internal use only. +-SDK_VBoxOpenSslExtPack_INCS = $(SDK_VBOX_OPENSSL_VBOX_DEFAULT_INCS) +-SDK_VBoxOpenSslExtPack_ORDERDEPS = $(crypto-headers_1_TARGET) +-SDK_VBoxOpenSslExtPack_LIBS = \ +- $(PATH_STAGE_LIB)/VBoxExtPack-libssl$(VBOX_SUFF_LIB) \ +- $(PATH_STAGE_LIB)/VBoxExtPack-libcrypto$(VBOX_SUFF_LIB) +- + SDK_VBOX_BLD_OPENSSL = . + SDK_VBOX_BLD_OPENSSL_EXTENDS = VBOX_OPENSSL + SDK_VBOX_BLD_OPENSSL_LIBS ?= \ +@@ -3817,100 +3768,6 @@ + endif + TEMPLATE_VBOXMAINCLIENTDLL_LDFLAGS.darwin = $(filter-out -bind_at_load,$(TEMPLATE_VBOXMAINCLIENTEXE_LDFLAGS.darwin)) + +- +- +-# +-# Templates used for building the extension packs. +-# +-ifdef VBOX_WITH_EXTPACK +- # Base templates (native or portable). +- TEMPLATE_VBoxR3ExtPack = For the ring-3 context extension pack modules. +- if 1 # Native for now. +- TEMPLATE_VBoxR3ExtPack_EXTENDS = VBOXR3DLLNOXCPT +- TEMPLATE_VBoxR3ExtPack_DEFS = $(TEMPLATE_VBOXR3DLLNOXCPT_DEFS) VBOX_IN_EXTPACK VBOX_IN_EXTPACK_R3 +- else +- TEMPLATE_VBoxR3ExtPack_EXTENDS = VBOXNOCRTGCC +- TEMPLATE_VBoxR3ExtPack_DEFS = $(TEMPLATE_VBOXNOCRTGCC_DEFS) VBOX_IN_EXTPACK VBOX_IN_EXTPACK_R3 IPRT_NO_CRT IN_RING3 +- TEMPLATE_VBoxR3ExtPack_INCS = $(PATH_ROOT)/include/iprt/nocrt $(TEMPLATE_VBOXR3DLLNOXCPT_INCS) +- endif +- ifneq ($(KBUILD_TARGET),win) +- TEMPLATE_VBoxR3ExtPack_CXXFLAGS = $(TEMPLATE_VBOXR3DLLNOXCPT_CXXFLAGS) -fno-rtti +- endif +- TEMPLATE_VBoxR3ExtPack_INST = $(INST_EXTPACK)YouShallOverrideThis/ +- ifeq ($(KBUILD_TARGET),linux) +- TEMPLATE_VBoxR3ExtPack_LDFLAGS = $(filter-out '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RUNPATH)' '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)', $(TEMPLATE_VBOXR3DLLNOXCPT_LDFLAGS)) +- else +- if !defined(VBOX_WITH_RUNPATH) && defined(VBOX_WITH_RELATIVE_RUNPATH) +- TEMPLATE_VBoxR3ExtPack_LDFLAGS = '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)/../../..' $(filter-out '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)', $(TEMPLATE_VBOXR3DLLNOXCPT_LDFLAGS)) +- endif +- endif +- ifdef VBOX_ONLY_EXTPACKS_USE_IMPLIBS +- if1of ($(KBUILD_TARGET), win os2) +- TEMPLATE_VBoxR3ExtPack_LIBS = \ +- $(TEMPLATE_LIBS_VBOXR3) \ +- $(PATH_STAGE_LIB)/VMMR3Imp$(VBOX_SUFF_LIB) \ +- $(PATH_STAGE_LIB)/VBoxRTImp$(VBOX_SUFF_LIB) +- else +- TEMPLATE_VBoxR3ExtPack_LIBS = \ +- $(TEMPLATE_LIBS_VBOXR3) \ +- $(PATH_STAGE_LIB)/VMMR3Imp$(VBOX_SUFF_DLL) \ +- $(PATH_STAGE_LIB)/VBoxRTImp$(VBOX_SUFF_DLL) +- endif +- else +- TEMPLATE_VBoxR3ExtPack_LIBS = \ +- $(TEMPLATE_LIBS_VBOXR3) \ +- $(LIB_RUNTIME) \ +- $(LIB_VMM) +- endif +- +- TEMPLATE_VBoxR0ExtPack = For the ring-0 context extension pack modules. +- TEMPLATE_VBoxR0ExtPack_EXTENDS = VBoxR0 +- TEMPLATE_VBoxR0ExtPack_EXTENDS_BY = appending +- TEMPLATE_VBoxR0ExtPack_INST = $(INST_EXTPACK)YouShallOverrideThis/ +- TEMPLATE_VBoxR0ExtPack_DEFS = VBOX_IN_EXTPACK VBOX_IN_EXTPACK_R0 +- if1of ($(VBOX_LDR_FMT), pe lx) +- TEMPLATE_VBoxR0ExtPack_LIBS = \ +- $(PATH_STAGE_LIB)/VMMR0Imp$(VBOX_SUFF_LIB) \ +- $(PATH_STAGE_LIB)/SUPR0$(VBOX_SUFF_LIB) +- endif +- +- TEMPLATE_VBoxRcExtPack = For the raw-mode context extension pack modules. +- TEMPLATE_VBoxRcExtPack_EXTENDS = VBoxRc +- TEMPLATE_VBoxRcExtPack_EXTENDS_BY = appending +- TEMPLATE_VBoxRcExtPack_SYSSUFF = .rc +- TEMPLATE_VBoxRcExtPack_INST = $(INST_EXTPACK)YouShallOverrideThis/ +- TEMPLATE_VBoxRcExtPack_DEFS = VBOX_IN_EXTPACK VBOX_IN_EXTPACK_RC +- if1of ($(VBOX_LDR_FMT32), pe lx) +- TEMPLATE_VBoxRcExtPack_LIBS = \ +- $(PATH_STAGE_LIB)/VMMRCBuiltin$(VBOX_SUFF_LIB) \ +- $(PATH_STAGE_LIB)/VMMRCImp$(VBOX_SUFF_LIB) +- endif +- +- TEMPLATE_VBoxInsExtPack = For the install targets of an extension pack. +- TEMPLATE_VBoxInsExtPack_MODE = 0644 +- TEMPLATE_VBoxInsExtPack_INST = $(INST_EXTPACK)YouShallOverrideThis/ +- +- # For each individual extension pack +- ifdef VBOX_WITH_EXTPACK_PUEL +- TEMPLATE_VBoxR3ExtPackPuel = For the ring-3 context modules in the PUEL extension pack. +- TEMPLATE_VBoxR3ExtPackPuel_EXTENDS = VBoxR3ExtPack +- TEMPLATE_VBoxR3ExtPackPuel_INST = $(INST_EXTPACK_PUEL)$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/ +- +- TEMPLATE_VBoxR0ExtPackPuel = For the ring-0 context modules in the PUEL extension pack. +- TEMPLATE_VBoxR0ExtPackPuel_EXTENDS = VBoxR0ExtPack +- TEMPLATE_VBoxR0ExtPackPuel_INST = $(INST_EXTPACK_PUEL)$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/ +- +- TEMPLATE_VBoxRcExtPackPuel = For the raw-mode context modules in the PUEL extension pack. +- TEMPLATE_VBoxRcExtPackPuel_EXTENDS = VBoxRcExtPack +- TEMPLATE_VBoxRcExtPackPuel_INST = $(INST_EXTPACK_PUEL)$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/ +- +- TEMPLATE_VBoxInsExtPackPuel = For the install targets of an extension pack. +- TEMPLATE_VBoxInsExtPackPuel_EXTENDS = VBoxR0ExtPack +- TEMPLATE_VBoxInsExtPackPuel_INST = $(INST_EXTPACK_PUEL) +-endif +-endif # VBOX_WITH_EXTPACK +- +- + # + # Qt 4 + # Qt 4 +--- VirtualBox-4.1.18.orig/Makefile.kmk 2012-07-24 17:16:47.078929150 -0300 ++++ VirtualBox-4.1.18/Makefile.kmk 2012-07-24 17:16:47.125592981 -0300 +@@ -446,7 +446,6 @@ + include/VBox \ + include/VBox/vmm \ + include/VBox/com \ +- include/VBox/ExtPack \ + include/VBox/HostServices \ + include/VBox/GuestHost \ + include/VBox/HGSMI \ +@@ -862,191 +861,6 @@ + additions-build-linux.x86.combined \ + additions-packing + +- +-# +-# Build the extension packs, all of them. +-# +-# This is tailored (hardcoded) for the extension pack build box. +-# +-# The fetching must be done in serial fashion, while the building should be +-# more flexible wrt to -jN. +-# +-extpacks-fetch: +- + $(KMK) -C tools fetch VBOX_ONLY_EXTPACKS=1 +- + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=amd64 KBUILD_TARGET=darwin BUILD_TARGET_ARCH=amd64 BUILD_TARGET=darwin VBOX_ONLY_EXTPACKS=1 +- + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=x86 KBUILD_TARGET=darwin BUILD_TARGET_ARCH=x86 BUILD_TARGET=darwin VBOX_ONLY_EXTPACKS=1 +-# + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=amd64 KBUILD_TARGET=freebsd BUILD_TARGET_ARCH=amd64 BUILD_TARGET=freebsd VBOX_ONLY_EXTPACKS=1 +-# + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=x86 KBUILD_TARGET=freebsd BUILD_TARGET_ARCH=x86 BUILD_TARGET=freebsd VBOX_ONLY_EXTPACKS=1 +- + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=amd64 KBUILD_TARGET=linux BUILD_TARGET_ARCH=amd64 BUILD_TARGET=linux VBOX_ONLY_EXTPACKS=1 +- + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=x86 KBUILD_TARGET=linux BUILD_TARGET_ARCH=x86 BUILD_TARGET=linux VBOX_ONLY_EXTPACKS=1 +-# + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=x86 KBUILD_TARGET=os2 BUILD_TARGET_ARCH=x86 BUILD_TARGET=os2 VBOX_ONLY_EXTPACKS=1 +- + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=amd64 KBUILD_TARGET=solaris BUILD_TARGET_ARCH=amd64 BUILD_TARGET=solaris VBOX_ONLY_EXTPACKS=1 +- + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=x86 KBUILD_TARGET=solaris BUILD_TARGET_ARCH=x86 BUILD_TARGET=solaris VBOX_ONLY_EXTPACKS=1 +- + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=amd64 KBUILD_TARGET=win BUILD_TARGET_ARCH=amd64 BUILD_TARGET=win VBOX_ONLY_EXTPACKS=1 +- + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=x86 KBUILD_TARGET=win BUILD_TARGET_ARCH=x86 BUILD_TARGET=win VBOX_ONLY_EXTPACKS=1 +- +- +-extpacks-build: \ +- extpacks-build-win.amd64 \ +- extpacks-build-win.x86 \ +- extpacks-build-solaris.amd64 \ +- extpacks-build-solaris.x86 \ +- extpacks-build-os2.x86 \ +- extpacks-build-linux.amd64 \ +- extpacks-build-linux.x86 \ +- extpacks-build-darwin.amd64 \ +- extpacks-build-darwin.x86 \ +- extpacks-build-freebsd.amd64 \ +- extpacks-build-freebsd.x86 +- +-VBOX_EXTPACKS_BUILD.amd64 = VBOX_ONLY_EXTPACKS=1 \ +- KBUILD_TYPE=$(KBUILD_TYPE) BUILD_TYPE=$(KBUILD_TYPE) \ +- KBUILD_TARGET_ARCH=amd64 BUILD_TARGET_ARCH=amd64 \ +- VBOX_SVN_REV=$(VBOX_SVN_REV) +- +-VBOX_EXTPACKS_BUILD.x86 = VBOX_ONLY_EXTPACKS=1 \ +- KBUILD_TYPE=$(KBUILD_TYPE) BUILD_TYPE=$(KBUILD_TYPE) \ +- KBUILD_TARGET_ARCH=x86 BUILD_TARGET_ARCH=x86 \ +- VBOX_SVN_REV=$(VBOX_SVN_REV) +- +-# Automatically determine the extpack build subdir name. Used for figuring out +-# directory names inside the extension pack building VMs. +-VBOX_EXTPACKS_BUILD_SUBDIRNAME := $(lastword $(subst /, ,$(PATH_ROOT))) +- +-# When building in parallel on a Windows host, make sure we finish the host +-# bit before kicking off any UNIX guest or we'll run into file sharing issues. +-ifeq ($(KBUILD_TARGET),win) +-VBOX_EXTPACKS_BUILD_WIN_HOST_FIRST = extpacks-build-win.x86 extpacks-build-win.amd64 +-else +-VBOX_EXTPACKS_BUILD_WIN_HOST_FIRST = +-endif +- +-extpacks-build-win.amd64: +-ifeq ($(KBUILD_TARGET),win) +- + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.amd64) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK) +-else +- $(call MSG_L1,Building Windows/amd64 extension packs) +- $(VBOX_KMK_TIME) ssh vbox@192.168.27.6 " echo $@ && cd e:/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh kmk $(VBOX_EXTPACKS_BUILD.amd64) all" +-endif +- +-extpacks-build-win.x86: +-ifeq ($(KBUILD_TARGET),win) +- + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.x86) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK) +-else +- $(call MSG_L1,Building Windows/x86 extension packs) +- $(VBOX_KMK_TIME) ssh vbox@192.168.27.16 " echo $@ && cd e:/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh kmk $(VBOX_EXTPACKS_BUILD.x86) all" +-endif +- +-ifeq ($(KBUILD_TARGET),solaris) +-extpacks-build-solaris.amd64: +- + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.amd64) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK) +- +-extpacks-build-solaris.x86: extpacks-build-solaris.amd64 +- + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.x86) VBOX_WITH_COMBINED_SOLARIS_GUEST_PACKAGE=1 all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK) +- +-else +-# Serialize 32-bit and 64-bit ASSUMING the same VM builds both. +-extpacks-build-solaris.rsync-into-vm: $(VBOX_EXTPACKS_BUILD_WIN_HOST_FIRST) +- $(VBOX_KMK_TIME) $(call VBOX_RSYNC_IN_FN,solaris,*) . 192.168.27.4:/mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) +- +-extpacks-build-solaris.build-it: extpacks-build-solaris.rsync-into-vm +- $(call MSG_L1,Building Solaris/amd64 extension packs) +- $(VBOX_KMK_TIME) ssh vbox@192.168.27.4 " echo $@/amd64 && cd /mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_EXTPACKS_BUILD.amd64) all" +- $(call MSG_L1,Building Solaris/x86 extension packs) +- $(VBOX_KMK_TIME) ssh vbox@192.168.27.4 " echo $@/x86 && cd /mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_EXTPACKS_BUILD.x86) all" +- +-extpacks-build-solaris.rsync-out-of-vm: extpacks-build-solaris.build-it +- $(VBOX_KMK_TIME) rsync -a --delete 192.168.27.4:/mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME)/out/solaris.x86 out/ +- $(VBOX_KMK_TIME) rsync -a --delete 192.168.27.4:/mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME)/out/solaris.amd64 out/ +- +-.NOTPARALLEL: extpacks-build-solaris.rsync-out-of-vm extpacks-build-solaris.rsync-into-vm +-.PHONY: extpacks-build-solaris.rsync-out-of-vm extpacks-build-solaris.rsync-into-vm extpacks-build-solaris.build-it +- +-extpacks-build-solaris.amd64: extpacks-build-solaris.rsync-out-of-vm +-extpacks-build-solaris.x86: extpacks-build-solaris.rsync-out-of-vm +-endif +- +-extpacks-build-os2.x86: +-#ifeq ($(KBUILD_TARGET),os2) +-# + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.x86) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK) +-#else +-# $(VBOX_KMK_TIME) ssh vbox@192.168.27.3 " cd /mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_EXTPACKS_BUILD.x86) " +-#endif +- +-extpacks-build-linux.amd64: $(VBOX_EXTPACKS_BUILD_WIN_HOST_FIRST) +-ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),linux.amd64) +- + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.amd64) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK) +-else +- $(call MSG_L1,Building Linux/amd64 extension packs) +- $(VBOX_KMK_TIME) ssh vbox@192.168.27.12 " echo $@ && cd /mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_EXTPACKS_BUILD.amd64) all" +-endif +- +-extpacks-build-linux.x86: $(VBOX_EXTPACKS_BUILD_WIN_HOST_FIRST) +-ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),linux.x86) +- + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.x86) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK) +-else +- $(call MSG_L1,Building Linux/x86 extension packs) +- $(VBOX_KMK_TIME) ssh vbox@192.168.27.11 " echo $@ && cd /mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_EXTPACKS_BUILD.x86) all" +-endif +- +-extpacks-build-freebsd.amd64: $(VBOX_EXTPACKS_BUILD_WIN_HOST_FIRST) +-#ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),freebsd.amd64) +-# + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.amd64) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK) +-#else +-# $(call MSG_L1,Building FreeBSD/amd64 extension packs) +-# $(VBOX_KMK_TIME) ssh vbox@192.168.27.17 " echo $@ && cd /mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_EXTPACKS_BUILD.amd64) all" +-#endif +- +-extpacks-build-freebsd.x86: $(VBOX_EXTPACKS_BUILD_WIN_HOST_FIRST) +-#ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),freebsd.x86) +-# + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.x86) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK) +-#else +-# $(call MSG_L1,Building FreeBSD/x86 extension packs) +-# $(VBOX_KMK_TIME) ssh vbox@192.168.27.7 " echo $@ && cd /mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_EXTPACKS_BUILD.x86) all" +-#endif +- +-extpacks-build-darwin.amd64: $(VBOX_EXTPACKS_BUILD_WIN_HOST_FIRST) +-ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),darwin.amd64) +- + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.amd64) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK) +-else +- $(call MSG_L1,Building Darwin/amd64 extension packs) +- $(VBOX_KMK_TIME) $(call VBOX_RSYNC_IN_FN,darwin,amd64) . 192.168.27.15:/Users/vbox/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) +- $(VBOX_KMK_TIME) ssh vbox@192.168.27.15 " echo $@ && cd /Users/vbox/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_EXTPACKS_BUILD.amd64) all" +- $(VBOX_KMK_TIME) rsync -am -v --delete 192.168.27.15:/Users/vbox/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME)/out/darwin.amd64 out/ +-endif +- +-extpacks-build-darwin.x86: $(VBOX_EXTPACKS_BUILD_WIN_HOST_FIRST) +-ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),darwin.x86) +- + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.x86) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK) +-else +- $(call MSG_L1,Building Darwin/x86 extension packs) +- $(VBOX_KMK_TIME) $(call VBOX_RSYNC_IN_FN,darwin,x86) . 192.168.27.5:/Users/vbox/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) +- $(VBOX_KMK_TIME) ssh vbox@192.168.27.5 " echo $@ && cd /Users/vbox/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_EXTPACKS_BUILD.x86) all" +- $(VBOX_KMK_TIME) rsync -am -v --delete 192.168.27.5:/Users/vbox/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME)/out/darwin.x86 out/ +-endif +- +- +-extpacks-packing: +- + $(KMK) VBOX_ONLY_EXTPACKS=1 \ +- VBOX_WITH_EXTPACK_OS_ARCHS="darwin.amd64 darwin.x86 linux.amd64 linux.x86 solaris.amd64 solaris.x86 win.amd64 win.x86" \ +- packing +-# +++ freebsd.amd64 freebsd.x86 os2.x86 ^^^ +- +-.PHONY: \ +- extpacks-build-win.x86 \ +- extpacks-build-win.amd64 \ +- extpacks-build-solaris.amd64 \ +- extpacks-build-solaris.x86 \ +- extpacks-build-os2.x86 \ +- extpacks-build-linux.amd64 \ +- extpacks-build-linux.x86 \ +- extpacks-build-freebsd.amd64 \ +- extpacks-build-freebsd.x86 \ +- extpacks-build-darwin.amd64 \ +- extpacks-build-darwin.x86 \ +- extpacks-packing +- +- + # + # Build the test suite, all of it. + # +--- VirtualBox-4.1.18.orig/src/VBox/Devices/build/VBoxDD.cpp 2012-06-20 10:15:51.000000000 -0300 ++++ VirtualBox-4.1.18/src/VBox/Devices/build/VBoxDD.cpp 2012-07-24 16:18:03.964493454 -0300 +@@ -132,11 +132,6 @@ + if (RT_FAILURE(rc)) + return rc; + #endif +-#ifdef VBOX_WITH_EHCI_IMPL +- rc = pCallbacks->pfnRegister(pCallbacks, &g_DeviceEHCI); +- if (RT_FAILURE(rc)) +- return rc; +-#endif + #ifdef VBOX_ACPI + rc = pCallbacks->pfnRegister(pCallbacks, &g_DeviceACPI); + if (RT_FAILURE(rc)) +--- VirtualBox-4.1.18.orig/src/VBox/Devices/build/VBoxDD.h 2012-06-20 10:15:51.000000000 -0300 ++++ VirtualBox-4.1.18/src/VBox/Devices/build/VBoxDD.h 2012-07-24 16:20:35.939205389 -0300 +@@ -62,7 +62,6 @@ + extern const PDMDEVREG g_DeviceICH6_HDA; + extern const PDMDEVREG g_DeviceAudioSniffer; + extern const PDMDEVREG g_DeviceOHCI; +-extern const PDMDEVREG g_DeviceEHCI; + extern const PDMDEVREG g_DeviceACPI; + extern const PDMDEVREG g_DeviceDMA; + extern const PDMDEVREG g_DeviceFloppyController; +--- VirtualBox-4.1.18.orig/src/VBox/Main/include/ExtPackManagerImpl.h 2012-06-20 10:17:33.000000000 -0300 ++++ /dev/null 2012-07-24 14:48:18.638572110 -0300 +@@ -1,245 +0,0 @@ +-/* $Id: ExtPackManagerImpl.h $ */ +-/** @file +- * VirtualBox Main - interface for Extension Packs, VBoxSVC & VBoxC. +- */ +- +-/* +- * Copyright (C) 2010 Oracle Corporation +- * +- * This file is part of VirtualBox Open Source Edition (OSE), as +- * available from http://www.virtualbox.org. This file is free software; +- * you can redistribute it and/or modify it under the terms of the GNU +- * General Public License (GPL) as published by the Free Software +- * Foundation, in version 2 as it comes in the "COPYING" file of the +- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the +- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. +- */ +- +-#ifndef ____H_EXTPACKMANAGERIMPL +-#define ____H_EXTPACKMANAGERIMPL +- +-#include "VirtualBoxBase.h" +-#include <VBox/ExtPack/ExtPack.h> +-#include <iprt/fs.h> +- +-/** +- * An extension pack file. +- */ +-class ATL_NO_VTABLE ExtPackFile : +- public VirtualBoxBase, +- VBOX_SCRIPTABLE_IMPL(IExtPackFile) +-{ +-public: +- /** @name COM and internal init/term/mapping cruft. +- * @{ */ +- VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT(ExtPackFile, IExtPackFile) +- DECLARE_NOT_AGGREGATABLE(ExtPackFile) +- DECLARE_PROTECT_FINAL_CONSTRUCT() +- BEGIN_COM_MAP(ExtPackFile) +- VBOX_DEFAULT_INTERFACE_ENTRIES(IExtPackFile) +- COM_INTERFACE_ENTRY(IExtPackBase) +- END_COM_MAP() +- DECLARE_EMPTY_CTOR_DTOR(ExtPackFile) +- +- HRESULT FinalConstruct(); +- void FinalRelease(); +- HRESULT initWithFile(const char *a_pszFile, const char *a_pszDigest, class ExtPackManager *a_pExtPackMgr, VirtualBox *a_pVirtualBox); +- void uninit(); +- RTMEMEF_NEW_AND_DELETE_OPERATORS(); +- /** @} */ +- +- /** @name IExtPackBase interfaces +- * @{ */ +- STDMETHOD(COMGETTER(Name))(BSTR *a_pbstrName); +- STDMETHOD(COMGETTER(Description))(BSTR *a_pbstrDescription); +- STDMETHOD(COMGETTER(Version))(BSTR *a_pbstrVersion); +- STDMETHOD(COMGETTER(Revision))(ULONG *a_puRevision); +- STDMETHOD(COMGETTER(VRDEModule))(BSTR *a_pbstrVrdeModule); +- STDMETHOD(COMGETTER(PlugIns))(ComSafeArrayOut(IExtPackPlugIn *, a_paPlugIns)); +- STDMETHOD(COMGETTER(Usable))(BOOL *a_pfUsable); +- STDMETHOD(COMGETTER(WhyUnusable))(BSTR *a_pbstrWhy); +- STDMETHOD(COMGETTER(ShowLicense))(BOOL *a_pfShowIt); +- STDMETHOD(COMGETTER(License))(BSTR *a_pbstrHtmlLicense); +- STDMETHOD(QueryLicense)(IN_BSTR a_bstrPreferredLocale, IN_BSTR a_bstrPreferredLanguage, +- IN_BSTR a_bstrFormat, BSTR *a_pbstrLicense); +- /** @} */ +- +- /** @name IExtPackFile interfaces +- * @{ */ +- STDMETHOD(COMGETTER(FilePath))(BSTR *a_pbstrPath); +- STDMETHOD(Install)(BOOL a_fReplace, IN_BSTR a_bstrDisplayInfo, IProgress **a_ppProgress); +- /** @} */ +- +-private: +- /** @name Misc init helpers +- * @{ */ +- HRESULT initFailed(const char *a_pszWhyFmt, ...); +- /** @} */ +- +-private: +- struct Data; +- /** Pointer to the private instance. */ +- Data *m; +- +- friend class ExtPackManager; +-}; +- +- +-/** +- * An installed extension pack. +- */ +-class ATL_NO_VTABLE ExtPack : +- public VirtualBoxBase, +- VBOX_SCRIPTABLE_IMPL(IExtPack) +-{ +-public: +- /** @name COM and internal init/term/mapping cruft. +- * @{ */ +- VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT(ExtPack, IExtPack) +- DECLARE_NOT_AGGREGATABLE(ExtPack) +- DECLARE_PROTECT_FINAL_CONSTRUCT() +- BEGIN_COM_MAP(ExtPack) +- VBOX_DEFAULT_INTERFACE_ENTRIES(IExtPack) +- COM_INTERFACE_ENTRY(IExtPackBase) +- END_COM_MAP() +- DECLARE_EMPTY_CTOR_DTOR(ExtPack) +- +- HRESULT FinalConstruct(); +- void FinalRelease(); +- HRESULT initWithDir(VBOXEXTPACKCTX a_enmContext, const char *a_pszName, const char *a_pszDir); +- void uninit(); +- RTMEMEF_NEW_AND_DELETE_OPERATORS(); +- /** @} */ +- +- /** @name IExtPackBase interfaces +- * @{ */ +- STDMETHOD(COMGETTER(Name))(BSTR *a_pbstrName); +- STDMETHOD(COMGETTER(Description))(BSTR *a_pbstrDescription); +- STDMETHOD(COMGETTER(Version))(BSTR *a_pbstrVersion); +- STDMETHOD(COMGETTER(Revision))(ULONG *a_puRevision); +- STDMETHOD(COMGETTER(VRDEModule))(BSTR *a_pbstrVrdeModule); +- STDMETHOD(COMGETTER(PlugIns))(ComSafeArrayOut(IExtPackPlugIn *, a_paPlugIns)); +- STDMETHOD(COMGETTER(Usable))(BOOL *a_pfUsable); +- STDMETHOD(COMGETTER(WhyUnusable))(BSTR *a_pbstrWhy); +- STDMETHOD(COMGETTER(ShowLicense))(BOOL *a_pfShowIt); +- STDMETHOD(COMGETTER(License))(BSTR *a_pbstrHtmlLicense); +- STDMETHOD(QueryLicense)(IN_BSTR a_bstrPreferredLocale, IN_BSTR a_bstrPreferredLanguage, +- IN_BSTR a_bstrFormat, BSTR *a_pbstrLicense); +- /** @} */ +- +- /** @name IExtPack interfaces +- * @{ */ +- STDMETHOD(QueryObject)(IN_BSTR a_bstrObjectId, IUnknown **a_ppUnknown); +- /** @} */ +- +- /** @name Internal interfaces used by ExtPackManager. +- * @{ */ +- bool callInstalledHook(IVirtualBox *a_pVirtualBox, AutoWriteLock *a_pLock, PRTERRINFO pErrInfo); +- HRESULT callUninstallHookAndClose(IVirtualBox *a_pVirtualBox, bool a_fForcedRemoval); +- bool callVirtualBoxReadyHook(IVirtualBox *a_pVirtualBox, AutoWriteLock *a_pLock); +- bool callConsoleReadyHook(IConsole *a_pConsole, AutoWriteLock *a_pLock); +- bool callVmCreatedHook(IVirtualBox *a_pVirtualBox, IMachine *a_pMachine, AutoWriteLock *a_pLock); +- bool callVmConfigureVmmHook(IConsole *a_pConsole, PVM a_pVM, AutoWriteLock *a_pLock, int *a_pvrc); +- bool callVmPowerOnHook(IConsole *a_pConsole, PVM a_pVM, AutoWriteLock *a_pLock, int *a_pvrc); +- bool callVmPowerOffHook(IConsole *a_pConsole, PVM a_pVM, AutoWriteLock *a_pLock); +- HRESULT checkVrde(void); +- HRESULT getVrdpLibraryName(Utf8Str *a_pstrVrdeLibrary); +- bool wantsToBeDefaultVrde(void) const; +- HRESULT refresh(bool *pfCanDelete); +- /** @} */ +- +-protected: +- /** @name Internal helper methods. +- * @{ */ +- void probeAndLoad(void); +- bool findModule(const char *a_pszName, const char *a_pszExt, VBOXEXTPACKMODKIND a_enmKind, +- Utf8Str *a_ppStrFound, bool *a_pfNative, PRTFSOBJINFO a_pObjInfo) const; +- static bool objinfoIsEqual(PCRTFSOBJINFO pObjInfo1, PCRTFSOBJINFO pObjInfo2); +- /** @} */ +- +- /** @name Extension Pack Helpers +- * @{ */ +- static DECLCALLBACK(int) hlpFindModule(PCVBOXEXTPACKHLP pHlp, const char *pszName, const char *pszExt, +- VBOXEXTPACKMODKIND enmKind, char *pszFound, size_t cbFound, bool *pfNative); +- static DECLCALLBACK(int) hlpGetFilePath(PCVBOXEXTPACKHLP pHlp, const char *pszFilename, char *pszPath, size_t cbPath); +- static DECLCALLBACK(VBOXEXTPACKCTX) hlpGetContext(PCVBOXEXTPACKHLP pHlp); +- static DECLCALLBACK(int) hlpReservedN(PCVBOXEXTPACKHLP pHlp); +- /** @} */ +- +-private: +- struct Data; +- /** Pointer to the private instance. */ +- Data *m; +- +- friend class ExtPackManager; +-}; +- +- +-/** +- * Extension pack manager. +- */ +-class ATL_NO_VTABLE ExtPackManager : +- public VirtualBoxBase, +- VBOX_SCRIPTABLE_IMPL(IExtPackManager) +-{ +- /** @name COM and internal init/term/mapping cruft. +- * @{ */ +- VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT(ExtPackManager, IExtPackManager) +- DECLARE_NOT_AGGREGATABLE(ExtPackManager) +- DECLARE_PROTECT_FINAL_CONSTRUCT() +- BEGIN_COM_MAP(ExtPackManager) +- VBOX_DEFAULT_INTERFACE_ENTRIES(IExtPackManager) +- END_COM_MAP() +- DECLARE_EMPTY_CTOR_DTOR(ExtPackManager) +- +- HRESULT FinalConstruct(); +- void FinalRelease(); +- HRESULT initExtPackManager(VirtualBox *a_pVirtualBox, VBOXEXTPACKCTX a_enmContext); +- void uninit(); +- RTMEMEF_NEW_AND_DELETE_OPERATORS(); +- /** @} */ +- +- /** @name IExtPack interfaces +- * @{ */ +- STDMETHOD(COMGETTER(InstalledExtPacks))(ComSafeArrayOut(IExtPack *, a_paExtPacks)); +- STDMETHOD(Find)(IN_BSTR a_bstrName, IExtPack **a_pExtPack); +- STDMETHOD(OpenExtPackFile)(IN_BSTR a_bstrTarball, IExtPackFile **a_ppExtPackFile); +- STDMETHOD(Uninstall)(IN_BSTR a_bstrName, BOOL a_fForcedRemoval, IN_BSTR a_bstrDisplayInfo, IProgress **a_ppProgress); +- STDMETHOD(Cleanup)(void); +- STDMETHOD(QueryAllPlugInsForFrontend)(IN_BSTR a_bstrFrontend, ComSafeArrayOut(BSTR, a_pabstrPlugInModules)); +- STDMETHOD(IsExtPackUsable(IN_BSTR a_bstrExtPack, BOOL *aUsable)); +- /** @} */ +- +- /** @name Internal interfaces used by other Main classes. +- * @{ */ +- static DECLCALLBACK(int) doInstallThreadProc(RTTHREAD hThread, void *pvJob); +- HRESULT doInstall(ExtPackFile *a_pExtPackFile, bool a_fReplace, Utf8Str const *a_pstrDisplayInfo); +- static DECLCALLBACK(int) doUninstallThreadProc(RTTHREAD hThread, void *pvJob); +- HRESULT doUninstall(const Utf8Str *a_pstrName, bool a_fForcedRemoval, const Utf8Str *a_pstrDisplayInfo); +- void callAllVirtualBoxReadyHooks(void); +- void callAllConsoleReadyHooks(IConsole *a_pConsole); +- void callAllVmCreatedHooks(IMachine *a_pMachine); +- int callAllVmConfigureVmmHooks(IConsole *a_pConsole, PVM a_pVM); +- int callAllVmPowerOnHooks(IConsole *a_pConsole, PVM a_pVM); +- void callAllVmPowerOffHooks(IConsole *a_pConsole, PVM a_pVM); +- HRESULT checkVrdeExtPack(Utf8Str const *a_pstrExtPack); +- int getVrdeLibraryPathForExtPack(Utf8Str const *a_pstrExtPack, Utf8Str *a_pstrVrdeLibrary); +- HRESULT getDefaultVrdeExtPack(Utf8Str *a_pstrExtPack); +- bool isExtPackUsable(const char *a_pszExtPack); +- void dumpAllToReleaseLog(void); +- /** @} */ +- +-private: +- HRESULT runSetUidToRootHelper(Utf8Str const *a_pstrDisplayInfo, const char *a_pszCommand, ...); +- ExtPack *findExtPack(const char *a_pszName); +- void removeExtPack(const char *a_pszName); +- HRESULT refreshExtPack(const char *a_pszName, bool a_fUnsuableIsError, ExtPack **a_ppExtPack); +- +-private: +- struct Data; +- /** Pointer to the private instance. */ +- Data *m; +-}; +- +-#endif +-/* vi: set tabstop=4 shiftwidth=4 expandtab: */ +--- VirtualBox-4.1.18.orig/src/VBox/Main/include/ExtPackUtil.h 2012-06-20 10:17:33.000000000 -0300 ++++ /dev/null 2012-07-24 14:48:18.638572110 -0300 +@@ -1,137 +0,0 @@ +-/* $Id: ExtPackUtil.h $ */ +-/** @file +- * VirtualBox Main - Extension Pack Utilities and definitions, VBoxC, VBoxSVC, ++. +- */ +- +-/* +- * Copyright (C) 2010 Oracle Corporation +- * +- * This file is part of VirtualBox Open Source Edition (OSE), as +- * available from http://www.virtualbox.org. This file is free software; +- * you can redistribute it and/or modify it under the terms of the GNU +- * General Public License (GPL) as published by the Free Software +- * Foundation, in version 2 as it comes in the "COPYING" file of the +- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the +- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. +- */ +- +-#ifndef ____H_EXTPACKUTIL +-#define ____H_EXTPACKUTIL +- +-#include <iprt/cpp/ministring.h> +-#include <iprt/fs.h> +-#include <iprt/vfs.h> +- +- +-/** @name VBOX_EXTPACK_DESCRIPTION_NAME +- * The name of the description file in an extension pack. */ +-#define VBOX_EXTPACK_DESCRIPTION_NAME "ExtPack.xml" +-/** @name VBOX_EXTPACK_DESCRIPTION_NAME +- * The name of the manifest file in an extension pack. */ +-#define VBOX_EXTPACK_MANIFEST_NAME "ExtPack.manifest" +-/** @name VBOX_EXTPACK_SIGNATURE_NAME +- * The name of the signature file in an extension pack. */ +-#define VBOX_EXTPACK_SIGNATURE_NAME "ExtPack.signature" +-/** @name VBOX_EXTPACK_LICENSE_NAME_PREFIX +- * The name prefix of a license file in an extension pack. There can be +- * several license files in a pack, the variations being on locale, language +- * and format (HTML, RTF, plain text). All extension packages shall include +- * a */ +-#define VBOX_EXTPACK_LICENSE_NAME_PREFIX "ExtPack-license" +-/** @name VBOX_EXTPACK_SUFFIX +- * The suffix of a extension pack tarball. */ +-#define VBOX_EXTPACK_SUFFIX ".vbox-extpack" +- +-/** The minimum length (strlen) of a extension pack name. */ +-#define VBOX_EXTPACK_NAME_MIN_LEN 3 +-/** The max length (strlen) of a extension pack name. */ +-#define VBOX_EXTPACK_NAME_MAX_LEN 64 +- +-/** The architecture-dependent application data subdirectory where the +- * extension packs are installed. Relative to RTPathAppPrivateArch. */ +-#define VBOX_EXTPACK_INSTALL_DIR "ExtensionPacks" +-/** The architecture-independent application data subdirectory where the +- * certificates are installed. Relative to RTPathAppPrivateNoArch. */ +-#define VBOX_EXTPACK_CERT_DIR "ExtPackCertificates" +- +-/** The maximum entry name length. +- * Play short and safe. */ +-#define VBOX_EXTPACK_MAX_MEMBER_NAME_LENGTH 128 +- +- +-/** +- * Plug-in descriptor. +- */ +-typedef struct VBOXEXTPACKPLUGINDESC +-{ +- /** The name. */ +- RTCString strName; +- /** The module name. */ +- RTCString strModule; +- /** The description. */ +- RTCString strDescription; +- /** The frontend or component which it plugs into. */ +- RTCString strFrontend; +-} VBOXEXTPACKPLUGINDESC; +-/** Pointer to a plug-in descriptor. */ +-typedef VBOXEXTPACKPLUGINDESC *PVBOXEXTPACKPLUGINDESC; +- +-/** +- * Extension pack descriptor +- * +- * This is the internal representation of the ExtPack.xml. +- */ +-typedef struct VBOXEXTPACKDESC +-{ +- /** The name. */ +- RTCString strName; +- /** The description. */ +- RTCString strDescription; +- /** The version string. */ +- RTCString strVersion; +- /** The edition string. */ +- RTCString strEdition; +- /** The internal revision number. */ +- uint32_t uRevision; +- /** The name of the main module. */ +- RTCString strMainModule; +- /** The name of the VRDE module, empty if none. */ +- RTCString strVrdeModule; +- /** The number of plug-in descriptors. */ +- uint32_t cPlugIns; +- /** Pointer to an array of plug-in descriptors. */ +- PVBOXEXTPACKPLUGINDESC paPlugIns; +- /** Whether to show the license prior to installation. */ +- bool fShowLicense; +-} VBOXEXTPACKDESC; +- +-/** Pointer to a extension pack descriptor. */ +-typedef VBOXEXTPACKDESC *PVBOXEXTPACKDESC; +-/** Pointer to a const extension pack descriptor. */ +-typedef VBOXEXTPACKDESC const *PCVBOXEXTPACKDESC; +- +- +-void VBoxExtPackInitDesc(PVBOXEXTPACKDESC a_pExtPackDesc); +-RTCString *VBoxExtPackLoadDesc(const char *a_pszDir, PVBOXEXTPACKDESC a_pExtPackDesc, PRTFSOBJINFO a_pObjInfo); +-RTCString *VBoxExtPackLoadDescFromVfsFile(RTVFSFILE hVfsFile, PVBOXEXTPACKDESC a_pExtPackDesc, PRTFSOBJINFO a_pObjInfo); +-RTCString *VBoxExtPackExtractNameFromTarballPath(const char *pszTarball); +-void VBoxExtPackFreeDesc(PVBOXEXTPACKDESC a_pExtPackDesc); +-bool VBoxExtPackIsValidName(const char *pszName); +-bool VBoxExtPackIsValidMangledName(const char *pszMangledName, size_t cchMax = RTSTR_MAX); +-RTCString *VBoxExtPackMangleName(const char *pszName); +-RTCString *VBoxExtPackUnmangleName(const char *pszMangledName, size_t cbMax); +-int VBoxExtPackCalcDir(char *pszExtPackDir, size_t cbExtPackDir, const char *pszParentDir, const char *pszName); +-bool VBoxExtPackIsValidVersionString(const char *pszVersion); +-bool VBoxExtPackIsValidEditionString(const char *pszEdition); +-bool VBoxExtPackIsValidModuleString(const char *pszModule); +- +-int VBoxExtPackValidateMember(const char *pszName, RTVFSOBJTYPE enmType, RTVFSOBJ hVfsObj, char *pszError, size_t cbError); +-int VBoxExtPackOpenTarFss(RTFILE hTarballFile, char *pszError, size_t cbError, PRTVFSFSSTREAM phTarFss, PRTMANIFEST phFileManifest); +-int VBoxExtPackValidateTarball(RTFILE hTarballFile, const char *pszExtPackName, +- const char *pszTarball, const char *pszTarballDigest, +- char *pszError, size_t cbError, +- PRTMANIFEST phValidManifest, PRTVFSFILE phXmlFile, RTCString *pStrDigest); +- +- +-#endif +- +--- VirtualBox-4.1.18.orig/src/VBox/Main/src-all/ExtPackManagerImpl.cpp 2012-06-20 10:17:34.000000000 -0300 ++++ /dev/null 2012-07-24 14:48:18.638572110 -0300 +@@ -1,3126 +0,0 @@ +-/* $Id: ExtPackManagerImpl.cpp $ */ +-/** @file +- * VirtualBox Main - interface for Extension Packs, VBoxSVC & VBoxC. +- */ +- +-/* +- * Copyright (C) 2010 Oracle Corporation +- * +- * This file is part of VirtualBox Open Source Edition (OSE), as +- * available from http://www.virtualbox.org. This file is free software; +- * you can redistribute it and/or modify it under the terms of the GNU +- * General Public License (GPL) as published by the Free Software +- * Foundation, in version 2 as it comes in the "COPYING" file of the +- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the +- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. +- */ +- +- +-/******************************************************************************* +-* Header Files * +-*******************************************************************************/ +-#include "ExtPackManagerImpl.h" +-#include "ExtPackUtil.h" +- +-#include <iprt/buildconfig.h> +-#include <iprt/ctype.h> +-#include <iprt/dir.h> +-#include <iprt/env.h> +-#include <iprt/file.h> +-#include <iprt/ldr.h> +-#include <iprt/manifest.h> +-#include <iprt/param.h> +-#include <iprt/path.h> +-#include <iprt/pipe.h> +-#include <iprt/process.h> +-#include <iprt/string.h> +- +-#include <VBox/com/array.h> +-#include <VBox/com/ErrorInfo.h> +-#include <VBox/err.h> +-#include <VBox/log.h> +-#include <VBox/sup.h> +-#include <VBox/version.h> +-#include "AutoCaller.h" +-#include "Global.h" +-#include "ProgressImpl.h" +-#include "SystemPropertiesImpl.h" +-#include "VirtualBoxImpl.h" +- +- +-/******************************************************************************* +-* Defined Constants And Macros * +-*******************************************************************************/ +-/** @name VBOX_EXTPACK_HELPER_NAME +- * The name of the utility application we employ to install and uninstall the +- * extension packs. This is a set-uid-to-root binary on unixy platforms, which +- * is why it has to be a separate application. +- */ +-#if defined(RT_OS_WINDOWS) || defined(RT_OS_OS2) +-# define VBOX_EXTPACK_HELPER_NAME "VBoxExtPackHelperApp.exe" +-#else +-# define VBOX_EXTPACK_HELPER_NAME "VBoxExtPackHelperApp" +-#endif +- +- +-/******************************************************************************* +-* Structures and Typedefs * +-*******************************************************************************/ +-struct ExtPackBaseData +-{ +-public: +- /** The extension pack descriptor (loaded from the XML, mostly). */ +- VBOXEXTPACKDESC Desc; +- /** The file system object info of the XML file. +- * This is for detecting changes and save time in refresh(). */ +- RTFSOBJINFO ObjInfoDesc; +- /** Whether it's usable or not. */ +- bool fUsable; +- /** Why it is unusable. */ +- Utf8Str strWhyUnusable; +-}; +- +-/** +- * Private extension pack data. +- */ +-struct ExtPackFile::Data : public ExtPackBaseData +-{ +-public: +- /** The path to the tarball. */ +- Utf8Str strExtPackFile; +- /** The SHA-256 hash of the file (as string). */ +- Utf8Str strDigest; +- /** The file handle of the extension pack file. */ +- RTFILE hExtPackFile; +- /** Our manifest for the tarball. */ +- RTMANIFEST hOurManifest; +- /** Pointer to the extension pack manager. */ +- ComObjPtr<ExtPackManager> ptrExtPackMgr; +- /** Pointer to the VirtualBox object so we can create a progress object. */ +- VirtualBox *pVirtualBox; +- +- RTMEMEF_NEW_AND_DELETE_OPERATORS(); +-}; +- +-/** +- * Private extension pack data. +- */ +-struct ExtPack::Data : public ExtPackBaseData +-{ +-public: +- /** Where the extension pack is located. */ +- Utf8Str strExtPackPath; +- /** The file system object info of the extension pack directory. +- * This is for detecting changes and save time in refresh(). */ +- RTFSOBJINFO ObjInfoExtPack; +- /** The full path to the main module. */ +- Utf8Str strMainModPath; +- /** The file system object info of the main module. +- * This is used to determin whether to bother try reload it. */ +- RTFSOBJINFO ObjInfoMainMod; +- /** The module handle of the main extension pack module. */ +- RTLDRMOD hMainMod; +- +- /** The helper callbacks for the extension pack. */ +- VBOXEXTPACKHLP Hlp; +- /** Pointer back to the extension pack object (for Hlp methods). */ +- ExtPack *pThis; +- /** The extension pack registration structure. */ +- PCVBOXEXTPACKREG pReg; +- /** The current context. */ +- VBOXEXTPACKCTX enmContext; +- /** Set if we've made the pfnVirtualBoxReady or pfnConsoleReady call. */ +- bool fMadeReadyCall; +- +- RTMEMEF_NEW_AND_DELETE_OPERATORS(); +-}; +- +-/** List of extension packs. */ +-typedef std::list< ComObjPtr<ExtPack> > ExtPackList; +- +-/** +- * Private extension pack manager data. +- */ +-struct ExtPackManager::Data +-{ +- /** The directory where the extension packs are installed. */ +- Utf8Str strBaseDir; +- /** The directory where the certificates this installation recognizes are +- * stored. */ +- Utf8Str strCertificatDirPath; +- /** The list of installed extension packs. */ +- ExtPackList llInstalledExtPacks; +- /** Pointer to the VirtualBox object, our parent. */ +- VirtualBox *pVirtualBox; +- /** The current context. */ +- VBOXEXTPACKCTX enmContext; +-#if !defined(RT_OS_WINDOWS) && !defined(RT_OS_DARWIN) +- /** File handle for the VBoxVMM libary which we slurp because ExtPacks depend on it. */ +- RTLDRMOD hVBoxVMM; +-#endif +- +- RTMEMEF_NEW_AND_DELETE_OPERATORS(); +-}; +- +-/** +- * Extension pack installation job. +- */ +-typedef struct EXTPACKINSTALLJOB +-{ +- /** Smart pointer to the extension pack file. */ +- ComPtr<ExtPackFile> ptrExtPackFile; +- /** The replace argument. */ +- bool fReplace; +- /** The display info argument. */ +- Utf8Str strDisplayInfo; +- /** Smart pointer to the extension manager. */ +- ComPtr<ExtPackManager> ptrExtPackMgr; +- /** Smart pointer to the progress object for this job. */ +- ComObjPtr<Progress> ptrProgress; +-} EXTPACKINSTALLJOB; +-/** Pointer to an extension pack installation job. */ +-typedef EXTPACKINSTALLJOB *PEXTPACKINSTALLJOB; +- +-/** +- * Extension pack uninstallation job. +- */ +-typedef struct EXTPACKUNINSTALLJOB +-{ +- /** Smart pointer to the extension manager. */ +- ComPtr<ExtPackManager> ptrExtPackMgr; +- /** The name of the extension pack. */ +- Utf8Str strName; +- /** The replace argument. */ +- bool fForcedRemoval; +- /** The display info argument. */ +- Utf8Str strDisplayInfo; +- /** Smart pointer to the progress object for this job. */ +- ComObjPtr<Progress> ptrProgress; +-} EXTPACKUNINSTALLJOB; +-/** Pointer to an extension pack uninstallation job. */ +-typedef EXTPACKUNINSTALLJOB *PEXTPACKUNINSTALLJOB; +- +- +-DEFINE_EMPTY_CTOR_DTOR(ExtPackFile) +- +-/** +- * Called by ComObjPtr::createObject when creating the object. +- * +- * Just initialize the basic object state, do the rest in initWithDir(). +- * +- * @returns S_OK. +- */ +-HRESULT ExtPackFile::FinalConstruct() +-{ +- m = NULL; +- return BaseFinalConstruct(); +-} +- +-/** +- * Initializes the extension pack by reading its file. +- * +- * @returns COM status code. +- * @param a_pszFile The path to the extension pack file. +- * @param a_pszDigest The SHA-256 digest of the file. Or an empty string. +- * @param a_pExtPackMgr Pointer to the extension pack manager. +- * @param a_pVirtualBox Pointer to the VirtualBox object. +- */ +-HRESULT ExtPackFile::initWithFile(const char *a_pszFile, const char *a_pszDigest, ExtPackManager *a_pExtPackMgr, VirtualBox *a_pVirtualBox) +-{ +- AutoInitSpan autoInitSpan(this); +- AssertReturn(autoInitSpan.isOk(), E_FAIL); +- +- /* +- * Allocate + initialize our private data. +- */ +- m = new ExtPackFile::Data; +- VBoxExtPackInitDesc(&m->Desc); +- RT_ZERO(m->ObjInfoDesc); +- m->fUsable = false; +- m->strWhyUnusable = tr("ExtPack::init failed"); +- m->strExtPackFile = a_pszFile; +- m->strDigest = a_pszDigest; +- m->hExtPackFile = NIL_RTFILE; +- m->hOurManifest = NIL_RTMANIFEST; +- m->ptrExtPackMgr = a_pExtPackMgr; +- m->pVirtualBox = a_pVirtualBox; +- +- RTCString *pstrTarName = VBoxExtPackExtractNameFromTarballPath(a_pszFile); +- if (pstrTarName) +- { +- m->Desc.strName = *pstrTarName; +- delete pstrTarName; +- pstrTarName = NULL; +- } +- +- autoInitSpan.setSucceeded(); +- +- /* +- * Try open the extension pack and check that it is a regular file. +- */ +- int vrc = RTFileOpen(&m->hExtPackFile, a_pszFile, +- RTFILE_O_READ | RTFILE_O_DENY_WRITE | RTFILE_O_OPEN); +- if (RT_FAILURE(vrc)) +- { +- if (vrc == VERR_FILE_NOT_FOUND || vrc == VERR_PATH_NOT_FOUND) +- return initFailed(tr("'%s' file not found"), a_pszFile); +- return initFailed(tr("RTFileOpen('%s',,) failed with %Rrc"), a_pszFile, vrc); +- } +- +- RTFSOBJINFO ObjInfo; +- vrc = RTFileQueryInfo(m->hExtPackFile, &ObjInfo, RTFSOBJATTRADD_UNIX); +- if (RT_FAILURE(vrc)) +- return initFailed(tr("RTFileQueryInfo failed with %Rrc on '%s'"), vrc, a_pszFile); +- if (!RTFS_IS_FILE(ObjInfo.Attr.fMode)) +- return initFailed(tr("Not a regular file: %s"), a_pszFile); +- +- /* +- * Validate the tarball and extract the XML file. +- */ +- char szError[8192]; +- RTVFSFILE hXmlFile; +- vrc = VBoxExtPackValidateTarball(m->hExtPackFile, NULL /*pszExtPackName*/, a_pszFile, a_pszDigest, +- szError, sizeof(szError), &m->hOurManifest, &hXmlFile, &m->strDigest); +- if (RT_FAILURE(vrc)) +- return initFailed(tr("%s"), szError); +- +- /* +- * Parse the XML. +- */ +- RTCString strSavedName(m->Desc.strName); +- RTCString *pStrLoadErr = VBoxExtPackLoadDescFromVfsFile(hXmlFile, &m->Desc, &m->ObjInfoDesc); +- RTVfsFileRelease(hXmlFile); +- if (pStrLoadErr != NULL) +- { +- m->strWhyUnusable.printf(tr("Failed to the xml file: %s"), pStrLoadErr->c_str()); +- m->Desc.strName = strSavedName; +- delete pStrLoadErr; +- return S_OK; +- } +- +- /* +- * Match the tarball name with the name from the XML. +- */ +- /** @todo drop this restriction after the old install interface is +- * dropped. */ +- if (!strSavedName.equalsIgnoreCase(m->Desc.strName)) +- return initFailed(tr("Extension pack name mismatch between the downloaded file and the XML inside it (xml='%s' file='%s')"), +- m->Desc.strName.c_str(), strSavedName.c_str()); +- +- m->fUsable = true; +- m->strWhyUnusable.setNull(); +- return S_OK; +-} +- +-/** +- * Protected helper that formats the strWhyUnusable value. +- * +- * @returns S_OK +- * @param a_pszWhyFmt Why it failed, format string. +- * @param ... The format arguments. +- */ +-HRESULT ExtPackFile::initFailed(const char *a_pszWhyFmt, ...) +-{ +- va_list va; +- va_start(va, a_pszWhyFmt); +- m->strWhyUnusable.printfV(a_pszWhyFmt, va); +- va_end(va); +- return S_OK; +-} +- +-/** +- * COM cruft. +- */ +-void ExtPackFile::FinalRelease() +-{ +- uninit(); +- BaseFinalRelease(); +-} +- +-/** +- * Do the actual cleanup. +- */ +-void ExtPackFile::uninit() +-{ +- /* Enclose the state transition Ready->InUninit->NotReady */ +- AutoUninitSpan autoUninitSpan(this); +- if (!autoUninitSpan.uninitDone() && m != NULL) +- { +- VBoxExtPackFreeDesc(&m->Desc); +- RTFileClose(m->hExtPackFile); +- m->hExtPackFile = NIL_RTFILE; +- RTManifestRelease(m->hOurManifest); +- m->hOurManifest = NIL_RTMANIFEST; +- +- delete m; +- m = NULL; +- } +-} +- +-STDMETHODIMP ExtPackFile::COMGETTER(Name)(BSTR *a_pbstrName) +-{ +- CheckComArgOutPointerValid(a_pbstrName); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- Bstr str(m->Desc.strName); +- str.cloneTo(a_pbstrName); +- } +- return hrc; +-} +- +-STDMETHODIMP ExtPackFile::COMGETTER(Description)(BSTR *a_pbstrDescription) +-{ +- CheckComArgOutPointerValid(a_pbstrDescription); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- Bstr str(m->Desc.strDescription); +- str.cloneTo(a_pbstrDescription); +- } +- return hrc; +-} +- +-STDMETHODIMP ExtPackFile::COMGETTER(Version)(BSTR *a_pbstrVersion) +-{ +- CheckComArgOutPointerValid(a_pbstrVersion); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- /* HACK ALERT: This is for easing backporting to 4.1. The edition stuff +- will be changed into a separate */ +- if (m->Desc.strEdition.isEmpty()) +- { +- Bstr str(m->Desc.strVersion); +- str.cloneTo(a_pbstrVersion); +- } +- else +- { +- RTCString strHack(m->Desc.strVersion); +- strHack.append('-'); +- strHack.append(m->Desc.strEdition); +- +- Bstr str(strHack); +- str.cloneTo(a_pbstrVersion); +- } +- } +- return hrc; +-} +- +-STDMETHODIMP ExtPackFile::COMGETTER(Revision)(ULONG *a_puRevision) +-{ +- CheckComArgOutPointerValid(a_puRevision); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- *a_puRevision = m->Desc.uRevision; +- return hrc; +-} +- +-STDMETHODIMP ExtPackFile::COMGETTER(VRDEModule)(BSTR *a_pbstrVrdeModule) +-{ +- CheckComArgOutPointerValid(a_pbstrVrdeModule); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- Bstr str(m->Desc.strVrdeModule); +- str.cloneTo(a_pbstrVrdeModule); +- } +- return hrc; +-} +- +-STDMETHODIMP ExtPackFile::COMGETTER(PlugIns)(ComSafeArrayOut(IExtPackPlugIn *, a_paPlugIns)) +-{ +- /** @todo implement plug-ins. */ +-#ifdef VBOX_WITH_XPCOM +- NOREF(a_paPlugIns); +- NOREF(a_paPlugInsSize); +-#endif +- ReturnComNotImplemented(); +-} +- +-STDMETHODIMP ExtPackFile::COMGETTER(Usable)(BOOL *a_pfUsable) +-{ +- CheckComArgOutPointerValid(a_pfUsable); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- *a_pfUsable = m->fUsable; +- return hrc; +-} +- +-STDMETHODIMP ExtPackFile::COMGETTER(WhyUnusable)(BSTR *a_pbstrWhy) +-{ +- CheckComArgOutPointerValid(a_pbstrWhy); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- m->strWhyUnusable.cloneTo(a_pbstrWhy); +- return hrc; +-} +- +-STDMETHODIMP ExtPackFile::COMGETTER(ShowLicense)(BOOL *a_pfShowIt) +-{ +- CheckComArgOutPointerValid(a_pfShowIt); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- *a_pfShowIt = m->Desc.fShowLicense; +- return hrc; +-} +- +-STDMETHODIMP ExtPackFile::COMGETTER(License)(BSTR *a_pbstrHtmlLicense) +-{ +- Bstr bstrHtml("html"); +- return QueryLicense(Bstr::Empty.raw(), Bstr::Empty.raw(), bstrHtml.raw(), a_pbstrHtmlLicense); +-} +- +-/* Same as ExtPack::QueryLicense, should really explore the subject of base classes here... */ +-STDMETHODIMP ExtPackFile::QueryLicense(IN_BSTR a_bstrPreferredLocale, IN_BSTR a_bstrPreferredLanguage, IN_BSTR a_bstrFormat, +- BSTR *a_pbstrLicense) +-{ +- /* +- * Validate input. +- */ +- CheckComArgOutPointerValid(a_pbstrLicense); +- CheckComArgNotNull(a_bstrPreferredLocale); +- CheckComArgNotNull(a_bstrPreferredLanguage); +- CheckComArgNotNull(a_bstrFormat); +- +- Utf8Str strPreferredLocale(a_bstrPreferredLocale); +- if (strPreferredLocale.length() != 2 && strPreferredLocale.length() != 0) +- return setError(E_FAIL, tr("The preferred locale is a two character string or empty.")); +- +- Utf8Str strPreferredLanguage(a_bstrPreferredLanguage); +- if (strPreferredLanguage.length() != 2 && strPreferredLanguage.length() != 0) +- return setError(E_FAIL, tr("The preferred lanuage is a two character string or empty.")); +- +- Utf8Str strFormat(a_bstrFormat); +- if ( !strFormat.equals("html") +- && !strFormat.equals("rtf") +- && !strFormat.equals("txt")) +- return setError(E_FAIL, tr("The license format can only have the values 'html', 'rtf' and 'txt'.")); +- +- /* +- * Combine the options to form a file name before locking down anything. +- */ +- char szName[sizeof(VBOX_EXTPACK_LICENSE_NAME_PREFIX "-de_DE.html") + 2]; +- if (strPreferredLocale.isNotEmpty() && strPreferredLanguage.isNotEmpty()) +- RTStrPrintf(szName, sizeof(szName), VBOX_EXTPACK_LICENSE_NAME_PREFIX "-%s_%s.%s", +- strPreferredLocale.c_str(), strPreferredLanguage.c_str(), strFormat.c_str()); +- else if (strPreferredLocale.isNotEmpty()) +- RTStrPrintf(szName, sizeof(szName), VBOX_EXTPACK_LICENSE_NAME_PREFIX "-%s.%s", strPreferredLocale.c_str(), strFormat.c_str()); +- else if (strPreferredLanguage.isNotEmpty()) +- RTStrPrintf(szName, sizeof(szName), VBOX_EXTPACK_LICENSE_NAME_PREFIX "-_%s.%s", strPreferredLocale.c_str(), strFormat.c_str()); +- else +- RTStrPrintf(szName, sizeof(szName), VBOX_EXTPACK_LICENSE_NAME_PREFIX ".%s", strFormat.c_str()); +- +- /* +- * Lock the extension pack. We need a write lock here as there must not be +- * concurrent accesses to the tar file handle. +- */ +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS); +- +- /* +- * Do not permit this query on a pack that isn't considered usable (could +- * be marked so because of bad license files). +- */ +- if (!m->fUsable) +- hrc = setError(E_FAIL, tr("%s"), m->strWhyUnusable.c_str()); +- else +- { +- /* +- * Look it up in the manifest before scanning the tarball for it +- */ +- if (RTManifestEntryExists(m->hOurManifest, szName)) +- { +- RTVFSFSSTREAM hTarFss; +- char szError[8192]; +- int vrc = VBoxExtPackOpenTarFss(m->hExtPackFile, szError, sizeof(szError), &hTarFss, NULL); +- if (RT_SUCCESS(vrc)) +- { +- for (;;) +- { +- /* Get the first/next. */ +- char *pszName; +- RTVFSOBJ hVfsObj; +- RTVFSOBJTYPE enmType; +- vrc = RTVfsFsStrmNext(hTarFss, &pszName, &enmType, &hVfsObj); +- if (RT_FAILURE(vrc)) +- { +- if (vrc != VERR_EOF) +- hrc = setError(VBOX_E_IPRT_ERROR, tr("RTVfsFsStrmNext failed: %Rrc"), vrc); +- else +- hrc = setError(E_UNEXPECTED, tr("'%s' was found in the manifest but not in the tarball"), szName); +- break; +- } +- +- /* Is this it? */ +- const char *pszAdjName = pszName[0] == '.' && pszName[1] == '/' ? &pszName[2] : pszName; +- if ( !strcmp(pszAdjName, szName) +- && ( enmType == RTVFSOBJTYPE_IO_STREAM +- || enmType == RTVFSOBJTYPE_FILE)) +- { +- RTVFSIOSTREAM hVfsIos = RTVfsObjToIoStream(hVfsObj); +- RTVfsObjRelease(hVfsObj); +- RTStrFree(pszName); +- +- /* Load the file into memory. */ +- RTFSOBJINFO ObjInfo; +- vrc = RTVfsIoStrmQueryInfo(hVfsIos, &ObjInfo, RTFSOBJATTRADD_NOTHING); +- if (RT_SUCCESS(vrc)) +- { +- size_t cbFile = (size_t)ObjInfo.cbObject; +- void *pvFile = RTMemAllocZ(cbFile + 1); +- if (pvFile) +- { +- vrc = RTVfsIoStrmRead(hVfsIos, pvFile, cbFile, true /*fBlocking*/, NULL); +- if (RT_SUCCESS(vrc)) +- { +- /* try translate it into a string we can return. */ +- Bstr bstrLicense((const char *)pvFile, cbFile); +- if (bstrLicense.isNotEmpty()) +- { +- bstrLicense.detachTo(a_pbstrLicense); +- hrc = S_OK; +- } +- else +- hrc = setError(VBOX_E_IPRT_ERROR, +- tr("The license file '%s' is empty or contains invalid UTF-8 encoding"), +- szName); +- } +- else +- hrc = setError(VBOX_E_IPRT_ERROR, tr("Failed to read '%s': %Rrc"), szName, vrc); +- RTMemFree(pvFile); +- } +- else +- hrc = setError(E_OUTOFMEMORY, tr("Failed to allocate %zu bytes for '%s'"), cbFile, szName); +- } +- else +- hrc = setError(VBOX_E_IPRT_ERROR, tr("RTVfsIoStrmQueryInfo on '%s': %Rrc"), szName, vrc); +- RTVfsIoStrmRelease(hVfsIos); +- break; +- } +- +- /* Release current. */ +- RTVfsObjRelease(hVfsObj); +- RTStrFree(pszName); +- } +- RTVfsFsStrmRelease(hTarFss); +- } +- else +- hrc = setError(VBOX_E_OBJECT_NOT_FOUND, tr("%s"), szError); +- } +- else +- hrc = setError(VBOX_E_OBJECT_NOT_FOUND, tr("The license file '%s' was not found in '%s'"), +- szName, m->strExtPackFile.c_str()); +- } +- } +- return hrc; +-} +- +-STDMETHODIMP ExtPackFile::COMGETTER(FilePath)(BSTR *a_pbstrPath) +-{ +- CheckComArgOutPointerValid(a_pbstrPath); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- m->strExtPackFile.cloneTo(a_pbstrPath); +- return hrc; +-} +- +-STDMETHODIMP ExtPackFile::Install(BOOL a_fReplace, IN_BSTR a_bstrDisplayInfo, IProgress **a_ppProgress) +-{ +- if (a_ppProgress) +- *a_ppProgress = NULL; +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- if (m->fUsable) +- { +- PEXTPACKINSTALLJOB pJob = NULL; +- try +- { +- pJob = new EXTPACKINSTALLJOB; +- pJob->ptrExtPackFile = this; +- pJob->fReplace = a_fReplace != FALSE; +- pJob->strDisplayInfo = a_bstrDisplayInfo; +- pJob->ptrExtPackMgr = m->ptrExtPackMgr; +- hrc = pJob->ptrProgress.createObject(); +- if (SUCCEEDED(hrc)) +- { +- Bstr bstrDescription = tr("Installing extension pack"); +- hrc = pJob->ptrProgress->init( +-#ifndef VBOX_COM_INPROC +- m->pVirtualBox, +-#endif +- static_cast<IExtPackFile *>(this), +- bstrDescription.raw(), +- FALSE /*aCancelable*/, +- NULL /*aId*/); +- } +- if (SUCCEEDED(hrc)) +- { +- ComPtr<Progress> ptrProgress = pJob->ptrProgress; +- int vrc = RTThreadCreate(NULL /*phThread*/, ExtPackManager::doInstallThreadProc, pJob, 0, +- RTTHREADTYPE_DEFAULT, 0 /*fFlags*/, "ExtPackInst"); +- if (RT_SUCCESS(vrc)) +- { +- pJob = NULL; /* the thread deletes it */ +- ptrProgress.queryInterfaceTo(a_ppProgress); +- } +- else +- hrc = setError(VBOX_E_IPRT_ERROR, tr("RTThreadCreate failed with %Rrc"), vrc); +- } +- } +- catch (std::bad_alloc) +- { +- hrc = E_OUTOFMEMORY; +- } +- if (pJob) +- delete pJob; +- } +- else +- hrc = setError(E_FAIL, "%s", m->strWhyUnusable.c_str()); +- } +- return hrc; +-} +- +- +- +- +- +-DEFINE_EMPTY_CTOR_DTOR(ExtPack) +- +-/** +- * Called by ComObjPtr::createObject when creating the object. +- * +- * Just initialize the basic object state, do the rest in initWithDir(). +- * +- * @returns S_OK. +- */ +-HRESULT ExtPack::FinalConstruct() +-{ +- m = NULL; +- return S_OK; +-} +- +-/** +- * Initializes the extension pack by reading its file. +- * +- * @returns COM status code. +- * @param a_enmContext The context we're in. +- * @param a_pszName The name of the extension pack. This is also the +- * name of the subdirector under @a a_pszParentDir +- * where the extension pack is installed. +- * @param a_pszDir The extension pack directory name. +- */ +-HRESULT ExtPack::initWithDir(VBOXEXTPACKCTX a_enmContext, const char *a_pszName, const char *a_pszDir) +-{ +- AutoInitSpan autoInitSpan(this); +- AssertReturn(autoInitSpan.isOk(), E_FAIL); +- +- static const VBOXEXTPACKHLP s_HlpTmpl = +- { +- /* u32Version = */ VBOXEXTPACKHLP_VERSION, +- /* uVBoxFullVersion = */ VBOX_FULL_VERSION, +- /* uVBoxVersionRevision = */ 0, +- /* u32Padding = */ 0, +- /* pszVBoxVersion = */ "", +- /* pfnFindModule = */ ExtPack::hlpFindModule, +- /* pfnGetFilePath = */ ExtPack::hlpGetFilePath, +- /* pfnGetContext = */ ExtPack::hlpGetContext, +- /* pfnReserved1 = */ ExtPack::hlpReservedN, +- /* pfnReserved2 = */ ExtPack::hlpReservedN, +- /* pfnReserved3 = */ ExtPack::hlpReservedN, +- /* pfnReserved4 = */ ExtPack::hlpReservedN, +- /* pfnReserved5 = */ ExtPack::hlpReservedN, +- /* pfnReserved6 = */ ExtPack::hlpReservedN, +- /* pfnReserved7 = */ ExtPack::hlpReservedN, +- /* pfnReserved8 = */ ExtPack::hlpReservedN, +- /* pfnReserved9 = */ ExtPack::hlpReservedN, +- /* u32EndMarker = */ VBOXEXTPACKHLP_VERSION +- }; +- +- /* +- * Allocate + initialize our private data. +- */ +- m = new Data; +- VBoxExtPackInitDesc(&m->Desc); +- m->Desc.strName = a_pszName; +- RT_ZERO(m->ObjInfoDesc); +- m->fUsable = false; +- m->strWhyUnusable = tr("ExtPack::init failed"); +- m->strExtPackPath = a_pszDir; +- RT_ZERO(m->ObjInfoExtPack); +- m->strMainModPath.setNull(); +- RT_ZERO(m->ObjInfoMainMod); +- m->hMainMod = NIL_RTLDRMOD; +- m->Hlp = s_HlpTmpl; +- m->Hlp.pszVBoxVersion = RTBldCfgVersion(); +- m->Hlp.uVBoxInternalRevision = RTBldCfgRevision(); +- m->pThis = this; +- m->pReg = NULL; +- m->enmContext = a_enmContext; +- m->fMadeReadyCall = false; +- +- /* +- * Probe the extension pack (this code is shared with refresh()). +- */ +- probeAndLoad(); +- +- autoInitSpan.setSucceeded(); +- return S_OK; +-} +- +-/** +- * COM cruft. +- */ +-void ExtPack::FinalRelease() +-{ +- uninit(); +-} +- +-/** +- * Do the actual cleanup. +- */ +-void ExtPack::uninit() +-{ +- /* Enclose the state transition Ready->InUninit->NotReady */ +- AutoUninitSpan autoUninitSpan(this); +- if (!autoUninitSpan.uninitDone() && m != NULL) +- { +- if (m->hMainMod != NIL_RTLDRMOD) +- { +- AssertPtr(m->pReg); +- if (m->pReg->pfnUnload != NULL) +- m->pReg->pfnUnload(m->pReg); +- +- RTLdrClose(m->hMainMod); +- m->hMainMod = NIL_RTLDRMOD; +- m->pReg = NULL; +- } +- +- VBoxExtPackFreeDesc(&m->Desc); +- +- delete m; +- m = NULL; +- } +-} +- +- +-/** +- * Calls the installed hook. +- * +- * @returns true if we left the lock, false if we didn't. +- * @param a_pVirtualBox The VirtualBox interface. +- * @param a_pLock The write lock held by the caller. +- * @param pErrInfo Where to return error information. +- */ +-bool ExtPack::callInstalledHook(IVirtualBox *a_pVirtualBox, AutoWriteLock *a_pLock, PRTERRINFO pErrInfo) +-{ +- if ( m != NULL +- && m->hMainMod != NIL_RTLDRMOD) +- { +- if (m->pReg->pfnInstalled) +- { +- ComPtr<ExtPack> ptrSelfRef = this; +- a_pLock->release(); +- pErrInfo->rc = m->pReg->pfnInstalled(m->pReg, a_pVirtualBox, pErrInfo); +- a_pLock->acquire(); +- return true; +- } +- } +- pErrInfo->rc = VINF_SUCCESS; +- return false; +-} +- +-/** +- * Calls the uninstall hook and closes the module. +- * +- * @returns S_OK or COM error status with error information. +- * @param a_pVirtualBox The VirtualBox interface. +- * @param a_fForcedRemoval When set, we'll ignore complaints from the +- * uninstall hook. +- * @remarks The caller holds the manager's write lock, not released. +- */ +-HRESULT ExtPack::callUninstallHookAndClose(IVirtualBox *a_pVirtualBox, bool a_fForcedRemoval) +-{ +- HRESULT hrc = S_OK; +- +- if ( m != NULL +- && m->hMainMod != NIL_RTLDRMOD) +- { +- if (m->pReg->pfnUninstall && !a_fForcedRemoval) +- { +- int vrc = m->pReg->pfnUninstall(m->pReg, a_pVirtualBox); +- if (RT_FAILURE(vrc)) +- { +- LogRel(("ExtPack pfnUninstall returned %Rrc for %s\n", vrc, m->Desc.strName.c_str())); +- if (!a_fForcedRemoval) +- hrc = setError(E_FAIL, tr("pfnUninstall returned %Rrc"), vrc); +- } +- } +- if (SUCCEEDED(hrc)) +- { +- RTLdrClose(m->hMainMod); +- m->hMainMod = NIL_RTLDRMOD; +- m->pReg = NULL; +- } +- } +- +- return hrc; +-} +- +-/** +- * Calls the pfnVirtualBoxReady hook. +- * +- * @returns true if we left the lock, false if we didn't. +- * @param a_pVirtualBox The VirtualBox interface. +- * @param a_pLock The write lock held by the caller. +- */ +-bool ExtPack::callVirtualBoxReadyHook(IVirtualBox *a_pVirtualBox, AutoWriteLock *a_pLock) +-{ +- if ( m != NULL +- && m->fUsable +- && !m->fMadeReadyCall) +- { +- m->fMadeReadyCall = true; +- if (m->pReg->pfnVirtualBoxReady) +- { +- ComPtr<ExtPack> ptrSelfRef = this; +- a_pLock->release(); +- m->pReg->pfnVirtualBoxReady(m->pReg, a_pVirtualBox); +- a_pLock->acquire(); +- return true; +- } +- } +- return false; +-} +- +-/** +- * Calls the pfnConsoleReady hook. +- * +- * @returns true if we left the lock, false if we didn't. +- * @param a_pConsole The Console interface. +- * @param a_pLock The write lock held by the caller. +- */ +-bool ExtPack::callConsoleReadyHook(IConsole *a_pConsole, AutoWriteLock *a_pLock) +-{ +- if ( m != NULL +- && m->fUsable +- && !m->fMadeReadyCall) +- { +- m->fMadeReadyCall = true; +- if (m->pReg->pfnConsoleReady) +- { +- ComPtr<ExtPack> ptrSelfRef = this; +- a_pLock->release(); +- m->pReg->pfnConsoleReady(m->pReg, a_pConsole); +- a_pLock->acquire(); +- return true; +- } +- } +- return false; +-} +- +-/** +- * Calls the pfnVMCreate hook. +- * +- * @returns true if we left the lock, false if we didn't. +- * @param a_pVirtualBox The VirtualBox interface. +- * @param a_pMachine The machine interface of the new VM. +- * @param a_pLock The write lock held by the caller. +- */ +-bool ExtPack::callVmCreatedHook(IVirtualBox *a_pVirtualBox, IMachine *a_pMachine, AutoWriteLock *a_pLock) +-{ +- if ( m != NULL +- && m->fUsable) +- { +- if (m->pReg->pfnVMCreated) +- { +- ComPtr<ExtPack> ptrSelfRef = this; +- a_pLock->release(); +- m->pReg->pfnVMCreated(m->pReg, a_pVirtualBox, a_pMachine); +- a_pLock->acquire(); +- return true; +- } +- } +- return false; +-} +- +-/** +- * Calls the pfnVMConfigureVMM hook. +- * +- * @returns true if we left the lock, false if we didn't. +- * @param a_pConsole The console interface. +- * @param a_pVM The VM handle. +- * @param a_pLock The write lock held by the caller. +- * @param a_pvrc Where to return the status code of the +- * callback. This is always set. LogRel is +- * called on if a failure status is returned. +- */ +-bool ExtPack::callVmConfigureVmmHook(IConsole *a_pConsole, PVM a_pVM, AutoWriteLock *a_pLock, int *a_pvrc) +-{ +- *a_pvrc = VINF_SUCCESS; +- if ( m != NULL +- && m->fUsable) +- { +- if (m->pReg->pfnVMConfigureVMM) +- { +- ComPtr<ExtPack> ptrSelfRef = this; +- a_pLock->release(); +- int vrc = m->pReg->pfnVMConfigureVMM(m->pReg, a_pConsole, a_pVM); +- *a_pvrc = vrc; +- a_pLock->acquire(); +- if (RT_FAILURE(vrc)) +- LogRel(("ExtPack pfnVMConfigureVMM returned %Rrc for %s\n", vrc, m->Desc.strName.c_str())); +- return true; +- } +- } +- return false; +-} +- +-/** +- * Calls the pfnVMPowerOn hook. +- * +- * @returns true if we left the lock, false if we didn't. +- * @param a_pConsole The console interface. +- * @param a_pVM The VM handle. +- * @param a_pLock The write lock held by the caller. +- * @param a_pvrc Where to return the status code of the +- * callback. This is always set. LogRel is +- * called on if a failure status is returned. +- */ +-bool ExtPack::callVmPowerOnHook(IConsole *a_pConsole, PVM a_pVM, AutoWriteLock *a_pLock, int *a_pvrc) +-{ +- *a_pvrc = VINF_SUCCESS; +- if ( m != NULL +- && m->fUsable) +- { +- if (m->pReg->pfnVMPowerOn) +- { +- ComPtr<ExtPack> ptrSelfRef = this; +- a_pLock->release(); +- int vrc = m->pReg->pfnVMPowerOn(m->pReg, a_pConsole, a_pVM); +- *a_pvrc = vrc; +- a_pLock->acquire(); +- if (RT_FAILURE(vrc)) +- LogRel(("ExtPack pfnVMPowerOn returned %Rrc for %s\n", vrc, m->Desc.strName.c_str())); +- return true; +- } +- } +- return false; +-} +- +-/** +- * Calls the pfnVMPowerOff hook. +- * +- * @returns true if we left the lock, false if we didn't. +- * @param a_pConsole The console interface. +- * @param a_pVM The VM handle. +- * @param a_pLock The write lock held by the caller. +- */ +-bool ExtPack::callVmPowerOffHook(IConsole *a_pConsole, PVM a_pVM, AutoWriteLock *a_pLock) +-{ +- if ( m != NULL +- && m->fUsable) +- { +- if (m->pReg->pfnVMPowerOff) +- { +- ComPtr<ExtPack> ptrSelfRef = this; +- a_pLock->release(); +- m->pReg->pfnVMPowerOff(m->pReg, a_pConsole, a_pVM); +- a_pLock->acquire(); +- return true; +- } +- } +- return false; +-} +- +-/** +- * Check if the extension pack is usable and has an VRDE module. +- * +- * @returns S_OK or COM error status with error information. +- * +- * @remarks Caller holds the extension manager lock for reading, no locking +- * necessary. +- */ +-HRESULT ExtPack::checkVrde(void) +-{ +- HRESULT hrc; +- if ( m != NULL +- && m->fUsable) +- { +- if (m->Desc.strVrdeModule.isNotEmpty()) +- hrc = S_OK; +- else +- hrc = setError(E_FAIL, tr("The extension pack '%s' does not include a VRDE module"), m->Desc.strName.c_str()); +- } +- else +- hrc = setError(E_FAIL, tr("%s"), m->strWhyUnusable.c_str()); +- return hrc; +-} +- +-/** +- * Same as checkVrde(), except that it also resolves the path to the module. +- * +- * @returns S_OK or COM error status with error information. +- * @param a_pstrVrdeLibrary Where to return the path on success. +- * +- * @remarks Caller holds the extension manager lock for reading, no locking +- * necessary. +- */ +-HRESULT ExtPack::getVrdpLibraryName(Utf8Str *a_pstrVrdeLibrary) +-{ +- HRESULT hrc = checkVrde(); +- if (SUCCEEDED(hrc)) +- { +- if (findModule(m->Desc.strVrdeModule.c_str(), NULL, VBOXEXTPACKMODKIND_R3, +- a_pstrVrdeLibrary, NULL /*a_pfNative*/, NULL /*a_pObjInfo*/)) +- hrc = S_OK; +- else +- hrc = setError(E_FAIL, tr("Failed to locate the VRDE module '%s' in extension pack '%s'"), +- m->Desc.strVrdeModule.c_str(), m->Desc.strName.c_str()); +- } +- return hrc; +-} +- +-/** +- * Check if this extension pack wishes to be the default VRDE provider. +- * +- * @returns @c true if it wants to and it is in a usable state, otherwise +- * @c false. +- * +- * @remarks Caller holds the extension manager lock for reading, no locking +- * necessary. +- */ +-bool ExtPack::wantsToBeDefaultVrde(void) const +-{ +- return m->fUsable +- && m->Desc.strVrdeModule.isNotEmpty(); +-} +- +-/** +- * Refreshes the extension pack state. +- * +- * This is called by the manager so that the on disk changes are picked up. +- * +- * @returns S_OK or COM error status with error information. +- * +- * @param a_pfCanDelete Optional can-delete-this-object output indicator. +- * +- * @remarks Caller holds the extension manager lock for writing. +- * @remarks Only called in VBoxSVC. +- */ +-HRESULT ExtPack::refresh(bool *a_pfCanDelete) +-{ +- if (a_pfCanDelete) +- *a_pfCanDelete = false; +- +- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS); /* for the COMGETTERs */ +- +- /* +- * Has the module been deleted? +- */ +- RTFSOBJINFO ObjInfoExtPack; +- int vrc = RTPathQueryInfoEx(m->strExtPackPath.c_str(), &ObjInfoExtPack, RTFSOBJATTRADD_UNIX, RTPATH_F_ON_LINK); +- if ( RT_FAILURE(vrc) +- || !RTFS_IS_DIRECTORY(ObjInfoExtPack.Attr.fMode)) +- { +- if (a_pfCanDelete) +- *a_pfCanDelete = true; +- return S_OK; +- } +- +- /* +- * We've got a directory, so try query file system object info for the +- * files we are interested in as well. +- */ +- RTFSOBJINFO ObjInfoDesc; +- char szDescFilePath[RTPATH_MAX]; +- vrc = RTPathJoin(szDescFilePath, sizeof(szDescFilePath), m->strExtPackPath.c_str(), VBOX_EXTPACK_DESCRIPTION_NAME); +- if (RT_SUCCESS(vrc)) +- vrc = RTPathQueryInfoEx(szDescFilePath, &ObjInfoDesc, RTFSOBJATTRADD_UNIX, RTPATH_F_ON_LINK); +- if (RT_FAILURE(vrc)) +- RT_ZERO(ObjInfoDesc); +- +- RTFSOBJINFO ObjInfoMainMod; +- if (m->strMainModPath.isNotEmpty()) +- vrc = RTPathQueryInfoEx(m->strMainModPath.c_str(), &ObjInfoMainMod, RTFSOBJATTRADD_UNIX, RTPATH_F_ON_LINK); +- if (m->strMainModPath.isEmpty() || RT_FAILURE(vrc)) +- RT_ZERO(ObjInfoMainMod); +- +- /* +- * If we have a usable module already, just verify that things haven't +- * changed since we loaded it. +- */ +- if (m->fUsable) +- { +- if (m->hMainMod == NIL_RTLDRMOD) +- probeAndLoad(); +- else if ( !objinfoIsEqual(&ObjInfoDesc, &m->ObjInfoDesc) +- || !objinfoIsEqual(&ObjInfoMainMod, &m->ObjInfoMainMod) +- || !objinfoIsEqual(&ObjInfoExtPack, &m->ObjInfoExtPack) ) +- { +- /** @todo not important, so it can wait. */ +- } +- } +- /* +- * Ok, it is currently not usable. If anything has changed since last time +- * reprobe the extension pack. +- */ +- else if ( !objinfoIsEqual(&ObjInfoDesc, &m->ObjInfoDesc) +- || !objinfoIsEqual(&ObjInfoMainMod, &m->ObjInfoMainMod) +- || !objinfoIsEqual(&ObjInfoExtPack, &m->ObjInfoExtPack) ) +- probeAndLoad(); +- +- return S_OK; +-} +- +-/** +- * Probes the extension pack, loading the main dll and calling its registration +- * entry point. +- * +- * This updates the state accordingly, the strWhyUnusable and fUnusable members +- * being the most important ones. +- */ +-void ExtPack::probeAndLoad(void) +-{ +- m->fUsable = false; +- m->fMadeReadyCall = false; +- +- /* +- * Query the file system info for the extension pack directory. This and +- * all other file system info we save is for the benefit of refresh(). +- */ +- int vrc = RTPathQueryInfoEx(m->strExtPackPath.c_str(), &m->ObjInfoExtPack, RTFSOBJATTRADD_UNIX, RTPATH_F_ON_LINK); +- if (RT_FAILURE(vrc)) +- { +- m->strWhyUnusable.printf(tr("RTPathQueryInfoEx on '%s' failed: %Rrc"), m->strExtPackPath.c_str(), vrc); +- return; +- } +- if (!RTFS_IS_DIRECTORY(m->ObjInfoExtPack.Attr.fMode)) +- { +- if (RTFS_IS_SYMLINK(m->ObjInfoExtPack.Attr.fMode)) +- m->strWhyUnusable.printf(tr("'%s' is a symbolic link, this is not allowed"), m->strExtPackPath.c_str(), vrc); +- else if (RTFS_IS_FILE(m->ObjInfoExtPack.Attr.fMode)) +- m->strWhyUnusable.printf(tr("'%s' is a symbolic file, not a directory"), m->strExtPackPath.c_str(), vrc); +- else +- m->strWhyUnusable.printf(tr("'%s' is not a directory (fMode=%#x)"), m->strExtPackPath.c_str(), m->ObjInfoExtPack.Attr.fMode); +- return; +- } +- +- RTERRINFOSTATIC ErrInfo; +- RTErrInfoInitStatic(&ErrInfo); +- vrc = SUPR3HardenedVerifyDir(m->strExtPackPath.c_str(), true /*fRecursive*/, true /*fCheckFiles*/, &ErrInfo.Core); +- if (RT_FAILURE(vrc)) +- { +- m->strWhyUnusable.printf(tr("%s (rc=%Rrc)"), ErrInfo.Core.pszMsg, vrc); +- return; +- } +- +- /* +- * Read the description file. +- */ +- RTCString strSavedName(m->Desc.strName); +- RTCString *pStrLoadErr = VBoxExtPackLoadDesc(m->strExtPackPath.c_str(), &m->Desc, &m->ObjInfoDesc); +- if (pStrLoadErr != NULL) +- { +- m->strWhyUnusable.printf(tr("Failed to load '%s/%s': %s"), +- m->strExtPackPath.c_str(), VBOX_EXTPACK_DESCRIPTION_NAME, pStrLoadErr->c_str()); +- m->Desc.strName = strSavedName; +- delete pStrLoadErr; +- return; +- } +- +- /* +- * Make sure the XML name and directory matches. +- */ +- if (!m->Desc.strName.equalsIgnoreCase(strSavedName)) +- { +- m->strWhyUnusable.printf(tr("The description name ('%s') and directory name ('%s') does not match"), +- m->Desc.strName.c_str(), strSavedName.c_str()); +- m->Desc.strName = strSavedName; +- return; +- } +- +- /* +- * Load the main DLL and call the predefined entry point. +- */ +- bool fIsNative; +- if (!findModule(m->Desc.strMainModule.c_str(), NULL /* default extension */, VBOXEXTPACKMODKIND_R3, +- &m->strMainModPath, &fIsNative, &m->ObjInfoMainMod)) +- { +- m->strWhyUnusable.printf(tr("Failed to locate the main module ('%s')"), m->Desc.strMainModule.c_str()); +- return; +- } +- +- vrc = SUPR3HardenedVerifyPlugIn(m->strMainModPath.c_str(), &ErrInfo.Core); +- if (RT_FAILURE(vrc)) +- { +- m->strWhyUnusable.printf(tr("%s"), ErrInfo.Core.pszMsg); +- return; +- } +- +- if (fIsNative) +- { +- vrc = SUPR3HardenedLdrLoadPlugIn(m->strMainModPath.c_str(), &m->hMainMod, &ErrInfo.Core); +- if (RT_FAILURE(vrc)) +- { +- m->hMainMod = NIL_RTLDRMOD; +- m->strWhyUnusable.printf(tr("Failed to load the main module ('%s'): %Rrc - %s"), +- m->strMainModPath.c_str(), vrc, ErrInfo.Core.pszMsg); +- return; +- } +- } +- else +- { +- m->strWhyUnusable.printf(tr("Only native main modules are currently supported")); +- return; +- } +- +- /* +- * Resolve the predefined entry point. +- */ +- PFNVBOXEXTPACKREGISTER pfnRegistration; +- vrc = RTLdrGetSymbol(m->hMainMod, VBOX_EXTPACK_MAIN_MOD_ENTRY_POINT, (void **)&pfnRegistration); +- if (RT_SUCCESS(vrc)) +- { +- RTErrInfoClear(&ErrInfo.Core); +- vrc = pfnRegistration(&m->Hlp, &m->pReg, &ErrInfo.Core); +- if ( RT_SUCCESS(vrc) +- && !RTErrInfoIsSet(&ErrInfo.Core) +- && VALID_PTR(m->pReg)) +- { +- if ( VBOXEXTPACK_IS_MAJOR_VER_EQUAL(m->pReg->u32Version, VBOXEXTPACKREG_VERSION) +- && m->pReg->u32EndMarker == m->pReg->u32Version) +- { +- if ( (!m->pReg->pfnInstalled || RT_VALID_PTR(m->pReg->pfnInstalled)) +- && (!m->pReg->pfnUninstall || RT_VALID_PTR(m->pReg->pfnUninstall)) +- && (!m->pReg->pfnVirtualBoxReady || RT_VALID_PTR(m->pReg->pfnVirtualBoxReady)) +- && (!m->pReg->pfnConsoleReady || RT_VALID_PTR(m->pReg->pfnConsoleReady)) +- && (!m->pReg->pfnUnload || RT_VALID_PTR(m->pReg->pfnUnload)) +- && (!m->pReg->pfnVMCreated || RT_VALID_PTR(m->pReg->pfnVMCreated)) +- && (!m->pReg->pfnVMConfigureVMM || RT_VALID_PTR(m->pReg->pfnVMConfigureVMM)) +- && (!m->pReg->pfnVMPowerOn || RT_VALID_PTR(m->pReg->pfnVMPowerOn)) +- && (!m->pReg->pfnVMPowerOff || RT_VALID_PTR(m->pReg->pfnVMPowerOff)) +- && (!m->pReg->pfnQueryObject || RT_VALID_PTR(m->pReg->pfnQueryObject)) +- ) +- { +- /* +- * We're good! +- */ +- m->fUsable = true; +- m->strWhyUnusable.setNull(); +- return; +- } +- +- m->strWhyUnusable = tr("The registration structure contains on or more invalid function pointers"); +- } +- else +- m->strWhyUnusable.printf(tr("Unsupported registration structure version %u.%u"), +- RT_HIWORD(m->pReg->u32Version), RT_LOWORD(m->pReg->u32Version)); +- } +- else +- m->strWhyUnusable.printf(tr("%s returned %Rrc, pReg=%p ErrInfo='%s'"), +- VBOX_EXTPACK_MAIN_MOD_ENTRY_POINT, vrc, m->pReg, ErrInfo.Core.pszMsg); +- m->pReg = NULL; +- } +- else +- m->strWhyUnusable.printf(tr("Failed to resolve exported symbol '%s' in the main module: %Rrc"), +- VBOX_EXTPACK_MAIN_MOD_ENTRY_POINT, vrc); +- +- RTLdrClose(m->hMainMod); +- m->hMainMod = NIL_RTLDRMOD; +-} +- +-/** +- * Finds a module. +- * +- * @returns true if found, false if not. +- * @param a_pszName The module base name (no extension). +- * @param a_pszExt The extension. If NULL we use default +- * extensions. +- * @param a_enmKind The kind of module to locate. +- * @param a_pStrFound Where to return the path to the module we've +- * found. +- * @param a_pfNative Where to return whether this is a native module +- * or an agnostic one. Optional. +- * @param a_pObjInfo Where to return the file system object info for +- * the module. Optional. +- */ +-bool ExtPack::findModule(const char *a_pszName, const char *a_pszExt, VBOXEXTPACKMODKIND a_enmKind, +- Utf8Str *a_pStrFound, bool *a_pfNative, PRTFSOBJINFO a_pObjInfo) const +-{ +- /* +- * Try the native path first. +- */ +- char szPath[RTPATH_MAX]; +- int vrc = RTPathJoin(szPath, sizeof(szPath), m->strExtPackPath.c_str(), RTBldCfgTargetDotArch()); +- AssertLogRelRCReturn(vrc, false); +- vrc = RTPathAppend(szPath, sizeof(szPath), a_pszName); +- AssertLogRelRCReturn(vrc, false); +- if (!a_pszExt) +- { +- const char *pszDefExt; +- switch (a_enmKind) +- { +- case VBOXEXTPACKMODKIND_RC: pszDefExt = ".rc"; break; +- case VBOXEXTPACKMODKIND_R0: pszDefExt = ".r0"; break; +- case VBOXEXTPACKMODKIND_R3: pszDefExt = RTLdrGetSuff(); break; +- default: +- AssertFailedReturn(false); +- } +- vrc = RTStrCat(szPath, sizeof(szPath), pszDefExt); +- AssertLogRelRCReturn(vrc, false); +- } +- +- RTFSOBJINFO ObjInfo; +- if (!a_pObjInfo) +- a_pObjInfo = &ObjInfo; +- vrc = RTPathQueryInfo(szPath, a_pObjInfo, RTFSOBJATTRADD_UNIX); +- if (RT_SUCCESS(vrc) && RTFS_IS_FILE(a_pObjInfo->Attr.fMode)) +- { +- if (a_pfNative) +- *a_pfNative = true; +- *a_pStrFound = szPath; +- return true; +- } +- +- /* +- * Try the platform agnostic modules. +- */ +- /* gcc.x86/module.rel */ +- char szSubDir[32]; +- RTStrPrintf(szSubDir, sizeof(szSubDir), "%s.%s", RTBldCfgCompiler(), RTBldCfgTargetArch()); +- vrc = RTPathJoin(szPath, sizeof(szPath), m->strExtPackPath.c_str(), szSubDir); +- AssertLogRelRCReturn(vrc, false); +- vrc = RTPathAppend(szPath, sizeof(szPath), a_pszName); +- AssertLogRelRCReturn(vrc, false); +- if (!a_pszExt) +- { +- vrc = RTStrCat(szPath, sizeof(szPath), ".rel"); +- AssertLogRelRCReturn(vrc, false); +- } +- vrc = RTPathQueryInfo(szPath, a_pObjInfo, RTFSOBJATTRADD_UNIX); +- if (RT_SUCCESS(vrc) && RTFS_IS_FILE(a_pObjInfo->Attr.fMode)) +- { +- if (a_pfNative) +- *a_pfNative = false; +- *a_pStrFound = szPath; +- return true; +- } +- +- /* x86/module.rel */ +- vrc = RTPathJoin(szPath, sizeof(szPath), m->strExtPackPath.c_str(), RTBldCfgTargetArch()); +- AssertLogRelRCReturn(vrc, false); +- vrc = RTPathAppend(szPath, sizeof(szPath), a_pszName); +- AssertLogRelRCReturn(vrc, false); +- if (!a_pszExt) +- { +- vrc = RTStrCat(szPath, sizeof(szPath), ".rel"); +- AssertLogRelRCReturn(vrc, false); +- } +- vrc = RTPathQueryInfo(szPath, a_pObjInfo, RTFSOBJATTRADD_UNIX); +- if (RT_SUCCESS(vrc) && RTFS_IS_FILE(a_pObjInfo->Attr.fMode)) +- { +- if (a_pfNative) +- *a_pfNative = false; +- *a_pStrFound = szPath; +- return true; +- } +- +- return false; +-} +- +-/** +- * Compares two file system object info structures. +- * +- * @returns true if equal, false if not. +- * @param pObjInfo1 The first. +- * @param pObjInfo2 The second. +- * @todo IPRT should do this, really. +- */ +-/* static */ bool ExtPack::objinfoIsEqual(PCRTFSOBJINFO pObjInfo1, PCRTFSOBJINFO pObjInfo2) +-{ +- if (!RTTimeSpecIsEqual(&pObjInfo1->ModificationTime, &pObjInfo2->ModificationTime)) +- return false; +- if (!RTTimeSpecIsEqual(&pObjInfo1->ChangeTime, &pObjInfo2->ChangeTime)) +- return false; +- if (!RTTimeSpecIsEqual(&pObjInfo1->BirthTime, &pObjInfo2->BirthTime)) +- return false; +- if (pObjInfo1->cbObject != pObjInfo2->cbObject) +- return false; +- if (pObjInfo1->Attr.fMode != pObjInfo2->Attr.fMode) +- return false; +- if (pObjInfo1->Attr.enmAdditional == pObjInfo2->Attr.enmAdditional) +- { +- switch (pObjInfo1->Attr.enmAdditional) +- { +- case RTFSOBJATTRADD_UNIX: +- if (pObjInfo1->Attr.u.Unix.uid != pObjInfo2->Attr.u.Unix.uid) +- return false; +- if (pObjInfo1->Attr.u.Unix.gid != pObjInfo2->Attr.u.Unix.gid) +- return false; +- if (pObjInfo1->Attr.u.Unix.INodeIdDevice != pObjInfo2->Attr.u.Unix.INodeIdDevice) +- return false; +- if (pObjInfo1->Attr.u.Unix.INodeId != pObjInfo2->Attr.u.Unix.INodeId) +- return false; +- if (pObjInfo1->Attr.u.Unix.GenerationId != pObjInfo2->Attr.u.Unix.GenerationId) +- return false; +- break; +- default: +- break; +- } +- } +- return true; +-} +- +- +-/** +- * @interface_method_impl{VBOXEXTPACKHLP,pfnFindModule} +- */ +-/*static*/ DECLCALLBACK(int) +-ExtPack::hlpFindModule(PCVBOXEXTPACKHLP pHlp, const char *pszName, const char *pszExt, VBOXEXTPACKMODKIND enmKind, +- char *pszFound, size_t cbFound, bool *pfNative) +-{ +- /* +- * Validate the input and get our bearings. +- */ +- AssertPtrReturn(pszName, VERR_INVALID_POINTER); +- AssertPtrNullReturn(pszExt, VERR_INVALID_POINTER); +- AssertPtrReturn(pszFound, VERR_INVALID_POINTER); +- AssertPtrNullReturn(pfNative, VERR_INVALID_POINTER); +- AssertReturn(enmKind > VBOXEXTPACKMODKIND_INVALID && enmKind < VBOXEXTPACKMODKIND_END, VERR_INVALID_PARAMETER); +- +- AssertPtrReturn(pHlp, VERR_INVALID_POINTER); +- AssertReturn(pHlp->u32Version == VBOXEXTPACKHLP_VERSION, VERR_INVALID_POINTER); +- ExtPack::Data *m = RT_FROM_CPP_MEMBER(pHlp, Data, Hlp); +- AssertPtrReturn(m, VERR_INVALID_POINTER); +- ExtPack *pThis = m->pThis; +- AssertPtrReturn(pThis, VERR_INVALID_POINTER); +- +- /* +- * This is just a wrapper around findModule. +- */ +- Utf8Str strFound; +- if (pThis->findModule(pszName, pszExt, enmKind, &strFound, pfNative, NULL)) +- return RTStrCopy(pszFound, cbFound, strFound.c_str()); +- return VERR_FILE_NOT_FOUND; +-} +- +-/*static*/ DECLCALLBACK(int) +-ExtPack::hlpGetFilePath(PCVBOXEXTPACKHLP pHlp, const char *pszFilename, char *pszPath, size_t cbPath) +-{ +- /* +- * Validate the input and get our bearings. +- */ +- AssertPtrReturn(pszFilename, VERR_INVALID_POINTER); +- AssertPtrReturn(pszPath, VERR_INVALID_POINTER); +- AssertReturn(cbPath > 0, VERR_BUFFER_OVERFLOW); +- +- AssertPtrReturn(pHlp, VERR_INVALID_POINTER); +- AssertReturn(pHlp->u32Version == VBOXEXTPACKHLP_VERSION, VERR_INVALID_POINTER); +- ExtPack::Data *m = RT_FROM_CPP_MEMBER(pHlp, Data, Hlp); +- AssertPtrReturn(m, VERR_INVALID_POINTER); +- ExtPack *pThis = m->pThis; +- AssertPtrReturn(pThis, VERR_INVALID_POINTER); +- +- /* +- * This is a simple RTPathJoin, no checking if things exists or anything. +- */ +- int vrc = RTPathJoin(pszPath, cbPath, pThis->m->strExtPackPath.c_str(), pszFilename); +- if (RT_FAILURE(vrc)) +- RT_BZERO(pszPath, cbPath); +- return vrc; +-} +- +-/*static*/ DECLCALLBACK(VBOXEXTPACKCTX) +-ExtPack::hlpGetContext(PCVBOXEXTPACKHLP pHlp) +-{ +- /* +- * Validate the input and get our bearings. +- */ +- AssertPtrReturn(pHlp, VBOXEXTPACKCTX_INVALID); +- AssertReturn(pHlp->u32Version == VBOXEXTPACKHLP_VERSION, VBOXEXTPACKCTX_INVALID); +- ExtPack::Data *m = RT_FROM_CPP_MEMBER(pHlp, Data, Hlp); +- AssertPtrReturn(m, VBOXEXTPACKCTX_INVALID); +- ExtPack *pThis = m->pThis; +- AssertPtrReturn(pThis, VBOXEXTPACKCTX_INVALID); +- +- return pThis->m->enmContext; +-} +- +-/*static*/ DECLCALLBACK(int) +-ExtPack::hlpReservedN(PCVBOXEXTPACKHLP pHlp) +-{ +- /* +- * Validate the input and get our bearings. +- */ +- AssertPtrReturn(pHlp, VERR_INVALID_POINTER); +- AssertReturn(pHlp->u32Version == VBOXEXTPACKHLP_VERSION, VERR_INVALID_POINTER); +- ExtPack::Data *m = RT_FROM_CPP_MEMBER(pHlp, Data, Hlp); +- AssertPtrReturn(m, VERR_INVALID_POINTER); +- ExtPack *pThis = m->pThis; +- AssertPtrReturn(pThis, VERR_INVALID_POINTER); +- +- return VERR_NOT_IMPLEMENTED; +-} +- +- +- +- +- +-STDMETHODIMP ExtPack::COMGETTER(Name)(BSTR *a_pbstrName) +-{ +- CheckComArgOutPointerValid(a_pbstrName); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- Bstr str(m->Desc.strName); +- str.cloneTo(a_pbstrName); +- } +- return hrc; +-} +- +-STDMETHODIMP ExtPack::COMGETTER(Description)(BSTR *a_pbstrDescription) +-{ +- CheckComArgOutPointerValid(a_pbstrDescription); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- Bstr str(m->Desc.strDescription); +- str.cloneTo(a_pbstrDescription); +- } +- return hrc; +-} +- +-STDMETHODIMP ExtPack::COMGETTER(Version)(BSTR *a_pbstrVersion) +-{ +- CheckComArgOutPointerValid(a_pbstrVersion); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- /* HACK ALERT: This is for easing backporting to 4.1. The edition stuff +- will be changed into a separate */ +- if (m->Desc.strEdition.isEmpty()) +- { +- Bstr str(m->Desc.strVersion); +- str.cloneTo(a_pbstrVersion); +- } +- else +- { +- RTCString strHack(m->Desc.strVersion); +- strHack.append('-'); +- strHack.append(m->Desc.strEdition); +- +- Bstr str(strHack); +- str.cloneTo(a_pbstrVersion); +- } +- } +- return hrc; +-} +- +-STDMETHODIMP ExtPack::COMGETTER(Revision)(ULONG *a_puRevision) +-{ +- CheckComArgOutPointerValid(a_puRevision); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- *a_puRevision = m->Desc.uRevision; +- return hrc; +-} +- +-STDMETHODIMP ExtPack::COMGETTER(VRDEModule)(BSTR *a_pbstrVrdeModule) +-{ +- CheckComArgOutPointerValid(a_pbstrVrdeModule); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- Bstr str(m->Desc.strVrdeModule); +- str.cloneTo(a_pbstrVrdeModule); +- } +- return hrc; +-} +- +-STDMETHODIMP ExtPack::COMGETTER(PlugIns)(ComSafeArrayOut(IExtPackPlugIn *, a_paPlugIns)) +-{ +- /** @todo implement plug-ins. */ +-#ifdef VBOX_WITH_XPCOM +- NOREF(a_paPlugIns); +- NOREF(a_paPlugInsSize); +-#endif +- ReturnComNotImplemented(); +-} +- +-STDMETHODIMP ExtPack::COMGETTER(Usable)(BOOL *a_pfUsable) +-{ +- CheckComArgOutPointerValid(a_pfUsable); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- *a_pfUsable = m->fUsable; +- return hrc; +-} +- +-STDMETHODIMP ExtPack::COMGETTER(WhyUnusable)(BSTR *a_pbstrWhy) +-{ +- CheckComArgOutPointerValid(a_pbstrWhy); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- m->strWhyUnusable.cloneTo(a_pbstrWhy); +- return hrc; +-} +- +-STDMETHODIMP ExtPack::COMGETTER(ShowLicense)(BOOL *a_pfShowIt) +-{ +- CheckComArgOutPointerValid(a_pfShowIt); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- *a_pfShowIt = m->Desc.fShowLicense; +- return hrc; +-} +- +-STDMETHODIMP ExtPack::COMGETTER(License)(BSTR *a_pbstrHtmlLicense) +-{ +- Bstr bstrHtml("html"); +- return QueryLicense(Bstr::Empty.raw(), Bstr::Empty.raw(), bstrHtml.raw(), a_pbstrHtmlLicense); +-} +- +-STDMETHODIMP ExtPack::QueryLicense(IN_BSTR a_bstrPreferredLocale, IN_BSTR a_bstrPreferredLanguage, IN_BSTR a_bstrFormat, +- BSTR *a_pbstrLicense) +-{ +- /* +- * Validate input. +- */ +- CheckComArgOutPointerValid(a_pbstrLicense); +- CheckComArgNotNull(a_bstrPreferredLocale); +- CheckComArgNotNull(a_bstrPreferredLanguage); +- CheckComArgNotNull(a_bstrFormat); +- +- Utf8Str strPreferredLocale(a_bstrPreferredLocale); +- if (strPreferredLocale.length() != 2 && strPreferredLocale.length() != 0) +- return setError(E_FAIL, tr("The preferred locale is a two character string or empty.")); +- +- Utf8Str strPreferredLanguage(a_bstrPreferredLanguage); +- if (strPreferredLanguage.length() != 2 && strPreferredLanguage.length() != 0) +- return setError(E_FAIL, tr("The preferred lanuage is a two character string or empty.")); +- +- Utf8Str strFormat(a_bstrFormat); +- if ( !strFormat.equals("html") +- && !strFormat.equals("rtf") +- && !strFormat.equals("txt")) +- return setError(E_FAIL, tr("The license format can only have the values 'html', 'rtf' and 'txt'.")); +- +- /* +- * Combine the options to form a file name before locking down anything. +- */ +- char szName[sizeof(VBOX_EXTPACK_LICENSE_NAME_PREFIX "-de_DE.html") + 2]; +- if (strPreferredLocale.isNotEmpty() && strPreferredLanguage.isNotEmpty()) +- RTStrPrintf(szName, sizeof(szName), VBOX_EXTPACK_LICENSE_NAME_PREFIX "-%s_%s.%s", +- strPreferredLocale.c_str(), strPreferredLanguage.c_str(), strFormat.c_str()); +- else if (strPreferredLocale.isNotEmpty()) +- RTStrPrintf(szName, sizeof(szName), VBOX_EXTPACK_LICENSE_NAME_PREFIX "-%s.%s", strPreferredLocale.c_str(), strFormat.c_str()); +- else if (strPreferredLanguage.isNotEmpty()) +- RTStrPrintf(szName, sizeof(szName), VBOX_EXTPACK_LICENSE_NAME_PREFIX "-_%s.%s", strPreferredLocale.c_str(), strFormat.c_str()); +- else +- RTStrPrintf(szName, sizeof(szName), VBOX_EXTPACK_LICENSE_NAME_PREFIX ".%s", strFormat.c_str()); +- +- /* +- * Effectuate the query. +- */ +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- AutoReadLock autoLock(this COMMA_LOCKVAL_SRC_POS); /* paranoia */ +- +- if (!m->fUsable) +- hrc = setError(E_FAIL, tr("%s"), m->strWhyUnusable.c_str()); +- else +- { +- char szPath[RTPATH_MAX]; +- int vrc = RTPathJoin(szPath, sizeof(szPath), m->strExtPackPath.c_str(), szName); +- if (RT_SUCCESS(vrc)) +- { +- void *pvFile; +- size_t cbFile; +- vrc = RTFileReadAllEx(szPath, 0, RTFOFF_MAX, RTFILE_RDALL_O_DENY_READ, &pvFile, &cbFile); +- if (RT_SUCCESS(vrc)) +- { +- Bstr bstrLicense((const char *)pvFile, cbFile); +- if (bstrLicense.isNotEmpty()) +- { +- bstrLicense.detachTo(a_pbstrLicense); +- hrc = S_OK; +- } +- else +- hrc = setError(VBOX_E_IPRT_ERROR, tr("The license file '%s' is empty or contains invalid UTF-8 encoding"), +- szPath); +- RTFileReadAllFree(pvFile, cbFile); +- } +- else if (vrc == VERR_FILE_NOT_FOUND || vrc == VERR_PATH_NOT_FOUND) +- hrc = setError(VBOX_E_OBJECT_NOT_FOUND, tr("The license file '%s' was not found in extension pack '%s'"), +- szName, m->Desc.strName.c_str()); +- else +- hrc = setError(VBOX_E_FILE_ERROR, tr("Failed to open the license file '%s': %Rrc"), szPath, vrc); +- } +- else +- hrc = setError(VBOX_E_IPRT_ERROR, tr("RTPathJoin failed: %Rrc"), vrc); +- } +- } +- return hrc; +-} +- +- +-STDMETHODIMP ExtPack::QueryObject(IN_BSTR a_bstrObjectId, IUnknown **a_ppUnknown) +-{ +- com::Guid ObjectId; +- CheckComArgGuid(a_bstrObjectId, ObjectId); +- CheckComArgOutPointerValid(a_ppUnknown); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- if ( m->pReg +- && m->pReg->pfnQueryObject) +- { +- void *pvUnknown = m->pReg->pfnQueryObject(m->pReg, ObjectId.raw()); +- if (pvUnknown) +- *a_ppUnknown = (IUnknown *)pvUnknown; +- else +- hrc = E_NOINTERFACE; +- } +- else +- hrc = E_NOINTERFACE; +- } +- return hrc; +-} +- +- +- +- +-DEFINE_EMPTY_CTOR_DTOR(ExtPackManager) +- +-/** +- * Called by ComObjPtr::createObject when creating the object. +- * +- * Just initialize the basic object state, do the rest in init(). +- * +- * @returns S_OK. +- */ +-HRESULT ExtPackManager::FinalConstruct() +-{ +- m = NULL; +- return S_OK; +-} +- +-/** +- * Initializes the extension pack manager. +- * +- * @returns COM status code. +- * @param a_pVirtualBox Pointer to the VirtualBox object. +- * @param a_enmContext The context we're in. +- */ +-HRESULT ExtPackManager::initExtPackManager(VirtualBox *a_pVirtualBox, VBOXEXTPACKCTX a_enmContext) +-{ +- AutoInitSpan autoInitSpan(this); +- AssertReturn(autoInitSpan.isOk(), E_FAIL); +- +- /* +- * Figure some stuff out before creating the instance data. +- */ +- char szBaseDir[RTPATH_MAX]; +- int rc = RTPathAppPrivateArchTop(szBaseDir, sizeof(szBaseDir)); +- AssertLogRelRCReturn(rc, E_FAIL); +- rc = RTPathAppend(szBaseDir, sizeof(szBaseDir), VBOX_EXTPACK_INSTALL_DIR); +- AssertLogRelRCReturn(rc, E_FAIL); +- +- char szCertificatDir[RTPATH_MAX]; +- rc = RTPathAppPrivateNoArch(szCertificatDir, sizeof(szCertificatDir)); +- AssertLogRelRCReturn(rc, E_FAIL); +- rc = RTPathAppend(szCertificatDir, sizeof(szCertificatDir), VBOX_EXTPACK_CERT_DIR); +- AssertLogRelRCReturn(rc, E_FAIL); +- +- /* +- * Allocate and initialize the instance data. +- */ +- m = new Data; +- m->strBaseDir = szBaseDir; +- m->strCertificatDirPath = szCertificatDir; +- m->pVirtualBox = a_pVirtualBox; +- m->enmContext = a_enmContext; +- +- /* +- * Slurp in VBoxVMM which is used by VBoxPuelMain. +- */ +-#if !defined(RT_OS_WINDOWS) && !defined(RT_OS_DARWIN) +- if (a_enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON) +- { +- int vrc = SUPR3HardenedLdrLoadAppPriv("VBoxVMM", &m->hVBoxVMM, RTLDRLOAD_FLAGS_GLOBAL, NULL); +- if (RT_FAILURE(vrc)) +- m->hVBoxVMM = NIL_RTLDRMOD; +- /* cleanup in ::uninit()? */ +- } +-#endif +- +- /* +- * Go looking for extensions. The RTDirOpen may fail if nothing has been +- * installed yet, or if root is paranoid and has revoked our access to them. +- * +- * We ASSUME that there are no files, directories or stuff in the directory +- * that exceed the max name length in RTDIRENTRYEX. +- */ +- HRESULT hrc = S_OK; +- PRTDIR pDir; +- int vrc = RTDirOpen(&pDir, szBaseDir); +- if (RT_SUCCESS(vrc)) +- { +- for (;;) +- { +- RTDIRENTRYEX Entry; +- vrc = RTDirReadEx(pDir, &Entry, NULL /*pcbDirEntry*/, RTFSOBJATTRADD_NOTHING, RTPATH_F_ON_LINK); +- if (RT_FAILURE(vrc)) +- { +- AssertLogRelMsg(vrc == VERR_NO_MORE_FILES, ("%Rrc\n", vrc)); +- break; +- } +- if ( RTFS_IS_DIRECTORY(Entry.Info.Attr.fMode) +- && strcmp(Entry.szName, ".") != 0 +- && strcmp(Entry.szName, "..") != 0 +- && VBoxExtPackIsValidMangledName(Entry.szName) ) +- { +- /* +- * All directories are extensions, the shall be nothing but +- * extensions in this subdirectory. +- */ +- char szExtPackDir[RTPATH_MAX]; +- vrc = RTPathJoin(szExtPackDir, sizeof(szExtPackDir), m->strBaseDir.c_str(), Entry.szName); +- AssertLogRelRC(vrc); +- if (RT_SUCCESS(vrc)) +- { +- RTCString *pstrName = VBoxExtPackUnmangleName(Entry.szName, RTSTR_MAX); +- AssertLogRel(pstrName); +- if (pstrName) +- { +- ComObjPtr<ExtPack> NewExtPack; +- HRESULT hrc2 = NewExtPack.createObject(); +- if (SUCCEEDED(hrc2)) +- hrc2 = NewExtPack->initWithDir(a_enmContext, pstrName->c_str(), szExtPackDir); +- delete pstrName; +- if (SUCCEEDED(hrc2)) +- m->llInstalledExtPacks.push_back(NewExtPack); +- else if (SUCCEEDED(rc)) +- hrc = hrc2; +- } +- else +- hrc = E_UNEXPECTED; +- } +- else +- hrc = E_UNEXPECTED; +- } +- } +- RTDirClose(pDir); +- } +- /* else: ignore, the directory probably does not exist or something. */ +- +- if (SUCCEEDED(hrc)) +- autoInitSpan.setSucceeded(); +- return hrc; +-} +- +-/** +- * COM cruft. +- */ +-void ExtPackManager::FinalRelease() +-{ +- uninit(); +-} +- +-/** +- * Do the actual cleanup. +- */ +-void ExtPackManager::uninit() +-{ +- /* Enclose the state transition Ready->InUninit->NotReady */ +- AutoUninitSpan autoUninitSpan(this); +- if (!autoUninitSpan.uninitDone() && m != NULL) +- { +- delete m; +- m = NULL; +- } +-} +- +- +-STDMETHODIMP ExtPackManager::COMGETTER(InstalledExtPacks)(ComSafeArrayOut(IExtPack *, a_paExtPacks)) +-{ +- CheckComArgOutSafeArrayPointerValid(a_paExtPacks); +- Assert(m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- AutoReadLock autoLock(this COMMA_LOCKVAL_SRC_POS); +- +- SafeIfaceArray<IExtPack> SaExtPacks(m->llInstalledExtPacks); +- SaExtPacks.detachTo(ComSafeArrayOutArg(a_paExtPacks)); +- } +- +- return hrc; +-} +- +-STDMETHODIMP ExtPackManager::Find(IN_BSTR a_bstrName, IExtPack **a_pExtPack) +-{ +- CheckComArgNotNull(a_bstrName); +- CheckComArgOutPointerValid(a_pExtPack); +- Utf8Str strName(a_bstrName); +- Assert(m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- AutoReadLock autoLock(this COMMA_LOCKVAL_SRC_POS); +- +- ComPtr<ExtPack> ptrExtPack = findExtPack(strName.c_str()); +- if (!ptrExtPack.isNull()) +- ptrExtPack.queryInterfaceTo(a_pExtPack); +- else +- hrc = VBOX_E_OBJECT_NOT_FOUND; +- } +- +- return hrc; +-} +- +-STDMETHODIMP ExtPackManager::OpenExtPackFile(IN_BSTR a_bstrTarballAndDigest, IExtPackFile **a_ppExtPackFile) +-{ +- CheckComArgNotNull(a_bstrTarballAndDigest); +- CheckComArgOutPointerValid(a_ppExtPackFile); +- AssertReturn(m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON, E_UNEXPECTED); +- +- /* The API can optionally take a ::SHA-256=<hex-digest> attribute at the +- end of the file name. This is just a temporary measure for +- backporting, in 4.2 we'll add another parameter to the method. */ +- Utf8Str strTarball; +- Utf8Str strDigest; +- Utf8Str strTarballAndDigest(a_bstrTarballAndDigest); +- size_t offSha256 = strTarballAndDigest.find("::SHA-256="); +- if (offSha256 == Utf8Str::npos) +- strTarball = strTarballAndDigest; +- else +- { +- strTarball = strTarballAndDigest.substr(0, offSha256); +- strDigest = strTarballAndDigest.substr(offSha256 + sizeof("::SHA-256=") - 1); +- } +- +- ComObjPtr<ExtPackFile> NewExtPackFile; +- HRESULT hrc = NewExtPackFile.createObject(); +- if (SUCCEEDED(hrc)) +- hrc = NewExtPackFile->initWithFile(strTarball.c_str(), strDigest.c_str(), this, m->pVirtualBox); +- if (SUCCEEDED(hrc)) +- NewExtPackFile.queryInterfaceTo(a_ppExtPackFile); +- +- return hrc; +-} +- +-STDMETHODIMP ExtPackManager::Uninstall(IN_BSTR a_bstrName, BOOL a_fForcedRemoval, IN_BSTR a_bstrDisplayInfo, +- IProgress **a_ppProgress) +-{ +- CheckComArgNotNull(a_bstrName); +- if (a_ppProgress) +- *a_ppProgress = NULL; +- Assert(m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- PEXTPACKUNINSTALLJOB pJob = NULL; +- try +- { +- pJob = new EXTPACKUNINSTALLJOB; +- pJob->ptrExtPackMgr = this; +- pJob->strName = a_bstrName; +- pJob->fForcedRemoval = a_fForcedRemoval != FALSE; +- pJob->strDisplayInfo = a_bstrDisplayInfo; +- hrc = pJob->ptrProgress.createObject(); +- if (SUCCEEDED(hrc)) +- { +- Bstr bstrDescription = tr("Uninstalling extension pack"); +- hrc = pJob->ptrProgress->init( +-#ifndef VBOX_COM_INPROC +- m->pVirtualBox, +-#endif +- static_cast<IExtPackManager *>(this), +- bstrDescription.raw(), +- FALSE /*aCancelable*/, +- NULL /*aId*/); +- } +- if (SUCCEEDED(hrc)) +- { +- ComPtr<Progress> ptrProgress = pJob->ptrProgress; +- int vrc = RTThreadCreate(NULL /*phThread*/, ExtPackManager::doUninstallThreadProc, pJob, 0, +- RTTHREADTYPE_DEFAULT, 0 /*fFlags*/, "ExtPackUninst"); +- if (RT_SUCCESS(vrc)) +- { +- pJob = NULL; /* the thread deletes it */ +- ptrProgress.queryInterfaceTo(a_ppProgress); +- } +- else +- hrc = setError(VBOX_E_IPRT_ERROR, tr("RTThreadCreate failed with %Rrc"), vrc); +- } +- } +- catch (std::bad_alloc) +- { +- hrc = E_OUTOFMEMORY; +- } +- if (pJob) +- delete pJob; +- } +- +- return hrc; +-} +- +-STDMETHODIMP ExtPackManager::Cleanup(void) +-{ +- Assert(m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- /* +- * Run the set-uid-to-root binary that performs the cleanup. +- * +- * Take the write lock to prevent conflicts with other calls to this +- * VBoxSVC instance. +- */ +- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS); +- hrc = runSetUidToRootHelper(NULL, +- "cleanup", +- "--base-dir", m->strBaseDir.c_str(), +- (const char *)NULL); +- } +- +- return hrc; +-} +- +-STDMETHODIMP ExtPackManager::QueryAllPlugInsForFrontend(IN_BSTR a_bstrFrontend, ComSafeArrayOut(BSTR, a_pabstrPlugInModules)) +-{ +- CheckComArgNotNull(a_bstrFrontend); +- Utf8Str strName(a_bstrFrontend); +- CheckComArgOutSafeArrayPointerValid(a_pabstrPlugInModules); +- Assert(m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- com::SafeArray<BSTR> saPaths((size_t)0); +- /** @todo implement plug-ins */ +- saPaths.detachTo(ComSafeArrayOutArg(a_pabstrPlugInModules)); +- } +- return hrc; +-} +- +-STDMETHODIMP ExtPackManager::IsExtPackUsable(IN_BSTR a_bstrExtPack, BOOL *aUsable) +-{ +- CheckComArgNotNull(a_bstrExtPack); +- Utf8Str strExtPack(a_bstrExtPack); +- *aUsable = isExtPackUsable(strExtPack.c_str()); +- return S_OK; +-} +- +-/** +- * Finds the success indicator string in the stderr output ofr hte helper app. +- * +- * @returns Pointer to the indicator. +- * @param psz The stderr output string. Can be NULL. +- * @param cch The size of the string. +- */ +-static char *findSuccessIndicator(char *psz, size_t cch) +-{ +- static const char s_szSuccessInd[] = "rcExit=RTEXITCODE_SUCCESS"; +- Assert(!cch || strlen(psz) == cch); +- if (cch < sizeof(s_szSuccessInd) - 1) +- return NULL; +- char *pszInd = &psz[cch - sizeof(s_szSuccessInd) + 1]; +- if (strcmp(s_szSuccessInd, pszInd)) +- return NULL; +- return pszInd; +-} +- +-/** +- * Runs the helper application that does the privileged operations. +- * +- * @returns S_OK or a failure status with error information set. +- * @param a_pstrDisplayInfo Platform specific display info hacks. +- * @param a_pszCommand The command to execute. +- * @param ... The argument strings that goes along with the +- * command. Maximum is about 16. Terminated by a +- * NULL. +- */ +-HRESULT ExtPackManager::runSetUidToRootHelper(Utf8Str const *a_pstrDisplayInfo, const char *a_pszCommand, ...) +-{ +- /* +- * Calculate the path to the helper application. +- */ +- char szExecName[RTPATH_MAX]; +- int vrc = RTPathAppPrivateArch(szExecName, sizeof(szExecName)); +- AssertLogRelRCReturn(vrc, E_UNEXPECTED); +- +- vrc = RTPathAppend(szExecName, sizeof(szExecName), VBOX_EXTPACK_HELPER_NAME); +- AssertLogRelRCReturn(vrc, E_UNEXPECTED); +- +- /* +- * Convert the variable argument list to a RTProcCreate argument vector. +- */ +- const char *apszArgs[20]; +- unsigned cArgs = 0; +- +- LogRel(("ExtPack: Executing '%s'", szExecName)); +- apszArgs[cArgs++] = &szExecName[0]; +- +- if ( a_pstrDisplayInfo +- && a_pstrDisplayInfo->isNotEmpty()) +- { +- LogRel((" '--display-info-hack' '%s'", a_pstrDisplayInfo->c_str())); +- apszArgs[cArgs++] = "--display-info-hack"; +- apszArgs[cArgs++] = a_pstrDisplayInfo->c_str(); +- } +- +- LogRel(("'%s'", a_pszCommand)); +- apszArgs[cArgs++] = a_pszCommand; +- +- va_list va; +- va_start(va, a_pszCommand); +- const char *pszLastArg; +- for (;;) +- { +- AssertReturn(cArgs < RT_ELEMENTS(apszArgs) - 1, E_UNEXPECTED); +- pszLastArg = va_arg(va, const char *); +- if (!pszLastArg) +- break; +- LogRel((" '%s'", pszLastArg)); +- apszArgs[cArgs++] = pszLastArg; +- }; +- va_end(va); +- +- LogRel(("\n")); +- apszArgs[cArgs] = NULL; +- +- /* +- * Create a PIPE which we attach to stderr so that we can read the error +- * message on failure and report it back to the caller. +- */ +- RTPIPE hPipeR; +- RTHANDLE hStdErrPipe; +- hStdErrPipe.enmType = RTHANDLETYPE_PIPE; +- vrc = RTPipeCreate(&hPipeR, &hStdErrPipe.u.hPipe, RTPIPE_C_INHERIT_WRITE); +- AssertLogRelRCReturn(vrc, E_UNEXPECTED); +- +- /* +- * Spawn the process. +- */ +- HRESULT hrc; +- RTPROCESS hProcess; +- vrc = RTProcCreateEx(szExecName, +- apszArgs, +- RTENV_DEFAULT, +- 0 /*fFlags*/, +- NULL /*phStdIn*/, +- NULL /*phStdOut*/, +- &hStdErrPipe, +- NULL /*pszAsUser*/, +- NULL /*pszPassword*/, +- &hProcess); +- if (RT_SUCCESS(vrc)) +- { +- vrc = RTPipeClose(hStdErrPipe.u.hPipe); +- hStdErrPipe.u.hPipe = NIL_RTPIPE; +- +- /* +- * Read the pipe output until the process completes. +- */ +- RTPROCSTATUS ProcStatus = { -42, RTPROCEXITREASON_ABEND }; +- size_t cbStdErrBuf = 0; +- size_t offStdErrBuf = 0; +- char *pszStdErrBuf = NULL; +- do +- { +- /* +- * Service the pipe. Block waiting for output or the pipe breaking +- * when the process terminates. +- */ +- if (hPipeR != NIL_RTPIPE) +- { +- char achBuf[1024]; +- size_t cbRead; +- vrc = RTPipeReadBlocking(hPipeR, achBuf, sizeof(achBuf), &cbRead); +- if (RT_SUCCESS(vrc)) +- { +- /* grow the buffer? */ +- size_t cbBufReq = offStdErrBuf + cbRead + 1; +- if ( cbBufReq > cbStdErrBuf +- && cbBufReq < _256K) +- { +- size_t cbNew = RT_ALIGN_Z(cbBufReq, 16); // 1024 +- void *pvNew = RTMemRealloc(pszStdErrBuf, cbNew); +- if (pvNew) +- { +- pszStdErrBuf = (char *)pvNew; +- cbStdErrBuf = cbNew; +- } +- } +- +- /* append if we've got room. */ +- if (cbBufReq <= cbStdErrBuf) +- { +- memcpy(&pszStdErrBuf[offStdErrBuf], achBuf, cbRead); +- offStdErrBuf = offStdErrBuf + cbRead; +- pszStdErrBuf[offStdErrBuf] = '\0'; +- } +- } +- else +- { +- AssertLogRelMsg(vrc == VERR_BROKEN_PIPE, ("%Rrc\n", vrc)); +- RTPipeClose(hPipeR); +- hPipeR = NIL_RTPIPE; +- } +- } +- +- /* +- * Service the process. Block if we have no pipe. +- */ +- if (hProcess != NIL_RTPROCESS) +- { +- vrc = RTProcWait(hProcess, +- hPipeR == NIL_RTPIPE ? RTPROCWAIT_FLAGS_BLOCK : RTPROCWAIT_FLAGS_NOBLOCK, +- &ProcStatus); +- if (RT_SUCCESS(vrc)) +- hProcess = NIL_RTPROCESS; +- else +- AssertLogRelMsgStmt(vrc == VERR_PROCESS_RUNNING, ("%Rrc\n", vrc), hProcess = NIL_RTPROCESS); +- } +- } while ( hPipeR != NIL_RTPIPE +- || hProcess != NIL_RTPROCESS); +- +- LogRel(("ExtPack: enmReason=%d iStatus=%d stderr='%s'\n", +- ProcStatus.enmReason, ProcStatus.iStatus, offStdErrBuf ? pszStdErrBuf : "")); +- +- /* +- * Look for rcExit=RTEXITCODE_SUCCESS at the end of the error output, +- * cut it as it is only there to attest the success. +- */ +- if (offStdErrBuf > 0) +- { +- RTStrStripR(pszStdErrBuf); +- offStdErrBuf = strlen(pszStdErrBuf); +- } +- +- char *pszSuccessInd = findSuccessIndicator(pszStdErrBuf, offStdErrBuf); +- if (pszSuccessInd) +- { +- *pszSuccessInd = '\0'; +- offStdErrBuf = pszSuccessInd - pszStdErrBuf; +- } +- else if ( ProcStatus.enmReason == RTPROCEXITREASON_NORMAL +- && ProcStatus.iStatus == 0) +- ProcStatus.iStatus = offStdErrBuf ? 667 : 666; +- +- /* +- * Compose the status code and, on failure, error message. +- */ +- if ( ProcStatus.enmReason == RTPROCEXITREASON_NORMAL +- && ProcStatus.iStatus == 0) +- hrc = S_OK; +- else if (ProcStatus.enmReason == RTPROCEXITREASON_NORMAL) +- { +- AssertMsg(ProcStatus.iStatus != 0, ("%s\n", pszStdErrBuf)); +- hrc = setError(E_FAIL, tr("The installer failed with exit code %d: %s"), +- ProcStatus.iStatus, offStdErrBuf ? pszStdErrBuf : ""); +- } +- else if (ProcStatus.enmReason == RTPROCEXITREASON_SIGNAL) +- hrc = setError(E_UNEXPECTED, tr("The installer was killed by signal #d (stderr: %s)"), +- ProcStatus.iStatus, offStdErrBuf ? pszStdErrBuf : ""); +- else if (ProcStatus.enmReason == RTPROCEXITREASON_ABEND) +- hrc = setError(E_UNEXPECTED, tr("The installer aborted abnormally (stderr: %s)"), +- offStdErrBuf ? pszStdErrBuf : ""); +- else +- hrc = setError(E_UNEXPECTED, tr("internal error: enmReason=%d iStatus=%d stderr='%s'"), +- ProcStatus.enmReason, ProcStatus.iStatus, offStdErrBuf ? pszStdErrBuf : ""); +- +- RTMemFree(pszStdErrBuf); +- } +- else +- hrc = setError(VBOX_E_IPRT_ERROR, tr("Failed to launch the helper application '%s' (%Rrc)"), szExecName, vrc); +- +- RTPipeClose(hPipeR); +- RTPipeClose(hStdErrPipe.u.hPipe); +- +- return hrc; +-} +- +-/** +- * Finds an installed extension pack. +- * +- * @returns Pointer to the extension pack if found, NULL if not. (No reference +- * counting problem here since the caller must be holding the lock.) +- * @param a_pszName The name of the extension pack. +- */ +-ExtPack *ExtPackManager::findExtPack(const char *a_pszName) +-{ +- size_t cchName = strlen(a_pszName); +- +- for (ExtPackList::iterator it = m->llInstalledExtPacks.begin(); +- it != m->llInstalledExtPacks.end(); +- it++) +- { +- ExtPack::Data *pExtPackData = (*it)->m; +- if ( pExtPackData +- && pExtPackData->Desc.strName.length() == cchName +- && pExtPackData->Desc.strName.equalsIgnoreCase(a_pszName)) +- return (*it); +- } +- return NULL; +-} +- +-/** +- * Removes an installed extension pack from the internal list. +- * +- * The package is expected to exist! +- * +- * @param a_pszName The name of the extension pack. +- */ +-void ExtPackManager::removeExtPack(const char *a_pszName) +-{ +- size_t cchName = strlen(a_pszName); +- +- for (ExtPackList::iterator it = m->llInstalledExtPacks.begin(); +- it != m->llInstalledExtPacks.end(); +- it++) +- { +- ExtPack::Data *pExtPackData = (*it)->m; +- if ( pExtPackData +- && pExtPackData->Desc.strName.length() == cchName +- && pExtPackData->Desc.strName.equalsIgnoreCase(a_pszName)) +- { +- m->llInstalledExtPacks.erase(it); +- return; +- } +- } +- AssertMsgFailed(("%s\n", a_pszName)); +-} +- +-/** +- * Refreshes the specified extension pack. +- * +- * This may remove the extension pack from the list, so any non-smart pointers +- * to the extension pack object may become invalid. +- * +- * @returns S_OK and *a_ppExtPack on success, COM status code and error +- * message on failure. Note that *a_ppExtPack can be NULL. +- * +- * @param a_pszName The extension to update.. +- * @param a_fUnusableIsError If @c true, report an unusable extension pack +- * as an error. +- * @param a_ppExtPack Where to store the pointer to the extension +- * pack of it is still around after the refresh. +- * This is optional. +- * +- * @remarks Caller holds the extension manager lock. +- * @remarks Only called in VBoxSVC. +- */ +-HRESULT ExtPackManager::refreshExtPack(const char *a_pszName, bool a_fUnusableIsError, ExtPack **a_ppExtPack) +-{ +- Assert(m->pVirtualBox != NULL); /* Only called from VBoxSVC. */ +- +- HRESULT hrc; +- ExtPack *pExtPack = findExtPack(a_pszName); +- if (pExtPack) +- { +- /* +- * Refresh existing object. +- */ +- bool fCanDelete; +- hrc = pExtPack->refresh(&fCanDelete); +- if (SUCCEEDED(hrc)) +- { +- if (fCanDelete) +- { +- removeExtPack(a_pszName); +- pExtPack = NULL; +- } +- } +- } +- else +- { +- /* +- * Do this check here, otherwise VBoxExtPackCalcDir() will fail with a strange +- * error. +- */ +- bool fValid = VBoxExtPackIsValidName(a_pszName); +- if (!fValid) +- return setError(E_FAIL, "Invalid extension pack name specified"); +- +- /* +- * Does the dir exist? Make some special effort to deal with case +- * sensitivie file systems (a_pszName is case insensitive and mangled). +- */ +- char szDir[RTPATH_MAX]; +- int vrc = VBoxExtPackCalcDir(szDir, sizeof(szDir), m->strBaseDir.c_str(), a_pszName); +- AssertLogRelRCReturn(vrc, E_FAIL); +- +- RTDIRENTRYEX Entry; +- RTFSOBJINFO ObjInfo; +- vrc = RTPathQueryInfoEx(szDir, &ObjInfo, RTFSOBJATTRADD_NOTHING, RTPATH_F_ON_LINK); +- bool fExists = RT_SUCCESS(vrc) && RTFS_IS_DIRECTORY(ObjInfo.Attr.fMode); +- if (!fExists) +- { +- PRTDIR pDir; +- vrc = RTDirOpen(&pDir, m->strBaseDir.c_str()); +- if (RT_SUCCESS(vrc)) +- { +- const char *pszMangledName = RTPathFilename(szDir); +- for (;;) +- { +- vrc = RTDirReadEx(pDir, &Entry, NULL /*pcbDirEntry*/, RTFSOBJATTRADD_NOTHING, RTPATH_F_ON_LINK); +- if (RT_FAILURE(vrc)) +- { +- AssertLogRelMsg(vrc == VERR_NO_MORE_FILES, ("%Rrc\n", vrc)); +- break; +- } +- if ( RTFS_IS_DIRECTORY(Entry.Info.Attr.fMode) +- && !RTStrICmp(Entry.szName, pszMangledName)) +- { +- /* +- * The installed extension pack has a uses different case. +- * Update the name and directory variables. +- */ +- vrc = RTPathJoin(szDir, sizeof(szDir), m->strBaseDir.c_str(), Entry.szName); /* not really necessary */ +- AssertLogRelRCReturnStmt(vrc, RTDirClose(pDir), E_UNEXPECTED); +- a_pszName = Entry.szName; +- fExists = true; +- break; +- } +- } +- RTDirClose(pDir); +- } +- } +- if (fExists) +- { +- /* +- * We've got something, create a new extension pack object for it. +- */ +- ComObjPtr<ExtPack> ptrNewExtPack; +- hrc = ptrNewExtPack.createObject(); +- if (SUCCEEDED(hrc)) +- hrc = ptrNewExtPack->initWithDir(m->enmContext, a_pszName, szDir); +- if (SUCCEEDED(hrc)) +- { +- m->llInstalledExtPacks.push_back(ptrNewExtPack); +- if (ptrNewExtPack->m->fUsable) +- LogRel(("ExtPackManager: Found extension pack '%s'.\n", a_pszName)); +- else +- LogRel(("ExtPackManager: Found bad extension pack '%s': %s\n", +- a_pszName, ptrNewExtPack->m->strWhyUnusable.c_str() )); +- pExtPack = ptrNewExtPack; +- } +- } +- else +- hrc = S_OK; +- } +- +- /* +- * Report error if not usable, if that is desired. +- */ +- if ( SUCCEEDED(hrc) +- && pExtPack +- && a_fUnusableIsError +- && !pExtPack->m->fUsable) +- hrc = setError(E_FAIL, "%s", pExtPack->m->strWhyUnusable.c_str()); +- +- if (a_ppExtPack) +- *a_ppExtPack = pExtPack; +- return hrc; +-} +- +-/** +- * Thread wrapper around doInstall. +- * +- * @returns VINF_SUCCESS (ignored) +- * @param hThread The thread handle (ignored). +- * @param pvJob The job structure. +- */ +-/*static*/ DECLCALLBACK(int) ExtPackManager::doInstallThreadProc(RTTHREAD hThread, void *pvJob) +-{ +- PEXTPACKINSTALLJOB pJob = (PEXTPACKINSTALLJOB)pvJob; +- HRESULT hrc = pJob->ptrExtPackMgr->doInstall(pJob->ptrExtPackFile, pJob->fReplace, &pJob->strDisplayInfo); +- pJob->ptrProgress->notifyComplete(hrc); +- delete pJob; +- +- NOREF(hThread); +- return VINF_SUCCESS; +-} +- +-/** +- * Worker for IExtPackFile::Install. +- * +- * Called on a worker thread via doInstallThreadProc. +- * +- * @returns COM status code. +- * @param a_pExtPackFile The extension pack file, caller checks that +- * it's usable. +- * @param a_fReplace Whether to replace any existing extpack or just +- * fail. +- * @param a_pstrDisplayInfo Host specific display information hacks. +- * @param a_ppProgress Where to return a progress object some day. Can +- * be NULL. +- */ +-HRESULT ExtPackManager::doInstall(ExtPackFile *a_pExtPackFile, bool a_fReplace, Utf8Str const *a_pstrDisplayInfo) +-{ +- AssertReturn(m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON, E_UNEXPECTED); +- RTCString const * const pStrName = &a_pExtPackFile->m->Desc.strName; +- RTCString const * const pStrTarball = &a_pExtPackFile->m->strExtPackFile; +- RTCString const * const pStrTarballDigest = &a_pExtPackFile->m->strDigest; +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS); +- +- /* +- * Refresh the data we have on the extension pack as it +- * may be made stale by direct meddling or some other user. +- */ +- ExtPack *pExtPack; +- hrc = refreshExtPack(pStrName->c_str(), false /*a_fUnusableIsError*/, &pExtPack); +- if (SUCCEEDED(hrc)) +- { +- if (pExtPack && a_fReplace) +- hrc = pExtPack->callUninstallHookAndClose(m->pVirtualBox, false /*a_ForcedRemoval*/); +- else if (pExtPack) +- hrc = setError(E_FAIL, +- tr("Extension pack '%s' is already installed." +- " In case of a reinstallation, please uninstall it first"), +- pStrName->c_str()); +- } +- if (SUCCEEDED(hrc)) +- { +- /* +- * Run the privileged helper binary that performs the actual +- * installation. Then create an object for the packet (we do this +- * even on failure, to be on the safe side). +- */ +- hrc = runSetUidToRootHelper(a_pstrDisplayInfo, +- "install", +- "--base-dir", m->strBaseDir.c_str(), +- "--cert-dir", m->strCertificatDirPath.c_str(), +- "--name", pStrName->c_str(), +- "--tarball", pStrTarball->c_str(), +- "--sha-256", pStrTarballDigest->c_str(), +- pExtPack ? "--replace" : (const char *)NULL, +- (const char *)NULL); +- if (SUCCEEDED(hrc)) +- { +- hrc = refreshExtPack(pStrName->c_str(), true /*a_fUnusableIsError*/, &pExtPack); +- if (SUCCEEDED(hrc) && pExtPack) +- { +- RTERRINFOSTATIC ErrInfo; +- RTErrInfoInitStatic(&ErrInfo); +- pExtPack->callInstalledHook(m->pVirtualBox, &autoLock, &ErrInfo.Core); +- if (RT_SUCCESS(ErrInfo.Core.rc)) +- LogRel(("ExtPackManager: Successfully installed extension pack '%s'.\n", pStrName->c_str())); +- else +- { +- LogRel(("ExtPackManager: Installated hook for '%s' failed: %Rrc - %s\n", +- pStrName->c_str(), ErrInfo.Core.rc, ErrInfo.Core.pszMsg)); +- +- /* +- * Uninstall the extpack if the error indicates that. +- */ +- if (ErrInfo.Core.rc == VERR_EXTPACK_UNSUPPORTED_HOST_UNINSTALL) +- runSetUidToRootHelper(a_pstrDisplayInfo, +- "uninstall", +- "--base-dir", m->strBaseDir.c_str(), +- "--name", pStrName->c_str(), +- "--forced", +- (const char *)NULL); +- hrc = setError(E_FAIL, tr("The installation hook failed: %Rrc - %s"), +- ErrInfo.Core.rc, ErrInfo.Core.pszMsg); +- } +- } +- else if (SUCCEEDED(hrc)) +- hrc = setError(E_FAIL, tr("Installing extension pack '%s' failed under mysterious circumstances"), +- pStrName->c_str()); +- } +- else +- { +- ErrorInfoKeeper Eik; +- refreshExtPack(pStrName->c_str(), false /*a_fUnusableIsError*/, NULL); +- } +- } +- +- /* +- * Do VirtualBoxReady callbacks now for any freshly installed +- * extension pack (old ones will not be called). +- */ +- if (m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON) +- { +- autoLock.release(); +- callAllVirtualBoxReadyHooks(); +- } +- } +- +- return hrc; +-} +- +-/** +- * Thread wrapper around doUninstall. +- * +- * @returns VINF_SUCCESS (ignored) +- * @param hThread The thread handle (ignored). +- * @param pvJob The job structure. +- */ +-/*static*/ DECLCALLBACK(int) ExtPackManager::doUninstallThreadProc(RTTHREAD hThread, void *pvJob) +-{ +- PEXTPACKUNINSTALLJOB pJob = (PEXTPACKUNINSTALLJOB)pvJob; +- HRESULT hrc = pJob->ptrExtPackMgr->doUninstall(&pJob->strName, pJob->fForcedRemoval, &pJob->strDisplayInfo); +- pJob->ptrProgress->notifyComplete(hrc); +- delete pJob; +- +- NOREF(hThread); +- return VINF_SUCCESS; +-} +- +-/** +- * Worker for IExtPackManager::Uninstall. +- * +- * Called on a worker thread via doUninstallThreadProc. +- * +- * @returns COM status code. +- * @param a_pstrName The name of the extension pack to uninstall. +- * @param a_fForcedRemoval Whether to be skip and ignore certain bits of +- * the extpack feedback. To deal with misbehaving +- * extension pack hooks. +- * @param a_pstrDisplayInfo Host specific display information hacks. +- */ +-HRESULT ExtPackManager::doUninstall(Utf8Str const *a_pstrName, bool a_fForcedRemoval, Utf8Str const *a_pstrDisplayInfo) +-{ +- Assert(m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS); +- +- /* +- * Refresh the data we have on the extension pack as it may be made +- * stale by direct meddling or some other user. +- */ +- ExtPack *pExtPack; +- hrc = refreshExtPack(a_pstrName->c_str(), false /*a_fUnusableIsError*/, &pExtPack); +- if (SUCCEEDED(hrc)) +- { +- if (!pExtPack) +- { +- LogRel(("ExtPackManager: Extension pack '%s' is not installed, so nothing to uninstall.\n", a_pstrName->c_str())); +- hrc = S_OK; /* nothing to uninstall */ +- } +- else +- { +- /* +- * Call the uninstall hook and unload the main dll. +- */ +- hrc = pExtPack->callUninstallHookAndClose(m->pVirtualBox, a_fForcedRemoval); +- if (SUCCEEDED(hrc)) +- { +- /* +- * Run the set-uid-to-root binary that performs the +- * uninstallation. Then refresh the object. +- * +- * This refresh is theorically subject to races, but it's of +- * the don't-do-that variety. +- */ +- const char *pszForcedOpt = a_fForcedRemoval ? "--forced" : NULL; +- hrc = runSetUidToRootHelper(a_pstrDisplayInfo, +- "uninstall", +- "--base-dir", m->strBaseDir.c_str(), +- "--name", a_pstrName->c_str(), +- pszForcedOpt, /* Last as it may be NULL. */ +- (const char *)NULL); +- if (SUCCEEDED(hrc)) +- { +- hrc = refreshExtPack(a_pstrName->c_str(), false /*a_fUnusableIsError*/, &pExtPack); +- if (SUCCEEDED(hrc)) +- { +- if (!pExtPack) +- LogRel(("ExtPackManager: Successfully uninstalled extension pack '%s'.\n", a_pstrName->c_str())); +- else +- hrc = setError(E_FAIL, +- tr("Uninstall extension pack '%s' failed under mysterious circumstances"), +- a_pstrName->c_str()); +- } +- } +- else +- { +- ErrorInfoKeeper Eik; +- refreshExtPack(a_pstrName->c_str(), false /*a_fUnusableIsError*/, NULL); +- } +- } +- } +- } +- +- /* +- * Do VirtualBoxReady callbacks now for any freshly installed +- * extension pack (old ones will not be called). +- */ +- if (m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON) +- { +- autoLock.release(); +- callAllVirtualBoxReadyHooks(); +- } +- } +- +- return hrc; +-} +- +- +-/** +- * Calls the pfnVirtualBoxReady hook for all working extension packs. +- * +- * @remarks The caller must not hold any locks. +- */ +-void ExtPackManager::callAllVirtualBoxReadyHooks(void) +-{ +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (FAILED(hrc)) +- return; +- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS); +- ComPtr<ExtPackManager> ptrSelfRef = this; +- +- for (ExtPackList::iterator it = m->llInstalledExtPacks.begin(); +- it != m->llInstalledExtPacks.end(); +- /* advancing below */) +- { +- if ((*it)->callVirtualBoxReadyHook(m->pVirtualBox, &autoLock)) +- it = m->llInstalledExtPacks.begin(); +- else +- it++; +- } +-} +- +-/** +- * Calls the pfnConsoleReady hook for all working extension packs. +- * +- * @param a_pConsole The console interface. +- * @remarks The caller must not hold any locks. +- */ +-void ExtPackManager::callAllConsoleReadyHooks(IConsole *a_pConsole) +-{ +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (FAILED(hrc)) +- return; +- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS); +- ComPtr<ExtPackManager> ptrSelfRef = this; +- +- for (ExtPackList::iterator it = m->llInstalledExtPacks.begin(); +- it != m->llInstalledExtPacks.end(); +- /* advancing below */) +- { +- if ((*it)->callConsoleReadyHook(a_pConsole, &autoLock)) +- it = m->llInstalledExtPacks.begin(); +- else +- it++; +- } +-} +- +-/** +- * Calls the pfnVMCreated hook for all working extension packs. +- * +- * @param a_pMachine The machine interface of the new VM. +- */ +-void ExtPackManager::callAllVmCreatedHooks(IMachine *a_pMachine) +-{ +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (FAILED(hrc)) +- return; +- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS); +- ComPtr<ExtPackManager> ptrSelfRef = this; /* paranoia */ +- ExtPackList llExtPacks = m->llInstalledExtPacks; +- +- for (ExtPackList::iterator it = llExtPacks.begin(); it != llExtPacks.end(); it++) +- (*it)->callVmCreatedHook(m->pVirtualBox, a_pMachine, &autoLock); +-} +- +-/** +- * Calls the pfnVMConfigureVMM hook for all working extension packs. +- * +- * @returns VBox status code. Stops on the first failure, expecting the caller +- * to signal this to the caller of the CFGM constructor. +- * @param a_pConsole The console interface for the VM. +- * @param a_pVM The VM handle. +- */ +-int ExtPackManager::callAllVmConfigureVmmHooks(IConsole *a_pConsole, PVM a_pVM) +-{ +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (FAILED(hrc)) +- return Global::vboxStatusCodeFromCOM(hrc); +- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS); +- ComPtr<ExtPackManager> ptrSelfRef = this; /* paranoia */ +- ExtPackList llExtPacks = m->llInstalledExtPacks; +- +- for (ExtPackList::iterator it = llExtPacks.begin(); it != llExtPacks.end(); it++) +- { +- int vrc; +- (*it)->callVmConfigureVmmHook(a_pConsole, a_pVM, &autoLock, &vrc); +- if (RT_FAILURE(vrc)) +- return vrc; +- } +- +- return VINF_SUCCESS; +-} +- +-/** +- * Calls the pfnVMPowerOn hook for all working extension packs. +- * +- * @returns VBox status code. Stops on the first failure, expecting the caller +- * to not power on the VM. +- * @param a_pConsole The console interface for the VM. +- * @param a_pVM The VM handle. +- */ +-int ExtPackManager::callAllVmPowerOnHooks(IConsole *a_pConsole, PVM a_pVM) +-{ +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (FAILED(hrc)) +- return Global::vboxStatusCodeFromCOM(hrc); +- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS); +- ComPtr<ExtPackManager> ptrSelfRef = this; /* paranoia */ +- ExtPackList llExtPacks = m->llInstalledExtPacks; +- +- for (ExtPackList::iterator it = llExtPacks.begin(); it != llExtPacks.end(); it++) +- { +- int vrc; +- (*it)->callVmPowerOnHook(a_pConsole, a_pVM, &autoLock, &vrc); +- if (RT_FAILURE(vrc)) +- return vrc; +- } +- +- return VINF_SUCCESS; +-} +- +-/** +- * Calls the pfnVMPowerOff hook for all working extension packs. +- * +- * @param a_pConsole The console interface for the VM. +- * @param a_pVM The VM handle. Can be NULL. +- */ +-void ExtPackManager::callAllVmPowerOffHooks(IConsole *a_pConsole, PVM a_pVM) +-{ +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (FAILED(hrc)) +- return; +- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS); +- ComPtr<ExtPackManager> ptrSelfRef = this; /* paranoia */ +- ExtPackList llExtPacks = m->llInstalledExtPacks; +- +- for (ExtPackList::iterator it = llExtPacks.begin(); it != llExtPacks.end(); it++) +- (*it)->callVmPowerOffHook(a_pConsole, a_pVM, &autoLock); +-} +- +- +-/** +- * Checks that the specified extension pack contains a VRDE module and that it +- * is shipshape. +- * +- * @returns S_OK if ok, appropriate failure status code with details. +- * @param a_pstrExtPack The name of the extension pack. +- */ +-HRESULT ExtPackManager::checkVrdeExtPack(Utf8Str const *a_pstrExtPack) +-{ +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- AutoReadLock autoLock(this COMMA_LOCKVAL_SRC_POS); +- +- ExtPack *pExtPack = findExtPack(a_pstrExtPack->c_str()); +- if (pExtPack) +- hrc = pExtPack->checkVrde(); +- else +- hrc = setError(VBOX_E_OBJECT_NOT_FOUND, tr("No extension pack by the name '%s' was found"), a_pstrExtPack->c_str()); +- } +- +- return hrc; +-} +- +-/** +- * Gets the full path to the VRDE library of the specified extension pack. +- * +- * This will do extacly the same as checkVrdeExtPack and then resolve the +- * library path. +- * +- * @returns S_OK if a path is returned, COM error status and message return if +- * not. +- * @param a_pstrExtPack The extension pack. +- * @param a_pstrVrdeLibrary Where to return the path. +- */ +-int ExtPackManager::getVrdeLibraryPathForExtPack(Utf8Str const *a_pstrExtPack, Utf8Str *a_pstrVrdeLibrary) +-{ +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- AutoReadLock autoLock(this COMMA_LOCKVAL_SRC_POS); +- +- ExtPack *pExtPack = findExtPack(a_pstrExtPack->c_str()); +- if (pExtPack) +- hrc = pExtPack->getVrdpLibraryName(a_pstrVrdeLibrary); +- else +- hrc = setError(VBOX_E_OBJECT_NOT_FOUND, tr("No extension pack by the name '%s' was found"), a_pstrExtPack->c_str()); +- } +- +- return hrc; +-} +- +-/** +- * Gets the name of the default VRDE extension pack. +- * +- * @returns S_OK or some COM error status on red tape failure. +- * @param a_pstrExtPack Where to return the extension pack name. Returns +- * empty if no extension pack wishes to be the default +- * VRDP provider. +- */ +-HRESULT ExtPackManager::getDefaultVrdeExtPack(Utf8Str *a_pstrExtPack) +-{ +- a_pstrExtPack->setNull(); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- AutoReadLock autoLock(this COMMA_LOCKVAL_SRC_POS); +- +- for (ExtPackList::iterator it = m->llInstalledExtPacks.begin(); +- it != m->llInstalledExtPacks.end(); +- it++) +- { +- if ((*it)->wantsToBeDefaultVrde()) +- { +- *a_pstrExtPack = (*it)->m->Desc.strName; +- break; +- } +- } +- } +- return hrc; +-} +- +-/** +- * Checks if an extension pack is (present and) usable. +- * +- * @returns @c true if it is, otherwise @c false. +- * @param a_pszExtPack The name of the extension pack. +- */ +-bool ExtPackManager::isExtPackUsable(const char *a_pszExtPack) +-{ +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (FAILED(hrc)) +- return false; +- AutoReadLock autoLock(this COMMA_LOCKVAL_SRC_POS); +- +- ExtPack *pExtPack = findExtPack(a_pszExtPack); +- return pExtPack != NULL +- && pExtPack->m->fUsable; +-} +- +-/** +- * Dumps all extension packs to the release log. +- */ +-void ExtPackManager::dumpAllToReleaseLog(void) +-{ +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (FAILED(hrc)) +- return; +- AutoReadLock autoLock(this COMMA_LOCKVAL_SRC_POS); +- +- LogRel(("Installed Extension Packs:\n")); +- for (ExtPackList::iterator it = m->llInstalledExtPacks.begin(); +- it != m->llInstalledExtPacks.end(); +- it++) +- { +- ExtPack::Data *pExtPackData = (*it)->m; +- if (pExtPackData) +- { +- if (pExtPackData->fUsable) +- LogRel((" %s (Version: %s r%u%s%s; VRDE Module: %s)\n", +- pExtPackData->Desc.strName.c_str(), +- pExtPackData->Desc.strVersion.c_str(), +- pExtPackData->Desc.uRevision, +- pExtPackData->Desc.strEdition.isEmpty() ? "" : " ", +- pExtPackData->Desc.strEdition.c_str(), +- pExtPackData->Desc.strVrdeModule.c_str() )); +- else +- LogRel((" %s (Version: %s r%u%s%s; VRDE Module: %s unusable because of '%s')\n", +- pExtPackData->Desc.strName.c_str(), +- pExtPackData->Desc.strVersion.c_str(), +- pExtPackData->Desc.uRevision, +- pExtPackData->Desc.strEdition.isEmpty() ? "" : " ", +- pExtPackData->Desc.strEdition.c_str(), +- pExtPackData->Desc.strVrdeModule.c_str(), +- pExtPackData->strWhyUnusable.c_str() )); +- } +- else +- LogRel((" pExtPackData is NULL\n")); +- } +- +- if (!m->llInstalledExtPacks.size()) +- LogRel((" None installed!\n")); +-} +- +-/* vi: set tabstop=4 shiftwidth=4 expandtab: */ +--- VirtualBox-4.1.18.orig/src/VBox/Main/src-all/ExtPackUtil.cpp 2012-06-20 10:17:34.000000000 -0300 ++++ /dev/null 2012-07-24 14:48:18.638572110 -0300 +@@ -1,1385 +0,0 @@ +-/* $Id: ExtPackUtil.cpp $ */ +-/** @file +- * VirtualBox Main - Extension Pack Utilities and definitions, VBoxC, VBoxSVC, ++. +- */ +- +-/* +- * Copyright (C) 2010-2012 Oracle Corporation +- * +- * This file is part of VirtualBox Open Source Edition (OSE), as +- * available from http://www.virtualbox.org. This file is free software; +- * you can redistribute it and/or modify it under the terms of the GNU +- * General Public License (GPL) as published by the Free Software +- * Foundation, in version 2 as it comes in the "COPYING" file of the +- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the +- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. +- */ +- +- +-/******************************************************************************* +-* Header Files * +-*******************************************************************************/ +-#include "../include/ExtPackUtil.h" +- +-#include <iprt/ctype.h> +-#include <iprt/dir.h> +-#include <iprt/file.h> +-#include <iprt/manifest.h> +-#include <iprt/param.h> +-#include <iprt/path.h> +-#include <iprt/sha.h> +-#include <iprt/string.h> +-#include <iprt/vfs.h> +-#include <iprt/tar.h> +-#include <iprt/zip.h> +-#include <iprt/cpp/xml.h> +- +-#include <VBox/log.h> +- +- +-/** +- * Worker for VBoxExtPackLoadDesc that loads the plug-in descriptors. +- * +- * @returns Same as VBoxExtPackLoadDesc. +- * @param pVBoxExtPackElm +- * @param pcPlugIns Where to return the number of plug-ins in the +- * array. +- * @param paPlugIns Where to return the plug-in descriptor array. +- * (RTMemFree it even on failure) +- */ +-static RTCString * +-vboxExtPackLoadPlugInDescs(const xml::ElementNode *pVBoxExtPackElm, +- uint32_t *pcPlugIns, PVBOXEXTPACKPLUGINDESC *paPlugIns) +-{ +- *pcPlugIns = 0; +- *paPlugIns = NULL; +- +- /** @todo plug-ins */ +- NOREF(pVBoxExtPackElm); +- +- return NULL; +-} +- +-/** +- * Clears the extension pack descriptor. +- * +- * @param a_pExtPackDesc The descriptor to clear. +- */ +-static void vboxExtPackClearDesc(PVBOXEXTPACKDESC a_pExtPackDesc) +-{ +- a_pExtPackDesc->strName.setNull(); +- a_pExtPackDesc->strDescription.setNull(); +- a_pExtPackDesc->strVersion.setNull(); +- a_pExtPackDesc->strEdition.setNull(); +- a_pExtPackDesc->uRevision = 0; +- a_pExtPackDesc->strMainModule.setNull(); +- a_pExtPackDesc->strVrdeModule.setNull(); +- a_pExtPackDesc->cPlugIns = 0; +- a_pExtPackDesc->paPlugIns = NULL; +- a_pExtPackDesc->fShowLicense = false; +-} +- +-/** +- * Initializes an extension pack descriptor so that it's safe to call free on +- * it whatever happens later on. +- * +- * @param a_pExtPackDesc The descirptor to initialize. +- */ +-void VBoxExtPackInitDesc(PVBOXEXTPACKDESC a_pExtPackDesc) +-{ +- vboxExtPackClearDesc(a_pExtPackDesc); +-} +- +- +-/** +- * Load the extension pack descriptor from an XML document. +- * +- * @returns NULL on success, pointer to an error message on failure (caller +- * deletes it). +- * @param a_pDoc Pointer to the the XML document. +- * @param a_pExtPackDesc Where to store the extension pack descriptor. +- */ +-static RTCString *vboxExtPackLoadDescFromDoc(xml::Document *a_pDoc, PVBOXEXTPACKDESC a_pExtPackDesc) +-{ +- /* +- * Get the main element and check its version. +- */ +- const xml::ElementNode *pVBoxExtPackElm = a_pDoc->getRootElement(); +- if ( !pVBoxExtPackElm +- || strcmp(pVBoxExtPackElm->getName(), "VirtualBoxExtensionPack") != 0) +- return new RTCString("No VirtualBoxExtensionPack element"); +- +- RTCString strFormatVersion; +- if (!pVBoxExtPackElm->getAttributeValue("version", strFormatVersion)) +- return new RTCString("Missing format version"); +- if (!strFormatVersion.equals("1.0")) +- return &(new RTCString("Unsupported format version: "))->append(strFormatVersion); +- +- /* +- * Read and validate mandatory bits. +- */ +- const xml::ElementNode *pNameElm = pVBoxExtPackElm->findChildElement("Name"); +- if (!pNameElm) +- return new RTCString("The 'Name' element is missing"); +- const char *pszName = pNameElm->getValue(); +- if (!VBoxExtPackIsValidName(pszName)) +- return &(new RTCString("Invalid name: "))->append(pszName); +- +- const xml::ElementNode *pDescElm = pVBoxExtPackElm->findChildElement("Description"); +- if (!pDescElm) +- return new RTCString("The 'Description' element is missing"); +- const char *pszDesc = pDescElm->getValue(); +- if (!pszDesc || *pszDesc == '\0') +- return new RTCString("The 'Description' element is empty"); +- if (strpbrk(pszDesc, "\n\r\t\v\b") != NULL) +- return new RTCString("The 'Description' must not contain control characters"); +- +- const xml::ElementNode *pVersionElm = pVBoxExtPackElm->findChildElement("Version"); +- if (!pVersionElm) +- return new RTCString("The 'Version' element is missing"); +- const char *pszVersion = pVersionElm->getValue(); +- if (!pszVersion || *pszVersion == '\0') +- return new RTCString("The 'Version' element is empty"); +- if (!VBoxExtPackIsValidVersionString(pszVersion)) +- return &(new RTCString("Invalid version string: "))->append(pszVersion); +- +- uint32_t uRevision; +- if (!pVersionElm->getAttributeValue("revision", uRevision)) +- uRevision = 0; +- +- const char *pszEdition; +- if (!pVersionElm->getAttributeValue("edition", pszEdition)) +- pszEdition = ""; +- if (!VBoxExtPackIsValidEditionString(pszEdition)) +- return &(new RTCString("Invalid edition string: "))->append(pszEdition); +- +- const xml::ElementNode *pMainModuleElm = pVBoxExtPackElm->findChildElement("MainModule"); +- if (!pMainModuleElm) +- return new RTCString("The 'MainModule' element is missing"); +- const char *pszMainModule = pMainModuleElm->getValue(); +- if (!pszMainModule || *pszMainModule == '\0') +- return new RTCString("The 'MainModule' element is empty"); +- if (!VBoxExtPackIsValidModuleString(pszMainModule)) +- return &(new RTCString("Invalid main module string: "))->append(pszMainModule); +- +- /* +- * The VRDE module, optional. +- * Accept both none and empty as tokens of no VRDE module. +- */ +- const char *pszVrdeModule = NULL; +- const xml::ElementNode *pVrdeModuleElm = pVBoxExtPackElm->findChildElement("VRDEModule"); +- if (pVrdeModuleElm) +- { +- pszVrdeModule = pVrdeModuleElm->getValue(); +- if (!pszVrdeModule || *pszVrdeModule == '\0') +- pszVrdeModule = NULL; +- else if (!VBoxExtPackIsValidModuleString(pszVrdeModule)) +- return &(new RTCString("Invalid VRDE module string: "))->append(pszVrdeModule); +- } +- +- /* +- * Whether to show the license, optional. (presense is enough here) +- */ +- const xml::ElementNode *pShowLicenseElm = pVBoxExtPackElm->findChildElement("ShowLicense"); +- bool fShowLicense = pShowLicenseElm != NULL; +- +- /* +- * Parse plug-in descriptions (last because of the manual memory management). +- */ +- uint32_t cPlugIns = 0; +- PVBOXEXTPACKPLUGINDESC paPlugIns = NULL; +- RTCString *pstrRet = vboxExtPackLoadPlugInDescs(pVBoxExtPackElm, &cPlugIns, &paPlugIns); +- if (pstrRet) +- { +- RTMemFree(paPlugIns); +- return pstrRet; +- } +- +- /* +- * Everything seems fine, fill in the return values and return successfully. +- */ +- a_pExtPackDesc->strName = pszName; +- a_pExtPackDesc->strDescription = pszDesc; +- a_pExtPackDesc->strVersion = pszVersion; +- a_pExtPackDesc->strEdition = pszEdition; +- a_pExtPackDesc->uRevision = uRevision; +- a_pExtPackDesc->strMainModule = pszMainModule; +- a_pExtPackDesc->strVrdeModule = pszVrdeModule; +- a_pExtPackDesc->cPlugIns = cPlugIns; +- a_pExtPackDesc->paPlugIns = paPlugIns; +- a_pExtPackDesc->fShowLicense = fShowLicense; +- +- return NULL; +-} +- +-/** +- * Reads the extension pack descriptor. +- * +- * @returns NULL on success, pointer to an error message on failure (caller +- * deletes it). +- * @param a_pszDir The directory containing the description file. +- * @param a_pExtPackDesc Where to store the extension pack descriptor. +- * @param a_pObjInfo Where to store the object info for the file (unix +- * attribs). Optional. +- */ +-RTCString *VBoxExtPackLoadDesc(const char *a_pszDir, PVBOXEXTPACKDESC a_pExtPackDesc, PRTFSOBJINFO a_pObjInfo) +-{ +- vboxExtPackClearDesc(a_pExtPackDesc); +- +- /* +- * Validate, open and parse the XML file. +- */ +- char szFilePath[RTPATH_MAX]; +- int vrc = RTPathJoin(szFilePath, sizeof(szFilePath), a_pszDir, VBOX_EXTPACK_DESCRIPTION_NAME); +- if (RT_FAILURE(vrc)) +- return new RTCString("RTPathJoin failed with %Rrc", vrc); +- +- RTFSOBJINFO ObjInfo; +- vrc = RTPathQueryInfoEx(szFilePath, &ObjInfo, RTFSOBJATTRADD_UNIX, RTPATH_F_ON_LINK); +- if (RT_FAILURE(vrc)) +- return &(new RTCString())->printf("RTPathQueryInfoEx failed with %Rrc", vrc); +- if (a_pObjInfo) +- *a_pObjInfo = ObjInfo; +- if (!RTFS_IS_FILE(ObjInfo.Attr.fMode)) +- { +- if (RTFS_IS_SYMLINK(ObjInfo.Attr.fMode)) +- return new RTCString("The XML file is symlinked, that is not allowed"); +- return &(new RTCString)->printf("The XML file is not a file (fMode=%#x)", ObjInfo.Attr.fMode); +- } +- +- xml::Document Doc; +- { +- xml::XmlFileParser Parser; +- try +- { +- Parser.read(szFilePath, Doc); +- } +- catch (xml::XmlError Err) +- { +- return new RTCString(Err.what()); +- } +- } +- +- /* +- * Hand the xml doc over to the common code. +- */ +- return vboxExtPackLoadDescFromDoc(&Doc, a_pExtPackDesc); +-} +- +-/** +- * Reads the extension pack descriptor. +- * +- * @returns NULL on success, pointer to an error message on failure (caller +- * deletes it). +- * @param a_pszDir The directory containing the description file. +- * @param a_pExtPackDesc Where to store the extension pack descriptor. +- * @param a_pObjInfo Where to store the object info for the file (unix +- * attribs). Optional. +- */ +-RTCString *VBoxExtPackLoadDescFromVfsFile(RTVFSFILE hVfsFile, PVBOXEXTPACKDESC a_pExtPackDesc, PRTFSOBJINFO a_pObjInfo) +-{ +- vboxExtPackClearDesc(a_pExtPackDesc); +- +- /* +- * Query the object info. +- */ +- RTFSOBJINFO ObjInfo; +- int rc = RTVfsFileQueryInfo(hVfsFile, &ObjInfo, RTFSOBJATTRADD_UNIX); +- if (RT_FAILURE(rc)) +- return &(new RTCString)->printf("RTVfsFileQueryInfo failed: %Rrc", rc); +- if (a_pObjInfo) +- *a_pObjInfo = ObjInfo; +- +- /* +- * The simple approach, read the whole thing into memory and pass this to +- * the XML parser. +- */ +- +- /* Check the file size. */ +- if (ObjInfo.cbObject > _1M || ObjInfo.cbObject < 0) +- return &(new RTCString)->printf("The XML file is too large (%'RU64 bytes)", ObjInfo.cbObject); +- size_t const cbFile = (size_t)ObjInfo.cbObject; +- +- /* Rewind to the start of the file. */ +- rc = RTVfsFileSeek(hVfsFile, 0, RTFILE_SEEK_BEGIN, NULL); +- if (RT_FAILURE(rc)) +- return &(new RTCString)->printf("RTVfsFileSeek(,0,BEGIN) failed: %Rrc", rc); +- +- /* Allocate memory and read the file content into it. */ +- void *pvFile = RTMemTmpAlloc(cbFile); +- if (!pvFile) +- return &(new RTCString)->printf("RTMemTmpAlloc(%zu) failed", cbFile); +- +- RTCString *pstrErr = NULL; +- rc = RTVfsFileRead(hVfsFile, pvFile, cbFile, NULL); +- if (RT_FAILURE(rc)) +- pstrErr = &(new RTCString)->printf("RTVfsFileRead failed: %Rrc", rc); +- +- /* +- * Parse the file. +- */ +- xml::Document Doc; +- if (RT_SUCCESS(rc)) +- { +- xml::XmlMemParser Parser; +- RTCString strFileName = VBOX_EXTPACK_DESCRIPTION_NAME; +- try +- { +- Parser.read(pvFile, cbFile, strFileName, Doc); +- } +- catch (xml::XmlError Err) +- { +- pstrErr = new RTCString(Err.what()); +- rc = VERR_PARSE_ERROR; +- } +- } +- RTMemTmpFree(pvFile); +- +- /* +- * Hand the xml doc over to the common code. +- */ +- if (RT_SUCCESS(rc)) +- pstrErr = vboxExtPackLoadDescFromDoc(&Doc, a_pExtPackDesc); +- +- return pstrErr; +-} +- +-/** +- * Frees all resources associated with a extension pack descriptor. +- * +- * @param a_pExtPackDesc The extension pack descriptor which members +- * should be freed. +- */ +-void VBoxExtPackFreeDesc(PVBOXEXTPACKDESC a_pExtPackDesc) +-{ +- if (!a_pExtPackDesc) +- return; +- +- a_pExtPackDesc->strName.setNull(); +- a_pExtPackDesc->strDescription.setNull(); +- a_pExtPackDesc->strVersion.setNull(); +- a_pExtPackDesc->strEdition.setNull(); +- a_pExtPackDesc->uRevision = 0; +- a_pExtPackDesc->strMainModule.setNull(); +- a_pExtPackDesc->strVrdeModule.setNull(); +- a_pExtPackDesc->cPlugIns = 0; +- RTMemFree(a_pExtPackDesc->paPlugIns); +- a_pExtPackDesc->paPlugIns = NULL; +- a_pExtPackDesc->fShowLicense = false; +-} +- +-/** +- * Extract the extension pack name from the tarball path. +- * +- * @returns String containing the name on success, the caller must delete it. +- * NULL if no valid name was found or if we ran out of memory. +- * @param pszTarball The path to the tarball. +- */ +-RTCString *VBoxExtPackExtractNameFromTarballPath(const char *pszTarball) +-{ +- /* +- * Skip ahead to the filename part and count the number of characters +- * that matches the criteria for a mangled extension pack name. +- */ +- const char *pszSrc = RTPathFilename(pszTarball); +- if (!pszSrc) +- return NULL; +- +- size_t off = 0; +- while (RT_C_IS_ALNUM(pszSrc[off]) || pszSrc[off] == '_') +- off++; +- +- /* +- * Check min and max name limits. +- */ +- if ( off > VBOX_EXTPACK_NAME_MAX_LEN +- || off < VBOX_EXTPACK_NAME_MIN_LEN) +- return NULL; +- +- /* +- * Return the unmangled name. +- */ +- return VBoxExtPackUnmangleName(pszSrc, off); +-} +- +-/** +- * Validates the extension pack name. +- * +- * @returns true if valid, false if not. +- * @param pszName The name to validate. +- * @sa VBoxExtPackExtractNameFromTarballPath +- */ +-bool VBoxExtPackIsValidName(const char *pszName) +-{ +- if (!pszName) +- return false; +- +- /* +- * Check the characters making up the name, only english alphabet +- * characters, decimal digits and spaces are allowed. +- */ +- size_t off = 0; +- while (pszName[off]) +- { +- if (!RT_C_IS_ALNUM(pszName[off]) && pszName[off] != ' ') +- return false; +- off++; +- } +- +- /* +- * Check min and max name limits. +- */ +- if ( off > VBOX_EXTPACK_NAME_MAX_LEN +- || off < VBOX_EXTPACK_NAME_MIN_LEN) +- return false; +- +- return true; +-} +- +-/** +- * Checks if an alledged manged extension pack name. +- * +- * @returns true if valid, false if not. +- * @param pszMangledName The mangled name to validate. +- * @param cchMax The max number of chars to test. +- * @sa VBoxExtPackMangleName +- */ +-bool VBoxExtPackIsValidMangledName(const char *pszMangledName, size_t cchMax /*= RTSTR_MAX*/) +-{ +- if (!pszMangledName) +- return false; +- +- /* +- * Check the characters making up the name, only english alphabet +- * characters, decimal digits and underscores (=space) are allowed. +- */ +- size_t off = 0; +- while (off < cchMax && pszMangledName[off]) +- { +- if (!RT_C_IS_ALNUM(pszMangledName[off]) && pszMangledName[off] != '_') +- return false; +- off++; +- } +- +- /* +- * Check min and max name limits. +- */ +- if ( off > VBOX_EXTPACK_NAME_MAX_LEN +- || off < VBOX_EXTPACK_NAME_MIN_LEN) +- return false; +- +- return true; +-} +- +-/** +- * Mangle an extension pack name so it can be used by a directory or file name. +- * +- * @returns String containing the mangled name on success, the caller must +- * delete it. NULL on failure. +- * @param pszName The unmangled name. +- * @sa VBoxExtPackUnmangleName, VBoxExtPackIsValidMangledName +- */ +-RTCString *VBoxExtPackMangleName(const char *pszName) +-{ +- AssertReturn(VBoxExtPackIsValidName(pszName), NULL); +- +- char szTmp[VBOX_EXTPACK_NAME_MAX_LEN + 1]; +- size_t off = 0; +- char ch; +- while ((ch = pszName[off]) != '\0') +- { +- if (ch == ' ') +- ch = '_'; +- szTmp[off++] = ch; +- } +- szTmp[off] = '\0'; +- Assert(VBoxExtPackIsValidMangledName(szTmp)); +- +- return new RTCString(szTmp, off); +-} +- +-/** +- * Unmangle an extension pack name (reverses VBoxExtPackMangleName). +- * +- * @returns String containing the mangled name on success, the caller must +- * delete it. NULL on failure. +- * @param pszMangledName The mangled name. +- * @param cchMax The max name length. RTSTR_MAX is fine. +- * @sa VBoxExtPackMangleName, VBoxExtPackIsValidMangledName +- */ +-RTCString *VBoxExtPackUnmangleName(const char *pszMangledName, size_t cchMax) +-{ +- AssertReturn(VBoxExtPackIsValidMangledName(pszMangledName, cchMax), NULL); +- +- char szTmp[VBOX_EXTPACK_NAME_MAX_LEN + 1]; +- size_t off = 0; +- char ch; +- while ( off < cchMax +- && (ch = pszMangledName[off]) != '\0') +- { +- if (ch == '_') +- ch = ' '; +- else +- AssertReturn(RT_C_IS_ALNUM(ch) || ch == ' ', NULL); +- szTmp[off++] = ch; +- } +- szTmp[off] = '\0'; +- AssertReturn(VBoxExtPackIsValidName(szTmp), NULL); +- +- return new RTCString(szTmp, off); +-} +- +-/** +- * Constructs the extension pack directory path. +- * +- * A combination of RTPathJoin and VBoxExtPackMangleName. +- * +- * @returns IPRT status code like RTPathJoin. +- * @param pszExtPackDir Where to return the directory path. +- * @param cbExtPackDir The size of the return buffer. +- * @param pszParentDir The parent directory (".../Extensions"). +- * @param pszName The extension pack name, unmangled. +- */ +-int VBoxExtPackCalcDir(char *pszExtPackDir, size_t cbExtPackDir, const char *pszParentDir, const char *pszName) +-{ +- AssertReturn(VBoxExtPackIsValidName(pszName), VERR_INTERNAL_ERROR_5); +- +- RTCString *pstrMangledName = VBoxExtPackMangleName(pszName); +- if (!pstrMangledName) +- return VERR_INTERNAL_ERROR_4; +- +- int vrc = RTPathJoin(pszExtPackDir, cbExtPackDir, pszParentDir, pstrMangledName->c_str()); +- delete pstrMangledName; +- +- return vrc; +-} +- +- +-/** +- * Validates the extension pack version string. +- * +- * @returns true if valid, false if not. +- * @param pszVersion The version string to validate. +- */ +-bool VBoxExtPackIsValidVersionString(const char *pszVersion) +-{ +- if (!pszVersion || *pszVersion == '\0') +- return false; +- +- /* 1.x.y.z... */ +- for (;;) +- { +- if (!RT_C_IS_DIGIT(*pszVersion)) +- return false; +- do +- pszVersion++; +- while (RT_C_IS_DIGIT(*pszVersion)); +- if (*pszVersion != '.') +- break; +- pszVersion++; +- } +- +- /* upper case string + numbers indicating the build type */ +- if (*pszVersion == '-' || *pszVersion == '_') +- { +- /** @todo Should probably restrict this to known build types (alpha, +- * beta, rc, ++). */ +- do +- pszVersion++; +- while ( RT_C_IS_DIGIT(*pszVersion) +- || RT_C_IS_UPPER(*pszVersion) +- || *pszVersion == '-' +- || *pszVersion == '_'); +- } +- +- return *pszVersion == '\0'; +-} +- +-/** +- * Validates the extension pack edition string. +- * +- * @returns true if valid, false if not. +- * @param pszEdition The edition string to validate. +- */ +-bool VBoxExtPackIsValidEditionString(const char *pszEdition) +-{ +- if (*pszEdition) +- { +- if (!RT_C_IS_UPPER(*pszEdition)) +- return false; +- +- do +- pszEdition++; +- while ( RT_C_IS_UPPER(*pszEdition) +- || RT_C_IS_DIGIT(*pszEdition) +- || *pszEdition == '-' +- || *pszEdition == '_'); +- } +- return *pszEdition == '\0'; +-} +- +-/** +- * Validates an extension pack module string. +- * +- * @returns true if valid, false if not. +- * @param pszModule The module string to validate. +- */ +-bool VBoxExtPackIsValidModuleString(const char *pszModule) +-{ +- if (!pszModule || *pszModule == '\0') +- return false; +- +- /* Restricted charset, no extensions (dots). */ +- while ( RT_C_IS_ALNUM(*pszModule) +- || *pszModule == '-' +- || *pszModule == '_') +- pszModule++; +- +- return *pszModule == '\0'; +-} +- +-/** +- * RTStrPrintfv wrapper. +- * +- * @returns @a rc +- * @param rc The status code to return. +- * @param pszError The error buffer. +- * @param cbError The size of the buffer. +- * @param pszFormat The error message format string. +- * @param ... Format arguments. +- */ +-static int vboxExtPackReturnError(int rc, char *pszError, size_t cbError, const char *pszFormat, ...) +-{ +- va_list va; +- va_start(va, pszFormat); +- RTStrPrintfV(pszError, cbError, pszFormat, va); +- va_end(va); +- return rc; +-} +- +-/** +- * RTStrPrintfv wrapper. +- * +- * @param pszError The error buffer. +- * @param cbError The size of the buffer. +- * @param pszFormat The error message format string. +- * @param ... Format arguments. +- */ +-static void vboxExtPackSetError(char *pszError, size_t cbError, const char *pszFormat, ...) +-{ +- va_list va; +- va_start(va, pszFormat); +- RTStrPrintfV(pszError, cbError, pszFormat, va); +- va_end(va); +-} +- +-/** +- * Verifies the manifest and its signature. +- * +- * @returns VBox status code, failures with message. +- * @param hManifestFile The xml from the extension pack. +- * @param pszExtPackName The expected extension pack name. This can be +- * NULL, in which we don't have any expectations. +- * @param pszError Where to store an error message on failure. +- * @param cbError The size of the buffer @a pszError points to. +- */ +-static int vboxExtPackVerifyXml(RTVFSFILE hXmlFile, const char *pszExtPackName, char *pszError, size_t cbError) +-{ +- /* +- * Load the XML. +- */ +- VBOXEXTPACKDESC ExtPackDesc; +- RTCString *pstrErr = VBoxExtPackLoadDescFromVfsFile(hXmlFile, &ExtPackDesc, NULL); +- if (pstrErr) +- { +- RTStrCopy(pszError, cbError, pstrErr->c_str()); +- delete pstrErr; +- return VERR_PARSE_ERROR; +- } +- +- /* +- * Check the name. +- */ +- /** @todo drop this restriction after the old install interface is +- * dropped. */ +- int rc = VINF_SUCCESS; +- if ( pszExtPackName +- && !ExtPackDesc.strName.equalsIgnoreCase(pszExtPackName)) +- rc = vboxExtPackReturnError(VERR_NOT_EQUAL, pszError, cbError, +- "The name of the downloaded file and the name stored inside the extension pack does not match" +- " (xml='%s' file='%s')", ExtPackDesc.strName.c_str(), pszExtPackName); +- return rc; +-} +- +-/** +- * Verifies the manifest and its signature. +- * +- * @returns VBox status code, failures with message. +- * @param hOurManifest The manifest we compiled. +- * @param hManifestFile The manifest file in the extension pack. +- * @param hSignatureFile The manifest signature file. +- * @param pszError Where to store an error message on failure. +- * @param cbError The size of the buffer @a pszError points to. +- */ +-static int vboxExtPackVerifyManifestAndSignature(RTMANIFEST hOurManifest, RTVFSFILE hManifestFile, RTVFSFILE hSignatureFile, +- char *pszError, size_t cbError) +-{ +- /* +- * Read the manifest from the extension pack. +- */ +- int rc = RTVfsFileSeek(hManifestFile, 0, RTFILE_SEEK_BEGIN, NULL); +- if (RT_FAILURE(rc)) +- return vboxExtPackReturnError(rc, pszError, cbError, "RTVfsFileSeek failed: %Rrc", rc); +- +- RTMANIFEST hTheirManifest; +- rc = RTManifestCreate(0 /*fFlags*/, &hTheirManifest); +- if (RT_FAILURE(rc)) +- return vboxExtPackReturnError(rc, pszError, cbError, "RTManifestCreate failed: %Rrc", rc); +- +- RTVFSIOSTREAM hVfsIos = RTVfsFileToIoStream(hManifestFile); +- rc = RTManifestReadStandard(hTheirManifest, hVfsIos); +- RTVfsIoStrmRelease(hVfsIos); +- if (RT_SUCCESS(rc)) +- { +- /* +- * Compare the manifests. +- */ +- static const char *s_apszIgnoreEntries[] = +- { +- VBOX_EXTPACK_MANIFEST_NAME, +- VBOX_EXTPACK_SIGNATURE_NAME, +- "./" VBOX_EXTPACK_MANIFEST_NAME, +- "./" VBOX_EXTPACK_SIGNATURE_NAME, +- NULL +- }; +- char szError[RTPATH_MAX]; +- rc = RTManifestEqualsEx(hOurManifest, hTheirManifest, &s_apszIgnoreEntries[0], NULL, +- RTMANIFEST_EQUALS_IGN_MISSING_ATTRS /*fFlags*/, +- szError, sizeof(szError)); +- if (RT_SUCCESS(rc)) +- { +- /* +- * Validate the manifest file signature. +- */ +- /** @todo implement signature stuff */ +- NOREF(hSignatureFile); +- +- } +- else if (rc == VERR_NOT_EQUAL && szError[0]) +- vboxExtPackSetError(pszError, cbError, "Manifest mismatch: %s", szError); +- else +- vboxExtPackSetError(pszError, cbError, "RTManifestEqualsEx failed: %Rrc", rc); +-#if 0 +- RTVFSIOSTREAM hVfsIosStdOut = NIL_RTVFSIOSTREAM; +- RTVfsIoStrmFromStdHandle(RTHANDLESTD_OUTPUT, RTFILE_O_WRITE, true, &hVfsIosStdOut); +- RTVfsIoStrmWrite(hVfsIosStdOut, "Our:\n", sizeof("Our:\n") - 1, true, NULL); +- RTManifestWriteStandard(hOurManifest, hVfsIosStdOut); +- RTVfsIoStrmWrite(hVfsIosStdOut, "Their:\n", sizeof("Their:\n") - 1, true, NULL); +- RTManifestWriteStandard(hTheirManifest, hVfsIosStdOut); +-#endif +- } +- else +- vboxExtPackSetError(pszError, cbError, "Error parsing '%s': %Rrc", VBOX_EXTPACK_MANIFEST_NAME, rc); +- +- RTManifestRelease(hTheirManifest); +- return rc; +-} +- +- +-/** +- * Verifies the file digest (if specified) and returns the SHA-256 of the file. +- * +- * @returns +- * @param hFileManifest Manifest containing a SHA-256 digest of the file +- * that was calculated as the file was processed. +- * @param pszFileDigest SHA-256 digest of the file. +- * @param pStrDigest Where to return the SHA-256 digest. Optional. +- * @param pszError Where to write an error message on failure. +- * @param cbError The size of the @a pszError buffer. +- */ +-static int vboxExtPackVerifyFileDigest(RTMANIFEST hFileManifest, const char *pszFileDigest, +- RTCString *pStrDigest, char *pszError, size_t cbError) +-{ +- /* +- * Extract the SHA-256 entry for the extpack file. +- */ +- char szCalculatedDigest[RTSHA256_DIGEST_LEN + 1]; +- int rc = RTManifestEntryQueryAttr(hFileManifest, "extpack", NULL /*no name*/, RTMANIFEST_ATTR_SHA256, +- szCalculatedDigest, sizeof(szCalculatedDigest), NULL); +- if (RT_SUCCESS(rc)) +- { +- /* +- * Convert the two strings to binary form before comparing. +- * We convert the calculated hash even if we don't have anything to +- * compare with, just to validate it. +- */ +- uint8_t abCalculatedHash[RTSHA256_HASH_SIZE]; +- rc = RTSha256FromString(szCalculatedDigest, abCalculatedHash); +- if (RT_SUCCESS(rc)) +- { +- if ( pszFileDigest +- && *pszFileDigest != '\0') +- { +- uint8_t abFileHash[RTSHA256_HASH_SIZE]; +- rc = RTSha256FromString(pszFileDigest, abFileHash); +- if (RT_SUCCESS(rc)) +- { +- if (memcmp(abFileHash, abCalculatedHash, sizeof(abFileHash))) +- { +- vboxExtPackSetError(pszError, cbError, "The extension pack file has changed (SHA-256 mismatch)"); +- rc = VERR_NOT_EQUAL; +- } +- } +- else +- vboxExtPackSetError(pszError, cbError, "Bad SHA-256 '%s': %Rrc", szCalculatedDigest, rc); +- } +- +- /* +- * Set the output hash on success. +- */ +- if (pStrDigest && RT_SUCCESS(rc)) +- { +- try +- { +- *pStrDigest = szCalculatedDigest; +- } +- catch (std::bad_alloc) +- { +- rc = VERR_NO_MEMORY; +- } +- } +- } +- else +- vboxExtPackSetError(pszError, cbError, "Bad SHA-256 '%s': %Rrc", szCalculatedDigest, rc); +- } +- else +- vboxExtPackSetError(pszError, cbError, "RTManifestEntryGetAttr: %Rrc", rc); +- return rc; +-} +- +- +- +-/** +- * Validates a standard file. +- * +- * Generally all files are +- * +- * @returns VBox status code, failure message in @a pszError. +- * @param pszAdjName The adjusted member name. +- * @param enmType The VFS object type. +- * @param phVfsObj The pointer to the VFS object handle variable. +- * This is both input and output. +- * @param phVfsFile Where to store the handle to the memorized +- * file. This is NULL for license files. +- * @param pszError Where to write an error message on failure. +- * @param cbError The size of the @a pszError buffer. +- */ +-static int VBoxExtPackValidateStandardFile(const char *pszAdjName, RTVFSOBJTYPE enmType, +- PRTVFSOBJ phVfsObj, PRTVFSFILE phVfsFile, char *pszError, size_t cbError) +-{ +- int rc; +- +- /* +- * Make sure it's a file and that it isn't too large. +- */ +- if (phVfsFile && *phVfsFile != NIL_RTVFSFILE) +- rc = vboxExtPackReturnError(VERR_DUPLICATE, pszError, cbError, +- "There can only be one '%s'", pszAdjName); +- else if (enmType != RTVFSOBJTYPE_IO_STREAM && enmType != RTVFSOBJTYPE_FILE) +- rc = vboxExtPackReturnError(VERR_NOT_A_FILE, pszError, cbError, +- "Standard member '%s' is not a file", pszAdjName); +- else +- { +- RTFSOBJINFO ObjInfo; +- rc = RTVfsObjQueryInfo(*phVfsObj, &ObjInfo, RTFSOBJATTRADD_NOTHING); +- if (RT_SUCCESS(rc)) +- { +- if (!RTFS_IS_FILE(ObjInfo.Attr.fMode)) +- rc = vboxExtPackReturnError(VERR_NOT_A_FILE, pszError, cbError, +- "Standard member '%s' is not a file", pszAdjName); +- else if (ObjInfo.cbObject >= _1M) +- rc = vboxExtPackReturnError(VERR_OUT_OF_RANGE, pszError, cbError, +- "Standard member '%s' is too large: %'RU64 bytes (max 1 MB)", +- pszAdjName, (uint64_t)ObjInfo.cbObject); +- else +- { +- /* +- * Make an in memory copy of the stream and check that the file +- * is UTF-8 clean. +- */ +- RTVFSIOSTREAM hVfsIos = RTVfsObjToIoStream(*phVfsObj); +- RTVFSFILE hVfsFile; +- rc = RTVfsMemorizeIoStreamAsFile(hVfsIos, RTFILE_O_READ, &hVfsFile); +- if (RT_SUCCESS(rc)) +- { +- rc = RTVfsIoStrmValidateUtf8Encoding(hVfsIos, +- RTVFS_VALIDATE_UTF8_BY_RTC_3629 | RTVFS_VALIDATE_UTF8_NO_NULL, +- NULL); +- if (RT_SUCCESS(rc)) +- { +- /* +- * Replace *phVfsObj with the memorized file. +- */ +- rc = RTVfsFileSeek(hVfsFile, 0, RTFILE_SEEK_BEGIN, NULL); +- if (RT_SUCCESS(rc)) +- { +- RTVfsObjRelease(*phVfsObj); +- *phVfsObj = RTVfsObjFromFile(hVfsFile); +- } +- else +- vboxExtPackSetError(pszError, cbError, "RTVfsFileSeek failed on '%s': %Rrc", pszAdjName, rc); +- } +- +- if (phVfsFile && RT_SUCCESS(rc)) +- *phVfsFile = hVfsFile; +- else +- RTVfsFileRelease(hVfsFile); +- } +- else +- vboxExtPackSetError(pszError, cbError, "RTVfsMemorizeIoStreamAsFile failed on '%s': %Rrc", pszAdjName, rc); +- RTVfsIoStrmRelease(hVfsIos); +- } +- } +- else +- vboxExtPackSetError(pszError, cbError, "RTVfsObjQueryInfo failed on '%s': %Rrc", pszAdjName, rc); +- } +- return rc; +-} +- +- +-/** +- * Validates a name in an extension pack. +- * +- * We restrict the charset to try make sure the extension pack can be unpacked +- * on all file systems. +- * +- * @returns VBox status code, failures with message. +- * @param pszName The name to validate. +- * @param pszError Where to store an error message on failure. +- * @param cbError The size of the buffer @a pszError points to. +- */ +-static int vboxExtPackValidateMemberName(const char *pszName, char *pszError, size_t cbError) +-{ +- if (RTPathStartsWithRoot(pszName)) +- return vboxExtPackReturnError(VERR_PATH_IS_NOT_RELATIVE, pszError, cbError, "'%s': starts with root spec", pszName); +- +- const char *pszErr = NULL; +- const char *psz = pszName; +- int ch; +- while ((ch = *psz) != '\0') +- { +- /* Character set restrictions. */ +- if (ch < 0 || ch >= 128) +- { +- pszErr = "Only 7-bit ASCII allowed"; +- break; +- } +- if (ch <= 31 || ch == 127) +- { +- pszErr = "No control characters are not allowed"; +- break; +- } +- if (ch == '\\') +- { +- pszErr = "Only backward slashes are not allowed"; +- break; +- } +- if (strchr("'\":;*?|[]<>(){}", ch)) +- { +- pszErr = "The characters ', \", :, ;, *, ?, |, [, ], <, >, (, ), { and } are not allowed"; +- break; +- } +- +- /* Take the simple way out and ban all ".." sequences. */ +- if ( ch == '.' +- && psz[1] == '.') +- { +- pszErr = "Double dot sequence are not allowed"; +- break; +- } +- +- /* Keep the tree shallow or the hardening checks will fail. */ +- if (psz - pszName > VBOX_EXTPACK_MAX_MEMBER_NAME_LENGTH) +- { +- pszErr = "Too long"; +- break; +- } +- +- /* advance */ +- psz++; +- } +- +- if (pszErr) +- return vboxExtPackReturnError(VERR_INVALID_NAME, pszError, cbError, +- "Bad member name '%s' (pos %zu): %s", pszName, (size_t)(psz - pszName), pszErr); +- return RTEXITCODE_SUCCESS; +-} +- +- +-/** +- * Validates a file in an extension pack. +- * +- * @returns VBox status code, failures with message. +- * @param pszName The name of the file. +- * @param hVfsObj The VFS object. +- * @param pszError Where to store an error message on failure. +- * @param cbError The size of the buffer @a pszError points to. +- */ +-static int vboxExtPackValidateMemberFile(const char *pszName, RTVFSOBJ hVfsObj, char *pszError, size_t cbError) +-{ +- int rc = vboxExtPackValidateMemberName(pszName, pszError, cbError); +- if (RT_SUCCESS(rc)) +- { +- RTFSOBJINFO ObjInfo; +- rc = RTVfsObjQueryInfo(hVfsObj, &ObjInfo, RTFSOBJATTRADD_NOTHING); +- if (RT_SUCCESS(rc)) +- { +- if (ObjInfo.cbObject >= 9*_1G64) +- rc = vboxExtPackReturnError(VERR_OUT_OF_RANGE, pszError, cbError, +- "'%s': too large (%'RU64 bytes)", +- pszName, (uint64_t)ObjInfo.cbObject); +- if (!RTFS_IS_FILE(ObjInfo.Attr.fMode)) +- rc = vboxExtPackReturnError(VERR_NOT_A_FILE, pszError, cbError, +- "The alleged file '%s' has a mode mask stating otherwise (%RTfmode)", +- pszName, ObjInfo.Attr.fMode); +- } +- else +- vboxExtPackSetError(pszError, cbError, "RTVfsObjQueryInfo failed on '%s': %Rrc", pszName, rc); +- } +- return rc; +-} +- +- +-/** +- * Validates a directory in an extension pack. +- * +- * @returns VBox status code, failures with message. +- * @param pszName The name of the directory. +- * @param hVfsObj The VFS object. +- * @param pszError Where to store an error message on failure. +- * @param cbError The size of the buffer @a pszError points to. +- */ +-static int vboxExtPackValidateMemberDir(const char *pszName, RTVFSOBJ hVfsObj, char *pszError, size_t cbError) +-{ +- int rc = vboxExtPackValidateMemberName(pszName, pszError, cbError); +- if (RT_SUCCESS(rc)) +- { +- RTFSOBJINFO ObjInfo; +- rc = RTVfsObjQueryInfo(hVfsObj, &ObjInfo, RTFSOBJATTRADD_NOTHING); +- if (RT_SUCCESS(rc)) +- { +- if (!RTFS_IS_DIRECTORY(ObjInfo.Attr.fMode)) +- rc = vboxExtPackReturnError(VERR_NOT_A_DIRECTORY, pszError, cbError, +- "The alleged directory '%s' has a mode mask saying differently (%RTfmode)", +- pszName, ObjInfo.Attr.fMode); +- } +- else +- vboxExtPackSetError(pszError, cbError, "RTVfsObjQueryInfo failed on '%s': %Rrc", pszName, rc); +- } +- return rc; +-} +- +-/** +- * Validates a member of an extension pack. +- * +- * @returns VBox status code, failures with message. +- * @param pszName The name of the directory. +- * @param enmType The object type. +- * @param hVfsObj The VFS object. +- * @param pszError Where to store an error message on failure. +- * @param cbError The size of the buffer @a pszError points to. +- */ +-int VBoxExtPackValidateMember(const char *pszName, RTVFSOBJTYPE enmType, RTVFSOBJ hVfsObj, char *pszError, size_t cbError) +-{ +- Assert(cbError > 0); +- *pszError = '\0'; +- +- int rc; +- if ( enmType == RTVFSOBJTYPE_FILE +- || enmType == RTVFSOBJTYPE_IO_STREAM) +- rc = vboxExtPackValidateMemberFile(pszName, hVfsObj, pszError, cbError); +- else if ( enmType == RTVFSOBJTYPE_DIR +- || enmType == RTVFSOBJTYPE_BASE) +- rc = vboxExtPackValidateMemberDir(pszName, hVfsObj, pszError, cbError); +- else +- rc = vboxExtPackReturnError(VERR_UNEXPECTED_FS_OBJ_TYPE, pszError, cbError, +- "'%s' is not a file or directory (enmType=%d)", pszName, enmType); +- return rc; +-} +- +- +-/** +- * Rewinds the tarball file handle and creates a gunzip | tar chain that +- * results in a filesystem stream. +- * +- * @returns VBox status code, failures with message. +- * @param hTarballFile The handle to the tarball file. +- * @param pszError Where to store an error message on failure. +- * @param cbError The size of the buffer @a pszError points to. +- * @param phTarFss Where to return the filesystem stream handle. +- * @param phFileManifest Where to return a manifest where the tarball is +- * gettting hashed. The entry will be called +- * "extpack" and be ready when the file system +- * stream is at an end. Optional. +- */ +-int VBoxExtPackOpenTarFss(RTFILE hTarballFile, char *pszError, size_t cbError, PRTVFSFSSTREAM phTarFss, PRTMANIFEST phFileManifest) +-{ +- Assert(cbError > 0); +- *pszError = '\0'; +- *phTarFss = NIL_RTVFSFSSTREAM; +- +- /* +- * Rewind the file and set up a VFS chain for it. +- */ +- int rc = RTFileSeek(hTarballFile, 0, RTFILE_SEEK_BEGIN, NULL); +- if (RT_FAILURE(rc)) +- return vboxExtPackReturnError(rc, pszError, cbError, "Failed seeking to the start of the tarball: %Rrc", rc); +- +- RTVFSIOSTREAM hTarballIos; +- rc = RTVfsIoStrmFromRTFile(hTarballFile, RTFILE_O_READ | RTFILE_O_DENY_WRITE | RTFILE_O_OPEN, true /*fLeaveOpen*/, +- &hTarballIos); +- if (RT_FAILURE(rc)) +- return vboxExtPackReturnError(rc, pszError, cbError, "RTVfsIoStrmFromRTFile failed: %Rrc", rc); +- +- RTMANIFEST hFileManifest = NIL_RTMANIFEST; +- rc = RTManifestCreate(0 /*fFlags*/, &hFileManifest); +- if (RT_SUCCESS(rc)) +- { +- RTVFSIOSTREAM hPtIos; +- rc = RTManifestEntryAddPassthruIoStream(hFileManifest, hTarballIos, "extpack", RTMANIFEST_ATTR_SHA256, true /*read*/, &hPtIos); +- if (RT_SUCCESS(rc)) +- { +- RTVFSIOSTREAM hGunzipIos; +- rc = RTZipGzipDecompressIoStream(hPtIos, 0 /*fFlags*/, &hGunzipIos); +- if (RT_SUCCESS(rc)) +- { +- RTVFSFSSTREAM hTarFss; +- rc = RTZipTarFsStreamFromIoStream(hGunzipIos, 0 /*fFlags*/, &hTarFss); +- if (RT_SUCCESS(rc)) +- { +- RTVfsIoStrmRelease(hPtIos); +- RTVfsIoStrmRelease(hGunzipIos); +- RTVfsIoStrmRelease(hTarballIos); +- *phTarFss = hTarFss; +- if (phFileManifest) +- *phFileManifest = hFileManifest; +- else +- RTManifestRelease(hFileManifest); +- return VINF_SUCCESS; +- } +- +- vboxExtPackSetError(pszError, cbError, "RTZipTarFsStreamFromIoStream failed: %Rrc", rc); +- RTVfsIoStrmRelease(hGunzipIos); +- } +- else +- vboxExtPackSetError(pszError, cbError, "RTZipGzipDecompressIoStream failed: %Rrc", rc); +- RTVfsIoStrmRelease(hPtIos); +- } +- else +- vboxExtPackSetError(pszError, cbError, "RTManifestEntryAddPassthruIoStream failed: %Rrc", rc); +- RTManifestRelease(hFileManifest); +- } +- else +- vboxExtPackSetError(pszError, cbError, "RTManifestCreate failed: %Rrc", rc); +- +- RTVfsIoStrmRelease(hTarballIos); +- return rc; +-} +- +- +-/** +- * Validates the extension pack tarball prior to unpacking. +- * +- * Operations performed: +- * - Mandatory files. +- * - Manifest check. +- * - Manifest seal check. +- * - XML check, match name. +- * +- * @returns VBox status code, failures with message. +- * @param hTarballFile The handle to open the @a pszTarball file. +- * @param pszExtPackName The name of the extension pack name. NULL if +- * the name is not fixed. +- * @param pszTarball The name of the tarball in case we have to +- * complain about something. +- * @param pszTarballDigest The SHA-256 digest of the tarball. Empty string +- * if no digest available. +- * @param pszError Where to store an error message on failure. +- * @param cbError The size of the buffer @a pszError points to. +- * @param phValidManifest Where to optionally return the handle to fully +- * validated the manifest for the extension pack. +- * This includes all files. +- * @param phXmlFile Where to optionally return the memorized XML +- * file. +- * @param pStrDigest Where to return the digest of the file. +- * Optional. +- */ +-int VBoxExtPackValidateTarball(RTFILE hTarballFile, const char *pszExtPackName, +- const char *pszTarball, const char *pszTarballDigest, +- char *pszError, size_t cbError, +- PRTMANIFEST phValidManifest, PRTVFSFILE phXmlFile, RTCString *pStrDigest) +-{ +- /* +- * Clear return values. +- */ +- if (phValidManifest) +- *phValidManifest = NIL_RTMANIFEST; +- if (phXmlFile) +- *phXmlFile = NIL_RTVFSFILE; +- Assert(cbError > 1); +- *pszError = '\0'; +- NOREF(pszTarball); +- +- /* +- * Open the tar.gz filesystem stream and set up an manifest in-memory file. +- */ +- RTMANIFEST hFileManifest; +- RTVFSFSSTREAM hTarFss; +- int rc = VBoxExtPackOpenTarFss(hTarballFile, pszError, cbError, &hTarFss, &hFileManifest); +- if (RT_FAILURE(rc)) +- return rc; +- +- RTMANIFEST hOurManifest; +- rc = RTManifestCreate(0 /*fFlags*/, &hOurManifest); +- if (RT_SUCCESS(rc)) +- { +- /* +- * Process the tarball (would be nice to move this to a function). +- */ +- RTVFSFILE hXmlFile = NIL_RTVFSFILE; +- RTVFSFILE hManifestFile = NIL_RTVFSFILE; +- RTVFSFILE hSignatureFile = NIL_RTVFSFILE; +- for (;;) +- { +- /* +- * Get the next stream object. +- */ +- char *pszName; +- RTVFSOBJ hVfsObj; +- RTVFSOBJTYPE enmType; +- rc = RTVfsFsStrmNext(hTarFss, &pszName, &enmType, &hVfsObj); +- if (RT_FAILURE(rc)) +- { +- if (rc != VERR_EOF) +- vboxExtPackSetError(pszError, cbError, "RTVfsFsStrmNext failed: %Rrc", rc); +- else +- rc = VINF_SUCCESS; +- break; +- } +- const char *pszAdjName = pszName[0] == '.' && pszName[1] == '/' ? &pszName[2] : pszName; +- +- /* +- * Check the type & name validity, performing special tests on +- * standard extension pack member files. +- * +- * N.B. We will always reach the end of the loop before breaking on +- * failure - cleanup reasons. +- */ +- rc = VBoxExtPackValidateMember(pszName, enmType, hVfsObj, pszError, cbError); +- if (RT_SUCCESS(rc)) +- { +- PRTVFSFILE phVfsFile = NULL; +- if (!strcmp(pszAdjName, VBOX_EXTPACK_DESCRIPTION_NAME)) +- phVfsFile = &hXmlFile; +- else if (!strcmp(pszAdjName, VBOX_EXTPACK_MANIFEST_NAME)) +- phVfsFile = &hManifestFile; +- else if (!strcmp(pszAdjName, VBOX_EXTPACK_SIGNATURE_NAME)) +- phVfsFile = &hSignatureFile; +- else if (!strncmp(pszAdjName, VBOX_EXTPACK_LICENSE_NAME_PREFIX, sizeof(VBOX_EXTPACK_LICENSE_NAME_PREFIX) - 1)) +- rc = VBoxExtPackValidateStandardFile(pszAdjName, enmType, &hVfsObj, NULL, pszError, cbError); +- if (phVfsFile) +- rc = VBoxExtPackValidateStandardFile(pszAdjName, enmType, &hVfsObj, phVfsFile, pszError, cbError); +- } +- +- /* +- * Add any I/O stream to the manifest +- */ +- if ( RT_SUCCESS(rc) +- && ( enmType == RTVFSOBJTYPE_FILE +- || enmType == RTVFSOBJTYPE_IO_STREAM)) +- { +- RTVFSIOSTREAM hVfsIos = RTVfsObjToIoStream(hVfsObj); +- rc = RTManifestEntryAddIoStream(hOurManifest, hVfsIos, pszAdjName, RTMANIFEST_ATTR_SIZE | RTMANIFEST_ATTR_SHA256); +- if (RT_FAILURE(rc)) +- vboxExtPackSetError(pszError, cbError, "RTManifestEntryAddIoStream failed on '%s': %Rrc", pszAdjName, rc); +- RTVfsIoStrmRelease(hVfsIos); +- } +- +- /* +- * Clean up and break out on failure. +- */ +- RTVfsObjRelease(hVfsObj); +- RTStrFree(pszName); +- if (RT_FAILURE(rc)) +- break; +- } +- +- /* +- * Check the integrity of the tarball file. +- */ +- if (RT_SUCCESS(rc)) +- { +- RTVfsFsStrmRelease(hTarFss); +- hTarFss = NIL_RTVFSFSSTREAM; +- rc = vboxExtPackVerifyFileDigest(hFileManifest, pszTarballDigest, pStrDigest, pszError, cbError); +- } +- +- /* +- * If we've successfully processed the tarball, verify that the +- * mandatory files are present. +- */ +- if (RT_SUCCESS(rc)) +- { +- if (hXmlFile == NIL_RTVFSFILE) +- rc = vboxExtPackReturnError(VERR_MISSING, pszError, cbError, "Mandator file '%s' is missing", VBOX_EXTPACK_DESCRIPTION_NAME); +- if (hManifestFile == NIL_RTVFSFILE) +- rc = vboxExtPackReturnError(VERR_MISSING, pszError, cbError, "Mandator file '%s' is missing", VBOX_EXTPACK_MANIFEST_NAME); +- if (hSignatureFile == NIL_RTVFSFILE) +- rc = vboxExtPackReturnError(VERR_MISSING, pszError, cbError, "Mandator file '%s' is missing", VBOX_EXTPACK_SIGNATURE_NAME); +- } +- +- /* +- * Check the manifest and it's signature. +- */ +- if (RT_SUCCESS(rc)) +- rc = vboxExtPackVerifyManifestAndSignature(hOurManifest, hManifestFile, hSignatureFile, pszError, cbError); +- +- /* +- * Check the XML. +- */ +- if (RT_SUCCESS(rc)) +- rc = vboxExtPackVerifyXml(hXmlFile, pszExtPackName, pszError, cbError); +- +- /* +- * Returns objects. +- */ +- if (RT_SUCCESS(rc)) +- { +- if (phValidManifest) +- { +- RTManifestRetain(hOurManifest); +- *phValidManifest = hOurManifest; +- } +- if (phXmlFile) +- { +- RTVfsFileRetain(hXmlFile); +- *phXmlFile = hXmlFile; +- } +- } +- +- /* +- * Release our object references. +- */ +- RTManifestRelease(hOurManifest); +- RTVfsFileRelease(hXmlFile); +- RTVfsFileRelease(hManifestFile); +- RTVfsFileRelease(hSignatureFile); +- } +- else +- vboxExtPackSetError(pszError, cbError, "RTManifestCreate failed: %Rrc", rc); +- RTVfsFsStrmRelease(hTarFss); +- RTManifestRelease(hFileManifest); +- +- return rc; +-} +- +--- VirtualBox-4.1.18.orig/include/Makefile.kmk 2012-06-20 10:07:49.000000000 -0300 ++++ VirtualBox-4.1.18/include/Makefile.kmk 2012-07-24 21:11:57.007068865 -0300 +@@ -51,7 +51,6 @@ + VBox/vd-cache-plugin.h \ + VBox/vmm/uvm.h \ + VBox/vscsi.h \ +- $(wildcard VBox/ExtPack/*.h ) \ + iprt/alloca.h \ + iprt/tcp.h \ + iprt/localipc.h \ +--- VirtualBox-4.1.18.orig/src/Makefile.kmk 2012-06-20 10:07:57.000000000 -0300 ++++ VirtualBox-4.1.18/src/Makefile.kmk 2012-07-24 22:51:10.206996034 -0300 +@@ -26,14 +26,6 @@ + include $(PATH_SUB_CURRENT)/VBox/Makefile.kmk + include $(PATH_SUB_CURRENT)/libs/Makefile.kmk + +-else if defined(VBOX_ONLY_EXTPACKS) +- include $(PATH_SUB_CURRENT)/bldprogs/Makefile.kmk +- include $(PATH_SUB_CURRENT)/VBox/Makefile.kmk +- include $(PATH_SUB_CURRENT)/libs/Makefile.kmk +- ifndef VBOX_ONLY_EXTPACKS_USE_IMPLIBS +- include $(PATH_SUB_CURRENT)/recompiler/Makefile.kmk +- endif +- + else if defined(VBOX_ONLY_TESTSUITE) + include $(PATH_SUB_CURRENT)/libs/Makefile.kmk + include $(PATH_SUB_CURRENT)/VBox/Makefile.kmk +--- VirtualBox-4.1.18.orig/src/VBox/Makefile.kmk 2012-07-24 21:19:55.565641784 -0300 ++++ VirtualBox-4.1.18/src/VBox/Makefile.kmk 2012-07-24 22:12:55.429156962 -0300 +@@ -33,19 +33,6 @@ + include $(PATH_SUB_CURRENT)/HostDrivers/Makefile.kmk + include $(PATH_SUB_CURRENT)/Frontends/Makefile.kmk + +-else ifdef VBOX_ONLY_EXTPACKS +- include $(PATH_SUB_CURRENT)/Runtime/Makefile.kmk +- include $(PATH_SUB_CURRENT)/Devices/Makefile.kmk +- include $(PATH_SUB_CURRENT)/HostDrivers/Makefile.kmk +- include $(PATH_SUB_CURRENT)/ExtPacks/Makefile.kmk +- ifdef VBOX_WITH_VRDP +- include $(PATH_SUB_CURRENT)/RDP/Makefile.kmk +- endif +- include $(PATH_SUB_CURRENT)/VMM/Makefile.kmk +- ifndef VBOX_ONLY_EXTPACKS_USE_IMPLIBS +- include $(PATH_SUB_CURRENT)/Disassembler/Makefile.kmk +- endif +- + else ifdef VBOX_ONLY_SDK + include $(PATH_SUB_CURRENT)/Main/Makefile.kmk + ifdef VBOX_WITH_VRDP +@@ -92,9 +79,6 @@ + if1of ($(KBUILD_TARGET_ARCH), amd64 x86) + include $(PATH_SUB_CURRENT)/NetworkServices/Makefile.kmk + endif +- ifndef VBOX_OSE +- include $(PATH_SUB_CURRENT)/ExtPacks/Makefile.kmk +- endif + ifdef VBOX_WITH_INSTALLER + include $(PATH_SUB_CURRENT)/Installer/Makefile.kmk # Keep this last. + endif +--- VirtualBox-4.1.18/src/libs/Makefile.kmk.orig 2012-07-24 21:23:26.938013023 -0300 ++++ VirtualBox-4.1.18/src/libs/Makefile.kmk 2012-07-24 21:43:42.557911752 -0300 +@@ -48,13 +48,6 @@ + include $(PATH_SUB_CURRENT)/kStuff/Makefile.kmk + endif + +-# OpenSSL. +-if !defined(VBOX_ONLY_SDK) \ +- && ( "$(SDK_VBOX_OPENSSL_INCS)" == "$(SDK_VBOX_OPENSSL_VBOX_DEFAULT_INCS)" \ +- || defined(VBOX_WITH_EXTPACK_PUEL_BUILD)) +- include $(PATH_SUB_CURRENT)/openssl-0.9.8t/Makefile.kmk +-endif +- + # libjpeg for VRDP video redirection + if defined(VBOX_WITH_VRDP) && defined(VBOX_WITH_VRDP_VIDEO_CHANNEL) + include $(PATH_SUB_CURRENT)/jpeg-8a/Makefile.kmk +--- VirtualBox-4.1.18.orig/src/VBox/Devices/Makefile.kmk 2012-07-24 23:06:45.916276235 -0300 ++++ VirtualBox-4.1.18/src/VBox/Devices/Makefile.kmk 2012-07-24 23:17:00.202963228 -0300 +@@ -21,9 +21,7 @@ + + # Include sub-makefiles. + include $(PATH_SUB_CURRENT)/testcase/Makefile.kmk +-if defined(VBOX_WITH_INTEL_PXE) || defined(VBOX_ONLY_EXTPACKS) +- include $(PATH_SUB_CURRENT)/PC/PXE/Makefile.kmk +-else if defined(VBOX_WITH_PXE_ROM) && !defined(VBOX_WITHOUT_ETHERBOOT) ++if defined(VBOX_WITH_PXE_ROM) && !defined(VBOX_WITHOUT_ETHERBOOT) + include $(PATH_SUB_CURRENT)/PC/Etherboot-src/Makefile.kmk + endif + if !defined(VBOX_ONLY_EXTPACKS) # Goes on almost to the end of the file. +@@ -57,9 +55,6 @@ + ifdef VBOX_WITH_USB + VBoxDDU_DEFS += VBOX_WITH_USB IN_USBLIB + VBoxDDU_SDKS.win = WINPSDK W2K3DDK +- if defined(VBOX_WITH_EHCI_IMPL) && !defined(VBOX_WITH_EXTPACK_PUEL) +- VBoxDDU_DEFS += VBOX_WITH_EHCI_IMPL +- endif + ifdef VBOX_WITH_NEW_USB_CODE_ON_DARWIN + VBoxDDU_DEFS.darwin += VBOX_WITH_NEW_USB_CODE_ON_DARWIN + endif +@@ -122,9 +117,6 @@ + VBoxDD_DEFS = VBOX_ACPI + ifdef VBOX_WITH_USB + VBoxDD_DEFS += VBOX_WITH_USB +- if defined(VBOX_WITH_EHCI_IMPL) && !defined(VBOX_WITH_EXTPACK_PUEL) +- VBoxDD_DEFS += VBOX_WITH_EHCI_IMPL +- endif + endif + ifdef VBOX_WITH_VUSB + VBoxDD_DEFS += VBOX_WITH_VUSB +@@ -446,11 +438,6 @@ + endif + ifdef VBOX_WITH_USB + DevicesR3_DEFS += VBOX_WITH_USB +- if defined(VBOX_WITH_EHCI_IMPL) && !defined(VBOX_WITH_EXTPACK_PUEL) +- DevicesR3_DEFS += VBOX_WITH_EHCI_IMPL +- DevicesR3_SOURCES += \ +- USB/DevEHCI.cpp +- endif + endif + if defined(VBOX_WITH_PCI_PASSTHROUGH_IMPL) && !defined(VBOX_WITH_EXTPACK_PUEL) + DevicesR3_DEFS += VBOX_WITH_PCI_PASSTHROUGH_IMPL +@@ -607,11 +594,6 @@ + + ifdef VBOX_WITH_USB + VBoxDDGC_DEFS += VBOX_WITH_USB +- if defined(VBOX_WITH_EHCI_IMPL) && !defined(VBOX_WITH_EXTPACK_PUEL) +- VBoxDDGC_DEFS += VBOX_WITH_EHCI_IMPL +- VBoxDDGC_SOURCES += \ +- USB/DevEHCI.cpp +- endif + endif + + ifdef VBOX_WITH_VIDEOHWACCEL +@@ -711,11 +693,6 @@ + endif + ifdef VBOX_WITH_USB + VBoxDDR0_DEFS += VBOX_WITH_USB +- if defined(VBOX_WITH_EHCI_IMPL) && !defined(VBOX_WITH_EXTPACK_PUEL) +- VBoxDDR0_DEFS += VBOX_WITH_EHCI_IMPL +- VBoxDDR0_SOURCES += \ +- USB/DevEHCI.cpp +- endif + endif + + if defined(VBOX_WITH_PCI_PASSTHROUGH_IMPL) && !defined(VBOX_WITH_EXTPACK_PUEL) +@@ -1204,49 +1181,5 @@ + + endif # !VBOX_ONLY_EXTPACKS + +-if defined(VBOX_WITH_EXTPACK_PUEL) && defined(VBOX_WITH_EXTPACK_PUEL_BUILD) +- # +- # The EHCI (USB 2.0) Extension Pack Modules. +- # +- if defined(VBOX_WITH_USB) +- DLLS += VBoxEhciR3 +- VBoxEhciR3_TEMPLATE = VBoxR3ExtPackPuel +- VBoxEhciR3_SOURCES = USB/DevEHCI.cpp +- +- SYSMODS += VBoxEhciR0 +- VBoxEhciR0_TEMPLATE = VBoxR0ExtPackPuel +- VBoxEhciR0_SOURCES = USB/DevEHCI.cpp +- +- ifdef VBOX_WITH_RAW_MODE +- SYSMODS += VBoxEhciRC +- VBoxEhciRC_TEMPLATE = VBoxRcExtPackPuel +- VBoxEhciRC_SOURCES = USB/DevEHCI.cpp +- endif +- endif +- +- if defined(VBOX_WITH_PCI_PASSTHROUGH) +- DLLS += VBoxPciRawR3 +- VBoxPciRawR3_TEMPLATE = VBoxR3ExtPackPuel +- VBoxPciRawR3_SOURCES = Bus/DevPciRaw.cpp +- +- DLLS += VBoxPciRawDrv +- VBoxPciRawDrv_TEMPLATE = VBoxR3ExtPackPuel +- VBoxPciRawDrv_SOURCES = Bus/DrvPciRaw.cpp +- +- SYSMODS += VBoxPciRawR0 +- VBoxPciRawR0_TEMPLATE = VBoxR0ExtPackPuel +- VBoxPciRawR0_SOURCES = Bus/DevPciRaw.cpp +- +- Bus/DevPciRaw.cpp_INCS = Bus +- endif +- +- # +- # The Intel PXE rom. +- # +- INSTALLS += VBoxExtPackPuelInsRoms +- VBoxExtPackPuelInsRoms_TEMPLATE = VBoxInsExtPackPuel +- VBoxExtPackPuelInsRoms_SOURCES = PC/PXE/PXE-Intel.rom=>PXE-Intel.rom +-endif # VBOX_WITH_EXTPACK_PUEL +- + include $(KBUILD_PATH)/subfooter.kmk + +--- VirtualBox-4.1.18.orig/src/VBox/Main/Makefile.kmk 2012-07-24 23:38:25.304126039 -0300 ++++ VirtualBox-4.1.18/src/VBox/Main/Makefile.kmk 2012-07-24 23:38:25.350789964 -0300 +@@ -230,14 +230,12 @@ + $(if $(VBOX_USB_WITH_SYSFS),VBOX_USB_WITH_SYSFS,) \ + $(if $(VBOX_USB_WITH_INOTIFY),VBOX_USB_WITH_INOTIFY,) \ + $(if $(VBOX_WITH_LIVE_MIGRATION),VBOX_WITH_LIVE_MIGRATION,) \ +- $(if $(VBOX_WITH_EXTPACK),VBOX_WITH_EXTPACK,) \ + $(if $(VBOX_WITH_VUSB),VBOX_WITH_VUSB,) \ + $(if $(VBOX_WITH_S3),VBOX_WITH_S3,) \ + $(if $(VBOX_WITH_PCI_PASSTHROUGH),VBOX_WITH_PCI_PASSTHROUGH,) + ifdef VBOX_WITH_USB + VBoxSVC_DEFS += \ + VBOX_WITH_USB \ +- $(if $(VBOX_WITH_EHCI),VBOX_WITH_EHCI,) \ + $(if $(VBOX_WITH_NEW_USB_CODE_ON_DARWIN),VBOX_WITH_NEW_USB_CODE_ON_DARWIN,) + endif + VBoxSVC_DEFS.win += VBOX_COM_OUTOFPROC_MODULE +@@ -290,7 +288,6 @@ + src-all/SharedFolderImpl.cpp \ + src-all/VirtualBoxBase.cpp \ + src-all/VirtualBoxErrorInfoImpl.cpp \ +- $(if $(VBOX_WITH_EXTPACK),src-all/ExtPackManagerImpl.cpp src-all/ExtPackUtil.cpp,) \ + src-server/ApplianceImpl.cpp \ + src-server/ApplianceImplExport.cpp \ + src-server/ApplianceImplImport.cpp \ +@@ -543,8 +540,6 @@ + $(if $(VBOX_WITH_HGSMI),VBOX_WITH_HGSMI,) \ + $(if $(VBOX_WITH_VIDEOHWACCEL),VBOX_WITH_VIDEOHWACCEL,) \ + $(if $(VBOX_WITH_USB),VBOX_WITH_USB,) \ +- $(if-expr defined(VBOX_WITH_EHCI) && defined(VBOX_WITH_USB),VBOX_WITH_EHCI,) \ +- $(if $(VBOX_WITH_EXTPACK),VBOX_WITH_EXTPACK,) \ + $(if $(VBOX_WITH_PCI_PASSTHROUGH),VBOX_WITH_PCI_PASSTHROUGH,) + + VBoxC_DEFS.darwin.x86 = VBOX_WITH_2X_4GB_ADDR_SPACE +@@ -602,7 +597,6 @@ + src-all/SharedFolderImpl.cpp \ + src-all/VirtualBoxBase.cpp \ + src-all/VirtualBoxErrorInfoImpl.cpp \ +- $(if $(VBOX_WITH_EXTPACK),src-all/ExtPackManagerImpl.cpp src-all/ExtPackUtil.cpp,) \ + $(if $(VBOX_WITH_USB_VIDEO),src-client/UsbWebcamInterface.cpp,) \ + $(if $(VBOX_WITH_USB_CARDREADER),src-client/UsbCardReader.cpp,) \ + src-client/AdditionsFacilityImpl.cpp \ +@@ -711,22 +705,6 @@ + endif # !win + + +-# +-# The VBoxExtPackHelperApp. +-# +-ifdef VBOX_WITH_EXTPACK +- PROGRAMS += VBoxExtPackHelperApp +- VBoxExtPackHelperApp_TEMPLATE = VBoxR3SetUidToRoot +- VBoxExtPackHelperApp_LDFLAGS.darwin = -framework Security +- VBoxExtPackHelperApp_LDFLAGS.win = /SUBSYSTEM:windows +- VBoxExtPackHelperApp_SOURCES = \ +- src-helper-apps/VBoxExtPackHelperApp.cpp \ +- src-all/ExtPackUtil.cpp +- VBoxExtPackHelperApp_LIBS = \ +- $(LIB_RUNTIME) +-endif # VBOX_WITH_EXTPACK +- +- + endif # !VBOX_ONLY_SDK (the ifndef is far above) + + +--- VirtualBox-4.1.18.orig/src/VBox/Frontends/VirtualBox/Makefile.kmk 2012-07-24 23:25:04.575825175 -0300 ++++ VirtualBox-4.1.18/src/VBox/Frontends/VirtualBox/Makefile.kmk 2012-07-24 23:25:04.619156084 -0300 +@@ -888,7 +888,6 @@ + $(VBOX_MACOSX_ICON_FILE)=>Resources/virtualbox.icns \ + $(VBOX_BRAND_GUI_VBOX_64PX_PNG)=>Resources/virtualbox.png \ + $(PATH_ROOT)/src/VBox/Resources/darwin/virtualbox-vbox.icns=>Resources/virtualbox-vbox.icns \ +- $(PATH_ROOT)/src/VBox/Resources/darwin/virtualbox-vbox-extpack.icns=>Resources/virtualbox-vbox-extpack.icns \ + $(PATH_ROOT)/src/VBox/Resources/darwin/virtualbox-ovf.icns=>Resources/virtualbox-ovf.icns \ + $(PATH_ROOT)/src/VBox/Resources/darwin/virtualbox-ova.icns=>Resources/virtualbox-ova.icns \ + $(PATH_ROOT)/src/VBox/Resources/darwin/virtualbox-vdi.icns=>Resources/virtualbox-vdi.icns \ +--- VirtualBox-4.1.18.orig/src/VBox/Frontends/VirtualBox/VirtualBox2.qrc 2012-07-24 23:28:17.985011038 -0300 ++++ VirtualBox-4.1.18/src/VBox/Frontends/VirtualBox/VirtualBox2.qrc 2012-07-24 23:28:18.051673913 -0300 +@@ -167,18 +167,6 @@ + <file alias="status_check_32px.png">images/status_check_32px.png</file> + <file alias="status_error_16px.png">images/status_error_16px.png</file> + <file alias="status_error_32px.png">images/status_error_32px.png</file> +- <file alias="extension_pack_16px.png">images/extension_pack_16px.png</file> +- <file alias="extension_pack_disabled_16px.png">images/extension_pack_disabled_16px.png</file> +- <file alias="extension_pack_32px.png">images/extension_pack_32px.png</file> +- <file alias="extension_pack_disabled_32px.png">images/extension_pack_disabled_32px.png</file> +- <file alias="extension_pack_install_16px.png">images/extension_pack_install_16px.png</file> +- <file alias="extension_pack_install_disabled_16px.png">images/extension_pack_install_disabled_16px.png</file> +- <file alias="extension_pack_install_32px.png">images/extension_pack_install_32px.png</file> +- <file alias="extension_pack_install_disabled_32px.png">images/extension_pack_install_disabled_32px.png</file> +- <file alias="extension_pack_uninstall_16px.png">images/extension_pack_uninstall_16px.png</file> +- <file alias="extension_pack_uninstall_disabled_16px.png">images/extension_pack_uninstall_disabled_16px.png</file> +- <file alias="extension_pack_uninstall_32px.png">images/extension_pack_uninstall_32px.png</file> +- <file alias="extension_pack_uninstall_disabled_32px.png">images/extension_pack_uninstall_disabled_32px.png</file> + <file alias="proxy_16px.png">images/proxy_16px.png</file> + <file alias="proxy_disabled_16px.png">images/proxy_disabled_16px.png</file> + <file alias="proxy_32px.png">images/proxy_32px.png</file> +--- VirtualBox-4.1.18.orig/src/VBox/Installer/linux/Makefile.kmk 2012-07-25 00:32:00.780012664 -0300 ++++ VirtualBox-4.1.18/src/VBox/Installer/linux/Makefile.kmk 2012-07-25 00:32:00.806677728 -0300 +@@ -170,11 +170,6 @@ + VBox.sh \ + VBox.png + +-ifdef VBOX_WITH_EXTPACK +- VBOX_LNX_STRIP_BIN += \ +- VBoxExtPackHelperApp +-endif +- + # Qt4 GUI + ifdef VBOX_WITH_QTGUI + include $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/nls/ApprovedLanguages.kmk +@@ -286,7 +281,7 @@ + + VBOX_MIME_ICONS = \ + $(addprefix $(PATH_ROOT)/src/VBox/Resources/other/,\ +- $(foreach f,ova ovf vbox vbox-extpack vdi vmdk vhd hdd, \ ++ $(foreach f,ova ovf vbox vdi vmdk vhd hdd, \ + $(foreach s,16 20 24 32 48 64 72 96 128 256,\ + virtualbox-$(f)-$(s)px.png=>$(s)x$(s)/virtualbox-$(f).png))) + +--- VirtualBox-4.1.18.orig/src/VBox/Installer/win/Makefile.kmk 2012-07-25 00:34:52.253398525 -0300 ++++ VirtualBox-4.1.18/src/VBox/Installer/win/Makefile.kmk 2012-07-25 00:34:52.300062531 -0300 +@@ -435,7 +435,6 @@ + -E 'VBOX_WITH_DEBUGGER_GUI=$(if-expr defined(VBOX_WITH_DEBUGGER_GUI) && defined(VBOX_WITH_QTGUI),yes,no)' \ + -E 'VBOX_WITH_DOCS_PACKING=$(if $(VBOX_WITH_DOCS_PACKING),yes,no)' \ + -E 'VBOX_WITH_EFIFW_PACKING=$(if $(VBOX_WITH_EFIFW_PACKING),yes,no)' \ +- -E 'VBOX_WITH_EXTPACK=$(if $(VBOX_WITH_EXTPACK),yes,no)' \ + -E 'VBOX_WITH_GUEST_CONTROL=$(if $(VBOX_WITH_GUEST_CONTROL),yes,no)' \ + -E 'VBOX_WITH_GUEST_PROPS=$(if $(VBOX_WITH_GUEST_PROPS),yes,no)' \ + -E 'VBOX_WITH_NETFLT=$(if $(VBOX_WITH_NETFLT),yes,no)' \ +--- VirtualBox-4.1.18.orig/src/VBox/Installer/darwin/Makefile.kmk 2012-07-25 00:36:55.929571374 -0300 ++++ VirtualBox-4.1.18/src/VBox/Installer/darwin/Makefile.kmk 2012-07-25 00:36:55.959569630 -0300 +@@ -629,7 +629,6 @@ + MacOS/VirtualBoxVM \ + MacOS/VBoxNetAdpCtl \ + MacOS/VBoxNetDHCP \ +- MacOS/VBoxExtPackHelperApp \ + MacOS/VBoxBalloonCtrl + ifdef VBOX_WITH_WEBSERVICES + VBOX_DI_VBAPP_PROGS += \ +@@ -659,7 +658,6 @@ + Resources/virtualbox.icns \ + Resources/virtualbox.png \ + Resources/virtualbox-vbox.icns \ +- Resources/virtualbox-vbox-extpack.icns \ + Resources/virtualbox-ovf.icns \ + Resources/virtualbox-ova.icns \ + Resources/virtualbox-vdi.icns \ +--- VirtualBox-4.1.18/src/VBox/Installer/solaris/Makefile.kmk.orig 2012-07-25 00:38:48.476398293 -0300 ++++ VirtualBox-4.1.18/src/VBox/Installer/solaris/Makefile.kmk 2012-07-25 00:38:48.516396159 -0300 +@@ -185,12 +185,12 @@ + + VBOX_MIME_ICONS = \ + $(addprefix $(PATH_ROOT)/src/VBox/Resources/other/,\ +- $(foreach f,ova ovf vbox vbox-extpack vdi vmdk vhd hdd, \ ++ $(foreach f,ova ovf vbox vdi vmdk vhd hdd, \ + $(foreach s,16 20 24 32 48 64 72 96 128 256,\ + virtualbox-$(f)-$(s)px.png=>$(s)x$(s)/mimetypes/virtualbox-$(f).png))) + + SOLARIS_COMMON_ICONS = \ +- $(foreach f,ova ovf vbox vbox-extpack vdi vmdk vhd hdd, \ ++ $(foreach f,ova ovf vbox vdi vmdk vhd hdd, \ + $(foreach s,16 20 24 32 48 64 72 96 128 256,\ + $(s)x$(s)/mimetypes/virtualbox-$(f).png)) + +@@ -210,7 +210,6 @@ + $(if $(VBOX_WITH_VBOXSDL),VBoxSDL,) \ + $(if $(VBOX_WITH_NETADP),VBoxNetAdpCtl,) \ + VBoxNetDHCP \ +- $(if $(VBOX_WITH_EXTPACK),VBoxExtPackHelperApp,) \ + VBoxSVC \ + $(if $(VBOX_WITH_CROGL),VBoxTestOGL,) \ + VBoxXPCOMIPCD \ +--- VirtualBox-4.1.18.orig/src/VBox/Runtime/Makefile.kmk 2012-07-25 00:40:58.745522450 -0300 ++++ VirtualBox-4.1.18/src/VBox/Runtime/Makefile.kmk 2012-07-25 00:40:58.782186960 -0300 +@@ -53,15 +53,6 @@ + # + LIBRARIES += RuntimeR3 RuntimeBldProg + +-else ifdef VBOX_ONLY_EXTPACKS_USE_IMPLIBS +- # +- # Build docs only - need just regular R3 runtime. +- # +- LIBRARIES += RuntimeBldProg +- LIBRARIES.solaris += RuntimeR0Stub +- LIBRARIES.win += RuntimeR0Stub RuntimeRCStub +- include $(PATH_SUB_CURRENT)/tools/Makefile.kmk +- + else # !VBOX_ONLY_ADDITIONS && !VBOX_ONLY_TESTSUITE && !VBOX_ONLY_DOCS + + # diff --git a/libre/virtualbox-libre-modules-lts/os_blag.png b/libre/virtualbox-libre-modules-lts/os_blag.png Binary files differnew file mode 100644 index 000000000..61995ca10 --- /dev/null +++ b/libre/virtualbox-libre-modules-lts/os_blag.png diff --git a/libre/virtualbox-libre-modules-lts/os_blag_64.png b/libre/virtualbox-libre-modules-lts/os_blag_64.png Binary files differnew file mode 100644 index 000000000..aa4463a97 --- /dev/null +++ b/libre/virtualbox-libre-modules-lts/os_blag_64.png diff --git a/libre/virtualbox-libre-modules-lts/os_dragora.png b/libre/virtualbox-libre-modules-lts/os_dragora.png Binary files differnew file mode 100644 index 000000000..d1df45880 --- /dev/null +++ b/libre/virtualbox-libre-modules-lts/os_dragora.png diff --git a/libre/virtualbox-libre-modules-lts/os_dragora_64.png b/libre/virtualbox-libre-modules-lts/os_dragora_64.png Binary files differnew file mode 100644 index 000000000..64bcecf20 --- /dev/null +++ b/libre/virtualbox-libre-modules-lts/os_dragora_64.png diff --git a/libre/virtualbox-libre-modules-lts/os_dynebolic.png b/libre/virtualbox-libre-modules-lts/os_dynebolic.png Binary files differnew file mode 100644 index 000000000..67b07d4c0 --- /dev/null +++ b/libre/virtualbox-libre-modules-lts/os_dynebolic.png diff --git a/libre/virtualbox-libre-modules-lts/os_gnewsense.png b/libre/virtualbox-libre-modules-lts/os_gnewsense.png Binary files differnew file mode 100644 index 000000000..76d9e38b3 --- /dev/null +++ b/libre/virtualbox-libre-modules-lts/os_gnewsense.png diff --git a/libre/virtualbox-libre-modules-lts/os_gnewsense_64.png b/libre/virtualbox-libre-modules-lts/os_gnewsense_64.png Binary files differnew file mode 100644 index 000000000..8859c34e8 --- /dev/null +++ b/libre/virtualbox-libre-modules-lts/os_gnewsense_64.png diff --git a/libre/virtualbox-libre-modules-lts/os_gnu.png b/libre/virtualbox-libre-modules-lts/os_gnu.png Binary files differnew file mode 100644 index 000000000..26c4550f9 --- /dev/null +++ b/libre/virtualbox-libre-modules-lts/os_gnu.png diff --git a/libre/virtualbox-libre-modules-lts/os_gnu_64.png b/libre/virtualbox-libre-modules-lts/os_gnu_64.png Binary files differnew file mode 100644 index 000000000..4161634e9 --- /dev/null +++ b/libre/virtualbox-libre-modules-lts/os_gnu_64.png diff --git a/libre/virtualbox-libre-modules-lts/os_gnuhurd.png b/libre/virtualbox-libre-modules-lts/os_gnuhurd.png Binary files differnew file mode 100644 index 000000000..26c4550f9 --- /dev/null +++ b/libre/virtualbox-libre-modules-lts/os_gnuhurd.png diff --git a/libre/virtualbox-libre-modules-lts/os_gnulinux.png b/libre/virtualbox-libre-modules-lts/os_gnulinux.png Binary files differnew file mode 100644 index 000000000..26c4550f9 --- /dev/null +++ b/libre/virtualbox-libre-modules-lts/os_gnulinux.png diff --git a/libre/virtualbox-libre-modules-lts/os_gnulinux_64.png b/libre/virtualbox-libre-modules-lts/os_gnulinux_64.png Binary files differnew file mode 100644 index 000000000..4161634e9 --- /dev/null +++ b/libre/virtualbox-libre-modules-lts/os_gnulinux_64.png diff --git a/libre/virtualbox-libre-modules-lts/os_musix.png b/libre/virtualbox-libre-modules-lts/os_musix.png Binary files differnew file mode 100644 index 000000000..fb7b94577 --- /dev/null +++ b/libre/virtualbox-libre-modules-lts/os_musix.png diff --git a/libre/virtualbox-libre-modules-lts/os_musix_64.png b/libre/virtualbox-libre-modules-lts/os_musix_64.png Binary files differnew file mode 100644 index 000000000..a1bbbbf3a --- /dev/null +++ b/libre/virtualbox-libre-modules-lts/os_musix_64.png diff --git a/libre/virtualbox-libre-modules-lts/os_os64base.png b/libre/virtualbox-libre-modules-lts/os_os64base.png Binary files differnew file mode 100644 index 000000000..7aec20314 --- /dev/null +++ b/libre/virtualbox-libre-modules-lts/os_os64base.png diff --git a/libre/virtualbox-libre-modules-lts/os_os64base.xcf b/libre/virtualbox-libre-modules-lts/os_os64base.xcf Binary files differnew file mode 100644 index 000000000..d8e28e35e --- /dev/null +++ b/libre/virtualbox-libre-modules-lts/os_os64base.xcf diff --git a/libre/virtualbox-libre-modules-lts/os_osbase.png b/libre/virtualbox-libre-modules-lts/os_osbase.png Binary files differnew file mode 100644 index 000000000..00f197fca --- /dev/null +++ b/libre/virtualbox-libre-modules-lts/os_osbase.png diff --git a/libre/virtualbox-libre-modules-lts/os_osbase.xcf b/libre/virtualbox-libre-modules-lts/os_osbase.xcf Binary files differnew file mode 100644 index 000000000..c4463c857 --- /dev/null +++ b/libre/virtualbox-libre-modules-lts/os_osbase.xcf diff --git a/libre/virtualbox-libre-modules-lts/os_parabola.png b/libre/virtualbox-libre-modules-lts/os_parabola.png Binary files differnew file mode 100644 index 000000000..757abc484 --- /dev/null +++ b/libre/virtualbox-libre-modules-lts/os_parabola.png diff --git a/libre/virtualbox-libre-modules-lts/os_parabola_64.png b/libre/virtualbox-libre-modules-lts/os_parabola_64.png Binary files differnew file mode 100644 index 000000000..5ac7c2767 --- /dev/null +++ b/libre/virtualbox-libre-modules-lts/os_parabola_64.png diff --git a/libre/virtualbox-libre-modules-lts/os_trisquel.png b/libre/virtualbox-libre-modules-lts/os_trisquel.png Binary files differnew file mode 100644 index 000000000..c6f0d3d7a --- /dev/null +++ b/libre/virtualbox-libre-modules-lts/os_trisquel.png diff --git a/libre/virtualbox-libre-modules-lts/os_trisquel_64.png b/libre/virtualbox-libre-modules-lts/os_trisquel_64.png Binary files differnew file mode 100644 index 000000000..ebca3dd43 --- /dev/null +++ b/libre/virtualbox-libre-modules-lts/os_trisquel_64.png diff --git a/libre/virtualbox-libre-modules-lts/os_ututo.png b/libre/virtualbox-libre-modules-lts/os_ututo.png Binary files differnew file mode 100644 index 000000000..e1dffb575 --- /dev/null +++ b/libre/virtualbox-libre-modules-lts/os_ututo.png diff --git a/libre/virtualbox-libre-modules-lts/os_ututo_64.png b/libre/virtualbox-libre-modules-lts/os_ututo_64.png Binary files differnew file mode 100644 index 000000000..158468e0a --- /dev/null +++ b/libre/virtualbox-libre-modules-lts/os_ututo_64.png diff --git a/libre/virtualbox-libre-modules-lts/os_venenux.png b/libre/virtualbox-libre-modules-lts/os_venenux.png Binary files differnew file mode 100644 index 000000000..5e0c1585d --- /dev/null +++ b/libre/virtualbox-libre-modules-lts/os_venenux.png diff --git a/libre/virtualbox-modules-lts/virtualbox-modules-lts.install b/libre/virtualbox-libre-modules-lts/virtualbox-libre-modules-lts.install index 5387563a6..5387563a6 100644 --- a/libre/virtualbox-modules-lts/virtualbox-modules-lts.install +++ b/libre/virtualbox-libre-modules-lts/virtualbox-libre-modules-lts.install diff --git a/libre/virtualbox-modules-lts/virtualbox-parabola-modules-lts.install b/libre/virtualbox-libre-modules-lts/virtualbox-libre-parabola-modules-lts.install index 54a052390..54a052390 100644 --- a/libre/virtualbox-modules-lts/virtualbox-parabola-modules-lts.install +++ b/libre/virtualbox-libre-modules-lts/virtualbox-libre-parabola-modules-lts.install diff --git a/libre/virtualbox-modules/.directory b/libre/virtualbox-libre-modules/.directory index 7486c78f1..7486c78f1 100644 --- a/libre/virtualbox-modules/.directory +++ b/libre/virtualbox-libre-modules/.directory diff --git a/libre/virtualbox-modules/60-vboxguest.rules b/libre/virtualbox-libre-modules/60-vboxguest.rules index 6285f7249..6285f7249 100644 --- a/libre/virtualbox-modules/60-vboxguest.rules +++ b/libre/virtualbox-libre-modules/60-vboxguest.rules diff --git a/libre/virtualbox-modules/LocalConfig.kmk b/libre/virtualbox-libre-modules/LocalConfig.kmk index af79f90cd..af79f90cd 100644 --- a/libre/virtualbox-modules/LocalConfig.kmk +++ b/libre/virtualbox-libre-modules/LocalConfig.kmk diff --git a/libre/virtualbox-libre-modules/PKGBUILD b/libre/virtualbox-libre-modules/PKGBUILD new file mode 100644 index 000000000..d1b6f5fae --- /dev/null +++ b/libre/virtualbox-libre-modules/PKGBUILD @@ -0,0 +1,161 @@ +# $Id$ +#Maintainer: Ionut Biru <ibiru@archlinux.org> +#Maintainer (Parabola): Jorge López <jorginho@lavabit.com> +#Contributor (Parabola): André Silva <emulatorman@lavabit.com> + +pkgbase=virtualbox-libre-modules +pkgname=('virtualbox-libre-modules' 'virtualbox-libre-parabola-modules') +pkgver=4.1.18 +pkgrel=6 +arch=('i686' 'x86_64') +url='http://virtualbox.org' +license=('GPL') +makedepends=('libstdc++5' 'bin86' 'dev86' 'iasl' 'libxslt' 'libxml2' 'libpng' 'libidl2' 'xalan-c' 'sdl' 'linux-libre-headers') +[[ $CARCH == "x86_64" ]] && makedepends=("${makedepends[@]}" 'gcc-multilib' 'lib32-glibc') +source=(http://download.virtualbox.org/virtualbox/${pkgver}/VirtualBox-${pkgver}.tar.bz2 + LocalConfig.kmk 60-vboxguest.rules os_blag_64.png os_blag.png + os_dragora_64.png os_dragora.png os_dynebolic.png os_gnewsense_64.png os_gnewsense.png + os_gnu_64.png os_gnuhurd.png os_gnulinux_64.png os_gnulinux.png os_gnu.png + os_musix_64.png os_musix.png os_parabola_64.png os_parabola.png os_trisquel_64.png + os_trisquel.png os_ututo_64.png os_ututo.png os_venenux.png libre.patch + free-distros.patch) +md5sums=('38db0a87cba659b484af868b0c2bd3ac' + '4c88bd122677a35f68abd76eb01b378b' + 'ed1341881437455d9735875ddf455fbe' + '8538dba8686d7449cb481c9bae9d722a' + '545c925b46f2ac95e5f8ae407fad101a' + 'f6416f509c2e5460e4dc624e0a57f3c1' + 'bbfb59dd517c020a23701b480187a355' + 'efacfdb61918286ea9bc89866b8fd239' + '7c3eb09995e8bafeef414374e44ad4ce' + 'a49ed3ab6bd0fb084de0ab3dd97ae93e' + '6b432b3305ed446125eef052c38355a6' + 'a70022a468bd3e9daf01818d2d74ac3c' + '6b432b3305ed446125eef052c38355a6' + 'a70022a468bd3e9daf01818d2d74ac3c' + 'a70022a468bd3e9daf01818d2d74ac3c' + '380eb2ab6cad3da198094585853c129c' + 'a60bb9a98abcc3c34156f9051d00df9a' + '3a908ef6952bcf987e63ef2fe4e98d24' + '02e87c39c353634cecacf98f1707fa15' + '0cf41a41e7a415d404d5584e047fd450' + '449cde3b58390284b59c5d663de3edc9' + 'c7951fe6888d939f3a7d0dafe477e82b' + '4da8eeb2ece7e475fc7a0d1003da26c6' + '5e4187af59726d71c5be48d0cd816c34' + 'a9e4724b56ddf99bb2e9a8fab8ad43ba' + 'f7d275fc52e5f3cfafd85646c2914063') + +_extramodules=extramodules-3.5-LIBRE + + + + +build() { + _kernver="$(cat /usr/lib/modules/${_extramodules}/version || true)" + + export KERN_DIR=/usr/lib/modules/${_kernver}/build + export KERN_INCL=/usr/src/linux-${_kernver}/include/ + + cd "$srcdir/VirtualBox-${pkgver}" + + patch -Np1 -i "$srcdir/libre.patch" + patch -Np1 -i "$srcdir/free-distros.patch" + + ## Removing Nonfree directories + rm -rv "./include/VBox/ExtPack" + rm -rv "./src/VBox/ExtPacks" + rm -rv "./src/VBox/Main/src-helper-apps" + + ## Removing Oracle VM VirtualBox Extension Pack icons + rm -v "./src/VBox/Resources/darwin/virtualbox-vbox-extpack.icns" + rm -v "./src/VBox/Resources/other/virtualbox-vbox-extpack-"{16px,20px,24px,32px,40px,48px,64px,72px,80px,96px,128px,256px,512px}.png + rm -v "./src/VBox/Resources/win/OSE/virtualbox-vbox-extpack.ico" + rm -v "./src/VBox/Frontends/VirtualBox/images/extension_pack_"{16px,32px,disabled{_16px,_32px},install{_16px,_32px},install_disabled{_16px,_32px},uninstall{_16px,_32px},uninstall_disabled{_16px,_32px}}.png + + ## Adding free distros icons + for i in {gnuhurd,dynebolic,venenux,{gnu{,linux},parabola,gnewsense,blag,dragora,ututo,musix,trisquel}{,_64}}; do + cp -v "$srcdir/os_${i}.png" "./src/VBox/Frontends/VirtualBox/images" + done + + ## Removing non-free OS icons + rm -v "./src/VBox/Frontends/VirtualBox/images/os_"{{{arch,turbo}linux,debian,fedora,gentoo,linux{24,26},macosx,mandriva,{free,net,open}bsd,redhat,solaris,opensuse,oracle{,solaris},ubuntu,win{2k{3,8},7,8,vista,xp},xandros}{,_64},dos,jrockitve,l4,linux{,22,_other},netware,qnx,os2{_other,ecs,warp{3,4,45}},win{2k,31,95,98,_other,me,nt4}}.png + + cp "$srcdir/LocalConfig.kmk" . + + ./configure \ + --with-linux=/usr/src/linux-${_kernver} \ + --disable-java \ + --disable-docs \ + --disable-xpcom \ + --disable-python \ + --disable-sdl-ttf \ + --disable-alsa \ + --disable-pulse \ + --disable-dbus \ + --disable-opengl \ + --build-headless \ + --nofatal + source ./env.sh + kmk all + + make -C "$srcdir/VirtualBox-${pkgver}/out/linux.$BUILD_PLATFORM_ARCH/release/bin/src" + make -C "$srcdir/VirtualBox-${pkgver}/out/linux.$BUILD_PLATFORM_ARCH/release/bin/additions/src" +} + +package_virtualbox-libre-parabola-modules(){ + pkgdesc="Additions only for Parabola guests (kernel modules)" + license=('GPL') + install=virtualbox-libre-parabola-modules.install + depends=('linux-libre>=3.5' 'linux-libre<3.6') + replaces=('virtualbox-archlinux-modules') + conflicts=('virtualbox-archlinux-modules') + provides=("virtualbox-archlinux-modules=$pkgver") + + source "$srcdir/VirtualBox-${pkgver}/env.sh" + + cd "$srcdir/VirtualBox-${pkgver}/out/linux.$BUILD_PLATFORM_ARCH/release/bin/additions/src" + + for module in vboxguest.ko vboxsf.ko vboxvideo.ko; do + install -D -m644 ${module} \ + "$pkgdir/usr/lib/modules/${_extramodules}/${module}" + done + + install -D -m 0644 "$srcdir/60-vboxguest.rules" \ + "$pkgdir/usr/lib/udev/rules.d/60-vboxguest.rules" + + find "${pkgdir}" -name '*.ko' -exec gzip -9 {} \; + + sed -i -e "s/EXTRAMODULES='.*'/EXTRAMODULES='${_extramodules}'/" "$startdir/virtualbox-libre-parabola-modules.install" +} + +package_virtualbox-libre-modules(){ + pkgdesc="Kernel modules for VirtualBox" + license=('GPL') + install=virtualbox-libre-modules.install + depends=('linux-libre>=3.5' 'linux-libre<3.6') + replaces=('virtualbox-modules') + conflicts=('virtualbox-modules') + provides=("virtualbox-modules=$pkgver") + + source "$srcdir/VirtualBox-${pkgver}/env.sh" + + + cd "$srcdir/VirtualBox-${pkgver}/out/linux.$BUILD_PLATFORM_ARCH/release/bin/src" + + install -D -m644 vboxdrv.ko \ + "$pkgdir/usr/lib/modules/${_extramodules}/vboxdrv.ko" + + install -D -m644 vboxnetadp.ko \ + "$pkgdir/usr/lib/modules/${_extramodules}/vboxnetadp.ko" + + install -D -m644 vboxnetflt.ko \ + "$pkgdir/usr/lib/modules/${_extramodules}/vboxnetflt.ko" + + install -D -m644 vboxpci.ko \ + "$pkgdir/usr/lib/modules/${_extramodules}/vboxpci.ko" + + find "${pkgdir}" -name '*.ko' -exec gzip -9 {} + + + sed -i -e "s/EXTRAMODULES='.*'/EXTRAMODULES='${_extramodules}'/" "$startdir/virtualbox-libre-modules.install" +} diff --git a/libre/virtualbox-libre-modules/free-distros.patch b/libre/virtualbox-libre-modules/free-distros.patch new file mode 100644 index 000000000..7920fb6ab --- /dev/null +++ b/libre/virtualbox-libre-modules/free-distros.patch @@ -0,0 +1,1383 @@ +--- VirtualBox-4.1.18.orig/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UINewVMWzd.cpp 2012-07-25 14:51:03.569003667 -0300 ++++ VirtualBox-4.1.18/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UINewVMWzd.cpp 2012-07-25 14:51:03.652333615 -0300 +@@ -44,94 +44,38 @@ + * first matching string found, will be used. */ + static const osTypePattern gs_OSTypePattern[] = + { +- { QRegExp("DOS", Qt::CaseInsensitive), "DOS" }, + +- /* Windows */ +- { QRegExp("Wi.*98", Qt::CaseInsensitive), "Windows98" }, +- { QRegExp("Wi.*95", Qt::CaseInsensitive), "Windows95" }, +- { QRegExp("Wi.*Me", Qt::CaseInsensitive), "WindowsMe" }, +- { QRegExp("(Wi.*NT)|(NT4)", Qt::CaseInsensitive), "WindowsNT4" }, +- { QRegExp("((Wi.*XP)|(\\bXP\\b)).*64", Qt::CaseInsensitive), "WindowsXP_64" }, +- { QRegExp("(Wi.*XP)|(\\bXP\\b)", Qt::CaseInsensitive), "WindowsXP" }, +- { QRegExp("((Wi.*2003)|(W2K3)).*64", Qt::CaseInsensitive), "Windows2003_64" }, +- { QRegExp("(Wi.*2003)|(W2K3)", Qt::CaseInsensitive), "Windows2003" }, +- { QRegExp("((Wi.*V)|(Vista)).*64", Qt::CaseInsensitive), "WindowsVista_64" }, +- { QRegExp("(Wi.*V)|(Vista)", Qt::CaseInsensitive), "WindowsVista" }, +- { QRegExp("((Wi.*2008)|(W2K8)).*64", Qt::CaseInsensitive), "Windows2008_64" }, +- { QRegExp("(Wi.*2008)|(W2K8)", Qt::CaseInsensitive), "Windows2008" }, +- { QRegExp("(Wi.*2000)|(W2K)", Qt::CaseInsensitive), "Windows2000" }, +- { QRegExp("(Wi.*7.*64)|(W7.*64)", Qt::CaseInsensitive), "Windows7_64" }, +- { QRegExp("(Wi.*7)|(W7)", Qt::CaseInsensitive), "Windows7" }, +- { QRegExp("(Wi.*8.*64)|(W8.*64)", Qt::CaseInsensitive), "Windows8_64" }, +- { QRegExp("(Wi.*8)|(W8)", Qt::CaseInsensitive), "Windows8" }, +- { QRegExp("Wi.*3", Qt::CaseInsensitive), "Windows31" }, +- { QRegExp("Wi", Qt::CaseInsensitive), "WindowsXP" }, +- +- /* Solaris */ +- { QRegExp("((Op.*So)|(os20[01][0-9])|(So.*1[01])|(India)|(Neva)).*64", Qt::CaseInsensitive), "OpenSolaris_64" }, +- { QRegExp("(Op.*So)|(os20[01][0-9])|(So.*1[01])|(India)|(Neva)", Qt::CaseInsensitive), "OpenSolaris" }, +- { QRegExp("So.*64", Qt::CaseInsensitive), "Solaris_64" }, +- { QRegExp("So", Qt::CaseInsensitive), "Solaris" }, +- +- /* OS/2 */ +- { QRegExp("OS[/|!-]{,1}2.*W.*4.?5", Qt::CaseInsensitive), "OS2Warp45" }, +- { QRegExp("OS[/|!-]{,1}2.*W.*4", Qt::CaseInsensitive), "OS2Warp4" }, +- { QRegExp("OS[/|!-]{,1}2.*W", Qt::CaseInsensitive), "OS2Warp3" }, +- { QRegExp("(OS[/|!-]{,1}2.*e)|(eCS.*)", Qt::CaseInsensitive), "OS2eCS" }, +- { QRegExp("OS[/|!-]{,1}2", Qt::CaseInsensitive), "OS2" }, +- +- /* Code names for Linux distributions */ +- { QRegExp("((edgy)|(feisty)|(gutsy)|(hardy)|(intrepid)|(jaunty)|(karmic)|(lucid)|(maverick)|(natty)|(oneiric)|(precise)).*64", Qt::CaseInsensitive), "Ubuntu_64" }, +- { QRegExp("(edgy)|(feisty)|(gutsy)|(hardy)|(intrepid)|(jaunty)|(karmic)|(lucid)|(maverick)|(natty)|(oneiric)|(precise)", Qt::CaseInsensitive), "Ubuntu" }, +- { QRegExp("((sarge)|(etch)|(lenny)|(squeeze)|(wheezy)|(sid)).*64", Qt::CaseInsensitive), "Debian_64" }, +- { QRegExp("(sarge)|(etch)|(lenny)|(squeeze)|(wheezy)|(sid)", Qt::CaseInsensitive), "Debian" }, +- { QRegExp("((moonshine)|(werewolf)|(sulphur)|(cambridge)|(leonidas)|(constantine)|(goddard)|(laughlin)|(lovelock)|(verne)).*64", Qt::CaseInsensitive), "Fedora_64" }, +- { QRegExp("(moonshine)|(werewolf)|(sulphur)|(cambridge)|(leonidas)|(constantine)|(goddard)|(laughlin)|(lovelock)|(verne)", Qt::CaseInsensitive), "Fedora" }, +- +- /* Regular names of Linux distributions */ +- { QRegExp("Arc.*64", Qt::CaseInsensitive), "ArchLinux_64" }, +- { QRegExp("Arc", Qt::CaseInsensitive), "ArchLinux" }, +- { QRegExp("Deb.*64", Qt::CaseInsensitive), "Debian_64" }, +- { QRegExp("Deb", Qt::CaseInsensitive), "Debian" }, +- { QRegExp("((SU)|(Nov)|(SLE)).*64", Qt::CaseInsensitive), "OpenSUSE_64" }, +- { QRegExp("(SU)|(Nov)|(SLE)", Qt::CaseInsensitive), "OpenSUSE" }, +- { QRegExp("Fe.*64", Qt::CaseInsensitive), "Fedora_64" }, +- { QRegExp("Fe", Qt::CaseInsensitive), "Fedora" }, +- { QRegExp("((Gen)|(Sab)).*64", Qt::CaseInsensitive), "Gentoo_64" }, +- { QRegExp("(Gen)|(Sab)", Qt::CaseInsensitive), "Gentoo" }, +- { QRegExp("Man.*64", Qt::CaseInsensitive), "Mandriva_64" }, +- { QRegExp("Man", Qt::CaseInsensitive), "Mandriva" }, +- { QRegExp("((Red)|(rhel)|(cen)).*64", Qt::CaseInsensitive), "RedHat_64" }, +- { QRegExp("(Red)|(rhel)|(cen)", Qt::CaseInsensitive), "RedHat" }, +- { QRegExp("Tur.*64", Qt::CaseInsensitive), "Turbolinux_64" }, +- { QRegExp("Tur", Qt::CaseInsensitive), "Turbolinux" }, +- { QRegExp("Ub.*64", Qt::CaseInsensitive), "Ubuntu_64" }, +- { QRegExp("Ub", Qt::CaseInsensitive), "Ubuntu" }, +- { QRegExp("Xa.*64", Qt::CaseInsensitive), "Xandros_64" }, +- { QRegExp("Xa", Qt::CaseInsensitive), "Xandros" }, +- { QRegExp("((Or)|(oel)).*64", Qt::CaseInsensitive), "Oracle_64" }, +- { QRegExp("(Or)|(oel)", Qt::CaseInsensitive), "Oracle" }, +- { QRegExp("((Li)|(lnx)).*2.?2", Qt::CaseInsensitive), "Linux22" }, +- { QRegExp("((Li)|(lnx)).*2.?4.*64", Qt::CaseInsensitive), "Linux24_64" }, +- { QRegExp("((Li)|(lnx)).*2.?4", Qt::CaseInsensitive), "Linux24" }, +- { QRegExp("((((Li)|(lnx)).*2.?6)|(LFS)).*64", Qt::CaseInsensitive), "Linux26_64" }, +- { QRegExp("(((Li)|(lnx)).*2.?6)|(LFS)", Qt::CaseInsensitive), "Linux26" }, +- { QRegExp("((Li)|(lnx)).*64", Qt::CaseInsensitive), "Linux26_64" }, +- { QRegExp("(Li)|(lnx)", Qt::CaseInsensitive), "Linux26" }, ++ /* Code names for GNU/Linux distributions */ ++ { QRegExp("((Taranis)|(Dagda)|(Brigantia)).*64", Qt::CaseInsensitive), "Trisquel_64" }, ++ { QRegExp("(Taranis)|(Dagda)|(Brigantia)", Qt::CaseInsensitive), "Trisquel" }, ++ { QRegExp("((metad)|(parkes)|(three)).*64", Qt::CaseInsensitive), "gNewSense_64" }, ++ { QRegExp("(deltah)|(metad)|(parkes)|(three)", Qt::CaseInsensitive), "gNewSense" }, ++ { QRegExp("((90k)|(119k)|(140k)|(160k)|(90000)|(119000)|(140000)|(160000)|(Spartakus)).*64", Qt::CaseInsensitive), "Blag_64" }, ++ { QRegExp("(90k)|(119k)|(140k)|(160k)|(90000)|(119000)|(140000)|(160000)|(Spartakus)", Qt::CaseInsensitive), "Blag" }, ++ ++ /* Regular names of GNU/Linux distributions and GNU-Hurd */ ++ { QRegExp("Pa.*64", Qt::CaseInsensitive), "Parabola_64" }, ++ { QRegExp("Pa", Qt::CaseInsensitive), "Parabola" }, ++ { QRegExp("((gNe)|(new)|(Sen)).*64", Qt::CaseInsensitive), "gNewSense_64" }, ++ { QRegExp("(gNe)|(new)|(Sen)", Qt::CaseInsensitive), "gNewSense" }, ++ { QRegExp("Bla.*64", Qt::CaseInsensitive), "Blag_64" }, ++ { QRegExp("Bla", Qt::CaseInsensitive), "Blag" }, ++ { QRegExp("Dra.*64", Qt::CaseInsensitive), "Dragora_64" }, ++ { QRegExp("Dra", Qt::CaseInsensitive), "Dragora" }, ++ { QRegExp("((Utu)|(XS)).*64", Qt::CaseInsensitive), "Ututo_64" }, ++ { QRegExp("(Utu)|(XS)", Qt::CaseInsensitive), "Ututo" }, ++ { QRegExp("Mus.*64", Qt::CaseInsensitive), "Musix_64" }, ++ { QRegExp("Mus", Qt::CaseInsensitive), "Musix" }, ++ { QRegExp("Tri.*64", Qt::CaseInsensitive), "Trisquel_64" }, ++ { QRegExp("Tri", Qt::CaseInsensitive), "Trisquel" }, ++ { QRegExp("Dyn", Qt::CaseInsensitive), "Dynebolic" }, ++ { QRegExp("Ven", Qt::CaseInsensitive), "Venenux" }, ++ { QRegExp("GNU", Qt::CaseInsensitive), "GNU" }, ++ { QRegExp("Hu", Qt::CaseInsensitive), "GNUHurd" }, ++ { QRegExp("((Li)|(lnx)).*64", Qt::CaseInsensitive), "GNULinux_64" }, ++ { QRegExp("(Li)|(lnx)", Qt::CaseInsensitive), "GNULinux" }, + + /* Other */ +- { QRegExp("L4", Qt::CaseInsensitive), "L4" }, +- { QRegExp("((Fr.*B)|(fbsd)).*64", Qt::CaseInsensitive), "FreeBSD_64" }, +- { QRegExp("(Fr.*B)|(fbsd)", Qt::CaseInsensitive), "FreeBSD" }, +- { QRegExp("Op.*B.*64", Qt::CaseInsensitive), "OpenBSD_64" }, +- { QRegExp("Op.*B", Qt::CaseInsensitive), "OpenBSD" }, +- { QRegExp("Ne.*B.*64", Qt::CaseInsensitive), "NetBSD_64" }, +- { QRegExp("Ne.*B", Qt::CaseInsensitive), "NetBSD" }, +- { QRegExp("QN", Qt::CaseInsensitive), "QNX" }, +- { QRegExp("((Mac)|(Tig)|(Leop)|(osx)).*64", Qt::CaseInsensitive), "MacOS_64" }, +- { QRegExp("(Mac)|(Tig)|(Leop)|(osx)", Qt::CaseInsensitive), "MacOS" }, +- { QRegExp("Net", Qt::CaseInsensitive), "Netware" }, +- { QRegExp("Rocki", Qt::CaseInsensitive), "JRockitVE" }, + { QRegExp("Ot", Qt::CaseInsensitive), "Other" }, + }; + +--- VirtualBox-4.1.18.orig/src/VBox/Main/xml/Settings.cpp 2012-07-25 15:14:50.498764160 -0300 ++++ VirtualBox-4.1.18/src/VBox/Main/xml/Settings.cpp 2012-07-25 15:14:50.548761649 -0300 +@@ -3227,40 +3227,18 @@ + } aConvertOSTypes[] = + { + { "unknown", "Other" }, +- { "dos", "DOS" }, +- { "win31", "Windows31" }, +- { "win95", "Windows95" }, +- { "win98", "Windows98" }, +- { "winme", "WindowsMe" }, +- { "winnt4", "WindowsNT4" }, +- { "win2k", "Windows2000" }, +- { "winxp", "WindowsXP" }, +- { "win2k3", "Windows2003" }, +- { "winvista", "WindowsVista" }, +- { "win2k8", "Windows2008" }, +- { "os2warp3", "OS2Warp3" }, +- { "os2warp4", "OS2Warp4" }, +- { "os2warp45", "OS2Warp45" }, +- { "ecs", "OS2eCS" }, +- { "linux22", "Linux22" }, +- { "linux24", "Linux24" }, +- { "linux26", "Linux26" }, +- { "archlinux", "ArchLinux" }, +- { "debian", "Debian" }, +- { "opensuse", "OpenSUSE" }, +- { "fedoracore", "Fedora" }, +- { "gentoo", "Gentoo" }, +- { "mandriva", "Mandriva" }, +- { "redhat", "RedHat" }, +- { "ubuntu", "Ubuntu" }, +- { "xandros", "Xandros" }, +- { "freebsd", "FreeBSD" }, +- { "openbsd", "OpenBSD" }, +- { "netbsd", "NetBSD" }, +- { "netware", "Netware" }, +- { "solaris", "Solaris" }, +- { "opensolaris", "OpenSolaris" }, +- { "l4", "L4" } ++ { "gnu", "GNU" }, ++ { "gnuhurd", "GNUHurd" }, ++ { "gnulinux", "GNULinux" }, ++ { "parabola", "Parabola" }, ++ { "gnewsense", "gNewSense" }, ++ { "blag", "Blag" }, ++ { "dragora", "Dragora" }, ++ { "ututo", "Ututo" }, ++ { "musix", "Musix" }, ++ { "trisquel", "Trisquel" }, ++ { "dynebolic", "Dynebolic" }, ++ { "venenux", "Venenux" }, + }; + + void MachineConfigFile::convertOldOSType_pre1_5(Utf8Str &str) +--- VirtualBox-4.1.18.orig/src/VBox/Main/xml/SettingsConverter.xsl 2012-07-25 15:21:04.553581275 -0300 ++++ VirtualBox-4.1.18/src/VBox/Main/xml/SettingsConverter.xsl 2012-07-25 15:21:04.593579427 -0300 +@@ -729,40 +729,18 @@ + <xsl:attribute name="OSType"> + <xsl:choose> + <xsl:when test="@OSType='unknown'">Other</xsl:when> +- <xsl:when test="@OSType='dos'">DOS</xsl:when> +- <xsl:when test="@OSType='win31'">Windows31</xsl:when> +- <xsl:when test="@OSType='win95'">Windows95</xsl:when> +- <xsl:when test="@OSType='win98'">Windows98</xsl:when> +- <xsl:when test="@OSType='winme'">WindowsMe</xsl:when> +- <xsl:when test="@OSType='winnt4'">WindowsNT4</xsl:when> +- <xsl:when test="@OSType='win2k'">Windows2000</xsl:when> +- <xsl:when test="@OSType='winxp'">WindowsXP</xsl:when> +- <xsl:when test="@OSType='win2k3'">Windows2003</xsl:when> +- <xsl:when test="@OSType='winvista'">WindowsVista</xsl:when> +- <xsl:when test="@OSType='win2k8'">Windows2008</xsl:when> +- <xsl:when test="@OSType='os2warp3'">OS2Warp3</xsl:when> +- <xsl:when test="@OSType='os2warp4'">OS2Warp4</xsl:when> +- <xsl:when test="@OSType='os2warp45'">OS2Warp45</xsl:when> +- <xsl:when test="@OSType='ecs'">OS2eCS</xsl:when> +- <xsl:when test="@OSType='linux22'">Linux22</xsl:when> +- <xsl:when test="@OSType='linux24'">Linux24</xsl:when> +- <xsl:when test="@OSType='linux26'">Linux26</xsl:when> +- <xsl:when test="@OSType='archlinux'">ArchLinux</xsl:when> +- <xsl:when test="@OSType='debian'">Debian</xsl:when> +- <xsl:when test="@OSType='opensuse'">OpenSUSE</xsl:when> +- <xsl:when test="@OSType='fedoracore'">Fedora</xsl:when> +- <xsl:when test="@OSType='gentoo'">Gentoo</xsl:when> +- <xsl:when test="@OSType='mandriva'">Mandriva</xsl:when> +- <xsl:when test="@OSType='redhat'">RedHat</xsl:when> +- <xsl:when test="@OSType='ubuntu'">Ubuntu</xsl:when> +- <xsl:when test="@OSType='xandros'">Xandros</xsl:when> +- <xsl:when test="@OSType='freebsd'">FreeBSD</xsl:when> +- <xsl:when test="@OSType='openbsd'">OpenBSD</xsl:when> +- <xsl:when test="@OSType='netbsd'">NetBSD</xsl:when> +- <xsl:when test="@OSType='netware'">Netware</xsl:when> +- <xsl:when test="@OSType='solaris'">Solaris</xsl:when> +- <xsl:when test="@OSType='opensolaris'">OpenSolaris</xsl:when> +- <xsl:when test="@OSType='l4'">L4</xsl:when> ++ <xsl:when test="@OSType='gnu'">GNU</xsl:when> ++ <xsl:when test="@OSType='gnuhurd'">GNUHurd</xsl:when> ++ <xsl:when test="@OSType='gnulinux'">GNULinux</xsl:when> ++ <xsl:when test="@OSType='parabola'">Parabola</xsl:when> ++ <xsl:when test="@OSType='gnewsense'">gNewSense</xsl:when> ++ <xsl:when test="@OSType='blag'">Blag</xsl:when> ++ <xsl:when test="@OSType='dragora'">Dragora</xsl:when> ++ <xsl:when test="@OSType='ututo'">Ututo</xsl:when> ++ <xsl:when test="@OSType='musix'">Musix</xsl:when> ++ <xsl:when test="@OSType='trisquel'">Trisquel</xsl:when> ++ <xsl:when test="@OSType='dynebolic'">Dynebolic</xsl:when> ++ <xsl:when test="@OSType='venenux'">Venenux</xsl:when> + </xsl:choose> + </xsl:attribute> + <xsl:apply-templates select="@*[name()!='OSType']" mode="v1.5"/> +--- VirtualBox-4.1.18.orig/src/VBox/Main/xml/VirtualBox-settings-common.xsd 2012-07-25 15:04:37.856003691 -0300 ++++ VirtualBox-4.1.18/src/VBox/Main/xml/VirtualBox-settings-common.xsd 2012-07-25 15:04:37.892668156 -0300 +@@ -137,75 +137,27 @@ + <xsd:simpleType name="TGuestOSType"> + <xsd:restriction base="xsd:string"> + <xsd:enumeration value="Other"/> +- <xsd:enumeration value="DOS"/> +- <xsd:enumeration value="Netware"/> +- <xsd:enumeration value="L4"/> +- <xsd:enumeration value="Windows31"/> +- <xsd:enumeration value="Windows95"/> +- <xsd:enumeration value="Windows98"/> +- <xsd:enumeration value="WindowsMe"/> +- <xsd:enumeration value="WindowsNT4"/> +- <xsd:enumeration value="Windows2000"/> +- <xsd:enumeration value="WindowsXP"/> +- <xsd:enumeration value="WindowsXP_64"/> +- <xsd:enumeration value="Windows2003"/> +- <xsd:enumeration value="Windows2003_64"/> +- <xsd:enumeration value="WindowsVista"/> +- <xsd:enumeration value="WindowsVista_64"/> +- <xsd:enumeration value="Windows2008"/> +- <xsd:enumeration value="Windows2008_64"/> +- <xsd:enumeration value="Windows7"/> +- <xsd:enumeration value="Windows7_64"/> +- <xsd:enumeration value="Windows8"/> +- <xsd:enumeration value="Windows8_64"/> +- <xsd:enumeration value="WindowsNT"/> +- <xsd:enumeration value="OS2Warp3"/> +- <xsd:enumeration value="OS2Warp4"/> +- <xsd:enumeration value="OS2Warp45"/> +- <xsd:enumeration value="OS2eCS"/> +- <xsd:enumeration value="OS2"/> +- <xsd:enumeration value="Linux22"/> +- <xsd:enumeration value="Linux24"/> +- <xsd:enumeration value="Linux24_64"/> +- <xsd:enumeration value="Linux26"/> +- <xsd:enumeration value="Linux26_64"/> +- <xsd:enumeration value="ArchLinux"/> +- <xsd:enumeration value="ArchLinux_64"/> +- <xsd:enumeration value="Debian"/> +- <xsd:enumeration value="Debian_64"/> +- <xsd:enumeration value="OpenSUSE"/> +- <xsd:enumeration value="OpenSUSE_64"/> +- <xsd:enumeration value="Fedora"/> +- <xsd:enumeration value="Fedora_64"/> +- <xsd:enumeration value="Gentoo"/> +- <xsd:enumeration value="Gentoo_64"/> +- <xsd:enumeration value="Mandriva"/> +- <xsd:enumeration value="Mandriva_64"/> +- <xsd:enumeration value="RedHat"/> +- <xsd:enumeration value="RedHat_64"/> +- <xsd:enumeration value="Turbolinux"/> +- <xsd:enumeration value="Turbolinux_64"/> +- <xsd:enumeration value="Ubuntu"/> +- <xsd:enumeration value="Ubuntu_64"/> +- <xsd:enumeration value="Xandros"/> +- <xsd:enumeration value="Xandros_64"/> +- <xsd:enumeration value="Oracle"/> +- <xsd:enumeration value="Oracle_64"/> +- <xsd:enumeration value="Linux"/> +- <xsd:enumeration value="FreeBSD"/> +- <xsd:enumeration value="FreeBSD_64"/> +- <xsd:enumeration value="OpenBSD"/> +- <xsd:enumeration value="OpenBSD_64"/> +- <xsd:enumeration value="NetBSD"/> +- <xsd:enumeration value="NetBSD_64"/> +- <xsd:enumeration value="Solaris"/> +- <xsd:enumeration value="Solaris_64"/> +- <xsd:enumeration value="OpenSolaris"/> +- <xsd:enumeration value="OpenSolaris_64"/> +- <xsd:enumeration value="QNX"/> +- <xsd:enumeration value="MacOS"/> +- <xsd:enumeration value="MacOS_64"/> +- <xsd:enumeration value="JRockitVE"/> ++ <xsd:enumeration value="GNU"/> ++ <xsd:enumeration value="GNU_64"/> ++ <xsd:enumeration value="GNUHurd"/> ++ <xsd:enumeration value="GNULinux"/> ++ <xsd:enumeration value="GNULinux_64"/> ++ <xsd:enumeration value="Parabola"/> ++ <xsd:enumeration value="Parabola_64"/> ++ <xsd:enumeration value="gNewSense"/> ++ <xsd:enumeration value="gNewSense_64"/> ++ <xsd:enumeration value="Blag"/> ++ <xsd:enumeration value="Blag_64"/> ++ <xsd:enumeration value="Dragora"/> ++ <xsd:enumeration value="Dragora_64"/> ++ <xsd:enumeration value="Ututo"/> ++ <xsd:enumeration value="Ututo_64"/> ++ <xsd:enumeration value="Musix"/> ++ <xsd:enumeration value="Musix_64"/> ++ <xsd:enumeration value="Trisquel"/> ++ <xsd:enumeration value="Trisquel_64"/> ++ <xsd:enumeration value="Dynebolic"/> ++ <xsd:enumeration value="Venenux"/> + </xsd:restriction> + </xsd:simpleType> + +--- VirtualBox-4.1.18.orig/src/VBox/Frontends/VirtualBox/VirtualBox2.qrc 2012-07-25 15:40:56.733096866 -0300 ++++ VirtualBox-4.1.18/src/VBox/Frontends/VirtualBox/VirtualBox2.qrc 2012-07-25 15:40:56.796426519 -0300 +@@ -1,75 +1,27 @@ + <!DOCTYPE RCC><RCC version="1.0"> + <qresource prefix="/"> +- <file alias="os_archlinux.png">images/os_archlinux.png</file> +- <file alias="os_archlinux_64.png">images/os_archlinux_64.png</file> +- <file alias="os_debian.png">images/os_debian.png</file> +- <file alias="os_debian_64.png">images/os_debian_64.png</file> +- <file alias="os_dos.png">images/os_dos.png</file> +- <file alias="os_fedora.png">images/os_fedora.png</file> +- <file alias="os_fedora_64.png">images/os_fedora_64.png</file> +- <file alias="os_freebsd.png">images/os_freebsd.png</file> +- <file alias="os_freebsd_64.png">images/os_freebsd_64.png</file> +- <file alias="os_gentoo.png">images/os_gentoo.png</file> +- <file alias="os_gentoo_64.png">images/os_gentoo_64.png</file> +- <file alias="os_jrockitve.png">images/os_jrockitve.png</file> +- <file alias="os_l4.png">images/os_l4.png</file> +- <file alias="os_linux_other.png">images/os_linux_other.png</file> +- <file alias="os_linux22.png">images/os_linux22.png</file> +- <file alias="os_linux24.png">images/os_linux24.png</file> +- <file alias="os_linux24_64.png">images/os_linux24_64.png</file> +- <file alias="os_linux26.png">images/os_linux26.png</file> +- <file alias="os_linux26_64.png">images/os_linux26_64.png</file> +- <file alias="os_mandriva.png">images/os_mandriva.png</file> +- <file alias="os_mandriva_64.png">images/os_mandriva_64.png</file> +- <file alias="os_netbsd.png">images/os_netbsd.png</file> +- <file alias="os_netbsd_64.png">images/os_netbsd_64.png</file> +- <file alias="os_netware.png">images/os_netware.png</file> +- <file alias="os_openbsd.png">images/os_openbsd.png</file> +- <file alias="os_openbsd_64.png">images/os_openbsd_64.png</file> +- <file alias="os_oraclesolaris.png">images/os_oraclesolaris.png</file> +- <file alias="os_oraclesolaris_64.png">images/os_oraclesolaris_64.png</file> +- <file alias="os_opensuse.png">images/os_opensuse.png</file> +- <file alias="os_opensuse_64.png">images/os_opensuse_64.png</file> +- <file alias="os_os2_other.png">images/os_os2_other.png</file> +- <file alias="os_os2ecs.png">images/os_os2ecs.png</file> +- <file alias="os_os2warp3.png">images/os_os2warp3.png</file> +- <file alias="os_os2warp4.png">images/os_os2warp4.png</file> +- <file alias="os_os2warp45.png">images/os_os2warp45.png</file> ++ <file alias="os_parabola.png">images/os_parabola.png</file> ++ <file alias="os_parabola_64.png">images/os_parabola_64.png</file> ++ <file alias="os_gnewsense.png">images/os_gnewsense.png</file> ++ <file alias="os_gnewsense_64.png">images/os_gnewsense_64.png</file> ++ <file alias="os_blag.png">images/os_blag.png</file> ++ <file alias="os_blag_64.png">images/os_blag_64.png</file> ++ <file alias="os_ututo.png">images/os_ututo.png</file> ++ <file alias="os_ututo_64.png">images/os_ututo_64.png</file> ++ <file alias="os_gnu.png">images/os_gnu.png</file> ++ <file alias="os_gnu_64.png">images/os_gnu_64.png</file> ++ <file alias="os_gnuhurd.png">images/os_gnuhurd.png</file> ++ <file alias="os_gnulinux.png">images/os_gnulinux.png</file> ++ <file alias="os_gnulinux_64.png">images/os_gnulinux_64.png</file> ++ <file alias="os_musix.png">images/os_musix.png</file> ++ <file alias="os_musix_64.png">images/os_musix_64.png</file> ++ <file alias="os_dragora.png">images/os_dragora.png</file> ++ <file alias="os_dragora_64.png">images/os_dragora_64.png</file> + <file alias="os_other.png">images/os_other.png</file> +- <file alias="os_qnx.png">images/os_qnx.png</file> +- <file alias="os_redhat.png">images/os_redhat.png</file> +- <file alias="os_redhat_64.png">images/os_redhat_64.png</file> +- <file alias="os_turbolinux.png">images/os_turbolinux.png</file> +- <file alias="os_turbolinux_64.png">images/os_turbolinux_64.png</file> +- <file alias="os_solaris.png">images/os_solaris.png</file> +- <file alias="os_solaris_64.png">images/os_solaris_64.png</file> +- <file alias="os_ubuntu.png">images/os_ubuntu.png</file> +- <file alias="os_ubuntu_64.png">images/os_ubuntu_64.png</file> +- <file alias="os_win_other.png">images/os_win_other.png</file> +- <file alias="os_win2k.png">images/os_win2k.png</file> +- <file alias="os_win2k3.png">images/os_win2k3.png</file> +- <file alias="os_win2k3_64.png">images/os_win2k3_64.png</file> +- <file alias="os_win2k8.png">images/os_win2k8.png</file> +- <file alias="os_win2k8_64.png">images/os_win2k8_64.png</file> +- <file alias="os_win31.png">images/os_win31.png</file> +- <file alias="os_win7.png">images/os_win7.png</file> +- <file alias="os_win7_64.png">images/os_win7_64.png</file> +- <file alias="os_win8.png">images/os_win8.png</file> +- <file alias="os_win8_64.png">images/os_win8_64.png</file> +- <file alias="os_win95.png">images/os_win95.png</file> +- <file alias="os_win98.png">images/os_win98.png</file> +- <file alias="os_winme.png">images/os_winme.png</file> +- <file alias="os_winnt4.png">images/os_winnt4.png</file> +- <file alias="os_winvista.png">images/os_winvista.png</file> +- <file alias="os_winvista_64.png">images/os_winvista_64.png</file> +- <file alias="os_winxp.png">images/os_winxp.png</file> +- <file alias="os_winxp_64.png">images/os_winxp_64.png</file> +- <file alias="os_xandros.png">images/os_xandros.png</file> +- <file alias="os_xandros_64.png">images/os_xandros_64.png</file> +- <file alias="os_oracle.png">images/os_oracle.png</file> +- <file alias="os_oracle_64.png">images/os_oracle_64.png</file> +- <file alias="os_macosx.png">images/os_macosx.png</file> +- <file alias="os_macosx_64.png">images/os_macosx_64.png</file> ++ <file alias="os_dynebolic.png">images/os_dynebolic.png</file> ++ <file alias="os_venenux.png">images/os_venenux.png</file> ++ <file alias="os_trisquel.png">images/os_trisquel.png</file> ++ <file alias="os_trisquel_64.png">images/os_trisquel_64.png</file> + <file alias="hd_16px.png">images/hd_16px.png</file> + <file alias="hd_disabled_16px.png">images/hd_disabled_16px.png</file> + <file alias="hd_32px.png">images/hd_32px.png</file> +--- VirtualBox-4.1.18.orig/src/VBox/Main/src-all/Global.cpp 2012-06-20 10:17:34.000000000 -0300 ++++ VirtualBox-4.1.18/src/VBox/Main/src-all/Global.cpp 2012-07-25 19:32:44.482993976 -0300 +@@ -35,284 +35,90 @@ + VBOXOSTYPE_Unknown, VBOXOSHINT_NONE, + 64, 4, 2 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE, + StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows31, "Windows 3.1", +- VBOXOSTYPE_Win31, VBOXOSHINT_NONE, +- 32, 4, 1 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_SB16 }, +- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows95, "Windows 95", +- VBOXOSTYPE_Win95, VBOXOSHINT_NONE, +- 64, 4, 2 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows98, "Windows 98", +- VBOXOSTYPE_Win98, VBOXOSHINT_NONE, +- 64, 4, 2 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_WindowsMe, "Windows Me", +- VBOXOSTYPE_WinMe, VBOXOSHINT_NONE, +- 64, 4, 4 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_WindowsNT4, "Windows NT 4", +- VBOXOSTYPE_WinNT4, VBOXOSHINT_NONE, +- 128, 16, 2 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows2000, "Windows 2000", +- VBOXOSTYPE_Win2k, VBOXOSHINT_USBTABLET, +- 168, 16, 4 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_WindowsXP, "Windows XP", +- VBOXOSTYPE_WinXP, VBOXOSHINT_USBTABLET, +- 192, 16, 10 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_WindowsXP_64, "Windows XP (64 bit)", +- VBOXOSTYPE_WinXP_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET, +- 192, 16, 10 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows2003, "Windows 2003", +- VBOXOSTYPE_Win2k3, VBOXOSHINT_USBTABLET, +- 256, 16, 20 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows2003_64, "Windows 2003 (64 bit)", +- VBOXOSTYPE_Win2k3_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET, +- 256, 16, 20 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_HDA }, +- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_WindowsVista, "Windows Vista", +- VBOXOSTYPE_WinVista, VBOXOSHINT_USBTABLET, +- 512, 16, 25 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA }, +- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_WindowsVista_64, "Windows Vista (64 bit)", +- VBOXOSTYPE_WinVista_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET, +- 512, 16, 25 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA }, +- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows2008, "Windows 2008", +- VBOXOSTYPE_Win2k8, VBOXOSHINT_USBTABLET, +- 512, 16, 25 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA }, +- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows2008_64, "Windows 2008 (64 bit)", +- VBOXOSTYPE_Win2k8_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET, +- 512, 16, 25 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA }, +- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows7, "Windows 7", +- VBOXOSTYPE_Win7, VBOXOSHINT_USBTABLET, +- 512, 16, 25 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA }, +- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows7_64, "Windows 7 (64 bit)", +- VBOXOSTYPE_Win7_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET, +- 512, 16, 25 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA }, +- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows8, "Windows 8", +- VBOXOSTYPE_Win8, VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET | VBOXOSHINT_PAE, +- 1024,128, 25 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA }, +- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows8_64, "Windows 8 (64 bit)", +- VBOXOSTYPE_Win8_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET, +- 1536,128, 25 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA }, +- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_WindowsNT, "Other Windows", +- VBOXOSTYPE_WinNT, VBOXOSHINT_NONE, +- 512, 16, 20 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Linux22, "Linux 2.2", +- VBOXOSTYPE_Linux22, VBOXOSHINT_RTCUTC, +- 64, 4, 2 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Linux24, "Linux 2.4", +- VBOXOSTYPE_Linux24, VBOXOSHINT_RTCUTC, +- 128, 4, 4 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Linux24_64, "Linux 2.4 (64 bit)", +- VBOXOSTYPE_Linux24_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC, +- 128, 4, 4 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, ++ { "GNU", "GNU", SchemaDefs_OSTypeId_GNU, "GNU", ++ VBOXOSTYPE_GNU, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, ++ 256, 4, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, ++ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, ++ { "GNU", "GNU", SchemaDefs_OSTypeId_GNU_64, "GNU (64 bit)", ++ VBOXOSTYPE_GNU_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, ++ 256, 4, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, ++ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, ++ { "GNU-Hurd", "GNU-Hurd", SchemaDefs_OSTypeId_GNUHurd, "GNU-Hurd", ++ VBOXOSTYPE_GNUHurd, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, ++ 256, 4, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, + StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Linux26, "Linux 2.6", +- VBOXOSTYPE_Linux26, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, ++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_GNULinux, "GNU/Linux", ++ VBOXOSTYPE_GNULinux, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, + 256, 4, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, + StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Linux26_64, "Linux 2.6 (64 bit)", +- VBOXOSTYPE_Linux26_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, ++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_GNULinux_64, "GNU/Linux (64 bit)", ++ VBOXOSTYPE_GNULinux_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, + 256, 4, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, + StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_ArchLinux, "Arch Linux", +- VBOXOSTYPE_ArchLinux, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, ++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Parabola, "Parabola GNU/Linux-libre", ++ VBOXOSTYPE_Parabola, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, + 256, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, + StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_ArchLinux_64, "Arch Linux (64 bit)", +- VBOXOSTYPE_ArchLinux_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, ++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Parabola_64, "Parabola GNU/Linux-libre (64 bit)", ++ VBOXOSTYPE_Parabola_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, + 256, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, + StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Debian, "Debian", +- VBOXOSTYPE_Debian, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, ++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_gNewSense, "gNewSense", ++ VBOXOSTYPE_gNewSense, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, + 384, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, + StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Debian_64, "Debian (64 bit)", +- VBOXOSTYPE_Debian_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, ++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_gNewSense_64, "gNewSense (64 bit)", ++ VBOXOSTYPE_gNewSense_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, + 384, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, + StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97}, +- { "Linux", "Linux", SchemaDefs_OSTypeId_OpenSUSE, "openSUSE", +- VBOXOSTYPE_OpenSUSE, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, +- 512, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_OpenSUSE_64, "openSUSE (64 bit)", +- VBOXOSTYPE_OpenSUSE_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, +- 512, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Fedora, "Fedora", +- VBOXOSTYPE_FedoraCore, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, ++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Blag, "Blag Linux and GNU", ++ VBOXOSTYPE_Blag, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, + 768, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, + StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Fedora_64, "Fedora (64 bit)", +- VBOXOSTYPE_FedoraCore_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, ++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Blag_64, "Blag Linux and GNU (64 bit)", ++ VBOXOSTYPE_Blag_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, + 768, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, + StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Gentoo, "Gentoo", +- VBOXOSTYPE_Gentoo, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, ++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Dragora, "Dragora", ++ VBOXOSTYPE_Dragora, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, + 256, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, + StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Gentoo_64, "Gentoo (64 bit)", +- VBOXOSTYPE_Gentoo_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, ++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Dragora_64, "Dragora (64 bit)", ++ VBOXOSTYPE_Dragora_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, + 256, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, + StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Mandriva, "Mandriva", +- VBOXOSTYPE_Mandriva, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, +- 512, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Mandriva_64, "Mandriva (64 bit)", +- VBOXOSTYPE_Mandriva_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, +- 512, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_RedHat, "Red Hat", +- VBOXOSTYPE_RedHat, VBOXOSHINT_RTCUTC | VBOXOSHINT_PAE, +- 512, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, ++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Ututo, "Ututo XS", ++ VBOXOSTYPE_Ututo, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, ++ 256, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, + StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_RedHat_64, "Red Hat (64 bit)", +- VBOXOSTYPE_RedHat_x64, VBOXOSHINT_64BIT | VBOXOSHINT_PAE | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC, +- 512, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, ++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Ututo_64, "Ututo XS (64 bit)", ++ VBOXOSTYPE_Ututo_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, ++ 256, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, + StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Turbolinux, "Turbolinux", +- VBOXOSTYPE_Turbolinux, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, ++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Musix, "Musix", ++ VBOXOSTYPE_Musix, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, + 384, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, + StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Turbolinux, "Turbolinux (64 bit)", +- VBOXOSTYPE_Turbolinux_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, ++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Musix_64, "Musix (64 bit)", ++ VBOXOSTYPE_Musix_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, + 384, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Ubuntu, "Ubuntu", +- VBOXOSTYPE_Ubuntu, VBOXOSHINT_RTCUTC | VBOXOSHINT_PAE | VBOXOSHINT_USBTABLET, ++ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97}, ++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Trisquel, "Trisquel", ++ VBOXOSTYPE_Trisquel, VBOXOSHINT_RTCUTC | VBOXOSHINT_PAE | VBOXOSHINT_USBTABLET, + 512, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, + StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Ubuntu_64, "Ubuntu (64 bit)", +- VBOXOSTYPE_Ubuntu_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, ++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Trisquel_64, "Trisquel (64 bit)", ++ VBOXOSTYPE_Trisquel_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, + 512, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, + StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Xandros, "Xandros", +- VBOXOSTYPE_Xandros, VBOXOSHINT_RTCUTC, +- 256, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Xandros_64, "Xandros (64 bit)", +- VBOXOSTYPE_Xandros_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC, +- 256, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Oracle, "Oracle", +- VBOXOSTYPE_Oracle, VBOXOSHINT_RTCUTC | VBOXOSHINT_PAE, +- 512, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, ++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Dynebolic, "Dyne:bolic", ++ VBOXOSTYPE_Dynebolic, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, ++ 256, 4, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, + StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Oracle_64, "Oracle (64 bit)", +- VBOXOSTYPE_Oracle_x64, VBOXOSHINT_64BIT | VBOXOSHINT_PAE | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC, +- 512, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, ++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Venenux, "Venenux", ++ VBOXOSTYPE_Venenux, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, ++ 384, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, + StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Linux, "Other Linux", +- VBOXOSTYPE_Linux, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, +- 256, 12, 8 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Solaris", "Solaris", SchemaDefs_OSTypeId_Solaris, "Oracle Solaris 10 5/09 and earlier", +- VBOXOSTYPE_Solaris, VBOXOSHINT_NONE, +- 768, 12, 16 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Solaris", "Solaris", SchemaDefs_OSTypeId_Solaris_64, "Oracle Solaris 10 5/09 and earlier (64 bit)", +- VBOXOSTYPE_Solaris_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC, +- 1536, 12, 16 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Solaris", "Solaris", SchemaDefs_OSTypeId_OpenSolaris, "Oracle Solaris 10 10/09 and later", +- VBOXOSTYPE_OpenSolaris, VBOXOSHINT_USBTABLET, +- 768, 12, 16 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_IntelAhci, StorageBus_SATA, +- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Solaris", "Solaris", SchemaDefs_OSTypeId_OpenSolaris_64, "Oracle Solaris 10 10/09 and later (64 bit)", +- VBOXOSTYPE_OpenSolaris_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET, +- 1536, 12, 16 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_IntelAhci, StorageBus_SATA, +- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "BSD", "BSD", SchemaDefs_OSTypeId_FreeBSD, "FreeBSD", +- VBOXOSTYPE_FreeBSD, VBOXOSHINT_NONE, +- 128, 4, 2 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "BSD", "BSD", SchemaDefs_OSTypeId_FreeBSD_64, "FreeBSD (64 bit)", +- VBOXOSTYPE_FreeBSD_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC, +- 128, 4, 2 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "BSD", "BSD", SchemaDefs_OSTypeId_OpenBSD, "OpenBSD", +- VBOXOSTYPE_OpenBSD, VBOXOSHINT_HWVIRTEX, +- 64, 4, 2 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "BSD", "BSD", SchemaDefs_OSTypeId_OpenBSD_64, "OpenBSD (64 bit)", +- VBOXOSTYPE_OpenBSD_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC, +- 64, 4, 2 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "BSD", "BSD", SchemaDefs_OSTypeId_NetBSD, "NetBSD", +- VBOXOSTYPE_NetBSD, VBOXOSHINT_NONE, +- 64, 4, 2 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "BSD", "BSD", SchemaDefs_OSTypeId_NetBSD_64, "NetBSD (64 bit)", +- VBOXOSTYPE_NetBSD_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC, +- 64, 4, 2 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "OS2", "IBM OS/2", SchemaDefs_OSTypeId_OS2Warp3, "OS/2 Warp 3", +- VBOXOSTYPE_OS2Warp3, VBOXOSHINT_HWVIRTEX, +- 48, 4, 1 * _1G64, NetworkAdapterType_Am79C973, 1, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "OS2", "IBM OS/2", SchemaDefs_OSTypeId_OS2Warp4, "OS/2 Warp 4", +- VBOXOSTYPE_OS2Warp4, VBOXOSHINT_HWVIRTEX, +- 64, 4, 2 * _1G64, NetworkAdapterType_Am79C973, 1, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "OS2", "IBM OS/2", SchemaDefs_OSTypeId_OS2Warp45, "OS/2 Warp 4.5", +- VBOXOSTYPE_OS2Warp45, VBOXOSHINT_HWVIRTEX, +- 96, 4, 2 * _1G64, NetworkAdapterType_Am79C973, 1, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "OS2", "IBM OS/2", SchemaDefs_OSTypeId_OS2eCS, "eComStation", +- VBOXOSTYPE_ECS, VBOXOSHINT_HWVIRTEX, +- 96, 4, 2 * _1G64, NetworkAdapterType_Am79C973, 1, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "OS2", "IBM OS/2", SchemaDefs_OSTypeId_OS2, "Other OS/2", +- VBOXOSTYPE_OS2, VBOXOSHINT_HWVIRTEX, +- 96, 4, 2 * _1G64, NetworkAdapterType_Am79C973, 1, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "MacOS", "Mac OS X", SchemaDefs_OSTypeId_MacOS, "Mac OS X Server", +- VBOXOSTYPE_MacOS, VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_EFI | VBOXOSHINT_PAE | VBOXOSHINT_USBHID | VBOXOSHINT_HPET | VBOXOSHINT_USBTABLET, +- 1024, 4, 20 * _1G64, NetworkAdapterType_I82543GC, 0, +- StorageControllerType_ICH6, StorageBus_IDE, StorageControllerType_IntelAhci, StorageBus_SATA, +- ChipsetType_ICH9, AudioControllerType_HDA }, +- { "MacOS", "Mac OS X", SchemaDefs_OSTypeId_MacOS_64, "Mac OS X Server (64 bit)", +- VBOXOSTYPE_MacOS_x64, VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_EFI | VBOXOSHINT_PAE | VBOXOSHINT_64BIT | VBOXOSHINT_USBHID | VBOXOSHINT_HPET | VBOXOSHINT_USBTABLET, +- 1024, 4, 20 * _1G64, NetworkAdapterType_I82543GC, 0, +- StorageControllerType_ICH6, StorageBus_IDE, StorageControllerType_IntelAhci, StorageBus_SATA, +- ChipsetType_ICH9, AudioControllerType_HDA }, +- { "Other", "Other", SchemaDefs_OSTypeId_DOS, "DOS", +- VBOXOSTYPE_DOS, VBOXOSHINT_NONE, +- 32, 4, 500 * _1M, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_SB16 }, +- { "Other", "Other", SchemaDefs_OSTypeId_Netware, "Netware", +- VBOXOSTYPE_Netware, VBOXOSHINT_HWVIRTEX, +- 512, 4, 4 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Other", "Other", SchemaDefs_OSTypeId_L4, "L4", +- VBOXOSTYPE_L4, VBOXOSHINT_NONE, +- 64, 4, 2 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Other", "Other", SchemaDefs_OSTypeId_QNX, "QNX", +- VBOXOSTYPE_QNX, VBOXOSHINT_HWVIRTEX, +- 512, 4, 4 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Other", "Other", SchemaDefs_OSTypeId_JRockitVE, "JRockitVE", +- VBOXOSTYPE_JRockitVE, VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_PAE, +- 1024, 4, 8 * _1G64, NetworkAdapterType_I82545EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_BusLogic, StorageBus_SCSI, ChipsetType_PIIX3, AudioControllerType_AC97 }, + }; + + /** +--- VirtualBox-4.1.18.orig/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp 2012-07-25 21:44:01.290876720 -0300 ++++ VirtualBox-4.1.18/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp 2012-07-25 22:00:57.819380802 -0300 +@@ -4875,75 +4875,27 @@ + static const char *kOSTypeIcons [][2] = + { + {"Other", ":/os_other.png"}, +- {"DOS", ":/os_dos.png"}, +- {"Netware", ":/os_netware.png"}, +- {"L4", ":/os_l4.png"}, +- {"Windows31", ":/os_win31.png"}, +- {"Windows95", ":/os_win95.png"}, +- {"Windows98", ":/os_win98.png"}, +- {"WindowsMe", ":/os_winme.png"}, +- {"WindowsNT4", ":/os_winnt4.png"}, +- {"Windows2000", ":/os_win2k.png"}, +- {"WindowsXP", ":/os_winxp.png"}, +- {"WindowsXP_64", ":/os_winxp_64.png"}, +- {"Windows2003", ":/os_win2k3.png"}, +- {"Windows2003_64", ":/os_win2k3_64.png"}, +- {"WindowsVista", ":/os_winvista.png"}, +- {"WindowsVista_64", ":/os_winvista_64.png"}, +- {"Windows2008", ":/os_win2k8.png"}, +- {"Windows2008_64", ":/os_win2k8_64.png"}, +- {"Windows7", ":/os_win7.png"}, +- {"Windows7_64", ":/os_win7_64.png"}, +- {"Windows8", ":/os_win8.png"}, +- {"Windows8_64", ":/os_win8_64.png"}, +- {"WindowsNT", ":/os_win_other.png"}, +- {"OS2Warp3", ":/os_os2warp3.png"}, +- {"OS2Warp4", ":/os_os2warp4.png"}, +- {"OS2Warp45", ":/os_os2warp45.png"}, +- {"OS2eCS", ":/os_os2ecs.png"}, +- {"OS2", ":/os_os2_other.png"}, +- {"Linux22", ":/os_linux22.png"}, +- {"Linux24", ":/os_linux24.png"}, +- {"Linux24_64", ":/os_linux24_64.png"}, +- {"Linux26", ":/os_linux26.png"}, +- {"Linux26_64", ":/os_linux26_64.png"}, +- {"ArchLinux", ":/os_archlinux.png"}, +- {"ArchLinux_64", ":/os_archlinux_64.png"}, +- {"Debian", ":/os_debian.png"}, +- {"Debian_64", ":/os_debian_64.png"}, +- {"OpenSUSE", ":/os_opensuse.png"}, +- {"OpenSUSE_64", ":/os_opensuse_64.png"}, +- {"Fedora", ":/os_fedora.png"}, +- {"Fedora_64", ":/os_fedora_64.png"}, +- {"Gentoo", ":/os_gentoo.png"}, +- {"Gentoo_64", ":/os_gentoo_64.png"}, +- {"Mandriva", ":/os_mandriva.png"}, +- {"Mandriva_64", ":/os_mandriva_64.png"}, +- {"RedHat", ":/os_redhat.png"}, +- {"RedHat_64", ":/os_redhat_64.png"}, +- {"Turbolinux", ":/os_turbolinux.png"}, +- {"Turbolinux_64", ":/os_turbolinux_64.png"}, +- {"Ubuntu", ":/os_ubuntu.png"}, +- {"Ubuntu_64", ":/os_ubuntu_64.png"}, +- {"Xandros", ":/os_xandros.png"}, +- {"Xandros_64", ":/os_xandros_64.png"}, +- {"Oracle", ":/os_oracle.png"}, +- {"Oracle_64", ":/os_oracle_64.png"}, +- {"Linux", ":/os_linux_other.png"}, +- {"FreeBSD", ":/os_freebsd.png"}, +- {"FreeBSD_64", ":/os_freebsd_64.png"}, +- {"OpenBSD", ":/os_openbsd.png"}, +- {"OpenBSD_64", ":/os_openbsd_64.png"}, +- {"NetBSD", ":/os_netbsd.png"}, +- {"NetBSD_64", ":/os_netbsd_64.png"}, +- {"Solaris", ":/os_solaris.png"}, +- {"Solaris_64", ":/os_solaris_64.png"}, +- {"OpenSolaris", ":/os_oraclesolaris.png"}, +- {"OpenSolaris_64", ":/os_oraclesolaris_64.png"}, +- {"QNX", ":/os_qnx.png"}, +- {"MacOS", ":/os_macosx.png"}, +- {"MacOS_64", ":/os_macosx_64.png"}, +- {"JRockitVE", ":/os_jrockitve.png"}, ++ {"GNU", ":/os_gnu.png"}, ++ {"GNU_64", ":/os_gnu_64.png"}, ++ {"GNUHurd", ":/os_gnuhurd.png"}, ++ {"GNULinux", ":/os_gnulinux.png"}, ++ {"GNULinux_64", ":/os_gnulinux_64.png"}, ++ {"Parabola", ":/os_parabola.png"}, ++ {"Parabola_64", ":/os_parabola_64.png"}, ++ {"gNewSense", ":/os_gnewsense.png"}, ++ {"gNewSense_64", ":/os_gnewsense_64.png"}, ++ {"Blag", ":/os_blag.png"}, ++ {"Blag_64", ":/os_blag_64.png"}, ++ {"Dragora", ":/os_dragora.png"}, ++ {"Dragora_64", ":/os_dragora_64.png"}, ++ {"Ututo", ":/os_ututo.png"}, ++ {"Ututo_64", ":/os_ututo_64.png"}, ++ {"Musix", ":/os_musix.png"}, ++ {"Musix_64", ":/os_musix_64.png"}, ++ {"Trisquel", ":/os_trisquel.png"}, ++ {"Trisquel_64", ":/os_trisquel_64.png"}, ++ {"Dynebolic", ":/os_dynebolic.png"}, ++ {"Venenux", ":/os_venenux.png"}, + }; + for (uint n = 0; n < SIZEOF_ARRAY (kOSTypeIcons); ++ n) + { +--- VirtualBox-4.1.18.orig/src/VBox/Frontends/VirtualBox/src/widgets/VBoxOSTypeSelectorWidget.cpp.orig 2012-06-20 10:16:38.000000000 -0300 ++++ VirtualBox-4.1.18/src/VBox/Frontends/VirtualBox/src/widgets/VBoxOSTypeSelectorWidget.cpp 2012-07-25 22:07:51.232436783 -0300 +@@ -192,17 +192,10 @@ + if (typeIndex != -1) + mCbType->setCurrentIndex (typeIndex); + } +- /* Or select WinXP item for Windows family as default */ +- else if (familyId == "Windows") ++ /* Or select Parabola GNU/Linux-libre item for GNU/Linux family as default */ ++ else if (familyId == "GNU/Linux") + { +- int xpIndex = mCbType->findData ("WindowsXP", RoleTypeID); +- if (xpIndex != -1) +- mCbType->setCurrentIndex (xpIndex); +- } +- /* Or select Ubuntu item for Linux family as default */ +- else if (familyId == "Linux") +- { +- int ubIndex = mCbType->findData ("Ubuntu", RoleTypeID); ++ int ubIndex = mCbType->findData ("Parabola", RoleTypeID); + if (ubIndex != -1) + mCbType->setCurrentIndex (ubIndex); + } +--- VirtualBox-4.1.18.orig/include/VBox/ostypes.h 2012-06-20 10:07:51.000000000 -0300 ++++ VirtualBox-4.1.18/include/VBox/ostypes.h 2012-07-25 23:20:57.322757456 -0300 +@@ -43,77 +43,27 @@ + typedef enum VBOXOSTYPE + { + VBOXOSTYPE_Unknown = 0, +- VBOXOSTYPE_DOS = 0x10000, +- VBOXOSTYPE_Win31 = 0x15000, +- VBOXOSTYPE_Win9x = 0x20000, +- VBOXOSTYPE_Win95 = 0x21000, +- VBOXOSTYPE_Win98 = 0x22000, +- VBOXOSTYPE_WinMe = 0x23000, +- VBOXOSTYPE_WinNT = 0x30000, +- VBOXOSTYPE_WinNT4 = 0x31000, +- VBOXOSTYPE_Win2k = 0x32000, +- VBOXOSTYPE_WinXP = 0x33000, +- VBOXOSTYPE_WinXP_x64 = 0x33100, +- VBOXOSTYPE_Win2k3 = 0x34000, +- VBOXOSTYPE_Win2k3_x64 = 0x34100, +- VBOXOSTYPE_WinVista = 0x35000, +- VBOXOSTYPE_WinVista_x64 = 0x35100, +- VBOXOSTYPE_Win2k8 = 0x36000, +- VBOXOSTYPE_Win2k8_x64 = 0x36100, +- VBOXOSTYPE_Win7 = 0x37000, +- VBOXOSTYPE_Win7_x64 = 0x37100, +- VBOXOSTYPE_Win8 = 0x38000, +- VBOXOSTYPE_Win8_x64 = 0x38100, +- VBOXOSTYPE_OS2 = 0x40000, +- VBOXOSTYPE_OS2Warp3 = 0x41000, +- VBOXOSTYPE_OS2Warp4 = 0x42000, +- VBOXOSTYPE_OS2Warp45 = 0x43000, +- VBOXOSTYPE_ECS = 0x44000, +- VBOXOSTYPE_Linux = 0x50000, +- VBOXOSTYPE_Linux_x64 = 0x50100, +- VBOXOSTYPE_Linux22 = 0x51000, +- VBOXOSTYPE_Linux24 = 0x52000, +- VBOXOSTYPE_Linux24_x64 = 0x52100, +- VBOXOSTYPE_Linux26 = 0x53000, +- VBOXOSTYPE_Linux26_x64 = 0x53100, +- VBOXOSTYPE_ArchLinux = 0x54000, +- VBOXOSTYPE_ArchLinux_x64 = 0x54100, +- VBOXOSTYPE_Debian = 0x55000, +- VBOXOSTYPE_Debian_x64 = 0x55100, +- VBOXOSTYPE_OpenSUSE = 0x56000, +- VBOXOSTYPE_OpenSUSE_x64 = 0x56100, +- VBOXOSTYPE_FedoraCore = 0x57000, +- VBOXOSTYPE_FedoraCore_x64 = 0x57100, +- VBOXOSTYPE_Gentoo = 0x58000, +- VBOXOSTYPE_Gentoo_x64 = 0x58100, +- VBOXOSTYPE_Mandriva = 0x59000, +- VBOXOSTYPE_Mandriva_x64 = 0x59100, +- VBOXOSTYPE_RedHat = 0x5A000, +- VBOXOSTYPE_RedHat_x64 = 0x5A100, +- VBOXOSTYPE_Turbolinux = 0x5B000, +- VBOXOSTYPE_Turbolinux_x64 = 0x5B100, +- VBOXOSTYPE_Ubuntu = 0x5C000, +- VBOXOSTYPE_Ubuntu_x64 = 0x5C100, +- VBOXOSTYPE_Xandros = 0x5D000, +- VBOXOSTYPE_Xandros_x64 = 0x5D100, +- VBOXOSTYPE_Oracle = 0x5E000, +- VBOXOSTYPE_Oracle_x64 = 0x5E100, +- VBOXOSTYPE_FreeBSD = 0x60000, +- VBOXOSTYPE_FreeBSD_x64 = 0x60100, +- VBOXOSTYPE_OpenBSD = 0x61000, +- VBOXOSTYPE_OpenBSD_x64 = 0x61100, +- VBOXOSTYPE_NetBSD = 0x62000, +- VBOXOSTYPE_NetBSD_x64 = 0x62100, +- VBOXOSTYPE_Netware = 0x70000, +- VBOXOSTYPE_Solaris = 0x80000, +- VBOXOSTYPE_Solaris_x64 = 0x80100, +- VBOXOSTYPE_OpenSolaris = 0x81000, +- VBOXOSTYPE_OpenSolaris_x64 = 0x81100, +- VBOXOSTYPE_L4 = 0x90000, +- VBOXOSTYPE_QNX = 0xA0000, +- VBOXOSTYPE_MacOS = 0xB0000, +- VBOXOSTYPE_MacOS_x64 = 0xB0100, +- VBOXOSTYPE_JRockitVE = 0xC0000, ++ VBOXOSTYPE_GNU = 0x10000, ++ VBOXOSTYPE_GNU_x64 = 0x10100, ++ VBOXOSTYPE_GNUHurd = 0x20000, ++ VBOXOSTYPE_GNULinux = 0x30000, ++ VBOXOSTYPE_GNULinux_x64 = 0x30100, ++ VBOXOSTYPE_Parabola = 0x31000, ++ VBOXOSTYPE_Parabola_x64 = 0x31100, ++ VBOXOSTYPE_gNewSense = 0x32000, ++ VBOXOSTYPE_gNewSense_x64 = 0x32100, ++ VBOXOSTYPE_Blag = 0x33000, ++ VBOXOSTYPE_Blag_x64 = 0x33100, ++ VBOXOSTYPE_Dragora = 0x34000, ++ VBOXOSTYPE_Dragora_x64 = 0x34100, ++ VBOXOSTYPE_Ututo = 0x35000, ++ VBOXOSTYPE_Ututo_x64 = 0x35100, ++ VBOXOSTYPE_Musix = 0x36000, ++ VBOXOSTYPE_Musix_x64 = 0x36100, ++ VBOXOSTYPE_Trisquel = 0x37000, ++ VBOXOSTYPE_Trisquel_x64 = 0x37100, ++ VBOXOSTYPE_Dynebolic = 0x38000, ++ VBOXOSTYPE_Venenux = 0x39000, + /** The bit number which indicates 64-bit or 32-bit. */ + #define VBOXOSTYPE_x64_BIT 8 + /** The mask which indicates 64-bit. */ +@@ -129,16 +79,11 @@ + typedef enum VBOXOSFAMILY + { + VBOXOSFAMILY_Unknown = 0, +- VBOXOSFAMILY_Windows32 = 1, +- VBOXOSFAMILY_Windows64 = 2, +- VBOXOSFAMILY_Linux32 = 3, +- VBOXOSFAMILY_Linux64 = 4, +- VBOXOSFAMILY_FreeBSD32 = 5, +- VBOXOSFAMILY_FreeBSD64 = 6, +- VBOXOSFAMILY_Solaris32 = 7, +- VBOXOSFAMILY_Solaris64 = 8, +- VBOXOSFAMILY_MacOSX32 = 9, +- VBOXOSFAMILY_MacOSX64 = 10, ++ VBOXOSFAMILY_GNU32 = 1, ++ VBOXOSFAMILY_GNU64 = 2, ++ VBOXOSFAMILY_GNUHurd = 3, ++ VBOXOSFAMILY_GNULinux32 = 4, ++ VBOXOSFAMILY_GNULinux64 = 5, + /** The usual 32-bit hack. */ + VBOXOSFAMILY_32BIT_HACK = 0x7fffffff + } VBOXOSFAMILY; +--- VirtualBox-4.1.18.orig/src/VBox/Main/src-server/ApplianceImpl.cpp 2012-06-20 10:17:35.000000000 -0300 ++++ VirtualBox-4.1.18/src/VBox/Main/src-server/ApplianceImpl.cpp 2012-07-26 01:28:50.033551279 -0300 +@@ -49,94 +49,33 @@ + g_osTypes[] = + { + { ovf::CIMOSType_CIMOS_Unknown, SchemaDefs_OSTypeId_Other }, +- { ovf::CIMOSType_CIMOS_OS2, SchemaDefs_OSTypeId_OS2 }, +- { ovf::CIMOSType_CIMOS_OS2, SchemaDefs_OSTypeId_OS2Warp3 }, +- { ovf::CIMOSType_CIMOS_OS2, SchemaDefs_OSTypeId_OS2Warp4 }, +- { ovf::CIMOSType_CIMOS_OS2, SchemaDefs_OSTypeId_OS2Warp45 }, +- { ovf::CIMOSType_CIMOS_MSDOS, SchemaDefs_OSTypeId_DOS }, +- { ovf::CIMOSType_CIMOS_WIN3x, SchemaDefs_OSTypeId_Windows31 }, +- { ovf::CIMOSType_CIMOS_WIN95, SchemaDefs_OSTypeId_Windows95 }, +- { ovf::CIMOSType_CIMOS_WIN98, SchemaDefs_OSTypeId_Windows98 }, +- { ovf::CIMOSType_CIMOS_WINNT, SchemaDefs_OSTypeId_WindowsNT }, +- { ovf::CIMOSType_CIMOS_WINNT, SchemaDefs_OSTypeId_WindowsNT4 }, +- { ovf::CIMOSType_CIMOS_NetWare, SchemaDefs_OSTypeId_Netware }, +- { ovf::CIMOSType_CIMOS_NovellOES, SchemaDefs_OSTypeId_Netware }, +- { ovf::CIMOSType_CIMOS_Solaris, SchemaDefs_OSTypeId_Solaris }, +- { ovf::CIMOSType_CIMOS_SunOS, SchemaDefs_OSTypeId_Solaris }, +- { ovf::CIMOSType_CIMOS_FreeBSD, SchemaDefs_OSTypeId_FreeBSD }, +- { ovf::CIMOSType_CIMOS_NetBSD, SchemaDefs_OSTypeId_NetBSD }, +- { ovf::CIMOSType_CIMOS_QNX, SchemaDefs_OSTypeId_QNX }, +- { ovf::CIMOSType_CIMOS_Windows2000, SchemaDefs_OSTypeId_Windows2000 }, +- { ovf::CIMOSType_CIMOS_WindowsMe, SchemaDefs_OSTypeId_WindowsMe }, +- { ovf::CIMOSType_CIMOS_OpenBSD, SchemaDefs_OSTypeId_OpenBSD }, +- { ovf::CIMOSType_CIMOS_WindowsXP, SchemaDefs_OSTypeId_WindowsXP }, +- { ovf::CIMOSType_CIMOS_WindowsXPEmbedded, SchemaDefs_OSTypeId_WindowsXP }, +- { ovf::CIMOSType_CIMOS_WindowsEmbeddedforPointofService, SchemaDefs_OSTypeId_WindowsXP }, +- { ovf::CIMOSType_CIMOS_MicrosoftWindowsServer2003, SchemaDefs_OSTypeId_Windows2003 }, +- { ovf::CIMOSType_CIMOS_MicrosoftWindowsServer2003_64, SchemaDefs_OSTypeId_Windows2003_64 }, +- { ovf::CIMOSType_CIMOS_WindowsXP_64, SchemaDefs_OSTypeId_WindowsXP_64 }, +- { ovf::CIMOSType_CIMOS_WindowsVista, SchemaDefs_OSTypeId_WindowsVista }, +- { ovf::CIMOSType_CIMOS_WindowsVista_64, SchemaDefs_OSTypeId_WindowsVista_64 }, +- { ovf::CIMOSType_CIMOS_MicrosoftWindowsServer2008, SchemaDefs_OSTypeId_Windows2008 }, +- { ovf::CIMOSType_CIMOS_MicrosoftWindowsServer2008_64, SchemaDefs_OSTypeId_Windows2008_64 }, +- { ovf::CIMOSType_CIMOS_FreeBSD_64, SchemaDefs_OSTypeId_FreeBSD_64 }, +- { ovf::CIMOSType_CIMOS_MACOS, SchemaDefs_OSTypeId_MacOS }, +- { ovf::CIMOSType_CIMOS_MACOS, SchemaDefs_OSTypeId_MacOS_64 }, // there is no CIM 64-bit type for this +- +- // Linuxes +- { ovf::CIMOSType_CIMOS_RedHatEnterpriseLinux, SchemaDefs_OSTypeId_RedHat }, +- { ovf::CIMOSType_CIMOS_RedHatEnterpriseLinux_64, SchemaDefs_OSTypeId_RedHat_64 }, +- { ovf::CIMOSType_CIMOS_Solaris_64, SchemaDefs_OSTypeId_Solaris_64 }, +- { ovf::CIMOSType_CIMOS_SUSE, SchemaDefs_OSTypeId_OpenSUSE }, +- { ovf::CIMOSType_CIMOS_SLES, SchemaDefs_OSTypeId_OpenSUSE }, +- { ovf::CIMOSType_CIMOS_NovellLinuxDesktop, SchemaDefs_OSTypeId_OpenSUSE }, +- { ovf::CIMOSType_CIMOS_SUSE_64, SchemaDefs_OSTypeId_OpenSUSE_64 }, +- { ovf::CIMOSType_CIMOS_SLES_64, SchemaDefs_OSTypeId_OpenSUSE_64 }, +- { ovf::CIMOSType_CIMOS_LINUX, SchemaDefs_OSTypeId_Linux }, +- { ovf::CIMOSType_CIMOS_LINUX, SchemaDefs_OSTypeId_Linux22 }, +- { ovf::CIMOSType_CIMOS_SunJavaDesktopSystem, SchemaDefs_OSTypeId_Linux }, +- { ovf::CIMOSType_CIMOS_TurboLinux, SchemaDefs_OSTypeId_Turbolinux }, +- { ovf::CIMOSType_CIMOS_TurboLinux_64, SchemaDefs_OSTypeId_Turbolinux_64 }, +- { ovf::CIMOSType_CIMOS_Mandriva, SchemaDefs_OSTypeId_Mandriva }, +- { ovf::CIMOSType_CIMOS_Mandriva_64, SchemaDefs_OSTypeId_Mandriva_64 }, +- { ovf::CIMOSType_CIMOS_Ubuntu, SchemaDefs_OSTypeId_Ubuntu }, +- { ovf::CIMOSType_CIMOS_Ubuntu_64, SchemaDefs_OSTypeId_Ubuntu_64 }, +- { ovf::CIMOSType_CIMOS_Debian, SchemaDefs_OSTypeId_Debian }, +- { ovf::CIMOSType_CIMOS_Debian_64, SchemaDefs_OSTypeId_Debian_64 }, +- { ovf::CIMOSType_CIMOS_Linux_2_4_x, SchemaDefs_OSTypeId_Linux24 }, +- { ovf::CIMOSType_CIMOS_Linux_2_4_x_64, SchemaDefs_OSTypeId_Linux24_64 }, +- { ovf::CIMOSType_CIMOS_Linux_2_6_x, SchemaDefs_OSTypeId_Linux26 }, +- { ovf::CIMOSType_CIMOS_Linux_2_6_x_64, SchemaDefs_OSTypeId_Linux26_64 }, +- { ovf::CIMOSType_CIMOS_Linux_64, SchemaDefs_OSTypeId_Linux26_64 }, +- +- // types that we have support for but CIM doesn't +- { ovf::CIMOSType_CIMOS_Linux_2_6_x, SchemaDefs_OSTypeId_ArchLinux }, +- { ovf::CIMOSType_CIMOS_Linux_2_6_x_64, SchemaDefs_OSTypeId_ArchLinux_64 }, +- { ovf::CIMOSType_CIMOS_Linux_2_6_x, SchemaDefs_OSTypeId_Fedora }, +- { ovf::CIMOSType_CIMOS_Linux_2_6_x_64, SchemaDefs_OSTypeId_Fedora_64 }, +- { ovf::CIMOSType_CIMOS_Linux_2_6_x, SchemaDefs_OSTypeId_Gentoo }, +- { ovf::CIMOSType_CIMOS_Linux_2_6_x_64, SchemaDefs_OSTypeId_Gentoo_64 }, +- { ovf::CIMOSType_CIMOS_Linux_2_6_x, SchemaDefs_OSTypeId_Xandros }, +- { ovf::CIMOSType_CIMOS_Linux_2_6_x_64, SchemaDefs_OSTypeId_Xandros_64 }, +- { ovf::CIMOSType_CIMOS_Solaris, SchemaDefs_OSTypeId_OpenSolaris }, +- { ovf::CIMOSType_CIMOS_Solaris_64, SchemaDefs_OSTypeId_OpenSolaris_64 }, +- +- // types added with CIM 2.25.0 follow: +- { ovf::CIMOSType_CIMOS_WindowsServer2008R2, SchemaDefs_OSTypeId_Windows2008 }, // duplicate, see above +-// { ovf::CIMOSType_CIMOS_VMwareESXi = 104, // we can't run ESX in a VM +- { ovf::CIMOSType_CIMOS_Windows7, SchemaDefs_OSTypeId_Windows7 }, +- { ovf::CIMOSType_CIMOS_Windows7, SchemaDefs_OSTypeId_Windows7_64 }, // there is no CIM 64-bit type for this +- { ovf::CIMOSType_CIMOS_CentOS, SchemaDefs_OSTypeId_RedHat }, +- { ovf::CIMOSType_CIMOS_CentOS_64, SchemaDefs_OSTypeId_RedHat_64 }, +- { ovf::CIMOSType_CIMOS_OracleEnterpriseLinux, SchemaDefs_OSTypeId_Oracle }, +- { ovf::CIMOSType_CIMOS_OracleEnterpriseLinux_64, SchemaDefs_OSTypeId_Oracle_64 }, +- { ovf::CIMOSType_CIMOS_eComStation, SchemaDefs_OSTypeId_OS2eCS } +- +- // there are no CIM types for these, so these turn to "other" on export: +- // SchemaDefs_OSTypeId_OpenBSD +- // SchemaDefs_OSTypeId_OpenBSD_64 +- // SchemaDefs_OSTypeId_NetBSD +- // SchemaDefs_OSTypeId_NetBSD_64 ++ ++ // Custom OS ++ { ovf::CIMOSType_CIMOS_GNU, SchemaDefs_OSTypeId_GNU }, ++ { ovf::CIMOSType_CIMOS_GNU_64, SchemaDefs_OSTypeId_GNU_64 }, ++ { ovf::CIMOSType_CIMOS_GNUHurd, SchemaDefs_OSTypeId_GNUHurd }, ++ { ovf::CIMOSType_CIMOS_GNULinux, SchemaDefs_OSTypeId_GNULinux }, ++ { ovf::CIMOSType_CIMOS_GNULinux_64, SchemaDefs_OSTypeId_GNULinux_64 }, ++ ++ // GNU/Linux free distros ++ { ovf::CIMOSType_CIMOS_gNewSense, SchemaDefs_OSTypeId_gNewSense }, ++ { ovf::CIMOSType_CIMOS_gNewSense_64, SchemaDefs_OSTypeId_gNewSense_64 }, ++ { ovf::CIMOSType_CIMOS_Dragora, SchemaDefs_OSTypeId_Dragora }, ++ { ovf::CIMOSType_CIMOS_Dragora_64, SchemaDefs_OSTypeId_Dragora_64 }, ++ { ovf::CIMOSType_CIMOS_Musix, SchemaDefs_OSTypeId_Musix }, ++ { ovf::CIMOSType_CIMOS_Musix_64, SchemaDefs_OSTypeId_Musix_64 }, ++ { ovf::CIMOSType_CIMOS_Trisquel, SchemaDefs_OSTypeId_Trisquel }, ++ { ovf::CIMOSType_CIMOS_Trisquel_64, SchemaDefs_OSTypeId_Trisquel_64 }, ++ { ovf::CIMOSType_CIMOS_Dynebolic, SchemaDefs_OSTypeId_Dynebolic }, ++ { ovf::CIMOSType_CIMOS_Venenux, SchemaDefs_OSTypeId_Venenux }, ++ ++ // GNU/Linux free distros that we have support for but CIM doesn't ++ { ovf::CIMOSType_CIMOS_GNULinux, SchemaDefs_OSTypeId_Parabola }, ++ { ovf::CIMOSType_CIMOS_GNULinux_64, SchemaDefs_OSTypeId_Parabola_64 }, ++ { ovf::CIMOSType_CIMOS_GNULinux, SchemaDefs_OSTypeId_Blag }, ++ { ovf::CIMOSType_CIMOS_GNULinux_64, SchemaDefs_OSTypeId_Blag_64 }, ++ { ovf::CIMOSType_CIMOS_GNULinux, SchemaDefs_OSTypeId_Ututo }, ++ { ovf::CIMOSType_CIMOS_GNULinux_64, SchemaDefs_OSTypeId_Ututo_64 }, + + }; + +@@ -150,53 +89,34 @@ + /* These are the 32-Bit ones. They are sorted by priority. */ + static const osTypePattern g_osTypesPattern[] = + { +- {"Windows NT", SchemaDefs_OSTypeId_WindowsNT4}, +- {"Windows XP", SchemaDefs_OSTypeId_WindowsXP}, +- {"Windows 2000", SchemaDefs_OSTypeId_Windows2000}, +- {"Windows 2003", SchemaDefs_OSTypeId_Windows2003}, +- {"Windows Vista", SchemaDefs_OSTypeId_WindowsVista}, +- {"Windows 2008", SchemaDefs_OSTypeId_Windows2008}, +- {"SUSE", SchemaDefs_OSTypeId_OpenSUSE}, +- {"Novell", SchemaDefs_OSTypeId_OpenSUSE}, +- {"Red Hat", SchemaDefs_OSTypeId_RedHat}, +- {"Mandriva", SchemaDefs_OSTypeId_Mandriva}, +- {"Ubuntu", SchemaDefs_OSTypeId_Ubuntu}, +- {"Debian", SchemaDefs_OSTypeId_Debian}, +- {"QNX", SchemaDefs_OSTypeId_QNX}, +- {"Linux 2.4", SchemaDefs_OSTypeId_Linux24}, +- {"Linux 2.6", SchemaDefs_OSTypeId_Linux26}, +- {"Linux", SchemaDefs_OSTypeId_Linux}, +- {"OpenSolaris", SchemaDefs_OSTypeId_OpenSolaris}, +- {"Solaris", SchemaDefs_OSTypeId_OpenSolaris}, +- {"FreeBSD", SchemaDefs_OSTypeId_FreeBSD}, +- {"NetBSD", SchemaDefs_OSTypeId_NetBSD}, +- {"Windows 95", SchemaDefs_OSTypeId_Windows95}, +- {"Windows 98", SchemaDefs_OSTypeId_Windows98}, +- {"Windows Me", SchemaDefs_OSTypeId_WindowsMe}, +- {"Windows 3.", SchemaDefs_OSTypeId_Windows31}, +- {"DOS", SchemaDefs_OSTypeId_DOS}, +- {"OS2", SchemaDefs_OSTypeId_OS2} ++ ++ {"Parabola GNU/Linux-libre", SchemaDefs_OSTypeId_Parabola}, ++ {"gNewSense", SchemaDefs_OSTypeId_gNewSense}, ++ {"Blag Linux and GNU", SchemaDefs_OSTypeId_Blag}, ++ {"Dragora", SchemaDefs_OSTypeId_Dragora}, ++ {"Ututo XS", SchemaDefs_OSTypeId_Ututo}, ++ {"Musix", SchemaDefs_OSTypeId_Musix}, ++ {"Trisquel", SchemaDefs_OSTypeId_Trisquel}, ++ {"Dyne:bolic", SchemaDefs_OSTypeId_Dynebolic}, ++ {"Venenux", SchemaDefs_OSTypeId_Venenux}, ++ {"GNU", SchemaDefs_OSTypeId_GNU}, ++ {"GNU-Hurd", SchemaDefs_OSTypeId_GNUHurd}, ++ {"GNU/Linux", SchemaDefs_OSTypeId_GNULinux}, ++ + }; + + /* These are the 64-Bit ones. They are sorted by priority. */ + static const osTypePattern g_osTypesPattern64[] = + { +- {"Windows XP", SchemaDefs_OSTypeId_WindowsXP_64}, +- {"Windows 2003", SchemaDefs_OSTypeId_Windows2003_64}, +- {"Windows Vista", SchemaDefs_OSTypeId_WindowsVista_64}, +- {"Windows 2008", SchemaDefs_OSTypeId_Windows2008_64}, +- {"SUSE", SchemaDefs_OSTypeId_OpenSUSE_64}, +- {"Novell", SchemaDefs_OSTypeId_OpenSUSE_64}, +- {"Red Hat", SchemaDefs_OSTypeId_RedHat_64}, +- {"Mandriva", SchemaDefs_OSTypeId_Mandriva_64}, +- {"Ubuntu", SchemaDefs_OSTypeId_Ubuntu_64}, +- {"Debian", SchemaDefs_OSTypeId_Debian_64}, +- {"Linux 2.4", SchemaDefs_OSTypeId_Linux24_64}, +- {"Linux 2.6", SchemaDefs_OSTypeId_Linux26_64}, +- {"Linux", SchemaDefs_OSTypeId_Linux26_64}, +- {"OpenSolaris", SchemaDefs_OSTypeId_OpenSolaris_64}, +- {"Solaris", SchemaDefs_OSTypeId_OpenSolaris_64}, +- {"FreeBSD", SchemaDefs_OSTypeId_FreeBSD_64}, ++ {"Parabola GNU/Linux-libre", SchemaDefs_OSTypeId_Parabola_64}, ++ {"gNewSense", SchemaDefs_OSTypeId_gNewSense_64}, ++ {"Blag Linux and GNU", SchemaDefs_OSTypeId_Blag_64}, ++ {"Dragora", SchemaDefs_OSTypeId_Dragora_64}, ++ {"Ututo XS", SchemaDefs_OSTypeId_Ututo_64}, ++ {"Musix", SchemaDefs_OSTypeId_Musix_64}, ++ {"Trisquel", SchemaDefs_OSTypeId_Trisquel_64}, ++ {"GNU", SchemaDefs_OSTypeId_GNU_64}, ++ {"GNU/Linux", SchemaDefs_OSTypeId_GNULinux_64}, + }; + + /** +--- VirtualBox-4.1.18.orig/src/VBox/Main/include/ovfreader.h 2012-06-20 10:17:34.000000000 -0300 ++++ VirtualBox-4.1.18/src/VBox/Main/include/ovfreader.h 2012-07-26 03:51:21.807619186 -0300 +@@ -34,119 +34,24 @@ + + enum CIMOSType_T + { +- CIMOSType_CIMOS_Unknown = 0, +- CIMOSType_CIMOS_Other = 1, +- CIMOSType_CIMOS_MACOS = 2, +- CIMOSType_CIMOS_ATTUNIX = 3, +- CIMOSType_CIMOS_DGUX = 4, +- CIMOSType_CIMOS_DECNT = 5, +- CIMOSType_CIMOS_Tru64UNIX = 6, +- CIMOSType_CIMOS_OpenVMS = 7, +- CIMOSType_CIMOS_HPUX = 8, +- CIMOSType_CIMOS_AIX = 9, +- CIMOSType_CIMOS_MVS = 10, +- CIMOSType_CIMOS_OS400 = 11, +- CIMOSType_CIMOS_OS2 = 12, +- CIMOSType_CIMOS_JavaVM = 13, +- CIMOSType_CIMOS_MSDOS = 14, +- CIMOSType_CIMOS_WIN3x = 15, +- CIMOSType_CIMOS_WIN95 = 16, +- CIMOSType_CIMOS_WIN98 = 17, +- CIMOSType_CIMOS_WINNT = 18, +- CIMOSType_CIMOS_WINCE = 19, +- CIMOSType_CIMOS_NCR3000 = 20, +- CIMOSType_CIMOS_NetWare = 21, +- CIMOSType_CIMOS_OSF = 22, +- CIMOSType_CIMOS_DCOS = 23, +- CIMOSType_CIMOS_ReliantUNIX = 24, +- CIMOSType_CIMOS_SCOUnixWare = 25, +- CIMOSType_CIMOS_SCOOpenServer = 26, +- CIMOSType_CIMOS_Sequent = 27, +- CIMOSType_CIMOS_IRIX = 28, +- CIMOSType_CIMOS_Solaris = 29, +- CIMOSType_CIMOS_SunOS = 30, +- CIMOSType_CIMOS_U6000 = 31, +- CIMOSType_CIMOS_ASERIES = 32, +- CIMOSType_CIMOS_HPNonStopOS = 33, +- CIMOSType_CIMOS_HPNonStopOSS = 34, +- CIMOSType_CIMOS_BS2000 = 35, +- CIMOSType_CIMOS_LINUX = 36, +- CIMOSType_CIMOS_Lynx = 37, +- CIMOSType_CIMOS_XENIX = 38, +- CIMOSType_CIMOS_VM = 39, +- CIMOSType_CIMOS_InteractiveUNIX = 40, +- CIMOSType_CIMOS_BSDUNIX = 41, +- CIMOSType_CIMOS_FreeBSD = 42, +- CIMOSType_CIMOS_NetBSD = 43, +- CIMOSType_CIMOS_GNUHurd = 44, +- CIMOSType_CIMOS_OS9 = 45, +- CIMOSType_CIMOS_MACHKernel = 46, +- CIMOSType_CIMOS_Inferno = 47, +- CIMOSType_CIMOS_QNX = 48, +- CIMOSType_CIMOS_EPOC = 49, +- CIMOSType_CIMOS_IxWorks = 50, +- CIMOSType_CIMOS_VxWorks = 51, +- CIMOSType_CIMOS_MiNT = 52, +- CIMOSType_CIMOS_BeOS = 53, +- CIMOSType_CIMOS_HPMPE = 54, +- CIMOSType_CIMOS_NextStep = 55, +- CIMOSType_CIMOS_PalmPilot = 56, +- CIMOSType_CIMOS_Rhapsody = 57, +- CIMOSType_CIMOS_Windows2000 = 58, +- CIMOSType_CIMOS_Dedicated = 59, +- CIMOSType_CIMOS_OS390 = 60, +- CIMOSType_CIMOS_VSE = 61, +- CIMOSType_CIMOS_TPF = 62, +- CIMOSType_CIMOS_WindowsMe = 63, +- CIMOSType_CIMOS_CalderaOpenUNIX = 64, +- CIMOSType_CIMOS_OpenBSD = 65, +- CIMOSType_CIMOS_NotApplicable = 66, +- CIMOSType_CIMOS_WindowsXP = 67, +- CIMOSType_CIMOS_zOS = 68, +- CIMOSType_CIMOS_MicrosoftWindowsServer2003 = 69, +- CIMOSType_CIMOS_MicrosoftWindowsServer2003_64 = 70, +- CIMOSType_CIMOS_WindowsXP_64 = 71, +- CIMOSType_CIMOS_WindowsXPEmbedded = 72, +- CIMOSType_CIMOS_WindowsVista = 73, +- CIMOSType_CIMOS_WindowsVista_64 = 74, +- CIMOSType_CIMOS_WindowsEmbeddedforPointofService = 75, +- CIMOSType_CIMOS_MicrosoftWindowsServer2008 = 76, +- CIMOSType_CIMOS_MicrosoftWindowsServer2008_64 = 77, +- CIMOSType_CIMOS_FreeBSD_64 = 78, +- CIMOSType_CIMOS_RedHatEnterpriseLinux = 79, +- CIMOSType_CIMOS_RedHatEnterpriseLinux_64 = 80, +- CIMOSType_CIMOS_Solaris_64 = 81, +- CIMOSType_CIMOS_SUSE = 82, +- CIMOSType_CIMOS_SUSE_64 = 83, +- CIMOSType_CIMOS_SLES = 84, +- CIMOSType_CIMOS_SLES_64 = 85, +- CIMOSType_CIMOS_NovellOES = 86, +- CIMOSType_CIMOS_NovellLinuxDesktop = 87, +- CIMOSType_CIMOS_SunJavaDesktopSystem = 88, +- CIMOSType_CIMOS_Mandriva = 89, +- CIMOSType_CIMOS_Mandriva_64 = 90, +- CIMOSType_CIMOS_TurboLinux = 91, +- CIMOSType_CIMOS_TurboLinux_64 = 92, +- CIMOSType_CIMOS_Ubuntu = 93, +- CIMOSType_CIMOS_Ubuntu_64 = 94, +- CIMOSType_CIMOS_Debian = 95, +- CIMOSType_CIMOS_Debian_64 = 96, +- CIMOSType_CIMOS_Linux_2_4_x = 97, +- CIMOSType_CIMOS_Linux_2_4_x_64 = 98, +- CIMOSType_CIMOS_Linux_2_6_x = 99, +- CIMOSType_CIMOS_Linux_2_6_x_64 = 100, +- CIMOSType_CIMOS_Linux_64 = 101, +- CIMOSType_CIMOS_Other_64 = 102, +- // types added with CIM 2.25.0 follow: +- CIMOSType_CIMOS_WindowsServer2008R2 = 103, +- CIMOSType_CIMOS_VMwareESXi = 104, +- CIMOSType_CIMOS_Windows7 = 105, +- CIMOSType_CIMOS_CentOS = 106, +- CIMOSType_CIMOS_CentOS_64 = 107, +- CIMOSType_CIMOS_OracleEnterpriseLinux = 108, +- CIMOSType_CIMOS_OracleEnterpriseLinux_64 = 109, +- CIMOSType_CIMOS_eComStation = 110 +- // no new types added with CIM 2.26.0 ++ CIMOSType_CIMOS_Unknown = 0, ++ CIMOSType_CIMOS_Other = 1, ++ CIMOSType_CIMOS_Other_64 = 2, ++ CIMOSType_CIMOS_gNewSense = 3, ++ CIMOSType_CIMOS_gNewSense_64 = 4, ++ CIMOSType_CIMOS_Dragora = 5, ++ CIMOSType_CIMOS_Dragora_64 = 6, ++ CIMOSType_CIMOS_Musix = 7, ++ CIMOSType_CIMOS_Musix_64 = 8, ++ CIMOSType_CIMOS_Trisquel = 9, ++ CIMOSType_CIMOS_Trisquel_64 = 10, ++ CIMOSType_CIMOS_Dynebolic = 11, ++ CIMOSType_CIMOS_Venenux = 12, ++ CIMOSType_CIMOS_GNU = 13, ++ CIMOSType_CIMOS_GNU_64 = 14, ++ CIMOSType_CIMOS_GNUHurd = 15, ++ CIMOSType_CIMOS_GNULinux = 16, ++ CIMOSType_CIMOS_GNULinux_64 = 17 + }; + + +--- VirtualBox-4.1.18.orig/src/VBox/Additions/common/VBoxGuest/VBoxGuest-linux.c 2012-06-20 10:09:01.000000000 -0300 ++++ VirtualBox-4.1.18/src/VBox/Additions/common/VBoxGuest/VBoxGuest-linux.c 2012-07-26 15:32:55.309812685 -0300 +@@ -622,16 +622,16 @@ + * Call the common device extension initializer. + */ + #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) && defined(RT_ARCH_X86) +- VBOXOSTYPE enmOSType = VBOXOSTYPE_Linux26; ++ VBOXOSTYPE enmOSType = VBOXOSTYPE_GNULinux; + #elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) && defined(RT_ARCH_AMD64) +- VBOXOSTYPE enmOSType = VBOXOSTYPE_Linux26_x64; ++ VBOXOSTYPE enmOSType = VBOXOSTYPE_GNULinux_x64; + #elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 0) && defined(RT_ARCH_X86) +- VBOXOSTYPE enmOSType = VBOXOSTYPE_Linux24; ++ VBOXOSTYPE enmOSType = VBOXOSTYPE_GNULinux; + #elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 0) && defined(RT_ARCH_AMD64) +- VBOXOSTYPE enmOSType = VBOXOSTYPE_Linux24_x64; ++ VBOXOSTYPE enmOSType = VBOXOSTYPE_GNULinux_x64; + #else + # warning "huh? which arch + version is this?" +- VBOXOSTYPE enmOsType = VBOXOSTYPE_Linux; ++ VBOXOSTYPE enmOsType = VBOXOSTYPE_GNULinux; + #endif + rc = VBoxGuestInitDevExt(&g_DevExt, + g_IOPortBase, diff --git a/libre/virtualbox-libre-modules/libre.patch b/libre/virtualbox-libre-modules/libre.patch new file mode 100644 index 000000000..e51d0c0a7 --- /dev/null +++ b/libre/virtualbox-libre-modules/libre.patch @@ -0,0 +1,5765 @@ +--- VirtualBox-4.1.18.orig/Config.kmk 2012-07-24 16:38:43.981310996 -0300 ++++ VirtualBox-4.1.18/Config.kmk 2012-07-24 16:38:44.001309865 -0300 +@@ -56,9 +56,6 @@ + PROPS_SYSMODS_ACCUMULATE_L += INTERMEDIATES + PROPS_MISCBINS_ACCUMULATE_L += INTERMEDIATES + +-# Misc names used bye the install paths below. +-VBOX_PUEL_MANGLED_NAME := Oracle_VM_VirtualBox_Extension_Pack +- + # Install paths + ## @todo This will change after 4.1 is branched off! + # What is now 'bin' and 'lib' will be moved down under 'staged/', except on +@@ -125,9 +122,6 @@ + endif + + INST_DOC = doc/ +-INST_EXTPACK = $(INST_BIN)ExtensionPacks/ +-INST_EXTPACK_CERTS = $(INST_BIN)ExtPackCertificates/ +-INST_EXTPACK_PUEL = $(INST_EXTPACK)$(VBOX_PUEL_MANGLED_NAME)/ + INST_PACKAGES = packages/ + + VBOX_PATH_SDK = $(patsubst %/,%,$(PATH_STAGE)/$(INST_SDK)) +@@ -136,7 +130,6 @@ + VBOX_PATH_ADDITIONS = $(patsubst %/,%,$(PATH_STAGE)/$(INST_ADDITIONS)) + VBOX_PATH_ADDITIONS_ISO = $(patsubst %/,%,$(PATH_STAGE)/$(INST_ADDITIONS_ISO)) + VBOX_PATH_ADDITIONS_LIB = $(patsubst %/,%,$(PATH_STAGE)/$(INST_ADDITIONS_LIB)) +-VBOX_PATH_EXTPACK_PUEL= $(patsubst %/,%,$(PATH_STAGE)/$(INST_EXTPACK_PUEL)) + VBOX_PATH_PACKAGES = $(patsubst %/,%,$(PATH_STAGE)/$(INST_PACKAGES)) + + +@@ -208,7 +201,6 @@ + export VBOX_ADDITIONS_SH_MODE = release + export VBOX_DOCUMENTATION_SH_MODE = release + export VBOX_EFI_SH_MODE = release +- export VBOX_EXTPACKS_SH_MODE = release + endif + + # Some info on the vendor +@@ -361,8 +353,6 @@ + VBOX_WITH_USB = 1 + # Enable the USB 1.1 controller plus virtual USB HID devices. + VBOX_WITH_VUSB = 1 +-# Enable the USB 2.0 controller. +-VBOX_WITH_EHCI = 1 + # Enable the ISCSI feature. + VBOX_WITH_ISCSI = 1 + # Enable INIP support in the ISCSI feature. +@@ -430,9 +420,6 @@ + ifdef VBOX_WITH_USB + VBOX_WITH_VUSB = 1 + endif +-ifdef VBOX_WITH_EHCI +- VBOX_WITH_EHCI_IMPL = 1 +-endif + ifdef VBOX_WITH_PCI_PASSTHROUGH + VBOX_WITH_PCI_PASSTHROUGH_IMPL = 1 + endif +@@ -591,15 +578,6 @@ + ## @} + + +-## @name Extension pack +-## @{ +-# Enables the extension pack feature. +-VBOX_WITH_EXTPACK = 1 +-# Enables separating code into the Oracle VM VirtualBox Extension Pack, dubbed PUEL. +-VBOX_WITH_EXTPACK_PUEL = 1 +-# Enables building+packing the Oracle VM VirtualBox Extension Pack, includes VBOX_WITH_EXTPACK_PUEL +-VBOX_WITH_EXTPACK_PUEL_BUILD = 1 +-## @} + + ## @name Misc + ## @{ +@@ -777,14 +755,6 @@ + # Skip stuff. + # + +-ifdef VBOX_ONLY_EXTPACKS +- # Clear some VBOX_WITH_XXX variables instead of adding ifdefs all over the place. +- VBOX_WITH_DEBUGGER = +- VBOX_WITH_ADDITIONS = +- VBOX_WITH_VBOXDRV = +- VBOX_WITH_TESTCASES = +-endif +- + # VBOX_QUICK can be used by core developers to speed to the build + ifdef VBOX_QUICK + # undefine variables by assigning blank. +@@ -848,7 +818,6 @@ + VBOX_WITH_TESTSUITE= + VBOX_WITH_QTGUI= + VBOX_WITH_USB= +- VBOX_WITH_EHCI= + VBOX_WITH_DOCS= + VBOX_WITH_PDM_ASYNC_COMPLETION= + VBOX_WITH_KCHMVIEWER= +@@ -870,7 +839,6 @@ + VBOX_WITH_CROGL= + VBOX_WITH_DEBUGGER= + VBOX_WITH_DOCS= +- VBOX_WITH_EHCI= + VBOX_WITH_HARDENING= + VBOX_WITH_HEADLESS= + VBOX_WITH_HGCM= +@@ -952,9 +920,6 @@ + # + ifdef VBOX_OSE + VBOX_WITH_VRDP= +- VBOX_WITH_EHCI_IMPL= +- VBOX_WITH_EXTPACK_PUEL= +- VBOX_WITH_EXTPACK_PUEL_BUILD= + VBOX_WITH_PCI_PASSTHROUGH_IMPL= + VBOX_WITH_OS2_ADDITIONS_BIN= + VBOX_WITH_SECURELABEL= +@@ -1082,10 +1047,6 @@ + VBOX_WITH_KCHMVIEWER= + endif + +-ifdef VBOX_WITH_EXTPACK_PUEL_BUILD +- VBOX_WITH_EXTPACK_PUEL = 1 +-endif +- + # + # Mark OSE builds clearly, helps figuring out limitations more easily. + # +@@ -1679,9 +1640,6 @@ + # biossums (set BIOS checksums) + VBOX_BIOSSUMS ?= $(PATH_OBJ)/biossums/biossums$(HOSTSUFF_EXE) + +-# RTManifest (extension pack manifest utility) +-VBOX_RTMANIFEST ?= $(PATH_OBJ)/bldRTManifest/bldRTManifest$(HOSTSUFF_EXE) +- + # filesplitter (splits java files) + VBOX_FILESPLIT ?= $(PATH_OBJ)/filesplitter/filesplitter$(HOSTSUFF_EXE) + +@@ -2461,13 +2419,6 @@ + SDK_VBOX_OPENSSL2_LIBS = $(NO_SUCH_VARIABLE) + endif + +-SDK_VBoxOpenSslExtPack = Internal use only. +-SDK_VBoxOpenSslExtPack_INCS = $(SDK_VBOX_OPENSSL_VBOX_DEFAULT_INCS) +-SDK_VBoxOpenSslExtPack_ORDERDEPS = $(crypto-headers_1_TARGET) +-SDK_VBoxOpenSslExtPack_LIBS = \ +- $(PATH_STAGE_LIB)/VBoxExtPack-libssl$(VBOX_SUFF_LIB) \ +- $(PATH_STAGE_LIB)/VBoxExtPack-libcrypto$(VBOX_SUFF_LIB) +- + SDK_VBOX_BLD_OPENSSL = . + SDK_VBOX_BLD_OPENSSL_EXTENDS = VBOX_OPENSSL + SDK_VBOX_BLD_OPENSSL_LIBS ?= \ +@@ -3817,100 +3768,6 @@ + endif + TEMPLATE_VBOXMAINCLIENTDLL_LDFLAGS.darwin = $(filter-out -bind_at_load,$(TEMPLATE_VBOXMAINCLIENTEXE_LDFLAGS.darwin)) + +- +- +-# +-# Templates used for building the extension packs. +-# +-ifdef VBOX_WITH_EXTPACK +- # Base templates (native or portable). +- TEMPLATE_VBoxR3ExtPack = For the ring-3 context extension pack modules. +- if 1 # Native for now. +- TEMPLATE_VBoxR3ExtPack_EXTENDS = VBOXR3DLLNOXCPT +- TEMPLATE_VBoxR3ExtPack_DEFS = $(TEMPLATE_VBOXR3DLLNOXCPT_DEFS) VBOX_IN_EXTPACK VBOX_IN_EXTPACK_R3 +- else +- TEMPLATE_VBoxR3ExtPack_EXTENDS = VBOXNOCRTGCC +- TEMPLATE_VBoxR3ExtPack_DEFS = $(TEMPLATE_VBOXNOCRTGCC_DEFS) VBOX_IN_EXTPACK VBOX_IN_EXTPACK_R3 IPRT_NO_CRT IN_RING3 +- TEMPLATE_VBoxR3ExtPack_INCS = $(PATH_ROOT)/include/iprt/nocrt $(TEMPLATE_VBOXR3DLLNOXCPT_INCS) +- endif +- ifneq ($(KBUILD_TARGET),win) +- TEMPLATE_VBoxR3ExtPack_CXXFLAGS = $(TEMPLATE_VBOXR3DLLNOXCPT_CXXFLAGS) -fno-rtti +- endif +- TEMPLATE_VBoxR3ExtPack_INST = $(INST_EXTPACK)YouShallOverrideThis/ +- ifeq ($(KBUILD_TARGET),linux) +- TEMPLATE_VBoxR3ExtPack_LDFLAGS = $(filter-out '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RUNPATH)' '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)', $(TEMPLATE_VBOXR3DLLNOXCPT_LDFLAGS)) +- else +- if !defined(VBOX_WITH_RUNPATH) && defined(VBOX_WITH_RELATIVE_RUNPATH) +- TEMPLATE_VBoxR3ExtPack_LDFLAGS = '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)/../../..' $(filter-out '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)', $(TEMPLATE_VBOXR3DLLNOXCPT_LDFLAGS)) +- endif +- endif +- ifdef VBOX_ONLY_EXTPACKS_USE_IMPLIBS +- if1of ($(KBUILD_TARGET), win os2) +- TEMPLATE_VBoxR3ExtPack_LIBS = \ +- $(TEMPLATE_LIBS_VBOXR3) \ +- $(PATH_STAGE_LIB)/VMMR3Imp$(VBOX_SUFF_LIB) \ +- $(PATH_STAGE_LIB)/VBoxRTImp$(VBOX_SUFF_LIB) +- else +- TEMPLATE_VBoxR3ExtPack_LIBS = \ +- $(TEMPLATE_LIBS_VBOXR3) \ +- $(PATH_STAGE_LIB)/VMMR3Imp$(VBOX_SUFF_DLL) \ +- $(PATH_STAGE_LIB)/VBoxRTImp$(VBOX_SUFF_DLL) +- endif +- else +- TEMPLATE_VBoxR3ExtPack_LIBS = \ +- $(TEMPLATE_LIBS_VBOXR3) \ +- $(LIB_RUNTIME) \ +- $(LIB_VMM) +- endif +- +- TEMPLATE_VBoxR0ExtPack = For the ring-0 context extension pack modules. +- TEMPLATE_VBoxR0ExtPack_EXTENDS = VBoxR0 +- TEMPLATE_VBoxR0ExtPack_EXTENDS_BY = appending +- TEMPLATE_VBoxR0ExtPack_INST = $(INST_EXTPACK)YouShallOverrideThis/ +- TEMPLATE_VBoxR0ExtPack_DEFS = VBOX_IN_EXTPACK VBOX_IN_EXTPACK_R0 +- if1of ($(VBOX_LDR_FMT), pe lx) +- TEMPLATE_VBoxR0ExtPack_LIBS = \ +- $(PATH_STAGE_LIB)/VMMR0Imp$(VBOX_SUFF_LIB) \ +- $(PATH_STAGE_LIB)/SUPR0$(VBOX_SUFF_LIB) +- endif +- +- TEMPLATE_VBoxRcExtPack = For the raw-mode context extension pack modules. +- TEMPLATE_VBoxRcExtPack_EXTENDS = VBoxRc +- TEMPLATE_VBoxRcExtPack_EXTENDS_BY = appending +- TEMPLATE_VBoxRcExtPack_SYSSUFF = .rc +- TEMPLATE_VBoxRcExtPack_INST = $(INST_EXTPACK)YouShallOverrideThis/ +- TEMPLATE_VBoxRcExtPack_DEFS = VBOX_IN_EXTPACK VBOX_IN_EXTPACK_RC +- if1of ($(VBOX_LDR_FMT32), pe lx) +- TEMPLATE_VBoxRcExtPack_LIBS = \ +- $(PATH_STAGE_LIB)/VMMRCBuiltin$(VBOX_SUFF_LIB) \ +- $(PATH_STAGE_LIB)/VMMRCImp$(VBOX_SUFF_LIB) +- endif +- +- TEMPLATE_VBoxInsExtPack = For the install targets of an extension pack. +- TEMPLATE_VBoxInsExtPack_MODE = 0644 +- TEMPLATE_VBoxInsExtPack_INST = $(INST_EXTPACK)YouShallOverrideThis/ +- +- # For each individual extension pack +- ifdef VBOX_WITH_EXTPACK_PUEL +- TEMPLATE_VBoxR3ExtPackPuel = For the ring-3 context modules in the PUEL extension pack. +- TEMPLATE_VBoxR3ExtPackPuel_EXTENDS = VBoxR3ExtPack +- TEMPLATE_VBoxR3ExtPackPuel_INST = $(INST_EXTPACK_PUEL)$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/ +- +- TEMPLATE_VBoxR0ExtPackPuel = For the ring-0 context modules in the PUEL extension pack. +- TEMPLATE_VBoxR0ExtPackPuel_EXTENDS = VBoxR0ExtPack +- TEMPLATE_VBoxR0ExtPackPuel_INST = $(INST_EXTPACK_PUEL)$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/ +- +- TEMPLATE_VBoxRcExtPackPuel = For the raw-mode context modules in the PUEL extension pack. +- TEMPLATE_VBoxRcExtPackPuel_EXTENDS = VBoxRcExtPack +- TEMPLATE_VBoxRcExtPackPuel_INST = $(INST_EXTPACK_PUEL)$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/ +- +- TEMPLATE_VBoxInsExtPackPuel = For the install targets of an extension pack. +- TEMPLATE_VBoxInsExtPackPuel_EXTENDS = VBoxR0ExtPack +- TEMPLATE_VBoxInsExtPackPuel_INST = $(INST_EXTPACK_PUEL) +-endif +-endif # VBOX_WITH_EXTPACK +- +- + # + # Qt 4 + # Qt 4 +--- VirtualBox-4.1.18.orig/Makefile.kmk 2012-07-24 17:16:47.078929150 -0300 ++++ VirtualBox-4.1.18/Makefile.kmk 2012-07-24 17:16:47.125592981 -0300 +@@ -446,7 +446,6 @@ + include/VBox \ + include/VBox/vmm \ + include/VBox/com \ +- include/VBox/ExtPack \ + include/VBox/HostServices \ + include/VBox/GuestHost \ + include/VBox/HGSMI \ +@@ -862,191 +861,6 @@ + additions-build-linux.x86.combined \ + additions-packing + +- +-# +-# Build the extension packs, all of them. +-# +-# This is tailored (hardcoded) for the extension pack build box. +-# +-# The fetching must be done in serial fashion, while the building should be +-# more flexible wrt to -jN. +-# +-extpacks-fetch: +- + $(KMK) -C tools fetch VBOX_ONLY_EXTPACKS=1 +- + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=amd64 KBUILD_TARGET=darwin BUILD_TARGET_ARCH=amd64 BUILD_TARGET=darwin VBOX_ONLY_EXTPACKS=1 +- + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=x86 KBUILD_TARGET=darwin BUILD_TARGET_ARCH=x86 BUILD_TARGET=darwin VBOX_ONLY_EXTPACKS=1 +-# + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=amd64 KBUILD_TARGET=freebsd BUILD_TARGET_ARCH=amd64 BUILD_TARGET=freebsd VBOX_ONLY_EXTPACKS=1 +-# + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=x86 KBUILD_TARGET=freebsd BUILD_TARGET_ARCH=x86 BUILD_TARGET=freebsd VBOX_ONLY_EXTPACKS=1 +- + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=amd64 KBUILD_TARGET=linux BUILD_TARGET_ARCH=amd64 BUILD_TARGET=linux VBOX_ONLY_EXTPACKS=1 +- + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=x86 KBUILD_TARGET=linux BUILD_TARGET_ARCH=x86 BUILD_TARGET=linux VBOX_ONLY_EXTPACKS=1 +-# + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=x86 KBUILD_TARGET=os2 BUILD_TARGET_ARCH=x86 BUILD_TARGET=os2 VBOX_ONLY_EXTPACKS=1 +- + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=amd64 KBUILD_TARGET=solaris BUILD_TARGET_ARCH=amd64 BUILD_TARGET=solaris VBOX_ONLY_EXTPACKS=1 +- + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=x86 KBUILD_TARGET=solaris BUILD_TARGET_ARCH=x86 BUILD_TARGET=solaris VBOX_ONLY_EXTPACKS=1 +- + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=amd64 KBUILD_TARGET=win BUILD_TARGET_ARCH=amd64 BUILD_TARGET=win VBOX_ONLY_EXTPACKS=1 +- + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=x86 KBUILD_TARGET=win BUILD_TARGET_ARCH=x86 BUILD_TARGET=win VBOX_ONLY_EXTPACKS=1 +- +- +-extpacks-build: \ +- extpacks-build-win.amd64 \ +- extpacks-build-win.x86 \ +- extpacks-build-solaris.amd64 \ +- extpacks-build-solaris.x86 \ +- extpacks-build-os2.x86 \ +- extpacks-build-linux.amd64 \ +- extpacks-build-linux.x86 \ +- extpacks-build-darwin.amd64 \ +- extpacks-build-darwin.x86 \ +- extpacks-build-freebsd.amd64 \ +- extpacks-build-freebsd.x86 +- +-VBOX_EXTPACKS_BUILD.amd64 = VBOX_ONLY_EXTPACKS=1 \ +- KBUILD_TYPE=$(KBUILD_TYPE) BUILD_TYPE=$(KBUILD_TYPE) \ +- KBUILD_TARGET_ARCH=amd64 BUILD_TARGET_ARCH=amd64 \ +- VBOX_SVN_REV=$(VBOX_SVN_REV) +- +-VBOX_EXTPACKS_BUILD.x86 = VBOX_ONLY_EXTPACKS=1 \ +- KBUILD_TYPE=$(KBUILD_TYPE) BUILD_TYPE=$(KBUILD_TYPE) \ +- KBUILD_TARGET_ARCH=x86 BUILD_TARGET_ARCH=x86 \ +- VBOX_SVN_REV=$(VBOX_SVN_REV) +- +-# Automatically determine the extpack build subdir name. Used for figuring out +-# directory names inside the extension pack building VMs. +-VBOX_EXTPACKS_BUILD_SUBDIRNAME := $(lastword $(subst /, ,$(PATH_ROOT))) +- +-# When building in parallel on a Windows host, make sure we finish the host +-# bit before kicking off any UNIX guest or we'll run into file sharing issues. +-ifeq ($(KBUILD_TARGET),win) +-VBOX_EXTPACKS_BUILD_WIN_HOST_FIRST = extpacks-build-win.x86 extpacks-build-win.amd64 +-else +-VBOX_EXTPACKS_BUILD_WIN_HOST_FIRST = +-endif +- +-extpacks-build-win.amd64: +-ifeq ($(KBUILD_TARGET),win) +- + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.amd64) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK) +-else +- $(call MSG_L1,Building Windows/amd64 extension packs) +- $(VBOX_KMK_TIME) ssh vbox@192.168.27.6 " echo $@ && cd e:/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh kmk $(VBOX_EXTPACKS_BUILD.amd64) all" +-endif +- +-extpacks-build-win.x86: +-ifeq ($(KBUILD_TARGET),win) +- + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.x86) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK) +-else +- $(call MSG_L1,Building Windows/x86 extension packs) +- $(VBOX_KMK_TIME) ssh vbox@192.168.27.16 " echo $@ && cd e:/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh kmk $(VBOX_EXTPACKS_BUILD.x86) all" +-endif +- +-ifeq ($(KBUILD_TARGET),solaris) +-extpacks-build-solaris.amd64: +- + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.amd64) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK) +- +-extpacks-build-solaris.x86: extpacks-build-solaris.amd64 +- + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.x86) VBOX_WITH_COMBINED_SOLARIS_GUEST_PACKAGE=1 all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK) +- +-else +-# Serialize 32-bit and 64-bit ASSUMING the same VM builds both. +-extpacks-build-solaris.rsync-into-vm: $(VBOX_EXTPACKS_BUILD_WIN_HOST_FIRST) +- $(VBOX_KMK_TIME) $(call VBOX_RSYNC_IN_FN,solaris,*) . 192.168.27.4:/mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) +- +-extpacks-build-solaris.build-it: extpacks-build-solaris.rsync-into-vm +- $(call MSG_L1,Building Solaris/amd64 extension packs) +- $(VBOX_KMK_TIME) ssh vbox@192.168.27.4 " echo $@/amd64 && cd /mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_EXTPACKS_BUILD.amd64) all" +- $(call MSG_L1,Building Solaris/x86 extension packs) +- $(VBOX_KMK_TIME) ssh vbox@192.168.27.4 " echo $@/x86 && cd /mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_EXTPACKS_BUILD.x86) all" +- +-extpacks-build-solaris.rsync-out-of-vm: extpacks-build-solaris.build-it +- $(VBOX_KMK_TIME) rsync -a --delete 192.168.27.4:/mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME)/out/solaris.x86 out/ +- $(VBOX_KMK_TIME) rsync -a --delete 192.168.27.4:/mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME)/out/solaris.amd64 out/ +- +-.NOTPARALLEL: extpacks-build-solaris.rsync-out-of-vm extpacks-build-solaris.rsync-into-vm +-.PHONY: extpacks-build-solaris.rsync-out-of-vm extpacks-build-solaris.rsync-into-vm extpacks-build-solaris.build-it +- +-extpacks-build-solaris.amd64: extpacks-build-solaris.rsync-out-of-vm +-extpacks-build-solaris.x86: extpacks-build-solaris.rsync-out-of-vm +-endif +- +-extpacks-build-os2.x86: +-#ifeq ($(KBUILD_TARGET),os2) +-# + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.x86) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK) +-#else +-# $(VBOX_KMK_TIME) ssh vbox@192.168.27.3 " cd /mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_EXTPACKS_BUILD.x86) " +-#endif +- +-extpacks-build-linux.amd64: $(VBOX_EXTPACKS_BUILD_WIN_HOST_FIRST) +-ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),linux.amd64) +- + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.amd64) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK) +-else +- $(call MSG_L1,Building Linux/amd64 extension packs) +- $(VBOX_KMK_TIME) ssh vbox@192.168.27.12 " echo $@ && cd /mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_EXTPACKS_BUILD.amd64) all" +-endif +- +-extpacks-build-linux.x86: $(VBOX_EXTPACKS_BUILD_WIN_HOST_FIRST) +-ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),linux.x86) +- + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.x86) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK) +-else +- $(call MSG_L1,Building Linux/x86 extension packs) +- $(VBOX_KMK_TIME) ssh vbox@192.168.27.11 " echo $@ && cd /mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_EXTPACKS_BUILD.x86) all" +-endif +- +-extpacks-build-freebsd.amd64: $(VBOX_EXTPACKS_BUILD_WIN_HOST_FIRST) +-#ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),freebsd.amd64) +-# + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.amd64) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK) +-#else +-# $(call MSG_L1,Building FreeBSD/amd64 extension packs) +-# $(VBOX_KMK_TIME) ssh vbox@192.168.27.17 " echo $@ && cd /mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_EXTPACKS_BUILD.amd64) all" +-#endif +- +-extpacks-build-freebsd.x86: $(VBOX_EXTPACKS_BUILD_WIN_HOST_FIRST) +-#ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),freebsd.x86) +-# + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.x86) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK) +-#else +-# $(call MSG_L1,Building FreeBSD/x86 extension packs) +-# $(VBOX_KMK_TIME) ssh vbox@192.168.27.7 " echo $@ && cd /mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_EXTPACKS_BUILD.x86) all" +-#endif +- +-extpacks-build-darwin.amd64: $(VBOX_EXTPACKS_BUILD_WIN_HOST_FIRST) +-ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),darwin.amd64) +- + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.amd64) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK) +-else +- $(call MSG_L1,Building Darwin/amd64 extension packs) +- $(VBOX_KMK_TIME) $(call VBOX_RSYNC_IN_FN,darwin,amd64) . 192.168.27.15:/Users/vbox/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) +- $(VBOX_KMK_TIME) ssh vbox@192.168.27.15 " echo $@ && cd /Users/vbox/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_EXTPACKS_BUILD.amd64) all" +- $(VBOX_KMK_TIME) rsync -am -v --delete 192.168.27.15:/Users/vbox/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME)/out/darwin.amd64 out/ +-endif +- +-extpacks-build-darwin.x86: $(VBOX_EXTPACKS_BUILD_WIN_HOST_FIRST) +-ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),darwin.x86) +- + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.x86) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK) +-else +- $(call MSG_L1,Building Darwin/x86 extension packs) +- $(VBOX_KMK_TIME) $(call VBOX_RSYNC_IN_FN,darwin,x86) . 192.168.27.5:/Users/vbox/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) +- $(VBOX_KMK_TIME) ssh vbox@192.168.27.5 " echo $@ && cd /Users/vbox/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_EXTPACKS_BUILD.x86) all" +- $(VBOX_KMK_TIME) rsync -am -v --delete 192.168.27.5:/Users/vbox/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME)/out/darwin.x86 out/ +-endif +- +- +-extpacks-packing: +- + $(KMK) VBOX_ONLY_EXTPACKS=1 \ +- VBOX_WITH_EXTPACK_OS_ARCHS="darwin.amd64 darwin.x86 linux.amd64 linux.x86 solaris.amd64 solaris.x86 win.amd64 win.x86" \ +- packing +-# +++ freebsd.amd64 freebsd.x86 os2.x86 ^^^ +- +-.PHONY: \ +- extpacks-build-win.x86 \ +- extpacks-build-win.amd64 \ +- extpacks-build-solaris.amd64 \ +- extpacks-build-solaris.x86 \ +- extpacks-build-os2.x86 \ +- extpacks-build-linux.amd64 \ +- extpacks-build-linux.x86 \ +- extpacks-build-freebsd.amd64 \ +- extpacks-build-freebsd.x86 \ +- extpacks-build-darwin.amd64 \ +- extpacks-build-darwin.x86 \ +- extpacks-packing +- +- + # + # Build the test suite, all of it. + # +--- VirtualBox-4.1.18.orig/src/VBox/Devices/build/VBoxDD.cpp 2012-06-20 10:15:51.000000000 -0300 ++++ VirtualBox-4.1.18/src/VBox/Devices/build/VBoxDD.cpp 2012-07-24 16:18:03.964493454 -0300 +@@ -132,11 +132,6 @@ + if (RT_FAILURE(rc)) + return rc; + #endif +-#ifdef VBOX_WITH_EHCI_IMPL +- rc = pCallbacks->pfnRegister(pCallbacks, &g_DeviceEHCI); +- if (RT_FAILURE(rc)) +- return rc; +-#endif + #ifdef VBOX_ACPI + rc = pCallbacks->pfnRegister(pCallbacks, &g_DeviceACPI); + if (RT_FAILURE(rc)) +--- VirtualBox-4.1.18.orig/src/VBox/Devices/build/VBoxDD.h 2012-06-20 10:15:51.000000000 -0300 ++++ VirtualBox-4.1.18/src/VBox/Devices/build/VBoxDD.h 2012-07-24 16:20:35.939205389 -0300 +@@ -62,7 +62,6 @@ + extern const PDMDEVREG g_DeviceICH6_HDA; + extern const PDMDEVREG g_DeviceAudioSniffer; + extern const PDMDEVREG g_DeviceOHCI; +-extern const PDMDEVREG g_DeviceEHCI; + extern const PDMDEVREG g_DeviceACPI; + extern const PDMDEVREG g_DeviceDMA; + extern const PDMDEVREG g_DeviceFloppyController; +--- VirtualBox-4.1.18.orig/src/VBox/Main/include/ExtPackManagerImpl.h 2012-06-20 10:17:33.000000000 -0300 ++++ /dev/null 2012-07-24 14:48:18.638572110 -0300 +@@ -1,245 +0,0 @@ +-/* $Id: ExtPackManagerImpl.h $ */ +-/** @file +- * VirtualBox Main - interface for Extension Packs, VBoxSVC & VBoxC. +- */ +- +-/* +- * Copyright (C) 2010 Oracle Corporation +- * +- * This file is part of VirtualBox Open Source Edition (OSE), as +- * available from http://www.virtualbox.org. This file is free software; +- * you can redistribute it and/or modify it under the terms of the GNU +- * General Public License (GPL) as published by the Free Software +- * Foundation, in version 2 as it comes in the "COPYING" file of the +- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the +- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. +- */ +- +-#ifndef ____H_EXTPACKMANAGERIMPL +-#define ____H_EXTPACKMANAGERIMPL +- +-#include "VirtualBoxBase.h" +-#include <VBox/ExtPack/ExtPack.h> +-#include <iprt/fs.h> +- +-/** +- * An extension pack file. +- */ +-class ATL_NO_VTABLE ExtPackFile : +- public VirtualBoxBase, +- VBOX_SCRIPTABLE_IMPL(IExtPackFile) +-{ +-public: +- /** @name COM and internal init/term/mapping cruft. +- * @{ */ +- VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT(ExtPackFile, IExtPackFile) +- DECLARE_NOT_AGGREGATABLE(ExtPackFile) +- DECLARE_PROTECT_FINAL_CONSTRUCT() +- BEGIN_COM_MAP(ExtPackFile) +- VBOX_DEFAULT_INTERFACE_ENTRIES(IExtPackFile) +- COM_INTERFACE_ENTRY(IExtPackBase) +- END_COM_MAP() +- DECLARE_EMPTY_CTOR_DTOR(ExtPackFile) +- +- HRESULT FinalConstruct(); +- void FinalRelease(); +- HRESULT initWithFile(const char *a_pszFile, const char *a_pszDigest, class ExtPackManager *a_pExtPackMgr, VirtualBox *a_pVirtualBox); +- void uninit(); +- RTMEMEF_NEW_AND_DELETE_OPERATORS(); +- /** @} */ +- +- /** @name IExtPackBase interfaces +- * @{ */ +- STDMETHOD(COMGETTER(Name))(BSTR *a_pbstrName); +- STDMETHOD(COMGETTER(Description))(BSTR *a_pbstrDescription); +- STDMETHOD(COMGETTER(Version))(BSTR *a_pbstrVersion); +- STDMETHOD(COMGETTER(Revision))(ULONG *a_puRevision); +- STDMETHOD(COMGETTER(VRDEModule))(BSTR *a_pbstrVrdeModule); +- STDMETHOD(COMGETTER(PlugIns))(ComSafeArrayOut(IExtPackPlugIn *, a_paPlugIns)); +- STDMETHOD(COMGETTER(Usable))(BOOL *a_pfUsable); +- STDMETHOD(COMGETTER(WhyUnusable))(BSTR *a_pbstrWhy); +- STDMETHOD(COMGETTER(ShowLicense))(BOOL *a_pfShowIt); +- STDMETHOD(COMGETTER(License))(BSTR *a_pbstrHtmlLicense); +- STDMETHOD(QueryLicense)(IN_BSTR a_bstrPreferredLocale, IN_BSTR a_bstrPreferredLanguage, +- IN_BSTR a_bstrFormat, BSTR *a_pbstrLicense); +- /** @} */ +- +- /** @name IExtPackFile interfaces +- * @{ */ +- STDMETHOD(COMGETTER(FilePath))(BSTR *a_pbstrPath); +- STDMETHOD(Install)(BOOL a_fReplace, IN_BSTR a_bstrDisplayInfo, IProgress **a_ppProgress); +- /** @} */ +- +-private: +- /** @name Misc init helpers +- * @{ */ +- HRESULT initFailed(const char *a_pszWhyFmt, ...); +- /** @} */ +- +-private: +- struct Data; +- /** Pointer to the private instance. */ +- Data *m; +- +- friend class ExtPackManager; +-}; +- +- +-/** +- * An installed extension pack. +- */ +-class ATL_NO_VTABLE ExtPack : +- public VirtualBoxBase, +- VBOX_SCRIPTABLE_IMPL(IExtPack) +-{ +-public: +- /** @name COM and internal init/term/mapping cruft. +- * @{ */ +- VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT(ExtPack, IExtPack) +- DECLARE_NOT_AGGREGATABLE(ExtPack) +- DECLARE_PROTECT_FINAL_CONSTRUCT() +- BEGIN_COM_MAP(ExtPack) +- VBOX_DEFAULT_INTERFACE_ENTRIES(IExtPack) +- COM_INTERFACE_ENTRY(IExtPackBase) +- END_COM_MAP() +- DECLARE_EMPTY_CTOR_DTOR(ExtPack) +- +- HRESULT FinalConstruct(); +- void FinalRelease(); +- HRESULT initWithDir(VBOXEXTPACKCTX a_enmContext, const char *a_pszName, const char *a_pszDir); +- void uninit(); +- RTMEMEF_NEW_AND_DELETE_OPERATORS(); +- /** @} */ +- +- /** @name IExtPackBase interfaces +- * @{ */ +- STDMETHOD(COMGETTER(Name))(BSTR *a_pbstrName); +- STDMETHOD(COMGETTER(Description))(BSTR *a_pbstrDescription); +- STDMETHOD(COMGETTER(Version))(BSTR *a_pbstrVersion); +- STDMETHOD(COMGETTER(Revision))(ULONG *a_puRevision); +- STDMETHOD(COMGETTER(VRDEModule))(BSTR *a_pbstrVrdeModule); +- STDMETHOD(COMGETTER(PlugIns))(ComSafeArrayOut(IExtPackPlugIn *, a_paPlugIns)); +- STDMETHOD(COMGETTER(Usable))(BOOL *a_pfUsable); +- STDMETHOD(COMGETTER(WhyUnusable))(BSTR *a_pbstrWhy); +- STDMETHOD(COMGETTER(ShowLicense))(BOOL *a_pfShowIt); +- STDMETHOD(COMGETTER(License))(BSTR *a_pbstrHtmlLicense); +- STDMETHOD(QueryLicense)(IN_BSTR a_bstrPreferredLocale, IN_BSTR a_bstrPreferredLanguage, +- IN_BSTR a_bstrFormat, BSTR *a_pbstrLicense); +- /** @} */ +- +- /** @name IExtPack interfaces +- * @{ */ +- STDMETHOD(QueryObject)(IN_BSTR a_bstrObjectId, IUnknown **a_ppUnknown); +- /** @} */ +- +- /** @name Internal interfaces used by ExtPackManager. +- * @{ */ +- bool callInstalledHook(IVirtualBox *a_pVirtualBox, AutoWriteLock *a_pLock, PRTERRINFO pErrInfo); +- HRESULT callUninstallHookAndClose(IVirtualBox *a_pVirtualBox, bool a_fForcedRemoval); +- bool callVirtualBoxReadyHook(IVirtualBox *a_pVirtualBox, AutoWriteLock *a_pLock); +- bool callConsoleReadyHook(IConsole *a_pConsole, AutoWriteLock *a_pLock); +- bool callVmCreatedHook(IVirtualBox *a_pVirtualBox, IMachine *a_pMachine, AutoWriteLock *a_pLock); +- bool callVmConfigureVmmHook(IConsole *a_pConsole, PVM a_pVM, AutoWriteLock *a_pLock, int *a_pvrc); +- bool callVmPowerOnHook(IConsole *a_pConsole, PVM a_pVM, AutoWriteLock *a_pLock, int *a_pvrc); +- bool callVmPowerOffHook(IConsole *a_pConsole, PVM a_pVM, AutoWriteLock *a_pLock); +- HRESULT checkVrde(void); +- HRESULT getVrdpLibraryName(Utf8Str *a_pstrVrdeLibrary); +- bool wantsToBeDefaultVrde(void) const; +- HRESULT refresh(bool *pfCanDelete); +- /** @} */ +- +-protected: +- /** @name Internal helper methods. +- * @{ */ +- void probeAndLoad(void); +- bool findModule(const char *a_pszName, const char *a_pszExt, VBOXEXTPACKMODKIND a_enmKind, +- Utf8Str *a_ppStrFound, bool *a_pfNative, PRTFSOBJINFO a_pObjInfo) const; +- static bool objinfoIsEqual(PCRTFSOBJINFO pObjInfo1, PCRTFSOBJINFO pObjInfo2); +- /** @} */ +- +- /** @name Extension Pack Helpers +- * @{ */ +- static DECLCALLBACK(int) hlpFindModule(PCVBOXEXTPACKHLP pHlp, const char *pszName, const char *pszExt, +- VBOXEXTPACKMODKIND enmKind, char *pszFound, size_t cbFound, bool *pfNative); +- static DECLCALLBACK(int) hlpGetFilePath(PCVBOXEXTPACKHLP pHlp, const char *pszFilename, char *pszPath, size_t cbPath); +- static DECLCALLBACK(VBOXEXTPACKCTX) hlpGetContext(PCVBOXEXTPACKHLP pHlp); +- static DECLCALLBACK(int) hlpReservedN(PCVBOXEXTPACKHLP pHlp); +- /** @} */ +- +-private: +- struct Data; +- /** Pointer to the private instance. */ +- Data *m; +- +- friend class ExtPackManager; +-}; +- +- +-/** +- * Extension pack manager. +- */ +-class ATL_NO_VTABLE ExtPackManager : +- public VirtualBoxBase, +- VBOX_SCRIPTABLE_IMPL(IExtPackManager) +-{ +- /** @name COM and internal init/term/mapping cruft. +- * @{ */ +- VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT(ExtPackManager, IExtPackManager) +- DECLARE_NOT_AGGREGATABLE(ExtPackManager) +- DECLARE_PROTECT_FINAL_CONSTRUCT() +- BEGIN_COM_MAP(ExtPackManager) +- VBOX_DEFAULT_INTERFACE_ENTRIES(IExtPackManager) +- END_COM_MAP() +- DECLARE_EMPTY_CTOR_DTOR(ExtPackManager) +- +- HRESULT FinalConstruct(); +- void FinalRelease(); +- HRESULT initExtPackManager(VirtualBox *a_pVirtualBox, VBOXEXTPACKCTX a_enmContext); +- void uninit(); +- RTMEMEF_NEW_AND_DELETE_OPERATORS(); +- /** @} */ +- +- /** @name IExtPack interfaces +- * @{ */ +- STDMETHOD(COMGETTER(InstalledExtPacks))(ComSafeArrayOut(IExtPack *, a_paExtPacks)); +- STDMETHOD(Find)(IN_BSTR a_bstrName, IExtPack **a_pExtPack); +- STDMETHOD(OpenExtPackFile)(IN_BSTR a_bstrTarball, IExtPackFile **a_ppExtPackFile); +- STDMETHOD(Uninstall)(IN_BSTR a_bstrName, BOOL a_fForcedRemoval, IN_BSTR a_bstrDisplayInfo, IProgress **a_ppProgress); +- STDMETHOD(Cleanup)(void); +- STDMETHOD(QueryAllPlugInsForFrontend)(IN_BSTR a_bstrFrontend, ComSafeArrayOut(BSTR, a_pabstrPlugInModules)); +- STDMETHOD(IsExtPackUsable(IN_BSTR a_bstrExtPack, BOOL *aUsable)); +- /** @} */ +- +- /** @name Internal interfaces used by other Main classes. +- * @{ */ +- static DECLCALLBACK(int) doInstallThreadProc(RTTHREAD hThread, void *pvJob); +- HRESULT doInstall(ExtPackFile *a_pExtPackFile, bool a_fReplace, Utf8Str const *a_pstrDisplayInfo); +- static DECLCALLBACK(int) doUninstallThreadProc(RTTHREAD hThread, void *pvJob); +- HRESULT doUninstall(const Utf8Str *a_pstrName, bool a_fForcedRemoval, const Utf8Str *a_pstrDisplayInfo); +- void callAllVirtualBoxReadyHooks(void); +- void callAllConsoleReadyHooks(IConsole *a_pConsole); +- void callAllVmCreatedHooks(IMachine *a_pMachine); +- int callAllVmConfigureVmmHooks(IConsole *a_pConsole, PVM a_pVM); +- int callAllVmPowerOnHooks(IConsole *a_pConsole, PVM a_pVM); +- void callAllVmPowerOffHooks(IConsole *a_pConsole, PVM a_pVM); +- HRESULT checkVrdeExtPack(Utf8Str const *a_pstrExtPack); +- int getVrdeLibraryPathForExtPack(Utf8Str const *a_pstrExtPack, Utf8Str *a_pstrVrdeLibrary); +- HRESULT getDefaultVrdeExtPack(Utf8Str *a_pstrExtPack); +- bool isExtPackUsable(const char *a_pszExtPack); +- void dumpAllToReleaseLog(void); +- /** @} */ +- +-private: +- HRESULT runSetUidToRootHelper(Utf8Str const *a_pstrDisplayInfo, const char *a_pszCommand, ...); +- ExtPack *findExtPack(const char *a_pszName); +- void removeExtPack(const char *a_pszName); +- HRESULT refreshExtPack(const char *a_pszName, bool a_fUnsuableIsError, ExtPack **a_ppExtPack); +- +-private: +- struct Data; +- /** Pointer to the private instance. */ +- Data *m; +-}; +- +-#endif +-/* vi: set tabstop=4 shiftwidth=4 expandtab: */ +--- VirtualBox-4.1.18.orig/src/VBox/Main/include/ExtPackUtil.h 2012-06-20 10:17:33.000000000 -0300 ++++ /dev/null 2012-07-24 14:48:18.638572110 -0300 +@@ -1,137 +0,0 @@ +-/* $Id: ExtPackUtil.h $ */ +-/** @file +- * VirtualBox Main - Extension Pack Utilities and definitions, VBoxC, VBoxSVC, ++. +- */ +- +-/* +- * Copyright (C) 2010 Oracle Corporation +- * +- * This file is part of VirtualBox Open Source Edition (OSE), as +- * available from http://www.virtualbox.org. This file is free software; +- * you can redistribute it and/or modify it under the terms of the GNU +- * General Public License (GPL) as published by the Free Software +- * Foundation, in version 2 as it comes in the "COPYING" file of the +- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the +- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. +- */ +- +-#ifndef ____H_EXTPACKUTIL +-#define ____H_EXTPACKUTIL +- +-#include <iprt/cpp/ministring.h> +-#include <iprt/fs.h> +-#include <iprt/vfs.h> +- +- +-/** @name VBOX_EXTPACK_DESCRIPTION_NAME +- * The name of the description file in an extension pack. */ +-#define VBOX_EXTPACK_DESCRIPTION_NAME "ExtPack.xml" +-/** @name VBOX_EXTPACK_DESCRIPTION_NAME +- * The name of the manifest file in an extension pack. */ +-#define VBOX_EXTPACK_MANIFEST_NAME "ExtPack.manifest" +-/** @name VBOX_EXTPACK_SIGNATURE_NAME +- * The name of the signature file in an extension pack. */ +-#define VBOX_EXTPACK_SIGNATURE_NAME "ExtPack.signature" +-/** @name VBOX_EXTPACK_LICENSE_NAME_PREFIX +- * The name prefix of a license file in an extension pack. There can be +- * several license files in a pack, the variations being on locale, language +- * and format (HTML, RTF, plain text). All extension packages shall include +- * a */ +-#define VBOX_EXTPACK_LICENSE_NAME_PREFIX "ExtPack-license" +-/** @name VBOX_EXTPACK_SUFFIX +- * The suffix of a extension pack tarball. */ +-#define VBOX_EXTPACK_SUFFIX ".vbox-extpack" +- +-/** The minimum length (strlen) of a extension pack name. */ +-#define VBOX_EXTPACK_NAME_MIN_LEN 3 +-/** The max length (strlen) of a extension pack name. */ +-#define VBOX_EXTPACK_NAME_MAX_LEN 64 +- +-/** The architecture-dependent application data subdirectory where the +- * extension packs are installed. Relative to RTPathAppPrivateArch. */ +-#define VBOX_EXTPACK_INSTALL_DIR "ExtensionPacks" +-/** The architecture-independent application data subdirectory where the +- * certificates are installed. Relative to RTPathAppPrivateNoArch. */ +-#define VBOX_EXTPACK_CERT_DIR "ExtPackCertificates" +- +-/** The maximum entry name length. +- * Play short and safe. */ +-#define VBOX_EXTPACK_MAX_MEMBER_NAME_LENGTH 128 +- +- +-/** +- * Plug-in descriptor. +- */ +-typedef struct VBOXEXTPACKPLUGINDESC +-{ +- /** The name. */ +- RTCString strName; +- /** The module name. */ +- RTCString strModule; +- /** The description. */ +- RTCString strDescription; +- /** The frontend or component which it plugs into. */ +- RTCString strFrontend; +-} VBOXEXTPACKPLUGINDESC; +-/** Pointer to a plug-in descriptor. */ +-typedef VBOXEXTPACKPLUGINDESC *PVBOXEXTPACKPLUGINDESC; +- +-/** +- * Extension pack descriptor +- * +- * This is the internal representation of the ExtPack.xml. +- */ +-typedef struct VBOXEXTPACKDESC +-{ +- /** The name. */ +- RTCString strName; +- /** The description. */ +- RTCString strDescription; +- /** The version string. */ +- RTCString strVersion; +- /** The edition string. */ +- RTCString strEdition; +- /** The internal revision number. */ +- uint32_t uRevision; +- /** The name of the main module. */ +- RTCString strMainModule; +- /** The name of the VRDE module, empty if none. */ +- RTCString strVrdeModule; +- /** The number of plug-in descriptors. */ +- uint32_t cPlugIns; +- /** Pointer to an array of plug-in descriptors. */ +- PVBOXEXTPACKPLUGINDESC paPlugIns; +- /** Whether to show the license prior to installation. */ +- bool fShowLicense; +-} VBOXEXTPACKDESC; +- +-/** Pointer to a extension pack descriptor. */ +-typedef VBOXEXTPACKDESC *PVBOXEXTPACKDESC; +-/** Pointer to a const extension pack descriptor. */ +-typedef VBOXEXTPACKDESC const *PCVBOXEXTPACKDESC; +- +- +-void VBoxExtPackInitDesc(PVBOXEXTPACKDESC a_pExtPackDesc); +-RTCString *VBoxExtPackLoadDesc(const char *a_pszDir, PVBOXEXTPACKDESC a_pExtPackDesc, PRTFSOBJINFO a_pObjInfo); +-RTCString *VBoxExtPackLoadDescFromVfsFile(RTVFSFILE hVfsFile, PVBOXEXTPACKDESC a_pExtPackDesc, PRTFSOBJINFO a_pObjInfo); +-RTCString *VBoxExtPackExtractNameFromTarballPath(const char *pszTarball); +-void VBoxExtPackFreeDesc(PVBOXEXTPACKDESC a_pExtPackDesc); +-bool VBoxExtPackIsValidName(const char *pszName); +-bool VBoxExtPackIsValidMangledName(const char *pszMangledName, size_t cchMax = RTSTR_MAX); +-RTCString *VBoxExtPackMangleName(const char *pszName); +-RTCString *VBoxExtPackUnmangleName(const char *pszMangledName, size_t cbMax); +-int VBoxExtPackCalcDir(char *pszExtPackDir, size_t cbExtPackDir, const char *pszParentDir, const char *pszName); +-bool VBoxExtPackIsValidVersionString(const char *pszVersion); +-bool VBoxExtPackIsValidEditionString(const char *pszEdition); +-bool VBoxExtPackIsValidModuleString(const char *pszModule); +- +-int VBoxExtPackValidateMember(const char *pszName, RTVFSOBJTYPE enmType, RTVFSOBJ hVfsObj, char *pszError, size_t cbError); +-int VBoxExtPackOpenTarFss(RTFILE hTarballFile, char *pszError, size_t cbError, PRTVFSFSSTREAM phTarFss, PRTMANIFEST phFileManifest); +-int VBoxExtPackValidateTarball(RTFILE hTarballFile, const char *pszExtPackName, +- const char *pszTarball, const char *pszTarballDigest, +- char *pszError, size_t cbError, +- PRTMANIFEST phValidManifest, PRTVFSFILE phXmlFile, RTCString *pStrDigest); +- +- +-#endif +- +--- VirtualBox-4.1.18.orig/src/VBox/Main/src-all/ExtPackManagerImpl.cpp 2012-06-20 10:17:34.000000000 -0300 ++++ /dev/null 2012-07-24 14:48:18.638572110 -0300 +@@ -1,3126 +0,0 @@ +-/* $Id: ExtPackManagerImpl.cpp $ */ +-/** @file +- * VirtualBox Main - interface for Extension Packs, VBoxSVC & VBoxC. +- */ +- +-/* +- * Copyright (C) 2010 Oracle Corporation +- * +- * This file is part of VirtualBox Open Source Edition (OSE), as +- * available from http://www.virtualbox.org. This file is free software; +- * you can redistribute it and/or modify it under the terms of the GNU +- * General Public License (GPL) as published by the Free Software +- * Foundation, in version 2 as it comes in the "COPYING" file of the +- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the +- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. +- */ +- +- +-/******************************************************************************* +-* Header Files * +-*******************************************************************************/ +-#include "ExtPackManagerImpl.h" +-#include "ExtPackUtil.h" +- +-#include <iprt/buildconfig.h> +-#include <iprt/ctype.h> +-#include <iprt/dir.h> +-#include <iprt/env.h> +-#include <iprt/file.h> +-#include <iprt/ldr.h> +-#include <iprt/manifest.h> +-#include <iprt/param.h> +-#include <iprt/path.h> +-#include <iprt/pipe.h> +-#include <iprt/process.h> +-#include <iprt/string.h> +- +-#include <VBox/com/array.h> +-#include <VBox/com/ErrorInfo.h> +-#include <VBox/err.h> +-#include <VBox/log.h> +-#include <VBox/sup.h> +-#include <VBox/version.h> +-#include "AutoCaller.h" +-#include "Global.h" +-#include "ProgressImpl.h" +-#include "SystemPropertiesImpl.h" +-#include "VirtualBoxImpl.h" +- +- +-/******************************************************************************* +-* Defined Constants And Macros * +-*******************************************************************************/ +-/** @name VBOX_EXTPACK_HELPER_NAME +- * The name of the utility application we employ to install and uninstall the +- * extension packs. This is a set-uid-to-root binary on unixy platforms, which +- * is why it has to be a separate application. +- */ +-#if defined(RT_OS_WINDOWS) || defined(RT_OS_OS2) +-# define VBOX_EXTPACK_HELPER_NAME "VBoxExtPackHelperApp.exe" +-#else +-# define VBOX_EXTPACK_HELPER_NAME "VBoxExtPackHelperApp" +-#endif +- +- +-/******************************************************************************* +-* Structures and Typedefs * +-*******************************************************************************/ +-struct ExtPackBaseData +-{ +-public: +- /** The extension pack descriptor (loaded from the XML, mostly). */ +- VBOXEXTPACKDESC Desc; +- /** The file system object info of the XML file. +- * This is for detecting changes and save time in refresh(). */ +- RTFSOBJINFO ObjInfoDesc; +- /** Whether it's usable or not. */ +- bool fUsable; +- /** Why it is unusable. */ +- Utf8Str strWhyUnusable; +-}; +- +-/** +- * Private extension pack data. +- */ +-struct ExtPackFile::Data : public ExtPackBaseData +-{ +-public: +- /** The path to the tarball. */ +- Utf8Str strExtPackFile; +- /** The SHA-256 hash of the file (as string). */ +- Utf8Str strDigest; +- /** The file handle of the extension pack file. */ +- RTFILE hExtPackFile; +- /** Our manifest for the tarball. */ +- RTMANIFEST hOurManifest; +- /** Pointer to the extension pack manager. */ +- ComObjPtr<ExtPackManager> ptrExtPackMgr; +- /** Pointer to the VirtualBox object so we can create a progress object. */ +- VirtualBox *pVirtualBox; +- +- RTMEMEF_NEW_AND_DELETE_OPERATORS(); +-}; +- +-/** +- * Private extension pack data. +- */ +-struct ExtPack::Data : public ExtPackBaseData +-{ +-public: +- /** Where the extension pack is located. */ +- Utf8Str strExtPackPath; +- /** The file system object info of the extension pack directory. +- * This is for detecting changes and save time in refresh(). */ +- RTFSOBJINFO ObjInfoExtPack; +- /** The full path to the main module. */ +- Utf8Str strMainModPath; +- /** The file system object info of the main module. +- * This is used to determin whether to bother try reload it. */ +- RTFSOBJINFO ObjInfoMainMod; +- /** The module handle of the main extension pack module. */ +- RTLDRMOD hMainMod; +- +- /** The helper callbacks for the extension pack. */ +- VBOXEXTPACKHLP Hlp; +- /** Pointer back to the extension pack object (for Hlp methods). */ +- ExtPack *pThis; +- /** The extension pack registration structure. */ +- PCVBOXEXTPACKREG pReg; +- /** The current context. */ +- VBOXEXTPACKCTX enmContext; +- /** Set if we've made the pfnVirtualBoxReady or pfnConsoleReady call. */ +- bool fMadeReadyCall; +- +- RTMEMEF_NEW_AND_DELETE_OPERATORS(); +-}; +- +-/** List of extension packs. */ +-typedef std::list< ComObjPtr<ExtPack> > ExtPackList; +- +-/** +- * Private extension pack manager data. +- */ +-struct ExtPackManager::Data +-{ +- /** The directory where the extension packs are installed. */ +- Utf8Str strBaseDir; +- /** The directory where the certificates this installation recognizes are +- * stored. */ +- Utf8Str strCertificatDirPath; +- /** The list of installed extension packs. */ +- ExtPackList llInstalledExtPacks; +- /** Pointer to the VirtualBox object, our parent. */ +- VirtualBox *pVirtualBox; +- /** The current context. */ +- VBOXEXTPACKCTX enmContext; +-#if !defined(RT_OS_WINDOWS) && !defined(RT_OS_DARWIN) +- /** File handle for the VBoxVMM libary which we slurp because ExtPacks depend on it. */ +- RTLDRMOD hVBoxVMM; +-#endif +- +- RTMEMEF_NEW_AND_DELETE_OPERATORS(); +-}; +- +-/** +- * Extension pack installation job. +- */ +-typedef struct EXTPACKINSTALLJOB +-{ +- /** Smart pointer to the extension pack file. */ +- ComPtr<ExtPackFile> ptrExtPackFile; +- /** The replace argument. */ +- bool fReplace; +- /** The display info argument. */ +- Utf8Str strDisplayInfo; +- /** Smart pointer to the extension manager. */ +- ComPtr<ExtPackManager> ptrExtPackMgr; +- /** Smart pointer to the progress object for this job. */ +- ComObjPtr<Progress> ptrProgress; +-} EXTPACKINSTALLJOB; +-/** Pointer to an extension pack installation job. */ +-typedef EXTPACKINSTALLJOB *PEXTPACKINSTALLJOB; +- +-/** +- * Extension pack uninstallation job. +- */ +-typedef struct EXTPACKUNINSTALLJOB +-{ +- /** Smart pointer to the extension manager. */ +- ComPtr<ExtPackManager> ptrExtPackMgr; +- /** The name of the extension pack. */ +- Utf8Str strName; +- /** The replace argument. */ +- bool fForcedRemoval; +- /** The display info argument. */ +- Utf8Str strDisplayInfo; +- /** Smart pointer to the progress object for this job. */ +- ComObjPtr<Progress> ptrProgress; +-} EXTPACKUNINSTALLJOB; +-/** Pointer to an extension pack uninstallation job. */ +-typedef EXTPACKUNINSTALLJOB *PEXTPACKUNINSTALLJOB; +- +- +-DEFINE_EMPTY_CTOR_DTOR(ExtPackFile) +- +-/** +- * Called by ComObjPtr::createObject when creating the object. +- * +- * Just initialize the basic object state, do the rest in initWithDir(). +- * +- * @returns S_OK. +- */ +-HRESULT ExtPackFile::FinalConstruct() +-{ +- m = NULL; +- return BaseFinalConstruct(); +-} +- +-/** +- * Initializes the extension pack by reading its file. +- * +- * @returns COM status code. +- * @param a_pszFile The path to the extension pack file. +- * @param a_pszDigest The SHA-256 digest of the file. Or an empty string. +- * @param a_pExtPackMgr Pointer to the extension pack manager. +- * @param a_pVirtualBox Pointer to the VirtualBox object. +- */ +-HRESULT ExtPackFile::initWithFile(const char *a_pszFile, const char *a_pszDigest, ExtPackManager *a_pExtPackMgr, VirtualBox *a_pVirtualBox) +-{ +- AutoInitSpan autoInitSpan(this); +- AssertReturn(autoInitSpan.isOk(), E_FAIL); +- +- /* +- * Allocate + initialize our private data. +- */ +- m = new ExtPackFile::Data; +- VBoxExtPackInitDesc(&m->Desc); +- RT_ZERO(m->ObjInfoDesc); +- m->fUsable = false; +- m->strWhyUnusable = tr("ExtPack::init failed"); +- m->strExtPackFile = a_pszFile; +- m->strDigest = a_pszDigest; +- m->hExtPackFile = NIL_RTFILE; +- m->hOurManifest = NIL_RTMANIFEST; +- m->ptrExtPackMgr = a_pExtPackMgr; +- m->pVirtualBox = a_pVirtualBox; +- +- RTCString *pstrTarName = VBoxExtPackExtractNameFromTarballPath(a_pszFile); +- if (pstrTarName) +- { +- m->Desc.strName = *pstrTarName; +- delete pstrTarName; +- pstrTarName = NULL; +- } +- +- autoInitSpan.setSucceeded(); +- +- /* +- * Try open the extension pack and check that it is a regular file. +- */ +- int vrc = RTFileOpen(&m->hExtPackFile, a_pszFile, +- RTFILE_O_READ | RTFILE_O_DENY_WRITE | RTFILE_O_OPEN); +- if (RT_FAILURE(vrc)) +- { +- if (vrc == VERR_FILE_NOT_FOUND || vrc == VERR_PATH_NOT_FOUND) +- return initFailed(tr("'%s' file not found"), a_pszFile); +- return initFailed(tr("RTFileOpen('%s',,) failed with %Rrc"), a_pszFile, vrc); +- } +- +- RTFSOBJINFO ObjInfo; +- vrc = RTFileQueryInfo(m->hExtPackFile, &ObjInfo, RTFSOBJATTRADD_UNIX); +- if (RT_FAILURE(vrc)) +- return initFailed(tr("RTFileQueryInfo failed with %Rrc on '%s'"), vrc, a_pszFile); +- if (!RTFS_IS_FILE(ObjInfo.Attr.fMode)) +- return initFailed(tr("Not a regular file: %s"), a_pszFile); +- +- /* +- * Validate the tarball and extract the XML file. +- */ +- char szError[8192]; +- RTVFSFILE hXmlFile; +- vrc = VBoxExtPackValidateTarball(m->hExtPackFile, NULL /*pszExtPackName*/, a_pszFile, a_pszDigest, +- szError, sizeof(szError), &m->hOurManifest, &hXmlFile, &m->strDigest); +- if (RT_FAILURE(vrc)) +- return initFailed(tr("%s"), szError); +- +- /* +- * Parse the XML. +- */ +- RTCString strSavedName(m->Desc.strName); +- RTCString *pStrLoadErr = VBoxExtPackLoadDescFromVfsFile(hXmlFile, &m->Desc, &m->ObjInfoDesc); +- RTVfsFileRelease(hXmlFile); +- if (pStrLoadErr != NULL) +- { +- m->strWhyUnusable.printf(tr("Failed to the xml file: %s"), pStrLoadErr->c_str()); +- m->Desc.strName = strSavedName; +- delete pStrLoadErr; +- return S_OK; +- } +- +- /* +- * Match the tarball name with the name from the XML. +- */ +- /** @todo drop this restriction after the old install interface is +- * dropped. */ +- if (!strSavedName.equalsIgnoreCase(m->Desc.strName)) +- return initFailed(tr("Extension pack name mismatch between the downloaded file and the XML inside it (xml='%s' file='%s')"), +- m->Desc.strName.c_str(), strSavedName.c_str()); +- +- m->fUsable = true; +- m->strWhyUnusable.setNull(); +- return S_OK; +-} +- +-/** +- * Protected helper that formats the strWhyUnusable value. +- * +- * @returns S_OK +- * @param a_pszWhyFmt Why it failed, format string. +- * @param ... The format arguments. +- */ +-HRESULT ExtPackFile::initFailed(const char *a_pszWhyFmt, ...) +-{ +- va_list va; +- va_start(va, a_pszWhyFmt); +- m->strWhyUnusable.printfV(a_pszWhyFmt, va); +- va_end(va); +- return S_OK; +-} +- +-/** +- * COM cruft. +- */ +-void ExtPackFile::FinalRelease() +-{ +- uninit(); +- BaseFinalRelease(); +-} +- +-/** +- * Do the actual cleanup. +- */ +-void ExtPackFile::uninit() +-{ +- /* Enclose the state transition Ready->InUninit->NotReady */ +- AutoUninitSpan autoUninitSpan(this); +- if (!autoUninitSpan.uninitDone() && m != NULL) +- { +- VBoxExtPackFreeDesc(&m->Desc); +- RTFileClose(m->hExtPackFile); +- m->hExtPackFile = NIL_RTFILE; +- RTManifestRelease(m->hOurManifest); +- m->hOurManifest = NIL_RTMANIFEST; +- +- delete m; +- m = NULL; +- } +-} +- +-STDMETHODIMP ExtPackFile::COMGETTER(Name)(BSTR *a_pbstrName) +-{ +- CheckComArgOutPointerValid(a_pbstrName); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- Bstr str(m->Desc.strName); +- str.cloneTo(a_pbstrName); +- } +- return hrc; +-} +- +-STDMETHODIMP ExtPackFile::COMGETTER(Description)(BSTR *a_pbstrDescription) +-{ +- CheckComArgOutPointerValid(a_pbstrDescription); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- Bstr str(m->Desc.strDescription); +- str.cloneTo(a_pbstrDescription); +- } +- return hrc; +-} +- +-STDMETHODIMP ExtPackFile::COMGETTER(Version)(BSTR *a_pbstrVersion) +-{ +- CheckComArgOutPointerValid(a_pbstrVersion); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- /* HACK ALERT: This is for easing backporting to 4.1. The edition stuff +- will be changed into a separate */ +- if (m->Desc.strEdition.isEmpty()) +- { +- Bstr str(m->Desc.strVersion); +- str.cloneTo(a_pbstrVersion); +- } +- else +- { +- RTCString strHack(m->Desc.strVersion); +- strHack.append('-'); +- strHack.append(m->Desc.strEdition); +- +- Bstr str(strHack); +- str.cloneTo(a_pbstrVersion); +- } +- } +- return hrc; +-} +- +-STDMETHODIMP ExtPackFile::COMGETTER(Revision)(ULONG *a_puRevision) +-{ +- CheckComArgOutPointerValid(a_puRevision); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- *a_puRevision = m->Desc.uRevision; +- return hrc; +-} +- +-STDMETHODIMP ExtPackFile::COMGETTER(VRDEModule)(BSTR *a_pbstrVrdeModule) +-{ +- CheckComArgOutPointerValid(a_pbstrVrdeModule); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- Bstr str(m->Desc.strVrdeModule); +- str.cloneTo(a_pbstrVrdeModule); +- } +- return hrc; +-} +- +-STDMETHODIMP ExtPackFile::COMGETTER(PlugIns)(ComSafeArrayOut(IExtPackPlugIn *, a_paPlugIns)) +-{ +- /** @todo implement plug-ins. */ +-#ifdef VBOX_WITH_XPCOM +- NOREF(a_paPlugIns); +- NOREF(a_paPlugInsSize); +-#endif +- ReturnComNotImplemented(); +-} +- +-STDMETHODIMP ExtPackFile::COMGETTER(Usable)(BOOL *a_pfUsable) +-{ +- CheckComArgOutPointerValid(a_pfUsable); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- *a_pfUsable = m->fUsable; +- return hrc; +-} +- +-STDMETHODIMP ExtPackFile::COMGETTER(WhyUnusable)(BSTR *a_pbstrWhy) +-{ +- CheckComArgOutPointerValid(a_pbstrWhy); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- m->strWhyUnusable.cloneTo(a_pbstrWhy); +- return hrc; +-} +- +-STDMETHODIMP ExtPackFile::COMGETTER(ShowLicense)(BOOL *a_pfShowIt) +-{ +- CheckComArgOutPointerValid(a_pfShowIt); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- *a_pfShowIt = m->Desc.fShowLicense; +- return hrc; +-} +- +-STDMETHODIMP ExtPackFile::COMGETTER(License)(BSTR *a_pbstrHtmlLicense) +-{ +- Bstr bstrHtml("html"); +- return QueryLicense(Bstr::Empty.raw(), Bstr::Empty.raw(), bstrHtml.raw(), a_pbstrHtmlLicense); +-} +- +-/* Same as ExtPack::QueryLicense, should really explore the subject of base classes here... */ +-STDMETHODIMP ExtPackFile::QueryLicense(IN_BSTR a_bstrPreferredLocale, IN_BSTR a_bstrPreferredLanguage, IN_BSTR a_bstrFormat, +- BSTR *a_pbstrLicense) +-{ +- /* +- * Validate input. +- */ +- CheckComArgOutPointerValid(a_pbstrLicense); +- CheckComArgNotNull(a_bstrPreferredLocale); +- CheckComArgNotNull(a_bstrPreferredLanguage); +- CheckComArgNotNull(a_bstrFormat); +- +- Utf8Str strPreferredLocale(a_bstrPreferredLocale); +- if (strPreferredLocale.length() != 2 && strPreferredLocale.length() != 0) +- return setError(E_FAIL, tr("The preferred locale is a two character string or empty.")); +- +- Utf8Str strPreferredLanguage(a_bstrPreferredLanguage); +- if (strPreferredLanguage.length() != 2 && strPreferredLanguage.length() != 0) +- return setError(E_FAIL, tr("The preferred lanuage is a two character string or empty.")); +- +- Utf8Str strFormat(a_bstrFormat); +- if ( !strFormat.equals("html") +- && !strFormat.equals("rtf") +- && !strFormat.equals("txt")) +- return setError(E_FAIL, tr("The license format can only have the values 'html', 'rtf' and 'txt'.")); +- +- /* +- * Combine the options to form a file name before locking down anything. +- */ +- char szName[sizeof(VBOX_EXTPACK_LICENSE_NAME_PREFIX "-de_DE.html") + 2]; +- if (strPreferredLocale.isNotEmpty() && strPreferredLanguage.isNotEmpty()) +- RTStrPrintf(szName, sizeof(szName), VBOX_EXTPACK_LICENSE_NAME_PREFIX "-%s_%s.%s", +- strPreferredLocale.c_str(), strPreferredLanguage.c_str(), strFormat.c_str()); +- else if (strPreferredLocale.isNotEmpty()) +- RTStrPrintf(szName, sizeof(szName), VBOX_EXTPACK_LICENSE_NAME_PREFIX "-%s.%s", strPreferredLocale.c_str(), strFormat.c_str()); +- else if (strPreferredLanguage.isNotEmpty()) +- RTStrPrintf(szName, sizeof(szName), VBOX_EXTPACK_LICENSE_NAME_PREFIX "-_%s.%s", strPreferredLocale.c_str(), strFormat.c_str()); +- else +- RTStrPrintf(szName, sizeof(szName), VBOX_EXTPACK_LICENSE_NAME_PREFIX ".%s", strFormat.c_str()); +- +- /* +- * Lock the extension pack. We need a write lock here as there must not be +- * concurrent accesses to the tar file handle. +- */ +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS); +- +- /* +- * Do not permit this query on a pack that isn't considered usable (could +- * be marked so because of bad license files). +- */ +- if (!m->fUsable) +- hrc = setError(E_FAIL, tr("%s"), m->strWhyUnusable.c_str()); +- else +- { +- /* +- * Look it up in the manifest before scanning the tarball for it +- */ +- if (RTManifestEntryExists(m->hOurManifest, szName)) +- { +- RTVFSFSSTREAM hTarFss; +- char szError[8192]; +- int vrc = VBoxExtPackOpenTarFss(m->hExtPackFile, szError, sizeof(szError), &hTarFss, NULL); +- if (RT_SUCCESS(vrc)) +- { +- for (;;) +- { +- /* Get the first/next. */ +- char *pszName; +- RTVFSOBJ hVfsObj; +- RTVFSOBJTYPE enmType; +- vrc = RTVfsFsStrmNext(hTarFss, &pszName, &enmType, &hVfsObj); +- if (RT_FAILURE(vrc)) +- { +- if (vrc != VERR_EOF) +- hrc = setError(VBOX_E_IPRT_ERROR, tr("RTVfsFsStrmNext failed: %Rrc"), vrc); +- else +- hrc = setError(E_UNEXPECTED, tr("'%s' was found in the manifest but not in the tarball"), szName); +- break; +- } +- +- /* Is this it? */ +- const char *pszAdjName = pszName[0] == '.' && pszName[1] == '/' ? &pszName[2] : pszName; +- if ( !strcmp(pszAdjName, szName) +- && ( enmType == RTVFSOBJTYPE_IO_STREAM +- || enmType == RTVFSOBJTYPE_FILE)) +- { +- RTVFSIOSTREAM hVfsIos = RTVfsObjToIoStream(hVfsObj); +- RTVfsObjRelease(hVfsObj); +- RTStrFree(pszName); +- +- /* Load the file into memory. */ +- RTFSOBJINFO ObjInfo; +- vrc = RTVfsIoStrmQueryInfo(hVfsIos, &ObjInfo, RTFSOBJATTRADD_NOTHING); +- if (RT_SUCCESS(vrc)) +- { +- size_t cbFile = (size_t)ObjInfo.cbObject; +- void *pvFile = RTMemAllocZ(cbFile + 1); +- if (pvFile) +- { +- vrc = RTVfsIoStrmRead(hVfsIos, pvFile, cbFile, true /*fBlocking*/, NULL); +- if (RT_SUCCESS(vrc)) +- { +- /* try translate it into a string we can return. */ +- Bstr bstrLicense((const char *)pvFile, cbFile); +- if (bstrLicense.isNotEmpty()) +- { +- bstrLicense.detachTo(a_pbstrLicense); +- hrc = S_OK; +- } +- else +- hrc = setError(VBOX_E_IPRT_ERROR, +- tr("The license file '%s' is empty or contains invalid UTF-8 encoding"), +- szName); +- } +- else +- hrc = setError(VBOX_E_IPRT_ERROR, tr("Failed to read '%s': %Rrc"), szName, vrc); +- RTMemFree(pvFile); +- } +- else +- hrc = setError(E_OUTOFMEMORY, tr("Failed to allocate %zu bytes for '%s'"), cbFile, szName); +- } +- else +- hrc = setError(VBOX_E_IPRT_ERROR, tr("RTVfsIoStrmQueryInfo on '%s': %Rrc"), szName, vrc); +- RTVfsIoStrmRelease(hVfsIos); +- break; +- } +- +- /* Release current. */ +- RTVfsObjRelease(hVfsObj); +- RTStrFree(pszName); +- } +- RTVfsFsStrmRelease(hTarFss); +- } +- else +- hrc = setError(VBOX_E_OBJECT_NOT_FOUND, tr("%s"), szError); +- } +- else +- hrc = setError(VBOX_E_OBJECT_NOT_FOUND, tr("The license file '%s' was not found in '%s'"), +- szName, m->strExtPackFile.c_str()); +- } +- } +- return hrc; +-} +- +-STDMETHODIMP ExtPackFile::COMGETTER(FilePath)(BSTR *a_pbstrPath) +-{ +- CheckComArgOutPointerValid(a_pbstrPath); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- m->strExtPackFile.cloneTo(a_pbstrPath); +- return hrc; +-} +- +-STDMETHODIMP ExtPackFile::Install(BOOL a_fReplace, IN_BSTR a_bstrDisplayInfo, IProgress **a_ppProgress) +-{ +- if (a_ppProgress) +- *a_ppProgress = NULL; +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- if (m->fUsable) +- { +- PEXTPACKINSTALLJOB pJob = NULL; +- try +- { +- pJob = new EXTPACKINSTALLJOB; +- pJob->ptrExtPackFile = this; +- pJob->fReplace = a_fReplace != FALSE; +- pJob->strDisplayInfo = a_bstrDisplayInfo; +- pJob->ptrExtPackMgr = m->ptrExtPackMgr; +- hrc = pJob->ptrProgress.createObject(); +- if (SUCCEEDED(hrc)) +- { +- Bstr bstrDescription = tr("Installing extension pack"); +- hrc = pJob->ptrProgress->init( +-#ifndef VBOX_COM_INPROC +- m->pVirtualBox, +-#endif +- static_cast<IExtPackFile *>(this), +- bstrDescription.raw(), +- FALSE /*aCancelable*/, +- NULL /*aId*/); +- } +- if (SUCCEEDED(hrc)) +- { +- ComPtr<Progress> ptrProgress = pJob->ptrProgress; +- int vrc = RTThreadCreate(NULL /*phThread*/, ExtPackManager::doInstallThreadProc, pJob, 0, +- RTTHREADTYPE_DEFAULT, 0 /*fFlags*/, "ExtPackInst"); +- if (RT_SUCCESS(vrc)) +- { +- pJob = NULL; /* the thread deletes it */ +- ptrProgress.queryInterfaceTo(a_ppProgress); +- } +- else +- hrc = setError(VBOX_E_IPRT_ERROR, tr("RTThreadCreate failed with %Rrc"), vrc); +- } +- } +- catch (std::bad_alloc) +- { +- hrc = E_OUTOFMEMORY; +- } +- if (pJob) +- delete pJob; +- } +- else +- hrc = setError(E_FAIL, "%s", m->strWhyUnusable.c_str()); +- } +- return hrc; +-} +- +- +- +- +- +-DEFINE_EMPTY_CTOR_DTOR(ExtPack) +- +-/** +- * Called by ComObjPtr::createObject when creating the object. +- * +- * Just initialize the basic object state, do the rest in initWithDir(). +- * +- * @returns S_OK. +- */ +-HRESULT ExtPack::FinalConstruct() +-{ +- m = NULL; +- return S_OK; +-} +- +-/** +- * Initializes the extension pack by reading its file. +- * +- * @returns COM status code. +- * @param a_enmContext The context we're in. +- * @param a_pszName The name of the extension pack. This is also the +- * name of the subdirector under @a a_pszParentDir +- * where the extension pack is installed. +- * @param a_pszDir The extension pack directory name. +- */ +-HRESULT ExtPack::initWithDir(VBOXEXTPACKCTX a_enmContext, const char *a_pszName, const char *a_pszDir) +-{ +- AutoInitSpan autoInitSpan(this); +- AssertReturn(autoInitSpan.isOk(), E_FAIL); +- +- static const VBOXEXTPACKHLP s_HlpTmpl = +- { +- /* u32Version = */ VBOXEXTPACKHLP_VERSION, +- /* uVBoxFullVersion = */ VBOX_FULL_VERSION, +- /* uVBoxVersionRevision = */ 0, +- /* u32Padding = */ 0, +- /* pszVBoxVersion = */ "", +- /* pfnFindModule = */ ExtPack::hlpFindModule, +- /* pfnGetFilePath = */ ExtPack::hlpGetFilePath, +- /* pfnGetContext = */ ExtPack::hlpGetContext, +- /* pfnReserved1 = */ ExtPack::hlpReservedN, +- /* pfnReserved2 = */ ExtPack::hlpReservedN, +- /* pfnReserved3 = */ ExtPack::hlpReservedN, +- /* pfnReserved4 = */ ExtPack::hlpReservedN, +- /* pfnReserved5 = */ ExtPack::hlpReservedN, +- /* pfnReserved6 = */ ExtPack::hlpReservedN, +- /* pfnReserved7 = */ ExtPack::hlpReservedN, +- /* pfnReserved8 = */ ExtPack::hlpReservedN, +- /* pfnReserved9 = */ ExtPack::hlpReservedN, +- /* u32EndMarker = */ VBOXEXTPACKHLP_VERSION +- }; +- +- /* +- * Allocate + initialize our private data. +- */ +- m = new Data; +- VBoxExtPackInitDesc(&m->Desc); +- m->Desc.strName = a_pszName; +- RT_ZERO(m->ObjInfoDesc); +- m->fUsable = false; +- m->strWhyUnusable = tr("ExtPack::init failed"); +- m->strExtPackPath = a_pszDir; +- RT_ZERO(m->ObjInfoExtPack); +- m->strMainModPath.setNull(); +- RT_ZERO(m->ObjInfoMainMod); +- m->hMainMod = NIL_RTLDRMOD; +- m->Hlp = s_HlpTmpl; +- m->Hlp.pszVBoxVersion = RTBldCfgVersion(); +- m->Hlp.uVBoxInternalRevision = RTBldCfgRevision(); +- m->pThis = this; +- m->pReg = NULL; +- m->enmContext = a_enmContext; +- m->fMadeReadyCall = false; +- +- /* +- * Probe the extension pack (this code is shared with refresh()). +- */ +- probeAndLoad(); +- +- autoInitSpan.setSucceeded(); +- return S_OK; +-} +- +-/** +- * COM cruft. +- */ +-void ExtPack::FinalRelease() +-{ +- uninit(); +-} +- +-/** +- * Do the actual cleanup. +- */ +-void ExtPack::uninit() +-{ +- /* Enclose the state transition Ready->InUninit->NotReady */ +- AutoUninitSpan autoUninitSpan(this); +- if (!autoUninitSpan.uninitDone() && m != NULL) +- { +- if (m->hMainMod != NIL_RTLDRMOD) +- { +- AssertPtr(m->pReg); +- if (m->pReg->pfnUnload != NULL) +- m->pReg->pfnUnload(m->pReg); +- +- RTLdrClose(m->hMainMod); +- m->hMainMod = NIL_RTLDRMOD; +- m->pReg = NULL; +- } +- +- VBoxExtPackFreeDesc(&m->Desc); +- +- delete m; +- m = NULL; +- } +-} +- +- +-/** +- * Calls the installed hook. +- * +- * @returns true if we left the lock, false if we didn't. +- * @param a_pVirtualBox The VirtualBox interface. +- * @param a_pLock The write lock held by the caller. +- * @param pErrInfo Where to return error information. +- */ +-bool ExtPack::callInstalledHook(IVirtualBox *a_pVirtualBox, AutoWriteLock *a_pLock, PRTERRINFO pErrInfo) +-{ +- if ( m != NULL +- && m->hMainMod != NIL_RTLDRMOD) +- { +- if (m->pReg->pfnInstalled) +- { +- ComPtr<ExtPack> ptrSelfRef = this; +- a_pLock->release(); +- pErrInfo->rc = m->pReg->pfnInstalled(m->pReg, a_pVirtualBox, pErrInfo); +- a_pLock->acquire(); +- return true; +- } +- } +- pErrInfo->rc = VINF_SUCCESS; +- return false; +-} +- +-/** +- * Calls the uninstall hook and closes the module. +- * +- * @returns S_OK or COM error status with error information. +- * @param a_pVirtualBox The VirtualBox interface. +- * @param a_fForcedRemoval When set, we'll ignore complaints from the +- * uninstall hook. +- * @remarks The caller holds the manager's write lock, not released. +- */ +-HRESULT ExtPack::callUninstallHookAndClose(IVirtualBox *a_pVirtualBox, bool a_fForcedRemoval) +-{ +- HRESULT hrc = S_OK; +- +- if ( m != NULL +- && m->hMainMod != NIL_RTLDRMOD) +- { +- if (m->pReg->pfnUninstall && !a_fForcedRemoval) +- { +- int vrc = m->pReg->pfnUninstall(m->pReg, a_pVirtualBox); +- if (RT_FAILURE(vrc)) +- { +- LogRel(("ExtPack pfnUninstall returned %Rrc for %s\n", vrc, m->Desc.strName.c_str())); +- if (!a_fForcedRemoval) +- hrc = setError(E_FAIL, tr("pfnUninstall returned %Rrc"), vrc); +- } +- } +- if (SUCCEEDED(hrc)) +- { +- RTLdrClose(m->hMainMod); +- m->hMainMod = NIL_RTLDRMOD; +- m->pReg = NULL; +- } +- } +- +- return hrc; +-} +- +-/** +- * Calls the pfnVirtualBoxReady hook. +- * +- * @returns true if we left the lock, false if we didn't. +- * @param a_pVirtualBox The VirtualBox interface. +- * @param a_pLock The write lock held by the caller. +- */ +-bool ExtPack::callVirtualBoxReadyHook(IVirtualBox *a_pVirtualBox, AutoWriteLock *a_pLock) +-{ +- if ( m != NULL +- && m->fUsable +- && !m->fMadeReadyCall) +- { +- m->fMadeReadyCall = true; +- if (m->pReg->pfnVirtualBoxReady) +- { +- ComPtr<ExtPack> ptrSelfRef = this; +- a_pLock->release(); +- m->pReg->pfnVirtualBoxReady(m->pReg, a_pVirtualBox); +- a_pLock->acquire(); +- return true; +- } +- } +- return false; +-} +- +-/** +- * Calls the pfnConsoleReady hook. +- * +- * @returns true if we left the lock, false if we didn't. +- * @param a_pConsole The Console interface. +- * @param a_pLock The write lock held by the caller. +- */ +-bool ExtPack::callConsoleReadyHook(IConsole *a_pConsole, AutoWriteLock *a_pLock) +-{ +- if ( m != NULL +- && m->fUsable +- && !m->fMadeReadyCall) +- { +- m->fMadeReadyCall = true; +- if (m->pReg->pfnConsoleReady) +- { +- ComPtr<ExtPack> ptrSelfRef = this; +- a_pLock->release(); +- m->pReg->pfnConsoleReady(m->pReg, a_pConsole); +- a_pLock->acquire(); +- return true; +- } +- } +- return false; +-} +- +-/** +- * Calls the pfnVMCreate hook. +- * +- * @returns true if we left the lock, false if we didn't. +- * @param a_pVirtualBox The VirtualBox interface. +- * @param a_pMachine The machine interface of the new VM. +- * @param a_pLock The write lock held by the caller. +- */ +-bool ExtPack::callVmCreatedHook(IVirtualBox *a_pVirtualBox, IMachine *a_pMachine, AutoWriteLock *a_pLock) +-{ +- if ( m != NULL +- && m->fUsable) +- { +- if (m->pReg->pfnVMCreated) +- { +- ComPtr<ExtPack> ptrSelfRef = this; +- a_pLock->release(); +- m->pReg->pfnVMCreated(m->pReg, a_pVirtualBox, a_pMachine); +- a_pLock->acquire(); +- return true; +- } +- } +- return false; +-} +- +-/** +- * Calls the pfnVMConfigureVMM hook. +- * +- * @returns true if we left the lock, false if we didn't. +- * @param a_pConsole The console interface. +- * @param a_pVM The VM handle. +- * @param a_pLock The write lock held by the caller. +- * @param a_pvrc Where to return the status code of the +- * callback. This is always set. LogRel is +- * called on if a failure status is returned. +- */ +-bool ExtPack::callVmConfigureVmmHook(IConsole *a_pConsole, PVM a_pVM, AutoWriteLock *a_pLock, int *a_pvrc) +-{ +- *a_pvrc = VINF_SUCCESS; +- if ( m != NULL +- && m->fUsable) +- { +- if (m->pReg->pfnVMConfigureVMM) +- { +- ComPtr<ExtPack> ptrSelfRef = this; +- a_pLock->release(); +- int vrc = m->pReg->pfnVMConfigureVMM(m->pReg, a_pConsole, a_pVM); +- *a_pvrc = vrc; +- a_pLock->acquire(); +- if (RT_FAILURE(vrc)) +- LogRel(("ExtPack pfnVMConfigureVMM returned %Rrc for %s\n", vrc, m->Desc.strName.c_str())); +- return true; +- } +- } +- return false; +-} +- +-/** +- * Calls the pfnVMPowerOn hook. +- * +- * @returns true if we left the lock, false if we didn't. +- * @param a_pConsole The console interface. +- * @param a_pVM The VM handle. +- * @param a_pLock The write lock held by the caller. +- * @param a_pvrc Where to return the status code of the +- * callback. This is always set. LogRel is +- * called on if a failure status is returned. +- */ +-bool ExtPack::callVmPowerOnHook(IConsole *a_pConsole, PVM a_pVM, AutoWriteLock *a_pLock, int *a_pvrc) +-{ +- *a_pvrc = VINF_SUCCESS; +- if ( m != NULL +- && m->fUsable) +- { +- if (m->pReg->pfnVMPowerOn) +- { +- ComPtr<ExtPack> ptrSelfRef = this; +- a_pLock->release(); +- int vrc = m->pReg->pfnVMPowerOn(m->pReg, a_pConsole, a_pVM); +- *a_pvrc = vrc; +- a_pLock->acquire(); +- if (RT_FAILURE(vrc)) +- LogRel(("ExtPack pfnVMPowerOn returned %Rrc for %s\n", vrc, m->Desc.strName.c_str())); +- return true; +- } +- } +- return false; +-} +- +-/** +- * Calls the pfnVMPowerOff hook. +- * +- * @returns true if we left the lock, false if we didn't. +- * @param a_pConsole The console interface. +- * @param a_pVM The VM handle. +- * @param a_pLock The write lock held by the caller. +- */ +-bool ExtPack::callVmPowerOffHook(IConsole *a_pConsole, PVM a_pVM, AutoWriteLock *a_pLock) +-{ +- if ( m != NULL +- && m->fUsable) +- { +- if (m->pReg->pfnVMPowerOff) +- { +- ComPtr<ExtPack> ptrSelfRef = this; +- a_pLock->release(); +- m->pReg->pfnVMPowerOff(m->pReg, a_pConsole, a_pVM); +- a_pLock->acquire(); +- return true; +- } +- } +- return false; +-} +- +-/** +- * Check if the extension pack is usable and has an VRDE module. +- * +- * @returns S_OK or COM error status with error information. +- * +- * @remarks Caller holds the extension manager lock for reading, no locking +- * necessary. +- */ +-HRESULT ExtPack::checkVrde(void) +-{ +- HRESULT hrc; +- if ( m != NULL +- && m->fUsable) +- { +- if (m->Desc.strVrdeModule.isNotEmpty()) +- hrc = S_OK; +- else +- hrc = setError(E_FAIL, tr("The extension pack '%s' does not include a VRDE module"), m->Desc.strName.c_str()); +- } +- else +- hrc = setError(E_FAIL, tr("%s"), m->strWhyUnusable.c_str()); +- return hrc; +-} +- +-/** +- * Same as checkVrde(), except that it also resolves the path to the module. +- * +- * @returns S_OK or COM error status with error information. +- * @param a_pstrVrdeLibrary Where to return the path on success. +- * +- * @remarks Caller holds the extension manager lock for reading, no locking +- * necessary. +- */ +-HRESULT ExtPack::getVrdpLibraryName(Utf8Str *a_pstrVrdeLibrary) +-{ +- HRESULT hrc = checkVrde(); +- if (SUCCEEDED(hrc)) +- { +- if (findModule(m->Desc.strVrdeModule.c_str(), NULL, VBOXEXTPACKMODKIND_R3, +- a_pstrVrdeLibrary, NULL /*a_pfNative*/, NULL /*a_pObjInfo*/)) +- hrc = S_OK; +- else +- hrc = setError(E_FAIL, tr("Failed to locate the VRDE module '%s' in extension pack '%s'"), +- m->Desc.strVrdeModule.c_str(), m->Desc.strName.c_str()); +- } +- return hrc; +-} +- +-/** +- * Check if this extension pack wishes to be the default VRDE provider. +- * +- * @returns @c true if it wants to and it is in a usable state, otherwise +- * @c false. +- * +- * @remarks Caller holds the extension manager lock for reading, no locking +- * necessary. +- */ +-bool ExtPack::wantsToBeDefaultVrde(void) const +-{ +- return m->fUsable +- && m->Desc.strVrdeModule.isNotEmpty(); +-} +- +-/** +- * Refreshes the extension pack state. +- * +- * This is called by the manager so that the on disk changes are picked up. +- * +- * @returns S_OK or COM error status with error information. +- * +- * @param a_pfCanDelete Optional can-delete-this-object output indicator. +- * +- * @remarks Caller holds the extension manager lock for writing. +- * @remarks Only called in VBoxSVC. +- */ +-HRESULT ExtPack::refresh(bool *a_pfCanDelete) +-{ +- if (a_pfCanDelete) +- *a_pfCanDelete = false; +- +- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS); /* for the COMGETTERs */ +- +- /* +- * Has the module been deleted? +- */ +- RTFSOBJINFO ObjInfoExtPack; +- int vrc = RTPathQueryInfoEx(m->strExtPackPath.c_str(), &ObjInfoExtPack, RTFSOBJATTRADD_UNIX, RTPATH_F_ON_LINK); +- if ( RT_FAILURE(vrc) +- || !RTFS_IS_DIRECTORY(ObjInfoExtPack.Attr.fMode)) +- { +- if (a_pfCanDelete) +- *a_pfCanDelete = true; +- return S_OK; +- } +- +- /* +- * We've got a directory, so try query file system object info for the +- * files we are interested in as well. +- */ +- RTFSOBJINFO ObjInfoDesc; +- char szDescFilePath[RTPATH_MAX]; +- vrc = RTPathJoin(szDescFilePath, sizeof(szDescFilePath), m->strExtPackPath.c_str(), VBOX_EXTPACK_DESCRIPTION_NAME); +- if (RT_SUCCESS(vrc)) +- vrc = RTPathQueryInfoEx(szDescFilePath, &ObjInfoDesc, RTFSOBJATTRADD_UNIX, RTPATH_F_ON_LINK); +- if (RT_FAILURE(vrc)) +- RT_ZERO(ObjInfoDesc); +- +- RTFSOBJINFO ObjInfoMainMod; +- if (m->strMainModPath.isNotEmpty()) +- vrc = RTPathQueryInfoEx(m->strMainModPath.c_str(), &ObjInfoMainMod, RTFSOBJATTRADD_UNIX, RTPATH_F_ON_LINK); +- if (m->strMainModPath.isEmpty() || RT_FAILURE(vrc)) +- RT_ZERO(ObjInfoMainMod); +- +- /* +- * If we have a usable module already, just verify that things haven't +- * changed since we loaded it. +- */ +- if (m->fUsable) +- { +- if (m->hMainMod == NIL_RTLDRMOD) +- probeAndLoad(); +- else if ( !objinfoIsEqual(&ObjInfoDesc, &m->ObjInfoDesc) +- || !objinfoIsEqual(&ObjInfoMainMod, &m->ObjInfoMainMod) +- || !objinfoIsEqual(&ObjInfoExtPack, &m->ObjInfoExtPack) ) +- { +- /** @todo not important, so it can wait. */ +- } +- } +- /* +- * Ok, it is currently not usable. If anything has changed since last time +- * reprobe the extension pack. +- */ +- else if ( !objinfoIsEqual(&ObjInfoDesc, &m->ObjInfoDesc) +- || !objinfoIsEqual(&ObjInfoMainMod, &m->ObjInfoMainMod) +- || !objinfoIsEqual(&ObjInfoExtPack, &m->ObjInfoExtPack) ) +- probeAndLoad(); +- +- return S_OK; +-} +- +-/** +- * Probes the extension pack, loading the main dll and calling its registration +- * entry point. +- * +- * This updates the state accordingly, the strWhyUnusable and fUnusable members +- * being the most important ones. +- */ +-void ExtPack::probeAndLoad(void) +-{ +- m->fUsable = false; +- m->fMadeReadyCall = false; +- +- /* +- * Query the file system info for the extension pack directory. This and +- * all other file system info we save is for the benefit of refresh(). +- */ +- int vrc = RTPathQueryInfoEx(m->strExtPackPath.c_str(), &m->ObjInfoExtPack, RTFSOBJATTRADD_UNIX, RTPATH_F_ON_LINK); +- if (RT_FAILURE(vrc)) +- { +- m->strWhyUnusable.printf(tr("RTPathQueryInfoEx on '%s' failed: %Rrc"), m->strExtPackPath.c_str(), vrc); +- return; +- } +- if (!RTFS_IS_DIRECTORY(m->ObjInfoExtPack.Attr.fMode)) +- { +- if (RTFS_IS_SYMLINK(m->ObjInfoExtPack.Attr.fMode)) +- m->strWhyUnusable.printf(tr("'%s' is a symbolic link, this is not allowed"), m->strExtPackPath.c_str(), vrc); +- else if (RTFS_IS_FILE(m->ObjInfoExtPack.Attr.fMode)) +- m->strWhyUnusable.printf(tr("'%s' is a symbolic file, not a directory"), m->strExtPackPath.c_str(), vrc); +- else +- m->strWhyUnusable.printf(tr("'%s' is not a directory (fMode=%#x)"), m->strExtPackPath.c_str(), m->ObjInfoExtPack.Attr.fMode); +- return; +- } +- +- RTERRINFOSTATIC ErrInfo; +- RTErrInfoInitStatic(&ErrInfo); +- vrc = SUPR3HardenedVerifyDir(m->strExtPackPath.c_str(), true /*fRecursive*/, true /*fCheckFiles*/, &ErrInfo.Core); +- if (RT_FAILURE(vrc)) +- { +- m->strWhyUnusable.printf(tr("%s (rc=%Rrc)"), ErrInfo.Core.pszMsg, vrc); +- return; +- } +- +- /* +- * Read the description file. +- */ +- RTCString strSavedName(m->Desc.strName); +- RTCString *pStrLoadErr = VBoxExtPackLoadDesc(m->strExtPackPath.c_str(), &m->Desc, &m->ObjInfoDesc); +- if (pStrLoadErr != NULL) +- { +- m->strWhyUnusable.printf(tr("Failed to load '%s/%s': %s"), +- m->strExtPackPath.c_str(), VBOX_EXTPACK_DESCRIPTION_NAME, pStrLoadErr->c_str()); +- m->Desc.strName = strSavedName; +- delete pStrLoadErr; +- return; +- } +- +- /* +- * Make sure the XML name and directory matches. +- */ +- if (!m->Desc.strName.equalsIgnoreCase(strSavedName)) +- { +- m->strWhyUnusable.printf(tr("The description name ('%s') and directory name ('%s') does not match"), +- m->Desc.strName.c_str(), strSavedName.c_str()); +- m->Desc.strName = strSavedName; +- return; +- } +- +- /* +- * Load the main DLL and call the predefined entry point. +- */ +- bool fIsNative; +- if (!findModule(m->Desc.strMainModule.c_str(), NULL /* default extension */, VBOXEXTPACKMODKIND_R3, +- &m->strMainModPath, &fIsNative, &m->ObjInfoMainMod)) +- { +- m->strWhyUnusable.printf(tr("Failed to locate the main module ('%s')"), m->Desc.strMainModule.c_str()); +- return; +- } +- +- vrc = SUPR3HardenedVerifyPlugIn(m->strMainModPath.c_str(), &ErrInfo.Core); +- if (RT_FAILURE(vrc)) +- { +- m->strWhyUnusable.printf(tr("%s"), ErrInfo.Core.pszMsg); +- return; +- } +- +- if (fIsNative) +- { +- vrc = SUPR3HardenedLdrLoadPlugIn(m->strMainModPath.c_str(), &m->hMainMod, &ErrInfo.Core); +- if (RT_FAILURE(vrc)) +- { +- m->hMainMod = NIL_RTLDRMOD; +- m->strWhyUnusable.printf(tr("Failed to load the main module ('%s'): %Rrc - %s"), +- m->strMainModPath.c_str(), vrc, ErrInfo.Core.pszMsg); +- return; +- } +- } +- else +- { +- m->strWhyUnusable.printf(tr("Only native main modules are currently supported")); +- return; +- } +- +- /* +- * Resolve the predefined entry point. +- */ +- PFNVBOXEXTPACKREGISTER pfnRegistration; +- vrc = RTLdrGetSymbol(m->hMainMod, VBOX_EXTPACK_MAIN_MOD_ENTRY_POINT, (void **)&pfnRegistration); +- if (RT_SUCCESS(vrc)) +- { +- RTErrInfoClear(&ErrInfo.Core); +- vrc = pfnRegistration(&m->Hlp, &m->pReg, &ErrInfo.Core); +- if ( RT_SUCCESS(vrc) +- && !RTErrInfoIsSet(&ErrInfo.Core) +- && VALID_PTR(m->pReg)) +- { +- if ( VBOXEXTPACK_IS_MAJOR_VER_EQUAL(m->pReg->u32Version, VBOXEXTPACKREG_VERSION) +- && m->pReg->u32EndMarker == m->pReg->u32Version) +- { +- if ( (!m->pReg->pfnInstalled || RT_VALID_PTR(m->pReg->pfnInstalled)) +- && (!m->pReg->pfnUninstall || RT_VALID_PTR(m->pReg->pfnUninstall)) +- && (!m->pReg->pfnVirtualBoxReady || RT_VALID_PTR(m->pReg->pfnVirtualBoxReady)) +- && (!m->pReg->pfnConsoleReady || RT_VALID_PTR(m->pReg->pfnConsoleReady)) +- && (!m->pReg->pfnUnload || RT_VALID_PTR(m->pReg->pfnUnload)) +- && (!m->pReg->pfnVMCreated || RT_VALID_PTR(m->pReg->pfnVMCreated)) +- && (!m->pReg->pfnVMConfigureVMM || RT_VALID_PTR(m->pReg->pfnVMConfigureVMM)) +- && (!m->pReg->pfnVMPowerOn || RT_VALID_PTR(m->pReg->pfnVMPowerOn)) +- && (!m->pReg->pfnVMPowerOff || RT_VALID_PTR(m->pReg->pfnVMPowerOff)) +- && (!m->pReg->pfnQueryObject || RT_VALID_PTR(m->pReg->pfnQueryObject)) +- ) +- { +- /* +- * We're good! +- */ +- m->fUsable = true; +- m->strWhyUnusable.setNull(); +- return; +- } +- +- m->strWhyUnusable = tr("The registration structure contains on or more invalid function pointers"); +- } +- else +- m->strWhyUnusable.printf(tr("Unsupported registration structure version %u.%u"), +- RT_HIWORD(m->pReg->u32Version), RT_LOWORD(m->pReg->u32Version)); +- } +- else +- m->strWhyUnusable.printf(tr("%s returned %Rrc, pReg=%p ErrInfo='%s'"), +- VBOX_EXTPACK_MAIN_MOD_ENTRY_POINT, vrc, m->pReg, ErrInfo.Core.pszMsg); +- m->pReg = NULL; +- } +- else +- m->strWhyUnusable.printf(tr("Failed to resolve exported symbol '%s' in the main module: %Rrc"), +- VBOX_EXTPACK_MAIN_MOD_ENTRY_POINT, vrc); +- +- RTLdrClose(m->hMainMod); +- m->hMainMod = NIL_RTLDRMOD; +-} +- +-/** +- * Finds a module. +- * +- * @returns true if found, false if not. +- * @param a_pszName The module base name (no extension). +- * @param a_pszExt The extension. If NULL we use default +- * extensions. +- * @param a_enmKind The kind of module to locate. +- * @param a_pStrFound Where to return the path to the module we've +- * found. +- * @param a_pfNative Where to return whether this is a native module +- * or an agnostic one. Optional. +- * @param a_pObjInfo Where to return the file system object info for +- * the module. Optional. +- */ +-bool ExtPack::findModule(const char *a_pszName, const char *a_pszExt, VBOXEXTPACKMODKIND a_enmKind, +- Utf8Str *a_pStrFound, bool *a_pfNative, PRTFSOBJINFO a_pObjInfo) const +-{ +- /* +- * Try the native path first. +- */ +- char szPath[RTPATH_MAX]; +- int vrc = RTPathJoin(szPath, sizeof(szPath), m->strExtPackPath.c_str(), RTBldCfgTargetDotArch()); +- AssertLogRelRCReturn(vrc, false); +- vrc = RTPathAppend(szPath, sizeof(szPath), a_pszName); +- AssertLogRelRCReturn(vrc, false); +- if (!a_pszExt) +- { +- const char *pszDefExt; +- switch (a_enmKind) +- { +- case VBOXEXTPACKMODKIND_RC: pszDefExt = ".rc"; break; +- case VBOXEXTPACKMODKIND_R0: pszDefExt = ".r0"; break; +- case VBOXEXTPACKMODKIND_R3: pszDefExt = RTLdrGetSuff(); break; +- default: +- AssertFailedReturn(false); +- } +- vrc = RTStrCat(szPath, sizeof(szPath), pszDefExt); +- AssertLogRelRCReturn(vrc, false); +- } +- +- RTFSOBJINFO ObjInfo; +- if (!a_pObjInfo) +- a_pObjInfo = &ObjInfo; +- vrc = RTPathQueryInfo(szPath, a_pObjInfo, RTFSOBJATTRADD_UNIX); +- if (RT_SUCCESS(vrc) && RTFS_IS_FILE(a_pObjInfo->Attr.fMode)) +- { +- if (a_pfNative) +- *a_pfNative = true; +- *a_pStrFound = szPath; +- return true; +- } +- +- /* +- * Try the platform agnostic modules. +- */ +- /* gcc.x86/module.rel */ +- char szSubDir[32]; +- RTStrPrintf(szSubDir, sizeof(szSubDir), "%s.%s", RTBldCfgCompiler(), RTBldCfgTargetArch()); +- vrc = RTPathJoin(szPath, sizeof(szPath), m->strExtPackPath.c_str(), szSubDir); +- AssertLogRelRCReturn(vrc, false); +- vrc = RTPathAppend(szPath, sizeof(szPath), a_pszName); +- AssertLogRelRCReturn(vrc, false); +- if (!a_pszExt) +- { +- vrc = RTStrCat(szPath, sizeof(szPath), ".rel"); +- AssertLogRelRCReturn(vrc, false); +- } +- vrc = RTPathQueryInfo(szPath, a_pObjInfo, RTFSOBJATTRADD_UNIX); +- if (RT_SUCCESS(vrc) && RTFS_IS_FILE(a_pObjInfo->Attr.fMode)) +- { +- if (a_pfNative) +- *a_pfNative = false; +- *a_pStrFound = szPath; +- return true; +- } +- +- /* x86/module.rel */ +- vrc = RTPathJoin(szPath, sizeof(szPath), m->strExtPackPath.c_str(), RTBldCfgTargetArch()); +- AssertLogRelRCReturn(vrc, false); +- vrc = RTPathAppend(szPath, sizeof(szPath), a_pszName); +- AssertLogRelRCReturn(vrc, false); +- if (!a_pszExt) +- { +- vrc = RTStrCat(szPath, sizeof(szPath), ".rel"); +- AssertLogRelRCReturn(vrc, false); +- } +- vrc = RTPathQueryInfo(szPath, a_pObjInfo, RTFSOBJATTRADD_UNIX); +- if (RT_SUCCESS(vrc) && RTFS_IS_FILE(a_pObjInfo->Attr.fMode)) +- { +- if (a_pfNative) +- *a_pfNative = false; +- *a_pStrFound = szPath; +- return true; +- } +- +- return false; +-} +- +-/** +- * Compares two file system object info structures. +- * +- * @returns true if equal, false if not. +- * @param pObjInfo1 The first. +- * @param pObjInfo2 The second. +- * @todo IPRT should do this, really. +- */ +-/* static */ bool ExtPack::objinfoIsEqual(PCRTFSOBJINFO pObjInfo1, PCRTFSOBJINFO pObjInfo2) +-{ +- if (!RTTimeSpecIsEqual(&pObjInfo1->ModificationTime, &pObjInfo2->ModificationTime)) +- return false; +- if (!RTTimeSpecIsEqual(&pObjInfo1->ChangeTime, &pObjInfo2->ChangeTime)) +- return false; +- if (!RTTimeSpecIsEqual(&pObjInfo1->BirthTime, &pObjInfo2->BirthTime)) +- return false; +- if (pObjInfo1->cbObject != pObjInfo2->cbObject) +- return false; +- if (pObjInfo1->Attr.fMode != pObjInfo2->Attr.fMode) +- return false; +- if (pObjInfo1->Attr.enmAdditional == pObjInfo2->Attr.enmAdditional) +- { +- switch (pObjInfo1->Attr.enmAdditional) +- { +- case RTFSOBJATTRADD_UNIX: +- if (pObjInfo1->Attr.u.Unix.uid != pObjInfo2->Attr.u.Unix.uid) +- return false; +- if (pObjInfo1->Attr.u.Unix.gid != pObjInfo2->Attr.u.Unix.gid) +- return false; +- if (pObjInfo1->Attr.u.Unix.INodeIdDevice != pObjInfo2->Attr.u.Unix.INodeIdDevice) +- return false; +- if (pObjInfo1->Attr.u.Unix.INodeId != pObjInfo2->Attr.u.Unix.INodeId) +- return false; +- if (pObjInfo1->Attr.u.Unix.GenerationId != pObjInfo2->Attr.u.Unix.GenerationId) +- return false; +- break; +- default: +- break; +- } +- } +- return true; +-} +- +- +-/** +- * @interface_method_impl{VBOXEXTPACKHLP,pfnFindModule} +- */ +-/*static*/ DECLCALLBACK(int) +-ExtPack::hlpFindModule(PCVBOXEXTPACKHLP pHlp, const char *pszName, const char *pszExt, VBOXEXTPACKMODKIND enmKind, +- char *pszFound, size_t cbFound, bool *pfNative) +-{ +- /* +- * Validate the input and get our bearings. +- */ +- AssertPtrReturn(pszName, VERR_INVALID_POINTER); +- AssertPtrNullReturn(pszExt, VERR_INVALID_POINTER); +- AssertPtrReturn(pszFound, VERR_INVALID_POINTER); +- AssertPtrNullReturn(pfNative, VERR_INVALID_POINTER); +- AssertReturn(enmKind > VBOXEXTPACKMODKIND_INVALID && enmKind < VBOXEXTPACKMODKIND_END, VERR_INVALID_PARAMETER); +- +- AssertPtrReturn(pHlp, VERR_INVALID_POINTER); +- AssertReturn(pHlp->u32Version == VBOXEXTPACKHLP_VERSION, VERR_INVALID_POINTER); +- ExtPack::Data *m = RT_FROM_CPP_MEMBER(pHlp, Data, Hlp); +- AssertPtrReturn(m, VERR_INVALID_POINTER); +- ExtPack *pThis = m->pThis; +- AssertPtrReturn(pThis, VERR_INVALID_POINTER); +- +- /* +- * This is just a wrapper around findModule. +- */ +- Utf8Str strFound; +- if (pThis->findModule(pszName, pszExt, enmKind, &strFound, pfNative, NULL)) +- return RTStrCopy(pszFound, cbFound, strFound.c_str()); +- return VERR_FILE_NOT_FOUND; +-} +- +-/*static*/ DECLCALLBACK(int) +-ExtPack::hlpGetFilePath(PCVBOXEXTPACKHLP pHlp, const char *pszFilename, char *pszPath, size_t cbPath) +-{ +- /* +- * Validate the input and get our bearings. +- */ +- AssertPtrReturn(pszFilename, VERR_INVALID_POINTER); +- AssertPtrReturn(pszPath, VERR_INVALID_POINTER); +- AssertReturn(cbPath > 0, VERR_BUFFER_OVERFLOW); +- +- AssertPtrReturn(pHlp, VERR_INVALID_POINTER); +- AssertReturn(pHlp->u32Version == VBOXEXTPACKHLP_VERSION, VERR_INVALID_POINTER); +- ExtPack::Data *m = RT_FROM_CPP_MEMBER(pHlp, Data, Hlp); +- AssertPtrReturn(m, VERR_INVALID_POINTER); +- ExtPack *pThis = m->pThis; +- AssertPtrReturn(pThis, VERR_INVALID_POINTER); +- +- /* +- * This is a simple RTPathJoin, no checking if things exists or anything. +- */ +- int vrc = RTPathJoin(pszPath, cbPath, pThis->m->strExtPackPath.c_str(), pszFilename); +- if (RT_FAILURE(vrc)) +- RT_BZERO(pszPath, cbPath); +- return vrc; +-} +- +-/*static*/ DECLCALLBACK(VBOXEXTPACKCTX) +-ExtPack::hlpGetContext(PCVBOXEXTPACKHLP pHlp) +-{ +- /* +- * Validate the input and get our bearings. +- */ +- AssertPtrReturn(pHlp, VBOXEXTPACKCTX_INVALID); +- AssertReturn(pHlp->u32Version == VBOXEXTPACKHLP_VERSION, VBOXEXTPACKCTX_INVALID); +- ExtPack::Data *m = RT_FROM_CPP_MEMBER(pHlp, Data, Hlp); +- AssertPtrReturn(m, VBOXEXTPACKCTX_INVALID); +- ExtPack *pThis = m->pThis; +- AssertPtrReturn(pThis, VBOXEXTPACKCTX_INVALID); +- +- return pThis->m->enmContext; +-} +- +-/*static*/ DECLCALLBACK(int) +-ExtPack::hlpReservedN(PCVBOXEXTPACKHLP pHlp) +-{ +- /* +- * Validate the input and get our bearings. +- */ +- AssertPtrReturn(pHlp, VERR_INVALID_POINTER); +- AssertReturn(pHlp->u32Version == VBOXEXTPACKHLP_VERSION, VERR_INVALID_POINTER); +- ExtPack::Data *m = RT_FROM_CPP_MEMBER(pHlp, Data, Hlp); +- AssertPtrReturn(m, VERR_INVALID_POINTER); +- ExtPack *pThis = m->pThis; +- AssertPtrReturn(pThis, VERR_INVALID_POINTER); +- +- return VERR_NOT_IMPLEMENTED; +-} +- +- +- +- +- +-STDMETHODIMP ExtPack::COMGETTER(Name)(BSTR *a_pbstrName) +-{ +- CheckComArgOutPointerValid(a_pbstrName); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- Bstr str(m->Desc.strName); +- str.cloneTo(a_pbstrName); +- } +- return hrc; +-} +- +-STDMETHODIMP ExtPack::COMGETTER(Description)(BSTR *a_pbstrDescription) +-{ +- CheckComArgOutPointerValid(a_pbstrDescription); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- Bstr str(m->Desc.strDescription); +- str.cloneTo(a_pbstrDescription); +- } +- return hrc; +-} +- +-STDMETHODIMP ExtPack::COMGETTER(Version)(BSTR *a_pbstrVersion) +-{ +- CheckComArgOutPointerValid(a_pbstrVersion); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- /* HACK ALERT: This is for easing backporting to 4.1. The edition stuff +- will be changed into a separate */ +- if (m->Desc.strEdition.isEmpty()) +- { +- Bstr str(m->Desc.strVersion); +- str.cloneTo(a_pbstrVersion); +- } +- else +- { +- RTCString strHack(m->Desc.strVersion); +- strHack.append('-'); +- strHack.append(m->Desc.strEdition); +- +- Bstr str(strHack); +- str.cloneTo(a_pbstrVersion); +- } +- } +- return hrc; +-} +- +-STDMETHODIMP ExtPack::COMGETTER(Revision)(ULONG *a_puRevision) +-{ +- CheckComArgOutPointerValid(a_puRevision); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- *a_puRevision = m->Desc.uRevision; +- return hrc; +-} +- +-STDMETHODIMP ExtPack::COMGETTER(VRDEModule)(BSTR *a_pbstrVrdeModule) +-{ +- CheckComArgOutPointerValid(a_pbstrVrdeModule); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- Bstr str(m->Desc.strVrdeModule); +- str.cloneTo(a_pbstrVrdeModule); +- } +- return hrc; +-} +- +-STDMETHODIMP ExtPack::COMGETTER(PlugIns)(ComSafeArrayOut(IExtPackPlugIn *, a_paPlugIns)) +-{ +- /** @todo implement plug-ins. */ +-#ifdef VBOX_WITH_XPCOM +- NOREF(a_paPlugIns); +- NOREF(a_paPlugInsSize); +-#endif +- ReturnComNotImplemented(); +-} +- +-STDMETHODIMP ExtPack::COMGETTER(Usable)(BOOL *a_pfUsable) +-{ +- CheckComArgOutPointerValid(a_pfUsable); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- *a_pfUsable = m->fUsable; +- return hrc; +-} +- +-STDMETHODIMP ExtPack::COMGETTER(WhyUnusable)(BSTR *a_pbstrWhy) +-{ +- CheckComArgOutPointerValid(a_pbstrWhy); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- m->strWhyUnusable.cloneTo(a_pbstrWhy); +- return hrc; +-} +- +-STDMETHODIMP ExtPack::COMGETTER(ShowLicense)(BOOL *a_pfShowIt) +-{ +- CheckComArgOutPointerValid(a_pfShowIt); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- *a_pfShowIt = m->Desc.fShowLicense; +- return hrc; +-} +- +-STDMETHODIMP ExtPack::COMGETTER(License)(BSTR *a_pbstrHtmlLicense) +-{ +- Bstr bstrHtml("html"); +- return QueryLicense(Bstr::Empty.raw(), Bstr::Empty.raw(), bstrHtml.raw(), a_pbstrHtmlLicense); +-} +- +-STDMETHODIMP ExtPack::QueryLicense(IN_BSTR a_bstrPreferredLocale, IN_BSTR a_bstrPreferredLanguage, IN_BSTR a_bstrFormat, +- BSTR *a_pbstrLicense) +-{ +- /* +- * Validate input. +- */ +- CheckComArgOutPointerValid(a_pbstrLicense); +- CheckComArgNotNull(a_bstrPreferredLocale); +- CheckComArgNotNull(a_bstrPreferredLanguage); +- CheckComArgNotNull(a_bstrFormat); +- +- Utf8Str strPreferredLocale(a_bstrPreferredLocale); +- if (strPreferredLocale.length() != 2 && strPreferredLocale.length() != 0) +- return setError(E_FAIL, tr("The preferred locale is a two character string or empty.")); +- +- Utf8Str strPreferredLanguage(a_bstrPreferredLanguage); +- if (strPreferredLanguage.length() != 2 && strPreferredLanguage.length() != 0) +- return setError(E_FAIL, tr("The preferred lanuage is a two character string or empty.")); +- +- Utf8Str strFormat(a_bstrFormat); +- if ( !strFormat.equals("html") +- && !strFormat.equals("rtf") +- && !strFormat.equals("txt")) +- return setError(E_FAIL, tr("The license format can only have the values 'html', 'rtf' and 'txt'.")); +- +- /* +- * Combine the options to form a file name before locking down anything. +- */ +- char szName[sizeof(VBOX_EXTPACK_LICENSE_NAME_PREFIX "-de_DE.html") + 2]; +- if (strPreferredLocale.isNotEmpty() && strPreferredLanguage.isNotEmpty()) +- RTStrPrintf(szName, sizeof(szName), VBOX_EXTPACK_LICENSE_NAME_PREFIX "-%s_%s.%s", +- strPreferredLocale.c_str(), strPreferredLanguage.c_str(), strFormat.c_str()); +- else if (strPreferredLocale.isNotEmpty()) +- RTStrPrintf(szName, sizeof(szName), VBOX_EXTPACK_LICENSE_NAME_PREFIX "-%s.%s", strPreferredLocale.c_str(), strFormat.c_str()); +- else if (strPreferredLanguage.isNotEmpty()) +- RTStrPrintf(szName, sizeof(szName), VBOX_EXTPACK_LICENSE_NAME_PREFIX "-_%s.%s", strPreferredLocale.c_str(), strFormat.c_str()); +- else +- RTStrPrintf(szName, sizeof(szName), VBOX_EXTPACK_LICENSE_NAME_PREFIX ".%s", strFormat.c_str()); +- +- /* +- * Effectuate the query. +- */ +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- AutoReadLock autoLock(this COMMA_LOCKVAL_SRC_POS); /* paranoia */ +- +- if (!m->fUsable) +- hrc = setError(E_FAIL, tr("%s"), m->strWhyUnusable.c_str()); +- else +- { +- char szPath[RTPATH_MAX]; +- int vrc = RTPathJoin(szPath, sizeof(szPath), m->strExtPackPath.c_str(), szName); +- if (RT_SUCCESS(vrc)) +- { +- void *pvFile; +- size_t cbFile; +- vrc = RTFileReadAllEx(szPath, 0, RTFOFF_MAX, RTFILE_RDALL_O_DENY_READ, &pvFile, &cbFile); +- if (RT_SUCCESS(vrc)) +- { +- Bstr bstrLicense((const char *)pvFile, cbFile); +- if (bstrLicense.isNotEmpty()) +- { +- bstrLicense.detachTo(a_pbstrLicense); +- hrc = S_OK; +- } +- else +- hrc = setError(VBOX_E_IPRT_ERROR, tr("The license file '%s' is empty or contains invalid UTF-8 encoding"), +- szPath); +- RTFileReadAllFree(pvFile, cbFile); +- } +- else if (vrc == VERR_FILE_NOT_FOUND || vrc == VERR_PATH_NOT_FOUND) +- hrc = setError(VBOX_E_OBJECT_NOT_FOUND, tr("The license file '%s' was not found in extension pack '%s'"), +- szName, m->Desc.strName.c_str()); +- else +- hrc = setError(VBOX_E_FILE_ERROR, tr("Failed to open the license file '%s': %Rrc"), szPath, vrc); +- } +- else +- hrc = setError(VBOX_E_IPRT_ERROR, tr("RTPathJoin failed: %Rrc"), vrc); +- } +- } +- return hrc; +-} +- +- +-STDMETHODIMP ExtPack::QueryObject(IN_BSTR a_bstrObjectId, IUnknown **a_ppUnknown) +-{ +- com::Guid ObjectId; +- CheckComArgGuid(a_bstrObjectId, ObjectId); +- CheckComArgOutPointerValid(a_ppUnknown); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- if ( m->pReg +- && m->pReg->pfnQueryObject) +- { +- void *pvUnknown = m->pReg->pfnQueryObject(m->pReg, ObjectId.raw()); +- if (pvUnknown) +- *a_ppUnknown = (IUnknown *)pvUnknown; +- else +- hrc = E_NOINTERFACE; +- } +- else +- hrc = E_NOINTERFACE; +- } +- return hrc; +-} +- +- +- +- +-DEFINE_EMPTY_CTOR_DTOR(ExtPackManager) +- +-/** +- * Called by ComObjPtr::createObject when creating the object. +- * +- * Just initialize the basic object state, do the rest in init(). +- * +- * @returns S_OK. +- */ +-HRESULT ExtPackManager::FinalConstruct() +-{ +- m = NULL; +- return S_OK; +-} +- +-/** +- * Initializes the extension pack manager. +- * +- * @returns COM status code. +- * @param a_pVirtualBox Pointer to the VirtualBox object. +- * @param a_enmContext The context we're in. +- */ +-HRESULT ExtPackManager::initExtPackManager(VirtualBox *a_pVirtualBox, VBOXEXTPACKCTX a_enmContext) +-{ +- AutoInitSpan autoInitSpan(this); +- AssertReturn(autoInitSpan.isOk(), E_FAIL); +- +- /* +- * Figure some stuff out before creating the instance data. +- */ +- char szBaseDir[RTPATH_MAX]; +- int rc = RTPathAppPrivateArchTop(szBaseDir, sizeof(szBaseDir)); +- AssertLogRelRCReturn(rc, E_FAIL); +- rc = RTPathAppend(szBaseDir, sizeof(szBaseDir), VBOX_EXTPACK_INSTALL_DIR); +- AssertLogRelRCReturn(rc, E_FAIL); +- +- char szCertificatDir[RTPATH_MAX]; +- rc = RTPathAppPrivateNoArch(szCertificatDir, sizeof(szCertificatDir)); +- AssertLogRelRCReturn(rc, E_FAIL); +- rc = RTPathAppend(szCertificatDir, sizeof(szCertificatDir), VBOX_EXTPACK_CERT_DIR); +- AssertLogRelRCReturn(rc, E_FAIL); +- +- /* +- * Allocate and initialize the instance data. +- */ +- m = new Data; +- m->strBaseDir = szBaseDir; +- m->strCertificatDirPath = szCertificatDir; +- m->pVirtualBox = a_pVirtualBox; +- m->enmContext = a_enmContext; +- +- /* +- * Slurp in VBoxVMM which is used by VBoxPuelMain. +- */ +-#if !defined(RT_OS_WINDOWS) && !defined(RT_OS_DARWIN) +- if (a_enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON) +- { +- int vrc = SUPR3HardenedLdrLoadAppPriv("VBoxVMM", &m->hVBoxVMM, RTLDRLOAD_FLAGS_GLOBAL, NULL); +- if (RT_FAILURE(vrc)) +- m->hVBoxVMM = NIL_RTLDRMOD; +- /* cleanup in ::uninit()? */ +- } +-#endif +- +- /* +- * Go looking for extensions. The RTDirOpen may fail if nothing has been +- * installed yet, or if root is paranoid and has revoked our access to them. +- * +- * We ASSUME that there are no files, directories or stuff in the directory +- * that exceed the max name length in RTDIRENTRYEX. +- */ +- HRESULT hrc = S_OK; +- PRTDIR pDir; +- int vrc = RTDirOpen(&pDir, szBaseDir); +- if (RT_SUCCESS(vrc)) +- { +- for (;;) +- { +- RTDIRENTRYEX Entry; +- vrc = RTDirReadEx(pDir, &Entry, NULL /*pcbDirEntry*/, RTFSOBJATTRADD_NOTHING, RTPATH_F_ON_LINK); +- if (RT_FAILURE(vrc)) +- { +- AssertLogRelMsg(vrc == VERR_NO_MORE_FILES, ("%Rrc\n", vrc)); +- break; +- } +- if ( RTFS_IS_DIRECTORY(Entry.Info.Attr.fMode) +- && strcmp(Entry.szName, ".") != 0 +- && strcmp(Entry.szName, "..") != 0 +- && VBoxExtPackIsValidMangledName(Entry.szName) ) +- { +- /* +- * All directories are extensions, the shall be nothing but +- * extensions in this subdirectory. +- */ +- char szExtPackDir[RTPATH_MAX]; +- vrc = RTPathJoin(szExtPackDir, sizeof(szExtPackDir), m->strBaseDir.c_str(), Entry.szName); +- AssertLogRelRC(vrc); +- if (RT_SUCCESS(vrc)) +- { +- RTCString *pstrName = VBoxExtPackUnmangleName(Entry.szName, RTSTR_MAX); +- AssertLogRel(pstrName); +- if (pstrName) +- { +- ComObjPtr<ExtPack> NewExtPack; +- HRESULT hrc2 = NewExtPack.createObject(); +- if (SUCCEEDED(hrc2)) +- hrc2 = NewExtPack->initWithDir(a_enmContext, pstrName->c_str(), szExtPackDir); +- delete pstrName; +- if (SUCCEEDED(hrc2)) +- m->llInstalledExtPacks.push_back(NewExtPack); +- else if (SUCCEEDED(rc)) +- hrc = hrc2; +- } +- else +- hrc = E_UNEXPECTED; +- } +- else +- hrc = E_UNEXPECTED; +- } +- } +- RTDirClose(pDir); +- } +- /* else: ignore, the directory probably does not exist or something. */ +- +- if (SUCCEEDED(hrc)) +- autoInitSpan.setSucceeded(); +- return hrc; +-} +- +-/** +- * COM cruft. +- */ +-void ExtPackManager::FinalRelease() +-{ +- uninit(); +-} +- +-/** +- * Do the actual cleanup. +- */ +-void ExtPackManager::uninit() +-{ +- /* Enclose the state transition Ready->InUninit->NotReady */ +- AutoUninitSpan autoUninitSpan(this); +- if (!autoUninitSpan.uninitDone() && m != NULL) +- { +- delete m; +- m = NULL; +- } +-} +- +- +-STDMETHODIMP ExtPackManager::COMGETTER(InstalledExtPacks)(ComSafeArrayOut(IExtPack *, a_paExtPacks)) +-{ +- CheckComArgOutSafeArrayPointerValid(a_paExtPacks); +- Assert(m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- AutoReadLock autoLock(this COMMA_LOCKVAL_SRC_POS); +- +- SafeIfaceArray<IExtPack> SaExtPacks(m->llInstalledExtPacks); +- SaExtPacks.detachTo(ComSafeArrayOutArg(a_paExtPacks)); +- } +- +- return hrc; +-} +- +-STDMETHODIMP ExtPackManager::Find(IN_BSTR a_bstrName, IExtPack **a_pExtPack) +-{ +- CheckComArgNotNull(a_bstrName); +- CheckComArgOutPointerValid(a_pExtPack); +- Utf8Str strName(a_bstrName); +- Assert(m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- AutoReadLock autoLock(this COMMA_LOCKVAL_SRC_POS); +- +- ComPtr<ExtPack> ptrExtPack = findExtPack(strName.c_str()); +- if (!ptrExtPack.isNull()) +- ptrExtPack.queryInterfaceTo(a_pExtPack); +- else +- hrc = VBOX_E_OBJECT_NOT_FOUND; +- } +- +- return hrc; +-} +- +-STDMETHODIMP ExtPackManager::OpenExtPackFile(IN_BSTR a_bstrTarballAndDigest, IExtPackFile **a_ppExtPackFile) +-{ +- CheckComArgNotNull(a_bstrTarballAndDigest); +- CheckComArgOutPointerValid(a_ppExtPackFile); +- AssertReturn(m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON, E_UNEXPECTED); +- +- /* The API can optionally take a ::SHA-256=<hex-digest> attribute at the +- end of the file name. This is just a temporary measure for +- backporting, in 4.2 we'll add another parameter to the method. */ +- Utf8Str strTarball; +- Utf8Str strDigest; +- Utf8Str strTarballAndDigest(a_bstrTarballAndDigest); +- size_t offSha256 = strTarballAndDigest.find("::SHA-256="); +- if (offSha256 == Utf8Str::npos) +- strTarball = strTarballAndDigest; +- else +- { +- strTarball = strTarballAndDigest.substr(0, offSha256); +- strDigest = strTarballAndDigest.substr(offSha256 + sizeof("::SHA-256=") - 1); +- } +- +- ComObjPtr<ExtPackFile> NewExtPackFile; +- HRESULT hrc = NewExtPackFile.createObject(); +- if (SUCCEEDED(hrc)) +- hrc = NewExtPackFile->initWithFile(strTarball.c_str(), strDigest.c_str(), this, m->pVirtualBox); +- if (SUCCEEDED(hrc)) +- NewExtPackFile.queryInterfaceTo(a_ppExtPackFile); +- +- return hrc; +-} +- +-STDMETHODIMP ExtPackManager::Uninstall(IN_BSTR a_bstrName, BOOL a_fForcedRemoval, IN_BSTR a_bstrDisplayInfo, +- IProgress **a_ppProgress) +-{ +- CheckComArgNotNull(a_bstrName); +- if (a_ppProgress) +- *a_ppProgress = NULL; +- Assert(m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- PEXTPACKUNINSTALLJOB pJob = NULL; +- try +- { +- pJob = new EXTPACKUNINSTALLJOB; +- pJob->ptrExtPackMgr = this; +- pJob->strName = a_bstrName; +- pJob->fForcedRemoval = a_fForcedRemoval != FALSE; +- pJob->strDisplayInfo = a_bstrDisplayInfo; +- hrc = pJob->ptrProgress.createObject(); +- if (SUCCEEDED(hrc)) +- { +- Bstr bstrDescription = tr("Uninstalling extension pack"); +- hrc = pJob->ptrProgress->init( +-#ifndef VBOX_COM_INPROC +- m->pVirtualBox, +-#endif +- static_cast<IExtPackManager *>(this), +- bstrDescription.raw(), +- FALSE /*aCancelable*/, +- NULL /*aId*/); +- } +- if (SUCCEEDED(hrc)) +- { +- ComPtr<Progress> ptrProgress = pJob->ptrProgress; +- int vrc = RTThreadCreate(NULL /*phThread*/, ExtPackManager::doUninstallThreadProc, pJob, 0, +- RTTHREADTYPE_DEFAULT, 0 /*fFlags*/, "ExtPackUninst"); +- if (RT_SUCCESS(vrc)) +- { +- pJob = NULL; /* the thread deletes it */ +- ptrProgress.queryInterfaceTo(a_ppProgress); +- } +- else +- hrc = setError(VBOX_E_IPRT_ERROR, tr("RTThreadCreate failed with %Rrc"), vrc); +- } +- } +- catch (std::bad_alloc) +- { +- hrc = E_OUTOFMEMORY; +- } +- if (pJob) +- delete pJob; +- } +- +- return hrc; +-} +- +-STDMETHODIMP ExtPackManager::Cleanup(void) +-{ +- Assert(m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- /* +- * Run the set-uid-to-root binary that performs the cleanup. +- * +- * Take the write lock to prevent conflicts with other calls to this +- * VBoxSVC instance. +- */ +- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS); +- hrc = runSetUidToRootHelper(NULL, +- "cleanup", +- "--base-dir", m->strBaseDir.c_str(), +- (const char *)NULL); +- } +- +- return hrc; +-} +- +-STDMETHODIMP ExtPackManager::QueryAllPlugInsForFrontend(IN_BSTR a_bstrFrontend, ComSafeArrayOut(BSTR, a_pabstrPlugInModules)) +-{ +- CheckComArgNotNull(a_bstrFrontend); +- Utf8Str strName(a_bstrFrontend); +- CheckComArgOutSafeArrayPointerValid(a_pabstrPlugInModules); +- Assert(m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- com::SafeArray<BSTR> saPaths((size_t)0); +- /** @todo implement plug-ins */ +- saPaths.detachTo(ComSafeArrayOutArg(a_pabstrPlugInModules)); +- } +- return hrc; +-} +- +-STDMETHODIMP ExtPackManager::IsExtPackUsable(IN_BSTR a_bstrExtPack, BOOL *aUsable) +-{ +- CheckComArgNotNull(a_bstrExtPack); +- Utf8Str strExtPack(a_bstrExtPack); +- *aUsable = isExtPackUsable(strExtPack.c_str()); +- return S_OK; +-} +- +-/** +- * Finds the success indicator string in the stderr output ofr hte helper app. +- * +- * @returns Pointer to the indicator. +- * @param psz The stderr output string. Can be NULL. +- * @param cch The size of the string. +- */ +-static char *findSuccessIndicator(char *psz, size_t cch) +-{ +- static const char s_szSuccessInd[] = "rcExit=RTEXITCODE_SUCCESS"; +- Assert(!cch || strlen(psz) == cch); +- if (cch < sizeof(s_szSuccessInd) - 1) +- return NULL; +- char *pszInd = &psz[cch - sizeof(s_szSuccessInd) + 1]; +- if (strcmp(s_szSuccessInd, pszInd)) +- return NULL; +- return pszInd; +-} +- +-/** +- * Runs the helper application that does the privileged operations. +- * +- * @returns S_OK or a failure status with error information set. +- * @param a_pstrDisplayInfo Platform specific display info hacks. +- * @param a_pszCommand The command to execute. +- * @param ... The argument strings that goes along with the +- * command. Maximum is about 16. Terminated by a +- * NULL. +- */ +-HRESULT ExtPackManager::runSetUidToRootHelper(Utf8Str const *a_pstrDisplayInfo, const char *a_pszCommand, ...) +-{ +- /* +- * Calculate the path to the helper application. +- */ +- char szExecName[RTPATH_MAX]; +- int vrc = RTPathAppPrivateArch(szExecName, sizeof(szExecName)); +- AssertLogRelRCReturn(vrc, E_UNEXPECTED); +- +- vrc = RTPathAppend(szExecName, sizeof(szExecName), VBOX_EXTPACK_HELPER_NAME); +- AssertLogRelRCReturn(vrc, E_UNEXPECTED); +- +- /* +- * Convert the variable argument list to a RTProcCreate argument vector. +- */ +- const char *apszArgs[20]; +- unsigned cArgs = 0; +- +- LogRel(("ExtPack: Executing '%s'", szExecName)); +- apszArgs[cArgs++] = &szExecName[0]; +- +- if ( a_pstrDisplayInfo +- && a_pstrDisplayInfo->isNotEmpty()) +- { +- LogRel((" '--display-info-hack' '%s'", a_pstrDisplayInfo->c_str())); +- apszArgs[cArgs++] = "--display-info-hack"; +- apszArgs[cArgs++] = a_pstrDisplayInfo->c_str(); +- } +- +- LogRel(("'%s'", a_pszCommand)); +- apszArgs[cArgs++] = a_pszCommand; +- +- va_list va; +- va_start(va, a_pszCommand); +- const char *pszLastArg; +- for (;;) +- { +- AssertReturn(cArgs < RT_ELEMENTS(apszArgs) - 1, E_UNEXPECTED); +- pszLastArg = va_arg(va, const char *); +- if (!pszLastArg) +- break; +- LogRel((" '%s'", pszLastArg)); +- apszArgs[cArgs++] = pszLastArg; +- }; +- va_end(va); +- +- LogRel(("\n")); +- apszArgs[cArgs] = NULL; +- +- /* +- * Create a PIPE which we attach to stderr so that we can read the error +- * message on failure and report it back to the caller. +- */ +- RTPIPE hPipeR; +- RTHANDLE hStdErrPipe; +- hStdErrPipe.enmType = RTHANDLETYPE_PIPE; +- vrc = RTPipeCreate(&hPipeR, &hStdErrPipe.u.hPipe, RTPIPE_C_INHERIT_WRITE); +- AssertLogRelRCReturn(vrc, E_UNEXPECTED); +- +- /* +- * Spawn the process. +- */ +- HRESULT hrc; +- RTPROCESS hProcess; +- vrc = RTProcCreateEx(szExecName, +- apszArgs, +- RTENV_DEFAULT, +- 0 /*fFlags*/, +- NULL /*phStdIn*/, +- NULL /*phStdOut*/, +- &hStdErrPipe, +- NULL /*pszAsUser*/, +- NULL /*pszPassword*/, +- &hProcess); +- if (RT_SUCCESS(vrc)) +- { +- vrc = RTPipeClose(hStdErrPipe.u.hPipe); +- hStdErrPipe.u.hPipe = NIL_RTPIPE; +- +- /* +- * Read the pipe output until the process completes. +- */ +- RTPROCSTATUS ProcStatus = { -42, RTPROCEXITREASON_ABEND }; +- size_t cbStdErrBuf = 0; +- size_t offStdErrBuf = 0; +- char *pszStdErrBuf = NULL; +- do +- { +- /* +- * Service the pipe. Block waiting for output or the pipe breaking +- * when the process terminates. +- */ +- if (hPipeR != NIL_RTPIPE) +- { +- char achBuf[1024]; +- size_t cbRead; +- vrc = RTPipeReadBlocking(hPipeR, achBuf, sizeof(achBuf), &cbRead); +- if (RT_SUCCESS(vrc)) +- { +- /* grow the buffer? */ +- size_t cbBufReq = offStdErrBuf + cbRead + 1; +- if ( cbBufReq > cbStdErrBuf +- && cbBufReq < _256K) +- { +- size_t cbNew = RT_ALIGN_Z(cbBufReq, 16); // 1024 +- void *pvNew = RTMemRealloc(pszStdErrBuf, cbNew); +- if (pvNew) +- { +- pszStdErrBuf = (char *)pvNew; +- cbStdErrBuf = cbNew; +- } +- } +- +- /* append if we've got room. */ +- if (cbBufReq <= cbStdErrBuf) +- { +- memcpy(&pszStdErrBuf[offStdErrBuf], achBuf, cbRead); +- offStdErrBuf = offStdErrBuf + cbRead; +- pszStdErrBuf[offStdErrBuf] = '\0'; +- } +- } +- else +- { +- AssertLogRelMsg(vrc == VERR_BROKEN_PIPE, ("%Rrc\n", vrc)); +- RTPipeClose(hPipeR); +- hPipeR = NIL_RTPIPE; +- } +- } +- +- /* +- * Service the process. Block if we have no pipe. +- */ +- if (hProcess != NIL_RTPROCESS) +- { +- vrc = RTProcWait(hProcess, +- hPipeR == NIL_RTPIPE ? RTPROCWAIT_FLAGS_BLOCK : RTPROCWAIT_FLAGS_NOBLOCK, +- &ProcStatus); +- if (RT_SUCCESS(vrc)) +- hProcess = NIL_RTPROCESS; +- else +- AssertLogRelMsgStmt(vrc == VERR_PROCESS_RUNNING, ("%Rrc\n", vrc), hProcess = NIL_RTPROCESS); +- } +- } while ( hPipeR != NIL_RTPIPE +- || hProcess != NIL_RTPROCESS); +- +- LogRel(("ExtPack: enmReason=%d iStatus=%d stderr='%s'\n", +- ProcStatus.enmReason, ProcStatus.iStatus, offStdErrBuf ? pszStdErrBuf : "")); +- +- /* +- * Look for rcExit=RTEXITCODE_SUCCESS at the end of the error output, +- * cut it as it is only there to attest the success. +- */ +- if (offStdErrBuf > 0) +- { +- RTStrStripR(pszStdErrBuf); +- offStdErrBuf = strlen(pszStdErrBuf); +- } +- +- char *pszSuccessInd = findSuccessIndicator(pszStdErrBuf, offStdErrBuf); +- if (pszSuccessInd) +- { +- *pszSuccessInd = '\0'; +- offStdErrBuf = pszSuccessInd - pszStdErrBuf; +- } +- else if ( ProcStatus.enmReason == RTPROCEXITREASON_NORMAL +- && ProcStatus.iStatus == 0) +- ProcStatus.iStatus = offStdErrBuf ? 667 : 666; +- +- /* +- * Compose the status code and, on failure, error message. +- */ +- if ( ProcStatus.enmReason == RTPROCEXITREASON_NORMAL +- && ProcStatus.iStatus == 0) +- hrc = S_OK; +- else if (ProcStatus.enmReason == RTPROCEXITREASON_NORMAL) +- { +- AssertMsg(ProcStatus.iStatus != 0, ("%s\n", pszStdErrBuf)); +- hrc = setError(E_FAIL, tr("The installer failed with exit code %d: %s"), +- ProcStatus.iStatus, offStdErrBuf ? pszStdErrBuf : ""); +- } +- else if (ProcStatus.enmReason == RTPROCEXITREASON_SIGNAL) +- hrc = setError(E_UNEXPECTED, tr("The installer was killed by signal #d (stderr: %s)"), +- ProcStatus.iStatus, offStdErrBuf ? pszStdErrBuf : ""); +- else if (ProcStatus.enmReason == RTPROCEXITREASON_ABEND) +- hrc = setError(E_UNEXPECTED, tr("The installer aborted abnormally (stderr: %s)"), +- offStdErrBuf ? pszStdErrBuf : ""); +- else +- hrc = setError(E_UNEXPECTED, tr("internal error: enmReason=%d iStatus=%d stderr='%s'"), +- ProcStatus.enmReason, ProcStatus.iStatus, offStdErrBuf ? pszStdErrBuf : ""); +- +- RTMemFree(pszStdErrBuf); +- } +- else +- hrc = setError(VBOX_E_IPRT_ERROR, tr("Failed to launch the helper application '%s' (%Rrc)"), szExecName, vrc); +- +- RTPipeClose(hPipeR); +- RTPipeClose(hStdErrPipe.u.hPipe); +- +- return hrc; +-} +- +-/** +- * Finds an installed extension pack. +- * +- * @returns Pointer to the extension pack if found, NULL if not. (No reference +- * counting problem here since the caller must be holding the lock.) +- * @param a_pszName The name of the extension pack. +- */ +-ExtPack *ExtPackManager::findExtPack(const char *a_pszName) +-{ +- size_t cchName = strlen(a_pszName); +- +- for (ExtPackList::iterator it = m->llInstalledExtPacks.begin(); +- it != m->llInstalledExtPacks.end(); +- it++) +- { +- ExtPack::Data *pExtPackData = (*it)->m; +- if ( pExtPackData +- && pExtPackData->Desc.strName.length() == cchName +- && pExtPackData->Desc.strName.equalsIgnoreCase(a_pszName)) +- return (*it); +- } +- return NULL; +-} +- +-/** +- * Removes an installed extension pack from the internal list. +- * +- * The package is expected to exist! +- * +- * @param a_pszName The name of the extension pack. +- */ +-void ExtPackManager::removeExtPack(const char *a_pszName) +-{ +- size_t cchName = strlen(a_pszName); +- +- for (ExtPackList::iterator it = m->llInstalledExtPacks.begin(); +- it != m->llInstalledExtPacks.end(); +- it++) +- { +- ExtPack::Data *pExtPackData = (*it)->m; +- if ( pExtPackData +- && pExtPackData->Desc.strName.length() == cchName +- && pExtPackData->Desc.strName.equalsIgnoreCase(a_pszName)) +- { +- m->llInstalledExtPacks.erase(it); +- return; +- } +- } +- AssertMsgFailed(("%s\n", a_pszName)); +-} +- +-/** +- * Refreshes the specified extension pack. +- * +- * This may remove the extension pack from the list, so any non-smart pointers +- * to the extension pack object may become invalid. +- * +- * @returns S_OK and *a_ppExtPack on success, COM status code and error +- * message on failure. Note that *a_ppExtPack can be NULL. +- * +- * @param a_pszName The extension to update.. +- * @param a_fUnusableIsError If @c true, report an unusable extension pack +- * as an error. +- * @param a_ppExtPack Where to store the pointer to the extension +- * pack of it is still around after the refresh. +- * This is optional. +- * +- * @remarks Caller holds the extension manager lock. +- * @remarks Only called in VBoxSVC. +- */ +-HRESULT ExtPackManager::refreshExtPack(const char *a_pszName, bool a_fUnusableIsError, ExtPack **a_ppExtPack) +-{ +- Assert(m->pVirtualBox != NULL); /* Only called from VBoxSVC. */ +- +- HRESULT hrc; +- ExtPack *pExtPack = findExtPack(a_pszName); +- if (pExtPack) +- { +- /* +- * Refresh existing object. +- */ +- bool fCanDelete; +- hrc = pExtPack->refresh(&fCanDelete); +- if (SUCCEEDED(hrc)) +- { +- if (fCanDelete) +- { +- removeExtPack(a_pszName); +- pExtPack = NULL; +- } +- } +- } +- else +- { +- /* +- * Do this check here, otherwise VBoxExtPackCalcDir() will fail with a strange +- * error. +- */ +- bool fValid = VBoxExtPackIsValidName(a_pszName); +- if (!fValid) +- return setError(E_FAIL, "Invalid extension pack name specified"); +- +- /* +- * Does the dir exist? Make some special effort to deal with case +- * sensitivie file systems (a_pszName is case insensitive and mangled). +- */ +- char szDir[RTPATH_MAX]; +- int vrc = VBoxExtPackCalcDir(szDir, sizeof(szDir), m->strBaseDir.c_str(), a_pszName); +- AssertLogRelRCReturn(vrc, E_FAIL); +- +- RTDIRENTRYEX Entry; +- RTFSOBJINFO ObjInfo; +- vrc = RTPathQueryInfoEx(szDir, &ObjInfo, RTFSOBJATTRADD_NOTHING, RTPATH_F_ON_LINK); +- bool fExists = RT_SUCCESS(vrc) && RTFS_IS_DIRECTORY(ObjInfo.Attr.fMode); +- if (!fExists) +- { +- PRTDIR pDir; +- vrc = RTDirOpen(&pDir, m->strBaseDir.c_str()); +- if (RT_SUCCESS(vrc)) +- { +- const char *pszMangledName = RTPathFilename(szDir); +- for (;;) +- { +- vrc = RTDirReadEx(pDir, &Entry, NULL /*pcbDirEntry*/, RTFSOBJATTRADD_NOTHING, RTPATH_F_ON_LINK); +- if (RT_FAILURE(vrc)) +- { +- AssertLogRelMsg(vrc == VERR_NO_MORE_FILES, ("%Rrc\n", vrc)); +- break; +- } +- if ( RTFS_IS_DIRECTORY(Entry.Info.Attr.fMode) +- && !RTStrICmp(Entry.szName, pszMangledName)) +- { +- /* +- * The installed extension pack has a uses different case. +- * Update the name and directory variables. +- */ +- vrc = RTPathJoin(szDir, sizeof(szDir), m->strBaseDir.c_str(), Entry.szName); /* not really necessary */ +- AssertLogRelRCReturnStmt(vrc, RTDirClose(pDir), E_UNEXPECTED); +- a_pszName = Entry.szName; +- fExists = true; +- break; +- } +- } +- RTDirClose(pDir); +- } +- } +- if (fExists) +- { +- /* +- * We've got something, create a new extension pack object for it. +- */ +- ComObjPtr<ExtPack> ptrNewExtPack; +- hrc = ptrNewExtPack.createObject(); +- if (SUCCEEDED(hrc)) +- hrc = ptrNewExtPack->initWithDir(m->enmContext, a_pszName, szDir); +- if (SUCCEEDED(hrc)) +- { +- m->llInstalledExtPacks.push_back(ptrNewExtPack); +- if (ptrNewExtPack->m->fUsable) +- LogRel(("ExtPackManager: Found extension pack '%s'.\n", a_pszName)); +- else +- LogRel(("ExtPackManager: Found bad extension pack '%s': %s\n", +- a_pszName, ptrNewExtPack->m->strWhyUnusable.c_str() )); +- pExtPack = ptrNewExtPack; +- } +- } +- else +- hrc = S_OK; +- } +- +- /* +- * Report error if not usable, if that is desired. +- */ +- if ( SUCCEEDED(hrc) +- && pExtPack +- && a_fUnusableIsError +- && !pExtPack->m->fUsable) +- hrc = setError(E_FAIL, "%s", pExtPack->m->strWhyUnusable.c_str()); +- +- if (a_ppExtPack) +- *a_ppExtPack = pExtPack; +- return hrc; +-} +- +-/** +- * Thread wrapper around doInstall. +- * +- * @returns VINF_SUCCESS (ignored) +- * @param hThread The thread handle (ignored). +- * @param pvJob The job structure. +- */ +-/*static*/ DECLCALLBACK(int) ExtPackManager::doInstallThreadProc(RTTHREAD hThread, void *pvJob) +-{ +- PEXTPACKINSTALLJOB pJob = (PEXTPACKINSTALLJOB)pvJob; +- HRESULT hrc = pJob->ptrExtPackMgr->doInstall(pJob->ptrExtPackFile, pJob->fReplace, &pJob->strDisplayInfo); +- pJob->ptrProgress->notifyComplete(hrc); +- delete pJob; +- +- NOREF(hThread); +- return VINF_SUCCESS; +-} +- +-/** +- * Worker for IExtPackFile::Install. +- * +- * Called on a worker thread via doInstallThreadProc. +- * +- * @returns COM status code. +- * @param a_pExtPackFile The extension pack file, caller checks that +- * it's usable. +- * @param a_fReplace Whether to replace any existing extpack or just +- * fail. +- * @param a_pstrDisplayInfo Host specific display information hacks. +- * @param a_ppProgress Where to return a progress object some day. Can +- * be NULL. +- */ +-HRESULT ExtPackManager::doInstall(ExtPackFile *a_pExtPackFile, bool a_fReplace, Utf8Str const *a_pstrDisplayInfo) +-{ +- AssertReturn(m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON, E_UNEXPECTED); +- RTCString const * const pStrName = &a_pExtPackFile->m->Desc.strName; +- RTCString const * const pStrTarball = &a_pExtPackFile->m->strExtPackFile; +- RTCString const * const pStrTarballDigest = &a_pExtPackFile->m->strDigest; +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS); +- +- /* +- * Refresh the data we have on the extension pack as it +- * may be made stale by direct meddling or some other user. +- */ +- ExtPack *pExtPack; +- hrc = refreshExtPack(pStrName->c_str(), false /*a_fUnusableIsError*/, &pExtPack); +- if (SUCCEEDED(hrc)) +- { +- if (pExtPack && a_fReplace) +- hrc = pExtPack->callUninstallHookAndClose(m->pVirtualBox, false /*a_ForcedRemoval*/); +- else if (pExtPack) +- hrc = setError(E_FAIL, +- tr("Extension pack '%s' is already installed." +- " In case of a reinstallation, please uninstall it first"), +- pStrName->c_str()); +- } +- if (SUCCEEDED(hrc)) +- { +- /* +- * Run the privileged helper binary that performs the actual +- * installation. Then create an object for the packet (we do this +- * even on failure, to be on the safe side). +- */ +- hrc = runSetUidToRootHelper(a_pstrDisplayInfo, +- "install", +- "--base-dir", m->strBaseDir.c_str(), +- "--cert-dir", m->strCertificatDirPath.c_str(), +- "--name", pStrName->c_str(), +- "--tarball", pStrTarball->c_str(), +- "--sha-256", pStrTarballDigest->c_str(), +- pExtPack ? "--replace" : (const char *)NULL, +- (const char *)NULL); +- if (SUCCEEDED(hrc)) +- { +- hrc = refreshExtPack(pStrName->c_str(), true /*a_fUnusableIsError*/, &pExtPack); +- if (SUCCEEDED(hrc) && pExtPack) +- { +- RTERRINFOSTATIC ErrInfo; +- RTErrInfoInitStatic(&ErrInfo); +- pExtPack->callInstalledHook(m->pVirtualBox, &autoLock, &ErrInfo.Core); +- if (RT_SUCCESS(ErrInfo.Core.rc)) +- LogRel(("ExtPackManager: Successfully installed extension pack '%s'.\n", pStrName->c_str())); +- else +- { +- LogRel(("ExtPackManager: Installated hook for '%s' failed: %Rrc - %s\n", +- pStrName->c_str(), ErrInfo.Core.rc, ErrInfo.Core.pszMsg)); +- +- /* +- * Uninstall the extpack if the error indicates that. +- */ +- if (ErrInfo.Core.rc == VERR_EXTPACK_UNSUPPORTED_HOST_UNINSTALL) +- runSetUidToRootHelper(a_pstrDisplayInfo, +- "uninstall", +- "--base-dir", m->strBaseDir.c_str(), +- "--name", pStrName->c_str(), +- "--forced", +- (const char *)NULL); +- hrc = setError(E_FAIL, tr("The installation hook failed: %Rrc - %s"), +- ErrInfo.Core.rc, ErrInfo.Core.pszMsg); +- } +- } +- else if (SUCCEEDED(hrc)) +- hrc = setError(E_FAIL, tr("Installing extension pack '%s' failed under mysterious circumstances"), +- pStrName->c_str()); +- } +- else +- { +- ErrorInfoKeeper Eik; +- refreshExtPack(pStrName->c_str(), false /*a_fUnusableIsError*/, NULL); +- } +- } +- +- /* +- * Do VirtualBoxReady callbacks now for any freshly installed +- * extension pack (old ones will not be called). +- */ +- if (m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON) +- { +- autoLock.release(); +- callAllVirtualBoxReadyHooks(); +- } +- } +- +- return hrc; +-} +- +-/** +- * Thread wrapper around doUninstall. +- * +- * @returns VINF_SUCCESS (ignored) +- * @param hThread The thread handle (ignored). +- * @param pvJob The job structure. +- */ +-/*static*/ DECLCALLBACK(int) ExtPackManager::doUninstallThreadProc(RTTHREAD hThread, void *pvJob) +-{ +- PEXTPACKUNINSTALLJOB pJob = (PEXTPACKUNINSTALLJOB)pvJob; +- HRESULT hrc = pJob->ptrExtPackMgr->doUninstall(&pJob->strName, pJob->fForcedRemoval, &pJob->strDisplayInfo); +- pJob->ptrProgress->notifyComplete(hrc); +- delete pJob; +- +- NOREF(hThread); +- return VINF_SUCCESS; +-} +- +-/** +- * Worker for IExtPackManager::Uninstall. +- * +- * Called on a worker thread via doUninstallThreadProc. +- * +- * @returns COM status code. +- * @param a_pstrName The name of the extension pack to uninstall. +- * @param a_fForcedRemoval Whether to be skip and ignore certain bits of +- * the extpack feedback. To deal with misbehaving +- * extension pack hooks. +- * @param a_pstrDisplayInfo Host specific display information hacks. +- */ +-HRESULT ExtPackManager::doUninstall(Utf8Str const *a_pstrName, bool a_fForcedRemoval, Utf8Str const *a_pstrDisplayInfo) +-{ +- Assert(m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS); +- +- /* +- * Refresh the data we have on the extension pack as it may be made +- * stale by direct meddling or some other user. +- */ +- ExtPack *pExtPack; +- hrc = refreshExtPack(a_pstrName->c_str(), false /*a_fUnusableIsError*/, &pExtPack); +- if (SUCCEEDED(hrc)) +- { +- if (!pExtPack) +- { +- LogRel(("ExtPackManager: Extension pack '%s' is not installed, so nothing to uninstall.\n", a_pstrName->c_str())); +- hrc = S_OK; /* nothing to uninstall */ +- } +- else +- { +- /* +- * Call the uninstall hook and unload the main dll. +- */ +- hrc = pExtPack->callUninstallHookAndClose(m->pVirtualBox, a_fForcedRemoval); +- if (SUCCEEDED(hrc)) +- { +- /* +- * Run the set-uid-to-root binary that performs the +- * uninstallation. Then refresh the object. +- * +- * This refresh is theorically subject to races, but it's of +- * the don't-do-that variety. +- */ +- const char *pszForcedOpt = a_fForcedRemoval ? "--forced" : NULL; +- hrc = runSetUidToRootHelper(a_pstrDisplayInfo, +- "uninstall", +- "--base-dir", m->strBaseDir.c_str(), +- "--name", a_pstrName->c_str(), +- pszForcedOpt, /* Last as it may be NULL. */ +- (const char *)NULL); +- if (SUCCEEDED(hrc)) +- { +- hrc = refreshExtPack(a_pstrName->c_str(), false /*a_fUnusableIsError*/, &pExtPack); +- if (SUCCEEDED(hrc)) +- { +- if (!pExtPack) +- LogRel(("ExtPackManager: Successfully uninstalled extension pack '%s'.\n", a_pstrName->c_str())); +- else +- hrc = setError(E_FAIL, +- tr("Uninstall extension pack '%s' failed under mysterious circumstances"), +- a_pstrName->c_str()); +- } +- } +- else +- { +- ErrorInfoKeeper Eik; +- refreshExtPack(a_pstrName->c_str(), false /*a_fUnusableIsError*/, NULL); +- } +- } +- } +- } +- +- /* +- * Do VirtualBoxReady callbacks now for any freshly installed +- * extension pack (old ones will not be called). +- */ +- if (m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON) +- { +- autoLock.release(); +- callAllVirtualBoxReadyHooks(); +- } +- } +- +- return hrc; +-} +- +- +-/** +- * Calls the pfnVirtualBoxReady hook for all working extension packs. +- * +- * @remarks The caller must not hold any locks. +- */ +-void ExtPackManager::callAllVirtualBoxReadyHooks(void) +-{ +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (FAILED(hrc)) +- return; +- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS); +- ComPtr<ExtPackManager> ptrSelfRef = this; +- +- for (ExtPackList::iterator it = m->llInstalledExtPacks.begin(); +- it != m->llInstalledExtPacks.end(); +- /* advancing below */) +- { +- if ((*it)->callVirtualBoxReadyHook(m->pVirtualBox, &autoLock)) +- it = m->llInstalledExtPacks.begin(); +- else +- it++; +- } +-} +- +-/** +- * Calls the pfnConsoleReady hook for all working extension packs. +- * +- * @param a_pConsole The console interface. +- * @remarks The caller must not hold any locks. +- */ +-void ExtPackManager::callAllConsoleReadyHooks(IConsole *a_pConsole) +-{ +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (FAILED(hrc)) +- return; +- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS); +- ComPtr<ExtPackManager> ptrSelfRef = this; +- +- for (ExtPackList::iterator it = m->llInstalledExtPacks.begin(); +- it != m->llInstalledExtPacks.end(); +- /* advancing below */) +- { +- if ((*it)->callConsoleReadyHook(a_pConsole, &autoLock)) +- it = m->llInstalledExtPacks.begin(); +- else +- it++; +- } +-} +- +-/** +- * Calls the pfnVMCreated hook for all working extension packs. +- * +- * @param a_pMachine The machine interface of the new VM. +- */ +-void ExtPackManager::callAllVmCreatedHooks(IMachine *a_pMachine) +-{ +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (FAILED(hrc)) +- return; +- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS); +- ComPtr<ExtPackManager> ptrSelfRef = this; /* paranoia */ +- ExtPackList llExtPacks = m->llInstalledExtPacks; +- +- for (ExtPackList::iterator it = llExtPacks.begin(); it != llExtPacks.end(); it++) +- (*it)->callVmCreatedHook(m->pVirtualBox, a_pMachine, &autoLock); +-} +- +-/** +- * Calls the pfnVMConfigureVMM hook for all working extension packs. +- * +- * @returns VBox status code. Stops on the first failure, expecting the caller +- * to signal this to the caller of the CFGM constructor. +- * @param a_pConsole The console interface for the VM. +- * @param a_pVM The VM handle. +- */ +-int ExtPackManager::callAllVmConfigureVmmHooks(IConsole *a_pConsole, PVM a_pVM) +-{ +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (FAILED(hrc)) +- return Global::vboxStatusCodeFromCOM(hrc); +- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS); +- ComPtr<ExtPackManager> ptrSelfRef = this; /* paranoia */ +- ExtPackList llExtPacks = m->llInstalledExtPacks; +- +- for (ExtPackList::iterator it = llExtPacks.begin(); it != llExtPacks.end(); it++) +- { +- int vrc; +- (*it)->callVmConfigureVmmHook(a_pConsole, a_pVM, &autoLock, &vrc); +- if (RT_FAILURE(vrc)) +- return vrc; +- } +- +- return VINF_SUCCESS; +-} +- +-/** +- * Calls the pfnVMPowerOn hook for all working extension packs. +- * +- * @returns VBox status code. Stops on the first failure, expecting the caller +- * to not power on the VM. +- * @param a_pConsole The console interface for the VM. +- * @param a_pVM The VM handle. +- */ +-int ExtPackManager::callAllVmPowerOnHooks(IConsole *a_pConsole, PVM a_pVM) +-{ +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (FAILED(hrc)) +- return Global::vboxStatusCodeFromCOM(hrc); +- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS); +- ComPtr<ExtPackManager> ptrSelfRef = this; /* paranoia */ +- ExtPackList llExtPacks = m->llInstalledExtPacks; +- +- for (ExtPackList::iterator it = llExtPacks.begin(); it != llExtPacks.end(); it++) +- { +- int vrc; +- (*it)->callVmPowerOnHook(a_pConsole, a_pVM, &autoLock, &vrc); +- if (RT_FAILURE(vrc)) +- return vrc; +- } +- +- return VINF_SUCCESS; +-} +- +-/** +- * Calls the pfnVMPowerOff hook for all working extension packs. +- * +- * @param a_pConsole The console interface for the VM. +- * @param a_pVM The VM handle. Can be NULL. +- */ +-void ExtPackManager::callAllVmPowerOffHooks(IConsole *a_pConsole, PVM a_pVM) +-{ +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (FAILED(hrc)) +- return; +- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS); +- ComPtr<ExtPackManager> ptrSelfRef = this; /* paranoia */ +- ExtPackList llExtPacks = m->llInstalledExtPacks; +- +- for (ExtPackList::iterator it = llExtPacks.begin(); it != llExtPacks.end(); it++) +- (*it)->callVmPowerOffHook(a_pConsole, a_pVM, &autoLock); +-} +- +- +-/** +- * Checks that the specified extension pack contains a VRDE module and that it +- * is shipshape. +- * +- * @returns S_OK if ok, appropriate failure status code with details. +- * @param a_pstrExtPack The name of the extension pack. +- */ +-HRESULT ExtPackManager::checkVrdeExtPack(Utf8Str const *a_pstrExtPack) +-{ +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- AutoReadLock autoLock(this COMMA_LOCKVAL_SRC_POS); +- +- ExtPack *pExtPack = findExtPack(a_pstrExtPack->c_str()); +- if (pExtPack) +- hrc = pExtPack->checkVrde(); +- else +- hrc = setError(VBOX_E_OBJECT_NOT_FOUND, tr("No extension pack by the name '%s' was found"), a_pstrExtPack->c_str()); +- } +- +- return hrc; +-} +- +-/** +- * Gets the full path to the VRDE library of the specified extension pack. +- * +- * This will do extacly the same as checkVrdeExtPack and then resolve the +- * library path. +- * +- * @returns S_OK if a path is returned, COM error status and message return if +- * not. +- * @param a_pstrExtPack The extension pack. +- * @param a_pstrVrdeLibrary Where to return the path. +- */ +-int ExtPackManager::getVrdeLibraryPathForExtPack(Utf8Str const *a_pstrExtPack, Utf8Str *a_pstrVrdeLibrary) +-{ +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- AutoReadLock autoLock(this COMMA_LOCKVAL_SRC_POS); +- +- ExtPack *pExtPack = findExtPack(a_pstrExtPack->c_str()); +- if (pExtPack) +- hrc = pExtPack->getVrdpLibraryName(a_pstrVrdeLibrary); +- else +- hrc = setError(VBOX_E_OBJECT_NOT_FOUND, tr("No extension pack by the name '%s' was found"), a_pstrExtPack->c_str()); +- } +- +- return hrc; +-} +- +-/** +- * Gets the name of the default VRDE extension pack. +- * +- * @returns S_OK or some COM error status on red tape failure. +- * @param a_pstrExtPack Where to return the extension pack name. Returns +- * empty if no extension pack wishes to be the default +- * VRDP provider. +- */ +-HRESULT ExtPackManager::getDefaultVrdeExtPack(Utf8Str *a_pstrExtPack) +-{ +- a_pstrExtPack->setNull(); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- AutoReadLock autoLock(this COMMA_LOCKVAL_SRC_POS); +- +- for (ExtPackList::iterator it = m->llInstalledExtPacks.begin(); +- it != m->llInstalledExtPacks.end(); +- it++) +- { +- if ((*it)->wantsToBeDefaultVrde()) +- { +- *a_pstrExtPack = (*it)->m->Desc.strName; +- break; +- } +- } +- } +- return hrc; +-} +- +-/** +- * Checks if an extension pack is (present and) usable. +- * +- * @returns @c true if it is, otherwise @c false. +- * @param a_pszExtPack The name of the extension pack. +- */ +-bool ExtPackManager::isExtPackUsable(const char *a_pszExtPack) +-{ +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (FAILED(hrc)) +- return false; +- AutoReadLock autoLock(this COMMA_LOCKVAL_SRC_POS); +- +- ExtPack *pExtPack = findExtPack(a_pszExtPack); +- return pExtPack != NULL +- && pExtPack->m->fUsable; +-} +- +-/** +- * Dumps all extension packs to the release log. +- */ +-void ExtPackManager::dumpAllToReleaseLog(void) +-{ +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (FAILED(hrc)) +- return; +- AutoReadLock autoLock(this COMMA_LOCKVAL_SRC_POS); +- +- LogRel(("Installed Extension Packs:\n")); +- for (ExtPackList::iterator it = m->llInstalledExtPacks.begin(); +- it != m->llInstalledExtPacks.end(); +- it++) +- { +- ExtPack::Data *pExtPackData = (*it)->m; +- if (pExtPackData) +- { +- if (pExtPackData->fUsable) +- LogRel((" %s (Version: %s r%u%s%s; VRDE Module: %s)\n", +- pExtPackData->Desc.strName.c_str(), +- pExtPackData->Desc.strVersion.c_str(), +- pExtPackData->Desc.uRevision, +- pExtPackData->Desc.strEdition.isEmpty() ? "" : " ", +- pExtPackData->Desc.strEdition.c_str(), +- pExtPackData->Desc.strVrdeModule.c_str() )); +- else +- LogRel((" %s (Version: %s r%u%s%s; VRDE Module: %s unusable because of '%s')\n", +- pExtPackData->Desc.strName.c_str(), +- pExtPackData->Desc.strVersion.c_str(), +- pExtPackData->Desc.uRevision, +- pExtPackData->Desc.strEdition.isEmpty() ? "" : " ", +- pExtPackData->Desc.strEdition.c_str(), +- pExtPackData->Desc.strVrdeModule.c_str(), +- pExtPackData->strWhyUnusable.c_str() )); +- } +- else +- LogRel((" pExtPackData is NULL\n")); +- } +- +- if (!m->llInstalledExtPacks.size()) +- LogRel((" None installed!\n")); +-} +- +-/* vi: set tabstop=4 shiftwidth=4 expandtab: */ +--- VirtualBox-4.1.18.orig/src/VBox/Main/src-all/ExtPackUtil.cpp 2012-06-20 10:17:34.000000000 -0300 ++++ /dev/null 2012-07-24 14:48:18.638572110 -0300 +@@ -1,1385 +0,0 @@ +-/* $Id: ExtPackUtil.cpp $ */ +-/** @file +- * VirtualBox Main - Extension Pack Utilities and definitions, VBoxC, VBoxSVC, ++. +- */ +- +-/* +- * Copyright (C) 2010-2012 Oracle Corporation +- * +- * This file is part of VirtualBox Open Source Edition (OSE), as +- * available from http://www.virtualbox.org. This file is free software; +- * you can redistribute it and/or modify it under the terms of the GNU +- * General Public License (GPL) as published by the Free Software +- * Foundation, in version 2 as it comes in the "COPYING" file of the +- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the +- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. +- */ +- +- +-/******************************************************************************* +-* Header Files * +-*******************************************************************************/ +-#include "../include/ExtPackUtil.h" +- +-#include <iprt/ctype.h> +-#include <iprt/dir.h> +-#include <iprt/file.h> +-#include <iprt/manifest.h> +-#include <iprt/param.h> +-#include <iprt/path.h> +-#include <iprt/sha.h> +-#include <iprt/string.h> +-#include <iprt/vfs.h> +-#include <iprt/tar.h> +-#include <iprt/zip.h> +-#include <iprt/cpp/xml.h> +- +-#include <VBox/log.h> +- +- +-/** +- * Worker for VBoxExtPackLoadDesc that loads the plug-in descriptors. +- * +- * @returns Same as VBoxExtPackLoadDesc. +- * @param pVBoxExtPackElm +- * @param pcPlugIns Where to return the number of plug-ins in the +- * array. +- * @param paPlugIns Where to return the plug-in descriptor array. +- * (RTMemFree it even on failure) +- */ +-static RTCString * +-vboxExtPackLoadPlugInDescs(const xml::ElementNode *pVBoxExtPackElm, +- uint32_t *pcPlugIns, PVBOXEXTPACKPLUGINDESC *paPlugIns) +-{ +- *pcPlugIns = 0; +- *paPlugIns = NULL; +- +- /** @todo plug-ins */ +- NOREF(pVBoxExtPackElm); +- +- return NULL; +-} +- +-/** +- * Clears the extension pack descriptor. +- * +- * @param a_pExtPackDesc The descriptor to clear. +- */ +-static void vboxExtPackClearDesc(PVBOXEXTPACKDESC a_pExtPackDesc) +-{ +- a_pExtPackDesc->strName.setNull(); +- a_pExtPackDesc->strDescription.setNull(); +- a_pExtPackDesc->strVersion.setNull(); +- a_pExtPackDesc->strEdition.setNull(); +- a_pExtPackDesc->uRevision = 0; +- a_pExtPackDesc->strMainModule.setNull(); +- a_pExtPackDesc->strVrdeModule.setNull(); +- a_pExtPackDesc->cPlugIns = 0; +- a_pExtPackDesc->paPlugIns = NULL; +- a_pExtPackDesc->fShowLicense = false; +-} +- +-/** +- * Initializes an extension pack descriptor so that it's safe to call free on +- * it whatever happens later on. +- * +- * @param a_pExtPackDesc The descirptor to initialize. +- */ +-void VBoxExtPackInitDesc(PVBOXEXTPACKDESC a_pExtPackDesc) +-{ +- vboxExtPackClearDesc(a_pExtPackDesc); +-} +- +- +-/** +- * Load the extension pack descriptor from an XML document. +- * +- * @returns NULL on success, pointer to an error message on failure (caller +- * deletes it). +- * @param a_pDoc Pointer to the the XML document. +- * @param a_pExtPackDesc Where to store the extension pack descriptor. +- */ +-static RTCString *vboxExtPackLoadDescFromDoc(xml::Document *a_pDoc, PVBOXEXTPACKDESC a_pExtPackDesc) +-{ +- /* +- * Get the main element and check its version. +- */ +- const xml::ElementNode *pVBoxExtPackElm = a_pDoc->getRootElement(); +- if ( !pVBoxExtPackElm +- || strcmp(pVBoxExtPackElm->getName(), "VirtualBoxExtensionPack") != 0) +- return new RTCString("No VirtualBoxExtensionPack element"); +- +- RTCString strFormatVersion; +- if (!pVBoxExtPackElm->getAttributeValue("version", strFormatVersion)) +- return new RTCString("Missing format version"); +- if (!strFormatVersion.equals("1.0")) +- return &(new RTCString("Unsupported format version: "))->append(strFormatVersion); +- +- /* +- * Read and validate mandatory bits. +- */ +- const xml::ElementNode *pNameElm = pVBoxExtPackElm->findChildElement("Name"); +- if (!pNameElm) +- return new RTCString("The 'Name' element is missing"); +- const char *pszName = pNameElm->getValue(); +- if (!VBoxExtPackIsValidName(pszName)) +- return &(new RTCString("Invalid name: "))->append(pszName); +- +- const xml::ElementNode *pDescElm = pVBoxExtPackElm->findChildElement("Description"); +- if (!pDescElm) +- return new RTCString("The 'Description' element is missing"); +- const char *pszDesc = pDescElm->getValue(); +- if (!pszDesc || *pszDesc == '\0') +- return new RTCString("The 'Description' element is empty"); +- if (strpbrk(pszDesc, "\n\r\t\v\b") != NULL) +- return new RTCString("The 'Description' must not contain control characters"); +- +- const xml::ElementNode *pVersionElm = pVBoxExtPackElm->findChildElement("Version"); +- if (!pVersionElm) +- return new RTCString("The 'Version' element is missing"); +- const char *pszVersion = pVersionElm->getValue(); +- if (!pszVersion || *pszVersion == '\0') +- return new RTCString("The 'Version' element is empty"); +- if (!VBoxExtPackIsValidVersionString(pszVersion)) +- return &(new RTCString("Invalid version string: "))->append(pszVersion); +- +- uint32_t uRevision; +- if (!pVersionElm->getAttributeValue("revision", uRevision)) +- uRevision = 0; +- +- const char *pszEdition; +- if (!pVersionElm->getAttributeValue("edition", pszEdition)) +- pszEdition = ""; +- if (!VBoxExtPackIsValidEditionString(pszEdition)) +- return &(new RTCString("Invalid edition string: "))->append(pszEdition); +- +- const xml::ElementNode *pMainModuleElm = pVBoxExtPackElm->findChildElement("MainModule"); +- if (!pMainModuleElm) +- return new RTCString("The 'MainModule' element is missing"); +- const char *pszMainModule = pMainModuleElm->getValue(); +- if (!pszMainModule || *pszMainModule == '\0') +- return new RTCString("The 'MainModule' element is empty"); +- if (!VBoxExtPackIsValidModuleString(pszMainModule)) +- return &(new RTCString("Invalid main module string: "))->append(pszMainModule); +- +- /* +- * The VRDE module, optional. +- * Accept both none and empty as tokens of no VRDE module. +- */ +- const char *pszVrdeModule = NULL; +- const xml::ElementNode *pVrdeModuleElm = pVBoxExtPackElm->findChildElement("VRDEModule"); +- if (pVrdeModuleElm) +- { +- pszVrdeModule = pVrdeModuleElm->getValue(); +- if (!pszVrdeModule || *pszVrdeModule == '\0') +- pszVrdeModule = NULL; +- else if (!VBoxExtPackIsValidModuleString(pszVrdeModule)) +- return &(new RTCString("Invalid VRDE module string: "))->append(pszVrdeModule); +- } +- +- /* +- * Whether to show the license, optional. (presense is enough here) +- */ +- const xml::ElementNode *pShowLicenseElm = pVBoxExtPackElm->findChildElement("ShowLicense"); +- bool fShowLicense = pShowLicenseElm != NULL; +- +- /* +- * Parse plug-in descriptions (last because of the manual memory management). +- */ +- uint32_t cPlugIns = 0; +- PVBOXEXTPACKPLUGINDESC paPlugIns = NULL; +- RTCString *pstrRet = vboxExtPackLoadPlugInDescs(pVBoxExtPackElm, &cPlugIns, &paPlugIns); +- if (pstrRet) +- { +- RTMemFree(paPlugIns); +- return pstrRet; +- } +- +- /* +- * Everything seems fine, fill in the return values and return successfully. +- */ +- a_pExtPackDesc->strName = pszName; +- a_pExtPackDesc->strDescription = pszDesc; +- a_pExtPackDesc->strVersion = pszVersion; +- a_pExtPackDesc->strEdition = pszEdition; +- a_pExtPackDesc->uRevision = uRevision; +- a_pExtPackDesc->strMainModule = pszMainModule; +- a_pExtPackDesc->strVrdeModule = pszVrdeModule; +- a_pExtPackDesc->cPlugIns = cPlugIns; +- a_pExtPackDesc->paPlugIns = paPlugIns; +- a_pExtPackDesc->fShowLicense = fShowLicense; +- +- return NULL; +-} +- +-/** +- * Reads the extension pack descriptor. +- * +- * @returns NULL on success, pointer to an error message on failure (caller +- * deletes it). +- * @param a_pszDir The directory containing the description file. +- * @param a_pExtPackDesc Where to store the extension pack descriptor. +- * @param a_pObjInfo Where to store the object info for the file (unix +- * attribs). Optional. +- */ +-RTCString *VBoxExtPackLoadDesc(const char *a_pszDir, PVBOXEXTPACKDESC a_pExtPackDesc, PRTFSOBJINFO a_pObjInfo) +-{ +- vboxExtPackClearDesc(a_pExtPackDesc); +- +- /* +- * Validate, open and parse the XML file. +- */ +- char szFilePath[RTPATH_MAX]; +- int vrc = RTPathJoin(szFilePath, sizeof(szFilePath), a_pszDir, VBOX_EXTPACK_DESCRIPTION_NAME); +- if (RT_FAILURE(vrc)) +- return new RTCString("RTPathJoin failed with %Rrc", vrc); +- +- RTFSOBJINFO ObjInfo; +- vrc = RTPathQueryInfoEx(szFilePath, &ObjInfo, RTFSOBJATTRADD_UNIX, RTPATH_F_ON_LINK); +- if (RT_FAILURE(vrc)) +- return &(new RTCString())->printf("RTPathQueryInfoEx failed with %Rrc", vrc); +- if (a_pObjInfo) +- *a_pObjInfo = ObjInfo; +- if (!RTFS_IS_FILE(ObjInfo.Attr.fMode)) +- { +- if (RTFS_IS_SYMLINK(ObjInfo.Attr.fMode)) +- return new RTCString("The XML file is symlinked, that is not allowed"); +- return &(new RTCString)->printf("The XML file is not a file (fMode=%#x)", ObjInfo.Attr.fMode); +- } +- +- xml::Document Doc; +- { +- xml::XmlFileParser Parser; +- try +- { +- Parser.read(szFilePath, Doc); +- } +- catch (xml::XmlError Err) +- { +- return new RTCString(Err.what()); +- } +- } +- +- /* +- * Hand the xml doc over to the common code. +- */ +- return vboxExtPackLoadDescFromDoc(&Doc, a_pExtPackDesc); +-} +- +-/** +- * Reads the extension pack descriptor. +- * +- * @returns NULL on success, pointer to an error message on failure (caller +- * deletes it). +- * @param a_pszDir The directory containing the description file. +- * @param a_pExtPackDesc Where to store the extension pack descriptor. +- * @param a_pObjInfo Where to store the object info for the file (unix +- * attribs). Optional. +- */ +-RTCString *VBoxExtPackLoadDescFromVfsFile(RTVFSFILE hVfsFile, PVBOXEXTPACKDESC a_pExtPackDesc, PRTFSOBJINFO a_pObjInfo) +-{ +- vboxExtPackClearDesc(a_pExtPackDesc); +- +- /* +- * Query the object info. +- */ +- RTFSOBJINFO ObjInfo; +- int rc = RTVfsFileQueryInfo(hVfsFile, &ObjInfo, RTFSOBJATTRADD_UNIX); +- if (RT_FAILURE(rc)) +- return &(new RTCString)->printf("RTVfsFileQueryInfo failed: %Rrc", rc); +- if (a_pObjInfo) +- *a_pObjInfo = ObjInfo; +- +- /* +- * The simple approach, read the whole thing into memory and pass this to +- * the XML parser. +- */ +- +- /* Check the file size. */ +- if (ObjInfo.cbObject > _1M || ObjInfo.cbObject < 0) +- return &(new RTCString)->printf("The XML file is too large (%'RU64 bytes)", ObjInfo.cbObject); +- size_t const cbFile = (size_t)ObjInfo.cbObject; +- +- /* Rewind to the start of the file. */ +- rc = RTVfsFileSeek(hVfsFile, 0, RTFILE_SEEK_BEGIN, NULL); +- if (RT_FAILURE(rc)) +- return &(new RTCString)->printf("RTVfsFileSeek(,0,BEGIN) failed: %Rrc", rc); +- +- /* Allocate memory and read the file content into it. */ +- void *pvFile = RTMemTmpAlloc(cbFile); +- if (!pvFile) +- return &(new RTCString)->printf("RTMemTmpAlloc(%zu) failed", cbFile); +- +- RTCString *pstrErr = NULL; +- rc = RTVfsFileRead(hVfsFile, pvFile, cbFile, NULL); +- if (RT_FAILURE(rc)) +- pstrErr = &(new RTCString)->printf("RTVfsFileRead failed: %Rrc", rc); +- +- /* +- * Parse the file. +- */ +- xml::Document Doc; +- if (RT_SUCCESS(rc)) +- { +- xml::XmlMemParser Parser; +- RTCString strFileName = VBOX_EXTPACK_DESCRIPTION_NAME; +- try +- { +- Parser.read(pvFile, cbFile, strFileName, Doc); +- } +- catch (xml::XmlError Err) +- { +- pstrErr = new RTCString(Err.what()); +- rc = VERR_PARSE_ERROR; +- } +- } +- RTMemTmpFree(pvFile); +- +- /* +- * Hand the xml doc over to the common code. +- */ +- if (RT_SUCCESS(rc)) +- pstrErr = vboxExtPackLoadDescFromDoc(&Doc, a_pExtPackDesc); +- +- return pstrErr; +-} +- +-/** +- * Frees all resources associated with a extension pack descriptor. +- * +- * @param a_pExtPackDesc The extension pack descriptor which members +- * should be freed. +- */ +-void VBoxExtPackFreeDesc(PVBOXEXTPACKDESC a_pExtPackDesc) +-{ +- if (!a_pExtPackDesc) +- return; +- +- a_pExtPackDesc->strName.setNull(); +- a_pExtPackDesc->strDescription.setNull(); +- a_pExtPackDesc->strVersion.setNull(); +- a_pExtPackDesc->strEdition.setNull(); +- a_pExtPackDesc->uRevision = 0; +- a_pExtPackDesc->strMainModule.setNull(); +- a_pExtPackDesc->strVrdeModule.setNull(); +- a_pExtPackDesc->cPlugIns = 0; +- RTMemFree(a_pExtPackDesc->paPlugIns); +- a_pExtPackDesc->paPlugIns = NULL; +- a_pExtPackDesc->fShowLicense = false; +-} +- +-/** +- * Extract the extension pack name from the tarball path. +- * +- * @returns String containing the name on success, the caller must delete it. +- * NULL if no valid name was found or if we ran out of memory. +- * @param pszTarball The path to the tarball. +- */ +-RTCString *VBoxExtPackExtractNameFromTarballPath(const char *pszTarball) +-{ +- /* +- * Skip ahead to the filename part and count the number of characters +- * that matches the criteria for a mangled extension pack name. +- */ +- const char *pszSrc = RTPathFilename(pszTarball); +- if (!pszSrc) +- return NULL; +- +- size_t off = 0; +- while (RT_C_IS_ALNUM(pszSrc[off]) || pszSrc[off] == '_') +- off++; +- +- /* +- * Check min and max name limits. +- */ +- if ( off > VBOX_EXTPACK_NAME_MAX_LEN +- || off < VBOX_EXTPACK_NAME_MIN_LEN) +- return NULL; +- +- /* +- * Return the unmangled name. +- */ +- return VBoxExtPackUnmangleName(pszSrc, off); +-} +- +-/** +- * Validates the extension pack name. +- * +- * @returns true if valid, false if not. +- * @param pszName The name to validate. +- * @sa VBoxExtPackExtractNameFromTarballPath +- */ +-bool VBoxExtPackIsValidName(const char *pszName) +-{ +- if (!pszName) +- return false; +- +- /* +- * Check the characters making up the name, only english alphabet +- * characters, decimal digits and spaces are allowed. +- */ +- size_t off = 0; +- while (pszName[off]) +- { +- if (!RT_C_IS_ALNUM(pszName[off]) && pszName[off] != ' ') +- return false; +- off++; +- } +- +- /* +- * Check min and max name limits. +- */ +- if ( off > VBOX_EXTPACK_NAME_MAX_LEN +- || off < VBOX_EXTPACK_NAME_MIN_LEN) +- return false; +- +- return true; +-} +- +-/** +- * Checks if an alledged manged extension pack name. +- * +- * @returns true if valid, false if not. +- * @param pszMangledName The mangled name to validate. +- * @param cchMax The max number of chars to test. +- * @sa VBoxExtPackMangleName +- */ +-bool VBoxExtPackIsValidMangledName(const char *pszMangledName, size_t cchMax /*= RTSTR_MAX*/) +-{ +- if (!pszMangledName) +- return false; +- +- /* +- * Check the characters making up the name, only english alphabet +- * characters, decimal digits and underscores (=space) are allowed. +- */ +- size_t off = 0; +- while (off < cchMax && pszMangledName[off]) +- { +- if (!RT_C_IS_ALNUM(pszMangledName[off]) && pszMangledName[off] != '_') +- return false; +- off++; +- } +- +- /* +- * Check min and max name limits. +- */ +- if ( off > VBOX_EXTPACK_NAME_MAX_LEN +- || off < VBOX_EXTPACK_NAME_MIN_LEN) +- return false; +- +- return true; +-} +- +-/** +- * Mangle an extension pack name so it can be used by a directory or file name. +- * +- * @returns String containing the mangled name on success, the caller must +- * delete it. NULL on failure. +- * @param pszName The unmangled name. +- * @sa VBoxExtPackUnmangleName, VBoxExtPackIsValidMangledName +- */ +-RTCString *VBoxExtPackMangleName(const char *pszName) +-{ +- AssertReturn(VBoxExtPackIsValidName(pszName), NULL); +- +- char szTmp[VBOX_EXTPACK_NAME_MAX_LEN + 1]; +- size_t off = 0; +- char ch; +- while ((ch = pszName[off]) != '\0') +- { +- if (ch == ' ') +- ch = '_'; +- szTmp[off++] = ch; +- } +- szTmp[off] = '\0'; +- Assert(VBoxExtPackIsValidMangledName(szTmp)); +- +- return new RTCString(szTmp, off); +-} +- +-/** +- * Unmangle an extension pack name (reverses VBoxExtPackMangleName). +- * +- * @returns String containing the mangled name on success, the caller must +- * delete it. NULL on failure. +- * @param pszMangledName The mangled name. +- * @param cchMax The max name length. RTSTR_MAX is fine. +- * @sa VBoxExtPackMangleName, VBoxExtPackIsValidMangledName +- */ +-RTCString *VBoxExtPackUnmangleName(const char *pszMangledName, size_t cchMax) +-{ +- AssertReturn(VBoxExtPackIsValidMangledName(pszMangledName, cchMax), NULL); +- +- char szTmp[VBOX_EXTPACK_NAME_MAX_LEN + 1]; +- size_t off = 0; +- char ch; +- while ( off < cchMax +- && (ch = pszMangledName[off]) != '\0') +- { +- if (ch == '_') +- ch = ' '; +- else +- AssertReturn(RT_C_IS_ALNUM(ch) || ch == ' ', NULL); +- szTmp[off++] = ch; +- } +- szTmp[off] = '\0'; +- AssertReturn(VBoxExtPackIsValidName(szTmp), NULL); +- +- return new RTCString(szTmp, off); +-} +- +-/** +- * Constructs the extension pack directory path. +- * +- * A combination of RTPathJoin and VBoxExtPackMangleName. +- * +- * @returns IPRT status code like RTPathJoin. +- * @param pszExtPackDir Where to return the directory path. +- * @param cbExtPackDir The size of the return buffer. +- * @param pszParentDir The parent directory (".../Extensions"). +- * @param pszName The extension pack name, unmangled. +- */ +-int VBoxExtPackCalcDir(char *pszExtPackDir, size_t cbExtPackDir, const char *pszParentDir, const char *pszName) +-{ +- AssertReturn(VBoxExtPackIsValidName(pszName), VERR_INTERNAL_ERROR_5); +- +- RTCString *pstrMangledName = VBoxExtPackMangleName(pszName); +- if (!pstrMangledName) +- return VERR_INTERNAL_ERROR_4; +- +- int vrc = RTPathJoin(pszExtPackDir, cbExtPackDir, pszParentDir, pstrMangledName->c_str()); +- delete pstrMangledName; +- +- return vrc; +-} +- +- +-/** +- * Validates the extension pack version string. +- * +- * @returns true if valid, false if not. +- * @param pszVersion The version string to validate. +- */ +-bool VBoxExtPackIsValidVersionString(const char *pszVersion) +-{ +- if (!pszVersion || *pszVersion == '\0') +- return false; +- +- /* 1.x.y.z... */ +- for (;;) +- { +- if (!RT_C_IS_DIGIT(*pszVersion)) +- return false; +- do +- pszVersion++; +- while (RT_C_IS_DIGIT(*pszVersion)); +- if (*pszVersion != '.') +- break; +- pszVersion++; +- } +- +- /* upper case string + numbers indicating the build type */ +- if (*pszVersion == '-' || *pszVersion == '_') +- { +- /** @todo Should probably restrict this to known build types (alpha, +- * beta, rc, ++). */ +- do +- pszVersion++; +- while ( RT_C_IS_DIGIT(*pszVersion) +- || RT_C_IS_UPPER(*pszVersion) +- || *pszVersion == '-' +- || *pszVersion == '_'); +- } +- +- return *pszVersion == '\0'; +-} +- +-/** +- * Validates the extension pack edition string. +- * +- * @returns true if valid, false if not. +- * @param pszEdition The edition string to validate. +- */ +-bool VBoxExtPackIsValidEditionString(const char *pszEdition) +-{ +- if (*pszEdition) +- { +- if (!RT_C_IS_UPPER(*pszEdition)) +- return false; +- +- do +- pszEdition++; +- while ( RT_C_IS_UPPER(*pszEdition) +- || RT_C_IS_DIGIT(*pszEdition) +- || *pszEdition == '-' +- || *pszEdition == '_'); +- } +- return *pszEdition == '\0'; +-} +- +-/** +- * Validates an extension pack module string. +- * +- * @returns true if valid, false if not. +- * @param pszModule The module string to validate. +- */ +-bool VBoxExtPackIsValidModuleString(const char *pszModule) +-{ +- if (!pszModule || *pszModule == '\0') +- return false; +- +- /* Restricted charset, no extensions (dots). */ +- while ( RT_C_IS_ALNUM(*pszModule) +- || *pszModule == '-' +- || *pszModule == '_') +- pszModule++; +- +- return *pszModule == '\0'; +-} +- +-/** +- * RTStrPrintfv wrapper. +- * +- * @returns @a rc +- * @param rc The status code to return. +- * @param pszError The error buffer. +- * @param cbError The size of the buffer. +- * @param pszFormat The error message format string. +- * @param ... Format arguments. +- */ +-static int vboxExtPackReturnError(int rc, char *pszError, size_t cbError, const char *pszFormat, ...) +-{ +- va_list va; +- va_start(va, pszFormat); +- RTStrPrintfV(pszError, cbError, pszFormat, va); +- va_end(va); +- return rc; +-} +- +-/** +- * RTStrPrintfv wrapper. +- * +- * @param pszError The error buffer. +- * @param cbError The size of the buffer. +- * @param pszFormat The error message format string. +- * @param ... Format arguments. +- */ +-static void vboxExtPackSetError(char *pszError, size_t cbError, const char *pszFormat, ...) +-{ +- va_list va; +- va_start(va, pszFormat); +- RTStrPrintfV(pszError, cbError, pszFormat, va); +- va_end(va); +-} +- +-/** +- * Verifies the manifest and its signature. +- * +- * @returns VBox status code, failures with message. +- * @param hManifestFile The xml from the extension pack. +- * @param pszExtPackName The expected extension pack name. This can be +- * NULL, in which we don't have any expectations. +- * @param pszError Where to store an error message on failure. +- * @param cbError The size of the buffer @a pszError points to. +- */ +-static int vboxExtPackVerifyXml(RTVFSFILE hXmlFile, const char *pszExtPackName, char *pszError, size_t cbError) +-{ +- /* +- * Load the XML. +- */ +- VBOXEXTPACKDESC ExtPackDesc; +- RTCString *pstrErr = VBoxExtPackLoadDescFromVfsFile(hXmlFile, &ExtPackDesc, NULL); +- if (pstrErr) +- { +- RTStrCopy(pszError, cbError, pstrErr->c_str()); +- delete pstrErr; +- return VERR_PARSE_ERROR; +- } +- +- /* +- * Check the name. +- */ +- /** @todo drop this restriction after the old install interface is +- * dropped. */ +- int rc = VINF_SUCCESS; +- if ( pszExtPackName +- && !ExtPackDesc.strName.equalsIgnoreCase(pszExtPackName)) +- rc = vboxExtPackReturnError(VERR_NOT_EQUAL, pszError, cbError, +- "The name of the downloaded file and the name stored inside the extension pack does not match" +- " (xml='%s' file='%s')", ExtPackDesc.strName.c_str(), pszExtPackName); +- return rc; +-} +- +-/** +- * Verifies the manifest and its signature. +- * +- * @returns VBox status code, failures with message. +- * @param hOurManifest The manifest we compiled. +- * @param hManifestFile The manifest file in the extension pack. +- * @param hSignatureFile The manifest signature file. +- * @param pszError Where to store an error message on failure. +- * @param cbError The size of the buffer @a pszError points to. +- */ +-static int vboxExtPackVerifyManifestAndSignature(RTMANIFEST hOurManifest, RTVFSFILE hManifestFile, RTVFSFILE hSignatureFile, +- char *pszError, size_t cbError) +-{ +- /* +- * Read the manifest from the extension pack. +- */ +- int rc = RTVfsFileSeek(hManifestFile, 0, RTFILE_SEEK_BEGIN, NULL); +- if (RT_FAILURE(rc)) +- return vboxExtPackReturnError(rc, pszError, cbError, "RTVfsFileSeek failed: %Rrc", rc); +- +- RTMANIFEST hTheirManifest; +- rc = RTManifestCreate(0 /*fFlags*/, &hTheirManifest); +- if (RT_FAILURE(rc)) +- return vboxExtPackReturnError(rc, pszError, cbError, "RTManifestCreate failed: %Rrc", rc); +- +- RTVFSIOSTREAM hVfsIos = RTVfsFileToIoStream(hManifestFile); +- rc = RTManifestReadStandard(hTheirManifest, hVfsIos); +- RTVfsIoStrmRelease(hVfsIos); +- if (RT_SUCCESS(rc)) +- { +- /* +- * Compare the manifests. +- */ +- static const char *s_apszIgnoreEntries[] = +- { +- VBOX_EXTPACK_MANIFEST_NAME, +- VBOX_EXTPACK_SIGNATURE_NAME, +- "./" VBOX_EXTPACK_MANIFEST_NAME, +- "./" VBOX_EXTPACK_SIGNATURE_NAME, +- NULL +- }; +- char szError[RTPATH_MAX]; +- rc = RTManifestEqualsEx(hOurManifest, hTheirManifest, &s_apszIgnoreEntries[0], NULL, +- RTMANIFEST_EQUALS_IGN_MISSING_ATTRS /*fFlags*/, +- szError, sizeof(szError)); +- if (RT_SUCCESS(rc)) +- { +- /* +- * Validate the manifest file signature. +- */ +- /** @todo implement signature stuff */ +- NOREF(hSignatureFile); +- +- } +- else if (rc == VERR_NOT_EQUAL && szError[0]) +- vboxExtPackSetError(pszError, cbError, "Manifest mismatch: %s", szError); +- else +- vboxExtPackSetError(pszError, cbError, "RTManifestEqualsEx failed: %Rrc", rc); +-#if 0 +- RTVFSIOSTREAM hVfsIosStdOut = NIL_RTVFSIOSTREAM; +- RTVfsIoStrmFromStdHandle(RTHANDLESTD_OUTPUT, RTFILE_O_WRITE, true, &hVfsIosStdOut); +- RTVfsIoStrmWrite(hVfsIosStdOut, "Our:\n", sizeof("Our:\n") - 1, true, NULL); +- RTManifestWriteStandard(hOurManifest, hVfsIosStdOut); +- RTVfsIoStrmWrite(hVfsIosStdOut, "Their:\n", sizeof("Their:\n") - 1, true, NULL); +- RTManifestWriteStandard(hTheirManifest, hVfsIosStdOut); +-#endif +- } +- else +- vboxExtPackSetError(pszError, cbError, "Error parsing '%s': %Rrc", VBOX_EXTPACK_MANIFEST_NAME, rc); +- +- RTManifestRelease(hTheirManifest); +- return rc; +-} +- +- +-/** +- * Verifies the file digest (if specified) and returns the SHA-256 of the file. +- * +- * @returns +- * @param hFileManifest Manifest containing a SHA-256 digest of the file +- * that was calculated as the file was processed. +- * @param pszFileDigest SHA-256 digest of the file. +- * @param pStrDigest Where to return the SHA-256 digest. Optional. +- * @param pszError Where to write an error message on failure. +- * @param cbError The size of the @a pszError buffer. +- */ +-static int vboxExtPackVerifyFileDigest(RTMANIFEST hFileManifest, const char *pszFileDigest, +- RTCString *pStrDigest, char *pszError, size_t cbError) +-{ +- /* +- * Extract the SHA-256 entry for the extpack file. +- */ +- char szCalculatedDigest[RTSHA256_DIGEST_LEN + 1]; +- int rc = RTManifestEntryQueryAttr(hFileManifest, "extpack", NULL /*no name*/, RTMANIFEST_ATTR_SHA256, +- szCalculatedDigest, sizeof(szCalculatedDigest), NULL); +- if (RT_SUCCESS(rc)) +- { +- /* +- * Convert the two strings to binary form before comparing. +- * We convert the calculated hash even if we don't have anything to +- * compare with, just to validate it. +- */ +- uint8_t abCalculatedHash[RTSHA256_HASH_SIZE]; +- rc = RTSha256FromString(szCalculatedDigest, abCalculatedHash); +- if (RT_SUCCESS(rc)) +- { +- if ( pszFileDigest +- && *pszFileDigest != '\0') +- { +- uint8_t abFileHash[RTSHA256_HASH_SIZE]; +- rc = RTSha256FromString(pszFileDigest, abFileHash); +- if (RT_SUCCESS(rc)) +- { +- if (memcmp(abFileHash, abCalculatedHash, sizeof(abFileHash))) +- { +- vboxExtPackSetError(pszError, cbError, "The extension pack file has changed (SHA-256 mismatch)"); +- rc = VERR_NOT_EQUAL; +- } +- } +- else +- vboxExtPackSetError(pszError, cbError, "Bad SHA-256 '%s': %Rrc", szCalculatedDigest, rc); +- } +- +- /* +- * Set the output hash on success. +- */ +- if (pStrDigest && RT_SUCCESS(rc)) +- { +- try +- { +- *pStrDigest = szCalculatedDigest; +- } +- catch (std::bad_alloc) +- { +- rc = VERR_NO_MEMORY; +- } +- } +- } +- else +- vboxExtPackSetError(pszError, cbError, "Bad SHA-256 '%s': %Rrc", szCalculatedDigest, rc); +- } +- else +- vboxExtPackSetError(pszError, cbError, "RTManifestEntryGetAttr: %Rrc", rc); +- return rc; +-} +- +- +- +-/** +- * Validates a standard file. +- * +- * Generally all files are +- * +- * @returns VBox status code, failure message in @a pszError. +- * @param pszAdjName The adjusted member name. +- * @param enmType The VFS object type. +- * @param phVfsObj The pointer to the VFS object handle variable. +- * This is both input and output. +- * @param phVfsFile Where to store the handle to the memorized +- * file. This is NULL for license files. +- * @param pszError Where to write an error message on failure. +- * @param cbError The size of the @a pszError buffer. +- */ +-static int VBoxExtPackValidateStandardFile(const char *pszAdjName, RTVFSOBJTYPE enmType, +- PRTVFSOBJ phVfsObj, PRTVFSFILE phVfsFile, char *pszError, size_t cbError) +-{ +- int rc; +- +- /* +- * Make sure it's a file and that it isn't too large. +- */ +- if (phVfsFile && *phVfsFile != NIL_RTVFSFILE) +- rc = vboxExtPackReturnError(VERR_DUPLICATE, pszError, cbError, +- "There can only be one '%s'", pszAdjName); +- else if (enmType != RTVFSOBJTYPE_IO_STREAM && enmType != RTVFSOBJTYPE_FILE) +- rc = vboxExtPackReturnError(VERR_NOT_A_FILE, pszError, cbError, +- "Standard member '%s' is not a file", pszAdjName); +- else +- { +- RTFSOBJINFO ObjInfo; +- rc = RTVfsObjQueryInfo(*phVfsObj, &ObjInfo, RTFSOBJATTRADD_NOTHING); +- if (RT_SUCCESS(rc)) +- { +- if (!RTFS_IS_FILE(ObjInfo.Attr.fMode)) +- rc = vboxExtPackReturnError(VERR_NOT_A_FILE, pszError, cbError, +- "Standard member '%s' is not a file", pszAdjName); +- else if (ObjInfo.cbObject >= _1M) +- rc = vboxExtPackReturnError(VERR_OUT_OF_RANGE, pszError, cbError, +- "Standard member '%s' is too large: %'RU64 bytes (max 1 MB)", +- pszAdjName, (uint64_t)ObjInfo.cbObject); +- else +- { +- /* +- * Make an in memory copy of the stream and check that the file +- * is UTF-8 clean. +- */ +- RTVFSIOSTREAM hVfsIos = RTVfsObjToIoStream(*phVfsObj); +- RTVFSFILE hVfsFile; +- rc = RTVfsMemorizeIoStreamAsFile(hVfsIos, RTFILE_O_READ, &hVfsFile); +- if (RT_SUCCESS(rc)) +- { +- rc = RTVfsIoStrmValidateUtf8Encoding(hVfsIos, +- RTVFS_VALIDATE_UTF8_BY_RTC_3629 | RTVFS_VALIDATE_UTF8_NO_NULL, +- NULL); +- if (RT_SUCCESS(rc)) +- { +- /* +- * Replace *phVfsObj with the memorized file. +- */ +- rc = RTVfsFileSeek(hVfsFile, 0, RTFILE_SEEK_BEGIN, NULL); +- if (RT_SUCCESS(rc)) +- { +- RTVfsObjRelease(*phVfsObj); +- *phVfsObj = RTVfsObjFromFile(hVfsFile); +- } +- else +- vboxExtPackSetError(pszError, cbError, "RTVfsFileSeek failed on '%s': %Rrc", pszAdjName, rc); +- } +- +- if (phVfsFile && RT_SUCCESS(rc)) +- *phVfsFile = hVfsFile; +- else +- RTVfsFileRelease(hVfsFile); +- } +- else +- vboxExtPackSetError(pszError, cbError, "RTVfsMemorizeIoStreamAsFile failed on '%s': %Rrc", pszAdjName, rc); +- RTVfsIoStrmRelease(hVfsIos); +- } +- } +- else +- vboxExtPackSetError(pszError, cbError, "RTVfsObjQueryInfo failed on '%s': %Rrc", pszAdjName, rc); +- } +- return rc; +-} +- +- +-/** +- * Validates a name in an extension pack. +- * +- * We restrict the charset to try make sure the extension pack can be unpacked +- * on all file systems. +- * +- * @returns VBox status code, failures with message. +- * @param pszName The name to validate. +- * @param pszError Where to store an error message on failure. +- * @param cbError The size of the buffer @a pszError points to. +- */ +-static int vboxExtPackValidateMemberName(const char *pszName, char *pszError, size_t cbError) +-{ +- if (RTPathStartsWithRoot(pszName)) +- return vboxExtPackReturnError(VERR_PATH_IS_NOT_RELATIVE, pszError, cbError, "'%s': starts with root spec", pszName); +- +- const char *pszErr = NULL; +- const char *psz = pszName; +- int ch; +- while ((ch = *psz) != '\0') +- { +- /* Character set restrictions. */ +- if (ch < 0 || ch >= 128) +- { +- pszErr = "Only 7-bit ASCII allowed"; +- break; +- } +- if (ch <= 31 || ch == 127) +- { +- pszErr = "No control characters are not allowed"; +- break; +- } +- if (ch == '\\') +- { +- pszErr = "Only backward slashes are not allowed"; +- break; +- } +- if (strchr("'\":;*?|[]<>(){}", ch)) +- { +- pszErr = "The characters ', \", :, ;, *, ?, |, [, ], <, >, (, ), { and } are not allowed"; +- break; +- } +- +- /* Take the simple way out and ban all ".." sequences. */ +- if ( ch == '.' +- && psz[1] == '.') +- { +- pszErr = "Double dot sequence are not allowed"; +- break; +- } +- +- /* Keep the tree shallow or the hardening checks will fail. */ +- if (psz - pszName > VBOX_EXTPACK_MAX_MEMBER_NAME_LENGTH) +- { +- pszErr = "Too long"; +- break; +- } +- +- /* advance */ +- psz++; +- } +- +- if (pszErr) +- return vboxExtPackReturnError(VERR_INVALID_NAME, pszError, cbError, +- "Bad member name '%s' (pos %zu): %s", pszName, (size_t)(psz - pszName), pszErr); +- return RTEXITCODE_SUCCESS; +-} +- +- +-/** +- * Validates a file in an extension pack. +- * +- * @returns VBox status code, failures with message. +- * @param pszName The name of the file. +- * @param hVfsObj The VFS object. +- * @param pszError Where to store an error message on failure. +- * @param cbError The size of the buffer @a pszError points to. +- */ +-static int vboxExtPackValidateMemberFile(const char *pszName, RTVFSOBJ hVfsObj, char *pszError, size_t cbError) +-{ +- int rc = vboxExtPackValidateMemberName(pszName, pszError, cbError); +- if (RT_SUCCESS(rc)) +- { +- RTFSOBJINFO ObjInfo; +- rc = RTVfsObjQueryInfo(hVfsObj, &ObjInfo, RTFSOBJATTRADD_NOTHING); +- if (RT_SUCCESS(rc)) +- { +- if (ObjInfo.cbObject >= 9*_1G64) +- rc = vboxExtPackReturnError(VERR_OUT_OF_RANGE, pszError, cbError, +- "'%s': too large (%'RU64 bytes)", +- pszName, (uint64_t)ObjInfo.cbObject); +- if (!RTFS_IS_FILE(ObjInfo.Attr.fMode)) +- rc = vboxExtPackReturnError(VERR_NOT_A_FILE, pszError, cbError, +- "The alleged file '%s' has a mode mask stating otherwise (%RTfmode)", +- pszName, ObjInfo.Attr.fMode); +- } +- else +- vboxExtPackSetError(pszError, cbError, "RTVfsObjQueryInfo failed on '%s': %Rrc", pszName, rc); +- } +- return rc; +-} +- +- +-/** +- * Validates a directory in an extension pack. +- * +- * @returns VBox status code, failures with message. +- * @param pszName The name of the directory. +- * @param hVfsObj The VFS object. +- * @param pszError Where to store an error message on failure. +- * @param cbError The size of the buffer @a pszError points to. +- */ +-static int vboxExtPackValidateMemberDir(const char *pszName, RTVFSOBJ hVfsObj, char *pszError, size_t cbError) +-{ +- int rc = vboxExtPackValidateMemberName(pszName, pszError, cbError); +- if (RT_SUCCESS(rc)) +- { +- RTFSOBJINFO ObjInfo; +- rc = RTVfsObjQueryInfo(hVfsObj, &ObjInfo, RTFSOBJATTRADD_NOTHING); +- if (RT_SUCCESS(rc)) +- { +- if (!RTFS_IS_DIRECTORY(ObjInfo.Attr.fMode)) +- rc = vboxExtPackReturnError(VERR_NOT_A_DIRECTORY, pszError, cbError, +- "The alleged directory '%s' has a mode mask saying differently (%RTfmode)", +- pszName, ObjInfo.Attr.fMode); +- } +- else +- vboxExtPackSetError(pszError, cbError, "RTVfsObjQueryInfo failed on '%s': %Rrc", pszName, rc); +- } +- return rc; +-} +- +-/** +- * Validates a member of an extension pack. +- * +- * @returns VBox status code, failures with message. +- * @param pszName The name of the directory. +- * @param enmType The object type. +- * @param hVfsObj The VFS object. +- * @param pszError Where to store an error message on failure. +- * @param cbError The size of the buffer @a pszError points to. +- */ +-int VBoxExtPackValidateMember(const char *pszName, RTVFSOBJTYPE enmType, RTVFSOBJ hVfsObj, char *pszError, size_t cbError) +-{ +- Assert(cbError > 0); +- *pszError = '\0'; +- +- int rc; +- if ( enmType == RTVFSOBJTYPE_FILE +- || enmType == RTVFSOBJTYPE_IO_STREAM) +- rc = vboxExtPackValidateMemberFile(pszName, hVfsObj, pszError, cbError); +- else if ( enmType == RTVFSOBJTYPE_DIR +- || enmType == RTVFSOBJTYPE_BASE) +- rc = vboxExtPackValidateMemberDir(pszName, hVfsObj, pszError, cbError); +- else +- rc = vboxExtPackReturnError(VERR_UNEXPECTED_FS_OBJ_TYPE, pszError, cbError, +- "'%s' is not a file or directory (enmType=%d)", pszName, enmType); +- return rc; +-} +- +- +-/** +- * Rewinds the tarball file handle and creates a gunzip | tar chain that +- * results in a filesystem stream. +- * +- * @returns VBox status code, failures with message. +- * @param hTarballFile The handle to the tarball file. +- * @param pszError Where to store an error message on failure. +- * @param cbError The size of the buffer @a pszError points to. +- * @param phTarFss Where to return the filesystem stream handle. +- * @param phFileManifest Where to return a manifest where the tarball is +- * gettting hashed. The entry will be called +- * "extpack" and be ready when the file system +- * stream is at an end. Optional. +- */ +-int VBoxExtPackOpenTarFss(RTFILE hTarballFile, char *pszError, size_t cbError, PRTVFSFSSTREAM phTarFss, PRTMANIFEST phFileManifest) +-{ +- Assert(cbError > 0); +- *pszError = '\0'; +- *phTarFss = NIL_RTVFSFSSTREAM; +- +- /* +- * Rewind the file and set up a VFS chain for it. +- */ +- int rc = RTFileSeek(hTarballFile, 0, RTFILE_SEEK_BEGIN, NULL); +- if (RT_FAILURE(rc)) +- return vboxExtPackReturnError(rc, pszError, cbError, "Failed seeking to the start of the tarball: %Rrc", rc); +- +- RTVFSIOSTREAM hTarballIos; +- rc = RTVfsIoStrmFromRTFile(hTarballFile, RTFILE_O_READ | RTFILE_O_DENY_WRITE | RTFILE_O_OPEN, true /*fLeaveOpen*/, +- &hTarballIos); +- if (RT_FAILURE(rc)) +- return vboxExtPackReturnError(rc, pszError, cbError, "RTVfsIoStrmFromRTFile failed: %Rrc", rc); +- +- RTMANIFEST hFileManifest = NIL_RTMANIFEST; +- rc = RTManifestCreate(0 /*fFlags*/, &hFileManifest); +- if (RT_SUCCESS(rc)) +- { +- RTVFSIOSTREAM hPtIos; +- rc = RTManifestEntryAddPassthruIoStream(hFileManifest, hTarballIos, "extpack", RTMANIFEST_ATTR_SHA256, true /*read*/, &hPtIos); +- if (RT_SUCCESS(rc)) +- { +- RTVFSIOSTREAM hGunzipIos; +- rc = RTZipGzipDecompressIoStream(hPtIos, 0 /*fFlags*/, &hGunzipIos); +- if (RT_SUCCESS(rc)) +- { +- RTVFSFSSTREAM hTarFss; +- rc = RTZipTarFsStreamFromIoStream(hGunzipIos, 0 /*fFlags*/, &hTarFss); +- if (RT_SUCCESS(rc)) +- { +- RTVfsIoStrmRelease(hPtIos); +- RTVfsIoStrmRelease(hGunzipIos); +- RTVfsIoStrmRelease(hTarballIos); +- *phTarFss = hTarFss; +- if (phFileManifest) +- *phFileManifest = hFileManifest; +- else +- RTManifestRelease(hFileManifest); +- return VINF_SUCCESS; +- } +- +- vboxExtPackSetError(pszError, cbError, "RTZipTarFsStreamFromIoStream failed: %Rrc", rc); +- RTVfsIoStrmRelease(hGunzipIos); +- } +- else +- vboxExtPackSetError(pszError, cbError, "RTZipGzipDecompressIoStream failed: %Rrc", rc); +- RTVfsIoStrmRelease(hPtIos); +- } +- else +- vboxExtPackSetError(pszError, cbError, "RTManifestEntryAddPassthruIoStream failed: %Rrc", rc); +- RTManifestRelease(hFileManifest); +- } +- else +- vboxExtPackSetError(pszError, cbError, "RTManifestCreate failed: %Rrc", rc); +- +- RTVfsIoStrmRelease(hTarballIos); +- return rc; +-} +- +- +-/** +- * Validates the extension pack tarball prior to unpacking. +- * +- * Operations performed: +- * - Mandatory files. +- * - Manifest check. +- * - Manifest seal check. +- * - XML check, match name. +- * +- * @returns VBox status code, failures with message. +- * @param hTarballFile The handle to open the @a pszTarball file. +- * @param pszExtPackName The name of the extension pack name. NULL if +- * the name is not fixed. +- * @param pszTarball The name of the tarball in case we have to +- * complain about something. +- * @param pszTarballDigest The SHA-256 digest of the tarball. Empty string +- * if no digest available. +- * @param pszError Where to store an error message on failure. +- * @param cbError The size of the buffer @a pszError points to. +- * @param phValidManifest Where to optionally return the handle to fully +- * validated the manifest for the extension pack. +- * This includes all files. +- * @param phXmlFile Where to optionally return the memorized XML +- * file. +- * @param pStrDigest Where to return the digest of the file. +- * Optional. +- */ +-int VBoxExtPackValidateTarball(RTFILE hTarballFile, const char *pszExtPackName, +- const char *pszTarball, const char *pszTarballDigest, +- char *pszError, size_t cbError, +- PRTMANIFEST phValidManifest, PRTVFSFILE phXmlFile, RTCString *pStrDigest) +-{ +- /* +- * Clear return values. +- */ +- if (phValidManifest) +- *phValidManifest = NIL_RTMANIFEST; +- if (phXmlFile) +- *phXmlFile = NIL_RTVFSFILE; +- Assert(cbError > 1); +- *pszError = '\0'; +- NOREF(pszTarball); +- +- /* +- * Open the tar.gz filesystem stream and set up an manifest in-memory file. +- */ +- RTMANIFEST hFileManifest; +- RTVFSFSSTREAM hTarFss; +- int rc = VBoxExtPackOpenTarFss(hTarballFile, pszError, cbError, &hTarFss, &hFileManifest); +- if (RT_FAILURE(rc)) +- return rc; +- +- RTMANIFEST hOurManifest; +- rc = RTManifestCreate(0 /*fFlags*/, &hOurManifest); +- if (RT_SUCCESS(rc)) +- { +- /* +- * Process the tarball (would be nice to move this to a function). +- */ +- RTVFSFILE hXmlFile = NIL_RTVFSFILE; +- RTVFSFILE hManifestFile = NIL_RTVFSFILE; +- RTVFSFILE hSignatureFile = NIL_RTVFSFILE; +- for (;;) +- { +- /* +- * Get the next stream object. +- */ +- char *pszName; +- RTVFSOBJ hVfsObj; +- RTVFSOBJTYPE enmType; +- rc = RTVfsFsStrmNext(hTarFss, &pszName, &enmType, &hVfsObj); +- if (RT_FAILURE(rc)) +- { +- if (rc != VERR_EOF) +- vboxExtPackSetError(pszError, cbError, "RTVfsFsStrmNext failed: %Rrc", rc); +- else +- rc = VINF_SUCCESS; +- break; +- } +- const char *pszAdjName = pszName[0] == '.' && pszName[1] == '/' ? &pszName[2] : pszName; +- +- /* +- * Check the type & name validity, performing special tests on +- * standard extension pack member files. +- * +- * N.B. We will always reach the end of the loop before breaking on +- * failure - cleanup reasons. +- */ +- rc = VBoxExtPackValidateMember(pszName, enmType, hVfsObj, pszError, cbError); +- if (RT_SUCCESS(rc)) +- { +- PRTVFSFILE phVfsFile = NULL; +- if (!strcmp(pszAdjName, VBOX_EXTPACK_DESCRIPTION_NAME)) +- phVfsFile = &hXmlFile; +- else if (!strcmp(pszAdjName, VBOX_EXTPACK_MANIFEST_NAME)) +- phVfsFile = &hManifestFile; +- else if (!strcmp(pszAdjName, VBOX_EXTPACK_SIGNATURE_NAME)) +- phVfsFile = &hSignatureFile; +- else if (!strncmp(pszAdjName, VBOX_EXTPACK_LICENSE_NAME_PREFIX, sizeof(VBOX_EXTPACK_LICENSE_NAME_PREFIX) - 1)) +- rc = VBoxExtPackValidateStandardFile(pszAdjName, enmType, &hVfsObj, NULL, pszError, cbError); +- if (phVfsFile) +- rc = VBoxExtPackValidateStandardFile(pszAdjName, enmType, &hVfsObj, phVfsFile, pszError, cbError); +- } +- +- /* +- * Add any I/O stream to the manifest +- */ +- if ( RT_SUCCESS(rc) +- && ( enmType == RTVFSOBJTYPE_FILE +- || enmType == RTVFSOBJTYPE_IO_STREAM)) +- { +- RTVFSIOSTREAM hVfsIos = RTVfsObjToIoStream(hVfsObj); +- rc = RTManifestEntryAddIoStream(hOurManifest, hVfsIos, pszAdjName, RTMANIFEST_ATTR_SIZE | RTMANIFEST_ATTR_SHA256); +- if (RT_FAILURE(rc)) +- vboxExtPackSetError(pszError, cbError, "RTManifestEntryAddIoStream failed on '%s': %Rrc", pszAdjName, rc); +- RTVfsIoStrmRelease(hVfsIos); +- } +- +- /* +- * Clean up and break out on failure. +- */ +- RTVfsObjRelease(hVfsObj); +- RTStrFree(pszName); +- if (RT_FAILURE(rc)) +- break; +- } +- +- /* +- * Check the integrity of the tarball file. +- */ +- if (RT_SUCCESS(rc)) +- { +- RTVfsFsStrmRelease(hTarFss); +- hTarFss = NIL_RTVFSFSSTREAM; +- rc = vboxExtPackVerifyFileDigest(hFileManifest, pszTarballDigest, pStrDigest, pszError, cbError); +- } +- +- /* +- * If we've successfully processed the tarball, verify that the +- * mandatory files are present. +- */ +- if (RT_SUCCESS(rc)) +- { +- if (hXmlFile == NIL_RTVFSFILE) +- rc = vboxExtPackReturnError(VERR_MISSING, pszError, cbError, "Mandator file '%s' is missing", VBOX_EXTPACK_DESCRIPTION_NAME); +- if (hManifestFile == NIL_RTVFSFILE) +- rc = vboxExtPackReturnError(VERR_MISSING, pszError, cbError, "Mandator file '%s' is missing", VBOX_EXTPACK_MANIFEST_NAME); +- if (hSignatureFile == NIL_RTVFSFILE) +- rc = vboxExtPackReturnError(VERR_MISSING, pszError, cbError, "Mandator file '%s' is missing", VBOX_EXTPACK_SIGNATURE_NAME); +- } +- +- /* +- * Check the manifest and it's signature. +- */ +- if (RT_SUCCESS(rc)) +- rc = vboxExtPackVerifyManifestAndSignature(hOurManifest, hManifestFile, hSignatureFile, pszError, cbError); +- +- /* +- * Check the XML. +- */ +- if (RT_SUCCESS(rc)) +- rc = vboxExtPackVerifyXml(hXmlFile, pszExtPackName, pszError, cbError); +- +- /* +- * Returns objects. +- */ +- if (RT_SUCCESS(rc)) +- { +- if (phValidManifest) +- { +- RTManifestRetain(hOurManifest); +- *phValidManifest = hOurManifest; +- } +- if (phXmlFile) +- { +- RTVfsFileRetain(hXmlFile); +- *phXmlFile = hXmlFile; +- } +- } +- +- /* +- * Release our object references. +- */ +- RTManifestRelease(hOurManifest); +- RTVfsFileRelease(hXmlFile); +- RTVfsFileRelease(hManifestFile); +- RTVfsFileRelease(hSignatureFile); +- } +- else +- vboxExtPackSetError(pszError, cbError, "RTManifestCreate failed: %Rrc", rc); +- RTVfsFsStrmRelease(hTarFss); +- RTManifestRelease(hFileManifest); +- +- return rc; +-} +- +--- VirtualBox-4.1.18.orig/include/Makefile.kmk 2012-06-20 10:07:49.000000000 -0300 ++++ VirtualBox-4.1.18/include/Makefile.kmk 2012-07-24 21:11:57.007068865 -0300 +@@ -51,7 +51,6 @@ + VBox/vd-cache-plugin.h \ + VBox/vmm/uvm.h \ + VBox/vscsi.h \ +- $(wildcard VBox/ExtPack/*.h ) \ + iprt/alloca.h \ + iprt/tcp.h \ + iprt/localipc.h \ +--- VirtualBox-4.1.18.orig/src/Makefile.kmk 2012-06-20 10:07:57.000000000 -0300 ++++ VirtualBox-4.1.18/src/Makefile.kmk 2012-07-24 22:51:10.206996034 -0300 +@@ -26,14 +26,6 @@ + include $(PATH_SUB_CURRENT)/VBox/Makefile.kmk + include $(PATH_SUB_CURRENT)/libs/Makefile.kmk + +-else if defined(VBOX_ONLY_EXTPACKS) +- include $(PATH_SUB_CURRENT)/bldprogs/Makefile.kmk +- include $(PATH_SUB_CURRENT)/VBox/Makefile.kmk +- include $(PATH_SUB_CURRENT)/libs/Makefile.kmk +- ifndef VBOX_ONLY_EXTPACKS_USE_IMPLIBS +- include $(PATH_SUB_CURRENT)/recompiler/Makefile.kmk +- endif +- + else if defined(VBOX_ONLY_TESTSUITE) + include $(PATH_SUB_CURRENT)/libs/Makefile.kmk + include $(PATH_SUB_CURRENT)/VBox/Makefile.kmk +--- VirtualBox-4.1.18.orig/src/VBox/Makefile.kmk 2012-07-24 21:19:55.565641784 -0300 ++++ VirtualBox-4.1.18/src/VBox/Makefile.kmk 2012-07-24 22:12:55.429156962 -0300 +@@ -33,19 +33,6 @@ + include $(PATH_SUB_CURRENT)/HostDrivers/Makefile.kmk + include $(PATH_SUB_CURRENT)/Frontends/Makefile.kmk + +-else ifdef VBOX_ONLY_EXTPACKS +- include $(PATH_SUB_CURRENT)/Runtime/Makefile.kmk +- include $(PATH_SUB_CURRENT)/Devices/Makefile.kmk +- include $(PATH_SUB_CURRENT)/HostDrivers/Makefile.kmk +- include $(PATH_SUB_CURRENT)/ExtPacks/Makefile.kmk +- ifdef VBOX_WITH_VRDP +- include $(PATH_SUB_CURRENT)/RDP/Makefile.kmk +- endif +- include $(PATH_SUB_CURRENT)/VMM/Makefile.kmk +- ifndef VBOX_ONLY_EXTPACKS_USE_IMPLIBS +- include $(PATH_SUB_CURRENT)/Disassembler/Makefile.kmk +- endif +- + else ifdef VBOX_ONLY_SDK + include $(PATH_SUB_CURRENT)/Main/Makefile.kmk + ifdef VBOX_WITH_VRDP +@@ -92,9 +79,6 @@ + if1of ($(KBUILD_TARGET_ARCH), amd64 x86) + include $(PATH_SUB_CURRENT)/NetworkServices/Makefile.kmk + endif +- ifndef VBOX_OSE +- include $(PATH_SUB_CURRENT)/ExtPacks/Makefile.kmk +- endif + ifdef VBOX_WITH_INSTALLER + include $(PATH_SUB_CURRENT)/Installer/Makefile.kmk # Keep this last. + endif +--- VirtualBox-4.1.18/src/libs/Makefile.kmk.orig 2012-07-24 21:23:26.938013023 -0300 ++++ VirtualBox-4.1.18/src/libs/Makefile.kmk 2012-07-24 21:43:42.557911752 -0300 +@@ -48,13 +48,6 @@ + include $(PATH_SUB_CURRENT)/kStuff/Makefile.kmk + endif + +-# OpenSSL. +-if !defined(VBOX_ONLY_SDK) \ +- && ( "$(SDK_VBOX_OPENSSL_INCS)" == "$(SDK_VBOX_OPENSSL_VBOX_DEFAULT_INCS)" \ +- || defined(VBOX_WITH_EXTPACK_PUEL_BUILD)) +- include $(PATH_SUB_CURRENT)/openssl-0.9.8t/Makefile.kmk +-endif +- + # libjpeg for VRDP video redirection + if defined(VBOX_WITH_VRDP) && defined(VBOX_WITH_VRDP_VIDEO_CHANNEL) + include $(PATH_SUB_CURRENT)/jpeg-8a/Makefile.kmk +--- VirtualBox-4.1.18.orig/src/VBox/Devices/Makefile.kmk 2012-07-24 23:06:45.916276235 -0300 ++++ VirtualBox-4.1.18/src/VBox/Devices/Makefile.kmk 2012-07-24 23:17:00.202963228 -0300 +@@ -21,9 +21,7 @@ + + # Include sub-makefiles. + include $(PATH_SUB_CURRENT)/testcase/Makefile.kmk +-if defined(VBOX_WITH_INTEL_PXE) || defined(VBOX_ONLY_EXTPACKS) +- include $(PATH_SUB_CURRENT)/PC/PXE/Makefile.kmk +-else if defined(VBOX_WITH_PXE_ROM) && !defined(VBOX_WITHOUT_ETHERBOOT) ++if defined(VBOX_WITH_PXE_ROM) && !defined(VBOX_WITHOUT_ETHERBOOT) + include $(PATH_SUB_CURRENT)/PC/Etherboot-src/Makefile.kmk + endif + if !defined(VBOX_ONLY_EXTPACKS) # Goes on almost to the end of the file. +@@ -57,9 +55,6 @@ + ifdef VBOX_WITH_USB + VBoxDDU_DEFS += VBOX_WITH_USB IN_USBLIB + VBoxDDU_SDKS.win = WINPSDK W2K3DDK +- if defined(VBOX_WITH_EHCI_IMPL) && !defined(VBOX_WITH_EXTPACK_PUEL) +- VBoxDDU_DEFS += VBOX_WITH_EHCI_IMPL +- endif + ifdef VBOX_WITH_NEW_USB_CODE_ON_DARWIN + VBoxDDU_DEFS.darwin += VBOX_WITH_NEW_USB_CODE_ON_DARWIN + endif +@@ -122,9 +117,6 @@ + VBoxDD_DEFS = VBOX_ACPI + ifdef VBOX_WITH_USB + VBoxDD_DEFS += VBOX_WITH_USB +- if defined(VBOX_WITH_EHCI_IMPL) && !defined(VBOX_WITH_EXTPACK_PUEL) +- VBoxDD_DEFS += VBOX_WITH_EHCI_IMPL +- endif + endif + ifdef VBOX_WITH_VUSB + VBoxDD_DEFS += VBOX_WITH_VUSB +@@ -446,11 +438,6 @@ + endif + ifdef VBOX_WITH_USB + DevicesR3_DEFS += VBOX_WITH_USB +- if defined(VBOX_WITH_EHCI_IMPL) && !defined(VBOX_WITH_EXTPACK_PUEL) +- DevicesR3_DEFS += VBOX_WITH_EHCI_IMPL +- DevicesR3_SOURCES += \ +- USB/DevEHCI.cpp +- endif + endif + if defined(VBOX_WITH_PCI_PASSTHROUGH_IMPL) && !defined(VBOX_WITH_EXTPACK_PUEL) + DevicesR3_DEFS += VBOX_WITH_PCI_PASSTHROUGH_IMPL +@@ -607,11 +594,6 @@ + + ifdef VBOX_WITH_USB + VBoxDDGC_DEFS += VBOX_WITH_USB +- if defined(VBOX_WITH_EHCI_IMPL) && !defined(VBOX_WITH_EXTPACK_PUEL) +- VBoxDDGC_DEFS += VBOX_WITH_EHCI_IMPL +- VBoxDDGC_SOURCES += \ +- USB/DevEHCI.cpp +- endif + endif + + ifdef VBOX_WITH_VIDEOHWACCEL +@@ -711,11 +693,6 @@ + endif + ifdef VBOX_WITH_USB + VBoxDDR0_DEFS += VBOX_WITH_USB +- if defined(VBOX_WITH_EHCI_IMPL) && !defined(VBOX_WITH_EXTPACK_PUEL) +- VBoxDDR0_DEFS += VBOX_WITH_EHCI_IMPL +- VBoxDDR0_SOURCES += \ +- USB/DevEHCI.cpp +- endif + endif + + if defined(VBOX_WITH_PCI_PASSTHROUGH_IMPL) && !defined(VBOX_WITH_EXTPACK_PUEL) +@@ -1204,49 +1181,5 @@ + + endif # !VBOX_ONLY_EXTPACKS + +-if defined(VBOX_WITH_EXTPACK_PUEL) && defined(VBOX_WITH_EXTPACK_PUEL_BUILD) +- # +- # The EHCI (USB 2.0) Extension Pack Modules. +- # +- if defined(VBOX_WITH_USB) +- DLLS += VBoxEhciR3 +- VBoxEhciR3_TEMPLATE = VBoxR3ExtPackPuel +- VBoxEhciR3_SOURCES = USB/DevEHCI.cpp +- +- SYSMODS += VBoxEhciR0 +- VBoxEhciR0_TEMPLATE = VBoxR0ExtPackPuel +- VBoxEhciR0_SOURCES = USB/DevEHCI.cpp +- +- ifdef VBOX_WITH_RAW_MODE +- SYSMODS += VBoxEhciRC +- VBoxEhciRC_TEMPLATE = VBoxRcExtPackPuel +- VBoxEhciRC_SOURCES = USB/DevEHCI.cpp +- endif +- endif +- +- if defined(VBOX_WITH_PCI_PASSTHROUGH) +- DLLS += VBoxPciRawR3 +- VBoxPciRawR3_TEMPLATE = VBoxR3ExtPackPuel +- VBoxPciRawR3_SOURCES = Bus/DevPciRaw.cpp +- +- DLLS += VBoxPciRawDrv +- VBoxPciRawDrv_TEMPLATE = VBoxR3ExtPackPuel +- VBoxPciRawDrv_SOURCES = Bus/DrvPciRaw.cpp +- +- SYSMODS += VBoxPciRawR0 +- VBoxPciRawR0_TEMPLATE = VBoxR0ExtPackPuel +- VBoxPciRawR0_SOURCES = Bus/DevPciRaw.cpp +- +- Bus/DevPciRaw.cpp_INCS = Bus +- endif +- +- # +- # The Intel PXE rom. +- # +- INSTALLS += VBoxExtPackPuelInsRoms +- VBoxExtPackPuelInsRoms_TEMPLATE = VBoxInsExtPackPuel +- VBoxExtPackPuelInsRoms_SOURCES = PC/PXE/PXE-Intel.rom=>PXE-Intel.rom +-endif # VBOX_WITH_EXTPACK_PUEL +- + include $(KBUILD_PATH)/subfooter.kmk + +--- VirtualBox-4.1.18.orig/src/VBox/Main/Makefile.kmk 2012-07-24 23:38:25.304126039 -0300 ++++ VirtualBox-4.1.18/src/VBox/Main/Makefile.kmk 2012-07-24 23:38:25.350789964 -0300 +@@ -230,14 +230,12 @@ + $(if $(VBOX_USB_WITH_SYSFS),VBOX_USB_WITH_SYSFS,) \ + $(if $(VBOX_USB_WITH_INOTIFY),VBOX_USB_WITH_INOTIFY,) \ + $(if $(VBOX_WITH_LIVE_MIGRATION),VBOX_WITH_LIVE_MIGRATION,) \ +- $(if $(VBOX_WITH_EXTPACK),VBOX_WITH_EXTPACK,) \ + $(if $(VBOX_WITH_VUSB),VBOX_WITH_VUSB,) \ + $(if $(VBOX_WITH_S3),VBOX_WITH_S3,) \ + $(if $(VBOX_WITH_PCI_PASSTHROUGH),VBOX_WITH_PCI_PASSTHROUGH,) + ifdef VBOX_WITH_USB + VBoxSVC_DEFS += \ + VBOX_WITH_USB \ +- $(if $(VBOX_WITH_EHCI),VBOX_WITH_EHCI,) \ + $(if $(VBOX_WITH_NEW_USB_CODE_ON_DARWIN),VBOX_WITH_NEW_USB_CODE_ON_DARWIN,) + endif + VBoxSVC_DEFS.win += VBOX_COM_OUTOFPROC_MODULE +@@ -290,7 +288,6 @@ + src-all/SharedFolderImpl.cpp \ + src-all/VirtualBoxBase.cpp \ + src-all/VirtualBoxErrorInfoImpl.cpp \ +- $(if $(VBOX_WITH_EXTPACK),src-all/ExtPackManagerImpl.cpp src-all/ExtPackUtil.cpp,) \ + src-server/ApplianceImpl.cpp \ + src-server/ApplianceImplExport.cpp \ + src-server/ApplianceImplImport.cpp \ +@@ -543,8 +540,6 @@ + $(if $(VBOX_WITH_HGSMI),VBOX_WITH_HGSMI,) \ + $(if $(VBOX_WITH_VIDEOHWACCEL),VBOX_WITH_VIDEOHWACCEL,) \ + $(if $(VBOX_WITH_USB),VBOX_WITH_USB,) \ +- $(if-expr defined(VBOX_WITH_EHCI) && defined(VBOX_WITH_USB),VBOX_WITH_EHCI,) \ +- $(if $(VBOX_WITH_EXTPACK),VBOX_WITH_EXTPACK,) \ + $(if $(VBOX_WITH_PCI_PASSTHROUGH),VBOX_WITH_PCI_PASSTHROUGH,) + + VBoxC_DEFS.darwin.x86 = VBOX_WITH_2X_4GB_ADDR_SPACE +@@ -602,7 +597,6 @@ + src-all/SharedFolderImpl.cpp \ + src-all/VirtualBoxBase.cpp \ + src-all/VirtualBoxErrorInfoImpl.cpp \ +- $(if $(VBOX_WITH_EXTPACK),src-all/ExtPackManagerImpl.cpp src-all/ExtPackUtil.cpp,) \ + $(if $(VBOX_WITH_USB_VIDEO),src-client/UsbWebcamInterface.cpp,) \ + $(if $(VBOX_WITH_USB_CARDREADER),src-client/UsbCardReader.cpp,) \ + src-client/AdditionsFacilityImpl.cpp \ +@@ -711,22 +705,6 @@ + endif # !win + + +-# +-# The VBoxExtPackHelperApp. +-# +-ifdef VBOX_WITH_EXTPACK +- PROGRAMS += VBoxExtPackHelperApp +- VBoxExtPackHelperApp_TEMPLATE = VBoxR3SetUidToRoot +- VBoxExtPackHelperApp_LDFLAGS.darwin = -framework Security +- VBoxExtPackHelperApp_LDFLAGS.win = /SUBSYSTEM:windows +- VBoxExtPackHelperApp_SOURCES = \ +- src-helper-apps/VBoxExtPackHelperApp.cpp \ +- src-all/ExtPackUtil.cpp +- VBoxExtPackHelperApp_LIBS = \ +- $(LIB_RUNTIME) +-endif # VBOX_WITH_EXTPACK +- +- + endif # !VBOX_ONLY_SDK (the ifndef is far above) + + +--- VirtualBox-4.1.18.orig/src/VBox/Frontends/VirtualBox/Makefile.kmk 2012-07-24 23:25:04.575825175 -0300 ++++ VirtualBox-4.1.18/src/VBox/Frontends/VirtualBox/Makefile.kmk 2012-07-24 23:25:04.619156084 -0300 +@@ -888,7 +888,6 @@ + $(VBOX_MACOSX_ICON_FILE)=>Resources/virtualbox.icns \ + $(VBOX_BRAND_GUI_VBOX_64PX_PNG)=>Resources/virtualbox.png \ + $(PATH_ROOT)/src/VBox/Resources/darwin/virtualbox-vbox.icns=>Resources/virtualbox-vbox.icns \ +- $(PATH_ROOT)/src/VBox/Resources/darwin/virtualbox-vbox-extpack.icns=>Resources/virtualbox-vbox-extpack.icns \ + $(PATH_ROOT)/src/VBox/Resources/darwin/virtualbox-ovf.icns=>Resources/virtualbox-ovf.icns \ + $(PATH_ROOT)/src/VBox/Resources/darwin/virtualbox-ova.icns=>Resources/virtualbox-ova.icns \ + $(PATH_ROOT)/src/VBox/Resources/darwin/virtualbox-vdi.icns=>Resources/virtualbox-vdi.icns \ +--- VirtualBox-4.1.18.orig/src/VBox/Frontends/VirtualBox/VirtualBox2.qrc 2012-07-24 23:28:17.985011038 -0300 ++++ VirtualBox-4.1.18/src/VBox/Frontends/VirtualBox/VirtualBox2.qrc 2012-07-24 23:28:18.051673913 -0300 +@@ -167,18 +167,6 @@ + <file alias="status_check_32px.png">images/status_check_32px.png</file> + <file alias="status_error_16px.png">images/status_error_16px.png</file> + <file alias="status_error_32px.png">images/status_error_32px.png</file> +- <file alias="extension_pack_16px.png">images/extension_pack_16px.png</file> +- <file alias="extension_pack_disabled_16px.png">images/extension_pack_disabled_16px.png</file> +- <file alias="extension_pack_32px.png">images/extension_pack_32px.png</file> +- <file alias="extension_pack_disabled_32px.png">images/extension_pack_disabled_32px.png</file> +- <file alias="extension_pack_install_16px.png">images/extension_pack_install_16px.png</file> +- <file alias="extension_pack_install_disabled_16px.png">images/extension_pack_install_disabled_16px.png</file> +- <file alias="extension_pack_install_32px.png">images/extension_pack_install_32px.png</file> +- <file alias="extension_pack_install_disabled_32px.png">images/extension_pack_install_disabled_32px.png</file> +- <file alias="extension_pack_uninstall_16px.png">images/extension_pack_uninstall_16px.png</file> +- <file alias="extension_pack_uninstall_disabled_16px.png">images/extension_pack_uninstall_disabled_16px.png</file> +- <file alias="extension_pack_uninstall_32px.png">images/extension_pack_uninstall_32px.png</file> +- <file alias="extension_pack_uninstall_disabled_32px.png">images/extension_pack_uninstall_disabled_32px.png</file> + <file alias="proxy_16px.png">images/proxy_16px.png</file> + <file alias="proxy_disabled_16px.png">images/proxy_disabled_16px.png</file> + <file alias="proxy_32px.png">images/proxy_32px.png</file> +--- VirtualBox-4.1.18.orig/src/VBox/Installer/linux/Makefile.kmk 2012-07-25 00:32:00.780012664 -0300 ++++ VirtualBox-4.1.18/src/VBox/Installer/linux/Makefile.kmk 2012-07-25 00:32:00.806677728 -0300 +@@ -170,11 +170,6 @@ + VBox.sh \ + VBox.png + +-ifdef VBOX_WITH_EXTPACK +- VBOX_LNX_STRIP_BIN += \ +- VBoxExtPackHelperApp +-endif +- + # Qt4 GUI + ifdef VBOX_WITH_QTGUI + include $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/nls/ApprovedLanguages.kmk +@@ -286,7 +281,7 @@ + + VBOX_MIME_ICONS = \ + $(addprefix $(PATH_ROOT)/src/VBox/Resources/other/,\ +- $(foreach f,ova ovf vbox vbox-extpack vdi vmdk vhd hdd, \ ++ $(foreach f,ova ovf vbox vdi vmdk vhd hdd, \ + $(foreach s,16 20 24 32 48 64 72 96 128 256,\ + virtualbox-$(f)-$(s)px.png=>$(s)x$(s)/virtualbox-$(f).png))) + +--- VirtualBox-4.1.18.orig/src/VBox/Installer/win/Makefile.kmk 2012-07-25 00:34:52.253398525 -0300 ++++ VirtualBox-4.1.18/src/VBox/Installer/win/Makefile.kmk 2012-07-25 00:34:52.300062531 -0300 +@@ -435,7 +435,6 @@ + -E 'VBOX_WITH_DEBUGGER_GUI=$(if-expr defined(VBOX_WITH_DEBUGGER_GUI) && defined(VBOX_WITH_QTGUI),yes,no)' \ + -E 'VBOX_WITH_DOCS_PACKING=$(if $(VBOX_WITH_DOCS_PACKING),yes,no)' \ + -E 'VBOX_WITH_EFIFW_PACKING=$(if $(VBOX_WITH_EFIFW_PACKING),yes,no)' \ +- -E 'VBOX_WITH_EXTPACK=$(if $(VBOX_WITH_EXTPACK),yes,no)' \ + -E 'VBOX_WITH_GUEST_CONTROL=$(if $(VBOX_WITH_GUEST_CONTROL),yes,no)' \ + -E 'VBOX_WITH_GUEST_PROPS=$(if $(VBOX_WITH_GUEST_PROPS),yes,no)' \ + -E 'VBOX_WITH_NETFLT=$(if $(VBOX_WITH_NETFLT),yes,no)' \ +--- VirtualBox-4.1.18.orig/src/VBox/Installer/darwin/Makefile.kmk 2012-07-25 00:36:55.929571374 -0300 ++++ VirtualBox-4.1.18/src/VBox/Installer/darwin/Makefile.kmk 2012-07-25 00:36:55.959569630 -0300 +@@ -629,7 +629,6 @@ + MacOS/VirtualBoxVM \ + MacOS/VBoxNetAdpCtl \ + MacOS/VBoxNetDHCP \ +- MacOS/VBoxExtPackHelperApp \ + MacOS/VBoxBalloonCtrl + ifdef VBOX_WITH_WEBSERVICES + VBOX_DI_VBAPP_PROGS += \ +@@ -659,7 +658,6 @@ + Resources/virtualbox.icns \ + Resources/virtualbox.png \ + Resources/virtualbox-vbox.icns \ +- Resources/virtualbox-vbox-extpack.icns \ + Resources/virtualbox-ovf.icns \ + Resources/virtualbox-ova.icns \ + Resources/virtualbox-vdi.icns \ +--- VirtualBox-4.1.18/src/VBox/Installer/solaris/Makefile.kmk.orig 2012-07-25 00:38:48.476398293 -0300 ++++ VirtualBox-4.1.18/src/VBox/Installer/solaris/Makefile.kmk 2012-07-25 00:38:48.516396159 -0300 +@@ -185,12 +185,12 @@ + + VBOX_MIME_ICONS = \ + $(addprefix $(PATH_ROOT)/src/VBox/Resources/other/,\ +- $(foreach f,ova ovf vbox vbox-extpack vdi vmdk vhd hdd, \ ++ $(foreach f,ova ovf vbox vdi vmdk vhd hdd, \ + $(foreach s,16 20 24 32 48 64 72 96 128 256,\ + virtualbox-$(f)-$(s)px.png=>$(s)x$(s)/mimetypes/virtualbox-$(f).png))) + + SOLARIS_COMMON_ICONS = \ +- $(foreach f,ova ovf vbox vbox-extpack vdi vmdk vhd hdd, \ ++ $(foreach f,ova ovf vbox vdi vmdk vhd hdd, \ + $(foreach s,16 20 24 32 48 64 72 96 128 256,\ + $(s)x$(s)/mimetypes/virtualbox-$(f).png)) + +@@ -210,7 +210,6 @@ + $(if $(VBOX_WITH_VBOXSDL),VBoxSDL,) \ + $(if $(VBOX_WITH_NETADP),VBoxNetAdpCtl,) \ + VBoxNetDHCP \ +- $(if $(VBOX_WITH_EXTPACK),VBoxExtPackHelperApp,) \ + VBoxSVC \ + $(if $(VBOX_WITH_CROGL),VBoxTestOGL,) \ + VBoxXPCOMIPCD \ +--- VirtualBox-4.1.18.orig/src/VBox/Runtime/Makefile.kmk 2012-07-25 00:40:58.745522450 -0300 ++++ VirtualBox-4.1.18/src/VBox/Runtime/Makefile.kmk 2012-07-25 00:40:58.782186960 -0300 +@@ -53,15 +53,6 @@ + # + LIBRARIES += RuntimeR3 RuntimeBldProg + +-else ifdef VBOX_ONLY_EXTPACKS_USE_IMPLIBS +- # +- # Build docs only - need just regular R3 runtime. +- # +- LIBRARIES += RuntimeBldProg +- LIBRARIES.solaris += RuntimeR0Stub +- LIBRARIES.win += RuntimeR0Stub RuntimeRCStub +- include $(PATH_SUB_CURRENT)/tools/Makefile.kmk +- + else # !VBOX_ONLY_ADDITIONS && !VBOX_ONLY_TESTSUITE && !VBOX_ONLY_DOCS + + # diff --git a/libre/virtualbox-modules/linux34.patch b/libre/virtualbox-libre-modules/linux34.patch index 05ec78557..05ec78557 100644 --- a/libre/virtualbox-modules/linux34.patch +++ b/libre/virtualbox-libre-modules/linux34.patch diff --git a/libre/virtualbox-libre-modules/os_blag.png b/libre/virtualbox-libre-modules/os_blag.png Binary files differnew file mode 100644 index 000000000..61995ca10 --- /dev/null +++ b/libre/virtualbox-libre-modules/os_blag.png diff --git a/libre/virtualbox-libre-modules/os_blag_64.png b/libre/virtualbox-libre-modules/os_blag_64.png Binary files differnew file mode 100644 index 000000000..aa4463a97 --- /dev/null +++ b/libre/virtualbox-libre-modules/os_blag_64.png diff --git a/libre/virtualbox-libre-modules/os_dragora.png b/libre/virtualbox-libre-modules/os_dragora.png Binary files differnew file mode 100644 index 000000000..d1df45880 --- /dev/null +++ b/libre/virtualbox-libre-modules/os_dragora.png diff --git a/libre/virtualbox-libre-modules/os_dragora_64.png b/libre/virtualbox-libre-modules/os_dragora_64.png Binary files differnew file mode 100644 index 000000000..64bcecf20 --- /dev/null +++ b/libre/virtualbox-libre-modules/os_dragora_64.png diff --git a/libre/virtualbox-libre-modules/os_dynebolic.png b/libre/virtualbox-libre-modules/os_dynebolic.png Binary files differnew file mode 100644 index 000000000..67b07d4c0 --- /dev/null +++ b/libre/virtualbox-libre-modules/os_dynebolic.png diff --git a/libre/virtualbox-libre-modules/os_gnewsense.png b/libre/virtualbox-libre-modules/os_gnewsense.png Binary files differnew file mode 100644 index 000000000..76d9e38b3 --- /dev/null +++ b/libre/virtualbox-libre-modules/os_gnewsense.png diff --git a/libre/virtualbox-libre-modules/os_gnewsense_64.png b/libre/virtualbox-libre-modules/os_gnewsense_64.png Binary files differnew file mode 100644 index 000000000..8859c34e8 --- /dev/null +++ b/libre/virtualbox-libre-modules/os_gnewsense_64.png diff --git a/libre/virtualbox-libre-modules/os_gnu.png b/libre/virtualbox-libre-modules/os_gnu.png Binary files differnew file mode 100644 index 000000000..26c4550f9 --- /dev/null +++ b/libre/virtualbox-libre-modules/os_gnu.png diff --git a/libre/virtualbox-libre-modules/os_gnu_64.png b/libre/virtualbox-libre-modules/os_gnu_64.png Binary files differnew file mode 100644 index 000000000..4161634e9 --- /dev/null +++ b/libre/virtualbox-libre-modules/os_gnu_64.png diff --git a/libre/virtualbox-libre-modules/os_gnuhurd.png b/libre/virtualbox-libre-modules/os_gnuhurd.png Binary files differnew file mode 100644 index 000000000..26c4550f9 --- /dev/null +++ b/libre/virtualbox-libre-modules/os_gnuhurd.png diff --git a/libre/virtualbox-libre-modules/os_gnulinux.png b/libre/virtualbox-libre-modules/os_gnulinux.png Binary files differnew file mode 100644 index 000000000..26c4550f9 --- /dev/null +++ b/libre/virtualbox-libre-modules/os_gnulinux.png diff --git a/libre/virtualbox-libre-modules/os_gnulinux_64.png b/libre/virtualbox-libre-modules/os_gnulinux_64.png Binary files differnew file mode 100644 index 000000000..4161634e9 --- /dev/null +++ b/libre/virtualbox-libre-modules/os_gnulinux_64.png diff --git a/libre/virtualbox-libre-modules/os_musix.png b/libre/virtualbox-libre-modules/os_musix.png Binary files differnew file mode 100644 index 000000000..fb7b94577 --- /dev/null +++ b/libre/virtualbox-libre-modules/os_musix.png diff --git a/libre/virtualbox-libre-modules/os_musix_64.png b/libre/virtualbox-libre-modules/os_musix_64.png Binary files differnew file mode 100644 index 000000000..a1bbbbf3a --- /dev/null +++ b/libre/virtualbox-libre-modules/os_musix_64.png diff --git a/libre/virtualbox-libre-modules/os_os64base.png b/libre/virtualbox-libre-modules/os_os64base.png Binary files differnew file mode 100644 index 000000000..7aec20314 --- /dev/null +++ b/libre/virtualbox-libre-modules/os_os64base.png diff --git a/libre/virtualbox-libre-modules/os_os64base.xcf b/libre/virtualbox-libre-modules/os_os64base.xcf Binary files differnew file mode 100644 index 000000000..d8e28e35e --- /dev/null +++ b/libre/virtualbox-libre-modules/os_os64base.xcf diff --git a/libre/virtualbox-libre-modules/os_osbase.png b/libre/virtualbox-libre-modules/os_osbase.png Binary files differnew file mode 100644 index 000000000..00f197fca --- /dev/null +++ b/libre/virtualbox-libre-modules/os_osbase.png diff --git a/libre/virtualbox-libre-modules/os_osbase.xcf b/libre/virtualbox-libre-modules/os_osbase.xcf Binary files differnew file mode 100644 index 000000000..c4463c857 --- /dev/null +++ b/libre/virtualbox-libre-modules/os_osbase.xcf diff --git a/libre/virtualbox-libre-modules/os_parabola.png b/libre/virtualbox-libre-modules/os_parabola.png Binary files differnew file mode 100644 index 000000000..757abc484 --- /dev/null +++ b/libre/virtualbox-libre-modules/os_parabola.png diff --git a/libre/virtualbox-libre-modules/os_parabola_64.png b/libre/virtualbox-libre-modules/os_parabola_64.png Binary files differnew file mode 100644 index 000000000..5ac7c2767 --- /dev/null +++ b/libre/virtualbox-libre-modules/os_parabola_64.png diff --git a/libre/virtualbox-libre-modules/os_trisquel.png b/libre/virtualbox-libre-modules/os_trisquel.png Binary files differnew file mode 100644 index 000000000..c6f0d3d7a --- /dev/null +++ b/libre/virtualbox-libre-modules/os_trisquel.png diff --git a/libre/virtualbox-libre-modules/os_trisquel_64.png b/libre/virtualbox-libre-modules/os_trisquel_64.png Binary files differnew file mode 100644 index 000000000..ebca3dd43 --- /dev/null +++ b/libre/virtualbox-libre-modules/os_trisquel_64.png diff --git a/libre/virtualbox-libre-modules/os_ututo.png b/libre/virtualbox-libre-modules/os_ututo.png Binary files differnew file mode 100644 index 000000000..e1dffb575 --- /dev/null +++ b/libre/virtualbox-libre-modules/os_ututo.png diff --git a/libre/virtualbox-libre-modules/os_ututo_64.png b/libre/virtualbox-libre-modules/os_ututo_64.png Binary files differnew file mode 100644 index 000000000..158468e0a --- /dev/null +++ b/libre/virtualbox-libre-modules/os_ututo_64.png diff --git a/libre/virtualbox-libre-modules/os_venenux.png b/libre/virtualbox-libre-modules/os_venenux.png Binary files differnew file mode 100644 index 000000000..5e0c1585d --- /dev/null +++ b/libre/virtualbox-libre-modules/os_venenux.png diff --git a/libre/virtualbox-modules/virtualbox-modules.install b/libre/virtualbox-libre-modules/virtualbox-libre-modules.install index b178686e2..3f2a12a3f 100644 --- a/libre/virtualbox-modules/virtualbox-modules.install +++ b/libre/virtualbox-libre-modules/virtualbox-libre-modules.install @@ -3,17 +3,17 @@ post_install() { ===> You must load vboxdrv module before starting VirtualBox: ===> # modprobe vboxdrv EOF - EXTRAMODULES='extramodules-3.4-LIBRE' + EXTRAMODULES='extramodules-3.5-LIBRE' depmod $(cat /usr/lib/modules/$EXTRAMODULES/version) } post_upgrade() { - EXTRAMODULES='extramodules-3.4-LIBRE' + EXTRAMODULES='extramodules-3.5-LIBRE' depmod $(cat /usr/lib/modules/$EXTRAMODULES/version) echo 'In order to use the new version, reload all virtualbox modules manually.' } post_remove() { - EXTRAMODULES='extramodules-3.4-LIBRE' + EXTRAMODULES='extramodules-3.5-LIBRE' depmod $(cat /usr/lib/modules/$EXTRAMODULES/version) } diff --git a/libre/virtualbox-modules/virtualbox-parabola-modules.install b/libre/virtualbox-libre-modules/virtualbox-libre-parabola-modules.install index 31575fb9d..c3419c991 100644 --- a/libre/virtualbox-modules/virtualbox-parabola-modules.install +++ b/libre/virtualbox-libre-modules/virtualbox-libre-parabola-modules.install @@ -2,16 +2,16 @@ post_install() { cat << EOF ===> You may want to load vboxguest, vboxsf and vboxvideo EOF - EXTRAMODULES='extramodules-3.4-LIBRE' + EXTRAMODULES='extramodules-3.5-LIBRE' depmod $(cat /usr/lib/modules/$EXTRAMODULES/version) } post_upgrade() { - EXTRAMODULES='extramodules-3.4-LIBRE' + EXTRAMODULES='extramodules-3.5-LIBRE' depmod $(cat /usr/lib/modules/$EXTRAMODULES/version) } post_remove() { - EXTRAMODULES='extramodules-3.4-LIBRE' + EXTRAMODULES='extramodules-3.5-LIBRE' depmod $(cat /usr/lib/modules/$EXTRAMODULES/version) } diff --git a/libre/virtualbox-libre/.directory b/libre/virtualbox-libre/.directory new file mode 100644 index 000000000..0de6ba6b0 --- /dev/null +++ b/libre/virtualbox-libre/.directory @@ -0,0 +1,3 @@ +[Dolphin] +Timestamp=2012,7,26,5,49,47 +ViewMode=2 diff --git a/libre/virtualbox-libre/PKGBUILD b/libre/virtualbox-libre/PKGBUILD index 942aa5d1c..c3aa1a69c 100644 --- a/libre/virtualbox-libre/PKGBUILD +++ b/libre/virtualbox-libre/PKGBUILD @@ -1,18 +1,17 @@ # $Id$ # Maintainer (Parabola): Nicolas Reynolds <fauno@kiwwwi.com.ar> # Maintainer (Parabola): Jorge López <jorginho@lavabit.com> -# Contributor (Parabola): André Silva <emulatorman@lavabit.com> -# Changes: -# * Adapt to linux-libre -# * virtualbox-{archlinux,parabola}-* -# * Removed unfree user manual -# * Package with --pkg "virtualbox-parabola-additions virtualbox-parabola-modules" -# Based on -#Maintainer: Ionut Biru <ibiru@archlinux.org> +# Maintainer (Parabola): André Silva <emulatorman@lavabit.com> +# Maintainer (Parabola): Márcio Silva <coadde@lavabit.com> +# Maintainer: Ionut Biru <ibiru@archlinux.org> pkgbase=virtualbox-libre -pkgname=('virtualbox-libre' 'virtualbox-parabola-additions' 'virtualbox-sdk' 'virtualbox-source') +pkgname=('virtualbox-libre' + 'virtualbox-libre-parabola-additions' + 'virtualbox-libre-sdk' + 'virtualbox-libre-source' + 'virtualbox-libre-parabola-source') pkgver=4.1.18 -pkgrel=2 +pkgrel=4.2 arch=('i686' 'x86_64') url='http://virtualbox.org' license=('GPL' 'custom') @@ -21,11 +20,16 @@ makedepends=('libstdc++5' 'bin86' 'dev86' 'iasl' 'libxslt' 'libxml2' 'libxcursor #'xorg-server-devel' 'xf86driproto' 'libxcomposite') [[ $CARCH == "x86_64" ]] && makedepends=("${makedepends[@]}" 'gcc-multilib' 'lib32-glibc') source=(http://download.virtualbox.org/virtualbox/${pkgver}/VirtualBox-${pkgver}.tar.bz2 - 10-vboxdrv.rules vboxdrv-reference.patch LocalConfig.kmk vboxbuild - change_default_driver_dir.patch vbox-service.conf vbox-service.rc - vboxweb.conf vboxweb.rc) - -_extramodules=extramodules-3.4-LIBRE + 10-vboxdrv.rules vboxdrv-reference.patch LocalConfig.kmk ipv6_vnc.patch + change_default_driver_dir.patch vboxservice.conf vboxservice.rc vboxservice.service + vboxweb.conf vboxweb.rc vboxweb.service os_blag_64.png os_blag.png + os_dragora_64.png os_dragora.png os_dynebolic.png os_gnewsense_64.png os_gnewsense.png + os_gnu_64.png os_gnuhurd.png os_gnulinux_64.png os_gnulinux.png os_gnu.png + os_musix_64.png os_musix.png os_parabola_64.png os_parabola.png os_trisquel_64.png + os_trisquel.png os_ututo_64.png os_ututo.png os_venenux.png libre.patch + free-distros.patch) + +_extramodules=extramodules-3.5-LIBRE _kernver="$(cat /usr/lib/modules/${_extramodules}/version)" || true build() { @@ -33,6 +37,29 @@ build() { patch -Np1 -i "$srcdir/vboxdrv-reference.patch" patch -Np1 -i "$srcdir/change_default_driver_dir.patch" + patch -Np1 -i "$srcdir/libre.patch" + patch -Np1 -i "$srcdir/free-distros.patch" + # FS#30401 + patch -Np2 -i "$srcdir/ipv6_vnc.patch" + + ## Removing Nonfree directories + rm -rv "./include/VBox/ExtPack" + rm -rv "./src/VBox/ExtPacks" + rm -rv "./src/VBox/Main/src-helper-apps" + + ## Removing Oracle VM VirtualBox Extension Pack icons + rm -v "./src/VBox/Resources/darwin/virtualbox-vbox-extpack.icns" + rm -v "./src/VBox/Resources/other/virtualbox-vbox-extpack-"{16px,20px,24px,32px,40px,48px,64px,72px,80px,96px,128px,256px,512px}.png + rm -v "./src/VBox/Resources/win/OSE/virtualbox-vbox-extpack.ico" + rm -v "./src/VBox/Frontends/VirtualBox/images/extension_pack_"{16px,32px,disabled{_16px,_32px},install{_16px,_32px},install_disabled{_16px,_32px},uninstall{_16px,_32px},uninstall_disabled{_16px,_32px}}.png + + ## Adding free distros icons + for i in {gnuhurd,dynebolic,venenux,{gnu{,linux},parabola,gnewsense,blag,dragora,ututo,musix,trisquel}{,_64}}; do + cp -v "$srcdir/os_${i}.png" "./src/VBox/Frontends/VirtualBox/images" + done + + ## Removing non-free OS icons + rm -v "./src/VBox/Frontends/VirtualBox/images/os_"{{{arch,turbo}linux,debian,fedora,gentoo,linux{24,26},macosx,mandriva,{free,net,open}bsd,redhat,solaris,opensuse,oracle{,solaris},ubuntu,win{2k{3,8},7,8,vista,xp},xandros}{,_64},dos,jrockitve,l4,linux{,22,_other},netware,qnx,os2{_other,ecs,warp{3,4,45}},win{2k,31,95,98,_other,me,nt4}}.png cp "$srcdir/LocalConfig.kmk" . @@ -48,24 +75,24 @@ build() { } package_virtualbox-libre() { - pkgdesc="Powerful x86 virtualization for enterprise as well as home use" - depends=('virtualbox-modules' 'libxml2' 'libxcursor' 'libxinerama' 'sdl' 'libxmu' 'curl' 'libvncserver' 'libpng') + pkgdesc="Powerful x86 virtualization for enterprise as well as home use (without Oracle VM VirtualBox Extension Pack and non-free OS options support)" + depends=('virtualbox-libre-modules' 'libxml2' 'libxcursor' 'libxinerama' 'sdl' 'libxmu' 'curl' 'libvncserver' 'libpng') optdepends=('qt: for VirtualBox GUI' 'vde2: Virtual Distributed Ethernet support' - 'virtualbox-sdk: developer kit' - 'virtualbox-source: host kernel source modules for non-stock kernels' + 'virtualbox-libre-sdk: developer kit' + 'virtualbox-libre-source: host kernel source modules for non-stock kernels' 'net-tools: for host-only or bridged networking') backup=('etc/vbox/vbox.cfg') replaces=('virtualbox' 'virtualbox-ose') conflicts=('virtualbox' 'virtualbox-ose') provides=("virtualbox=$pkgver") - install=virtualbox.install + install=virtualbox-libre.install source "$srcdir/VirtualBox-${pkgver}/env.sh" cd "$srcdir/VirtualBox-${pkgver}/out/linux.$BUILD_PLATFORM_ARCH/release/bin" - mkdir -p "$pkgdir"/usr/{bin,lib/virtualbox/components,lib/virtualbox/ExtensionPacks,share/virtualbox/nls} + install -dm755 "$pkgdir"/usr/{bin,lib/virtualbox/components,share/virtualbox/nls} #Binaries and Wrapper with Launchers @@ -86,7 +113,7 @@ package_virtualbox-libre() { #setuid root binaries install -m 4755 VBoxSDL VirtualBox VBoxHeadless VBoxNetDHCP VBoxNetAdpCtl -t "$pkgdir/usr/lib/virtualbox" #other binaries - install -m 0755 VBoxManage VBoxSVC VBoxExtPackHelperApp VBoxXPCOMIPCD VBoxTestOGL VBoxBalloonCtrl vboxwebsrv webtest -t "$pkgdir/usr/lib/virtualbox" + install -m 0755 VBoxManage VBoxSVC VBoxXPCOMIPCD VBoxTestOGL VBoxBalloonCtrl vboxwebsrv webtest -t "$pkgdir/usr/lib/virtualbox" #language install -m 0755 nls/*.qm -t "$pkgdir/usr/share/virtualbox/nls" @@ -120,35 +147,38 @@ package_virtualbox-libre() { # install rc.d script install -D -m755 "$srcdir/vboxweb.rc" "$pkgdir/etc/rc.d/vboxweb" + # install systemd service + install -D -m644 "$srcdir/vboxweb.service" \ + "$pkgdir/usr/lib/systemd/system/vboxweb.service" # install sample config install -D -m644 "$srcdir/vboxweb.conf" "$pkgdir/etc/conf.d/vboxweb" } -package_virtualbox-source() { +package_virtualbox-libre-source() { pkgdesc="VirtualBox kernel modules source" - depends=(gcc make) - provides=(virtualbox-modules) + depends=(dkms gcc make) + replaces=('virtualbox-source') + conflicts=('virtualbox-source') + provides=("virtualbox-source=$pkgver" "virtualbox-modules=$pkgver") optdepends=('linux-libre-headers' 'linux-libre-lts-headers') - install=virtualbox-source.install + install=virtualbox-libre-source.install + install -dm755 "$pkgdir/var/lib/dkms/vboxhost/$pkgver" source "$srcdir/VirtualBox-${pkgver}/env.sh" - mkdir -p $pkgdir/usr/lib/virtualbox - cd "$srcdir/VirtualBox-${pkgver}/out/linux.$BUILD_PLATFORM_ARCH/release/bin" - - #sources for modules - cp -r src ${pkgdir}/usr/lib/virtualbox - #install compilation script - install -D -m 755 "${srcdir}/vboxbuild" "${pkgdir}/usr/bin/vboxbuild" + cp -r src "$pkgdir/var/lib/dkms/vboxhost/$pkgver/source" } -package_virtualbox-sdk() { +package_virtualbox-libre-sdk() { pkgdesc="VirtualBox Software Developer Kit (SDK)" depends=('python2') + replaces=('virtualbox-sdk') + conflicts=('virtualbox-sdk') + provides=("virtualbox-sdk=$pkgver") - mkdir -p "$pkgdir/usr/lib/virtualbox" + install -dm755 "$pkgdir/usr/lib/virtualbox" source "$srcdir/VirtualBox-${pkgver}/env.sh" cd "$srcdir/VirtualBox-${pkgver}/out/linux.$BUILD_PLATFORM_ARCH/release/bin" @@ -162,12 +192,14 @@ package_virtualbox-sdk() { mv sdk "$pkgdir/usr/lib/virtualbox" } -package_virtualbox-parabola-additions(){ +package_virtualbox-libre-parabola-additions(){ pkgdesc="Additions only for Parabola guests (userspace tools)" - depends=("virtualbox-parabola-modules=$pkgver" 'gcc-libs' 'libxmu' 'xorg-xrandr' 'libxfixes') - replaces=('virtualbox-guest-additions' 'virtualbox-archlinux-additions') - conflicts=('virtualbox-guest-additions' 'virtualbox-archlinux-additions') + depends=('virtualbox-libre-parabola-modules' 'gcc-libs' 'libxmu' 'xorg-xrandr' 'libxfixes') + replaces=('virtualbox-archlinux-additions' 'virtualbox-guest-additions') + conflicts=('virtualbox-archlinux-additions' 'virtualbox-guest-additions') provides=("virtualbox-archlinux-additions=${pkgver}") + backup=('etc/conf.d/vboxservice') + install=virtualbox-libre-parabola-additions.install source "$srcdir/VirtualBox-${pkgver}/env.sh" @@ -189,18 +221,64 @@ package_virtualbox-parabola-additions(){ install -m755 -D pam_vbox.so "$pkgdir/usr/lib/security/pam_vbox.so" # install rc.d script - install -D -m755 "$srcdir/vbox-service.rc" "$pkgdir/etc/rc.d/vbox-service" + install -D -m755 "$srcdir/vboxservice.rc" "$pkgdir/etc/rc.d/vboxservice" # install sample config - install -D -m644 "$srcdir/vbox-service.conf" "$pkgdir/etc/conf.d/vbox-service" + install -D -m644 "$srcdir/vboxservice.conf" "$pkgdir/etc/conf.d/vboxservice" + + # install systemd service file + install -D -m644 "$srcdir/vboxservice.service" \ + "$pkgdir/usr/lib/systemd/system/vboxservice.service" +} + +package_virtualbox-libre-parabola-source() { + pkgdesc='VirtualBox Additions kernel modules source' + depends=(dkms gcc make) + replaces=('virtualbox-archlinux-source') + conflicts=('virtualbox-archlinux-source') + provides=("virtualbox-archlinux-source=${pkgver}" "virtualbox-archlinux-modules=${pkgver}") + optdepends=('linux-libre-headers' + 'linux-libre-lts-headers') + install=virtualbox-libre-parabola-source.install + + install -dm755 "$pkgdir/var/lib/dkms/vboxguest/$pkgver" + source "$srcdir/VirtualBox-${pkgver}/env.sh" + cd "$srcdir/VirtualBox-${pkgver}/out/linux.$BUILD_PLATFORM_ARCH/release/bin/additions" + cp -r src "$pkgdir/var/lib/dkms/vboxguest/$pkgver/source" } + md5sums=('38db0a87cba659b484af868b0c2bd3ac' '5f85710e0b8606de967716ded7b2d351' - '755ab0dd9bcacf2c00d2275b1ca69547' + '2d599c6cf8bbbf183a7c07a9bcb926c7' 'a1ff1d1b4423556887e48a32978226a6' - '248078ab922f27424ba9919d4aa90dcc' + '4ff559f2bea335d59c4012048983ca91' '97e193f050574dd272a38e5ee5ebe62b' '3c08ad30b89add47d3f45121200a5360' - '208cf5f842eb2e3a5b6dcfc59080d26c' + '7d9823507206de9b8528a72af2f18d74' + '07c5f6d86c4b7839d719c8ee0c53653b' '3ac185709bfe688bb753c46e170d0546' - 'c159d683ba1947290fc2ad2c64194150') + 'c159d683ba1947290fc2ad2c64194150' + 'bc9efed88e0469cd7fc460d5a5cd7b4b' + '8538dba8686d7449cb481c9bae9d722a' + '545c925b46f2ac95e5f8ae407fad101a' + 'f6416f509c2e5460e4dc624e0a57f3c1' + 'bbfb59dd517c020a23701b480187a355' + 'efacfdb61918286ea9bc89866b8fd239' + '7c3eb09995e8bafeef414374e44ad4ce' + 'a49ed3ab6bd0fb084de0ab3dd97ae93e' + '6b432b3305ed446125eef052c38355a6' + 'a70022a468bd3e9daf01818d2d74ac3c' + '6b432b3305ed446125eef052c38355a6' + 'a70022a468bd3e9daf01818d2d74ac3c' + 'a70022a468bd3e9daf01818d2d74ac3c' + '380eb2ab6cad3da198094585853c129c' + 'a60bb9a98abcc3c34156f9051d00df9a' + '3a908ef6952bcf987e63ef2fe4e98d24' + '02e87c39c353634cecacf98f1707fa15' + '0cf41a41e7a415d404d5584e047fd450' + '449cde3b58390284b59c5d663de3edc9' + 'c7951fe6888d939f3a7d0dafe477e82b' + '4da8eeb2ece7e475fc7a0d1003da26c6' + '5e4187af59726d71c5be48d0cd816c34' + 'a9e4724b56ddf99bb2e9a8fab8ad43ba' + 'f7d275fc52e5f3cfafd85646c2914063') diff --git a/libre/virtualbox-libre/free-distros.patch b/libre/virtualbox-libre/free-distros.patch new file mode 100644 index 000000000..7920fb6ab --- /dev/null +++ b/libre/virtualbox-libre/free-distros.patch @@ -0,0 +1,1383 @@ +--- VirtualBox-4.1.18.orig/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UINewVMWzd.cpp 2012-07-25 14:51:03.569003667 -0300 ++++ VirtualBox-4.1.18/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UINewVMWzd.cpp 2012-07-25 14:51:03.652333615 -0300 +@@ -44,94 +44,38 @@ + * first matching string found, will be used. */ + static const osTypePattern gs_OSTypePattern[] = + { +- { QRegExp("DOS", Qt::CaseInsensitive), "DOS" }, + +- /* Windows */ +- { QRegExp("Wi.*98", Qt::CaseInsensitive), "Windows98" }, +- { QRegExp("Wi.*95", Qt::CaseInsensitive), "Windows95" }, +- { QRegExp("Wi.*Me", Qt::CaseInsensitive), "WindowsMe" }, +- { QRegExp("(Wi.*NT)|(NT4)", Qt::CaseInsensitive), "WindowsNT4" }, +- { QRegExp("((Wi.*XP)|(\\bXP\\b)).*64", Qt::CaseInsensitive), "WindowsXP_64" }, +- { QRegExp("(Wi.*XP)|(\\bXP\\b)", Qt::CaseInsensitive), "WindowsXP" }, +- { QRegExp("((Wi.*2003)|(W2K3)).*64", Qt::CaseInsensitive), "Windows2003_64" }, +- { QRegExp("(Wi.*2003)|(W2K3)", Qt::CaseInsensitive), "Windows2003" }, +- { QRegExp("((Wi.*V)|(Vista)).*64", Qt::CaseInsensitive), "WindowsVista_64" }, +- { QRegExp("(Wi.*V)|(Vista)", Qt::CaseInsensitive), "WindowsVista" }, +- { QRegExp("((Wi.*2008)|(W2K8)).*64", Qt::CaseInsensitive), "Windows2008_64" }, +- { QRegExp("(Wi.*2008)|(W2K8)", Qt::CaseInsensitive), "Windows2008" }, +- { QRegExp("(Wi.*2000)|(W2K)", Qt::CaseInsensitive), "Windows2000" }, +- { QRegExp("(Wi.*7.*64)|(W7.*64)", Qt::CaseInsensitive), "Windows7_64" }, +- { QRegExp("(Wi.*7)|(W7)", Qt::CaseInsensitive), "Windows7" }, +- { QRegExp("(Wi.*8.*64)|(W8.*64)", Qt::CaseInsensitive), "Windows8_64" }, +- { QRegExp("(Wi.*8)|(W8)", Qt::CaseInsensitive), "Windows8" }, +- { QRegExp("Wi.*3", Qt::CaseInsensitive), "Windows31" }, +- { QRegExp("Wi", Qt::CaseInsensitive), "WindowsXP" }, +- +- /* Solaris */ +- { QRegExp("((Op.*So)|(os20[01][0-9])|(So.*1[01])|(India)|(Neva)).*64", Qt::CaseInsensitive), "OpenSolaris_64" }, +- { QRegExp("(Op.*So)|(os20[01][0-9])|(So.*1[01])|(India)|(Neva)", Qt::CaseInsensitive), "OpenSolaris" }, +- { QRegExp("So.*64", Qt::CaseInsensitive), "Solaris_64" }, +- { QRegExp("So", Qt::CaseInsensitive), "Solaris" }, +- +- /* OS/2 */ +- { QRegExp("OS[/|!-]{,1}2.*W.*4.?5", Qt::CaseInsensitive), "OS2Warp45" }, +- { QRegExp("OS[/|!-]{,1}2.*W.*4", Qt::CaseInsensitive), "OS2Warp4" }, +- { QRegExp("OS[/|!-]{,1}2.*W", Qt::CaseInsensitive), "OS2Warp3" }, +- { QRegExp("(OS[/|!-]{,1}2.*e)|(eCS.*)", Qt::CaseInsensitive), "OS2eCS" }, +- { QRegExp("OS[/|!-]{,1}2", Qt::CaseInsensitive), "OS2" }, +- +- /* Code names for Linux distributions */ +- { QRegExp("((edgy)|(feisty)|(gutsy)|(hardy)|(intrepid)|(jaunty)|(karmic)|(lucid)|(maverick)|(natty)|(oneiric)|(precise)).*64", Qt::CaseInsensitive), "Ubuntu_64" }, +- { QRegExp("(edgy)|(feisty)|(gutsy)|(hardy)|(intrepid)|(jaunty)|(karmic)|(lucid)|(maverick)|(natty)|(oneiric)|(precise)", Qt::CaseInsensitive), "Ubuntu" }, +- { QRegExp("((sarge)|(etch)|(lenny)|(squeeze)|(wheezy)|(sid)).*64", Qt::CaseInsensitive), "Debian_64" }, +- { QRegExp("(sarge)|(etch)|(lenny)|(squeeze)|(wheezy)|(sid)", Qt::CaseInsensitive), "Debian" }, +- { QRegExp("((moonshine)|(werewolf)|(sulphur)|(cambridge)|(leonidas)|(constantine)|(goddard)|(laughlin)|(lovelock)|(verne)).*64", Qt::CaseInsensitive), "Fedora_64" }, +- { QRegExp("(moonshine)|(werewolf)|(sulphur)|(cambridge)|(leonidas)|(constantine)|(goddard)|(laughlin)|(lovelock)|(verne)", Qt::CaseInsensitive), "Fedora" }, +- +- /* Regular names of Linux distributions */ +- { QRegExp("Arc.*64", Qt::CaseInsensitive), "ArchLinux_64" }, +- { QRegExp("Arc", Qt::CaseInsensitive), "ArchLinux" }, +- { QRegExp("Deb.*64", Qt::CaseInsensitive), "Debian_64" }, +- { QRegExp("Deb", Qt::CaseInsensitive), "Debian" }, +- { QRegExp("((SU)|(Nov)|(SLE)).*64", Qt::CaseInsensitive), "OpenSUSE_64" }, +- { QRegExp("(SU)|(Nov)|(SLE)", Qt::CaseInsensitive), "OpenSUSE" }, +- { QRegExp("Fe.*64", Qt::CaseInsensitive), "Fedora_64" }, +- { QRegExp("Fe", Qt::CaseInsensitive), "Fedora" }, +- { QRegExp("((Gen)|(Sab)).*64", Qt::CaseInsensitive), "Gentoo_64" }, +- { QRegExp("(Gen)|(Sab)", Qt::CaseInsensitive), "Gentoo" }, +- { QRegExp("Man.*64", Qt::CaseInsensitive), "Mandriva_64" }, +- { QRegExp("Man", Qt::CaseInsensitive), "Mandriva" }, +- { QRegExp("((Red)|(rhel)|(cen)).*64", Qt::CaseInsensitive), "RedHat_64" }, +- { QRegExp("(Red)|(rhel)|(cen)", Qt::CaseInsensitive), "RedHat" }, +- { QRegExp("Tur.*64", Qt::CaseInsensitive), "Turbolinux_64" }, +- { QRegExp("Tur", Qt::CaseInsensitive), "Turbolinux" }, +- { QRegExp("Ub.*64", Qt::CaseInsensitive), "Ubuntu_64" }, +- { QRegExp("Ub", Qt::CaseInsensitive), "Ubuntu" }, +- { QRegExp("Xa.*64", Qt::CaseInsensitive), "Xandros_64" }, +- { QRegExp("Xa", Qt::CaseInsensitive), "Xandros" }, +- { QRegExp("((Or)|(oel)).*64", Qt::CaseInsensitive), "Oracle_64" }, +- { QRegExp("(Or)|(oel)", Qt::CaseInsensitive), "Oracle" }, +- { QRegExp("((Li)|(lnx)).*2.?2", Qt::CaseInsensitive), "Linux22" }, +- { QRegExp("((Li)|(lnx)).*2.?4.*64", Qt::CaseInsensitive), "Linux24_64" }, +- { QRegExp("((Li)|(lnx)).*2.?4", Qt::CaseInsensitive), "Linux24" }, +- { QRegExp("((((Li)|(lnx)).*2.?6)|(LFS)).*64", Qt::CaseInsensitive), "Linux26_64" }, +- { QRegExp("(((Li)|(lnx)).*2.?6)|(LFS)", Qt::CaseInsensitive), "Linux26" }, +- { QRegExp("((Li)|(lnx)).*64", Qt::CaseInsensitive), "Linux26_64" }, +- { QRegExp("(Li)|(lnx)", Qt::CaseInsensitive), "Linux26" }, ++ /* Code names for GNU/Linux distributions */ ++ { QRegExp("((Taranis)|(Dagda)|(Brigantia)).*64", Qt::CaseInsensitive), "Trisquel_64" }, ++ { QRegExp("(Taranis)|(Dagda)|(Brigantia)", Qt::CaseInsensitive), "Trisquel" }, ++ { QRegExp("((metad)|(parkes)|(three)).*64", Qt::CaseInsensitive), "gNewSense_64" }, ++ { QRegExp("(deltah)|(metad)|(parkes)|(three)", Qt::CaseInsensitive), "gNewSense" }, ++ { QRegExp("((90k)|(119k)|(140k)|(160k)|(90000)|(119000)|(140000)|(160000)|(Spartakus)).*64", Qt::CaseInsensitive), "Blag_64" }, ++ { QRegExp("(90k)|(119k)|(140k)|(160k)|(90000)|(119000)|(140000)|(160000)|(Spartakus)", Qt::CaseInsensitive), "Blag" }, ++ ++ /* Regular names of GNU/Linux distributions and GNU-Hurd */ ++ { QRegExp("Pa.*64", Qt::CaseInsensitive), "Parabola_64" }, ++ { QRegExp("Pa", Qt::CaseInsensitive), "Parabola" }, ++ { QRegExp("((gNe)|(new)|(Sen)).*64", Qt::CaseInsensitive), "gNewSense_64" }, ++ { QRegExp("(gNe)|(new)|(Sen)", Qt::CaseInsensitive), "gNewSense" }, ++ { QRegExp("Bla.*64", Qt::CaseInsensitive), "Blag_64" }, ++ { QRegExp("Bla", Qt::CaseInsensitive), "Blag" }, ++ { QRegExp("Dra.*64", Qt::CaseInsensitive), "Dragora_64" }, ++ { QRegExp("Dra", Qt::CaseInsensitive), "Dragora" }, ++ { QRegExp("((Utu)|(XS)).*64", Qt::CaseInsensitive), "Ututo_64" }, ++ { QRegExp("(Utu)|(XS)", Qt::CaseInsensitive), "Ututo" }, ++ { QRegExp("Mus.*64", Qt::CaseInsensitive), "Musix_64" }, ++ { QRegExp("Mus", Qt::CaseInsensitive), "Musix" }, ++ { QRegExp("Tri.*64", Qt::CaseInsensitive), "Trisquel_64" }, ++ { QRegExp("Tri", Qt::CaseInsensitive), "Trisquel" }, ++ { QRegExp("Dyn", Qt::CaseInsensitive), "Dynebolic" }, ++ { QRegExp("Ven", Qt::CaseInsensitive), "Venenux" }, ++ { QRegExp("GNU", Qt::CaseInsensitive), "GNU" }, ++ { QRegExp("Hu", Qt::CaseInsensitive), "GNUHurd" }, ++ { QRegExp("((Li)|(lnx)).*64", Qt::CaseInsensitive), "GNULinux_64" }, ++ { QRegExp("(Li)|(lnx)", Qt::CaseInsensitive), "GNULinux" }, + + /* Other */ +- { QRegExp("L4", Qt::CaseInsensitive), "L4" }, +- { QRegExp("((Fr.*B)|(fbsd)).*64", Qt::CaseInsensitive), "FreeBSD_64" }, +- { QRegExp("(Fr.*B)|(fbsd)", Qt::CaseInsensitive), "FreeBSD" }, +- { QRegExp("Op.*B.*64", Qt::CaseInsensitive), "OpenBSD_64" }, +- { QRegExp("Op.*B", Qt::CaseInsensitive), "OpenBSD" }, +- { QRegExp("Ne.*B.*64", Qt::CaseInsensitive), "NetBSD_64" }, +- { QRegExp("Ne.*B", Qt::CaseInsensitive), "NetBSD" }, +- { QRegExp("QN", Qt::CaseInsensitive), "QNX" }, +- { QRegExp("((Mac)|(Tig)|(Leop)|(osx)).*64", Qt::CaseInsensitive), "MacOS_64" }, +- { QRegExp("(Mac)|(Tig)|(Leop)|(osx)", Qt::CaseInsensitive), "MacOS" }, +- { QRegExp("Net", Qt::CaseInsensitive), "Netware" }, +- { QRegExp("Rocki", Qt::CaseInsensitive), "JRockitVE" }, + { QRegExp("Ot", Qt::CaseInsensitive), "Other" }, + }; + +--- VirtualBox-4.1.18.orig/src/VBox/Main/xml/Settings.cpp 2012-07-25 15:14:50.498764160 -0300 ++++ VirtualBox-4.1.18/src/VBox/Main/xml/Settings.cpp 2012-07-25 15:14:50.548761649 -0300 +@@ -3227,40 +3227,18 @@ + } aConvertOSTypes[] = + { + { "unknown", "Other" }, +- { "dos", "DOS" }, +- { "win31", "Windows31" }, +- { "win95", "Windows95" }, +- { "win98", "Windows98" }, +- { "winme", "WindowsMe" }, +- { "winnt4", "WindowsNT4" }, +- { "win2k", "Windows2000" }, +- { "winxp", "WindowsXP" }, +- { "win2k3", "Windows2003" }, +- { "winvista", "WindowsVista" }, +- { "win2k8", "Windows2008" }, +- { "os2warp3", "OS2Warp3" }, +- { "os2warp4", "OS2Warp4" }, +- { "os2warp45", "OS2Warp45" }, +- { "ecs", "OS2eCS" }, +- { "linux22", "Linux22" }, +- { "linux24", "Linux24" }, +- { "linux26", "Linux26" }, +- { "archlinux", "ArchLinux" }, +- { "debian", "Debian" }, +- { "opensuse", "OpenSUSE" }, +- { "fedoracore", "Fedora" }, +- { "gentoo", "Gentoo" }, +- { "mandriva", "Mandriva" }, +- { "redhat", "RedHat" }, +- { "ubuntu", "Ubuntu" }, +- { "xandros", "Xandros" }, +- { "freebsd", "FreeBSD" }, +- { "openbsd", "OpenBSD" }, +- { "netbsd", "NetBSD" }, +- { "netware", "Netware" }, +- { "solaris", "Solaris" }, +- { "opensolaris", "OpenSolaris" }, +- { "l4", "L4" } ++ { "gnu", "GNU" }, ++ { "gnuhurd", "GNUHurd" }, ++ { "gnulinux", "GNULinux" }, ++ { "parabola", "Parabola" }, ++ { "gnewsense", "gNewSense" }, ++ { "blag", "Blag" }, ++ { "dragora", "Dragora" }, ++ { "ututo", "Ututo" }, ++ { "musix", "Musix" }, ++ { "trisquel", "Trisquel" }, ++ { "dynebolic", "Dynebolic" }, ++ { "venenux", "Venenux" }, + }; + + void MachineConfigFile::convertOldOSType_pre1_5(Utf8Str &str) +--- VirtualBox-4.1.18.orig/src/VBox/Main/xml/SettingsConverter.xsl 2012-07-25 15:21:04.553581275 -0300 ++++ VirtualBox-4.1.18/src/VBox/Main/xml/SettingsConverter.xsl 2012-07-25 15:21:04.593579427 -0300 +@@ -729,40 +729,18 @@ + <xsl:attribute name="OSType"> + <xsl:choose> + <xsl:when test="@OSType='unknown'">Other</xsl:when> +- <xsl:when test="@OSType='dos'">DOS</xsl:when> +- <xsl:when test="@OSType='win31'">Windows31</xsl:when> +- <xsl:when test="@OSType='win95'">Windows95</xsl:when> +- <xsl:when test="@OSType='win98'">Windows98</xsl:when> +- <xsl:when test="@OSType='winme'">WindowsMe</xsl:when> +- <xsl:when test="@OSType='winnt4'">WindowsNT4</xsl:when> +- <xsl:when test="@OSType='win2k'">Windows2000</xsl:when> +- <xsl:when test="@OSType='winxp'">WindowsXP</xsl:when> +- <xsl:when test="@OSType='win2k3'">Windows2003</xsl:when> +- <xsl:when test="@OSType='winvista'">WindowsVista</xsl:when> +- <xsl:when test="@OSType='win2k8'">Windows2008</xsl:when> +- <xsl:when test="@OSType='os2warp3'">OS2Warp3</xsl:when> +- <xsl:when test="@OSType='os2warp4'">OS2Warp4</xsl:when> +- <xsl:when test="@OSType='os2warp45'">OS2Warp45</xsl:when> +- <xsl:when test="@OSType='ecs'">OS2eCS</xsl:when> +- <xsl:when test="@OSType='linux22'">Linux22</xsl:when> +- <xsl:when test="@OSType='linux24'">Linux24</xsl:when> +- <xsl:when test="@OSType='linux26'">Linux26</xsl:when> +- <xsl:when test="@OSType='archlinux'">ArchLinux</xsl:when> +- <xsl:when test="@OSType='debian'">Debian</xsl:when> +- <xsl:when test="@OSType='opensuse'">OpenSUSE</xsl:when> +- <xsl:when test="@OSType='fedoracore'">Fedora</xsl:when> +- <xsl:when test="@OSType='gentoo'">Gentoo</xsl:when> +- <xsl:when test="@OSType='mandriva'">Mandriva</xsl:when> +- <xsl:when test="@OSType='redhat'">RedHat</xsl:when> +- <xsl:when test="@OSType='ubuntu'">Ubuntu</xsl:when> +- <xsl:when test="@OSType='xandros'">Xandros</xsl:when> +- <xsl:when test="@OSType='freebsd'">FreeBSD</xsl:when> +- <xsl:when test="@OSType='openbsd'">OpenBSD</xsl:when> +- <xsl:when test="@OSType='netbsd'">NetBSD</xsl:when> +- <xsl:when test="@OSType='netware'">Netware</xsl:when> +- <xsl:when test="@OSType='solaris'">Solaris</xsl:when> +- <xsl:when test="@OSType='opensolaris'">OpenSolaris</xsl:when> +- <xsl:when test="@OSType='l4'">L4</xsl:when> ++ <xsl:when test="@OSType='gnu'">GNU</xsl:when> ++ <xsl:when test="@OSType='gnuhurd'">GNUHurd</xsl:when> ++ <xsl:when test="@OSType='gnulinux'">GNULinux</xsl:when> ++ <xsl:when test="@OSType='parabola'">Parabola</xsl:when> ++ <xsl:when test="@OSType='gnewsense'">gNewSense</xsl:when> ++ <xsl:when test="@OSType='blag'">Blag</xsl:when> ++ <xsl:when test="@OSType='dragora'">Dragora</xsl:when> ++ <xsl:when test="@OSType='ututo'">Ututo</xsl:when> ++ <xsl:when test="@OSType='musix'">Musix</xsl:when> ++ <xsl:when test="@OSType='trisquel'">Trisquel</xsl:when> ++ <xsl:when test="@OSType='dynebolic'">Dynebolic</xsl:when> ++ <xsl:when test="@OSType='venenux'">Venenux</xsl:when> + </xsl:choose> + </xsl:attribute> + <xsl:apply-templates select="@*[name()!='OSType']" mode="v1.5"/> +--- VirtualBox-4.1.18.orig/src/VBox/Main/xml/VirtualBox-settings-common.xsd 2012-07-25 15:04:37.856003691 -0300 ++++ VirtualBox-4.1.18/src/VBox/Main/xml/VirtualBox-settings-common.xsd 2012-07-25 15:04:37.892668156 -0300 +@@ -137,75 +137,27 @@ + <xsd:simpleType name="TGuestOSType"> + <xsd:restriction base="xsd:string"> + <xsd:enumeration value="Other"/> +- <xsd:enumeration value="DOS"/> +- <xsd:enumeration value="Netware"/> +- <xsd:enumeration value="L4"/> +- <xsd:enumeration value="Windows31"/> +- <xsd:enumeration value="Windows95"/> +- <xsd:enumeration value="Windows98"/> +- <xsd:enumeration value="WindowsMe"/> +- <xsd:enumeration value="WindowsNT4"/> +- <xsd:enumeration value="Windows2000"/> +- <xsd:enumeration value="WindowsXP"/> +- <xsd:enumeration value="WindowsXP_64"/> +- <xsd:enumeration value="Windows2003"/> +- <xsd:enumeration value="Windows2003_64"/> +- <xsd:enumeration value="WindowsVista"/> +- <xsd:enumeration value="WindowsVista_64"/> +- <xsd:enumeration value="Windows2008"/> +- <xsd:enumeration value="Windows2008_64"/> +- <xsd:enumeration value="Windows7"/> +- <xsd:enumeration value="Windows7_64"/> +- <xsd:enumeration value="Windows8"/> +- <xsd:enumeration value="Windows8_64"/> +- <xsd:enumeration value="WindowsNT"/> +- <xsd:enumeration value="OS2Warp3"/> +- <xsd:enumeration value="OS2Warp4"/> +- <xsd:enumeration value="OS2Warp45"/> +- <xsd:enumeration value="OS2eCS"/> +- <xsd:enumeration value="OS2"/> +- <xsd:enumeration value="Linux22"/> +- <xsd:enumeration value="Linux24"/> +- <xsd:enumeration value="Linux24_64"/> +- <xsd:enumeration value="Linux26"/> +- <xsd:enumeration value="Linux26_64"/> +- <xsd:enumeration value="ArchLinux"/> +- <xsd:enumeration value="ArchLinux_64"/> +- <xsd:enumeration value="Debian"/> +- <xsd:enumeration value="Debian_64"/> +- <xsd:enumeration value="OpenSUSE"/> +- <xsd:enumeration value="OpenSUSE_64"/> +- <xsd:enumeration value="Fedora"/> +- <xsd:enumeration value="Fedora_64"/> +- <xsd:enumeration value="Gentoo"/> +- <xsd:enumeration value="Gentoo_64"/> +- <xsd:enumeration value="Mandriva"/> +- <xsd:enumeration value="Mandriva_64"/> +- <xsd:enumeration value="RedHat"/> +- <xsd:enumeration value="RedHat_64"/> +- <xsd:enumeration value="Turbolinux"/> +- <xsd:enumeration value="Turbolinux_64"/> +- <xsd:enumeration value="Ubuntu"/> +- <xsd:enumeration value="Ubuntu_64"/> +- <xsd:enumeration value="Xandros"/> +- <xsd:enumeration value="Xandros_64"/> +- <xsd:enumeration value="Oracle"/> +- <xsd:enumeration value="Oracle_64"/> +- <xsd:enumeration value="Linux"/> +- <xsd:enumeration value="FreeBSD"/> +- <xsd:enumeration value="FreeBSD_64"/> +- <xsd:enumeration value="OpenBSD"/> +- <xsd:enumeration value="OpenBSD_64"/> +- <xsd:enumeration value="NetBSD"/> +- <xsd:enumeration value="NetBSD_64"/> +- <xsd:enumeration value="Solaris"/> +- <xsd:enumeration value="Solaris_64"/> +- <xsd:enumeration value="OpenSolaris"/> +- <xsd:enumeration value="OpenSolaris_64"/> +- <xsd:enumeration value="QNX"/> +- <xsd:enumeration value="MacOS"/> +- <xsd:enumeration value="MacOS_64"/> +- <xsd:enumeration value="JRockitVE"/> ++ <xsd:enumeration value="GNU"/> ++ <xsd:enumeration value="GNU_64"/> ++ <xsd:enumeration value="GNUHurd"/> ++ <xsd:enumeration value="GNULinux"/> ++ <xsd:enumeration value="GNULinux_64"/> ++ <xsd:enumeration value="Parabola"/> ++ <xsd:enumeration value="Parabola_64"/> ++ <xsd:enumeration value="gNewSense"/> ++ <xsd:enumeration value="gNewSense_64"/> ++ <xsd:enumeration value="Blag"/> ++ <xsd:enumeration value="Blag_64"/> ++ <xsd:enumeration value="Dragora"/> ++ <xsd:enumeration value="Dragora_64"/> ++ <xsd:enumeration value="Ututo"/> ++ <xsd:enumeration value="Ututo_64"/> ++ <xsd:enumeration value="Musix"/> ++ <xsd:enumeration value="Musix_64"/> ++ <xsd:enumeration value="Trisquel"/> ++ <xsd:enumeration value="Trisquel_64"/> ++ <xsd:enumeration value="Dynebolic"/> ++ <xsd:enumeration value="Venenux"/> + </xsd:restriction> + </xsd:simpleType> + +--- VirtualBox-4.1.18.orig/src/VBox/Frontends/VirtualBox/VirtualBox2.qrc 2012-07-25 15:40:56.733096866 -0300 ++++ VirtualBox-4.1.18/src/VBox/Frontends/VirtualBox/VirtualBox2.qrc 2012-07-25 15:40:56.796426519 -0300 +@@ -1,75 +1,27 @@ + <!DOCTYPE RCC><RCC version="1.0"> + <qresource prefix="/"> +- <file alias="os_archlinux.png">images/os_archlinux.png</file> +- <file alias="os_archlinux_64.png">images/os_archlinux_64.png</file> +- <file alias="os_debian.png">images/os_debian.png</file> +- <file alias="os_debian_64.png">images/os_debian_64.png</file> +- <file alias="os_dos.png">images/os_dos.png</file> +- <file alias="os_fedora.png">images/os_fedora.png</file> +- <file alias="os_fedora_64.png">images/os_fedora_64.png</file> +- <file alias="os_freebsd.png">images/os_freebsd.png</file> +- <file alias="os_freebsd_64.png">images/os_freebsd_64.png</file> +- <file alias="os_gentoo.png">images/os_gentoo.png</file> +- <file alias="os_gentoo_64.png">images/os_gentoo_64.png</file> +- <file alias="os_jrockitve.png">images/os_jrockitve.png</file> +- <file alias="os_l4.png">images/os_l4.png</file> +- <file alias="os_linux_other.png">images/os_linux_other.png</file> +- <file alias="os_linux22.png">images/os_linux22.png</file> +- <file alias="os_linux24.png">images/os_linux24.png</file> +- <file alias="os_linux24_64.png">images/os_linux24_64.png</file> +- <file alias="os_linux26.png">images/os_linux26.png</file> +- <file alias="os_linux26_64.png">images/os_linux26_64.png</file> +- <file alias="os_mandriva.png">images/os_mandriva.png</file> +- <file alias="os_mandriva_64.png">images/os_mandriva_64.png</file> +- <file alias="os_netbsd.png">images/os_netbsd.png</file> +- <file alias="os_netbsd_64.png">images/os_netbsd_64.png</file> +- <file alias="os_netware.png">images/os_netware.png</file> +- <file alias="os_openbsd.png">images/os_openbsd.png</file> +- <file alias="os_openbsd_64.png">images/os_openbsd_64.png</file> +- <file alias="os_oraclesolaris.png">images/os_oraclesolaris.png</file> +- <file alias="os_oraclesolaris_64.png">images/os_oraclesolaris_64.png</file> +- <file alias="os_opensuse.png">images/os_opensuse.png</file> +- <file alias="os_opensuse_64.png">images/os_opensuse_64.png</file> +- <file alias="os_os2_other.png">images/os_os2_other.png</file> +- <file alias="os_os2ecs.png">images/os_os2ecs.png</file> +- <file alias="os_os2warp3.png">images/os_os2warp3.png</file> +- <file alias="os_os2warp4.png">images/os_os2warp4.png</file> +- <file alias="os_os2warp45.png">images/os_os2warp45.png</file> ++ <file alias="os_parabola.png">images/os_parabola.png</file> ++ <file alias="os_parabola_64.png">images/os_parabola_64.png</file> ++ <file alias="os_gnewsense.png">images/os_gnewsense.png</file> ++ <file alias="os_gnewsense_64.png">images/os_gnewsense_64.png</file> ++ <file alias="os_blag.png">images/os_blag.png</file> ++ <file alias="os_blag_64.png">images/os_blag_64.png</file> ++ <file alias="os_ututo.png">images/os_ututo.png</file> ++ <file alias="os_ututo_64.png">images/os_ututo_64.png</file> ++ <file alias="os_gnu.png">images/os_gnu.png</file> ++ <file alias="os_gnu_64.png">images/os_gnu_64.png</file> ++ <file alias="os_gnuhurd.png">images/os_gnuhurd.png</file> ++ <file alias="os_gnulinux.png">images/os_gnulinux.png</file> ++ <file alias="os_gnulinux_64.png">images/os_gnulinux_64.png</file> ++ <file alias="os_musix.png">images/os_musix.png</file> ++ <file alias="os_musix_64.png">images/os_musix_64.png</file> ++ <file alias="os_dragora.png">images/os_dragora.png</file> ++ <file alias="os_dragora_64.png">images/os_dragora_64.png</file> + <file alias="os_other.png">images/os_other.png</file> +- <file alias="os_qnx.png">images/os_qnx.png</file> +- <file alias="os_redhat.png">images/os_redhat.png</file> +- <file alias="os_redhat_64.png">images/os_redhat_64.png</file> +- <file alias="os_turbolinux.png">images/os_turbolinux.png</file> +- <file alias="os_turbolinux_64.png">images/os_turbolinux_64.png</file> +- <file alias="os_solaris.png">images/os_solaris.png</file> +- <file alias="os_solaris_64.png">images/os_solaris_64.png</file> +- <file alias="os_ubuntu.png">images/os_ubuntu.png</file> +- <file alias="os_ubuntu_64.png">images/os_ubuntu_64.png</file> +- <file alias="os_win_other.png">images/os_win_other.png</file> +- <file alias="os_win2k.png">images/os_win2k.png</file> +- <file alias="os_win2k3.png">images/os_win2k3.png</file> +- <file alias="os_win2k3_64.png">images/os_win2k3_64.png</file> +- <file alias="os_win2k8.png">images/os_win2k8.png</file> +- <file alias="os_win2k8_64.png">images/os_win2k8_64.png</file> +- <file alias="os_win31.png">images/os_win31.png</file> +- <file alias="os_win7.png">images/os_win7.png</file> +- <file alias="os_win7_64.png">images/os_win7_64.png</file> +- <file alias="os_win8.png">images/os_win8.png</file> +- <file alias="os_win8_64.png">images/os_win8_64.png</file> +- <file alias="os_win95.png">images/os_win95.png</file> +- <file alias="os_win98.png">images/os_win98.png</file> +- <file alias="os_winme.png">images/os_winme.png</file> +- <file alias="os_winnt4.png">images/os_winnt4.png</file> +- <file alias="os_winvista.png">images/os_winvista.png</file> +- <file alias="os_winvista_64.png">images/os_winvista_64.png</file> +- <file alias="os_winxp.png">images/os_winxp.png</file> +- <file alias="os_winxp_64.png">images/os_winxp_64.png</file> +- <file alias="os_xandros.png">images/os_xandros.png</file> +- <file alias="os_xandros_64.png">images/os_xandros_64.png</file> +- <file alias="os_oracle.png">images/os_oracle.png</file> +- <file alias="os_oracle_64.png">images/os_oracle_64.png</file> +- <file alias="os_macosx.png">images/os_macosx.png</file> +- <file alias="os_macosx_64.png">images/os_macosx_64.png</file> ++ <file alias="os_dynebolic.png">images/os_dynebolic.png</file> ++ <file alias="os_venenux.png">images/os_venenux.png</file> ++ <file alias="os_trisquel.png">images/os_trisquel.png</file> ++ <file alias="os_trisquel_64.png">images/os_trisquel_64.png</file> + <file alias="hd_16px.png">images/hd_16px.png</file> + <file alias="hd_disabled_16px.png">images/hd_disabled_16px.png</file> + <file alias="hd_32px.png">images/hd_32px.png</file> +--- VirtualBox-4.1.18.orig/src/VBox/Main/src-all/Global.cpp 2012-06-20 10:17:34.000000000 -0300 ++++ VirtualBox-4.1.18/src/VBox/Main/src-all/Global.cpp 2012-07-25 19:32:44.482993976 -0300 +@@ -35,284 +35,90 @@ + VBOXOSTYPE_Unknown, VBOXOSHINT_NONE, + 64, 4, 2 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE, + StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows31, "Windows 3.1", +- VBOXOSTYPE_Win31, VBOXOSHINT_NONE, +- 32, 4, 1 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_SB16 }, +- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows95, "Windows 95", +- VBOXOSTYPE_Win95, VBOXOSHINT_NONE, +- 64, 4, 2 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows98, "Windows 98", +- VBOXOSTYPE_Win98, VBOXOSHINT_NONE, +- 64, 4, 2 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_WindowsMe, "Windows Me", +- VBOXOSTYPE_WinMe, VBOXOSHINT_NONE, +- 64, 4, 4 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_WindowsNT4, "Windows NT 4", +- VBOXOSTYPE_WinNT4, VBOXOSHINT_NONE, +- 128, 16, 2 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows2000, "Windows 2000", +- VBOXOSTYPE_Win2k, VBOXOSHINT_USBTABLET, +- 168, 16, 4 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_WindowsXP, "Windows XP", +- VBOXOSTYPE_WinXP, VBOXOSHINT_USBTABLET, +- 192, 16, 10 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_WindowsXP_64, "Windows XP (64 bit)", +- VBOXOSTYPE_WinXP_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET, +- 192, 16, 10 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows2003, "Windows 2003", +- VBOXOSTYPE_Win2k3, VBOXOSHINT_USBTABLET, +- 256, 16, 20 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows2003_64, "Windows 2003 (64 bit)", +- VBOXOSTYPE_Win2k3_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET, +- 256, 16, 20 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_HDA }, +- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_WindowsVista, "Windows Vista", +- VBOXOSTYPE_WinVista, VBOXOSHINT_USBTABLET, +- 512, 16, 25 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA }, +- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_WindowsVista_64, "Windows Vista (64 bit)", +- VBOXOSTYPE_WinVista_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET, +- 512, 16, 25 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA }, +- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows2008, "Windows 2008", +- VBOXOSTYPE_Win2k8, VBOXOSHINT_USBTABLET, +- 512, 16, 25 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA }, +- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows2008_64, "Windows 2008 (64 bit)", +- VBOXOSTYPE_Win2k8_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET, +- 512, 16, 25 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA }, +- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows7, "Windows 7", +- VBOXOSTYPE_Win7, VBOXOSHINT_USBTABLET, +- 512, 16, 25 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA }, +- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows7_64, "Windows 7 (64 bit)", +- VBOXOSTYPE_Win7_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET, +- 512, 16, 25 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA }, +- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows8, "Windows 8", +- VBOXOSTYPE_Win8, VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET | VBOXOSHINT_PAE, +- 1024,128, 25 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA }, +- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows8_64, "Windows 8 (64 bit)", +- VBOXOSTYPE_Win8_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET, +- 1536,128, 25 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA }, +- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_WindowsNT, "Other Windows", +- VBOXOSTYPE_WinNT, VBOXOSHINT_NONE, +- 512, 16, 20 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Linux22, "Linux 2.2", +- VBOXOSTYPE_Linux22, VBOXOSHINT_RTCUTC, +- 64, 4, 2 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Linux24, "Linux 2.4", +- VBOXOSTYPE_Linux24, VBOXOSHINT_RTCUTC, +- 128, 4, 4 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Linux24_64, "Linux 2.4 (64 bit)", +- VBOXOSTYPE_Linux24_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC, +- 128, 4, 4 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, ++ { "GNU", "GNU", SchemaDefs_OSTypeId_GNU, "GNU", ++ VBOXOSTYPE_GNU, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, ++ 256, 4, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, ++ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, ++ { "GNU", "GNU", SchemaDefs_OSTypeId_GNU_64, "GNU (64 bit)", ++ VBOXOSTYPE_GNU_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, ++ 256, 4, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, ++ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, ++ { "GNU-Hurd", "GNU-Hurd", SchemaDefs_OSTypeId_GNUHurd, "GNU-Hurd", ++ VBOXOSTYPE_GNUHurd, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, ++ 256, 4, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, + StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Linux26, "Linux 2.6", +- VBOXOSTYPE_Linux26, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, ++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_GNULinux, "GNU/Linux", ++ VBOXOSTYPE_GNULinux, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, + 256, 4, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, + StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Linux26_64, "Linux 2.6 (64 bit)", +- VBOXOSTYPE_Linux26_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, ++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_GNULinux_64, "GNU/Linux (64 bit)", ++ VBOXOSTYPE_GNULinux_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, + 256, 4, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, + StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_ArchLinux, "Arch Linux", +- VBOXOSTYPE_ArchLinux, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, ++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Parabola, "Parabola GNU/Linux-libre", ++ VBOXOSTYPE_Parabola, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, + 256, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, + StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_ArchLinux_64, "Arch Linux (64 bit)", +- VBOXOSTYPE_ArchLinux_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, ++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Parabola_64, "Parabola GNU/Linux-libre (64 bit)", ++ VBOXOSTYPE_Parabola_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, + 256, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, + StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Debian, "Debian", +- VBOXOSTYPE_Debian, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, ++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_gNewSense, "gNewSense", ++ VBOXOSTYPE_gNewSense, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, + 384, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, + StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Debian_64, "Debian (64 bit)", +- VBOXOSTYPE_Debian_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, ++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_gNewSense_64, "gNewSense (64 bit)", ++ VBOXOSTYPE_gNewSense_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, + 384, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, + StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97}, +- { "Linux", "Linux", SchemaDefs_OSTypeId_OpenSUSE, "openSUSE", +- VBOXOSTYPE_OpenSUSE, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, +- 512, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_OpenSUSE_64, "openSUSE (64 bit)", +- VBOXOSTYPE_OpenSUSE_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, +- 512, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Fedora, "Fedora", +- VBOXOSTYPE_FedoraCore, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, ++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Blag, "Blag Linux and GNU", ++ VBOXOSTYPE_Blag, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, + 768, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, + StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Fedora_64, "Fedora (64 bit)", +- VBOXOSTYPE_FedoraCore_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, ++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Blag_64, "Blag Linux and GNU (64 bit)", ++ VBOXOSTYPE_Blag_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, + 768, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, + StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Gentoo, "Gentoo", +- VBOXOSTYPE_Gentoo, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, ++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Dragora, "Dragora", ++ VBOXOSTYPE_Dragora, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, + 256, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, + StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Gentoo_64, "Gentoo (64 bit)", +- VBOXOSTYPE_Gentoo_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, ++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Dragora_64, "Dragora (64 bit)", ++ VBOXOSTYPE_Dragora_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, + 256, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, + StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Mandriva, "Mandriva", +- VBOXOSTYPE_Mandriva, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, +- 512, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Mandriva_64, "Mandriva (64 bit)", +- VBOXOSTYPE_Mandriva_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, +- 512, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_RedHat, "Red Hat", +- VBOXOSTYPE_RedHat, VBOXOSHINT_RTCUTC | VBOXOSHINT_PAE, +- 512, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, ++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Ututo, "Ututo XS", ++ VBOXOSTYPE_Ututo, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, ++ 256, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, + StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_RedHat_64, "Red Hat (64 bit)", +- VBOXOSTYPE_RedHat_x64, VBOXOSHINT_64BIT | VBOXOSHINT_PAE | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC, +- 512, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, ++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Ututo_64, "Ututo XS (64 bit)", ++ VBOXOSTYPE_Ututo_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, ++ 256, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, + StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Turbolinux, "Turbolinux", +- VBOXOSTYPE_Turbolinux, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, ++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Musix, "Musix", ++ VBOXOSTYPE_Musix, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, + 384, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, + StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Turbolinux, "Turbolinux (64 bit)", +- VBOXOSTYPE_Turbolinux_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, ++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Musix_64, "Musix (64 bit)", ++ VBOXOSTYPE_Musix_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, + 384, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Ubuntu, "Ubuntu", +- VBOXOSTYPE_Ubuntu, VBOXOSHINT_RTCUTC | VBOXOSHINT_PAE | VBOXOSHINT_USBTABLET, ++ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97}, ++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Trisquel, "Trisquel", ++ VBOXOSTYPE_Trisquel, VBOXOSHINT_RTCUTC | VBOXOSHINT_PAE | VBOXOSHINT_USBTABLET, + 512, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, + StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Ubuntu_64, "Ubuntu (64 bit)", +- VBOXOSTYPE_Ubuntu_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, ++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Trisquel_64, "Trisquel (64 bit)", ++ VBOXOSTYPE_Trisquel_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, + 512, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, + StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Xandros, "Xandros", +- VBOXOSTYPE_Xandros, VBOXOSHINT_RTCUTC, +- 256, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Xandros_64, "Xandros (64 bit)", +- VBOXOSTYPE_Xandros_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC, +- 256, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Oracle, "Oracle", +- VBOXOSTYPE_Oracle, VBOXOSHINT_RTCUTC | VBOXOSHINT_PAE, +- 512, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, ++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Dynebolic, "Dyne:bolic", ++ VBOXOSTYPE_Dynebolic, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, ++ 256, 4, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, + StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Oracle_64, "Oracle (64 bit)", +- VBOXOSTYPE_Oracle_x64, VBOXOSHINT_64BIT | VBOXOSHINT_PAE | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC, +- 512, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, ++ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Venenux, "Venenux", ++ VBOXOSTYPE_Venenux, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, ++ 384, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, + StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Linux", "Linux", SchemaDefs_OSTypeId_Linux, "Other Linux", +- VBOXOSTYPE_Linux, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, +- 256, 12, 8 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Solaris", "Solaris", SchemaDefs_OSTypeId_Solaris, "Oracle Solaris 10 5/09 and earlier", +- VBOXOSTYPE_Solaris, VBOXOSHINT_NONE, +- 768, 12, 16 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Solaris", "Solaris", SchemaDefs_OSTypeId_Solaris_64, "Oracle Solaris 10 5/09 and earlier (64 bit)", +- VBOXOSTYPE_Solaris_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC, +- 1536, 12, 16 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Solaris", "Solaris", SchemaDefs_OSTypeId_OpenSolaris, "Oracle Solaris 10 10/09 and later", +- VBOXOSTYPE_OpenSolaris, VBOXOSHINT_USBTABLET, +- 768, 12, 16 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_IntelAhci, StorageBus_SATA, +- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Solaris", "Solaris", SchemaDefs_OSTypeId_OpenSolaris_64, "Oracle Solaris 10 10/09 and later (64 bit)", +- VBOXOSTYPE_OpenSolaris_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET, +- 1536, 12, 16 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_IntelAhci, StorageBus_SATA, +- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "BSD", "BSD", SchemaDefs_OSTypeId_FreeBSD, "FreeBSD", +- VBOXOSTYPE_FreeBSD, VBOXOSHINT_NONE, +- 128, 4, 2 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "BSD", "BSD", SchemaDefs_OSTypeId_FreeBSD_64, "FreeBSD (64 bit)", +- VBOXOSTYPE_FreeBSD_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC, +- 128, 4, 2 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "BSD", "BSD", SchemaDefs_OSTypeId_OpenBSD, "OpenBSD", +- VBOXOSTYPE_OpenBSD, VBOXOSHINT_HWVIRTEX, +- 64, 4, 2 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "BSD", "BSD", SchemaDefs_OSTypeId_OpenBSD_64, "OpenBSD (64 bit)", +- VBOXOSTYPE_OpenBSD_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC, +- 64, 4, 2 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "BSD", "BSD", SchemaDefs_OSTypeId_NetBSD, "NetBSD", +- VBOXOSTYPE_NetBSD, VBOXOSHINT_NONE, +- 64, 4, 2 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "BSD", "BSD", SchemaDefs_OSTypeId_NetBSD_64, "NetBSD (64 bit)", +- VBOXOSTYPE_NetBSD_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC, +- 64, 4, 2 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "OS2", "IBM OS/2", SchemaDefs_OSTypeId_OS2Warp3, "OS/2 Warp 3", +- VBOXOSTYPE_OS2Warp3, VBOXOSHINT_HWVIRTEX, +- 48, 4, 1 * _1G64, NetworkAdapterType_Am79C973, 1, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "OS2", "IBM OS/2", SchemaDefs_OSTypeId_OS2Warp4, "OS/2 Warp 4", +- VBOXOSTYPE_OS2Warp4, VBOXOSHINT_HWVIRTEX, +- 64, 4, 2 * _1G64, NetworkAdapterType_Am79C973, 1, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "OS2", "IBM OS/2", SchemaDefs_OSTypeId_OS2Warp45, "OS/2 Warp 4.5", +- VBOXOSTYPE_OS2Warp45, VBOXOSHINT_HWVIRTEX, +- 96, 4, 2 * _1G64, NetworkAdapterType_Am79C973, 1, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "OS2", "IBM OS/2", SchemaDefs_OSTypeId_OS2eCS, "eComStation", +- VBOXOSTYPE_ECS, VBOXOSHINT_HWVIRTEX, +- 96, 4, 2 * _1G64, NetworkAdapterType_Am79C973, 1, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "OS2", "IBM OS/2", SchemaDefs_OSTypeId_OS2, "Other OS/2", +- VBOXOSTYPE_OS2, VBOXOSHINT_HWVIRTEX, +- 96, 4, 2 * _1G64, NetworkAdapterType_Am79C973, 1, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "MacOS", "Mac OS X", SchemaDefs_OSTypeId_MacOS, "Mac OS X Server", +- VBOXOSTYPE_MacOS, VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_EFI | VBOXOSHINT_PAE | VBOXOSHINT_USBHID | VBOXOSHINT_HPET | VBOXOSHINT_USBTABLET, +- 1024, 4, 20 * _1G64, NetworkAdapterType_I82543GC, 0, +- StorageControllerType_ICH6, StorageBus_IDE, StorageControllerType_IntelAhci, StorageBus_SATA, +- ChipsetType_ICH9, AudioControllerType_HDA }, +- { "MacOS", "Mac OS X", SchemaDefs_OSTypeId_MacOS_64, "Mac OS X Server (64 bit)", +- VBOXOSTYPE_MacOS_x64, VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_EFI | VBOXOSHINT_PAE | VBOXOSHINT_64BIT | VBOXOSHINT_USBHID | VBOXOSHINT_HPET | VBOXOSHINT_USBTABLET, +- 1024, 4, 20 * _1G64, NetworkAdapterType_I82543GC, 0, +- StorageControllerType_ICH6, StorageBus_IDE, StorageControllerType_IntelAhci, StorageBus_SATA, +- ChipsetType_ICH9, AudioControllerType_HDA }, +- { "Other", "Other", SchemaDefs_OSTypeId_DOS, "DOS", +- VBOXOSTYPE_DOS, VBOXOSHINT_NONE, +- 32, 4, 500 * _1M, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_SB16 }, +- { "Other", "Other", SchemaDefs_OSTypeId_Netware, "Netware", +- VBOXOSTYPE_Netware, VBOXOSHINT_HWVIRTEX, +- 512, 4, 4 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Other", "Other", SchemaDefs_OSTypeId_L4, "L4", +- VBOXOSTYPE_L4, VBOXOSHINT_NONE, +- 64, 4, 2 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Other", "Other", SchemaDefs_OSTypeId_QNX, "QNX", +- VBOXOSTYPE_QNX, VBOXOSHINT_HWVIRTEX, +- 512, 4, 4 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, +- { "Other", "Other", SchemaDefs_OSTypeId_JRockitVE, "JRockitVE", +- VBOXOSTYPE_JRockitVE, VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_PAE, +- 1024, 4, 8 * _1G64, NetworkAdapterType_I82545EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, +- StorageControllerType_BusLogic, StorageBus_SCSI, ChipsetType_PIIX3, AudioControllerType_AC97 }, + }; + + /** +--- VirtualBox-4.1.18.orig/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp 2012-07-25 21:44:01.290876720 -0300 ++++ VirtualBox-4.1.18/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp 2012-07-25 22:00:57.819380802 -0300 +@@ -4875,75 +4875,27 @@ + static const char *kOSTypeIcons [][2] = + { + {"Other", ":/os_other.png"}, +- {"DOS", ":/os_dos.png"}, +- {"Netware", ":/os_netware.png"}, +- {"L4", ":/os_l4.png"}, +- {"Windows31", ":/os_win31.png"}, +- {"Windows95", ":/os_win95.png"}, +- {"Windows98", ":/os_win98.png"}, +- {"WindowsMe", ":/os_winme.png"}, +- {"WindowsNT4", ":/os_winnt4.png"}, +- {"Windows2000", ":/os_win2k.png"}, +- {"WindowsXP", ":/os_winxp.png"}, +- {"WindowsXP_64", ":/os_winxp_64.png"}, +- {"Windows2003", ":/os_win2k3.png"}, +- {"Windows2003_64", ":/os_win2k3_64.png"}, +- {"WindowsVista", ":/os_winvista.png"}, +- {"WindowsVista_64", ":/os_winvista_64.png"}, +- {"Windows2008", ":/os_win2k8.png"}, +- {"Windows2008_64", ":/os_win2k8_64.png"}, +- {"Windows7", ":/os_win7.png"}, +- {"Windows7_64", ":/os_win7_64.png"}, +- {"Windows8", ":/os_win8.png"}, +- {"Windows8_64", ":/os_win8_64.png"}, +- {"WindowsNT", ":/os_win_other.png"}, +- {"OS2Warp3", ":/os_os2warp3.png"}, +- {"OS2Warp4", ":/os_os2warp4.png"}, +- {"OS2Warp45", ":/os_os2warp45.png"}, +- {"OS2eCS", ":/os_os2ecs.png"}, +- {"OS2", ":/os_os2_other.png"}, +- {"Linux22", ":/os_linux22.png"}, +- {"Linux24", ":/os_linux24.png"}, +- {"Linux24_64", ":/os_linux24_64.png"}, +- {"Linux26", ":/os_linux26.png"}, +- {"Linux26_64", ":/os_linux26_64.png"}, +- {"ArchLinux", ":/os_archlinux.png"}, +- {"ArchLinux_64", ":/os_archlinux_64.png"}, +- {"Debian", ":/os_debian.png"}, +- {"Debian_64", ":/os_debian_64.png"}, +- {"OpenSUSE", ":/os_opensuse.png"}, +- {"OpenSUSE_64", ":/os_opensuse_64.png"}, +- {"Fedora", ":/os_fedora.png"}, +- {"Fedora_64", ":/os_fedora_64.png"}, +- {"Gentoo", ":/os_gentoo.png"}, +- {"Gentoo_64", ":/os_gentoo_64.png"}, +- {"Mandriva", ":/os_mandriva.png"}, +- {"Mandriva_64", ":/os_mandriva_64.png"}, +- {"RedHat", ":/os_redhat.png"}, +- {"RedHat_64", ":/os_redhat_64.png"}, +- {"Turbolinux", ":/os_turbolinux.png"}, +- {"Turbolinux_64", ":/os_turbolinux_64.png"}, +- {"Ubuntu", ":/os_ubuntu.png"}, +- {"Ubuntu_64", ":/os_ubuntu_64.png"}, +- {"Xandros", ":/os_xandros.png"}, +- {"Xandros_64", ":/os_xandros_64.png"}, +- {"Oracle", ":/os_oracle.png"}, +- {"Oracle_64", ":/os_oracle_64.png"}, +- {"Linux", ":/os_linux_other.png"}, +- {"FreeBSD", ":/os_freebsd.png"}, +- {"FreeBSD_64", ":/os_freebsd_64.png"}, +- {"OpenBSD", ":/os_openbsd.png"}, +- {"OpenBSD_64", ":/os_openbsd_64.png"}, +- {"NetBSD", ":/os_netbsd.png"}, +- {"NetBSD_64", ":/os_netbsd_64.png"}, +- {"Solaris", ":/os_solaris.png"}, +- {"Solaris_64", ":/os_solaris_64.png"}, +- {"OpenSolaris", ":/os_oraclesolaris.png"}, +- {"OpenSolaris_64", ":/os_oraclesolaris_64.png"}, +- {"QNX", ":/os_qnx.png"}, +- {"MacOS", ":/os_macosx.png"}, +- {"MacOS_64", ":/os_macosx_64.png"}, +- {"JRockitVE", ":/os_jrockitve.png"}, ++ {"GNU", ":/os_gnu.png"}, ++ {"GNU_64", ":/os_gnu_64.png"}, ++ {"GNUHurd", ":/os_gnuhurd.png"}, ++ {"GNULinux", ":/os_gnulinux.png"}, ++ {"GNULinux_64", ":/os_gnulinux_64.png"}, ++ {"Parabola", ":/os_parabola.png"}, ++ {"Parabola_64", ":/os_parabola_64.png"}, ++ {"gNewSense", ":/os_gnewsense.png"}, ++ {"gNewSense_64", ":/os_gnewsense_64.png"}, ++ {"Blag", ":/os_blag.png"}, ++ {"Blag_64", ":/os_blag_64.png"}, ++ {"Dragora", ":/os_dragora.png"}, ++ {"Dragora_64", ":/os_dragora_64.png"}, ++ {"Ututo", ":/os_ututo.png"}, ++ {"Ututo_64", ":/os_ututo_64.png"}, ++ {"Musix", ":/os_musix.png"}, ++ {"Musix_64", ":/os_musix_64.png"}, ++ {"Trisquel", ":/os_trisquel.png"}, ++ {"Trisquel_64", ":/os_trisquel_64.png"}, ++ {"Dynebolic", ":/os_dynebolic.png"}, ++ {"Venenux", ":/os_venenux.png"}, + }; + for (uint n = 0; n < SIZEOF_ARRAY (kOSTypeIcons); ++ n) + { +--- VirtualBox-4.1.18.orig/src/VBox/Frontends/VirtualBox/src/widgets/VBoxOSTypeSelectorWidget.cpp.orig 2012-06-20 10:16:38.000000000 -0300 ++++ VirtualBox-4.1.18/src/VBox/Frontends/VirtualBox/src/widgets/VBoxOSTypeSelectorWidget.cpp 2012-07-25 22:07:51.232436783 -0300 +@@ -192,17 +192,10 @@ + if (typeIndex != -1) + mCbType->setCurrentIndex (typeIndex); + } +- /* Or select WinXP item for Windows family as default */ +- else if (familyId == "Windows") ++ /* Or select Parabola GNU/Linux-libre item for GNU/Linux family as default */ ++ else if (familyId == "GNU/Linux") + { +- int xpIndex = mCbType->findData ("WindowsXP", RoleTypeID); +- if (xpIndex != -1) +- mCbType->setCurrentIndex (xpIndex); +- } +- /* Or select Ubuntu item for Linux family as default */ +- else if (familyId == "Linux") +- { +- int ubIndex = mCbType->findData ("Ubuntu", RoleTypeID); ++ int ubIndex = mCbType->findData ("Parabola", RoleTypeID); + if (ubIndex != -1) + mCbType->setCurrentIndex (ubIndex); + } +--- VirtualBox-4.1.18.orig/include/VBox/ostypes.h 2012-06-20 10:07:51.000000000 -0300 ++++ VirtualBox-4.1.18/include/VBox/ostypes.h 2012-07-25 23:20:57.322757456 -0300 +@@ -43,77 +43,27 @@ + typedef enum VBOXOSTYPE + { + VBOXOSTYPE_Unknown = 0, +- VBOXOSTYPE_DOS = 0x10000, +- VBOXOSTYPE_Win31 = 0x15000, +- VBOXOSTYPE_Win9x = 0x20000, +- VBOXOSTYPE_Win95 = 0x21000, +- VBOXOSTYPE_Win98 = 0x22000, +- VBOXOSTYPE_WinMe = 0x23000, +- VBOXOSTYPE_WinNT = 0x30000, +- VBOXOSTYPE_WinNT4 = 0x31000, +- VBOXOSTYPE_Win2k = 0x32000, +- VBOXOSTYPE_WinXP = 0x33000, +- VBOXOSTYPE_WinXP_x64 = 0x33100, +- VBOXOSTYPE_Win2k3 = 0x34000, +- VBOXOSTYPE_Win2k3_x64 = 0x34100, +- VBOXOSTYPE_WinVista = 0x35000, +- VBOXOSTYPE_WinVista_x64 = 0x35100, +- VBOXOSTYPE_Win2k8 = 0x36000, +- VBOXOSTYPE_Win2k8_x64 = 0x36100, +- VBOXOSTYPE_Win7 = 0x37000, +- VBOXOSTYPE_Win7_x64 = 0x37100, +- VBOXOSTYPE_Win8 = 0x38000, +- VBOXOSTYPE_Win8_x64 = 0x38100, +- VBOXOSTYPE_OS2 = 0x40000, +- VBOXOSTYPE_OS2Warp3 = 0x41000, +- VBOXOSTYPE_OS2Warp4 = 0x42000, +- VBOXOSTYPE_OS2Warp45 = 0x43000, +- VBOXOSTYPE_ECS = 0x44000, +- VBOXOSTYPE_Linux = 0x50000, +- VBOXOSTYPE_Linux_x64 = 0x50100, +- VBOXOSTYPE_Linux22 = 0x51000, +- VBOXOSTYPE_Linux24 = 0x52000, +- VBOXOSTYPE_Linux24_x64 = 0x52100, +- VBOXOSTYPE_Linux26 = 0x53000, +- VBOXOSTYPE_Linux26_x64 = 0x53100, +- VBOXOSTYPE_ArchLinux = 0x54000, +- VBOXOSTYPE_ArchLinux_x64 = 0x54100, +- VBOXOSTYPE_Debian = 0x55000, +- VBOXOSTYPE_Debian_x64 = 0x55100, +- VBOXOSTYPE_OpenSUSE = 0x56000, +- VBOXOSTYPE_OpenSUSE_x64 = 0x56100, +- VBOXOSTYPE_FedoraCore = 0x57000, +- VBOXOSTYPE_FedoraCore_x64 = 0x57100, +- VBOXOSTYPE_Gentoo = 0x58000, +- VBOXOSTYPE_Gentoo_x64 = 0x58100, +- VBOXOSTYPE_Mandriva = 0x59000, +- VBOXOSTYPE_Mandriva_x64 = 0x59100, +- VBOXOSTYPE_RedHat = 0x5A000, +- VBOXOSTYPE_RedHat_x64 = 0x5A100, +- VBOXOSTYPE_Turbolinux = 0x5B000, +- VBOXOSTYPE_Turbolinux_x64 = 0x5B100, +- VBOXOSTYPE_Ubuntu = 0x5C000, +- VBOXOSTYPE_Ubuntu_x64 = 0x5C100, +- VBOXOSTYPE_Xandros = 0x5D000, +- VBOXOSTYPE_Xandros_x64 = 0x5D100, +- VBOXOSTYPE_Oracle = 0x5E000, +- VBOXOSTYPE_Oracle_x64 = 0x5E100, +- VBOXOSTYPE_FreeBSD = 0x60000, +- VBOXOSTYPE_FreeBSD_x64 = 0x60100, +- VBOXOSTYPE_OpenBSD = 0x61000, +- VBOXOSTYPE_OpenBSD_x64 = 0x61100, +- VBOXOSTYPE_NetBSD = 0x62000, +- VBOXOSTYPE_NetBSD_x64 = 0x62100, +- VBOXOSTYPE_Netware = 0x70000, +- VBOXOSTYPE_Solaris = 0x80000, +- VBOXOSTYPE_Solaris_x64 = 0x80100, +- VBOXOSTYPE_OpenSolaris = 0x81000, +- VBOXOSTYPE_OpenSolaris_x64 = 0x81100, +- VBOXOSTYPE_L4 = 0x90000, +- VBOXOSTYPE_QNX = 0xA0000, +- VBOXOSTYPE_MacOS = 0xB0000, +- VBOXOSTYPE_MacOS_x64 = 0xB0100, +- VBOXOSTYPE_JRockitVE = 0xC0000, ++ VBOXOSTYPE_GNU = 0x10000, ++ VBOXOSTYPE_GNU_x64 = 0x10100, ++ VBOXOSTYPE_GNUHurd = 0x20000, ++ VBOXOSTYPE_GNULinux = 0x30000, ++ VBOXOSTYPE_GNULinux_x64 = 0x30100, ++ VBOXOSTYPE_Parabola = 0x31000, ++ VBOXOSTYPE_Parabola_x64 = 0x31100, ++ VBOXOSTYPE_gNewSense = 0x32000, ++ VBOXOSTYPE_gNewSense_x64 = 0x32100, ++ VBOXOSTYPE_Blag = 0x33000, ++ VBOXOSTYPE_Blag_x64 = 0x33100, ++ VBOXOSTYPE_Dragora = 0x34000, ++ VBOXOSTYPE_Dragora_x64 = 0x34100, ++ VBOXOSTYPE_Ututo = 0x35000, ++ VBOXOSTYPE_Ututo_x64 = 0x35100, ++ VBOXOSTYPE_Musix = 0x36000, ++ VBOXOSTYPE_Musix_x64 = 0x36100, ++ VBOXOSTYPE_Trisquel = 0x37000, ++ VBOXOSTYPE_Trisquel_x64 = 0x37100, ++ VBOXOSTYPE_Dynebolic = 0x38000, ++ VBOXOSTYPE_Venenux = 0x39000, + /** The bit number which indicates 64-bit or 32-bit. */ + #define VBOXOSTYPE_x64_BIT 8 + /** The mask which indicates 64-bit. */ +@@ -129,16 +79,11 @@ + typedef enum VBOXOSFAMILY + { + VBOXOSFAMILY_Unknown = 0, +- VBOXOSFAMILY_Windows32 = 1, +- VBOXOSFAMILY_Windows64 = 2, +- VBOXOSFAMILY_Linux32 = 3, +- VBOXOSFAMILY_Linux64 = 4, +- VBOXOSFAMILY_FreeBSD32 = 5, +- VBOXOSFAMILY_FreeBSD64 = 6, +- VBOXOSFAMILY_Solaris32 = 7, +- VBOXOSFAMILY_Solaris64 = 8, +- VBOXOSFAMILY_MacOSX32 = 9, +- VBOXOSFAMILY_MacOSX64 = 10, ++ VBOXOSFAMILY_GNU32 = 1, ++ VBOXOSFAMILY_GNU64 = 2, ++ VBOXOSFAMILY_GNUHurd = 3, ++ VBOXOSFAMILY_GNULinux32 = 4, ++ VBOXOSFAMILY_GNULinux64 = 5, + /** The usual 32-bit hack. */ + VBOXOSFAMILY_32BIT_HACK = 0x7fffffff + } VBOXOSFAMILY; +--- VirtualBox-4.1.18.orig/src/VBox/Main/src-server/ApplianceImpl.cpp 2012-06-20 10:17:35.000000000 -0300 ++++ VirtualBox-4.1.18/src/VBox/Main/src-server/ApplianceImpl.cpp 2012-07-26 01:28:50.033551279 -0300 +@@ -49,94 +49,33 @@ + g_osTypes[] = + { + { ovf::CIMOSType_CIMOS_Unknown, SchemaDefs_OSTypeId_Other }, +- { ovf::CIMOSType_CIMOS_OS2, SchemaDefs_OSTypeId_OS2 }, +- { ovf::CIMOSType_CIMOS_OS2, SchemaDefs_OSTypeId_OS2Warp3 }, +- { ovf::CIMOSType_CIMOS_OS2, SchemaDefs_OSTypeId_OS2Warp4 }, +- { ovf::CIMOSType_CIMOS_OS2, SchemaDefs_OSTypeId_OS2Warp45 }, +- { ovf::CIMOSType_CIMOS_MSDOS, SchemaDefs_OSTypeId_DOS }, +- { ovf::CIMOSType_CIMOS_WIN3x, SchemaDefs_OSTypeId_Windows31 }, +- { ovf::CIMOSType_CIMOS_WIN95, SchemaDefs_OSTypeId_Windows95 }, +- { ovf::CIMOSType_CIMOS_WIN98, SchemaDefs_OSTypeId_Windows98 }, +- { ovf::CIMOSType_CIMOS_WINNT, SchemaDefs_OSTypeId_WindowsNT }, +- { ovf::CIMOSType_CIMOS_WINNT, SchemaDefs_OSTypeId_WindowsNT4 }, +- { ovf::CIMOSType_CIMOS_NetWare, SchemaDefs_OSTypeId_Netware }, +- { ovf::CIMOSType_CIMOS_NovellOES, SchemaDefs_OSTypeId_Netware }, +- { ovf::CIMOSType_CIMOS_Solaris, SchemaDefs_OSTypeId_Solaris }, +- { ovf::CIMOSType_CIMOS_SunOS, SchemaDefs_OSTypeId_Solaris }, +- { ovf::CIMOSType_CIMOS_FreeBSD, SchemaDefs_OSTypeId_FreeBSD }, +- { ovf::CIMOSType_CIMOS_NetBSD, SchemaDefs_OSTypeId_NetBSD }, +- { ovf::CIMOSType_CIMOS_QNX, SchemaDefs_OSTypeId_QNX }, +- { ovf::CIMOSType_CIMOS_Windows2000, SchemaDefs_OSTypeId_Windows2000 }, +- { ovf::CIMOSType_CIMOS_WindowsMe, SchemaDefs_OSTypeId_WindowsMe }, +- { ovf::CIMOSType_CIMOS_OpenBSD, SchemaDefs_OSTypeId_OpenBSD }, +- { ovf::CIMOSType_CIMOS_WindowsXP, SchemaDefs_OSTypeId_WindowsXP }, +- { ovf::CIMOSType_CIMOS_WindowsXPEmbedded, SchemaDefs_OSTypeId_WindowsXP }, +- { ovf::CIMOSType_CIMOS_WindowsEmbeddedforPointofService, SchemaDefs_OSTypeId_WindowsXP }, +- { ovf::CIMOSType_CIMOS_MicrosoftWindowsServer2003, SchemaDefs_OSTypeId_Windows2003 }, +- { ovf::CIMOSType_CIMOS_MicrosoftWindowsServer2003_64, SchemaDefs_OSTypeId_Windows2003_64 }, +- { ovf::CIMOSType_CIMOS_WindowsXP_64, SchemaDefs_OSTypeId_WindowsXP_64 }, +- { ovf::CIMOSType_CIMOS_WindowsVista, SchemaDefs_OSTypeId_WindowsVista }, +- { ovf::CIMOSType_CIMOS_WindowsVista_64, SchemaDefs_OSTypeId_WindowsVista_64 }, +- { ovf::CIMOSType_CIMOS_MicrosoftWindowsServer2008, SchemaDefs_OSTypeId_Windows2008 }, +- { ovf::CIMOSType_CIMOS_MicrosoftWindowsServer2008_64, SchemaDefs_OSTypeId_Windows2008_64 }, +- { ovf::CIMOSType_CIMOS_FreeBSD_64, SchemaDefs_OSTypeId_FreeBSD_64 }, +- { ovf::CIMOSType_CIMOS_MACOS, SchemaDefs_OSTypeId_MacOS }, +- { ovf::CIMOSType_CIMOS_MACOS, SchemaDefs_OSTypeId_MacOS_64 }, // there is no CIM 64-bit type for this +- +- // Linuxes +- { ovf::CIMOSType_CIMOS_RedHatEnterpriseLinux, SchemaDefs_OSTypeId_RedHat }, +- { ovf::CIMOSType_CIMOS_RedHatEnterpriseLinux_64, SchemaDefs_OSTypeId_RedHat_64 }, +- { ovf::CIMOSType_CIMOS_Solaris_64, SchemaDefs_OSTypeId_Solaris_64 }, +- { ovf::CIMOSType_CIMOS_SUSE, SchemaDefs_OSTypeId_OpenSUSE }, +- { ovf::CIMOSType_CIMOS_SLES, SchemaDefs_OSTypeId_OpenSUSE }, +- { ovf::CIMOSType_CIMOS_NovellLinuxDesktop, SchemaDefs_OSTypeId_OpenSUSE }, +- { ovf::CIMOSType_CIMOS_SUSE_64, SchemaDefs_OSTypeId_OpenSUSE_64 }, +- { ovf::CIMOSType_CIMOS_SLES_64, SchemaDefs_OSTypeId_OpenSUSE_64 }, +- { ovf::CIMOSType_CIMOS_LINUX, SchemaDefs_OSTypeId_Linux }, +- { ovf::CIMOSType_CIMOS_LINUX, SchemaDefs_OSTypeId_Linux22 }, +- { ovf::CIMOSType_CIMOS_SunJavaDesktopSystem, SchemaDefs_OSTypeId_Linux }, +- { ovf::CIMOSType_CIMOS_TurboLinux, SchemaDefs_OSTypeId_Turbolinux }, +- { ovf::CIMOSType_CIMOS_TurboLinux_64, SchemaDefs_OSTypeId_Turbolinux_64 }, +- { ovf::CIMOSType_CIMOS_Mandriva, SchemaDefs_OSTypeId_Mandriva }, +- { ovf::CIMOSType_CIMOS_Mandriva_64, SchemaDefs_OSTypeId_Mandriva_64 }, +- { ovf::CIMOSType_CIMOS_Ubuntu, SchemaDefs_OSTypeId_Ubuntu }, +- { ovf::CIMOSType_CIMOS_Ubuntu_64, SchemaDefs_OSTypeId_Ubuntu_64 }, +- { ovf::CIMOSType_CIMOS_Debian, SchemaDefs_OSTypeId_Debian }, +- { ovf::CIMOSType_CIMOS_Debian_64, SchemaDefs_OSTypeId_Debian_64 }, +- { ovf::CIMOSType_CIMOS_Linux_2_4_x, SchemaDefs_OSTypeId_Linux24 }, +- { ovf::CIMOSType_CIMOS_Linux_2_4_x_64, SchemaDefs_OSTypeId_Linux24_64 }, +- { ovf::CIMOSType_CIMOS_Linux_2_6_x, SchemaDefs_OSTypeId_Linux26 }, +- { ovf::CIMOSType_CIMOS_Linux_2_6_x_64, SchemaDefs_OSTypeId_Linux26_64 }, +- { ovf::CIMOSType_CIMOS_Linux_64, SchemaDefs_OSTypeId_Linux26_64 }, +- +- // types that we have support for but CIM doesn't +- { ovf::CIMOSType_CIMOS_Linux_2_6_x, SchemaDefs_OSTypeId_ArchLinux }, +- { ovf::CIMOSType_CIMOS_Linux_2_6_x_64, SchemaDefs_OSTypeId_ArchLinux_64 }, +- { ovf::CIMOSType_CIMOS_Linux_2_6_x, SchemaDefs_OSTypeId_Fedora }, +- { ovf::CIMOSType_CIMOS_Linux_2_6_x_64, SchemaDefs_OSTypeId_Fedora_64 }, +- { ovf::CIMOSType_CIMOS_Linux_2_6_x, SchemaDefs_OSTypeId_Gentoo }, +- { ovf::CIMOSType_CIMOS_Linux_2_6_x_64, SchemaDefs_OSTypeId_Gentoo_64 }, +- { ovf::CIMOSType_CIMOS_Linux_2_6_x, SchemaDefs_OSTypeId_Xandros }, +- { ovf::CIMOSType_CIMOS_Linux_2_6_x_64, SchemaDefs_OSTypeId_Xandros_64 }, +- { ovf::CIMOSType_CIMOS_Solaris, SchemaDefs_OSTypeId_OpenSolaris }, +- { ovf::CIMOSType_CIMOS_Solaris_64, SchemaDefs_OSTypeId_OpenSolaris_64 }, +- +- // types added with CIM 2.25.0 follow: +- { ovf::CIMOSType_CIMOS_WindowsServer2008R2, SchemaDefs_OSTypeId_Windows2008 }, // duplicate, see above +-// { ovf::CIMOSType_CIMOS_VMwareESXi = 104, // we can't run ESX in a VM +- { ovf::CIMOSType_CIMOS_Windows7, SchemaDefs_OSTypeId_Windows7 }, +- { ovf::CIMOSType_CIMOS_Windows7, SchemaDefs_OSTypeId_Windows7_64 }, // there is no CIM 64-bit type for this +- { ovf::CIMOSType_CIMOS_CentOS, SchemaDefs_OSTypeId_RedHat }, +- { ovf::CIMOSType_CIMOS_CentOS_64, SchemaDefs_OSTypeId_RedHat_64 }, +- { ovf::CIMOSType_CIMOS_OracleEnterpriseLinux, SchemaDefs_OSTypeId_Oracle }, +- { ovf::CIMOSType_CIMOS_OracleEnterpriseLinux_64, SchemaDefs_OSTypeId_Oracle_64 }, +- { ovf::CIMOSType_CIMOS_eComStation, SchemaDefs_OSTypeId_OS2eCS } +- +- // there are no CIM types for these, so these turn to "other" on export: +- // SchemaDefs_OSTypeId_OpenBSD +- // SchemaDefs_OSTypeId_OpenBSD_64 +- // SchemaDefs_OSTypeId_NetBSD +- // SchemaDefs_OSTypeId_NetBSD_64 ++ ++ // Custom OS ++ { ovf::CIMOSType_CIMOS_GNU, SchemaDefs_OSTypeId_GNU }, ++ { ovf::CIMOSType_CIMOS_GNU_64, SchemaDefs_OSTypeId_GNU_64 }, ++ { ovf::CIMOSType_CIMOS_GNUHurd, SchemaDefs_OSTypeId_GNUHurd }, ++ { ovf::CIMOSType_CIMOS_GNULinux, SchemaDefs_OSTypeId_GNULinux }, ++ { ovf::CIMOSType_CIMOS_GNULinux_64, SchemaDefs_OSTypeId_GNULinux_64 }, ++ ++ // GNU/Linux free distros ++ { ovf::CIMOSType_CIMOS_gNewSense, SchemaDefs_OSTypeId_gNewSense }, ++ { ovf::CIMOSType_CIMOS_gNewSense_64, SchemaDefs_OSTypeId_gNewSense_64 }, ++ { ovf::CIMOSType_CIMOS_Dragora, SchemaDefs_OSTypeId_Dragora }, ++ { ovf::CIMOSType_CIMOS_Dragora_64, SchemaDefs_OSTypeId_Dragora_64 }, ++ { ovf::CIMOSType_CIMOS_Musix, SchemaDefs_OSTypeId_Musix }, ++ { ovf::CIMOSType_CIMOS_Musix_64, SchemaDefs_OSTypeId_Musix_64 }, ++ { ovf::CIMOSType_CIMOS_Trisquel, SchemaDefs_OSTypeId_Trisquel }, ++ { ovf::CIMOSType_CIMOS_Trisquel_64, SchemaDefs_OSTypeId_Trisquel_64 }, ++ { ovf::CIMOSType_CIMOS_Dynebolic, SchemaDefs_OSTypeId_Dynebolic }, ++ { ovf::CIMOSType_CIMOS_Venenux, SchemaDefs_OSTypeId_Venenux }, ++ ++ // GNU/Linux free distros that we have support for but CIM doesn't ++ { ovf::CIMOSType_CIMOS_GNULinux, SchemaDefs_OSTypeId_Parabola }, ++ { ovf::CIMOSType_CIMOS_GNULinux_64, SchemaDefs_OSTypeId_Parabola_64 }, ++ { ovf::CIMOSType_CIMOS_GNULinux, SchemaDefs_OSTypeId_Blag }, ++ { ovf::CIMOSType_CIMOS_GNULinux_64, SchemaDefs_OSTypeId_Blag_64 }, ++ { ovf::CIMOSType_CIMOS_GNULinux, SchemaDefs_OSTypeId_Ututo }, ++ { ovf::CIMOSType_CIMOS_GNULinux_64, SchemaDefs_OSTypeId_Ututo_64 }, + + }; + +@@ -150,53 +89,34 @@ + /* These are the 32-Bit ones. They are sorted by priority. */ + static const osTypePattern g_osTypesPattern[] = + { +- {"Windows NT", SchemaDefs_OSTypeId_WindowsNT4}, +- {"Windows XP", SchemaDefs_OSTypeId_WindowsXP}, +- {"Windows 2000", SchemaDefs_OSTypeId_Windows2000}, +- {"Windows 2003", SchemaDefs_OSTypeId_Windows2003}, +- {"Windows Vista", SchemaDefs_OSTypeId_WindowsVista}, +- {"Windows 2008", SchemaDefs_OSTypeId_Windows2008}, +- {"SUSE", SchemaDefs_OSTypeId_OpenSUSE}, +- {"Novell", SchemaDefs_OSTypeId_OpenSUSE}, +- {"Red Hat", SchemaDefs_OSTypeId_RedHat}, +- {"Mandriva", SchemaDefs_OSTypeId_Mandriva}, +- {"Ubuntu", SchemaDefs_OSTypeId_Ubuntu}, +- {"Debian", SchemaDefs_OSTypeId_Debian}, +- {"QNX", SchemaDefs_OSTypeId_QNX}, +- {"Linux 2.4", SchemaDefs_OSTypeId_Linux24}, +- {"Linux 2.6", SchemaDefs_OSTypeId_Linux26}, +- {"Linux", SchemaDefs_OSTypeId_Linux}, +- {"OpenSolaris", SchemaDefs_OSTypeId_OpenSolaris}, +- {"Solaris", SchemaDefs_OSTypeId_OpenSolaris}, +- {"FreeBSD", SchemaDefs_OSTypeId_FreeBSD}, +- {"NetBSD", SchemaDefs_OSTypeId_NetBSD}, +- {"Windows 95", SchemaDefs_OSTypeId_Windows95}, +- {"Windows 98", SchemaDefs_OSTypeId_Windows98}, +- {"Windows Me", SchemaDefs_OSTypeId_WindowsMe}, +- {"Windows 3.", SchemaDefs_OSTypeId_Windows31}, +- {"DOS", SchemaDefs_OSTypeId_DOS}, +- {"OS2", SchemaDefs_OSTypeId_OS2} ++ ++ {"Parabola GNU/Linux-libre", SchemaDefs_OSTypeId_Parabola}, ++ {"gNewSense", SchemaDefs_OSTypeId_gNewSense}, ++ {"Blag Linux and GNU", SchemaDefs_OSTypeId_Blag}, ++ {"Dragora", SchemaDefs_OSTypeId_Dragora}, ++ {"Ututo XS", SchemaDefs_OSTypeId_Ututo}, ++ {"Musix", SchemaDefs_OSTypeId_Musix}, ++ {"Trisquel", SchemaDefs_OSTypeId_Trisquel}, ++ {"Dyne:bolic", SchemaDefs_OSTypeId_Dynebolic}, ++ {"Venenux", SchemaDefs_OSTypeId_Venenux}, ++ {"GNU", SchemaDefs_OSTypeId_GNU}, ++ {"GNU-Hurd", SchemaDefs_OSTypeId_GNUHurd}, ++ {"GNU/Linux", SchemaDefs_OSTypeId_GNULinux}, ++ + }; + + /* These are the 64-Bit ones. They are sorted by priority. */ + static const osTypePattern g_osTypesPattern64[] = + { +- {"Windows XP", SchemaDefs_OSTypeId_WindowsXP_64}, +- {"Windows 2003", SchemaDefs_OSTypeId_Windows2003_64}, +- {"Windows Vista", SchemaDefs_OSTypeId_WindowsVista_64}, +- {"Windows 2008", SchemaDefs_OSTypeId_Windows2008_64}, +- {"SUSE", SchemaDefs_OSTypeId_OpenSUSE_64}, +- {"Novell", SchemaDefs_OSTypeId_OpenSUSE_64}, +- {"Red Hat", SchemaDefs_OSTypeId_RedHat_64}, +- {"Mandriva", SchemaDefs_OSTypeId_Mandriva_64}, +- {"Ubuntu", SchemaDefs_OSTypeId_Ubuntu_64}, +- {"Debian", SchemaDefs_OSTypeId_Debian_64}, +- {"Linux 2.4", SchemaDefs_OSTypeId_Linux24_64}, +- {"Linux 2.6", SchemaDefs_OSTypeId_Linux26_64}, +- {"Linux", SchemaDefs_OSTypeId_Linux26_64}, +- {"OpenSolaris", SchemaDefs_OSTypeId_OpenSolaris_64}, +- {"Solaris", SchemaDefs_OSTypeId_OpenSolaris_64}, +- {"FreeBSD", SchemaDefs_OSTypeId_FreeBSD_64}, ++ {"Parabola GNU/Linux-libre", SchemaDefs_OSTypeId_Parabola_64}, ++ {"gNewSense", SchemaDefs_OSTypeId_gNewSense_64}, ++ {"Blag Linux and GNU", SchemaDefs_OSTypeId_Blag_64}, ++ {"Dragora", SchemaDefs_OSTypeId_Dragora_64}, ++ {"Ututo XS", SchemaDefs_OSTypeId_Ututo_64}, ++ {"Musix", SchemaDefs_OSTypeId_Musix_64}, ++ {"Trisquel", SchemaDefs_OSTypeId_Trisquel_64}, ++ {"GNU", SchemaDefs_OSTypeId_GNU_64}, ++ {"GNU/Linux", SchemaDefs_OSTypeId_GNULinux_64}, + }; + + /** +--- VirtualBox-4.1.18.orig/src/VBox/Main/include/ovfreader.h 2012-06-20 10:17:34.000000000 -0300 ++++ VirtualBox-4.1.18/src/VBox/Main/include/ovfreader.h 2012-07-26 03:51:21.807619186 -0300 +@@ -34,119 +34,24 @@ + + enum CIMOSType_T + { +- CIMOSType_CIMOS_Unknown = 0, +- CIMOSType_CIMOS_Other = 1, +- CIMOSType_CIMOS_MACOS = 2, +- CIMOSType_CIMOS_ATTUNIX = 3, +- CIMOSType_CIMOS_DGUX = 4, +- CIMOSType_CIMOS_DECNT = 5, +- CIMOSType_CIMOS_Tru64UNIX = 6, +- CIMOSType_CIMOS_OpenVMS = 7, +- CIMOSType_CIMOS_HPUX = 8, +- CIMOSType_CIMOS_AIX = 9, +- CIMOSType_CIMOS_MVS = 10, +- CIMOSType_CIMOS_OS400 = 11, +- CIMOSType_CIMOS_OS2 = 12, +- CIMOSType_CIMOS_JavaVM = 13, +- CIMOSType_CIMOS_MSDOS = 14, +- CIMOSType_CIMOS_WIN3x = 15, +- CIMOSType_CIMOS_WIN95 = 16, +- CIMOSType_CIMOS_WIN98 = 17, +- CIMOSType_CIMOS_WINNT = 18, +- CIMOSType_CIMOS_WINCE = 19, +- CIMOSType_CIMOS_NCR3000 = 20, +- CIMOSType_CIMOS_NetWare = 21, +- CIMOSType_CIMOS_OSF = 22, +- CIMOSType_CIMOS_DCOS = 23, +- CIMOSType_CIMOS_ReliantUNIX = 24, +- CIMOSType_CIMOS_SCOUnixWare = 25, +- CIMOSType_CIMOS_SCOOpenServer = 26, +- CIMOSType_CIMOS_Sequent = 27, +- CIMOSType_CIMOS_IRIX = 28, +- CIMOSType_CIMOS_Solaris = 29, +- CIMOSType_CIMOS_SunOS = 30, +- CIMOSType_CIMOS_U6000 = 31, +- CIMOSType_CIMOS_ASERIES = 32, +- CIMOSType_CIMOS_HPNonStopOS = 33, +- CIMOSType_CIMOS_HPNonStopOSS = 34, +- CIMOSType_CIMOS_BS2000 = 35, +- CIMOSType_CIMOS_LINUX = 36, +- CIMOSType_CIMOS_Lynx = 37, +- CIMOSType_CIMOS_XENIX = 38, +- CIMOSType_CIMOS_VM = 39, +- CIMOSType_CIMOS_InteractiveUNIX = 40, +- CIMOSType_CIMOS_BSDUNIX = 41, +- CIMOSType_CIMOS_FreeBSD = 42, +- CIMOSType_CIMOS_NetBSD = 43, +- CIMOSType_CIMOS_GNUHurd = 44, +- CIMOSType_CIMOS_OS9 = 45, +- CIMOSType_CIMOS_MACHKernel = 46, +- CIMOSType_CIMOS_Inferno = 47, +- CIMOSType_CIMOS_QNX = 48, +- CIMOSType_CIMOS_EPOC = 49, +- CIMOSType_CIMOS_IxWorks = 50, +- CIMOSType_CIMOS_VxWorks = 51, +- CIMOSType_CIMOS_MiNT = 52, +- CIMOSType_CIMOS_BeOS = 53, +- CIMOSType_CIMOS_HPMPE = 54, +- CIMOSType_CIMOS_NextStep = 55, +- CIMOSType_CIMOS_PalmPilot = 56, +- CIMOSType_CIMOS_Rhapsody = 57, +- CIMOSType_CIMOS_Windows2000 = 58, +- CIMOSType_CIMOS_Dedicated = 59, +- CIMOSType_CIMOS_OS390 = 60, +- CIMOSType_CIMOS_VSE = 61, +- CIMOSType_CIMOS_TPF = 62, +- CIMOSType_CIMOS_WindowsMe = 63, +- CIMOSType_CIMOS_CalderaOpenUNIX = 64, +- CIMOSType_CIMOS_OpenBSD = 65, +- CIMOSType_CIMOS_NotApplicable = 66, +- CIMOSType_CIMOS_WindowsXP = 67, +- CIMOSType_CIMOS_zOS = 68, +- CIMOSType_CIMOS_MicrosoftWindowsServer2003 = 69, +- CIMOSType_CIMOS_MicrosoftWindowsServer2003_64 = 70, +- CIMOSType_CIMOS_WindowsXP_64 = 71, +- CIMOSType_CIMOS_WindowsXPEmbedded = 72, +- CIMOSType_CIMOS_WindowsVista = 73, +- CIMOSType_CIMOS_WindowsVista_64 = 74, +- CIMOSType_CIMOS_WindowsEmbeddedforPointofService = 75, +- CIMOSType_CIMOS_MicrosoftWindowsServer2008 = 76, +- CIMOSType_CIMOS_MicrosoftWindowsServer2008_64 = 77, +- CIMOSType_CIMOS_FreeBSD_64 = 78, +- CIMOSType_CIMOS_RedHatEnterpriseLinux = 79, +- CIMOSType_CIMOS_RedHatEnterpriseLinux_64 = 80, +- CIMOSType_CIMOS_Solaris_64 = 81, +- CIMOSType_CIMOS_SUSE = 82, +- CIMOSType_CIMOS_SUSE_64 = 83, +- CIMOSType_CIMOS_SLES = 84, +- CIMOSType_CIMOS_SLES_64 = 85, +- CIMOSType_CIMOS_NovellOES = 86, +- CIMOSType_CIMOS_NovellLinuxDesktop = 87, +- CIMOSType_CIMOS_SunJavaDesktopSystem = 88, +- CIMOSType_CIMOS_Mandriva = 89, +- CIMOSType_CIMOS_Mandriva_64 = 90, +- CIMOSType_CIMOS_TurboLinux = 91, +- CIMOSType_CIMOS_TurboLinux_64 = 92, +- CIMOSType_CIMOS_Ubuntu = 93, +- CIMOSType_CIMOS_Ubuntu_64 = 94, +- CIMOSType_CIMOS_Debian = 95, +- CIMOSType_CIMOS_Debian_64 = 96, +- CIMOSType_CIMOS_Linux_2_4_x = 97, +- CIMOSType_CIMOS_Linux_2_4_x_64 = 98, +- CIMOSType_CIMOS_Linux_2_6_x = 99, +- CIMOSType_CIMOS_Linux_2_6_x_64 = 100, +- CIMOSType_CIMOS_Linux_64 = 101, +- CIMOSType_CIMOS_Other_64 = 102, +- // types added with CIM 2.25.0 follow: +- CIMOSType_CIMOS_WindowsServer2008R2 = 103, +- CIMOSType_CIMOS_VMwareESXi = 104, +- CIMOSType_CIMOS_Windows7 = 105, +- CIMOSType_CIMOS_CentOS = 106, +- CIMOSType_CIMOS_CentOS_64 = 107, +- CIMOSType_CIMOS_OracleEnterpriseLinux = 108, +- CIMOSType_CIMOS_OracleEnterpriseLinux_64 = 109, +- CIMOSType_CIMOS_eComStation = 110 +- // no new types added with CIM 2.26.0 ++ CIMOSType_CIMOS_Unknown = 0, ++ CIMOSType_CIMOS_Other = 1, ++ CIMOSType_CIMOS_Other_64 = 2, ++ CIMOSType_CIMOS_gNewSense = 3, ++ CIMOSType_CIMOS_gNewSense_64 = 4, ++ CIMOSType_CIMOS_Dragora = 5, ++ CIMOSType_CIMOS_Dragora_64 = 6, ++ CIMOSType_CIMOS_Musix = 7, ++ CIMOSType_CIMOS_Musix_64 = 8, ++ CIMOSType_CIMOS_Trisquel = 9, ++ CIMOSType_CIMOS_Trisquel_64 = 10, ++ CIMOSType_CIMOS_Dynebolic = 11, ++ CIMOSType_CIMOS_Venenux = 12, ++ CIMOSType_CIMOS_GNU = 13, ++ CIMOSType_CIMOS_GNU_64 = 14, ++ CIMOSType_CIMOS_GNUHurd = 15, ++ CIMOSType_CIMOS_GNULinux = 16, ++ CIMOSType_CIMOS_GNULinux_64 = 17 + }; + + +--- VirtualBox-4.1.18.orig/src/VBox/Additions/common/VBoxGuest/VBoxGuest-linux.c 2012-06-20 10:09:01.000000000 -0300 ++++ VirtualBox-4.1.18/src/VBox/Additions/common/VBoxGuest/VBoxGuest-linux.c 2012-07-26 15:32:55.309812685 -0300 +@@ -622,16 +622,16 @@ + * Call the common device extension initializer. + */ + #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) && defined(RT_ARCH_X86) +- VBOXOSTYPE enmOSType = VBOXOSTYPE_Linux26; ++ VBOXOSTYPE enmOSType = VBOXOSTYPE_GNULinux; + #elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) && defined(RT_ARCH_AMD64) +- VBOXOSTYPE enmOSType = VBOXOSTYPE_Linux26_x64; ++ VBOXOSTYPE enmOSType = VBOXOSTYPE_GNULinux_x64; + #elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 0) && defined(RT_ARCH_X86) +- VBOXOSTYPE enmOSType = VBOXOSTYPE_Linux24; ++ VBOXOSTYPE enmOSType = VBOXOSTYPE_GNULinux; + #elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 0) && defined(RT_ARCH_AMD64) +- VBOXOSTYPE enmOSType = VBOXOSTYPE_Linux24_x64; ++ VBOXOSTYPE enmOSType = VBOXOSTYPE_GNULinux_x64; + #else + # warning "huh? which arch + version is this?" +- VBOXOSTYPE enmOsType = VBOXOSTYPE_Linux; ++ VBOXOSTYPE enmOsType = VBOXOSTYPE_GNULinux; + #endif + rc = VBoxGuestInitDevExt(&g_DevExt, + g_IOPortBase, diff --git a/libre/virtualbox-libre/ipv6_vnc.patch b/libre/virtualbox-libre/ipv6_vnc.patch new file mode 100644 index 000000000..8f50aba1c --- /dev/null +++ b/libre/virtualbox-libre/ipv6_vnc.patch @@ -0,0 +1,20 @@ +diff -aur vanilla/VirtualBox-4.1.18/src/VBox/Frontends/VBoxHeadless/FramebufferVNC.cpp changed/VirtualBox-4.1.18/src/VBox/Frontends/VBoxHeadless/FramebufferVNC.cpp +--- vanilla/VirtualBox-4.1.18/src/VBox/Frontends/VBoxHeadless/FramebufferVNC.cpp 2012-06-20 15:15:53.000000000 +0200 ++++ changed/VirtualBox-4.1.18/src/VBox/Frontends/VBoxHeadless/FramebufferVNC.cpp 2012-07-16 16:24:22.448349886 +0200 +@@ -88,8 +88,16 @@ + + vncServer = rfbGetScreen(0, NULL, mWidth, mHeight, 8, 3, 1); + vncServer->screenData = (void*)this; ++#ifdef LIBVNCSERVER_IPv6 ++ if (mVncPort) { ++ vncServer->port = mVncPort; ++ vncServer->ipv6port = mVncPort; ++ } ++#else + if (mVncPort) + vncServer->port = mVncPort; ++#endif ++ + char *pszDesktopName; + rc = RTStrAPrintf(&pszDesktopName, "%s - VirtualBox", pszName); + if (rc >= 0) diff --git a/libre/virtualbox-libre/libre.patch b/libre/virtualbox-libre/libre.patch new file mode 100644 index 000000000..e51d0c0a7 --- /dev/null +++ b/libre/virtualbox-libre/libre.patch @@ -0,0 +1,5765 @@ +--- VirtualBox-4.1.18.orig/Config.kmk 2012-07-24 16:38:43.981310996 -0300 ++++ VirtualBox-4.1.18/Config.kmk 2012-07-24 16:38:44.001309865 -0300 +@@ -56,9 +56,6 @@ + PROPS_SYSMODS_ACCUMULATE_L += INTERMEDIATES + PROPS_MISCBINS_ACCUMULATE_L += INTERMEDIATES + +-# Misc names used bye the install paths below. +-VBOX_PUEL_MANGLED_NAME := Oracle_VM_VirtualBox_Extension_Pack +- + # Install paths + ## @todo This will change after 4.1 is branched off! + # What is now 'bin' and 'lib' will be moved down under 'staged/', except on +@@ -125,9 +122,6 @@ + endif + + INST_DOC = doc/ +-INST_EXTPACK = $(INST_BIN)ExtensionPacks/ +-INST_EXTPACK_CERTS = $(INST_BIN)ExtPackCertificates/ +-INST_EXTPACK_PUEL = $(INST_EXTPACK)$(VBOX_PUEL_MANGLED_NAME)/ + INST_PACKAGES = packages/ + + VBOX_PATH_SDK = $(patsubst %/,%,$(PATH_STAGE)/$(INST_SDK)) +@@ -136,7 +130,6 @@ + VBOX_PATH_ADDITIONS = $(patsubst %/,%,$(PATH_STAGE)/$(INST_ADDITIONS)) + VBOX_PATH_ADDITIONS_ISO = $(patsubst %/,%,$(PATH_STAGE)/$(INST_ADDITIONS_ISO)) + VBOX_PATH_ADDITIONS_LIB = $(patsubst %/,%,$(PATH_STAGE)/$(INST_ADDITIONS_LIB)) +-VBOX_PATH_EXTPACK_PUEL= $(patsubst %/,%,$(PATH_STAGE)/$(INST_EXTPACK_PUEL)) + VBOX_PATH_PACKAGES = $(patsubst %/,%,$(PATH_STAGE)/$(INST_PACKAGES)) + + +@@ -208,7 +201,6 @@ + export VBOX_ADDITIONS_SH_MODE = release + export VBOX_DOCUMENTATION_SH_MODE = release + export VBOX_EFI_SH_MODE = release +- export VBOX_EXTPACKS_SH_MODE = release + endif + + # Some info on the vendor +@@ -361,8 +353,6 @@ + VBOX_WITH_USB = 1 + # Enable the USB 1.1 controller plus virtual USB HID devices. + VBOX_WITH_VUSB = 1 +-# Enable the USB 2.0 controller. +-VBOX_WITH_EHCI = 1 + # Enable the ISCSI feature. + VBOX_WITH_ISCSI = 1 + # Enable INIP support in the ISCSI feature. +@@ -430,9 +420,6 @@ + ifdef VBOX_WITH_USB + VBOX_WITH_VUSB = 1 + endif +-ifdef VBOX_WITH_EHCI +- VBOX_WITH_EHCI_IMPL = 1 +-endif + ifdef VBOX_WITH_PCI_PASSTHROUGH + VBOX_WITH_PCI_PASSTHROUGH_IMPL = 1 + endif +@@ -591,15 +578,6 @@ + ## @} + + +-## @name Extension pack +-## @{ +-# Enables the extension pack feature. +-VBOX_WITH_EXTPACK = 1 +-# Enables separating code into the Oracle VM VirtualBox Extension Pack, dubbed PUEL. +-VBOX_WITH_EXTPACK_PUEL = 1 +-# Enables building+packing the Oracle VM VirtualBox Extension Pack, includes VBOX_WITH_EXTPACK_PUEL +-VBOX_WITH_EXTPACK_PUEL_BUILD = 1 +-## @} + + ## @name Misc + ## @{ +@@ -777,14 +755,6 @@ + # Skip stuff. + # + +-ifdef VBOX_ONLY_EXTPACKS +- # Clear some VBOX_WITH_XXX variables instead of adding ifdefs all over the place. +- VBOX_WITH_DEBUGGER = +- VBOX_WITH_ADDITIONS = +- VBOX_WITH_VBOXDRV = +- VBOX_WITH_TESTCASES = +-endif +- + # VBOX_QUICK can be used by core developers to speed to the build + ifdef VBOX_QUICK + # undefine variables by assigning blank. +@@ -848,7 +818,6 @@ + VBOX_WITH_TESTSUITE= + VBOX_WITH_QTGUI= + VBOX_WITH_USB= +- VBOX_WITH_EHCI= + VBOX_WITH_DOCS= + VBOX_WITH_PDM_ASYNC_COMPLETION= + VBOX_WITH_KCHMVIEWER= +@@ -870,7 +839,6 @@ + VBOX_WITH_CROGL= + VBOX_WITH_DEBUGGER= + VBOX_WITH_DOCS= +- VBOX_WITH_EHCI= + VBOX_WITH_HARDENING= + VBOX_WITH_HEADLESS= + VBOX_WITH_HGCM= +@@ -952,9 +920,6 @@ + # + ifdef VBOX_OSE + VBOX_WITH_VRDP= +- VBOX_WITH_EHCI_IMPL= +- VBOX_WITH_EXTPACK_PUEL= +- VBOX_WITH_EXTPACK_PUEL_BUILD= + VBOX_WITH_PCI_PASSTHROUGH_IMPL= + VBOX_WITH_OS2_ADDITIONS_BIN= + VBOX_WITH_SECURELABEL= +@@ -1082,10 +1047,6 @@ + VBOX_WITH_KCHMVIEWER= + endif + +-ifdef VBOX_WITH_EXTPACK_PUEL_BUILD +- VBOX_WITH_EXTPACK_PUEL = 1 +-endif +- + # + # Mark OSE builds clearly, helps figuring out limitations more easily. + # +@@ -1679,9 +1640,6 @@ + # biossums (set BIOS checksums) + VBOX_BIOSSUMS ?= $(PATH_OBJ)/biossums/biossums$(HOSTSUFF_EXE) + +-# RTManifest (extension pack manifest utility) +-VBOX_RTMANIFEST ?= $(PATH_OBJ)/bldRTManifest/bldRTManifest$(HOSTSUFF_EXE) +- + # filesplitter (splits java files) + VBOX_FILESPLIT ?= $(PATH_OBJ)/filesplitter/filesplitter$(HOSTSUFF_EXE) + +@@ -2461,13 +2419,6 @@ + SDK_VBOX_OPENSSL2_LIBS = $(NO_SUCH_VARIABLE) + endif + +-SDK_VBoxOpenSslExtPack = Internal use only. +-SDK_VBoxOpenSslExtPack_INCS = $(SDK_VBOX_OPENSSL_VBOX_DEFAULT_INCS) +-SDK_VBoxOpenSslExtPack_ORDERDEPS = $(crypto-headers_1_TARGET) +-SDK_VBoxOpenSslExtPack_LIBS = \ +- $(PATH_STAGE_LIB)/VBoxExtPack-libssl$(VBOX_SUFF_LIB) \ +- $(PATH_STAGE_LIB)/VBoxExtPack-libcrypto$(VBOX_SUFF_LIB) +- + SDK_VBOX_BLD_OPENSSL = . + SDK_VBOX_BLD_OPENSSL_EXTENDS = VBOX_OPENSSL + SDK_VBOX_BLD_OPENSSL_LIBS ?= \ +@@ -3817,100 +3768,6 @@ + endif + TEMPLATE_VBOXMAINCLIENTDLL_LDFLAGS.darwin = $(filter-out -bind_at_load,$(TEMPLATE_VBOXMAINCLIENTEXE_LDFLAGS.darwin)) + +- +- +-# +-# Templates used for building the extension packs. +-# +-ifdef VBOX_WITH_EXTPACK +- # Base templates (native or portable). +- TEMPLATE_VBoxR3ExtPack = For the ring-3 context extension pack modules. +- if 1 # Native for now. +- TEMPLATE_VBoxR3ExtPack_EXTENDS = VBOXR3DLLNOXCPT +- TEMPLATE_VBoxR3ExtPack_DEFS = $(TEMPLATE_VBOXR3DLLNOXCPT_DEFS) VBOX_IN_EXTPACK VBOX_IN_EXTPACK_R3 +- else +- TEMPLATE_VBoxR3ExtPack_EXTENDS = VBOXNOCRTGCC +- TEMPLATE_VBoxR3ExtPack_DEFS = $(TEMPLATE_VBOXNOCRTGCC_DEFS) VBOX_IN_EXTPACK VBOX_IN_EXTPACK_R3 IPRT_NO_CRT IN_RING3 +- TEMPLATE_VBoxR3ExtPack_INCS = $(PATH_ROOT)/include/iprt/nocrt $(TEMPLATE_VBOXR3DLLNOXCPT_INCS) +- endif +- ifneq ($(KBUILD_TARGET),win) +- TEMPLATE_VBoxR3ExtPack_CXXFLAGS = $(TEMPLATE_VBOXR3DLLNOXCPT_CXXFLAGS) -fno-rtti +- endif +- TEMPLATE_VBoxR3ExtPack_INST = $(INST_EXTPACK)YouShallOverrideThis/ +- ifeq ($(KBUILD_TARGET),linux) +- TEMPLATE_VBoxR3ExtPack_LDFLAGS = $(filter-out '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RUNPATH)' '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)', $(TEMPLATE_VBOXR3DLLNOXCPT_LDFLAGS)) +- else +- if !defined(VBOX_WITH_RUNPATH) && defined(VBOX_WITH_RELATIVE_RUNPATH) +- TEMPLATE_VBoxR3ExtPack_LDFLAGS = '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)/../../..' $(filter-out '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)', $(TEMPLATE_VBOXR3DLLNOXCPT_LDFLAGS)) +- endif +- endif +- ifdef VBOX_ONLY_EXTPACKS_USE_IMPLIBS +- if1of ($(KBUILD_TARGET), win os2) +- TEMPLATE_VBoxR3ExtPack_LIBS = \ +- $(TEMPLATE_LIBS_VBOXR3) \ +- $(PATH_STAGE_LIB)/VMMR3Imp$(VBOX_SUFF_LIB) \ +- $(PATH_STAGE_LIB)/VBoxRTImp$(VBOX_SUFF_LIB) +- else +- TEMPLATE_VBoxR3ExtPack_LIBS = \ +- $(TEMPLATE_LIBS_VBOXR3) \ +- $(PATH_STAGE_LIB)/VMMR3Imp$(VBOX_SUFF_DLL) \ +- $(PATH_STAGE_LIB)/VBoxRTImp$(VBOX_SUFF_DLL) +- endif +- else +- TEMPLATE_VBoxR3ExtPack_LIBS = \ +- $(TEMPLATE_LIBS_VBOXR3) \ +- $(LIB_RUNTIME) \ +- $(LIB_VMM) +- endif +- +- TEMPLATE_VBoxR0ExtPack = For the ring-0 context extension pack modules. +- TEMPLATE_VBoxR0ExtPack_EXTENDS = VBoxR0 +- TEMPLATE_VBoxR0ExtPack_EXTENDS_BY = appending +- TEMPLATE_VBoxR0ExtPack_INST = $(INST_EXTPACK)YouShallOverrideThis/ +- TEMPLATE_VBoxR0ExtPack_DEFS = VBOX_IN_EXTPACK VBOX_IN_EXTPACK_R0 +- if1of ($(VBOX_LDR_FMT), pe lx) +- TEMPLATE_VBoxR0ExtPack_LIBS = \ +- $(PATH_STAGE_LIB)/VMMR0Imp$(VBOX_SUFF_LIB) \ +- $(PATH_STAGE_LIB)/SUPR0$(VBOX_SUFF_LIB) +- endif +- +- TEMPLATE_VBoxRcExtPack = For the raw-mode context extension pack modules. +- TEMPLATE_VBoxRcExtPack_EXTENDS = VBoxRc +- TEMPLATE_VBoxRcExtPack_EXTENDS_BY = appending +- TEMPLATE_VBoxRcExtPack_SYSSUFF = .rc +- TEMPLATE_VBoxRcExtPack_INST = $(INST_EXTPACK)YouShallOverrideThis/ +- TEMPLATE_VBoxRcExtPack_DEFS = VBOX_IN_EXTPACK VBOX_IN_EXTPACK_RC +- if1of ($(VBOX_LDR_FMT32), pe lx) +- TEMPLATE_VBoxRcExtPack_LIBS = \ +- $(PATH_STAGE_LIB)/VMMRCBuiltin$(VBOX_SUFF_LIB) \ +- $(PATH_STAGE_LIB)/VMMRCImp$(VBOX_SUFF_LIB) +- endif +- +- TEMPLATE_VBoxInsExtPack = For the install targets of an extension pack. +- TEMPLATE_VBoxInsExtPack_MODE = 0644 +- TEMPLATE_VBoxInsExtPack_INST = $(INST_EXTPACK)YouShallOverrideThis/ +- +- # For each individual extension pack +- ifdef VBOX_WITH_EXTPACK_PUEL +- TEMPLATE_VBoxR3ExtPackPuel = For the ring-3 context modules in the PUEL extension pack. +- TEMPLATE_VBoxR3ExtPackPuel_EXTENDS = VBoxR3ExtPack +- TEMPLATE_VBoxR3ExtPackPuel_INST = $(INST_EXTPACK_PUEL)$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/ +- +- TEMPLATE_VBoxR0ExtPackPuel = For the ring-0 context modules in the PUEL extension pack. +- TEMPLATE_VBoxR0ExtPackPuel_EXTENDS = VBoxR0ExtPack +- TEMPLATE_VBoxR0ExtPackPuel_INST = $(INST_EXTPACK_PUEL)$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/ +- +- TEMPLATE_VBoxRcExtPackPuel = For the raw-mode context modules in the PUEL extension pack. +- TEMPLATE_VBoxRcExtPackPuel_EXTENDS = VBoxRcExtPack +- TEMPLATE_VBoxRcExtPackPuel_INST = $(INST_EXTPACK_PUEL)$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/ +- +- TEMPLATE_VBoxInsExtPackPuel = For the install targets of an extension pack. +- TEMPLATE_VBoxInsExtPackPuel_EXTENDS = VBoxR0ExtPack +- TEMPLATE_VBoxInsExtPackPuel_INST = $(INST_EXTPACK_PUEL) +-endif +-endif # VBOX_WITH_EXTPACK +- +- + # + # Qt 4 + # Qt 4 +--- VirtualBox-4.1.18.orig/Makefile.kmk 2012-07-24 17:16:47.078929150 -0300 ++++ VirtualBox-4.1.18/Makefile.kmk 2012-07-24 17:16:47.125592981 -0300 +@@ -446,7 +446,6 @@ + include/VBox \ + include/VBox/vmm \ + include/VBox/com \ +- include/VBox/ExtPack \ + include/VBox/HostServices \ + include/VBox/GuestHost \ + include/VBox/HGSMI \ +@@ -862,191 +861,6 @@ + additions-build-linux.x86.combined \ + additions-packing + +- +-# +-# Build the extension packs, all of them. +-# +-# This is tailored (hardcoded) for the extension pack build box. +-# +-# The fetching must be done in serial fashion, while the building should be +-# more flexible wrt to -jN. +-# +-extpacks-fetch: +- + $(KMK) -C tools fetch VBOX_ONLY_EXTPACKS=1 +- + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=amd64 KBUILD_TARGET=darwin BUILD_TARGET_ARCH=amd64 BUILD_TARGET=darwin VBOX_ONLY_EXTPACKS=1 +- + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=x86 KBUILD_TARGET=darwin BUILD_TARGET_ARCH=x86 BUILD_TARGET=darwin VBOX_ONLY_EXTPACKS=1 +-# + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=amd64 KBUILD_TARGET=freebsd BUILD_TARGET_ARCH=amd64 BUILD_TARGET=freebsd VBOX_ONLY_EXTPACKS=1 +-# + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=x86 KBUILD_TARGET=freebsd BUILD_TARGET_ARCH=x86 BUILD_TARGET=freebsd VBOX_ONLY_EXTPACKS=1 +- + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=amd64 KBUILD_TARGET=linux BUILD_TARGET_ARCH=amd64 BUILD_TARGET=linux VBOX_ONLY_EXTPACKS=1 +- + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=x86 KBUILD_TARGET=linux BUILD_TARGET_ARCH=x86 BUILD_TARGET=linux VBOX_ONLY_EXTPACKS=1 +-# + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=x86 KBUILD_TARGET=os2 BUILD_TARGET_ARCH=x86 BUILD_TARGET=os2 VBOX_ONLY_EXTPACKS=1 +- + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=amd64 KBUILD_TARGET=solaris BUILD_TARGET_ARCH=amd64 BUILD_TARGET=solaris VBOX_ONLY_EXTPACKS=1 +- + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=x86 KBUILD_TARGET=solaris BUILD_TARGET_ARCH=x86 BUILD_TARGET=solaris VBOX_ONLY_EXTPACKS=1 +- + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=amd64 KBUILD_TARGET=win BUILD_TARGET_ARCH=amd64 BUILD_TARGET=win VBOX_ONLY_EXTPACKS=1 +- + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=x86 KBUILD_TARGET=win BUILD_TARGET_ARCH=x86 BUILD_TARGET=win VBOX_ONLY_EXTPACKS=1 +- +- +-extpacks-build: \ +- extpacks-build-win.amd64 \ +- extpacks-build-win.x86 \ +- extpacks-build-solaris.amd64 \ +- extpacks-build-solaris.x86 \ +- extpacks-build-os2.x86 \ +- extpacks-build-linux.amd64 \ +- extpacks-build-linux.x86 \ +- extpacks-build-darwin.amd64 \ +- extpacks-build-darwin.x86 \ +- extpacks-build-freebsd.amd64 \ +- extpacks-build-freebsd.x86 +- +-VBOX_EXTPACKS_BUILD.amd64 = VBOX_ONLY_EXTPACKS=1 \ +- KBUILD_TYPE=$(KBUILD_TYPE) BUILD_TYPE=$(KBUILD_TYPE) \ +- KBUILD_TARGET_ARCH=amd64 BUILD_TARGET_ARCH=amd64 \ +- VBOX_SVN_REV=$(VBOX_SVN_REV) +- +-VBOX_EXTPACKS_BUILD.x86 = VBOX_ONLY_EXTPACKS=1 \ +- KBUILD_TYPE=$(KBUILD_TYPE) BUILD_TYPE=$(KBUILD_TYPE) \ +- KBUILD_TARGET_ARCH=x86 BUILD_TARGET_ARCH=x86 \ +- VBOX_SVN_REV=$(VBOX_SVN_REV) +- +-# Automatically determine the extpack build subdir name. Used for figuring out +-# directory names inside the extension pack building VMs. +-VBOX_EXTPACKS_BUILD_SUBDIRNAME := $(lastword $(subst /, ,$(PATH_ROOT))) +- +-# When building in parallel on a Windows host, make sure we finish the host +-# bit before kicking off any UNIX guest or we'll run into file sharing issues. +-ifeq ($(KBUILD_TARGET),win) +-VBOX_EXTPACKS_BUILD_WIN_HOST_FIRST = extpacks-build-win.x86 extpacks-build-win.amd64 +-else +-VBOX_EXTPACKS_BUILD_WIN_HOST_FIRST = +-endif +- +-extpacks-build-win.amd64: +-ifeq ($(KBUILD_TARGET),win) +- + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.amd64) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK) +-else +- $(call MSG_L1,Building Windows/amd64 extension packs) +- $(VBOX_KMK_TIME) ssh vbox@192.168.27.6 " echo $@ && cd e:/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh kmk $(VBOX_EXTPACKS_BUILD.amd64) all" +-endif +- +-extpacks-build-win.x86: +-ifeq ($(KBUILD_TARGET),win) +- + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.x86) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK) +-else +- $(call MSG_L1,Building Windows/x86 extension packs) +- $(VBOX_KMK_TIME) ssh vbox@192.168.27.16 " echo $@ && cd e:/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh kmk $(VBOX_EXTPACKS_BUILD.x86) all" +-endif +- +-ifeq ($(KBUILD_TARGET),solaris) +-extpacks-build-solaris.amd64: +- + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.amd64) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK) +- +-extpacks-build-solaris.x86: extpacks-build-solaris.amd64 +- + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.x86) VBOX_WITH_COMBINED_SOLARIS_GUEST_PACKAGE=1 all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK) +- +-else +-# Serialize 32-bit and 64-bit ASSUMING the same VM builds both. +-extpacks-build-solaris.rsync-into-vm: $(VBOX_EXTPACKS_BUILD_WIN_HOST_FIRST) +- $(VBOX_KMK_TIME) $(call VBOX_RSYNC_IN_FN,solaris,*) . 192.168.27.4:/mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) +- +-extpacks-build-solaris.build-it: extpacks-build-solaris.rsync-into-vm +- $(call MSG_L1,Building Solaris/amd64 extension packs) +- $(VBOX_KMK_TIME) ssh vbox@192.168.27.4 " echo $@/amd64 && cd /mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_EXTPACKS_BUILD.amd64) all" +- $(call MSG_L1,Building Solaris/x86 extension packs) +- $(VBOX_KMK_TIME) ssh vbox@192.168.27.4 " echo $@/x86 && cd /mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_EXTPACKS_BUILD.x86) all" +- +-extpacks-build-solaris.rsync-out-of-vm: extpacks-build-solaris.build-it +- $(VBOX_KMK_TIME) rsync -a --delete 192.168.27.4:/mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME)/out/solaris.x86 out/ +- $(VBOX_KMK_TIME) rsync -a --delete 192.168.27.4:/mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME)/out/solaris.amd64 out/ +- +-.NOTPARALLEL: extpacks-build-solaris.rsync-out-of-vm extpacks-build-solaris.rsync-into-vm +-.PHONY: extpacks-build-solaris.rsync-out-of-vm extpacks-build-solaris.rsync-into-vm extpacks-build-solaris.build-it +- +-extpacks-build-solaris.amd64: extpacks-build-solaris.rsync-out-of-vm +-extpacks-build-solaris.x86: extpacks-build-solaris.rsync-out-of-vm +-endif +- +-extpacks-build-os2.x86: +-#ifeq ($(KBUILD_TARGET),os2) +-# + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.x86) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK) +-#else +-# $(VBOX_KMK_TIME) ssh vbox@192.168.27.3 " cd /mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_EXTPACKS_BUILD.x86) " +-#endif +- +-extpacks-build-linux.amd64: $(VBOX_EXTPACKS_BUILD_WIN_HOST_FIRST) +-ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),linux.amd64) +- + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.amd64) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK) +-else +- $(call MSG_L1,Building Linux/amd64 extension packs) +- $(VBOX_KMK_TIME) ssh vbox@192.168.27.12 " echo $@ && cd /mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_EXTPACKS_BUILD.amd64) all" +-endif +- +-extpacks-build-linux.x86: $(VBOX_EXTPACKS_BUILD_WIN_HOST_FIRST) +-ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),linux.x86) +- + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.x86) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK) +-else +- $(call MSG_L1,Building Linux/x86 extension packs) +- $(VBOX_KMK_TIME) ssh vbox@192.168.27.11 " echo $@ && cd /mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_EXTPACKS_BUILD.x86) all" +-endif +- +-extpacks-build-freebsd.amd64: $(VBOX_EXTPACKS_BUILD_WIN_HOST_FIRST) +-#ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),freebsd.amd64) +-# + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.amd64) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK) +-#else +-# $(call MSG_L1,Building FreeBSD/amd64 extension packs) +-# $(VBOX_KMK_TIME) ssh vbox@192.168.27.17 " echo $@ && cd /mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_EXTPACKS_BUILD.amd64) all" +-#endif +- +-extpacks-build-freebsd.x86: $(VBOX_EXTPACKS_BUILD_WIN_HOST_FIRST) +-#ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),freebsd.x86) +-# + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.x86) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK) +-#else +-# $(call MSG_L1,Building FreeBSD/x86 extension packs) +-# $(VBOX_KMK_TIME) ssh vbox@192.168.27.7 " echo $@ && cd /mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_EXTPACKS_BUILD.x86) all" +-#endif +- +-extpacks-build-darwin.amd64: $(VBOX_EXTPACKS_BUILD_WIN_HOST_FIRST) +-ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),darwin.amd64) +- + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.amd64) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK) +-else +- $(call MSG_L1,Building Darwin/amd64 extension packs) +- $(VBOX_KMK_TIME) $(call VBOX_RSYNC_IN_FN,darwin,amd64) . 192.168.27.15:/Users/vbox/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) +- $(VBOX_KMK_TIME) ssh vbox@192.168.27.15 " echo $@ && cd /Users/vbox/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_EXTPACKS_BUILD.amd64) all" +- $(VBOX_KMK_TIME) rsync -am -v --delete 192.168.27.15:/Users/vbox/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME)/out/darwin.amd64 out/ +-endif +- +-extpacks-build-darwin.x86: $(VBOX_EXTPACKS_BUILD_WIN_HOST_FIRST) +-ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),darwin.x86) +- + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.x86) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK) +-else +- $(call MSG_L1,Building Darwin/x86 extension packs) +- $(VBOX_KMK_TIME) $(call VBOX_RSYNC_IN_FN,darwin,x86) . 192.168.27.5:/Users/vbox/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) +- $(VBOX_KMK_TIME) ssh vbox@192.168.27.5 " echo $@ && cd /Users/vbox/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_EXTPACKS_BUILD.x86) all" +- $(VBOX_KMK_TIME) rsync -am -v --delete 192.168.27.5:/Users/vbox/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME)/out/darwin.x86 out/ +-endif +- +- +-extpacks-packing: +- + $(KMK) VBOX_ONLY_EXTPACKS=1 \ +- VBOX_WITH_EXTPACK_OS_ARCHS="darwin.amd64 darwin.x86 linux.amd64 linux.x86 solaris.amd64 solaris.x86 win.amd64 win.x86" \ +- packing +-# +++ freebsd.amd64 freebsd.x86 os2.x86 ^^^ +- +-.PHONY: \ +- extpacks-build-win.x86 \ +- extpacks-build-win.amd64 \ +- extpacks-build-solaris.amd64 \ +- extpacks-build-solaris.x86 \ +- extpacks-build-os2.x86 \ +- extpacks-build-linux.amd64 \ +- extpacks-build-linux.x86 \ +- extpacks-build-freebsd.amd64 \ +- extpacks-build-freebsd.x86 \ +- extpacks-build-darwin.amd64 \ +- extpacks-build-darwin.x86 \ +- extpacks-packing +- +- + # + # Build the test suite, all of it. + # +--- VirtualBox-4.1.18.orig/src/VBox/Devices/build/VBoxDD.cpp 2012-06-20 10:15:51.000000000 -0300 ++++ VirtualBox-4.1.18/src/VBox/Devices/build/VBoxDD.cpp 2012-07-24 16:18:03.964493454 -0300 +@@ -132,11 +132,6 @@ + if (RT_FAILURE(rc)) + return rc; + #endif +-#ifdef VBOX_WITH_EHCI_IMPL +- rc = pCallbacks->pfnRegister(pCallbacks, &g_DeviceEHCI); +- if (RT_FAILURE(rc)) +- return rc; +-#endif + #ifdef VBOX_ACPI + rc = pCallbacks->pfnRegister(pCallbacks, &g_DeviceACPI); + if (RT_FAILURE(rc)) +--- VirtualBox-4.1.18.orig/src/VBox/Devices/build/VBoxDD.h 2012-06-20 10:15:51.000000000 -0300 ++++ VirtualBox-4.1.18/src/VBox/Devices/build/VBoxDD.h 2012-07-24 16:20:35.939205389 -0300 +@@ -62,7 +62,6 @@ + extern const PDMDEVREG g_DeviceICH6_HDA; + extern const PDMDEVREG g_DeviceAudioSniffer; + extern const PDMDEVREG g_DeviceOHCI; +-extern const PDMDEVREG g_DeviceEHCI; + extern const PDMDEVREG g_DeviceACPI; + extern const PDMDEVREG g_DeviceDMA; + extern const PDMDEVREG g_DeviceFloppyController; +--- VirtualBox-4.1.18.orig/src/VBox/Main/include/ExtPackManagerImpl.h 2012-06-20 10:17:33.000000000 -0300 ++++ /dev/null 2012-07-24 14:48:18.638572110 -0300 +@@ -1,245 +0,0 @@ +-/* $Id: ExtPackManagerImpl.h $ */ +-/** @file +- * VirtualBox Main - interface for Extension Packs, VBoxSVC & VBoxC. +- */ +- +-/* +- * Copyright (C) 2010 Oracle Corporation +- * +- * This file is part of VirtualBox Open Source Edition (OSE), as +- * available from http://www.virtualbox.org. This file is free software; +- * you can redistribute it and/or modify it under the terms of the GNU +- * General Public License (GPL) as published by the Free Software +- * Foundation, in version 2 as it comes in the "COPYING" file of the +- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the +- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. +- */ +- +-#ifndef ____H_EXTPACKMANAGERIMPL +-#define ____H_EXTPACKMANAGERIMPL +- +-#include "VirtualBoxBase.h" +-#include <VBox/ExtPack/ExtPack.h> +-#include <iprt/fs.h> +- +-/** +- * An extension pack file. +- */ +-class ATL_NO_VTABLE ExtPackFile : +- public VirtualBoxBase, +- VBOX_SCRIPTABLE_IMPL(IExtPackFile) +-{ +-public: +- /** @name COM and internal init/term/mapping cruft. +- * @{ */ +- VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT(ExtPackFile, IExtPackFile) +- DECLARE_NOT_AGGREGATABLE(ExtPackFile) +- DECLARE_PROTECT_FINAL_CONSTRUCT() +- BEGIN_COM_MAP(ExtPackFile) +- VBOX_DEFAULT_INTERFACE_ENTRIES(IExtPackFile) +- COM_INTERFACE_ENTRY(IExtPackBase) +- END_COM_MAP() +- DECLARE_EMPTY_CTOR_DTOR(ExtPackFile) +- +- HRESULT FinalConstruct(); +- void FinalRelease(); +- HRESULT initWithFile(const char *a_pszFile, const char *a_pszDigest, class ExtPackManager *a_pExtPackMgr, VirtualBox *a_pVirtualBox); +- void uninit(); +- RTMEMEF_NEW_AND_DELETE_OPERATORS(); +- /** @} */ +- +- /** @name IExtPackBase interfaces +- * @{ */ +- STDMETHOD(COMGETTER(Name))(BSTR *a_pbstrName); +- STDMETHOD(COMGETTER(Description))(BSTR *a_pbstrDescription); +- STDMETHOD(COMGETTER(Version))(BSTR *a_pbstrVersion); +- STDMETHOD(COMGETTER(Revision))(ULONG *a_puRevision); +- STDMETHOD(COMGETTER(VRDEModule))(BSTR *a_pbstrVrdeModule); +- STDMETHOD(COMGETTER(PlugIns))(ComSafeArrayOut(IExtPackPlugIn *, a_paPlugIns)); +- STDMETHOD(COMGETTER(Usable))(BOOL *a_pfUsable); +- STDMETHOD(COMGETTER(WhyUnusable))(BSTR *a_pbstrWhy); +- STDMETHOD(COMGETTER(ShowLicense))(BOOL *a_pfShowIt); +- STDMETHOD(COMGETTER(License))(BSTR *a_pbstrHtmlLicense); +- STDMETHOD(QueryLicense)(IN_BSTR a_bstrPreferredLocale, IN_BSTR a_bstrPreferredLanguage, +- IN_BSTR a_bstrFormat, BSTR *a_pbstrLicense); +- /** @} */ +- +- /** @name IExtPackFile interfaces +- * @{ */ +- STDMETHOD(COMGETTER(FilePath))(BSTR *a_pbstrPath); +- STDMETHOD(Install)(BOOL a_fReplace, IN_BSTR a_bstrDisplayInfo, IProgress **a_ppProgress); +- /** @} */ +- +-private: +- /** @name Misc init helpers +- * @{ */ +- HRESULT initFailed(const char *a_pszWhyFmt, ...); +- /** @} */ +- +-private: +- struct Data; +- /** Pointer to the private instance. */ +- Data *m; +- +- friend class ExtPackManager; +-}; +- +- +-/** +- * An installed extension pack. +- */ +-class ATL_NO_VTABLE ExtPack : +- public VirtualBoxBase, +- VBOX_SCRIPTABLE_IMPL(IExtPack) +-{ +-public: +- /** @name COM and internal init/term/mapping cruft. +- * @{ */ +- VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT(ExtPack, IExtPack) +- DECLARE_NOT_AGGREGATABLE(ExtPack) +- DECLARE_PROTECT_FINAL_CONSTRUCT() +- BEGIN_COM_MAP(ExtPack) +- VBOX_DEFAULT_INTERFACE_ENTRIES(IExtPack) +- COM_INTERFACE_ENTRY(IExtPackBase) +- END_COM_MAP() +- DECLARE_EMPTY_CTOR_DTOR(ExtPack) +- +- HRESULT FinalConstruct(); +- void FinalRelease(); +- HRESULT initWithDir(VBOXEXTPACKCTX a_enmContext, const char *a_pszName, const char *a_pszDir); +- void uninit(); +- RTMEMEF_NEW_AND_DELETE_OPERATORS(); +- /** @} */ +- +- /** @name IExtPackBase interfaces +- * @{ */ +- STDMETHOD(COMGETTER(Name))(BSTR *a_pbstrName); +- STDMETHOD(COMGETTER(Description))(BSTR *a_pbstrDescription); +- STDMETHOD(COMGETTER(Version))(BSTR *a_pbstrVersion); +- STDMETHOD(COMGETTER(Revision))(ULONG *a_puRevision); +- STDMETHOD(COMGETTER(VRDEModule))(BSTR *a_pbstrVrdeModule); +- STDMETHOD(COMGETTER(PlugIns))(ComSafeArrayOut(IExtPackPlugIn *, a_paPlugIns)); +- STDMETHOD(COMGETTER(Usable))(BOOL *a_pfUsable); +- STDMETHOD(COMGETTER(WhyUnusable))(BSTR *a_pbstrWhy); +- STDMETHOD(COMGETTER(ShowLicense))(BOOL *a_pfShowIt); +- STDMETHOD(COMGETTER(License))(BSTR *a_pbstrHtmlLicense); +- STDMETHOD(QueryLicense)(IN_BSTR a_bstrPreferredLocale, IN_BSTR a_bstrPreferredLanguage, +- IN_BSTR a_bstrFormat, BSTR *a_pbstrLicense); +- /** @} */ +- +- /** @name IExtPack interfaces +- * @{ */ +- STDMETHOD(QueryObject)(IN_BSTR a_bstrObjectId, IUnknown **a_ppUnknown); +- /** @} */ +- +- /** @name Internal interfaces used by ExtPackManager. +- * @{ */ +- bool callInstalledHook(IVirtualBox *a_pVirtualBox, AutoWriteLock *a_pLock, PRTERRINFO pErrInfo); +- HRESULT callUninstallHookAndClose(IVirtualBox *a_pVirtualBox, bool a_fForcedRemoval); +- bool callVirtualBoxReadyHook(IVirtualBox *a_pVirtualBox, AutoWriteLock *a_pLock); +- bool callConsoleReadyHook(IConsole *a_pConsole, AutoWriteLock *a_pLock); +- bool callVmCreatedHook(IVirtualBox *a_pVirtualBox, IMachine *a_pMachine, AutoWriteLock *a_pLock); +- bool callVmConfigureVmmHook(IConsole *a_pConsole, PVM a_pVM, AutoWriteLock *a_pLock, int *a_pvrc); +- bool callVmPowerOnHook(IConsole *a_pConsole, PVM a_pVM, AutoWriteLock *a_pLock, int *a_pvrc); +- bool callVmPowerOffHook(IConsole *a_pConsole, PVM a_pVM, AutoWriteLock *a_pLock); +- HRESULT checkVrde(void); +- HRESULT getVrdpLibraryName(Utf8Str *a_pstrVrdeLibrary); +- bool wantsToBeDefaultVrde(void) const; +- HRESULT refresh(bool *pfCanDelete); +- /** @} */ +- +-protected: +- /** @name Internal helper methods. +- * @{ */ +- void probeAndLoad(void); +- bool findModule(const char *a_pszName, const char *a_pszExt, VBOXEXTPACKMODKIND a_enmKind, +- Utf8Str *a_ppStrFound, bool *a_pfNative, PRTFSOBJINFO a_pObjInfo) const; +- static bool objinfoIsEqual(PCRTFSOBJINFO pObjInfo1, PCRTFSOBJINFO pObjInfo2); +- /** @} */ +- +- /** @name Extension Pack Helpers +- * @{ */ +- static DECLCALLBACK(int) hlpFindModule(PCVBOXEXTPACKHLP pHlp, const char *pszName, const char *pszExt, +- VBOXEXTPACKMODKIND enmKind, char *pszFound, size_t cbFound, bool *pfNative); +- static DECLCALLBACK(int) hlpGetFilePath(PCVBOXEXTPACKHLP pHlp, const char *pszFilename, char *pszPath, size_t cbPath); +- static DECLCALLBACK(VBOXEXTPACKCTX) hlpGetContext(PCVBOXEXTPACKHLP pHlp); +- static DECLCALLBACK(int) hlpReservedN(PCVBOXEXTPACKHLP pHlp); +- /** @} */ +- +-private: +- struct Data; +- /** Pointer to the private instance. */ +- Data *m; +- +- friend class ExtPackManager; +-}; +- +- +-/** +- * Extension pack manager. +- */ +-class ATL_NO_VTABLE ExtPackManager : +- public VirtualBoxBase, +- VBOX_SCRIPTABLE_IMPL(IExtPackManager) +-{ +- /** @name COM and internal init/term/mapping cruft. +- * @{ */ +- VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT(ExtPackManager, IExtPackManager) +- DECLARE_NOT_AGGREGATABLE(ExtPackManager) +- DECLARE_PROTECT_FINAL_CONSTRUCT() +- BEGIN_COM_MAP(ExtPackManager) +- VBOX_DEFAULT_INTERFACE_ENTRIES(IExtPackManager) +- END_COM_MAP() +- DECLARE_EMPTY_CTOR_DTOR(ExtPackManager) +- +- HRESULT FinalConstruct(); +- void FinalRelease(); +- HRESULT initExtPackManager(VirtualBox *a_pVirtualBox, VBOXEXTPACKCTX a_enmContext); +- void uninit(); +- RTMEMEF_NEW_AND_DELETE_OPERATORS(); +- /** @} */ +- +- /** @name IExtPack interfaces +- * @{ */ +- STDMETHOD(COMGETTER(InstalledExtPacks))(ComSafeArrayOut(IExtPack *, a_paExtPacks)); +- STDMETHOD(Find)(IN_BSTR a_bstrName, IExtPack **a_pExtPack); +- STDMETHOD(OpenExtPackFile)(IN_BSTR a_bstrTarball, IExtPackFile **a_ppExtPackFile); +- STDMETHOD(Uninstall)(IN_BSTR a_bstrName, BOOL a_fForcedRemoval, IN_BSTR a_bstrDisplayInfo, IProgress **a_ppProgress); +- STDMETHOD(Cleanup)(void); +- STDMETHOD(QueryAllPlugInsForFrontend)(IN_BSTR a_bstrFrontend, ComSafeArrayOut(BSTR, a_pabstrPlugInModules)); +- STDMETHOD(IsExtPackUsable(IN_BSTR a_bstrExtPack, BOOL *aUsable)); +- /** @} */ +- +- /** @name Internal interfaces used by other Main classes. +- * @{ */ +- static DECLCALLBACK(int) doInstallThreadProc(RTTHREAD hThread, void *pvJob); +- HRESULT doInstall(ExtPackFile *a_pExtPackFile, bool a_fReplace, Utf8Str const *a_pstrDisplayInfo); +- static DECLCALLBACK(int) doUninstallThreadProc(RTTHREAD hThread, void *pvJob); +- HRESULT doUninstall(const Utf8Str *a_pstrName, bool a_fForcedRemoval, const Utf8Str *a_pstrDisplayInfo); +- void callAllVirtualBoxReadyHooks(void); +- void callAllConsoleReadyHooks(IConsole *a_pConsole); +- void callAllVmCreatedHooks(IMachine *a_pMachine); +- int callAllVmConfigureVmmHooks(IConsole *a_pConsole, PVM a_pVM); +- int callAllVmPowerOnHooks(IConsole *a_pConsole, PVM a_pVM); +- void callAllVmPowerOffHooks(IConsole *a_pConsole, PVM a_pVM); +- HRESULT checkVrdeExtPack(Utf8Str const *a_pstrExtPack); +- int getVrdeLibraryPathForExtPack(Utf8Str const *a_pstrExtPack, Utf8Str *a_pstrVrdeLibrary); +- HRESULT getDefaultVrdeExtPack(Utf8Str *a_pstrExtPack); +- bool isExtPackUsable(const char *a_pszExtPack); +- void dumpAllToReleaseLog(void); +- /** @} */ +- +-private: +- HRESULT runSetUidToRootHelper(Utf8Str const *a_pstrDisplayInfo, const char *a_pszCommand, ...); +- ExtPack *findExtPack(const char *a_pszName); +- void removeExtPack(const char *a_pszName); +- HRESULT refreshExtPack(const char *a_pszName, bool a_fUnsuableIsError, ExtPack **a_ppExtPack); +- +-private: +- struct Data; +- /** Pointer to the private instance. */ +- Data *m; +-}; +- +-#endif +-/* vi: set tabstop=4 shiftwidth=4 expandtab: */ +--- VirtualBox-4.1.18.orig/src/VBox/Main/include/ExtPackUtil.h 2012-06-20 10:17:33.000000000 -0300 ++++ /dev/null 2012-07-24 14:48:18.638572110 -0300 +@@ -1,137 +0,0 @@ +-/* $Id: ExtPackUtil.h $ */ +-/** @file +- * VirtualBox Main - Extension Pack Utilities and definitions, VBoxC, VBoxSVC, ++. +- */ +- +-/* +- * Copyright (C) 2010 Oracle Corporation +- * +- * This file is part of VirtualBox Open Source Edition (OSE), as +- * available from http://www.virtualbox.org. This file is free software; +- * you can redistribute it and/or modify it under the terms of the GNU +- * General Public License (GPL) as published by the Free Software +- * Foundation, in version 2 as it comes in the "COPYING" file of the +- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the +- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. +- */ +- +-#ifndef ____H_EXTPACKUTIL +-#define ____H_EXTPACKUTIL +- +-#include <iprt/cpp/ministring.h> +-#include <iprt/fs.h> +-#include <iprt/vfs.h> +- +- +-/** @name VBOX_EXTPACK_DESCRIPTION_NAME +- * The name of the description file in an extension pack. */ +-#define VBOX_EXTPACK_DESCRIPTION_NAME "ExtPack.xml" +-/** @name VBOX_EXTPACK_DESCRIPTION_NAME +- * The name of the manifest file in an extension pack. */ +-#define VBOX_EXTPACK_MANIFEST_NAME "ExtPack.manifest" +-/** @name VBOX_EXTPACK_SIGNATURE_NAME +- * The name of the signature file in an extension pack. */ +-#define VBOX_EXTPACK_SIGNATURE_NAME "ExtPack.signature" +-/** @name VBOX_EXTPACK_LICENSE_NAME_PREFIX +- * The name prefix of a license file in an extension pack. There can be +- * several license files in a pack, the variations being on locale, language +- * and format (HTML, RTF, plain text). All extension packages shall include +- * a */ +-#define VBOX_EXTPACK_LICENSE_NAME_PREFIX "ExtPack-license" +-/** @name VBOX_EXTPACK_SUFFIX +- * The suffix of a extension pack tarball. */ +-#define VBOX_EXTPACK_SUFFIX ".vbox-extpack" +- +-/** The minimum length (strlen) of a extension pack name. */ +-#define VBOX_EXTPACK_NAME_MIN_LEN 3 +-/** The max length (strlen) of a extension pack name. */ +-#define VBOX_EXTPACK_NAME_MAX_LEN 64 +- +-/** The architecture-dependent application data subdirectory where the +- * extension packs are installed. Relative to RTPathAppPrivateArch. */ +-#define VBOX_EXTPACK_INSTALL_DIR "ExtensionPacks" +-/** The architecture-independent application data subdirectory where the +- * certificates are installed. Relative to RTPathAppPrivateNoArch. */ +-#define VBOX_EXTPACK_CERT_DIR "ExtPackCertificates" +- +-/** The maximum entry name length. +- * Play short and safe. */ +-#define VBOX_EXTPACK_MAX_MEMBER_NAME_LENGTH 128 +- +- +-/** +- * Plug-in descriptor. +- */ +-typedef struct VBOXEXTPACKPLUGINDESC +-{ +- /** The name. */ +- RTCString strName; +- /** The module name. */ +- RTCString strModule; +- /** The description. */ +- RTCString strDescription; +- /** The frontend or component which it plugs into. */ +- RTCString strFrontend; +-} VBOXEXTPACKPLUGINDESC; +-/** Pointer to a plug-in descriptor. */ +-typedef VBOXEXTPACKPLUGINDESC *PVBOXEXTPACKPLUGINDESC; +- +-/** +- * Extension pack descriptor +- * +- * This is the internal representation of the ExtPack.xml. +- */ +-typedef struct VBOXEXTPACKDESC +-{ +- /** The name. */ +- RTCString strName; +- /** The description. */ +- RTCString strDescription; +- /** The version string. */ +- RTCString strVersion; +- /** The edition string. */ +- RTCString strEdition; +- /** The internal revision number. */ +- uint32_t uRevision; +- /** The name of the main module. */ +- RTCString strMainModule; +- /** The name of the VRDE module, empty if none. */ +- RTCString strVrdeModule; +- /** The number of plug-in descriptors. */ +- uint32_t cPlugIns; +- /** Pointer to an array of plug-in descriptors. */ +- PVBOXEXTPACKPLUGINDESC paPlugIns; +- /** Whether to show the license prior to installation. */ +- bool fShowLicense; +-} VBOXEXTPACKDESC; +- +-/** Pointer to a extension pack descriptor. */ +-typedef VBOXEXTPACKDESC *PVBOXEXTPACKDESC; +-/** Pointer to a const extension pack descriptor. */ +-typedef VBOXEXTPACKDESC const *PCVBOXEXTPACKDESC; +- +- +-void VBoxExtPackInitDesc(PVBOXEXTPACKDESC a_pExtPackDesc); +-RTCString *VBoxExtPackLoadDesc(const char *a_pszDir, PVBOXEXTPACKDESC a_pExtPackDesc, PRTFSOBJINFO a_pObjInfo); +-RTCString *VBoxExtPackLoadDescFromVfsFile(RTVFSFILE hVfsFile, PVBOXEXTPACKDESC a_pExtPackDesc, PRTFSOBJINFO a_pObjInfo); +-RTCString *VBoxExtPackExtractNameFromTarballPath(const char *pszTarball); +-void VBoxExtPackFreeDesc(PVBOXEXTPACKDESC a_pExtPackDesc); +-bool VBoxExtPackIsValidName(const char *pszName); +-bool VBoxExtPackIsValidMangledName(const char *pszMangledName, size_t cchMax = RTSTR_MAX); +-RTCString *VBoxExtPackMangleName(const char *pszName); +-RTCString *VBoxExtPackUnmangleName(const char *pszMangledName, size_t cbMax); +-int VBoxExtPackCalcDir(char *pszExtPackDir, size_t cbExtPackDir, const char *pszParentDir, const char *pszName); +-bool VBoxExtPackIsValidVersionString(const char *pszVersion); +-bool VBoxExtPackIsValidEditionString(const char *pszEdition); +-bool VBoxExtPackIsValidModuleString(const char *pszModule); +- +-int VBoxExtPackValidateMember(const char *pszName, RTVFSOBJTYPE enmType, RTVFSOBJ hVfsObj, char *pszError, size_t cbError); +-int VBoxExtPackOpenTarFss(RTFILE hTarballFile, char *pszError, size_t cbError, PRTVFSFSSTREAM phTarFss, PRTMANIFEST phFileManifest); +-int VBoxExtPackValidateTarball(RTFILE hTarballFile, const char *pszExtPackName, +- const char *pszTarball, const char *pszTarballDigest, +- char *pszError, size_t cbError, +- PRTMANIFEST phValidManifest, PRTVFSFILE phXmlFile, RTCString *pStrDigest); +- +- +-#endif +- +--- VirtualBox-4.1.18.orig/src/VBox/Main/src-all/ExtPackManagerImpl.cpp 2012-06-20 10:17:34.000000000 -0300 ++++ /dev/null 2012-07-24 14:48:18.638572110 -0300 +@@ -1,3126 +0,0 @@ +-/* $Id: ExtPackManagerImpl.cpp $ */ +-/** @file +- * VirtualBox Main - interface for Extension Packs, VBoxSVC & VBoxC. +- */ +- +-/* +- * Copyright (C) 2010 Oracle Corporation +- * +- * This file is part of VirtualBox Open Source Edition (OSE), as +- * available from http://www.virtualbox.org. This file is free software; +- * you can redistribute it and/or modify it under the terms of the GNU +- * General Public License (GPL) as published by the Free Software +- * Foundation, in version 2 as it comes in the "COPYING" file of the +- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the +- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. +- */ +- +- +-/******************************************************************************* +-* Header Files * +-*******************************************************************************/ +-#include "ExtPackManagerImpl.h" +-#include "ExtPackUtil.h" +- +-#include <iprt/buildconfig.h> +-#include <iprt/ctype.h> +-#include <iprt/dir.h> +-#include <iprt/env.h> +-#include <iprt/file.h> +-#include <iprt/ldr.h> +-#include <iprt/manifest.h> +-#include <iprt/param.h> +-#include <iprt/path.h> +-#include <iprt/pipe.h> +-#include <iprt/process.h> +-#include <iprt/string.h> +- +-#include <VBox/com/array.h> +-#include <VBox/com/ErrorInfo.h> +-#include <VBox/err.h> +-#include <VBox/log.h> +-#include <VBox/sup.h> +-#include <VBox/version.h> +-#include "AutoCaller.h" +-#include "Global.h" +-#include "ProgressImpl.h" +-#include "SystemPropertiesImpl.h" +-#include "VirtualBoxImpl.h" +- +- +-/******************************************************************************* +-* Defined Constants And Macros * +-*******************************************************************************/ +-/** @name VBOX_EXTPACK_HELPER_NAME +- * The name of the utility application we employ to install and uninstall the +- * extension packs. This is a set-uid-to-root binary on unixy platforms, which +- * is why it has to be a separate application. +- */ +-#if defined(RT_OS_WINDOWS) || defined(RT_OS_OS2) +-# define VBOX_EXTPACK_HELPER_NAME "VBoxExtPackHelperApp.exe" +-#else +-# define VBOX_EXTPACK_HELPER_NAME "VBoxExtPackHelperApp" +-#endif +- +- +-/******************************************************************************* +-* Structures and Typedefs * +-*******************************************************************************/ +-struct ExtPackBaseData +-{ +-public: +- /** The extension pack descriptor (loaded from the XML, mostly). */ +- VBOXEXTPACKDESC Desc; +- /** The file system object info of the XML file. +- * This is for detecting changes and save time in refresh(). */ +- RTFSOBJINFO ObjInfoDesc; +- /** Whether it's usable or not. */ +- bool fUsable; +- /** Why it is unusable. */ +- Utf8Str strWhyUnusable; +-}; +- +-/** +- * Private extension pack data. +- */ +-struct ExtPackFile::Data : public ExtPackBaseData +-{ +-public: +- /** The path to the tarball. */ +- Utf8Str strExtPackFile; +- /** The SHA-256 hash of the file (as string). */ +- Utf8Str strDigest; +- /** The file handle of the extension pack file. */ +- RTFILE hExtPackFile; +- /** Our manifest for the tarball. */ +- RTMANIFEST hOurManifest; +- /** Pointer to the extension pack manager. */ +- ComObjPtr<ExtPackManager> ptrExtPackMgr; +- /** Pointer to the VirtualBox object so we can create a progress object. */ +- VirtualBox *pVirtualBox; +- +- RTMEMEF_NEW_AND_DELETE_OPERATORS(); +-}; +- +-/** +- * Private extension pack data. +- */ +-struct ExtPack::Data : public ExtPackBaseData +-{ +-public: +- /** Where the extension pack is located. */ +- Utf8Str strExtPackPath; +- /** The file system object info of the extension pack directory. +- * This is for detecting changes and save time in refresh(). */ +- RTFSOBJINFO ObjInfoExtPack; +- /** The full path to the main module. */ +- Utf8Str strMainModPath; +- /** The file system object info of the main module. +- * This is used to determin whether to bother try reload it. */ +- RTFSOBJINFO ObjInfoMainMod; +- /** The module handle of the main extension pack module. */ +- RTLDRMOD hMainMod; +- +- /** The helper callbacks for the extension pack. */ +- VBOXEXTPACKHLP Hlp; +- /** Pointer back to the extension pack object (for Hlp methods). */ +- ExtPack *pThis; +- /** The extension pack registration structure. */ +- PCVBOXEXTPACKREG pReg; +- /** The current context. */ +- VBOXEXTPACKCTX enmContext; +- /** Set if we've made the pfnVirtualBoxReady or pfnConsoleReady call. */ +- bool fMadeReadyCall; +- +- RTMEMEF_NEW_AND_DELETE_OPERATORS(); +-}; +- +-/** List of extension packs. */ +-typedef std::list< ComObjPtr<ExtPack> > ExtPackList; +- +-/** +- * Private extension pack manager data. +- */ +-struct ExtPackManager::Data +-{ +- /** The directory where the extension packs are installed. */ +- Utf8Str strBaseDir; +- /** The directory where the certificates this installation recognizes are +- * stored. */ +- Utf8Str strCertificatDirPath; +- /** The list of installed extension packs. */ +- ExtPackList llInstalledExtPacks; +- /** Pointer to the VirtualBox object, our parent. */ +- VirtualBox *pVirtualBox; +- /** The current context. */ +- VBOXEXTPACKCTX enmContext; +-#if !defined(RT_OS_WINDOWS) && !defined(RT_OS_DARWIN) +- /** File handle for the VBoxVMM libary which we slurp because ExtPacks depend on it. */ +- RTLDRMOD hVBoxVMM; +-#endif +- +- RTMEMEF_NEW_AND_DELETE_OPERATORS(); +-}; +- +-/** +- * Extension pack installation job. +- */ +-typedef struct EXTPACKINSTALLJOB +-{ +- /** Smart pointer to the extension pack file. */ +- ComPtr<ExtPackFile> ptrExtPackFile; +- /** The replace argument. */ +- bool fReplace; +- /** The display info argument. */ +- Utf8Str strDisplayInfo; +- /** Smart pointer to the extension manager. */ +- ComPtr<ExtPackManager> ptrExtPackMgr; +- /** Smart pointer to the progress object for this job. */ +- ComObjPtr<Progress> ptrProgress; +-} EXTPACKINSTALLJOB; +-/** Pointer to an extension pack installation job. */ +-typedef EXTPACKINSTALLJOB *PEXTPACKINSTALLJOB; +- +-/** +- * Extension pack uninstallation job. +- */ +-typedef struct EXTPACKUNINSTALLJOB +-{ +- /** Smart pointer to the extension manager. */ +- ComPtr<ExtPackManager> ptrExtPackMgr; +- /** The name of the extension pack. */ +- Utf8Str strName; +- /** The replace argument. */ +- bool fForcedRemoval; +- /** The display info argument. */ +- Utf8Str strDisplayInfo; +- /** Smart pointer to the progress object for this job. */ +- ComObjPtr<Progress> ptrProgress; +-} EXTPACKUNINSTALLJOB; +-/** Pointer to an extension pack uninstallation job. */ +-typedef EXTPACKUNINSTALLJOB *PEXTPACKUNINSTALLJOB; +- +- +-DEFINE_EMPTY_CTOR_DTOR(ExtPackFile) +- +-/** +- * Called by ComObjPtr::createObject when creating the object. +- * +- * Just initialize the basic object state, do the rest in initWithDir(). +- * +- * @returns S_OK. +- */ +-HRESULT ExtPackFile::FinalConstruct() +-{ +- m = NULL; +- return BaseFinalConstruct(); +-} +- +-/** +- * Initializes the extension pack by reading its file. +- * +- * @returns COM status code. +- * @param a_pszFile The path to the extension pack file. +- * @param a_pszDigest The SHA-256 digest of the file. Or an empty string. +- * @param a_pExtPackMgr Pointer to the extension pack manager. +- * @param a_pVirtualBox Pointer to the VirtualBox object. +- */ +-HRESULT ExtPackFile::initWithFile(const char *a_pszFile, const char *a_pszDigest, ExtPackManager *a_pExtPackMgr, VirtualBox *a_pVirtualBox) +-{ +- AutoInitSpan autoInitSpan(this); +- AssertReturn(autoInitSpan.isOk(), E_FAIL); +- +- /* +- * Allocate + initialize our private data. +- */ +- m = new ExtPackFile::Data; +- VBoxExtPackInitDesc(&m->Desc); +- RT_ZERO(m->ObjInfoDesc); +- m->fUsable = false; +- m->strWhyUnusable = tr("ExtPack::init failed"); +- m->strExtPackFile = a_pszFile; +- m->strDigest = a_pszDigest; +- m->hExtPackFile = NIL_RTFILE; +- m->hOurManifest = NIL_RTMANIFEST; +- m->ptrExtPackMgr = a_pExtPackMgr; +- m->pVirtualBox = a_pVirtualBox; +- +- RTCString *pstrTarName = VBoxExtPackExtractNameFromTarballPath(a_pszFile); +- if (pstrTarName) +- { +- m->Desc.strName = *pstrTarName; +- delete pstrTarName; +- pstrTarName = NULL; +- } +- +- autoInitSpan.setSucceeded(); +- +- /* +- * Try open the extension pack and check that it is a regular file. +- */ +- int vrc = RTFileOpen(&m->hExtPackFile, a_pszFile, +- RTFILE_O_READ | RTFILE_O_DENY_WRITE | RTFILE_O_OPEN); +- if (RT_FAILURE(vrc)) +- { +- if (vrc == VERR_FILE_NOT_FOUND || vrc == VERR_PATH_NOT_FOUND) +- return initFailed(tr("'%s' file not found"), a_pszFile); +- return initFailed(tr("RTFileOpen('%s',,) failed with %Rrc"), a_pszFile, vrc); +- } +- +- RTFSOBJINFO ObjInfo; +- vrc = RTFileQueryInfo(m->hExtPackFile, &ObjInfo, RTFSOBJATTRADD_UNIX); +- if (RT_FAILURE(vrc)) +- return initFailed(tr("RTFileQueryInfo failed with %Rrc on '%s'"), vrc, a_pszFile); +- if (!RTFS_IS_FILE(ObjInfo.Attr.fMode)) +- return initFailed(tr("Not a regular file: %s"), a_pszFile); +- +- /* +- * Validate the tarball and extract the XML file. +- */ +- char szError[8192]; +- RTVFSFILE hXmlFile; +- vrc = VBoxExtPackValidateTarball(m->hExtPackFile, NULL /*pszExtPackName*/, a_pszFile, a_pszDigest, +- szError, sizeof(szError), &m->hOurManifest, &hXmlFile, &m->strDigest); +- if (RT_FAILURE(vrc)) +- return initFailed(tr("%s"), szError); +- +- /* +- * Parse the XML. +- */ +- RTCString strSavedName(m->Desc.strName); +- RTCString *pStrLoadErr = VBoxExtPackLoadDescFromVfsFile(hXmlFile, &m->Desc, &m->ObjInfoDesc); +- RTVfsFileRelease(hXmlFile); +- if (pStrLoadErr != NULL) +- { +- m->strWhyUnusable.printf(tr("Failed to the xml file: %s"), pStrLoadErr->c_str()); +- m->Desc.strName = strSavedName; +- delete pStrLoadErr; +- return S_OK; +- } +- +- /* +- * Match the tarball name with the name from the XML. +- */ +- /** @todo drop this restriction after the old install interface is +- * dropped. */ +- if (!strSavedName.equalsIgnoreCase(m->Desc.strName)) +- return initFailed(tr("Extension pack name mismatch between the downloaded file and the XML inside it (xml='%s' file='%s')"), +- m->Desc.strName.c_str(), strSavedName.c_str()); +- +- m->fUsable = true; +- m->strWhyUnusable.setNull(); +- return S_OK; +-} +- +-/** +- * Protected helper that formats the strWhyUnusable value. +- * +- * @returns S_OK +- * @param a_pszWhyFmt Why it failed, format string. +- * @param ... The format arguments. +- */ +-HRESULT ExtPackFile::initFailed(const char *a_pszWhyFmt, ...) +-{ +- va_list va; +- va_start(va, a_pszWhyFmt); +- m->strWhyUnusable.printfV(a_pszWhyFmt, va); +- va_end(va); +- return S_OK; +-} +- +-/** +- * COM cruft. +- */ +-void ExtPackFile::FinalRelease() +-{ +- uninit(); +- BaseFinalRelease(); +-} +- +-/** +- * Do the actual cleanup. +- */ +-void ExtPackFile::uninit() +-{ +- /* Enclose the state transition Ready->InUninit->NotReady */ +- AutoUninitSpan autoUninitSpan(this); +- if (!autoUninitSpan.uninitDone() && m != NULL) +- { +- VBoxExtPackFreeDesc(&m->Desc); +- RTFileClose(m->hExtPackFile); +- m->hExtPackFile = NIL_RTFILE; +- RTManifestRelease(m->hOurManifest); +- m->hOurManifest = NIL_RTMANIFEST; +- +- delete m; +- m = NULL; +- } +-} +- +-STDMETHODIMP ExtPackFile::COMGETTER(Name)(BSTR *a_pbstrName) +-{ +- CheckComArgOutPointerValid(a_pbstrName); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- Bstr str(m->Desc.strName); +- str.cloneTo(a_pbstrName); +- } +- return hrc; +-} +- +-STDMETHODIMP ExtPackFile::COMGETTER(Description)(BSTR *a_pbstrDescription) +-{ +- CheckComArgOutPointerValid(a_pbstrDescription); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- Bstr str(m->Desc.strDescription); +- str.cloneTo(a_pbstrDescription); +- } +- return hrc; +-} +- +-STDMETHODIMP ExtPackFile::COMGETTER(Version)(BSTR *a_pbstrVersion) +-{ +- CheckComArgOutPointerValid(a_pbstrVersion); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- /* HACK ALERT: This is for easing backporting to 4.1. The edition stuff +- will be changed into a separate */ +- if (m->Desc.strEdition.isEmpty()) +- { +- Bstr str(m->Desc.strVersion); +- str.cloneTo(a_pbstrVersion); +- } +- else +- { +- RTCString strHack(m->Desc.strVersion); +- strHack.append('-'); +- strHack.append(m->Desc.strEdition); +- +- Bstr str(strHack); +- str.cloneTo(a_pbstrVersion); +- } +- } +- return hrc; +-} +- +-STDMETHODIMP ExtPackFile::COMGETTER(Revision)(ULONG *a_puRevision) +-{ +- CheckComArgOutPointerValid(a_puRevision); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- *a_puRevision = m->Desc.uRevision; +- return hrc; +-} +- +-STDMETHODIMP ExtPackFile::COMGETTER(VRDEModule)(BSTR *a_pbstrVrdeModule) +-{ +- CheckComArgOutPointerValid(a_pbstrVrdeModule); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- Bstr str(m->Desc.strVrdeModule); +- str.cloneTo(a_pbstrVrdeModule); +- } +- return hrc; +-} +- +-STDMETHODIMP ExtPackFile::COMGETTER(PlugIns)(ComSafeArrayOut(IExtPackPlugIn *, a_paPlugIns)) +-{ +- /** @todo implement plug-ins. */ +-#ifdef VBOX_WITH_XPCOM +- NOREF(a_paPlugIns); +- NOREF(a_paPlugInsSize); +-#endif +- ReturnComNotImplemented(); +-} +- +-STDMETHODIMP ExtPackFile::COMGETTER(Usable)(BOOL *a_pfUsable) +-{ +- CheckComArgOutPointerValid(a_pfUsable); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- *a_pfUsable = m->fUsable; +- return hrc; +-} +- +-STDMETHODIMP ExtPackFile::COMGETTER(WhyUnusable)(BSTR *a_pbstrWhy) +-{ +- CheckComArgOutPointerValid(a_pbstrWhy); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- m->strWhyUnusable.cloneTo(a_pbstrWhy); +- return hrc; +-} +- +-STDMETHODIMP ExtPackFile::COMGETTER(ShowLicense)(BOOL *a_pfShowIt) +-{ +- CheckComArgOutPointerValid(a_pfShowIt); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- *a_pfShowIt = m->Desc.fShowLicense; +- return hrc; +-} +- +-STDMETHODIMP ExtPackFile::COMGETTER(License)(BSTR *a_pbstrHtmlLicense) +-{ +- Bstr bstrHtml("html"); +- return QueryLicense(Bstr::Empty.raw(), Bstr::Empty.raw(), bstrHtml.raw(), a_pbstrHtmlLicense); +-} +- +-/* Same as ExtPack::QueryLicense, should really explore the subject of base classes here... */ +-STDMETHODIMP ExtPackFile::QueryLicense(IN_BSTR a_bstrPreferredLocale, IN_BSTR a_bstrPreferredLanguage, IN_BSTR a_bstrFormat, +- BSTR *a_pbstrLicense) +-{ +- /* +- * Validate input. +- */ +- CheckComArgOutPointerValid(a_pbstrLicense); +- CheckComArgNotNull(a_bstrPreferredLocale); +- CheckComArgNotNull(a_bstrPreferredLanguage); +- CheckComArgNotNull(a_bstrFormat); +- +- Utf8Str strPreferredLocale(a_bstrPreferredLocale); +- if (strPreferredLocale.length() != 2 && strPreferredLocale.length() != 0) +- return setError(E_FAIL, tr("The preferred locale is a two character string or empty.")); +- +- Utf8Str strPreferredLanguage(a_bstrPreferredLanguage); +- if (strPreferredLanguage.length() != 2 && strPreferredLanguage.length() != 0) +- return setError(E_FAIL, tr("The preferred lanuage is a two character string or empty.")); +- +- Utf8Str strFormat(a_bstrFormat); +- if ( !strFormat.equals("html") +- && !strFormat.equals("rtf") +- && !strFormat.equals("txt")) +- return setError(E_FAIL, tr("The license format can only have the values 'html', 'rtf' and 'txt'.")); +- +- /* +- * Combine the options to form a file name before locking down anything. +- */ +- char szName[sizeof(VBOX_EXTPACK_LICENSE_NAME_PREFIX "-de_DE.html") + 2]; +- if (strPreferredLocale.isNotEmpty() && strPreferredLanguage.isNotEmpty()) +- RTStrPrintf(szName, sizeof(szName), VBOX_EXTPACK_LICENSE_NAME_PREFIX "-%s_%s.%s", +- strPreferredLocale.c_str(), strPreferredLanguage.c_str(), strFormat.c_str()); +- else if (strPreferredLocale.isNotEmpty()) +- RTStrPrintf(szName, sizeof(szName), VBOX_EXTPACK_LICENSE_NAME_PREFIX "-%s.%s", strPreferredLocale.c_str(), strFormat.c_str()); +- else if (strPreferredLanguage.isNotEmpty()) +- RTStrPrintf(szName, sizeof(szName), VBOX_EXTPACK_LICENSE_NAME_PREFIX "-_%s.%s", strPreferredLocale.c_str(), strFormat.c_str()); +- else +- RTStrPrintf(szName, sizeof(szName), VBOX_EXTPACK_LICENSE_NAME_PREFIX ".%s", strFormat.c_str()); +- +- /* +- * Lock the extension pack. We need a write lock here as there must not be +- * concurrent accesses to the tar file handle. +- */ +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS); +- +- /* +- * Do not permit this query on a pack that isn't considered usable (could +- * be marked so because of bad license files). +- */ +- if (!m->fUsable) +- hrc = setError(E_FAIL, tr("%s"), m->strWhyUnusable.c_str()); +- else +- { +- /* +- * Look it up in the manifest before scanning the tarball for it +- */ +- if (RTManifestEntryExists(m->hOurManifest, szName)) +- { +- RTVFSFSSTREAM hTarFss; +- char szError[8192]; +- int vrc = VBoxExtPackOpenTarFss(m->hExtPackFile, szError, sizeof(szError), &hTarFss, NULL); +- if (RT_SUCCESS(vrc)) +- { +- for (;;) +- { +- /* Get the first/next. */ +- char *pszName; +- RTVFSOBJ hVfsObj; +- RTVFSOBJTYPE enmType; +- vrc = RTVfsFsStrmNext(hTarFss, &pszName, &enmType, &hVfsObj); +- if (RT_FAILURE(vrc)) +- { +- if (vrc != VERR_EOF) +- hrc = setError(VBOX_E_IPRT_ERROR, tr("RTVfsFsStrmNext failed: %Rrc"), vrc); +- else +- hrc = setError(E_UNEXPECTED, tr("'%s' was found in the manifest but not in the tarball"), szName); +- break; +- } +- +- /* Is this it? */ +- const char *pszAdjName = pszName[0] == '.' && pszName[1] == '/' ? &pszName[2] : pszName; +- if ( !strcmp(pszAdjName, szName) +- && ( enmType == RTVFSOBJTYPE_IO_STREAM +- || enmType == RTVFSOBJTYPE_FILE)) +- { +- RTVFSIOSTREAM hVfsIos = RTVfsObjToIoStream(hVfsObj); +- RTVfsObjRelease(hVfsObj); +- RTStrFree(pszName); +- +- /* Load the file into memory. */ +- RTFSOBJINFO ObjInfo; +- vrc = RTVfsIoStrmQueryInfo(hVfsIos, &ObjInfo, RTFSOBJATTRADD_NOTHING); +- if (RT_SUCCESS(vrc)) +- { +- size_t cbFile = (size_t)ObjInfo.cbObject; +- void *pvFile = RTMemAllocZ(cbFile + 1); +- if (pvFile) +- { +- vrc = RTVfsIoStrmRead(hVfsIos, pvFile, cbFile, true /*fBlocking*/, NULL); +- if (RT_SUCCESS(vrc)) +- { +- /* try translate it into a string we can return. */ +- Bstr bstrLicense((const char *)pvFile, cbFile); +- if (bstrLicense.isNotEmpty()) +- { +- bstrLicense.detachTo(a_pbstrLicense); +- hrc = S_OK; +- } +- else +- hrc = setError(VBOX_E_IPRT_ERROR, +- tr("The license file '%s' is empty or contains invalid UTF-8 encoding"), +- szName); +- } +- else +- hrc = setError(VBOX_E_IPRT_ERROR, tr("Failed to read '%s': %Rrc"), szName, vrc); +- RTMemFree(pvFile); +- } +- else +- hrc = setError(E_OUTOFMEMORY, tr("Failed to allocate %zu bytes for '%s'"), cbFile, szName); +- } +- else +- hrc = setError(VBOX_E_IPRT_ERROR, tr("RTVfsIoStrmQueryInfo on '%s': %Rrc"), szName, vrc); +- RTVfsIoStrmRelease(hVfsIos); +- break; +- } +- +- /* Release current. */ +- RTVfsObjRelease(hVfsObj); +- RTStrFree(pszName); +- } +- RTVfsFsStrmRelease(hTarFss); +- } +- else +- hrc = setError(VBOX_E_OBJECT_NOT_FOUND, tr("%s"), szError); +- } +- else +- hrc = setError(VBOX_E_OBJECT_NOT_FOUND, tr("The license file '%s' was not found in '%s'"), +- szName, m->strExtPackFile.c_str()); +- } +- } +- return hrc; +-} +- +-STDMETHODIMP ExtPackFile::COMGETTER(FilePath)(BSTR *a_pbstrPath) +-{ +- CheckComArgOutPointerValid(a_pbstrPath); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- m->strExtPackFile.cloneTo(a_pbstrPath); +- return hrc; +-} +- +-STDMETHODIMP ExtPackFile::Install(BOOL a_fReplace, IN_BSTR a_bstrDisplayInfo, IProgress **a_ppProgress) +-{ +- if (a_ppProgress) +- *a_ppProgress = NULL; +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- if (m->fUsable) +- { +- PEXTPACKINSTALLJOB pJob = NULL; +- try +- { +- pJob = new EXTPACKINSTALLJOB; +- pJob->ptrExtPackFile = this; +- pJob->fReplace = a_fReplace != FALSE; +- pJob->strDisplayInfo = a_bstrDisplayInfo; +- pJob->ptrExtPackMgr = m->ptrExtPackMgr; +- hrc = pJob->ptrProgress.createObject(); +- if (SUCCEEDED(hrc)) +- { +- Bstr bstrDescription = tr("Installing extension pack"); +- hrc = pJob->ptrProgress->init( +-#ifndef VBOX_COM_INPROC +- m->pVirtualBox, +-#endif +- static_cast<IExtPackFile *>(this), +- bstrDescription.raw(), +- FALSE /*aCancelable*/, +- NULL /*aId*/); +- } +- if (SUCCEEDED(hrc)) +- { +- ComPtr<Progress> ptrProgress = pJob->ptrProgress; +- int vrc = RTThreadCreate(NULL /*phThread*/, ExtPackManager::doInstallThreadProc, pJob, 0, +- RTTHREADTYPE_DEFAULT, 0 /*fFlags*/, "ExtPackInst"); +- if (RT_SUCCESS(vrc)) +- { +- pJob = NULL; /* the thread deletes it */ +- ptrProgress.queryInterfaceTo(a_ppProgress); +- } +- else +- hrc = setError(VBOX_E_IPRT_ERROR, tr("RTThreadCreate failed with %Rrc"), vrc); +- } +- } +- catch (std::bad_alloc) +- { +- hrc = E_OUTOFMEMORY; +- } +- if (pJob) +- delete pJob; +- } +- else +- hrc = setError(E_FAIL, "%s", m->strWhyUnusable.c_str()); +- } +- return hrc; +-} +- +- +- +- +- +-DEFINE_EMPTY_CTOR_DTOR(ExtPack) +- +-/** +- * Called by ComObjPtr::createObject when creating the object. +- * +- * Just initialize the basic object state, do the rest in initWithDir(). +- * +- * @returns S_OK. +- */ +-HRESULT ExtPack::FinalConstruct() +-{ +- m = NULL; +- return S_OK; +-} +- +-/** +- * Initializes the extension pack by reading its file. +- * +- * @returns COM status code. +- * @param a_enmContext The context we're in. +- * @param a_pszName The name of the extension pack. This is also the +- * name of the subdirector under @a a_pszParentDir +- * where the extension pack is installed. +- * @param a_pszDir The extension pack directory name. +- */ +-HRESULT ExtPack::initWithDir(VBOXEXTPACKCTX a_enmContext, const char *a_pszName, const char *a_pszDir) +-{ +- AutoInitSpan autoInitSpan(this); +- AssertReturn(autoInitSpan.isOk(), E_FAIL); +- +- static const VBOXEXTPACKHLP s_HlpTmpl = +- { +- /* u32Version = */ VBOXEXTPACKHLP_VERSION, +- /* uVBoxFullVersion = */ VBOX_FULL_VERSION, +- /* uVBoxVersionRevision = */ 0, +- /* u32Padding = */ 0, +- /* pszVBoxVersion = */ "", +- /* pfnFindModule = */ ExtPack::hlpFindModule, +- /* pfnGetFilePath = */ ExtPack::hlpGetFilePath, +- /* pfnGetContext = */ ExtPack::hlpGetContext, +- /* pfnReserved1 = */ ExtPack::hlpReservedN, +- /* pfnReserved2 = */ ExtPack::hlpReservedN, +- /* pfnReserved3 = */ ExtPack::hlpReservedN, +- /* pfnReserved4 = */ ExtPack::hlpReservedN, +- /* pfnReserved5 = */ ExtPack::hlpReservedN, +- /* pfnReserved6 = */ ExtPack::hlpReservedN, +- /* pfnReserved7 = */ ExtPack::hlpReservedN, +- /* pfnReserved8 = */ ExtPack::hlpReservedN, +- /* pfnReserved9 = */ ExtPack::hlpReservedN, +- /* u32EndMarker = */ VBOXEXTPACKHLP_VERSION +- }; +- +- /* +- * Allocate + initialize our private data. +- */ +- m = new Data; +- VBoxExtPackInitDesc(&m->Desc); +- m->Desc.strName = a_pszName; +- RT_ZERO(m->ObjInfoDesc); +- m->fUsable = false; +- m->strWhyUnusable = tr("ExtPack::init failed"); +- m->strExtPackPath = a_pszDir; +- RT_ZERO(m->ObjInfoExtPack); +- m->strMainModPath.setNull(); +- RT_ZERO(m->ObjInfoMainMod); +- m->hMainMod = NIL_RTLDRMOD; +- m->Hlp = s_HlpTmpl; +- m->Hlp.pszVBoxVersion = RTBldCfgVersion(); +- m->Hlp.uVBoxInternalRevision = RTBldCfgRevision(); +- m->pThis = this; +- m->pReg = NULL; +- m->enmContext = a_enmContext; +- m->fMadeReadyCall = false; +- +- /* +- * Probe the extension pack (this code is shared with refresh()). +- */ +- probeAndLoad(); +- +- autoInitSpan.setSucceeded(); +- return S_OK; +-} +- +-/** +- * COM cruft. +- */ +-void ExtPack::FinalRelease() +-{ +- uninit(); +-} +- +-/** +- * Do the actual cleanup. +- */ +-void ExtPack::uninit() +-{ +- /* Enclose the state transition Ready->InUninit->NotReady */ +- AutoUninitSpan autoUninitSpan(this); +- if (!autoUninitSpan.uninitDone() && m != NULL) +- { +- if (m->hMainMod != NIL_RTLDRMOD) +- { +- AssertPtr(m->pReg); +- if (m->pReg->pfnUnload != NULL) +- m->pReg->pfnUnload(m->pReg); +- +- RTLdrClose(m->hMainMod); +- m->hMainMod = NIL_RTLDRMOD; +- m->pReg = NULL; +- } +- +- VBoxExtPackFreeDesc(&m->Desc); +- +- delete m; +- m = NULL; +- } +-} +- +- +-/** +- * Calls the installed hook. +- * +- * @returns true if we left the lock, false if we didn't. +- * @param a_pVirtualBox The VirtualBox interface. +- * @param a_pLock The write lock held by the caller. +- * @param pErrInfo Where to return error information. +- */ +-bool ExtPack::callInstalledHook(IVirtualBox *a_pVirtualBox, AutoWriteLock *a_pLock, PRTERRINFO pErrInfo) +-{ +- if ( m != NULL +- && m->hMainMod != NIL_RTLDRMOD) +- { +- if (m->pReg->pfnInstalled) +- { +- ComPtr<ExtPack> ptrSelfRef = this; +- a_pLock->release(); +- pErrInfo->rc = m->pReg->pfnInstalled(m->pReg, a_pVirtualBox, pErrInfo); +- a_pLock->acquire(); +- return true; +- } +- } +- pErrInfo->rc = VINF_SUCCESS; +- return false; +-} +- +-/** +- * Calls the uninstall hook and closes the module. +- * +- * @returns S_OK or COM error status with error information. +- * @param a_pVirtualBox The VirtualBox interface. +- * @param a_fForcedRemoval When set, we'll ignore complaints from the +- * uninstall hook. +- * @remarks The caller holds the manager's write lock, not released. +- */ +-HRESULT ExtPack::callUninstallHookAndClose(IVirtualBox *a_pVirtualBox, bool a_fForcedRemoval) +-{ +- HRESULT hrc = S_OK; +- +- if ( m != NULL +- && m->hMainMod != NIL_RTLDRMOD) +- { +- if (m->pReg->pfnUninstall && !a_fForcedRemoval) +- { +- int vrc = m->pReg->pfnUninstall(m->pReg, a_pVirtualBox); +- if (RT_FAILURE(vrc)) +- { +- LogRel(("ExtPack pfnUninstall returned %Rrc for %s\n", vrc, m->Desc.strName.c_str())); +- if (!a_fForcedRemoval) +- hrc = setError(E_FAIL, tr("pfnUninstall returned %Rrc"), vrc); +- } +- } +- if (SUCCEEDED(hrc)) +- { +- RTLdrClose(m->hMainMod); +- m->hMainMod = NIL_RTLDRMOD; +- m->pReg = NULL; +- } +- } +- +- return hrc; +-} +- +-/** +- * Calls the pfnVirtualBoxReady hook. +- * +- * @returns true if we left the lock, false if we didn't. +- * @param a_pVirtualBox The VirtualBox interface. +- * @param a_pLock The write lock held by the caller. +- */ +-bool ExtPack::callVirtualBoxReadyHook(IVirtualBox *a_pVirtualBox, AutoWriteLock *a_pLock) +-{ +- if ( m != NULL +- && m->fUsable +- && !m->fMadeReadyCall) +- { +- m->fMadeReadyCall = true; +- if (m->pReg->pfnVirtualBoxReady) +- { +- ComPtr<ExtPack> ptrSelfRef = this; +- a_pLock->release(); +- m->pReg->pfnVirtualBoxReady(m->pReg, a_pVirtualBox); +- a_pLock->acquire(); +- return true; +- } +- } +- return false; +-} +- +-/** +- * Calls the pfnConsoleReady hook. +- * +- * @returns true if we left the lock, false if we didn't. +- * @param a_pConsole The Console interface. +- * @param a_pLock The write lock held by the caller. +- */ +-bool ExtPack::callConsoleReadyHook(IConsole *a_pConsole, AutoWriteLock *a_pLock) +-{ +- if ( m != NULL +- && m->fUsable +- && !m->fMadeReadyCall) +- { +- m->fMadeReadyCall = true; +- if (m->pReg->pfnConsoleReady) +- { +- ComPtr<ExtPack> ptrSelfRef = this; +- a_pLock->release(); +- m->pReg->pfnConsoleReady(m->pReg, a_pConsole); +- a_pLock->acquire(); +- return true; +- } +- } +- return false; +-} +- +-/** +- * Calls the pfnVMCreate hook. +- * +- * @returns true if we left the lock, false if we didn't. +- * @param a_pVirtualBox The VirtualBox interface. +- * @param a_pMachine The machine interface of the new VM. +- * @param a_pLock The write lock held by the caller. +- */ +-bool ExtPack::callVmCreatedHook(IVirtualBox *a_pVirtualBox, IMachine *a_pMachine, AutoWriteLock *a_pLock) +-{ +- if ( m != NULL +- && m->fUsable) +- { +- if (m->pReg->pfnVMCreated) +- { +- ComPtr<ExtPack> ptrSelfRef = this; +- a_pLock->release(); +- m->pReg->pfnVMCreated(m->pReg, a_pVirtualBox, a_pMachine); +- a_pLock->acquire(); +- return true; +- } +- } +- return false; +-} +- +-/** +- * Calls the pfnVMConfigureVMM hook. +- * +- * @returns true if we left the lock, false if we didn't. +- * @param a_pConsole The console interface. +- * @param a_pVM The VM handle. +- * @param a_pLock The write lock held by the caller. +- * @param a_pvrc Where to return the status code of the +- * callback. This is always set. LogRel is +- * called on if a failure status is returned. +- */ +-bool ExtPack::callVmConfigureVmmHook(IConsole *a_pConsole, PVM a_pVM, AutoWriteLock *a_pLock, int *a_pvrc) +-{ +- *a_pvrc = VINF_SUCCESS; +- if ( m != NULL +- && m->fUsable) +- { +- if (m->pReg->pfnVMConfigureVMM) +- { +- ComPtr<ExtPack> ptrSelfRef = this; +- a_pLock->release(); +- int vrc = m->pReg->pfnVMConfigureVMM(m->pReg, a_pConsole, a_pVM); +- *a_pvrc = vrc; +- a_pLock->acquire(); +- if (RT_FAILURE(vrc)) +- LogRel(("ExtPack pfnVMConfigureVMM returned %Rrc for %s\n", vrc, m->Desc.strName.c_str())); +- return true; +- } +- } +- return false; +-} +- +-/** +- * Calls the pfnVMPowerOn hook. +- * +- * @returns true if we left the lock, false if we didn't. +- * @param a_pConsole The console interface. +- * @param a_pVM The VM handle. +- * @param a_pLock The write lock held by the caller. +- * @param a_pvrc Where to return the status code of the +- * callback. This is always set. LogRel is +- * called on if a failure status is returned. +- */ +-bool ExtPack::callVmPowerOnHook(IConsole *a_pConsole, PVM a_pVM, AutoWriteLock *a_pLock, int *a_pvrc) +-{ +- *a_pvrc = VINF_SUCCESS; +- if ( m != NULL +- && m->fUsable) +- { +- if (m->pReg->pfnVMPowerOn) +- { +- ComPtr<ExtPack> ptrSelfRef = this; +- a_pLock->release(); +- int vrc = m->pReg->pfnVMPowerOn(m->pReg, a_pConsole, a_pVM); +- *a_pvrc = vrc; +- a_pLock->acquire(); +- if (RT_FAILURE(vrc)) +- LogRel(("ExtPack pfnVMPowerOn returned %Rrc for %s\n", vrc, m->Desc.strName.c_str())); +- return true; +- } +- } +- return false; +-} +- +-/** +- * Calls the pfnVMPowerOff hook. +- * +- * @returns true if we left the lock, false if we didn't. +- * @param a_pConsole The console interface. +- * @param a_pVM The VM handle. +- * @param a_pLock The write lock held by the caller. +- */ +-bool ExtPack::callVmPowerOffHook(IConsole *a_pConsole, PVM a_pVM, AutoWriteLock *a_pLock) +-{ +- if ( m != NULL +- && m->fUsable) +- { +- if (m->pReg->pfnVMPowerOff) +- { +- ComPtr<ExtPack> ptrSelfRef = this; +- a_pLock->release(); +- m->pReg->pfnVMPowerOff(m->pReg, a_pConsole, a_pVM); +- a_pLock->acquire(); +- return true; +- } +- } +- return false; +-} +- +-/** +- * Check if the extension pack is usable and has an VRDE module. +- * +- * @returns S_OK or COM error status with error information. +- * +- * @remarks Caller holds the extension manager lock for reading, no locking +- * necessary. +- */ +-HRESULT ExtPack::checkVrde(void) +-{ +- HRESULT hrc; +- if ( m != NULL +- && m->fUsable) +- { +- if (m->Desc.strVrdeModule.isNotEmpty()) +- hrc = S_OK; +- else +- hrc = setError(E_FAIL, tr("The extension pack '%s' does not include a VRDE module"), m->Desc.strName.c_str()); +- } +- else +- hrc = setError(E_FAIL, tr("%s"), m->strWhyUnusable.c_str()); +- return hrc; +-} +- +-/** +- * Same as checkVrde(), except that it also resolves the path to the module. +- * +- * @returns S_OK or COM error status with error information. +- * @param a_pstrVrdeLibrary Where to return the path on success. +- * +- * @remarks Caller holds the extension manager lock for reading, no locking +- * necessary. +- */ +-HRESULT ExtPack::getVrdpLibraryName(Utf8Str *a_pstrVrdeLibrary) +-{ +- HRESULT hrc = checkVrde(); +- if (SUCCEEDED(hrc)) +- { +- if (findModule(m->Desc.strVrdeModule.c_str(), NULL, VBOXEXTPACKMODKIND_R3, +- a_pstrVrdeLibrary, NULL /*a_pfNative*/, NULL /*a_pObjInfo*/)) +- hrc = S_OK; +- else +- hrc = setError(E_FAIL, tr("Failed to locate the VRDE module '%s' in extension pack '%s'"), +- m->Desc.strVrdeModule.c_str(), m->Desc.strName.c_str()); +- } +- return hrc; +-} +- +-/** +- * Check if this extension pack wishes to be the default VRDE provider. +- * +- * @returns @c true if it wants to and it is in a usable state, otherwise +- * @c false. +- * +- * @remarks Caller holds the extension manager lock for reading, no locking +- * necessary. +- */ +-bool ExtPack::wantsToBeDefaultVrde(void) const +-{ +- return m->fUsable +- && m->Desc.strVrdeModule.isNotEmpty(); +-} +- +-/** +- * Refreshes the extension pack state. +- * +- * This is called by the manager so that the on disk changes are picked up. +- * +- * @returns S_OK or COM error status with error information. +- * +- * @param a_pfCanDelete Optional can-delete-this-object output indicator. +- * +- * @remarks Caller holds the extension manager lock for writing. +- * @remarks Only called in VBoxSVC. +- */ +-HRESULT ExtPack::refresh(bool *a_pfCanDelete) +-{ +- if (a_pfCanDelete) +- *a_pfCanDelete = false; +- +- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS); /* for the COMGETTERs */ +- +- /* +- * Has the module been deleted? +- */ +- RTFSOBJINFO ObjInfoExtPack; +- int vrc = RTPathQueryInfoEx(m->strExtPackPath.c_str(), &ObjInfoExtPack, RTFSOBJATTRADD_UNIX, RTPATH_F_ON_LINK); +- if ( RT_FAILURE(vrc) +- || !RTFS_IS_DIRECTORY(ObjInfoExtPack.Attr.fMode)) +- { +- if (a_pfCanDelete) +- *a_pfCanDelete = true; +- return S_OK; +- } +- +- /* +- * We've got a directory, so try query file system object info for the +- * files we are interested in as well. +- */ +- RTFSOBJINFO ObjInfoDesc; +- char szDescFilePath[RTPATH_MAX]; +- vrc = RTPathJoin(szDescFilePath, sizeof(szDescFilePath), m->strExtPackPath.c_str(), VBOX_EXTPACK_DESCRIPTION_NAME); +- if (RT_SUCCESS(vrc)) +- vrc = RTPathQueryInfoEx(szDescFilePath, &ObjInfoDesc, RTFSOBJATTRADD_UNIX, RTPATH_F_ON_LINK); +- if (RT_FAILURE(vrc)) +- RT_ZERO(ObjInfoDesc); +- +- RTFSOBJINFO ObjInfoMainMod; +- if (m->strMainModPath.isNotEmpty()) +- vrc = RTPathQueryInfoEx(m->strMainModPath.c_str(), &ObjInfoMainMod, RTFSOBJATTRADD_UNIX, RTPATH_F_ON_LINK); +- if (m->strMainModPath.isEmpty() || RT_FAILURE(vrc)) +- RT_ZERO(ObjInfoMainMod); +- +- /* +- * If we have a usable module already, just verify that things haven't +- * changed since we loaded it. +- */ +- if (m->fUsable) +- { +- if (m->hMainMod == NIL_RTLDRMOD) +- probeAndLoad(); +- else if ( !objinfoIsEqual(&ObjInfoDesc, &m->ObjInfoDesc) +- || !objinfoIsEqual(&ObjInfoMainMod, &m->ObjInfoMainMod) +- || !objinfoIsEqual(&ObjInfoExtPack, &m->ObjInfoExtPack) ) +- { +- /** @todo not important, so it can wait. */ +- } +- } +- /* +- * Ok, it is currently not usable. If anything has changed since last time +- * reprobe the extension pack. +- */ +- else if ( !objinfoIsEqual(&ObjInfoDesc, &m->ObjInfoDesc) +- || !objinfoIsEqual(&ObjInfoMainMod, &m->ObjInfoMainMod) +- || !objinfoIsEqual(&ObjInfoExtPack, &m->ObjInfoExtPack) ) +- probeAndLoad(); +- +- return S_OK; +-} +- +-/** +- * Probes the extension pack, loading the main dll and calling its registration +- * entry point. +- * +- * This updates the state accordingly, the strWhyUnusable and fUnusable members +- * being the most important ones. +- */ +-void ExtPack::probeAndLoad(void) +-{ +- m->fUsable = false; +- m->fMadeReadyCall = false; +- +- /* +- * Query the file system info for the extension pack directory. This and +- * all other file system info we save is for the benefit of refresh(). +- */ +- int vrc = RTPathQueryInfoEx(m->strExtPackPath.c_str(), &m->ObjInfoExtPack, RTFSOBJATTRADD_UNIX, RTPATH_F_ON_LINK); +- if (RT_FAILURE(vrc)) +- { +- m->strWhyUnusable.printf(tr("RTPathQueryInfoEx on '%s' failed: %Rrc"), m->strExtPackPath.c_str(), vrc); +- return; +- } +- if (!RTFS_IS_DIRECTORY(m->ObjInfoExtPack.Attr.fMode)) +- { +- if (RTFS_IS_SYMLINK(m->ObjInfoExtPack.Attr.fMode)) +- m->strWhyUnusable.printf(tr("'%s' is a symbolic link, this is not allowed"), m->strExtPackPath.c_str(), vrc); +- else if (RTFS_IS_FILE(m->ObjInfoExtPack.Attr.fMode)) +- m->strWhyUnusable.printf(tr("'%s' is a symbolic file, not a directory"), m->strExtPackPath.c_str(), vrc); +- else +- m->strWhyUnusable.printf(tr("'%s' is not a directory (fMode=%#x)"), m->strExtPackPath.c_str(), m->ObjInfoExtPack.Attr.fMode); +- return; +- } +- +- RTERRINFOSTATIC ErrInfo; +- RTErrInfoInitStatic(&ErrInfo); +- vrc = SUPR3HardenedVerifyDir(m->strExtPackPath.c_str(), true /*fRecursive*/, true /*fCheckFiles*/, &ErrInfo.Core); +- if (RT_FAILURE(vrc)) +- { +- m->strWhyUnusable.printf(tr("%s (rc=%Rrc)"), ErrInfo.Core.pszMsg, vrc); +- return; +- } +- +- /* +- * Read the description file. +- */ +- RTCString strSavedName(m->Desc.strName); +- RTCString *pStrLoadErr = VBoxExtPackLoadDesc(m->strExtPackPath.c_str(), &m->Desc, &m->ObjInfoDesc); +- if (pStrLoadErr != NULL) +- { +- m->strWhyUnusable.printf(tr("Failed to load '%s/%s': %s"), +- m->strExtPackPath.c_str(), VBOX_EXTPACK_DESCRIPTION_NAME, pStrLoadErr->c_str()); +- m->Desc.strName = strSavedName; +- delete pStrLoadErr; +- return; +- } +- +- /* +- * Make sure the XML name and directory matches. +- */ +- if (!m->Desc.strName.equalsIgnoreCase(strSavedName)) +- { +- m->strWhyUnusable.printf(tr("The description name ('%s') and directory name ('%s') does not match"), +- m->Desc.strName.c_str(), strSavedName.c_str()); +- m->Desc.strName = strSavedName; +- return; +- } +- +- /* +- * Load the main DLL and call the predefined entry point. +- */ +- bool fIsNative; +- if (!findModule(m->Desc.strMainModule.c_str(), NULL /* default extension */, VBOXEXTPACKMODKIND_R3, +- &m->strMainModPath, &fIsNative, &m->ObjInfoMainMod)) +- { +- m->strWhyUnusable.printf(tr("Failed to locate the main module ('%s')"), m->Desc.strMainModule.c_str()); +- return; +- } +- +- vrc = SUPR3HardenedVerifyPlugIn(m->strMainModPath.c_str(), &ErrInfo.Core); +- if (RT_FAILURE(vrc)) +- { +- m->strWhyUnusable.printf(tr("%s"), ErrInfo.Core.pszMsg); +- return; +- } +- +- if (fIsNative) +- { +- vrc = SUPR3HardenedLdrLoadPlugIn(m->strMainModPath.c_str(), &m->hMainMod, &ErrInfo.Core); +- if (RT_FAILURE(vrc)) +- { +- m->hMainMod = NIL_RTLDRMOD; +- m->strWhyUnusable.printf(tr("Failed to load the main module ('%s'): %Rrc - %s"), +- m->strMainModPath.c_str(), vrc, ErrInfo.Core.pszMsg); +- return; +- } +- } +- else +- { +- m->strWhyUnusable.printf(tr("Only native main modules are currently supported")); +- return; +- } +- +- /* +- * Resolve the predefined entry point. +- */ +- PFNVBOXEXTPACKREGISTER pfnRegistration; +- vrc = RTLdrGetSymbol(m->hMainMod, VBOX_EXTPACK_MAIN_MOD_ENTRY_POINT, (void **)&pfnRegistration); +- if (RT_SUCCESS(vrc)) +- { +- RTErrInfoClear(&ErrInfo.Core); +- vrc = pfnRegistration(&m->Hlp, &m->pReg, &ErrInfo.Core); +- if ( RT_SUCCESS(vrc) +- && !RTErrInfoIsSet(&ErrInfo.Core) +- && VALID_PTR(m->pReg)) +- { +- if ( VBOXEXTPACK_IS_MAJOR_VER_EQUAL(m->pReg->u32Version, VBOXEXTPACKREG_VERSION) +- && m->pReg->u32EndMarker == m->pReg->u32Version) +- { +- if ( (!m->pReg->pfnInstalled || RT_VALID_PTR(m->pReg->pfnInstalled)) +- && (!m->pReg->pfnUninstall || RT_VALID_PTR(m->pReg->pfnUninstall)) +- && (!m->pReg->pfnVirtualBoxReady || RT_VALID_PTR(m->pReg->pfnVirtualBoxReady)) +- && (!m->pReg->pfnConsoleReady || RT_VALID_PTR(m->pReg->pfnConsoleReady)) +- && (!m->pReg->pfnUnload || RT_VALID_PTR(m->pReg->pfnUnload)) +- && (!m->pReg->pfnVMCreated || RT_VALID_PTR(m->pReg->pfnVMCreated)) +- && (!m->pReg->pfnVMConfigureVMM || RT_VALID_PTR(m->pReg->pfnVMConfigureVMM)) +- && (!m->pReg->pfnVMPowerOn || RT_VALID_PTR(m->pReg->pfnVMPowerOn)) +- && (!m->pReg->pfnVMPowerOff || RT_VALID_PTR(m->pReg->pfnVMPowerOff)) +- && (!m->pReg->pfnQueryObject || RT_VALID_PTR(m->pReg->pfnQueryObject)) +- ) +- { +- /* +- * We're good! +- */ +- m->fUsable = true; +- m->strWhyUnusable.setNull(); +- return; +- } +- +- m->strWhyUnusable = tr("The registration structure contains on or more invalid function pointers"); +- } +- else +- m->strWhyUnusable.printf(tr("Unsupported registration structure version %u.%u"), +- RT_HIWORD(m->pReg->u32Version), RT_LOWORD(m->pReg->u32Version)); +- } +- else +- m->strWhyUnusable.printf(tr("%s returned %Rrc, pReg=%p ErrInfo='%s'"), +- VBOX_EXTPACK_MAIN_MOD_ENTRY_POINT, vrc, m->pReg, ErrInfo.Core.pszMsg); +- m->pReg = NULL; +- } +- else +- m->strWhyUnusable.printf(tr("Failed to resolve exported symbol '%s' in the main module: %Rrc"), +- VBOX_EXTPACK_MAIN_MOD_ENTRY_POINT, vrc); +- +- RTLdrClose(m->hMainMod); +- m->hMainMod = NIL_RTLDRMOD; +-} +- +-/** +- * Finds a module. +- * +- * @returns true if found, false if not. +- * @param a_pszName The module base name (no extension). +- * @param a_pszExt The extension. If NULL we use default +- * extensions. +- * @param a_enmKind The kind of module to locate. +- * @param a_pStrFound Where to return the path to the module we've +- * found. +- * @param a_pfNative Where to return whether this is a native module +- * or an agnostic one. Optional. +- * @param a_pObjInfo Where to return the file system object info for +- * the module. Optional. +- */ +-bool ExtPack::findModule(const char *a_pszName, const char *a_pszExt, VBOXEXTPACKMODKIND a_enmKind, +- Utf8Str *a_pStrFound, bool *a_pfNative, PRTFSOBJINFO a_pObjInfo) const +-{ +- /* +- * Try the native path first. +- */ +- char szPath[RTPATH_MAX]; +- int vrc = RTPathJoin(szPath, sizeof(szPath), m->strExtPackPath.c_str(), RTBldCfgTargetDotArch()); +- AssertLogRelRCReturn(vrc, false); +- vrc = RTPathAppend(szPath, sizeof(szPath), a_pszName); +- AssertLogRelRCReturn(vrc, false); +- if (!a_pszExt) +- { +- const char *pszDefExt; +- switch (a_enmKind) +- { +- case VBOXEXTPACKMODKIND_RC: pszDefExt = ".rc"; break; +- case VBOXEXTPACKMODKIND_R0: pszDefExt = ".r0"; break; +- case VBOXEXTPACKMODKIND_R3: pszDefExt = RTLdrGetSuff(); break; +- default: +- AssertFailedReturn(false); +- } +- vrc = RTStrCat(szPath, sizeof(szPath), pszDefExt); +- AssertLogRelRCReturn(vrc, false); +- } +- +- RTFSOBJINFO ObjInfo; +- if (!a_pObjInfo) +- a_pObjInfo = &ObjInfo; +- vrc = RTPathQueryInfo(szPath, a_pObjInfo, RTFSOBJATTRADD_UNIX); +- if (RT_SUCCESS(vrc) && RTFS_IS_FILE(a_pObjInfo->Attr.fMode)) +- { +- if (a_pfNative) +- *a_pfNative = true; +- *a_pStrFound = szPath; +- return true; +- } +- +- /* +- * Try the platform agnostic modules. +- */ +- /* gcc.x86/module.rel */ +- char szSubDir[32]; +- RTStrPrintf(szSubDir, sizeof(szSubDir), "%s.%s", RTBldCfgCompiler(), RTBldCfgTargetArch()); +- vrc = RTPathJoin(szPath, sizeof(szPath), m->strExtPackPath.c_str(), szSubDir); +- AssertLogRelRCReturn(vrc, false); +- vrc = RTPathAppend(szPath, sizeof(szPath), a_pszName); +- AssertLogRelRCReturn(vrc, false); +- if (!a_pszExt) +- { +- vrc = RTStrCat(szPath, sizeof(szPath), ".rel"); +- AssertLogRelRCReturn(vrc, false); +- } +- vrc = RTPathQueryInfo(szPath, a_pObjInfo, RTFSOBJATTRADD_UNIX); +- if (RT_SUCCESS(vrc) && RTFS_IS_FILE(a_pObjInfo->Attr.fMode)) +- { +- if (a_pfNative) +- *a_pfNative = false; +- *a_pStrFound = szPath; +- return true; +- } +- +- /* x86/module.rel */ +- vrc = RTPathJoin(szPath, sizeof(szPath), m->strExtPackPath.c_str(), RTBldCfgTargetArch()); +- AssertLogRelRCReturn(vrc, false); +- vrc = RTPathAppend(szPath, sizeof(szPath), a_pszName); +- AssertLogRelRCReturn(vrc, false); +- if (!a_pszExt) +- { +- vrc = RTStrCat(szPath, sizeof(szPath), ".rel"); +- AssertLogRelRCReturn(vrc, false); +- } +- vrc = RTPathQueryInfo(szPath, a_pObjInfo, RTFSOBJATTRADD_UNIX); +- if (RT_SUCCESS(vrc) && RTFS_IS_FILE(a_pObjInfo->Attr.fMode)) +- { +- if (a_pfNative) +- *a_pfNative = false; +- *a_pStrFound = szPath; +- return true; +- } +- +- return false; +-} +- +-/** +- * Compares two file system object info structures. +- * +- * @returns true if equal, false if not. +- * @param pObjInfo1 The first. +- * @param pObjInfo2 The second. +- * @todo IPRT should do this, really. +- */ +-/* static */ bool ExtPack::objinfoIsEqual(PCRTFSOBJINFO pObjInfo1, PCRTFSOBJINFO pObjInfo2) +-{ +- if (!RTTimeSpecIsEqual(&pObjInfo1->ModificationTime, &pObjInfo2->ModificationTime)) +- return false; +- if (!RTTimeSpecIsEqual(&pObjInfo1->ChangeTime, &pObjInfo2->ChangeTime)) +- return false; +- if (!RTTimeSpecIsEqual(&pObjInfo1->BirthTime, &pObjInfo2->BirthTime)) +- return false; +- if (pObjInfo1->cbObject != pObjInfo2->cbObject) +- return false; +- if (pObjInfo1->Attr.fMode != pObjInfo2->Attr.fMode) +- return false; +- if (pObjInfo1->Attr.enmAdditional == pObjInfo2->Attr.enmAdditional) +- { +- switch (pObjInfo1->Attr.enmAdditional) +- { +- case RTFSOBJATTRADD_UNIX: +- if (pObjInfo1->Attr.u.Unix.uid != pObjInfo2->Attr.u.Unix.uid) +- return false; +- if (pObjInfo1->Attr.u.Unix.gid != pObjInfo2->Attr.u.Unix.gid) +- return false; +- if (pObjInfo1->Attr.u.Unix.INodeIdDevice != pObjInfo2->Attr.u.Unix.INodeIdDevice) +- return false; +- if (pObjInfo1->Attr.u.Unix.INodeId != pObjInfo2->Attr.u.Unix.INodeId) +- return false; +- if (pObjInfo1->Attr.u.Unix.GenerationId != pObjInfo2->Attr.u.Unix.GenerationId) +- return false; +- break; +- default: +- break; +- } +- } +- return true; +-} +- +- +-/** +- * @interface_method_impl{VBOXEXTPACKHLP,pfnFindModule} +- */ +-/*static*/ DECLCALLBACK(int) +-ExtPack::hlpFindModule(PCVBOXEXTPACKHLP pHlp, const char *pszName, const char *pszExt, VBOXEXTPACKMODKIND enmKind, +- char *pszFound, size_t cbFound, bool *pfNative) +-{ +- /* +- * Validate the input and get our bearings. +- */ +- AssertPtrReturn(pszName, VERR_INVALID_POINTER); +- AssertPtrNullReturn(pszExt, VERR_INVALID_POINTER); +- AssertPtrReturn(pszFound, VERR_INVALID_POINTER); +- AssertPtrNullReturn(pfNative, VERR_INVALID_POINTER); +- AssertReturn(enmKind > VBOXEXTPACKMODKIND_INVALID && enmKind < VBOXEXTPACKMODKIND_END, VERR_INVALID_PARAMETER); +- +- AssertPtrReturn(pHlp, VERR_INVALID_POINTER); +- AssertReturn(pHlp->u32Version == VBOXEXTPACKHLP_VERSION, VERR_INVALID_POINTER); +- ExtPack::Data *m = RT_FROM_CPP_MEMBER(pHlp, Data, Hlp); +- AssertPtrReturn(m, VERR_INVALID_POINTER); +- ExtPack *pThis = m->pThis; +- AssertPtrReturn(pThis, VERR_INVALID_POINTER); +- +- /* +- * This is just a wrapper around findModule. +- */ +- Utf8Str strFound; +- if (pThis->findModule(pszName, pszExt, enmKind, &strFound, pfNative, NULL)) +- return RTStrCopy(pszFound, cbFound, strFound.c_str()); +- return VERR_FILE_NOT_FOUND; +-} +- +-/*static*/ DECLCALLBACK(int) +-ExtPack::hlpGetFilePath(PCVBOXEXTPACKHLP pHlp, const char *pszFilename, char *pszPath, size_t cbPath) +-{ +- /* +- * Validate the input and get our bearings. +- */ +- AssertPtrReturn(pszFilename, VERR_INVALID_POINTER); +- AssertPtrReturn(pszPath, VERR_INVALID_POINTER); +- AssertReturn(cbPath > 0, VERR_BUFFER_OVERFLOW); +- +- AssertPtrReturn(pHlp, VERR_INVALID_POINTER); +- AssertReturn(pHlp->u32Version == VBOXEXTPACKHLP_VERSION, VERR_INVALID_POINTER); +- ExtPack::Data *m = RT_FROM_CPP_MEMBER(pHlp, Data, Hlp); +- AssertPtrReturn(m, VERR_INVALID_POINTER); +- ExtPack *pThis = m->pThis; +- AssertPtrReturn(pThis, VERR_INVALID_POINTER); +- +- /* +- * This is a simple RTPathJoin, no checking if things exists or anything. +- */ +- int vrc = RTPathJoin(pszPath, cbPath, pThis->m->strExtPackPath.c_str(), pszFilename); +- if (RT_FAILURE(vrc)) +- RT_BZERO(pszPath, cbPath); +- return vrc; +-} +- +-/*static*/ DECLCALLBACK(VBOXEXTPACKCTX) +-ExtPack::hlpGetContext(PCVBOXEXTPACKHLP pHlp) +-{ +- /* +- * Validate the input and get our bearings. +- */ +- AssertPtrReturn(pHlp, VBOXEXTPACKCTX_INVALID); +- AssertReturn(pHlp->u32Version == VBOXEXTPACKHLP_VERSION, VBOXEXTPACKCTX_INVALID); +- ExtPack::Data *m = RT_FROM_CPP_MEMBER(pHlp, Data, Hlp); +- AssertPtrReturn(m, VBOXEXTPACKCTX_INVALID); +- ExtPack *pThis = m->pThis; +- AssertPtrReturn(pThis, VBOXEXTPACKCTX_INVALID); +- +- return pThis->m->enmContext; +-} +- +-/*static*/ DECLCALLBACK(int) +-ExtPack::hlpReservedN(PCVBOXEXTPACKHLP pHlp) +-{ +- /* +- * Validate the input and get our bearings. +- */ +- AssertPtrReturn(pHlp, VERR_INVALID_POINTER); +- AssertReturn(pHlp->u32Version == VBOXEXTPACKHLP_VERSION, VERR_INVALID_POINTER); +- ExtPack::Data *m = RT_FROM_CPP_MEMBER(pHlp, Data, Hlp); +- AssertPtrReturn(m, VERR_INVALID_POINTER); +- ExtPack *pThis = m->pThis; +- AssertPtrReturn(pThis, VERR_INVALID_POINTER); +- +- return VERR_NOT_IMPLEMENTED; +-} +- +- +- +- +- +-STDMETHODIMP ExtPack::COMGETTER(Name)(BSTR *a_pbstrName) +-{ +- CheckComArgOutPointerValid(a_pbstrName); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- Bstr str(m->Desc.strName); +- str.cloneTo(a_pbstrName); +- } +- return hrc; +-} +- +-STDMETHODIMP ExtPack::COMGETTER(Description)(BSTR *a_pbstrDescription) +-{ +- CheckComArgOutPointerValid(a_pbstrDescription); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- Bstr str(m->Desc.strDescription); +- str.cloneTo(a_pbstrDescription); +- } +- return hrc; +-} +- +-STDMETHODIMP ExtPack::COMGETTER(Version)(BSTR *a_pbstrVersion) +-{ +- CheckComArgOutPointerValid(a_pbstrVersion); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- /* HACK ALERT: This is for easing backporting to 4.1. The edition stuff +- will be changed into a separate */ +- if (m->Desc.strEdition.isEmpty()) +- { +- Bstr str(m->Desc.strVersion); +- str.cloneTo(a_pbstrVersion); +- } +- else +- { +- RTCString strHack(m->Desc.strVersion); +- strHack.append('-'); +- strHack.append(m->Desc.strEdition); +- +- Bstr str(strHack); +- str.cloneTo(a_pbstrVersion); +- } +- } +- return hrc; +-} +- +-STDMETHODIMP ExtPack::COMGETTER(Revision)(ULONG *a_puRevision) +-{ +- CheckComArgOutPointerValid(a_puRevision); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- *a_puRevision = m->Desc.uRevision; +- return hrc; +-} +- +-STDMETHODIMP ExtPack::COMGETTER(VRDEModule)(BSTR *a_pbstrVrdeModule) +-{ +- CheckComArgOutPointerValid(a_pbstrVrdeModule); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- Bstr str(m->Desc.strVrdeModule); +- str.cloneTo(a_pbstrVrdeModule); +- } +- return hrc; +-} +- +-STDMETHODIMP ExtPack::COMGETTER(PlugIns)(ComSafeArrayOut(IExtPackPlugIn *, a_paPlugIns)) +-{ +- /** @todo implement plug-ins. */ +-#ifdef VBOX_WITH_XPCOM +- NOREF(a_paPlugIns); +- NOREF(a_paPlugInsSize); +-#endif +- ReturnComNotImplemented(); +-} +- +-STDMETHODIMP ExtPack::COMGETTER(Usable)(BOOL *a_pfUsable) +-{ +- CheckComArgOutPointerValid(a_pfUsable); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- *a_pfUsable = m->fUsable; +- return hrc; +-} +- +-STDMETHODIMP ExtPack::COMGETTER(WhyUnusable)(BSTR *a_pbstrWhy) +-{ +- CheckComArgOutPointerValid(a_pbstrWhy); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- m->strWhyUnusable.cloneTo(a_pbstrWhy); +- return hrc; +-} +- +-STDMETHODIMP ExtPack::COMGETTER(ShowLicense)(BOOL *a_pfShowIt) +-{ +- CheckComArgOutPointerValid(a_pfShowIt); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- *a_pfShowIt = m->Desc.fShowLicense; +- return hrc; +-} +- +-STDMETHODIMP ExtPack::COMGETTER(License)(BSTR *a_pbstrHtmlLicense) +-{ +- Bstr bstrHtml("html"); +- return QueryLicense(Bstr::Empty.raw(), Bstr::Empty.raw(), bstrHtml.raw(), a_pbstrHtmlLicense); +-} +- +-STDMETHODIMP ExtPack::QueryLicense(IN_BSTR a_bstrPreferredLocale, IN_BSTR a_bstrPreferredLanguage, IN_BSTR a_bstrFormat, +- BSTR *a_pbstrLicense) +-{ +- /* +- * Validate input. +- */ +- CheckComArgOutPointerValid(a_pbstrLicense); +- CheckComArgNotNull(a_bstrPreferredLocale); +- CheckComArgNotNull(a_bstrPreferredLanguage); +- CheckComArgNotNull(a_bstrFormat); +- +- Utf8Str strPreferredLocale(a_bstrPreferredLocale); +- if (strPreferredLocale.length() != 2 && strPreferredLocale.length() != 0) +- return setError(E_FAIL, tr("The preferred locale is a two character string or empty.")); +- +- Utf8Str strPreferredLanguage(a_bstrPreferredLanguage); +- if (strPreferredLanguage.length() != 2 && strPreferredLanguage.length() != 0) +- return setError(E_FAIL, tr("The preferred lanuage is a two character string or empty.")); +- +- Utf8Str strFormat(a_bstrFormat); +- if ( !strFormat.equals("html") +- && !strFormat.equals("rtf") +- && !strFormat.equals("txt")) +- return setError(E_FAIL, tr("The license format can only have the values 'html', 'rtf' and 'txt'.")); +- +- /* +- * Combine the options to form a file name before locking down anything. +- */ +- char szName[sizeof(VBOX_EXTPACK_LICENSE_NAME_PREFIX "-de_DE.html") + 2]; +- if (strPreferredLocale.isNotEmpty() && strPreferredLanguage.isNotEmpty()) +- RTStrPrintf(szName, sizeof(szName), VBOX_EXTPACK_LICENSE_NAME_PREFIX "-%s_%s.%s", +- strPreferredLocale.c_str(), strPreferredLanguage.c_str(), strFormat.c_str()); +- else if (strPreferredLocale.isNotEmpty()) +- RTStrPrintf(szName, sizeof(szName), VBOX_EXTPACK_LICENSE_NAME_PREFIX "-%s.%s", strPreferredLocale.c_str(), strFormat.c_str()); +- else if (strPreferredLanguage.isNotEmpty()) +- RTStrPrintf(szName, sizeof(szName), VBOX_EXTPACK_LICENSE_NAME_PREFIX "-_%s.%s", strPreferredLocale.c_str(), strFormat.c_str()); +- else +- RTStrPrintf(szName, sizeof(szName), VBOX_EXTPACK_LICENSE_NAME_PREFIX ".%s", strFormat.c_str()); +- +- /* +- * Effectuate the query. +- */ +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- AutoReadLock autoLock(this COMMA_LOCKVAL_SRC_POS); /* paranoia */ +- +- if (!m->fUsable) +- hrc = setError(E_FAIL, tr("%s"), m->strWhyUnusable.c_str()); +- else +- { +- char szPath[RTPATH_MAX]; +- int vrc = RTPathJoin(szPath, sizeof(szPath), m->strExtPackPath.c_str(), szName); +- if (RT_SUCCESS(vrc)) +- { +- void *pvFile; +- size_t cbFile; +- vrc = RTFileReadAllEx(szPath, 0, RTFOFF_MAX, RTFILE_RDALL_O_DENY_READ, &pvFile, &cbFile); +- if (RT_SUCCESS(vrc)) +- { +- Bstr bstrLicense((const char *)pvFile, cbFile); +- if (bstrLicense.isNotEmpty()) +- { +- bstrLicense.detachTo(a_pbstrLicense); +- hrc = S_OK; +- } +- else +- hrc = setError(VBOX_E_IPRT_ERROR, tr("The license file '%s' is empty or contains invalid UTF-8 encoding"), +- szPath); +- RTFileReadAllFree(pvFile, cbFile); +- } +- else if (vrc == VERR_FILE_NOT_FOUND || vrc == VERR_PATH_NOT_FOUND) +- hrc = setError(VBOX_E_OBJECT_NOT_FOUND, tr("The license file '%s' was not found in extension pack '%s'"), +- szName, m->Desc.strName.c_str()); +- else +- hrc = setError(VBOX_E_FILE_ERROR, tr("Failed to open the license file '%s': %Rrc"), szPath, vrc); +- } +- else +- hrc = setError(VBOX_E_IPRT_ERROR, tr("RTPathJoin failed: %Rrc"), vrc); +- } +- } +- return hrc; +-} +- +- +-STDMETHODIMP ExtPack::QueryObject(IN_BSTR a_bstrObjectId, IUnknown **a_ppUnknown) +-{ +- com::Guid ObjectId; +- CheckComArgGuid(a_bstrObjectId, ObjectId); +- CheckComArgOutPointerValid(a_ppUnknown); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- if ( m->pReg +- && m->pReg->pfnQueryObject) +- { +- void *pvUnknown = m->pReg->pfnQueryObject(m->pReg, ObjectId.raw()); +- if (pvUnknown) +- *a_ppUnknown = (IUnknown *)pvUnknown; +- else +- hrc = E_NOINTERFACE; +- } +- else +- hrc = E_NOINTERFACE; +- } +- return hrc; +-} +- +- +- +- +-DEFINE_EMPTY_CTOR_DTOR(ExtPackManager) +- +-/** +- * Called by ComObjPtr::createObject when creating the object. +- * +- * Just initialize the basic object state, do the rest in init(). +- * +- * @returns S_OK. +- */ +-HRESULT ExtPackManager::FinalConstruct() +-{ +- m = NULL; +- return S_OK; +-} +- +-/** +- * Initializes the extension pack manager. +- * +- * @returns COM status code. +- * @param a_pVirtualBox Pointer to the VirtualBox object. +- * @param a_enmContext The context we're in. +- */ +-HRESULT ExtPackManager::initExtPackManager(VirtualBox *a_pVirtualBox, VBOXEXTPACKCTX a_enmContext) +-{ +- AutoInitSpan autoInitSpan(this); +- AssertReturn(autoInitSpan.isOk(), E_FAIL); +- +- /* +- * Figure some stuff out before creating the instance data. +- */ +- char szBaseDir[RTPATH_MAX]; +- int rc = RTPathAppPrivateArchTop(szBaseDir, sizeof(szBaseDir)); +- AssertLogRelRCReturn(rc, E_FAIL); +- rc = RTPathAppend(szBaseDir, sizeof(szBaseDir), VBOX_EXTPACK_INSTALL_DIR); +- AssertLogRelRCReturn(rc, E_FAIL); +- +- char szCertificatDir[RTPATH_MAX]; +- rc = RTPathAppPrivateNoArch(szCertificatDir, sizeof(szCertificatDir)); +- AssertLogRelRCReturn(rc, E_FAIL); +- rc = RTPathAppend(szCertificatDir, sizeof(szCertificatDir), VBOX_EXTPACK_CERT_DIR); +- AssertLogRelRCReturn(rc, E_FAIL); +- +- /* +- * Allocate and initialize the instance data. +- */ +- m = new Data; +- m->strBaseDir = szBaseDir; +- m->strCertificatDirPath = szCertificatDir; +- m->pVirtualBox = a_pVirtualBox; +- m->enmContext = a_enmContext; +- +- /* +- * Slurp in VBoxVMM which is used by VBoxPuelMain. +- */ +-#if !defined(RT_OS_WINDOWS) && !defined(RT_OS_DARWIN) +- if (a_enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON) +- { +- int vrc = SUPR3HardenedLdrLoadAppPriv("VBoxVMM", &m->hVBoxVMM, RTLDRLOAD_FLAGS_GLOBAL, NULL); +- if (RT_FAILURE(vrc)) +- m->hVBoxVMM = NIL_RTLDRMOD; +- /* cleanup in ::uninit()? */ +- } +-#endif +- +- /* +- * Go looking for extensions. The RTDirOpen may fail if nothing has been +- * installed yet, or if root is paranoid and has revoked our access to them. +- * +- * We ASSUME that there are no files, directories or stuff in the directory +- * that exceed the max name length in RTDIRENTRYEX. +- */ +- HRESULT hrc = S_OK; +- PRTDIR pDir; +- int vrc = RTDirOpen(&pDir, szBaseDir); +- if (RT_SUCCESS(vrc)) +- { +- for (;;) +- { +- RTDIRENTRYEX Entry; +- vrc = RTDirReadEx(pDir, &Entry, NULL /*pcbDirEntry*/, RTFSOBJATTRADD_NOTHING, RTPATH_F_ON_LINK); +- if (RT_FAILURE(vrc)) +- { +- AssertLogRelMsg(vrc == VERR_NO_MORE_FILES, ("%Rrc\n", vrc)); +- break; +- } +- if ( RTFS_IS_DIRECTORY(Entry.Info.Attr.fMode) +- && strcmp(Entry.szName, ".") != 0 +- && strcmp(Entry.szName, "..") != 0 +- && VBoxExtPackIsValidMangledName(Entry.szName) ) +- { +- /* +- * All directories are extensions, the shall be nothing but +- * extensions in this subdirectory. +- */ +- char szExtPackDir[RTPATH_MAX]; +- vrc = RTPathJoin(szExtPackDir, sizeof(szExtPackDir), m->strBaseDir.c_str(), Entry.szName); +- AssertLogRelRC(vrc); +- if (RT_SUCCESS(vrc)) +- { +- RTCString *pstrName = VBoxExtPackUnmangleName(Entry.szName, RTSTR_MAX); +- AssertLogRel(pstrName); +- if (pstrName) +- { +- ComObjPtr<ExtPack> NewExtPack; +- HRESULT hrc2 = NewExtPack.createObject(); +- if (SUCCEEDED(hrc2)) +- hrc2 = NewExtPack->initWithDir(a_enmContext, pstrName->c_str(), szExtPackDir); +- delete pstrName; +- if (SUCCEEDED(hrc2)) +- m->llInstalledExtPacks.push_back(NewExtPack); +- else if (SUCCEEDED(rc)) +- hrc = hrc2; +- } +- else +- hrc = E_UNEXPECTED; +- } +- else +- hrc = E_UNEXPECTED; +- } +- } +- RTDirClose(pDir); +- } +- /* else: ignore, the directory probably does not exist or something. */ +- +- if (SUCCEEDED(hrc)) +- autoInitSpan.setSucceeded(); +- return hrc; +-} +- +-/** +- * COM cruft. +- */ +-void ExtPackManager::FinalRelease() +-{ +- uninit(); +-} +- +-/** +- * Do the actual cleanup. +- */ +-void ExtPackManager::uninit() +-{ +- /* Enclose the state transition Ready->InUninit->NotReady */ +- AutoUninitSpan autoUninitSpan(this); +- if (!autoUninitSpan.uninitDone() && m != NULL) +- { +- delete m; +- m = NULL; +- } +-} +- +- +-STDMETHODIMP ExtPackManager::COMGETTER(InstalledExtPacks)(ComSafeArrayOut(IExtPack *, a_paExtPacks)) +-{ +- CheckComArgOutSafeArrayPointerValid(a_paExtPacks); +- Assert(m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- AutoReadLock autoLock(this COMMA_LOCKVAL_SRC_POS); +- +- SafeIfaceArray<IExtPack> SaExtPacks(m->llInstalledExtPacks); +- SaExtPacks.detachTo(ComSafeArrayOutArg(a_paExtPacks)); +- } +- +- return hrc; +-} +- +-STDMETHODIMP ExtPackManager::Find(IN_BSTR a_bstrName, IExtPack **a_pExtPack) +-{ +- CheckComArgNotNull(a_bstrName); +- CheckComArgOutPointerValid(a_pExtPack); +- Utf8Str strName(a_bstrName); +- Assert(m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- AutoReadLock autoLock(this COMMA_LOCKVAL_SRC_POS); +- +- ComPtr<ExtPack> ptrExtPack = findExtPack(strName.c_str()); +- if (!ptrExtPack.isNull()) +- ptrExtPack.queryInterfaceTo(a_pExtPack); +- else +- hrc = VBOX_E_OBJECT_NOT_FOUND; +- } +- +- return hrc; +-} +- +-STDMETHODIMP ExtPackManager::OpenExtPackFile(IN_BSTR a_bstrTarballAndDigest, IExtPackFile **a_ppExtPackFile) +-{ +- CheckComArgNotNull(a_bstrTarballAndDigest); +- CheckComArgOutPointerValid(a_ppExtPackFile); +- AssertReturn(m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON, E_UNEXPECTED); +- +- /* The API can optionally take a ::SHA-256=<hex-digest> attribute at the +- end of the file name. This is just a temporary measure for +- backporting, in 4.2 we'll add another parameter to the method. */ +- Utf8Str strTarball; +- Utf8Str strDigest; +- Utf8Str strTarballAndDigest(a_bstrTarballAndDigest); +- size_t offSha256 = strTarballAndDigest.find("::SHA-256="); +- if (offSha256 == Utf8Str::npos) +- strTarball = strTarballAndDigest; +- else +- { +- strTarball = strTarballAndDigest.substr(0, offSha256); +- strDigest = strTarballAndDigest.substr(offSha256 + sizeof("::SHA-256=") - 1); +- } +- +- ComObjPtr<ExtPackFile> NewExtPackFile; +- HRESULT hrc = NewExtPackFile.createObject(); +- if (SUCCEEDED(hrc)) +- hrc = NewExtPackFile->initWithFile(strTarball.c_str(), strDigest.c_str(), this, m->pVirtualBox); +- if (SUCCEEDED(hrc)) +- NewExtPackFile.queryInterfaceTo(a_ppExtPackFile); +- +- return hrc; +-} +- +-STDMETHODIMP ExtPackManager::Uninstall(IN_BSTR a_bstrName, BOOL a_fForcedRemoval, IN_BSTR a_bstrDisplayInfo, +- IProgress **a_ppProgress) +-{ +- CheckComArgNotNull(a_bstrName); +- if (a_ppProgress) +- *a_ppProgress = NULL; +- Assert(m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- PEXTPACKUNINSTALLJOB pJob = NULL; +- try +- { +- pJob = new EXTPACKUNINSTALLJOB; +- pJob->ptrExtPackMgr = this; +- pJob->strName = a_bstrName; +- pJob->fForcedRemoval = a_fForcedRemoval != FALSE; +- pJob->strDisplayInfo = a_bstrDisplayInfo; +- hrc = pJob->ptrProgress.createObject(); +- if (SUCCEEDED(hrc)) +- { +- Bstr bstrDescription = tr("Uninstalling extension pack"); +- hrc = pJob->ptrProgress->init( +-#ifndef VBOX_COM_INPROC +- m->pVirtualBox, +-#endif +- static_cast<IExtPackManager *>(this), +- bstrDescription.raw(), +- FALSE /*aCancelable*/, +- NULL /*aId*/); +- } +- if (SUCCEEDED(hrc)) +- { +- ComPtr<Progress> ptrProgress = pJob->ptrProgress; +- int vrc = RTThreadCreate(NULL /*phThread*/, ExtPackManager::doUninstallThreadProc, pJob, 0, +- RTTHREADTYPE_DEFAULT, 0 /*fFlags*/, "ExtPackUninst"); +- if (RT_SUCCESS(vrc)) +- { +- pJob = NULL; /* the thread deletes it */ +- ptrProgress.queryInterfaceTo(a_ppProgress); +- } +- else +- hrc = setError(VBOX_E_IPRT_ERROR, tr("RTThreadCreate failed with %Rrc"), vrc); +- } +- } +- catch (std::bad_alloc) +- { +- hrc = E_OUTOFMEMORY; +- } +- if (pJob) +- delete pJob; +- } +- +- return hrc; +-} +- +-STDMETHODIMP ExtPackManager::Cleanup(void) +-{ +- Assert(m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- /* +- * Run the set-uid-to-root binary that performs the cleanup. +- * +- * Take the write lock to prevent conflicts with other calls to this +- * VBoxSVC instance. +- */ +- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS); +- hrc = runSetUidToRootHelper(NULL, +- "cleanup", +- "--base-dir", m->strBaseDir.c_str(), +- (const char *)NULL); +- } +- +- return hrc; +-} +- +-STDMETHODIMP ExtPackManager::QueryAllPlugInsForFrontend(IN_BSTR a_bstrFrontend, ComSafeArrayOut(BSTR, a_pabstrPlugInModules)) +-{ +- CheckComArgNotNull(a_bstrFrontend); +- Utf8Str strName(a_bstrFrontend); +- CheckComArgOutSafeArrayPointerValid(a_pabstrPlugInModules); +- Assert(m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- com::SafeArray<BSTR> saPaths((size_t)0); +- /** @todo implement plug-ins */ +- saPaths.detachTo(ComSafeArrayOutArg(a_pabstrPlugInModules)); +- } +- return hrc; +-} +- +-STDMETHODIMP ExtPackManager::IsExtPackUsable(IN_BSTR a_bstrExtPack, BOOL *aUsable) +-{ +- CheckComArgNotNull(a_bstrExtPack); +- Utf8Str strExtPack(a_bstrExtPack); +- *aUsable = isExtPackUsable(strExtPack.c_str()); +- return S_OK; +-} +- +-/** +- * Finds the success indicator string in the stderr output ofr hte helper app. +- * +- * @returns Pointer to the indicator. +- * @param psz The stderr output string. Can be NULL. +- * @param cch The size of the string. +- */ +-static char *findSuccessIndicator(char *psz, size_t cch) +-{ +- static const char s_szSuccessInd[] = "rcExit=RTEXITCODE_SUCCESS"; +- Assert(!cch || strlen(psz) == cch); +- if (cch < sizeof(s_szSuccessInd) - 1) +- return NULL; +- char *pszInd = &psz[cch - sizeof(s_szSuccessInd) + 1]; +- if (strcmp(s_szSuccessInd, pszInd)) +- return NULL; +- return pszInd; +-} +- +-/** +- * Runs the helper application that does the privileged operations. +- * +- * @returns S_OK or a failure status with error information set. +- * @param a_pstrDisplayInfo Platform specific display info hacks. +- * @param a_pszCommand The command to execute. +- * @param ... The argument strings that goes along with the +- * command. Maximum is about 16. Terminated by a +- * NULL. +- */ +-HRESULT ExtPackManager::runSetUidToRootHelper(Utf8Str const *a_pstrDisplayInfo, const char *a_pszCommand, ...) +-{ +- /* +- * Calculate the path to the helper application. +- */ +- char szExecName[RTPATH_MAX]; +- int vrc = RTPathAppPrivateArch(szExecName, sizeof(szExecName)); +- AssertLogRelRCReturn(vrc, E_UNEXPECTED); +- +- vrc = RTPathAppend(szExecName, sizeof(szExecName), VBOX_EXTPACK_HELPER_NAME); +- AssertLogRelRCReturn(vrc, E_UNEXPECTED); +- +- /* +- * Convert the variable argument list to a RTProcCreate argument vector. +- */ +- const char *apszArgs[20]; +- unsigned cArgs = 0; +- +- LogRel(("ExtPack: Executing '%s'", szExecName)); +- apszArgs[cArgs++] = &szExecName[0]; +- +- if ( a_pstrDisplayInfo +- && a_pstrDisplayInfo->isNotEmpty()) +- { +- LogRel((" '--display-info-hack' '%s'", a_pstrDisplayInfo->c_str())); +- apszArgs[cArgs++] = "--display-info-hack"; +- apszArgs[cArgs++] = a_pstrDisplayInfo->c_str(); +- } +- +- LogRel(("'%s'", a_pszCommand)); +- apszArgs[cArgs++] = a_pszCommand; +- +- va_list va; +- va_start(va, a_pszCommand); +- const char *pszLastArg; +- for (;;) +- { +- AssertReturn(cArgs < RT_ELEMENTS(apszArgs) - 1, E_UNEXPECTED); +- pszLastArg = va_arg(va, const char *); +- if (!pszLastArg) +- break; +- LogRel((" '%s'", pszLastArg)); +- apszArgs[cArgs++] = pszLastArg; +- }; +- va_end(va); +- +- LogRel(("\n")); +- apszArgs[cArgs] = NULL; +- +- /* +- * Create a PIPE which we attach to stderr so that we can read the error +- * message on failure and report it back to the caller. +- */ +- RTPIPE hPipeR; +- RTHANDLE hStdErrPipe; +- hStdErrPipe.enmType = RTHANDLETYPE_PIPE; +- vrc = RTPipeCreate(&hPipeR, &hStdErrPipe.u.hPipe, RTPIPE_C_INHERIT_WRITE); +- AssertLogRelRCReturn(vrc, E_UNEXPECTED); +- +- /* +- * Spawn the process. +- */ +- HRESULT hrc; +- RTPROCESS hProcess; +- vrc = RTProcCreateEx(szExecName, +- apszArgs, +- RTENV_DEFAULT, +- 0 /*fFlags*/, +- NULL /*phStdIn*/, +- NULL /*phStdOut*/, +- &hStdErrPipe, +- NULL /*pszAsUser*/, +- NULL /*pszPassword*/, +- &hProcess); +- if (RT_SUCCESS(vrc)) +- { +- vrc = RTPipeClose(hStdErrPipe.u.hPipe); +- hStdErrPipe.u.hPipe = NIL_RTPIPE; +- +- /* +- * Read the pipe output until the process completes. +- */ +- RTPROCSTATUS ProcStatus = { -42, RTPROCEXITREASON_ABEND }; +- size_t cbStdErrBuf = 0; +- size_t offStdErrBuf = 0; +- char *pszStdErrBuf = NULL; +- do +- { +- /* +- * Service the pipe. Block waiting for output or the pipe breaking +- * when the process terminates. +- */ +- if (hPipeR != NIL_RTPIPE) +- { +- char achBuf[1024]; +- size_t cbRead; +- vrc = RTPipeReadBlocking(hPipeR, achBuf, sizeof(achBuf), &cbRead); +- if (RT_SUCCESS(vrc)) +- { +- /* grow the buffer? */ +- size_t cbBufReq = offStdErrBuf + cbRead + 1; +- if ( cbBufReq > cbStdErrBuf +- && cbBufReq < _256K) +- { +- size_t cbNew = RT_ALIGN_Z(cbBufReq, 16); // 1024 +- void *pvNew = RTMemRealloc(pszStdErrBuf, cbNew); +- if (pvNew) +- { +- pszStdErrBuf = (char *)pvNew; +- cbStdErrBuf = cbNew; +- } +- } +- +- /* append if we've got room. */ +- if (cbBufReq <= cbStdErrBuf) +- { +- memcpy(&pszStdErrBuf[offStdErrBuf], achBuf, cbRead); +- offStdErrBuf = offStdErrBuf + cbRead; +- pszStdErrBuf[offStdErrBuf] = '\0'; +- } +- } +- else +- { +- AssertLogRelMsg(vrc == VERR_BROKEN_PIPE, ("%Rrc\n", vrc)); +- RTPipeClose(hPipeR); +- hPipeR = NIL_RTPIPE; +- } +- } +- +- /* +- * Service the process. Block if we have no pipe. +- */ +- if (hProcess != NIL_RTPROCESS) +- { +- vrc = RTProcWait(hProcess, +- hPipeR == NIL_RTPIPE ? RTPROCWAIT_FLAGS_BLOCK : RTPROCWAIT_FLAGS_NOBLOCK, +- &ProcStatus); +- if (RT_SUCCESS(vrc)) +- hProcess = NIL_RTPROCESS; +- else +- AssertLogRelMsgStmt(vrc == VERR_PROCESS_RUNNING, ("%Rrc\n", vrc), hProcess = NIL_RTPROCESS); +- } +- } while ( hPipeR != NIL_RTPIPE +- || hProcess != NIL_RTPROCESS); +- +- LogRel(("ExtPack: enmReason=%d iStatus=%d stderr='%s'\n", +- ProcStatus.enmReason, ProcStatus.iStatus, offStdErrBuf ? pszStdErrBuf : "")); +- +- /* +- * Look for rcExit=RTEXITCODE_SUCCESS at the end of the error output, +- * cut it as it is only there to attest the success. +- */ +- if (offStdErrBuf > 0) +- { +- RTStrStripR(pszStdErrBuf); +- offStdErrBuf = strlen(pszStdErrBuf); +- } +- +- char *pszSuccessInd = findSuccessIndicator(pszStdErrBuf, offStdErrBuf); +- if (pszSuccessInd) +- { +- *pszSuccessInd = '\0'; +- offStdErrBuf = pszSuccessInd - pszStdErrBuf; +- } +- else if ( ProcStatus.enmReason == RTPROCEXITREASON_NORMAL +- && ProcStatus.iStatus == 0) +- ProcStatus.iStatus = offStdErrBuf ? 667 : 666; +- +- /* +- * Compose the status code and, on failure, error message. +- */ +- if ( ProcStatus.enmReason == RTPROCEXITREASON_NORMAL +- && ProcStatus.iStatus == 0) +- hrc = S_OK; +- else if (ProcStatus.enmReason == RTPROCEXITREASON_NORMAL) +- { +- AssertMsg(ProcStatus.iStatus != 0, ("%s\n", pszStdErrBuf)); +- hrc = setError(E_FAIL, tr("The installer failed with exit code %d: %s"), +- ProcStatus.iStatus, offStdErrBuf ? pszStdErrBuf : ""); +- } +- else if (ProcStatus.enmReason == RTPROCEXITREASON_SIGNAL) +- hrc = setError(E_UNEXPECTED, tr("The installer was killed by signal #d (stderr: %s)"), +- ProcStatus.iStatus, offStdErrBuf ? pszStdErrBuf : ""); +- else if (ProcStatus.enmReason == RTPROCEXITREASON_ABEND) +- hrc = setError(E_UNEXPECTED, tr("The installer aborted abnormally (stderr: %s)"), +- offStdErrBuf ? pszStdErrBuf : ""); +- else +- hrc = setError(E_UNEXPECTED, tr("internal error: enmReason=%d iStatus=%d stderr='%s'"), +- ProcStatus.enmReason, ProcStatus.iStatus, offStdErrBuf ? pszStdErrBuf : ""); +- +- RTMemFree(pszStdErrBuf); +- } +- else +- hrc = setError(VBOX_E_IPRT_ERROR, tr("Failed to launch the helper application '%s' (%Rrc)"), szExecName, vrc); +- +- RTPipeClose(hPipeR); +- RTPipeClose(hStdErrPipe.u.hPipe); +- +- return hrc; +-} +- +-/** +- * Finds an installed extension pack. +- * +- * @returns Pointer to the extension pack if found, NULL if not. (No reference +- * counting problem here since the caller must be holding the lock.) +- * @param a_pszName The name of the extension pack. +- */ +-ExtPack *ExtPackManager::findExtPack(const char *a_pszName) +-{ +- size_t cchName = strlen(a_pszName); +- +- for (ExtPackList::iterator it = m->llInstalledExtPacks.begin(); +- it != m->llInstalledExtPacks.end(); +- it++) +- { +- ExtPack::Data *pExtPackData = (*it)->m; +- if ( pExtPackData +- && pExtPackData->Desc.strName.length() == cchName +- && pExtPackData->Desc.strName.equalsIgnoreCase(a_pszName)) +- return (*it); +- } +- return NULL; +-} +- +-/** +- * Removes an installed extension pack from the internal list. +- * +- * The package is expected to exist! +- * +- * @param a_pszName The name of the extension pack. +- */ +-void ExtPackManager::removeExtPack(const char *a_pszName) +-{ +- size_t cchName = strlen(a_pszName); +- +- for (ExtPackList::iterator it = m->llInstalledExtPacks.begin(); +- it != m->llInstalledExtPacks.end(); +- it++) +- { +- ExtPack::Data *pExtPackData = (*it)->m; +- if ( pExtPackData +- && pExtPackData->Desc.strName.length() == cchName +- && pExtPackData->Desc.strName.equalsIgnoreCase(a_pszName)) +- { +- m->llInstalledExtPacks.erase(it); +- return; +- } +- } +- AssertMsgFailed(("%s\n", a_pszName)); +-} +- +-/** +- * Refreshes the specified extension pack. +- * +- * This may remove the extension pack from the list, so any non-smart pointers +- * to the extension pack object may become invalid. +- * +- * @returns S_OK and *a_ppExtPack on success, COM status code and error +- * message on failure. Note that *a_ppExtPack can be NULL. +- * +- * @param a_pszName The extension to update.. +- * @param a_fUnusableIsError If @c true, report an unusable extension pack +- * as an error. +- * @param a_ppExtPack Where to store the pointer to the extension +- * pack of it is still around after the refresh. +- * This is optional. +- * +- * @remarks Caller holds the extension manager lock. +- * @remarks Only called in VBoxSVC. +- */ +-HRESULT ExtPackManager::refreshExtPack(const char *a_pszName, bool a_fUnusableIsError, ExtPack **a_ppExtPack) +-{ +- Assert(m->pVirtualBox != NULL); /* Only called from VBoxSVC. */ +- +- HRESULT hrc; +- ExtPack *pExtPack = findExtPack(a_pszName); +- if (pExtPack) +- { +- /* +- * Refresh existing object. +- */ +- bool fCanDelete; +- hrc = pExtPack->refresh(&fCanDelete); +- if (SUCCEEDED(hrc)) +- { +- if (fCanDelete) +- { +- removeExtPack(a_pszName); +- pExtPack = NULL; +- } +- } +- } +- else +- { +- /* +- * Do this check here, otherwise VBoxExtPackCalcDir() will fail with a strange +- * error. +- */ +- bool fValid = VBoxExtPackIsValidName(a_pszName); +- if (!fValid) +- return setError(E_FAIL, "Invalid extension pack name specified"); +- +- /* +- * Does the dir exist? Make some special effort to deal with case +- * sensitivie file systems (a_pszName is case insensitive and mangled). +- */ +- char szDir[RTPATH_MAX]; +- int vrc = VBoxExtPackCalcDir(szDir, sizeof(szDir), m->strBaseDir.c_str(), a_pszName); +- AssertLogRelRCReturn(vrc, E_FAIL); +- +- RTDIRENTRYEX Entry; +- RTFSOBJINFO ObjInfo; +- vrc = RTPathQueryInfoEx(szDir, &ObjInfo, RTFSOBJATTRADD_NOTHING, RTPATH_F_ON_LINK); +- bool fExists = RT_SUCCESS(vrc) && RTFS_IS_DIRECTORY(ObjInfo.Attr.fMode); +- if (!fExists) +- { +- PRTDIR pDir; +- vrc = RTDirOpen(&pDir, m->strBaseDir.c_str()); +- if (RT_SUCCESS(vrc)) +- { +- const char *pszMangledName = RTPathFilename(szDir); +- for (;;) +- { +- vrc = RTDirReadEx(pDir, &Entry, NULL /*pcbDirEntry*/, RTFSOBJATTRADD_NOTHING, RTPATH_F_ON_LINK); +- if (RT_FAILURE(vrc)) +- { +- AssertLogRelMsg(vrc == VERR_NO_MORE_FILES, ("%Rrc\n", vrc)); +- break; +- } +- if ( RTFS_IS_DIRECTORY(Entry.Info.Attr.fMode) +- && !RTStrICmp(Entry.szName, pszMangledName)) +- { +- /* +- * The installed extension pack has a uses different case. +- * Update the name and directory variables. +- */ +- vrc = RTPathJoin(szDir, sizeof(szDir), m->strBaseDir.c_str(), Entry.szName); /* not really necessary */ +- AssertLogRelRCReturnStmt(vrc, RTDirClose(pDir), E_UNEXPECTED); +- a_pszName = Entry.szName; +- fExists = true; +- break; +- } +- } +- RTDirClose(pDir); +- } +- } +- if (fExists) +- { +- /* +- * We've got something, create a new extension pack object for it. +- */ +- ComObjPtr<ExtPack> ptrNewExtPack; +- hrc = ptrNewExtPack.createObject(); +- if (SUCCEEDED(hrc)) +- hrc = ptrNewExtPack->initWithDir(m->enmContext, a_pszName, szDir); +- if (SUCCEEDED(hrc)) +- { +- m->llInstalledExtPacks.push_back(ptrNewExtPack); +- if (ptrNewExtPack->m->fUsable) +- LogRel(("ExtPackManager: Found extension pack '%s'.\n", a_pszName)); +- else +- LogRel(("ExtPackManager: Found bad extension pack '%s': %s\n", +- a_pszName, ptrNewExtPack->m->strWhyUnusable.c_str() )); +- pExtPack = ptrNewExtPack; +- } +- } +- else +- hrc = S_OK; +- } +- +- /* +- * Report error if not usable, if that is desired. +- */ +- if ( SUCCEEDED(hrc) +- && pExtPack +- && a_fUnusableIsError +- && !pExtPack->m->fUsable) +- hrc = setError(E_FAIL, "%s", pExtPack->m->strWhyUnusable.c_str()); +- +- if (a_ppExtPack) +- *a_ppExtPack = pExtPack; +- return hrc; +-} +- +-/** +- * Thread wrapper around doInstall. +- * +- * @returns VINF_SUCCESS (ignored) +- * @param hThread The thread handle (ignored). +- * @param pvJob The job structure. +- */ +-/*static*/ DECLCALLBACK(int) ExtPackManager::doInstallThreadProc(RTTHREAD hThread, void *pvJob) +-{ +- PEXTPACKINSTALLJOB pJob = (PEXTPACKINSTALLJOB)pvJob; +- HRESULT hrc = pJob->ptrExtPackMgr->doInstall(pJob->ptrExtPackFile, pJob->fReplace, &pJob->strDisplayInfo); +- pJob->ptrProgress->notifyComplete(hrc); +- delete pJob; +- +- NOREF(hThread); +- return VINF_SUCCESS; +-} +- +-/** +- * Worker for IExtPackFile::Install. +- * +- * Called on a worker thread via doInstallThreadProc. +- * +- * @returns COM status code. +- * @param a_pExtPackFile The extension pack file, caller checks that +- * it's usable. +- * @param a_fReplace Whether to replace any existing extpack or just +- * fail. +- * @param a_pstrDisplayInfo Host specific display information hacks. +- * @param a_ppProgress Where to return a progress object some day. Can +- * be NULL. +- */ +-HRESULT ExtPackManager::doInstall(ExtPackFile *a_pExtPackFile, bool a_fReplace, Utf8Str const *a_pstrDisplayInfo) +-{ +- AssertReturn(m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON, E_UNEXPECTED); +- RTCString const * const pStrName = &a_pExtPackFile->m->Desc.strName; +- RTCString const * const pStrTarball = &a_pExtPackFile->m->strExtPackFile; +- RTCString const * const pStrTarballDigest = &a_pExtPackFile->m->strDigest; +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS); +- +- /* +- * Refresh the data we have on the extension pack as it +- * may be made stale by direct meddling or some other user. +- */ +- ExtPack *pExtPack; +- hrc = refreshExtPack(pStrName->c_str(), false /*a_fUnusableIsError*/, &pExtPack); +- if (SUCCEEDED(hrc)) +- { +- if (pExtPack && a_fReplace) +- hrc = pExtPack->callUninstallHookAndClose(m->pVirtualBox, false /*a_ForcedRemoval*/); +- else if (pExtPack) +- hrc = setError(E_FAIL, +- tr("Extension pack '%s' is already installed." +- " In case of a reinstallation, please uninstall it first"), +- pStrName->c_str()); +- } +- if (SUCCEEDED(hrc)) +- { +- /* +- * Run the privileged helper binary that performs the actual +- * installation. Then create an object for the packet (we do this +- * even on failure, to be on the safe side). +- */ +- hrc = runSetUidToRootHelper(a_pstrDisplayInfo, +- "install", +- "--base-dir", m->strBaseDir.c_str(), +- "--cert-dir", m->strCertificatDirPath.c_str(), +- "--name", pStrName->c_str(), +- "--tarball", pStrTarball->c_str(), +- "--sha-256", pStrTarballDigest->c_str(), +- pExtPack ? "--replace" : (const char *)NULL, +- (const char *)NULL); +- if (SUCCEEDED(hrc)) +- { +- hrc = refreshExtPack(pStrName->c_str(), true /*a_fUnusableIsError*/, &pExtPack); +- if (SUCCEEDED(hrc) && pExtPack) +- { +- RTERRINFOSTATIC ErrInfo; +- RTErrInfoInitStatic(&ErrInfo); +- pExtPack->callInstalledHook(m->pVirtualBox, &autoLock, &ErrInfo.Core); +- if (RT_SUCCESS(ErrInfo.Core.rc)) +- LogRel(("ExtPackManager: Successfully installed extension pack '%s'.\n", pStrName->c_str())); +- else +- { +- LogRel(("ExtPackManager: Installated hook for '%s' failed: %Rrc - %s\n", +- pStrName->c_str(), ErrInfo.Core.rc, ErrInfo.Core.pszMsg)); +- +- /* +- * Uninstall the extpack if the error indicates that. +- */ +- if (ErrInfo.Core.rc == VERR_EXTPACK_UNSUPPORTED_HOST_UNINSTALL) +- runSetUidToRootHelper(a_pstrDisplayInfo, +- "uninstall", +- "--base-dir", m->strBaseDir.c_str(), +- "--name", pStrName->c_str(), +- "--forced", +- (const char *)NULL); +- hrc = setError(E_FAIL, tr("The installation hook failed: %Rrc - %s"), +- ErrInfo.Core.rc, ErrInfo.Core.pszMsg); +- } +- } +- else if (SUCCEEDED(hrc)) +- hrc = setError(E_FAIL, tr("Installing extension pack '%s' failed under mysterious circumstances"), +- pStrName->c_str()); +- } +- else +- { +- ErrorInfoKeeper Eik; +- refreshExtPack(pStrName->c_str(), false /*a_fUnusableIsError*/, NULL); +- } +- } +- +- /* +- * Do VirtualBoxReady callbacks now for any freshly installed +- * extension pack (old ones will not be called). +- */ +- if (m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON) +- { +- autoLock.release(); +- callAllVirtualBoxReadyHooks(); +- } +- } +- +- return hrc; +-} +- +-/** +- * Thread wrapper around doUninstall. +- * +- * @returns VINF_SUCCESS (ignored) +- * @param hThread The thread handle (ignored). +- * @param pvJob The job structure. +- */ +-/*static*/ DECLCALLBACK(int) ExtPackManager::doUninstallThreadProc(RTTHREAD hThread, void *pvJob) +-{ +- PEXTPACKUNINSTALLJOB pJob = (PEXTPACKUNINSTALLJOB)pvJob; +- HRESULT hrc = pJob->ptrExtPackMgr->doUninstall(&pJob->strName, pJob->fForcedRemoval, &pJob->strDisplayInfo); +- pJob->ptrProgress->notifyComplete(hrc); +- delete pJob; +- +- NOREF(hThread); +- return VINF_SUCCESS; +-} +- +-/** +- * Worker for IExtPackManager::Uninstall. +- * +- * Called on a worker thread via doUninstallThreadProc. +- * +- * @returns COM status code. +- * @param a_pstrName The name of the extension pack to uninstall. +- * @param a_fForcedRemoval Whether to be skip and ignore certain bits of +- * the extpack feedback. To deal with misbehaving +- * extension pack hooks. +- * @param a_pstrDisplayInfo Host specific display information hacks. +- */ +-HRESULT ExtPackManager::doUninstall(Utf8Str const *a_pstrName, bool a_fForcedRemoval, Utf8Str const *a_pstrDisplayInfo) +-{ +- Assert(m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS); +- +- /* +- * Refresh the data we have on the extension pack as it may be made +- * stale by direct meddling or some other user. +- */ +- ExtPack *pExtPack; +- hrc = refreshExtPack(a_pstrName->c_str(), false /*a_fUnusableIsError*/, &pExtPack); +- if (SUCCEEDED(hrc)) +- { +- if (!pExtPack) +- { +- LogRel(("ExtPackManager: Extension pack '%s' is not installed, so nothing to uninstall.\n", a_pstrName->c_str())); +- hrc = S_OK; /* nothing to uninstall */ +- } +- else +- { +- /* +- * Call the uninstall hook and unload the main dll. +- */ +- hrc = pExtPack->callUninstallHookAndClose(m->pVirtualBox, a_fForcedRemoval); +- if (SUCCEEDED(hrc)) +- { +- /* +- * Run the set-uid-to-root binary that performs the +- * uninstallation. Then refresh the object. +- * +- * This refresh is theorically subject to races, but it's of +- * the don't-do-that variety. +- */ +- const char *pszForcedOpt = a_fForcedRemoval ? "--forced" : NULL; +- hrc = runSetUidToRootHelper(a_pstrDisplayInfo, +- "uninstall", +- "--base-dir", m->strBaseDir.c_str(), +- "--name", a_pstrName->c_str(), +- pszForcedOpt, /* Last as it may be NULL. */ +- (const char *)NULL); +- if (SUCCEEDED(hrc)) +- { +- hrc = refreshExtPack(a_pstrName->c_str(), false /*a_fUnusableIsError*/, &pExtPack); +- if (SUCCEEDED(hrc)) +- { +- if (!pExtPack) +- LogRel(("ExtPackManager: Successfully uninstalled extension pack '%s'.\n", a_pstrName->c_str())); +- else +- hrc = setError(E_FAIL, +- tr("Uninstall extension pack '%s' failed under mysterious circumstances"), +- a_pstrName->c_str()); +- } +- } +- else +- { +- ErrorInfoKeeper Eik; +- refreshExtPack(a_pstrName->c_str(), false /*a_fUnusableIsError*/, NULL); +- } +- } +- } +- } +- +- /* +- * Do VirtualBoxReady callbacks now for any freshly installed +- * extension pack (old ones will not be called). +- */ +- if (m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON) +- { +- autoLock.release(); +- callAllVirtualBoxReadyHooks(); +- } +- } +- +- return hrc; +-} +- +- +-/** +- * Calls the pfnVirtualBoxReady hook for all working extension packs. +- * +- * @remarks The caller must not hold any locks. +- */ +-void ExtPackManager::callAllVirtualBoxReadyHooks(void) +-{ +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (FAILED(hrc)) +- return; +- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS); +- ComPtr<ExtPackManager> ptrSelfRef = this; +- +- for (ExtPackList::iterator it = m->llInstalledExtPacks.begin(); +- it != m->llInstalledExtPacks.end(); +- /* advancing below */) +- { +- if ((*it)->callVirtualBoxReadyHook(m->pVirtualBox, &autoLock)) +- it = m->llInstalledExtPacks.begin(); +- else +- it++; +- } +-} +- +-/** +- * Calls the pfnConsoleReady hook for all working extension packs. +- * +- * @param a_pConsole The console interface. +- * @remarks The caller must not hold any locks. +- */ +-void ExtPackManager::callAllConsoleReadyHooks(IConsole *a_pConsole) +-{ +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (FAILED(hrc)) +- return; +- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS); +- ComPtr<ExtPackManager> ptrSelfRef = this; +- +- for (ExtPackList::iterator it = m->llInstalledExtPacks.begin(); +- it != m->llInstalledExtPacks.end(); +- /* advancing below */) +- { +- if ((*it)->callConsoleReadyHook(a_pConsole, &autoLock)) +- it = m->llInstalledExtPacks.begin(); +- else +- it++; +- } +-} +- +-/** +- * Calls the pfnVMCreated hook for all working extension packs. +- * +- * @param a_pMachine The machine interface of the new VM. +- */ +-void ExtPackManager::callAllVmCreatedHooks(IMachine *a_pMachine) +-{ +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (FAILED(hrc)) +- return; +- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS); +- ComPtr<ExtPackManager> ptrSelfRef = this; /* paranoia */ +- ExtPackList llExtPacks = m->llInstalledExtPacks; +- +- for (ExtPackList::iterator it = llExtPacks.begin(); it != llExtPacks.end(); it++) +- (*it)->callVmCreatedHook(m->pVirtualBox, a_pMachine, &autoLock); +-} +- +-/** +- * Calls the pfnVMConfigureVMM hook for all working extension packs. +- * +- * @returns VBox status code. Stops on the first failure, expecting the caller +- * to signal this to the caller of the CFGM constructor. +- * @param a_pConsole The console interface for the VM. +- * @param a_pVM The VM handle. +- */ +-int ExtPackManager::callAllVmConfigureVmmHooks(IConsole *a_pConsole, PVM a_pVM) +-{ +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (FAILED(hrc)) +- return Global::vboxStatusCodeFromCOM(hrc); +- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS); +- ComPtr<ExtPackManager> ptrSelfRef = this; /* paranoia */ +- ExtPackList llExtPacks = m->llInstalledExtPacks; +- +- for (ExtPackList::iterator it = llExtPacks.begin(); it != llExtPacks.end(); it++) +- { +- int vrc; +- (*it)->callVmConfigureVmmHook(a_pConsole, a_pVM, &autoLock, &vrc); +- if (RT_FAILURE(vrc)) +- return vrc; +- } +- +- return VINF_SUCCESS; +-} +- +-/** +- * Calls the pfnVMPowerOn hook for all working extension packs. +- * +- * @returns VBox status code. Stops on the first failure, expecting the caller +- * to not power on the VM. +- * @param a_pConsole The console interface for the VM. +- * @param a_pVM The VM handle. +- */ +-int ExtPackManager::callAllVmPowerOnHooks(IConsole *a_pConsole, PVM a_pVM) +-{ +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (FAILED(hrc)) +- return Global::vboxStatusCodeFromCOM(hrc); +- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS); +- ComPtr<ExtPackManager> ptrSelfRef = this; /* paranoia */ +- ExtPackList llExtPacks = m->llInstalledExtPacks; +- +- for (ExtPackList::iterator it = llExtPacks.begin(); it != llExtPacks.end(); it++) +- { +- int vrc; +- (*it)->callVmPowerOnHook(a_pConsole, a_pVM, &autoLock, &vrc); +- if (RT_FAILURE(vrc)) +- return vrc; +- } +- +- return VINF_SUCCESS; +-} +- +-/** +- * Calls the pfnVMPowerOff hook for all working extension packs. +- * +- * @param a_pConsole The console interface for the VM. +- * @param a_pVM The VM handle. Can be NULL. +- */ +-void ExtPackManager::callAllVmPowerOffHooks(IConsole *a_pConsole, PVM a_pVM) +-{ +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (FAILED(hrc)) +- return; +- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS); +- ComPtr<ExtPackManager> ptrSelfRef = this; /* paranoia */ +- ExtPackList llExtPacks = m->llInstalledExtPacks; +- +- for (ExtPackList::iterator it = llExtPacks.begin(); it != llExtPacks.end(); it++) +- (*it)->callVmPowerOffHook(a_pConsole, a_pVM, &autoLock); +-} +- +- +-/** +- * Checks that the specified extension pack contains a VRDE module and that it +- * is shipshape. +- * +- * @returns S_OK if ok, appropriate failure status code with details. +- * @param a_pstrExtPack The name of the extension pack. +- */ +-HRESULT ExtPackManager::checkVrdeExtPack(Utf8Str const *a_pstrExtPack) +-{ +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- AutoReadLock autoLock(this COMMA_LOCKVAL_SRC_POS); +- +- ExtPack *pExtPack = findExtPack(a_pstrExtPack->c_str()); +- if (pExtPack) +- hrc = pExtPack->checkVrde(); +- else +- hrc = setError(VBOX_E_OBJECT_NOT_FOUND, tr("No extension pack by the name '%s' was found"), a_pstrExtPack->c_str()); +- } +- +- return hrc; +-} +- +-/** +- * Gets the full path to the VRDE library of the specified extension pack. +- * +- * This will do extacly the same as checkVrdeExtPack and then resolve the +- * library path. +- * +- * @returns S_OK if a path is returned, COM error status and message return if +- * not. +- * @param a_pstrExtPack The extension pack. +- * @param a_pstrVrdeLibrary Where to return the path. +- */ +-int ExtPackManager::getVrdeLibraryPathForExtPack(Utf8Str const *a_pstrExtPack, Utf8Str *a_pstrVrdeLibrary) +-{ +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- AutoReadLock autoLock(this COMMA_LOCKVAL_SRC_POS); +- +- ExtPack *pExtPack = findExtPack(a_pstrExtPack->c_str()); +- if (pExtPack) +- hrc = pExtPack->getVrdpLibraryName(a_pstrVrdeLibrary); +- else +- hrc = setError(VBOX_E_OBJECT_NOT_FOUND, tr("No extension pack by the name '%s' was found"), a_pstrExtPack->c_str()); +- } +- +- return hrc; +-} +- +-/** +- * Gets the name of the default VRDE extension pack. +- * +- * @returns S_OK or some COM error status on red tape failure. +- * @param a_pstrExtPack Where to return the extension pack name. Returns +- * empty if no extension pack wishes to be the default +- * VRDP provider. +- */ +-HRESULT ExtPackManager::getDefaultVrdeExtPack(Utf8Str *a_pstrExtPack) +-{ +- a_pstrExtPack->setNull(); +- +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (SUCCEEDED(hrc)) +- { +- AutoReadLock autoLock(this COMMA_LOCKVAL_SRC_POS); +- +- for (ExtPackList::iterator it = m->llInstalledExtPacks.begin(); +- it != m->llInstalledExtPacks.end(); +- it++) +- { +- if ((*it)->wantsToBeDefaultVrde()) +- { +- *a_pstrExtPack = (*it)->m->Desc.strName; +- break; +- } +- } +- } +- return hrc; +-} +- +-/** +- * Checks if an extension pack is (present and) usable. +- * +- * @returns @c true if it is, otherwise @c false. +- * @param a_pszExtPack The name of the extension pack. +- */ +-bool ExtPackManager::isExtPackUsable(const char *a_pszExtPack) +-{ +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (FAILED(hrc)) +- return false; +- AutoReadLock autoLock(this COMMA_LOCKVAL_SRC_POS); +- +- ExtPack *pExtPack = findExtPack(a_pszExtPack); +- return pExtPack != NULL +- && pExtPack->m->fUsable; +-} +- +-/** +- * Dumps all extension packs to the release log. +- */ +-void ExtPackManager::dumpAllToReleaseLog(void) +-{ +- AutoCaller autoCaller(this); +- HRESULT hrc = autoCaller.rc(); +- if (FAILED(hrc)) +- return; +- AutoReadLock autoLock(this COMMA_LOCKVAL_SRC_POS); +- +- LogRel(("Installed Extension Packs:\n")); +- for (ExtPackList::iterator it = m->llInstalledExtPacks.begin(); +- it != m->llInstalledExtPacks.end(); +- it++) +- { +- ExtPack::Data *pExtPackData = (*it)->m; +- if (pExtPackData) +- { +- if (pExtPackData->fUsable) +- LogRel((" %s (Version: %s r%u%s%s; VRDE Module: %s)\n", +- pExtPackData->Desc.strName.c_str(), +- pExtPackData->Desc.strVersion.c_str(), +- pExtPackData->Desc.uRevision, +- pExtPackData->Desc.strEdition.isEmpty() ? "" : " ", +- pExtPackData->Desc.strEdition.c_str(), +- pExtPackData->Desc.strVrdeModule.c_str() )); +- else +- LogRel((" %s (Version: %s r%u%s%s; VRDE Module: %s unusable because of '%s')\n", +- pExtPackData->Desc.strName.c_str(), +- pExtPackData->Desc.strVersion.c_str(), +- pExtPackData->Desc.uRevision, +- pExtPackData->Desc.strEdition.isEmpty() ? "" : " ", +- pExtPackData->Desc.strEdition.c_str(), +- pExtPackData->Desc.strVrdeModule.c_str(), +- pExtPackData->strWhyUnusable.c_str() )); +- } +- else +- LogRel((" pExtPackData is NULL\n")); +- } +- +- if (!m->llInstalledExtPacks.size()) +- LogRel((" None installed!\n")); +-} +- +-/* vi: set tabstop=4 shiftwidth=4 expandtab: */ +--- VirtualBox-4.1.18.orig/src/VBox/Main/src-all/ExtPackUtil.cpp 2012-06-20 10:17:34.000000000 -0300 ++++ /dev/null 2012-07-24 14:48:18.638572110 -0300 +@@ -1,1385 +0,0 @@ +-/* $Id: ExtPackUtil.cpp $ */ +-/** @file +- * VirtualBox Main - Extension Pack Utilities and definitions, VBoxC, VBoxSVC, ++. +- */ +- +-/* +- * Copyright (C) 2010-2012 Oracle Corporation +- * +- * This file is part of VirtualBox Open Source Edition (OSE), as +- * available from http://www.virtualbox.org. This file is free software; +- * you can redistribute it and/or modify it under the terms of the GNU +- * General Public License (GPL) as published by the Free Software +- * Foundation, in version 2 as it comes in the "COPYING" file of the +- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the +- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. +- */ +- +- +-/******************************************************************************* +-* Header Files * +-*******************************************************************************/ +-#include "../include/ExtPackUtil.h" +- +-#include <iprt/ctype.h> +-#include <iprt/dir.h> +-#include <iprt/file.h> +-#include <iprt/manifest.h> +-#include <iprt/param.h> +-#include <iprt/path.h> +-#include <iprt/sha.h> +-#include <iprt/string.h> +-#include <iprt/vfs.h> +-#include <iprt/tar.h> +-#include <iprt/zip.h> +-#include <iprt/cpp/xml.h> +- +-#include <VBox/log.h> +- +- +-/** +- * Worker for VBoxExtPackLoadDesc that loads the plug-in descriptors. +- * +- * @returns Same as VBoxExtPackLoadDesc. +- * @param pVBoxExtPackElm +- * @param pcPlugIns Where to return the number of plug-ins in the +- * array. +- * @param paPlugIns Where to return the plug-in descriptor array. +- * (RTMemFree it even on failure) +- */ +-static RTCString * +-vboxExtPackLoadPlugInDescs(const xml::ElementNode *pVBoxExtPackElm, +- uint32_t *pcPlugIns, PVBOXEXTPACKPLUGINDESC *paPlugIns) +-{ +- *pcPlugIns = 0; +- *paPlugIns = NULL; +- +- /** @todo plug-ins */ +- NOREF(pVBoxExtPackElm); +- +- return NULL; +-} +- +-/** +- * Clears the extension pack descriptor. +- * +- * @param a_pExtPackDesc The descriptor to clear. +- */ +-static void vboxExtPackClearDesc(PVBOXEXTPACKDESC a_pExtPackDesc) +-{ +- a_pExtPackDesc->strName.setNull(); +- a_pExtPackDesc->strDescription.setNull(); +- a_pExtPackDesc->strVersion.setNull(); +- a_pExtPackDesc->strEdition.setNull(); +- a_pExtPackDesc->uRevision = 0; +- a_pExtPackDesc->strMainModule.setNull(); +- a_pExtPackDesc->strVrdeModule.setNull(); +- a_pExtPackDesc->cPlugIns = 0; +- a_pExtPackDesc->paPlugIns = NULL; +- a_pExtPackDesc->fShowLicense = false; +-} +- +-/** +- * Initializes an extension pack descriptor so that it's safe to call free on +- * it whatever happens later on. +- * +- * @param a_pExtPackDesc The descirptor to initialize. +- */ +-void VBoxExtPackInitDesc(PVBOXEXTPACKDESC a_pExtPackDesc) +-{ +- vboxExtPackClearDesc(a_pExtPackDesc); +-} +- +- +-/** +- * Load the extension pack descriptor from an XML document. +- * +- * @returns NULL on success, pointer to an error message on failure (caller +- * deletes it). +- * @param a_pDoc Pointer to the the XML document. +- * @param a_pExtPackDesc Where to store the extension pack descriptor. +- */ +-static RTCString *vboxExtPackLoadDescFromDoc(xml::Document *a_pDoc, PVBOXEXTPACKDESC a_pExtPackDesc) +-{ +- /* +- * Get the main element and check its version. +- */ +- const xml::ElementNode *pVBoxExtPackElm = a_pDoc->getRootElement(); +- if ( !pVBoxExtPackElm +- || strcmp(pVBoxExtPackElm->getName(), "VirtualBoxExtensionPack") != 0) +- return new RTCString("No VirtualBoxExtensionPack element"); +- +- RTCString strFormatVersion; +- if (!pVBoxExtPackElm->getAttributeValue("version", strFormatVersion)) +- return new RTCString("Missing format version"); +- if (!strFormatVersion.equals("1.0")) +- return &(new RTCString("Unsupported format version: "))->append(strFormatVersion); +- +- /* +- * Read and validate mandatory bits. +- */ +- const xml::ElementNode *pNameElm = pVBoxExtPackElm->findChildElement("Name"); +- if (!pNameElm) +- return new RTCString("The 'Name' element is missing"); +- const char *pszName = pNameElm->getValue(); +- if (!VBoxExtPackIsValidName(pszName)) +- return &(new RTCString("Invalid name: "))->append(pszName); +- +- const xml::ElementNode *pDescElm = pVBoxExtPackElm->findChildElement("Description"); +- if (!pDescElm) +- return new RTCString("The 'Description' element is missing"); +- const char *pszDesc = pDescElm->getValue(); +- if (!pszDesc || *pszDesc == '\0') +- return new RTCString("The 'Description' element is empty"); +- if (strpbrk(pszDesc, "\n\r\t\v\b") != NULL) +- return new RTCString("The 'Description' must not contain control characters"); +- +- const xml::ElementNode *pVersionElm = pVBoxExtPackElm->findChildElement("Version"); +- if (!pVersionElm) +- return new RTCString("The 'Version' element is missing"); +- const char *pszVersion = pVersionElm->getValue(); +- if (!pszVersion || *pszVersion == '\0') +- return new RTCString("The 'Version' element is empty"); +- if (!VBoxExtPackIsValidVersionString(pszVersion)) +- return &(new RTCString("Invalid version string: "))->append(pszVersion); +- +- uint32_t uRevision; +- if (!pVersionElm->getAttributeValue("revision", uRevision)) +- uRevision = 0; +- +- const char *pszEdition; +- if (!pVersionElm->getAttributeValue("edition", pszEdition)) +- pszEdition = ""; +- if (!VBoxExtPackIsValidEditionString(pszEdition)) +- return &(new RTCString("Invalid edition string: "))->append(pszEdition); +- +- const xml::ElementNode *pMainModuleElm = pVBoxExtPackElm->findChildElement("MainModule"); +- if (!pMainModuleElm) +- return new RTCString("The 'MainModule' element is missing"); +- const char *pszMainModule = pMainModuleElm->getValue(); +- if (!pszMainModule || *pszMainModule == '\0') +- return new RTCString("The 'MainModule' element is empty"); +- if (!VBoxExtPackIsValidModuleString(pszMainModule)) +- return &(new RTCString("Invalid main module string: "))->append(pszMainModule); +- +- /* +- * The VRDE module, optional. +- * Accept both none and empty as tokens of no VRDE module. +- */ +- const char *pszVrdeModule = NULL; +- const xml::ElementNode *pVrdeModuleElm = pVBoxExtPackElm->findChildElement("VRDEModule"); +- if (pVrdeModuleElm) +- { +- pszVrdeModule = pVrdeModuleElm->getValue(); +- if (!pszVrdeModule || *pszVrdeModule == '\0') +- pszVrdeModule = NULL; +- else if (!VBoxExtPackIsValidModuleString(pszVrdeModule)) +- return &(new RTCString("Invalid VRDE module string: "))->append(pszVrdeModule); +- } +- +- /* +- * Whether to show the license, optional. (presense is enough here) +- */ +- const xml::ElementNode *pShowLicenseElm = pVBoxExtPackElm->findChildElement("ShowLicense"); +- bool fShowLicense = pShowLicenseElm != NULL; +- +- /* +- * Parse plug-in descriptions (last because of the manual memory management). +- */ +- uint32_t cPlugIns = 0; +- PVBOXEXTPACKPLUGINDESC paPlugIns = NULL; +- RTCString *pstrRet = vboxExtPackLoadPlugInDescs(pVBoxExtPackElm, &cPlugIns, &paPlugIns); +- if (pstrRet) +- { +- RTMemFree(paPlugIns); +- return pstrRet; +- } +- +- /* +- * Everything seems fine, fill in the return values and return successfully. +- */ +- a_pExtPackDesc->strName = pszName; +- a_pExtPackDesc->strDescription = pszDesc; +- a_pExtPackDesc->strVersion = pszVersion; +- a_pExtPackDesc->strEdition = pszEdition; +- a_pExtPackDesc->uRevision = uRevision; +- a_pExtPackDesc->strMainModule = pszMainModule; +- a_pExtPackDesc->strVrdeModule = pszVrdeModule; +- a_pExtPackDesc->cPlugIns = cPlugIns; +- a_pExtPackDesc->paPlugIns = paPlugIns; +- a_pExtPackDesc->fShowLicense = fShowLicense; +- +- return NULL; +-} +- +-/** +- * Reads the extension pack descriptor. +- * +- * @returns NULL on success, pointer to an error message on failure (caller +- * deletes it). +- * @param a_pszDir The directory containing the description file. +- * @param a_pExtPackDesc Where to store the extension pack descriptor. +- * @param a_pObjInfo Where to store the object info for the file (unix +- * attribs). Optional. +- */ +-RTCString *VBoxExtPackLoadDesc(const char *a_pszDir, PVBOXEXTPACKDESC a_pExtPackDesc, PRTFSOBJINFO a_pObjInfo) +-{ +- vboxExtPackClearDesc(a_pExtPackDesc); +- +- /* +- * Validate, open and parse the XML file. +- */ +- char szFilePath[RTPATH_MAX]; +- int vrc = RTPathJoin(szFilePath, sizeof(szFilePath), a_pszDir, VBOX_EXTPACK_DESCRIPTION_NAME); +- if (RT_FAILURE(vrc)) +- return new RTCString("RTPathJoin failed with %Rrc", vrc); +- +- RTFSOBJINFO ObjInfo; +- vrc = RTPathQueryInfoEx(szFilePath, &ObjInfo, RTFSOBJATTRADD_UNIX, RTPATH_F_ON_LINK); +- if (RT_FAILURE(vrc)) +- return &(new RTCString())->printf("RTPathQueryInfoEx failed with %Rrc", vrc); +- if (a_pObjInfo) +- *a_pObjInfo = ObjInfo; +- if (!RTFS_IS_FILE(ObjInfo.Attr.fMode)) +- { +- if (RTFS_IS_SYMLINK(ObjInfo.Attr.fMode)) +- return new RTCString("The XML file is symlinked, that is not allowed"); +- return &(new RTCString)->printf("The XML file is not a file (fMode=%#x)", ObjInfo.Attr.fMode); +- } +- +- xml::Document Doc; +- { +- xml::XmlFileParser Parser; +- try +- { +- Parser.read(szFilePath, Doc); +- } +- catch (xml::XmlError Err) +- { +- return new RTCString(Err.what()); +- } +- } +- +- /* +- * Hand the xml doc over to the common code. +- */ +- return vboxExtPackLoadDescFromDoc(&Doc, a_pExtPackDesc); +-} +- +-/** +- * Reads the extension pack descriptor. +- * +- * @returns NULL on success, pointer to an error message on failure (caller +- * deletes it). +- * @param a_pszDir The directory containing the description file. +- * @param a_pExtPackDesc Where to store the extension pack descriptor. +- * @param a_pObjInfo Where to store the object info for the file (unix +- * attribs). Optional. +- */ +-RTCString *VBoxExtPackLoadDescFromVfsFile(RTVFSFILE hVfsFile, PVBOXEXTPACKDESC a_pExtPackDesc, PRTFSOBJINFO a_pObjInfo) +-{ +- vboxExtPackClearDesc(a_pExtPackDesc); +- +- /* +- * Query the object info. +- */ +- RTFSOBJINFO ObjInfo; +- int rc = RTVfsFileQueryInfo(hVfsFile, &ObjInfo, RTFSOBJATTRADD_UNIX); +- if (RT_FAILURE(rc)) +- return &(new RTCString)->printf("RTVfsFileQueryInfo failed: %Rrc", rc); +- if (a_pObjInfo) +- *a_pObjInfo = ObjInfo; +- +- /* +- * The simple approach, read the whole thing into memory and pass this to +- * the XML parser. +- */ +- +- /* Check the file size. */ +- if (ObjInfo.cbObject > _1M || ObjInfo.cbObject < 0) +- return &(new RTCString)->printf("The XML file is too large (%'RU64 bytes)", ObjInfo.cbObject); +- size_t const cbFile = (size_t)ObjInfo.cbObject; +- +- /* Rewind to the start of the file. */ +- rc = RTVfsFileSeek(hVfsFile, 0, RTFILE_SEEK_BEGIN, NULL); +- if (RT_FAILURE(rc)) +- return &(new RTCString)->printf("RTVfsFileSeek(,0,BEGIN) failed: %Rrc", rc); +- +- /* Allocate memory and read the file content into it. */ +- void *pvFile = RTMemTmpAlloc(cbFile); +- if (!pvFile) +- return &(new RTCString)->printf("RTMemTmpAlloc(%zu) failed", cbFile); +- +- RTCString *pstrErr = NULL; +- rc = RTVfsFileRead(hVfsFile, pvFile, cbFile, NULL); +- if (RT_FAILURE(rc)) +- pstrErr = &(new RTCString)->printf("RTVfsFileRead failed: %Rrc", rc); +- +- /* +- * Parse the file. +- */ +- xml::Document Doc; +- if (RT_SUCCESS(rc)) +- { +- xml::XmlMemParser Parser; +- RTCString strFileName = VBOX_EXTPACK_DESCRIPTION_NAME; +- try +- { +- Parser.read(pvFile, cbFile, strFileName, Doc); +- } +- catch (xml::XmlError Err) +- { +- pstrErr = new RTCString(Err.what()); +- rc = VERR_PARSE_ERROR; +- } +- } +- RTMemTmpFree(pvFile); +- +- /* +- * Hand the xml doc over to the common code. +- */ +- if (RT_SUCCESS(rc)) +- pstrErr = vboxExtPackLoadDescFromDoc(&Doc, a_pExtPackDesc); +- +- return pstrErr; +-} +- +-/** +- * Frees all resources associated with a extension pack descriptor. +- * +- * @param a_pExtPackDesc The extension pack descriptor which members +- * should be freed. +- */ +-void VBoxExtPackFreeDesc(PVBOXEXTPACKDESC a_pExtPackDesc) +-{ +- if (!a_pExtPackDesc) +- return; +- +- a_pExtPackDesc->strName.setNull(); +- a_pExtPackDesc->strDescription.setNull(); +- a_pExtPackDesc->strVersion.setNull(); +- a_pExtPackDesc->strEdition.setNull(); +- a_pExtPackDesc->uRevision = 0; +- a_pExtPackDesc->strMainModule.setNull(); +- a_pExtPackDesc->strVrdeModule.setNull(); +- a_pExtPackDesc->cPlugIns = 0; +- RTMemFree(a_pExtPackDesc->paPlugIns); +- a_pExtPackDesc->paPlugIns = NULL; +- a_pExtPackDesc->fShowLicense = false; +-} +- +-/** +- * Extract the extension pack name from the tarball path. +- * +- * @returns String containing the name on success, the caller must delete it. +- * NULL if no valid name was found or if we ran out of memory. +- * @param pszTarball The path to the tarball. +- */ +-RTCString *VBoxExtPackExtractNameFromTarballPath(const char *pszTarball) +-{ +- /* +- * Skip ahead to the filename part and count the number of characters +- * that matches the criteria for a mangled extension pack name. +- */ +- const char *pszSrc = RTPathFilename(pszTarball); +- if (!pszSrc) +- return NULL; +- +- size_t off = 0; +- while (RT_C_IS_ALNUM(pszSrc[off]) || pszSrc[off] == '_') +- off++; +- +- /* +- * Check min and max name limits. +- */ +- if ( off > VBOX_EXTPACK_NAME_MAX_LEN +- || off < VBOX_EXTPACK_NAME_MIN_LEN) +- return NULL; +- +- /* +- * Return the unmangled name. +- */ +- return VBoxExtPackUnmangleName(pszSrc, off); +-} +- +-/** +- * Validates the extension pack name. +- * +- * @returns true if valid, false if not. +- * @param pszName The name to validate. +- * @sa VBoxExtPackExtractNameFromTarballPath +- */ +-bool VBoxExtPackIsValidName(const char *pszName) +-{ +- if (!pszName) +- return false; +- +- /* +- * Check the characters making up the name, only english alphabet +- * characters, decimal digits and spaces are allowed. +- */ +- size_t off = 0; +- while (pszName[off]) +- { +- if (!RT_C_IS_ALNUM(pszName[off]) && pszName[off] != ' ') +- return false; +- off++; +- } +- +- /* +- * Check min and max name limits. +- */ +- if ( off > VBOX_EXTPACK_NAME_MAX_LEN +- || off < VBOX_EXTPACK_NAME_MIN_LEN) +- return false; +- +- return true; +-} +- +-/** +- * Checks if an alledged manged extension pack name. +- * +- * @returns true if valid, false if not. +- * @param pszMangledName The mangled name to validate. +- * @param cchMax The max number of chars to test. +- * @sa VBoxExtPackMangleName +- */ +-bool VBoxExtPackIsValidMangledName(const char *pszMangledName, size_t cchMax /*= RTSTR_MAX*/) +-{ +- if (!pszMangledName) +- return false; +- +- /* +- * Check the characters making up the name, only english alphabet +- * characters, decimal digits and underscores (=space) are allowed. +- */ +- size_t off = 0; +- while (off < cchMax && pszMangledName[off]) +- { +- if (!RT_C_IS_ALNUM(pszMangledName[off]) && pszMangledName[off] != '_') +- return false; +- off++; +- } +- +- /* +- * Check min and max name limits. +- */ +- if ( off > VBOX_EXTPACK_NAME_MAX_LEN +- || off < VBOX_EXTPACK_NAME_MIN_LEN) +- return false; +- +- return true; +-} +- +-/** +- * Mangle an extension pack name so it can be used by a directory or file name. +- * +- * @returns String containing the mangled name on success, the caller must +- * delete it. NULL on failure. +- * @param pszName The unmangled name. +- * @sa VBoxExtPackUnmangleName, VBoxExtPackIsValidMangledName +- */ +-RTCString *VBoxExtPackMangleName(const char *pszName) +-{ +- AssertReturn(VBoxExtPackIsValidName(pszName), NULL); +- +- char szTmp[VBOX_EXTPACK_NAME_MAX_LEN + 1]; +- size_t off = 0; +- char ch; +- while ((ch = pszName[off]) != '\0') +- { +- if (ch == ' ') +- ch = '_'; +- szTmp[off++] = ch; +- } +- szTmp[off] = '\0'; +- Assert(VBoxExtPackIsValidMangledName(szTmp)); +- +- return new RTCString(szTmp, off); +-} +- +-/** +- * Unmangle an extension pack name (reverses VBoxExtPackMangleName). +- * +- * @returns String containing the mangled name on success, the caller must +- * delete it. NULL on failure. +- * @param pszMangledName The mangled name. +- * @param cchMax The max name length. RTSTR_MAX is fine. +- * @sa VBoxExtPackMangleName, VBoxExtPackIsValidMangledName +- */ +-RTCString *VBoxExtPackUnmangleName(const char *pszMangledName, size_t cchMax) +-{ +- AssertReturn(VBoxExtPackIsValidMangledName(pszMangledName, cchMax), NULL); +- +- char szTmp[VBOX_EXTPACK_NAME_MAX_LEN + 1]; +- size_t off = 0; +- char ch; +- while ( off < cchMax +- && (ch = pszMangledName[off]) != '\0') +- { +- if (ch == '_') +- ch = ' '; +- else +- AssertReturn(RT_C_IS_ALNUM(ch) || ch == ' ', NULL); +- szTmp[off++] = ch; +- } +- szTmp[off] = '\0'; +- AssertReturn(VBoxExtPackIsValidName(szTmp), NULL); +- +- return new RTCString(szTmp, off); +-} +- +-/** +- * Constructs the extension pack directory path. +- * +- * A combination of RTPathJoin and VBoxExtPackMangleName. +- * +- * @returns IPRT status code like RTPathJoin. +- * @param pszExtPackDir Where to return the directory path. +- * @param cbExtPackDir The size of the return buffer. +- * @param pszParentDir The parent directory (".../Extensions"). +- * @param pszName The extension pack name, unmangled. +- */ +-int VBoxExtPackCalcDir(char *pszExtPackDir, size_t cbExtPackDir, const char *pszParentDir, const char *pszName) +-{ +- AssertReturn(VBoxExtPackIsValidName(pszName), VERR_INTERNAL_ERROR_5); +- +- RTCString *pstrMangledName = VBoxExtPackMangleName(pszName); +- if (!pstrMangledName) +- return VERR_INTERNAL_ERROR_4; +- +- int vrc = RTPathJoin(pszExtPackDir, cbExtPackDir, pszParentDir, pstrMangledName->c_str()); +- delete pstrMangledName; +- +- return vrc; +-} +- +- +-/** +- * Validates the extension pack version string. +- * +- * @returns true if valid, false if not. +- * @param pszVersion The version string to validate. +- */ +-bool VBoxExtPackIsValidVersionString(const char *pszVersion) +-{ +- if (!pszVersion || *pszVersion == '\0') +- return false; +- +- /* 1.x.y.z... */ +- for (;;) +- { +- if (!RT_C_IS_DIGIT(*pszVersion)) +- return false; +- do +- pszVersion++; +- while (RT_C_IS_DIGIT(*pszVersion)); +- if (*pszVersion != '.') +- break; +- pszVersion++; +- } +- +- /* upper case string + numbers indicating the build type */ +- if (*pszVersion == '-' || *pszVersion == '_') +- { +- /** @todo Should probably restrict this to known build types (alpha, +- * beta, rc, ++). */ +- do +- pszVersion++; +- while ( RT_C_IS_DIGIT(*pszVersion) +- || RT_C_IS_UPPER(*pszVersion) +- || *pszVersion == '-' +- || *pszVersion == '_'); +- } +- +- return *pszVersion == '\0'; +-} +- +-/** +- * Validates the extension pack edition string. +- * +- * @returns true if valid, false if not. +- * @param pszEdition The edition string to validate. +- */ +-bool VBoxExtPackIsValidEditionString(const char *pszEdition) +-{ +- if (*pszEdition) +- { +- if (!RT_C_IS_UPPER(*pszEdition)) +- return false; +- +- do +- pszEdition++; +- while ( RT_C_IS_UPPER(*pszEdition) +- || RT_C_IS_DIGIT(*pszEdition) +- || *pszEdition == '-' +- || *pszEdition == '_'); +- } +- return *pszEdition == '\0'; +-} +- +-/** +- * Validates an extension pack module string. +- * +- * @returns true if valid, false if not. +- * @param pszModule The module string to validate. +- */ +-bool VBoxExtPackIsValidModuleString(const char *pszModule) +-{ +- if (!pszModule || *pszModule == '\0') +- return false; +- +- /* Restricted charset, no extensions (dots). */ +- while ( RT_C_IS_ALNUM(*pszModule) +- || *pszModule == '-' +- || *pszModule == '_') +- pszModule++; +- +- return *pszModule == '\0'; +-} +- +-/** +- * RTStrPrintfv wrapper. +- * +- * @returns @a rc +- * @param rc The status code to return. +- * @param pszError The error buffer. +- * @param cbError The size of the buffer. +- * @param pszFormat The error message format string. +- * @param ... Format arguments. +- */ +-static int vboxExtPackReturnError(int rc, char *pszError, size_t cbError, const char *pszFormat, ...) +-{ +- va_list va; +- va_start(va, pszFormat); +- RTStrPrintfV(pszError, cbError, pszFormat, va); +- va_end(va); +- return rc; +-} +- +-/** +- * RTStrPrintfv wrapper. +- * +- * @param pszError The error buffer. +- * @param cbError The size of the buffer. +- * @param pszFormat The error message format string. +- * @param ... Format arguments. +- */ +-static void vboxExtPackSetError(char *pszError, size_t cbError, const char *pszFormat, ...) +-{ +- va_list va; +- va_start(va, pszFormat); +- RTStrPrintfV(pszError, cbError, pszFormat, va); +- va_end(va); +-} +- +-/** +- * Verifies the manifest and its signature. +- * +- * @returns VBox status code, failures with message. +- * @param hManifestFile The xml from the extension pack. +- * @param pszExtPackName The expected extension pack name. This can be +- * NULL, in which we don't have any expectations. +- * @param pszError Where to store an error message on failure. +- * @param cbError The size of the buffer @a pszError points to. +- */ +-static int vboxExtPackVerifyXml(RTVFSFILE hXmlFile, const char *pszExtPackName, char *pszError, size_t cbError) +-{ +- /* +- * Load the XML. +- */ +- VBOXEXTPACKDESC ExtPackDesc; +- RTCString *pstrErr = VBoxExtPackLoadDescFromVfsFile(hXmlFile, &ExtPackDesc, NULL); +- if (pstrErr) +- { +- RTStrCopy(pszError, cbError, pstrErr->c_str()); +- delete pstrErr; +- return VERR_PARSE_ERROR; +- } +- +- /* +- * Check the name. +- */ +- /** @todo drop this restriction after the old install interface is +- * dropped. */ +- int rc = VINF_SUCCESS; +- if ( pszExtPackName +- && !ExtPackDesc.strName.equalsIgnoreCase(pszExtPackName)) +- rc = vboxExtPackReturnError(VERR_NOT_EQUAL, pszError, cbError, +- "The name of the downloaded file and the name stored inside the extension pack does not match" +- " (xml='%s' file='%s')", ExtPackDesc.strName.c_str(), pszExtPackName); +- return rc; +-} +- +-/** +- * Verifies the manifest and its signature. +- * +- * @returns VBox status code, failures with message. +- * @param hOurManifest The manifest we compiled. +- * @param hManifestFile The manifest file in the extension pack. +- * @param hSignatureFile The manifest signature file. +- * @param pszError Where to store an error message on failure. +- * @param cbError The size of the buffer @a pszError points to. +- */ +-static int vboxExtPackVerifyManifestAndSignature(RTMANIFEST hOurManifest, RTVFSFILE hManifestFile, RTVFSFILE hSignatureFile, +- char *pszError, size_t cbError) +-{ +- /* +- * Read the manifest from the extension pack. +- */ +- int rc = RTVfsFileSeek(hManifestFile, 0, RTFILE_SEEK_BEGIN, NULL); +- if (RT_FAILURE(rc)) +- return vboxExtPackReturnError(rc, pszError, cbError, "RTVfsFileSeek failed: %Rrc", rc); +- +- RTMANIFEST hTheirManifest; +- rc = RTManifestCreate(0 /*fFlags*/, &hTheirManifest); +- if (RT_FAILURE(rc)) +- return vboxExtPackReturnError(rc, pszError, cbError, "RTManifestCreate failed: %Rrc", rc); +- +- RTVFSIOSTREAM hVfsIos = RTVfsFileToIoStream(hManifestFile); +- rc = RTManifestReadStandard(hTheirManifest, hVfsIos); +- RTVfsIoStrmRelease(hVfsIos); +- if (RT_SUCCESS(rc)) +- { +- /* +- * Compare the manifests. +- */ +- static const char *s_apszIgnoreEntries[] = +- { +- VBOX_EXTPACK_MANIFEST_NAME, +- VBOX_EXTPACK_SIGNATURE_NAME, +- "./" VBOX_EXTPACK_MANIFEST_NAME, +- "./" VBOX_EXTPACK_SIGNATURE_NAME, +- NULL +- }; +- char szError[RTPATH_MAX]; +- rc = RTManifestEqualsEx(hOurManifest, hTheirManifest, &s_apszIgnoreEntries[0], NULL, +- RTMANIFEST_EQUALS_IGN_MISSING_ATTRS /*fFlags*/, +- szError, sizeof(szError)); +- if (RT_SUCCESS(rc)) +- { +- /* +- * Validate the manifest file signature. +- */ +- /** @todo implement signature stuff */ +- NOREF(hSignatureFile); +- +- } +- else if (rc == VERR_NOT_EQUAL && szError[0]) +- vboxExtPackSetError(pszError, cbError, "Manifest mismatch: %s", szError); +- else +- vboxExtPackSetError(pszError, cbError, "RTManifestEqualsEx failed: %Rrc", rc); +-#if 0 +- RTVFSIOSTREAM hVfsIosStdOut = NIL_RTVFSIOSTREAM; +- RTVfsIoStrmFromStdHandle(RTHANDLESTD_OUTPUT, RTFILE_O_WRITE, true, &hVfsIosStdOut); +- RTVfsIoStrmWrite(hVfsIosStdOut, "Our:\n", sizeof("Our:\n") - 1, true, NULL); +- RTManifestWriteStandard(hOurManifest, hVfsIosStdOut); +- RTVfsIoStrmWrite(hVfsIosStdOut, "Their:\n", sizeof("Their:\n") - 1, true, NULL); +- RTManifestWriteStandard(hTheirManifest, hVfsIosStdOut); +-#endif +- } +- else +- vboxExtPackSetError(pszError, cbError, "Error parsing '%s': %Rrc", VBOX_EXTPACK_MANIFEST_NAME, rc); +- +- RTManifestRelease(hTheirManifest); +- return rc; +-} +- +- +-/** +- * Verifies the file digest (if specified) and returns the SHA-256 of the file. +- * +- * @returns +- * @param hFileManifest Manifest containing a SHA-256 digest of the file +- * that was calculated as the file was processed. +- * @param pszFileDigest SHA-256 digest of the file. +- * @param pStrDigest Where to return the SHA-256 digest. Optional. +- * @param pszError Where to write an error message on failure. +- * @param cbError The size of the @a pszError buffer. +- */ +-static int vboxExtPackVerifyFileDigest(RTMANIFEST hFileManifest, const char *pszFileDigest, +- RTCString *pStrDigest, char *pszError, size_t cbError) +-{ +- /* +- * Extract the SHA-256 entry for the extpack file. +- */ +- char szCalculatedDigest[RTSHA256_DIGEST_LEN + 1]; +- int rc = RTManifestEntryQueryAttr(hFileManifest, "extpack", NULL /*no name*/, RTMANIFEST_ATTR_SHA256, +- szCalculatedDigest, sizeof(szCalculatedDigest), NULL); +- if (RT_SUCCESS(rc)) +- { +- /* +- * Convert the two strings to binary form before comparing. +- * We convert the calculated hash even if we don't have anything to +- * compare with, just to validate it. +- */ +- uint8_t abCalculatedHash[RTSHA256_HASH_SIZE]; +- rc = RTSha256FromString(szCalculatedDigest, abCalculatedHash); +- if (RT_SUCCESS(rc)) +- { +- if ( pszFileDigest +- && *pszFileDigest != '\0') +- { +- uint8_t abFileHash[RTSHA256_HASH_SIZE]; +- rc = RTSha256FromString(pszFileDigest, abFileHash); +- if (RT_SUCCESS(rc)) +- { +- if (memcmp(abFileHash, abCalculatedHash, sizeof(abFileHash))) +- { +- vboxExtPackSetError(pszError, cbError, "The extension pack file has changed (SHA-256 mismatch)"); +- rc = VERR_NOT_EQUAL; +- } +- } +- else +- vboxExtPackSetError(pszError, cbError, "Bad SHA-256 '%s': %Rrc", szCalculatedDigest, rc); +- } +- +- /* +- * Set the output hash on success. +- */ +- if (pStrDigest && RT_SUCCESS(rc)) +- { +- try +- { +- *pStrDigest = szCalculatedDigest; +- } +- catch (std::bad_alloc) +- { +- rc = VERR_NO_MEMORY; +- } +- } +- } +- else +- vboxExtPackSetError(pszError, cbError, "Bad SHA-256 '%s': %Rrc", szCalculatedDigest, rc); +- } +- else +- vboxExtPackSetError(pszError, cbError, "RTManifestEntryGetAttr: %Rrc", rc); +- return rc; +-} +- +- +- +-/** +- * Validates a standard file. +- * +- * Generally all files are +- * +- * @returns VBox status code, failure message in @a pszError. +- * @param pszAdjName The adjusted member name. +- * @param enmType The VFS object type. +- * @param phVfsObj The pointer to the VFS object handle variable. +- * This is both input and output. +- * @param phVfsFile Where to store the handle to the memorized +- * file. This is NULL for license files. +- * @param pszError Where to write an error message on failure. +- * @param cbError The size of the @a pszError buffer. +- */ +-static int VBoxExtPackValidateStandardFile(const char *pszAdjName, RTVFSOBJTYPE enmType, +- PRTVFSOBJ phVfsObj, PRTVFSFILE phVfsFile, char *pszError, size_t cbError) +-{ +- int rc; +- +- /* +- * Make sure it's a file and that it isn't too large. +- */ +- if (phVfsFile && *phVfsFile != NIL_RTVFSFILE) +- rc = vboxExtPackReturnError(VERR_DUPLICATE, pszError, cbError, +- "There can only be one '%s'", pszAdjName); +- else if (enmType != RTVFSOBJTYPE_IO_STREAM && enmType != RTVFSOBJTYPE_FILE) +- rc = vboxExtPackReturnError(VERR_NOT_A_FILE, pszError, cbError, +- "Standard member '%s' is not a file", pszAdjName); +- else +- { +- RTFSOBJINFO ObjInfo; +- rc = RTVfsObjQueryInfo(*phVfsObj, &ObjInfo, RTFSOBJATTRADD_NOTHING); +- if (RT_SUCCESS(rc)) +- { +- if (!RTFS_IS_FILE(ObjInfo.Attr.fMode)) +- rc = vboxExtPackReturnError(VERR_NOT_A_FILE, pszError, cbError, +- "Standard member '%s' is not a file", pszAdjName); +- else if (ObjInfo.cbObject >= _1M) +- rc = vboxExtPackReturnError(VERR_OUT_OF_RANGE, pszError, cbError, +- "Standard member '%s' is too large: %'RU64 bytes (max 1 MB)", +- pszAdjName, (uint64_t)ObjInfo.cbObject); +- else +- { +- /* +- * Make an in memory copy of the stream and check that the file +- * is UTF-8 clean. +- */ +- RTVFSIOSTREAM hVfsIos = RTVfsObjToIoStream(*phVfsObj); +- RTVFSFILE hVfsFile; +- rc = RTVfsMemorizeIoStreamAsFile(hVfsIos, RTFILE_O_READ, &hVfsFile); +- if (RT_SUCCESS(rc)) +- { +- rc = RTVfsIoStrmValidateUtf8Encoding(hVfsIos, +- RTVFS_VALIDATE_UTF8_BY_RTC_3629 | RTVFS_VALIDATE_UTF8_NO_NULL, +- NULL); +- if (RT_SUCCESS(rc)) +- { +- /* +- * Replace *phVfsObj with the memorized file. +- */ +- rc = RTVfsFileSeek(hVfsFile, 0, RTFILE_SEEK_BEGIN, NULL); +- if (RT_SUCCESS(rc)) +- { +- RTVfsObjRelease(*phVfsObj); +- *phVfsObj = RTVfsObjFromFile(hVfsFile); +- } +- else +- vboxExtPackSetError(pszError, cbError, "RTVfsFileSeek failed on '%s': %Rrc", pszAdjName, rc); +- } +- +- if (phVfsFile && RT_SUCCESS(rc)) +- *phVfsFile = hVfsFile; +- else +- RTVfsFileRelease(hVfsFile); +- } +- else +- vboxExtPackSetError(pszError, cbError, "RTVfsMemorizeIoStreamAsFile failed on '%s': %Rrc", pszAdjName, rc); +- RTVfsIoStrmRelease(hVfsIos); +- } +- } +- else +- vboxExtPackSetError(pszError, cbError, "RTVfsObjQueryInfo failed on '%s': %Rrc", pszAdjName, rc); +- } +- return rc; +-} +- +- +-/** +- * Validates a name in an extension pack. +- * +- * We restrict the charset to try make sure the extension pack can be unpacked +- * on all file systems. +- * +- * @returns VBox status code, failures with message. +- * @param pszName The name to validate. +- * @param pszError Where to store an error message on failure. +- * @param cbError The size of the buffer @a pszError points to. +- */ +-static int vboxExtPackValidateMemberName(const char *pszName, char *pszError, size_t cbError) +-{ +- if (RTPathStartsWithRoot(pszName)) +- return vboxExtPackReturnError(VERR_PATH_IS_NOT_RELATIVE, pszError, cbError, "'%s': starts with root spec", pszName); +- +- const char *pszErr = NULL; +- const char *psz = pszName; +- int ch; +- while ((ch = *psz) != '\0') +- { +- /* Character set restrictions. */ +- if (ch < 0 || ch >= 128) +- { +- pszErr = "Only 7-bit ASCII allowed"; +- break; +- } +- if (ch <= 31 || ch == 127) +- { +- pszErr = "No control characters are not allowed"; +- break; +- } +- if (ch == '\\') +- { +- pszErr = "Only backward slashes are not allowed"; +- break; +- } +- if (strchr("'\":;*?|[]<>(){}", ch)) +- { +- pszErr = "The characters ', \", :, ;, *, ?, |, [, ], <, >, (, ), { and } are not allowed"; +- break; +- } +- +- /* Take the simple way out and ban all ".." sequences. */ +- if ( ch == '.' +- && psz[1] == '.') +- { +- pszErr = "Double dot sequence are not allowed"; +- break; +- } +- +- /* Keep the tree shallow or the hardening checks will fail. */ +- if (psz - pszName > VBOX_EXTPACK_MAX_MEMBER_NAME_LENGTH) +- { +- pszErr = "Too long"; +- break; +- } +- +- /* advance */ +- psz++; +- } +- +- if (pszErr) +- return vboxExtPackReturnError(VERR_INVALID_NAME, pszError, cbError, +- "Bad member name '%s' (pos %zu): %s", pszName, (size_t)(psz - pszName), pszErr); +- return RTEXITCODE_SUCCESS; +-} +- +- +-/** +- * Validates a file in an extension pack. +- * +- * @returns VBox status code, failures with message. +- * @param pszName The name of the file. +- * @param hVfsObj The VFS object. +- * @param pszError Where to store an error message on failure. +- * @param cbError The size of the buffer @a pszError points to. +- */ +-static int vboxExtPackValidateMemberFile(const char *pszName, RTVFSOBJ hVfsObj, char *pszError, size_t cbError) +-{ +- int rc = vboxExtPackValidateMemberName(pszName, pszError, cbError); +- if (RT_SUCCESS(rc)) +- { +- RTFSOBJINFO ObjInfo; +- rc = RTVfsObjQueryInfo(hVfsObj, &ObjInfo, RTFSOBJATTRADD_NOTHING); +- if (RT_SUCCESS(rc)) +- { +- if (ObjInfo.cbObject >= 9*_1G64) +- rc = vboxExtPackReturnError(VERR_OUT_OF_RANGE, pszError, cbError, +- "'%s': too large (%'RU64 bytes)", +- pszName, (uint64_t)ObjInfo.cbObject); +- if (!RTFS_IS_FILE(ObjInfo.Attr.fMode)) +- rc = vboxExtPackReturnError(VERR_NOT_A_FILE, pszError, cbError, +- "The alleged file '%s' has a mode mask stating otherwise (%RTfmode)", +- pszName, ObjInfo.Attr.fMode); +- } +- else +- vboxExtPackSetError(pszError, cbError, "RTVfsObjQueryInfo failed on '%s': %Rrc", pszName, rc); +- } +- return rc; +-} +- +- +-/** +- * Validates a directory in an extension pack. +- * +- * @returns VBox status code, failures with message. +- * @param pszName The name of the directory. +- * @param hVfsObj The VFS object. +- * @param pszError Where to store an error message on failure. +- * @param cbError The size of the buffer @a pszError points to. +- */ +-static int vboxExtPackValidateMemberDir(const char *pszName, RTVFSOBJ hVfsObj, char *pszError, size_t cbError) +-{ +- int rc = vboxExtPackValidateMemberName(pszName, pszError, cbError); +- if (RT_SUCCESS(rc)) +- { +- RTFSOBJINFO ObjInfo; +- rc = RTVfsObjQueryInfo(hVfsObj, &ObjInfo, RTFSOBJATTRADD_NOTHING); +- if (RT_SUCCESS(rc)) +- { +- if (!RTFS_IS_DIRECTORY(ObjInfo.Attr.fMode)) +- rc = vboxExtPackReturnError(VERR_NOT_A_DIRECTORY, pszError, cbError, +- "The alleged directory '%s' has a mode mask saying differently (%RTfmode)", +- pszName, ObjInfo.Attr.fMode); +- } +- else +- vboxExtPackSetError(pszError, cbError, "RTVfsObjQueryInfo failed on '%s': %Rrc", pszName, rc); +- } +- return rc; +-} +- +-/** +- * Validates a member of an extension pack. +- * +- * @returns VBox status code, failures with message. +- * @param pszName The name of the directory. +- * @param enmType The object type. +- * @param hVfsObj The VFS object. +- * @param pszError Where to store an error message on failure. +- * @param cbError The size of the buffer @a pszError points to. +- */ +-int VBoxExtPackValidateMember(const char *pszName, RTVFSOBJTYPE enmType, RTVFSOBJ hVfsObj, char *pszError, size_t cbError) +-{ +- Assert(cbError > 0); +- *pszError = '\0'; +- +- int rc; +- if ( enmType == RTVFSOBJTYPE_FILE +- || enmType == RTVFSOBJTYPE_IO_STREAM) +- rc = vboxExtPackValidateMemberFile(pszName, hVfsObj, pszError, cbError); +- else if ( enmType == RTVFSOBJTYPE_DIR +- || enmType == RTVFSOBJTYPE_BASE) +- rc = vboxExtPackValidateMemberDir(pszName, hVfsObj, pszError, cbError); +- else +- rc = vboxExtPackReturnError(VERR_UNEXPECTED_FS_OBJ_TYPE, pszError, cbError, +- "'%s' is not a file or directory (enmType=%d)", pszName, enmType); +- return rc; +-} +- +- +-/** +- * Rewinds the tarball file handle and creates a gunzip | tar chain that +- * results in a filesystem stream. +- * +- * @returns VBox status code, failures with message. +- * @param hTarballFile The handle to the tarball file. +- * @param pszError Where to store an error message on failure. +- * @param cbError The size of the buffer @a pszError points to. +- * @param phTarFss Where to return the filesystem stream handle. +- * @param phFileManifest Where to return a manifest where the tarball is +- * gettting hashed. The entry will be called +- * "extpack" and be ready when the file system +- * stream is at an end. Optional. +- */ +-int VBoxExtPackOpenTarFss(RTFILE hTarballFile, char *pszError, size_t cbError, PRTVFSFSSTREAM phTarFss, PRTMANIFEST phFileManifest) +-{ +- Assert(cbError > 0); +- *pszError = '\0'; +- *phTarFss = NIL_RTVFSFSSTREAM; +- +- /* +- * Rewind the file and set up a VFS chain for it. +- */ +- int rc = RTFileSeek(hTarballFile, 0, RTFILE_SEEK_BEGIN, NULL); +- if (RT_FAILURE(rc)) +- return vboxExtPackReturnError(rc, pszError, cbError, "Failed seeking to the start of the tarball: %Rrc", rc); +- +- RTVFSIOSTREAM hTarballIos; +- rc = RTVfsIoStrmFromRTFile(hTarballFile, RTFILE_O_READ | RTFILE_O_DENY_WRITE | RTFILE_O_OPEN, true /*fLeaveOpen*/, +- &hTarballIos); +- if (RT_FAILURE(rc)) +- return vboxExtPackReturnError(rc, pszError, cbError, "RTVfsIoStrmFromRTFile failed: %Rrc", rc); +- +- RTMANIFEST hFileManifest = NIL_RTMANIFEST; +- rc = RTManifestCreate(0 /*fFlags*/, &hFileManifest); +- if (RT_SUCCESS(rc)) +- { +- RTVFSIOSTREAM hPtIos; +- rc = RTManifestEntryAddPassthruIoStream(hFileManifest, hTarballIos, "extpack", RTMANIFEST_ATTR_SHA256, true /*read*/, &hPtIos); +- if (RT_SUCCESS(rc)) +- { +- RTVFSIOSTREAM hGunzipIos; +- rc = RTZipGzipDecompressIoStream(hPtIos, 0 /*fFlags*/, &hGunzipIos); +- if (RT_SUCCESS(rc)) +- { +- RTVFSFSSTREAM hTarFss; +- rc = RTZipTarFsStreamFromIoStream(hGunzipIos, 0 /*fFlags*/, &hTarFss); +- if (RT_SUCCESS(rc)) +- { +- RTVfsIoStrmRelease(hPtIos); +- RTVfsIoStrmRelease(hGunzipIos); +- RTVfsIoStrmRelease(hTarballIos); +- *phTarFss = hTarFss; +- if (phFileManifest) +- *phFileManifest = hFileManifest; +- else +- RTManifestRelease(hFileManifest); +- return VINF_SUCCESS; +- } +- +- vboxExtPackSetError(pszError, cbError, "RTZipTarFsStreamFromIoStream failed: %Rrc", rc); +- RTVfsIoStrmRelease(hGunzipIos); +- } +- else +- vboxExtPackSetError(pszError, cbError, "RTZipGzipDecompressIoStream failed: %Rrc", rc); +- RTVfsIoStrmRelease(hPtIos); +- } +- else +- vboxExtPackSetError(pszError, cbError, "RTManifestEntryAddPassthruIoStream failed: %Rrc", rc); +- RTManifestRelease(hFileManifest); +- } +- else +- vboxExtPackSetError(pszError, cbError, "RTManifestCreate failed: %Rrc", rc); +- +- RTVfsIoStrmRelease(hTarballIos); +- return rc; +-} +- +- +-/** +- * Validates the extension pack tarball prior to unpacking. +- * +- * Operations performed: +- * - Mandatory files. +- * - Manifest check. +- * - Manifest seal check. +- * - XML check, match name. +- * +- * @returns VBox status code, failures with message. +- * @param hTarballFile The handle to open the @a pszTarball file. +- * @param pszExtPackName The name of the extension pack name. NULL if +- * the name is not fixed. +- * @param pszTarball The name of the tarball in case we have to +- * complain about something. +- * @param pszTarballDigest The SHA-256 digest of the tarball. Empty string +- * if no digest available. +- * @param pszError Where to store an error message on failure. +- * @param cbError The size of the buffer @a pszError points to. +- * @param phValidManifest Where to optionally return the handle to fully +- * validated the manifest for the extension pack. +- * This includes all files. +- * @param phXmlFile Where to optionally return the memorized XML +- * file. +- * @param pStrDigest Where to return the digest of the file. +- * Optional. +- */ +-int VBoxExtPackValidateTarball(RTFILE hTarballFile, const char *pszExtPackName, +- const char *pszTarball, const char *pszTarballDigest, +- char *pszError, size_t cbError, +- PRTMANIFEST phValidManifest, PRTVFSFILE phXmlFile, RTCString *pStrDigest) +-{ +- /* +- * Clear return values. +- */ +- if (phValidManifest) +- *phValidManifest = NIL_RTMANIFEST; +- if (phXmlFile) +- *phXmlFile = NIL_RTVFSFILE; +- Assert(cbError > 1); +- *pszError = '\0'; +- NOREF(pszTarball); +- +- /* +- * Open the tar.gz filesystem stream and set up an manifest in-memory file. +- */ +- RTMANIFEST hFileManifest; +- RTVFSFSSTREAM hTarFss; +- int rc = VBoxExtPackOpenTarFss(hTarballFile, pszError, cbError, &hTarFss, &hFileManifest); +- if (RT_FAILURE(rc)) +- return rc; +- +- RTMANIFEST hOurManifest; +- rc = RTManifestCreate(0 /*fFlags*/, &hOurManifest); +- if (RT_SUCCESS(rc)) +- { +- /* +- * Process the tarball (would be nice to move this to a function). +- */ +- RTVFSFILE hXmlFile = NIL_RTVFSFILE; +- RTVFSFILE hManifestFile = NIL_RTVFSFILE; +- RTVFSFILE hSignatureFile = NIL_RTVFSFILE; +- for (;;) +- { +- /* +- * Get the next stream object. +- */ +- char *pszName; +- RTVFSOBJ hVfsObj; +- RTVFSOBJTYPE enmType; +- rc = RTVfsFsStrmNext(hTarFss, &pszName, &enmType, &hVfsObj); +- if (RT_FAILURE(rc)) +- { +- if (rc != VERR_EOF) +- vboxExtPackSetError(pszError, cbError, "RTVfsFsStrmNext failed: %Rrc", rc); +- else +- rc = VINF_SUCCESS; +- break; +- } +- const char *pszAdjName = pszName[0] == '.' && pszName[1] == '/' ? &pszName[2] : pszName; +- +- /* +- * Check the type & name validity, performing special tests on +- * standard extension pack member files. +- * +- * N.B. We will always reach the end of the loop before breaking on +- * failure - cleanup reasons. +- */ +- rc = VBoxExtPackValidateMember(pszName, enmType, hVfsObj, pszError, cbError); +- if (RT_SUCCESS(rc)) +- { +- PRTVFSFILE phVfsFile = NULL; +- if (!strcmp(pszAdjName, VBOX_EXTPACK_DESCRIPTION_NAME)) +- phVfsFile = &hXmlFile; +- else if (!strcmp(pszAdjName, VBOX_EXTPACK_MANIFEST_NAME)) +- phVfsFile = &hManifestFile; +- else if (!strcmp(pszAdjName, VBOX_EXTPACK_SIGNATURE_NAME)) +- phVfsFile = &hSignatureFile; +- else if (!strncmp(pszAdjName, VBOX_EXTPACK_LICENSE_NAME_PREFIX, sizeof(VBOX_EXTPACK_LICENSE_NAME_PREFIX) - 1)) +- rc = VBoxExtPackValidateStandardFile(pszAdjName, enmType, &hVfsObj, NULL, pszError, cbError); +- if (phVfsFile) +- rc = VBoxExtPackValidateStandardFile(pszAdjName, enmType, &hVfsObj, phVfsFile, pszError, cbError); +- } +- +- /* +- * Add any I/O stream to the manifest +- */ +- if ( RT_SUCCESS(rc) +- && ( enmType == RTVFSOBJTYPE_FILE +- || enmType == RTVFSOBJTYPE_IO_STREAM)) +- { +- RTVFSIOSTREAM hVfsIos = RTVfsObjToIoStream(hVfsObj); +- rc = RTManifestEntryAddIoStream(hOurManifest, hVfsIos, pszAdjName, RTMANIFEST_ATTR_SIZE | RTMANIFEST_ATTR_SHA256); +- if (RT_FAILURE(rc)) +- vboxExtPackSetError(pszError, cbError, "RTManifestEntryAddIoStream failed on '%s': %Rrc", pszAdjName, rc); +- RTVfsIoStrmRelease(hVfsIos); +- } +- +- /* +- * Clean up and break out on failure. +- */ +- RTVfsObjRelease(hVfsObj); +- RTStrFree(pszName); +- if (RT_FAILURE(rc)) +- break; +- } +- +- /* +- * Check the integrity of the tarball file. +- */ +- if (RT_SUCCESS(rc)) +- { +- RTVfsFsStrmRelease(hTarFss); +- hTarFss = NIL_RTVFSFSSTREAM; +- rc = vboxExtPackVerifyFileDigest(hFileManifest, pszTarballDigest, pStrDigest, pszError, cbError); +- } +- +- /* +- * If we've successfully processed the tarball, verify that the +- * mandatory files are present. +- */ +- if (RT_SUCCESS(rc)) +- { +- if (hXmlFile == NIL_RTVFSFILE) +- rc = vboxExtPackReturnError(VERR_MISSING, pszError, cbError, "Mandator file '%s' is missing", VBOX_EXTPACK_DESCRIPTION_NAME); +- if (hManifestFile == NIL_RTVFSFILE) +- rc = vboxExtPackReturnError(VERR_MISSING, pszError, cbError, "Mandator file '%s' is missing", VBOX_EXTPACK_MANIFEST_NAME); +- if (hSignatureFile == NIL_RTVFSFILE) +- rc = vboxExtPackReturnError(VERR_MISSING, pszError, cbError, "Mandator file '%s' is missing", VBOX_EXTPACK_SIGNATURE_NAME); +- } +- +- /* +- * Check the manifest and it's signature. +- */ +- if (RT_SUCCESS(rc)) +- rc = vboxExtPackVerifyManifestAndSignature(hOurManifest, hManifestFile, hSignatureFile, pszError, cbError); +- +- /* +- * Check the XML. +- */ +- if (RT_SUCCESS(rc)) +- rc = vboxExtPackVerifyXml(hXmlFile, pszExtPackName, pszError, cbError); +- +- /* +- * Returns objects. +- */ +- if (RT_SUCCESS(rc)) +- { +- if (phValidManifest) +- { +- RTManifestRetain(hOurManifest); +- *phValidManifest = hOurManifest; +- } +- if (phXmlFile) +- { +- RTVfsFileRetain(hXmlFile); +- *phXmlFile = hXmlFile; +- } +- } +- +- /* +- * Release our object references. +- */ +- RTManifestRelease(hOurManifest); +- RTVfsFileRelease(hXmlFile); +- RTVfsFileRelease(hManifestFile); +- RTVfsFileRelease(hSignatureFile); +- } +- else +- vboxExtPackSetError(pszError, cbError, "RTManifestCreate failed: %Rrc", rc); +- RTVfsFsStrmRelease(hTarFss); +- RTManifestRelease(hFileManifest); +- +- return rc; +-} +- +--- VirtualBox-4.1.18.orig/include/Makefile.kmk 2012-06-20 10:07:49.000000000 -0300 ++++ VirtualBox-4.1.18/include/Makefile.kmk 2012-07-24 21:11:57.007068865 -0300 +@@ -51,7 +51,6 @@ + VBox/vd-cache-plugin.h \ + VBox/vmm/uvm.h \ + VBox/vscsi.h \ +- $(wildcard VBox/ExtPack/*.h ) \ + iprt/alloca.h \ + iprt/tcp.h \ + iprt/localipc.h \ +--- VirtualBox-4.1.18.orig/src/Makefile.kmk 2012-06-20 10:07:57.000000000 -0300 ++++ VirtualBox-4.1.18/src/Makefile.kmk 2012-07-24 22:51:10.206996034 -0300 +@@ -26,14 +26,6 @@ + include $(PATH_SUB_CURRENT)/VBox/Makefile.kmk + include $(PATH_SUB_CURRENT)/libs/Makefile.kmk + +-else if defined(VBOX_ONLY_EXTPACKS) +- include $(PATH_SUB_CURRENT)/bldprogs/Makefile.kmk +- include $(PATH_SUB_CURRENT)/VBox/Makefile.kmk +- include $(PATH_SUB_CURRENT)/libs/Makefile.kmk +- ifndef VBOX_ONLY_EXTPACKS_USE_IMPLIBS +- include $(PATH_SUB_CURRENT)/recompiler/Makefile.kmk +- endif +- + else if defined(VBOX_ONLY_TESTSUITE) + include $(PATH_SUB_CURRENT)/libs/Makefile.kmk + include $(PATH_SUB_CURRENT)/VBox/Makefile.kmk +--- VirtualBox-4.1.18.orig/src/VBox/Makefile.kmk 2012-07-24 21:19:55.565641784 -0300 ++++ VirtualBox-4.1.18/src/VBox/Makefile.kmk 2012-07-24 22:12:55.429156962 -0300 +@@ -33,19 +33,6 @@ + include $(PATH_SUB_CURRENT)/HostDrivers/Makefile.kmk + include $(PATH_SUB_CURRENT)/Frontends/Makefile.kmk + +-else ifdef VBOX_ONLY_EXTPACKS +- include $(PATH_SUB_CURRENT)/Runtime/Makefile.kmk +- include $(PATH_SUB_CURRENT)/Devices/Makefile.kmk +- include $(PATH_SUB_CURRENT)/HostDrivers/Makefile.kmk +- include $(PATH_SUB_CURRENT)/ExtPacks/Makefile.kmk +- ifdef VBOX_WITH_VRDP +- include $(PATH_SUB_CURRENT)/RDP/Makefile.kmk +- endif +- include $(PATH_SUB_CURRENT)/VMM/Makefile.kmk +- ifndef VBOX_ONLY_EXTPACKS_USE_IMPLIBS +- include $(PATH_SUB_CURRENT)/Disassembler/Makefile.kmk +- endif +- + else ifdef VBOX_ONLY_SDK + include $(PATH_SUB_CURRENT)/Main/Makefile.kmk + ifdef VBOX_WITH_VRDP +@@ -92,9 +79,6 @@ + if1of ($(KBUILD_TARGET_ARCH), amd64 x86) + include $(PATH_SUB_CURRENT)/NetworkServices/Makefile.kmk + endif +- ifndef VBOX_OSE +- include $(PATH_SUB_CURRENT)/ExtPacks/Makefile.kmk +- endif + ifdef VBOX_WITH_INSTALLER + include $(PATH_SUB_CURRENT)/Installer/Makefile.kmk # Keep this last. + endif +--- VirtualBox-4.1.18/src/libs/Makefile.kmk.orig 2012-07-24 21:23:26.938013023 -0300 ++++ VirtualBox-4.1.18/src/libs/Makefile.kmk 2012-07-24 21:43:42.557911752 -0300 +@@ -48,13 +48,6 @@ + include $(PATH_SUB_CURRENT)/kStuff/Makefile.kmk + endif + +-# OpenSSL. +-if !defined(VBOX_ONLY_SDK) \ +- && ( "$(SDK_VBOX_OPENSSL_INCS)" == "$(SDK_VBOX_OPENSSL_VBOX_DEFAULT_INCS)" \ +- || defined(VBOX_WITH_EXTPACK_PUEL_BUILD)) +- include $(PATH_SUB_CURRENT)/openssl-0.9.8t/Makefile.kmk +-endif +- + # libjpeg for VRDP video redirection + if defined(VBOX_WITH_VRDP) && defined(VBOX_WITH_VRDP_VIDEO_CHANNEL) + include $(PATH_SUB_CURRENT)/jpeg-8a/Makefile.kmk +--- VirtualBox-4.1.18.orig/src/VBox/Devices/Makefile.kmk 2012-07-24 23:06:45.916276235 -0300 ++++ VirtualBox-4.1.18/src/VBox/Devices/Makefile.kmk 2012-07-24 23:17:00.202963228 -0300 +@@ -21,9 +21,7 @@ + + # Include sub-makefiles. + include $(PATH_SUB_CURRENT)/testcase/Makefile.kmk +-if defined(VBOX_WITH_INTEL_PXE) || defined(VBOX_ONLY_EXTPACKS) +- include $(PATH_SUB_CURRENT)/PC/PXE/Makefile.kmk +-else if defined(VBOX_WITH_PXE_ROM) && !defined(VBOX_WITHOUT_ETHERBOOT) ++if defined(VBOX_WITH_PXE_ROM) && !defined(VBOX_WITHOUT_ETHERBOOT) + include $(PATH_SUB_CURRENT)/PC/Etherboot-src/Makefile.kmk + endif + if !defined(VBOX_ONLY_EXTPACKS) # Goes on almost to the end of the file. +@@ -57,9 +55,6 @@ + ifdef VBOX_WITH_USB + VBoxDDU_DEFS += VBOX_WITH_USB IN_USBLIB + VBoxDDU_SDKS.win = WINPSDK W2K3DDK +- if defined(VBOX_WITH_EHCI_IMPL) && !defined(VBOX_WITH_EXTPACK_PUEL) +- VBoxDDU_DEFS += VBOX_WITH_EHCI_IMPL +- endif + ifdef VBOX_WITH_NEW_USB_CODE_ON_DARWIN + VBoxDDU_DEFS.darwin += VBOX_WITH_NEW_USB_CODE_ON_DARWIN + endif +@@ -122,9 +117,6 @@ + VBoxDD_DEFS = VBOX_ACPI + ifdef VBOX_WITH_USB + VBoxDD_DEFS += VBOX_WITH_USB +- if defined(VBOX_WITH_EHCI_IMPL) && !defined(VBOX_WITH_EXTPACK_PUEL) +- VBoxDD_DEFS += VBOX_WITH_EHCI_IMPL +- endif + endif + ifdef VBOX_WITH_VUSB + VBoxDD_DEFS += VBOX_WITH_VUSB +@@ -446,11 +438,6 @@ + endif + ifdef VBOX_WITH_USB + DevicesR3_DEFS += VBOX_WITH_USB +- if defined(VBOX_WITH_EHCI_IMPL) && !defined(VBOX_WITH_EXTPACK_PUEL) +- DevicesR3_DEFS += VBOX_WITH_EHCI_IMPL +- DevicesR3_SOURCES += \ +- USB/DevEHCI.cpp +- endif + endif + if defined(VBOX_WITH_PCI_PASSTHROUGH_IMPL) && !defined(VBOX_WITH_EXTPACK_PUEL) + DevicesR3_DEFS += VBOX_WITH_PCI_PASSTHROUGH_IMPL +@@ -607,11 +594,6 @@ + + ifdef VBOX_WITH_USB + VBoxDDGC_DEFS += VBOX_WITH_USB +- if defined(VBOX_WITH_EHCI_IMPL) && !defined(VBOX_WITH_EXTPACK_PUEL) +- VBoxDDGC_DEFS += VBOX_WITH_EHCI_IMPL +- VBoxDDGC_SOURCES += \ +- USB/DevEHCI.cpp +- endif + endif + + ifdef VBOX_WITH_VIDEOHWACCEL +@@ -711,11 +693,6 @@ + endif + ifdef VBOX_WITH_USB + VBoxDDR0_DEFS += VBOX_WITH_USB +- if defined(VBOX_WITH_EHCI_IMPL) && !defined(VBOX_WITH_EXTPACK_PUEL) +- VBoxDDR0_DEFS += VBOX_WITH_EHCI_IMPL +- VBoxDDR0_SOURCES += \ +- USB/DevEHCI.cpp +- endif + endif + + if defined(VBOX_WITH_PCI_PASSTHROUGH_IMPL) && !defined(VBOX_WITH_EXTPACK_PUEL) +@@ -1204,49 +1181,5 @@ + + endif # !VBOX_ONLY_EXTPACKS + +-if defined(VBOX_WITH_EXTPACK_PUEL) && defined(VBOX_WITH_EXTPACK_PUEL_BUILD) +- # +- # The EHCI (USB 2.0) Extension Pack Modules. +- # +- if defined(VBOX_WITH_USB) +- DLLS += VBoxEhciR3 +- VBoxEhciR3_TEMPLATE = VBoxR3ExtPackPuel +- VBoxEhciR3_SOURCES = USB/DevEHCI.cpp +- +- SYSMODS += VBoxEhciR0 +- VBoxEhciR0_TEMPLATE = VBoxR0ExtPackPuel +- VBoxEhciR0_SOURCES = USB/DevEHCI.cpp +- +- ifdef VBOX_WITH_RAW_MODE +- SYSMODS += VBoxEhciRC +- VBoxEhciRC_TEMPLATE = VBoxRcExtPackPuel +- VBoxEhciRC_SOURCES = USB/DevEHCI.cpp +- endif +- endif +- +- if defined(VBOX_WITH_PCI_PASSTHROUGH) +- DLLS += VBoxPciRawR3 +- VBoxPciRawR3_TEMPLATE = VBoxR3ExtPackPuel +- VBoxPciRawR3_SOURCES = Bus/DevPciRaw.cpp +- +- DLLS += VBoxPciRawDrv +- VBoxPciRawDrv_TEMPLATE = VBoxR3ExtPackPuel +- VBoxPciRawDrv_SOURCES = Bus/DrvPciRaw.cpp +- +- SYSMODS += VBoxPciRawR0 +- VBoxPciRawR0_TEMPLATE = VBoxR0ExtPackPuel +- VBoxPciRawR0_SOURCES = Bus/DevPciRaw.cpp +- +- Bus/DevPciRaw.cpp_INCS = Bus +- endif +- +- # +- # The Intel PXE rom. +- # +- INSTALLS += VBoxExtPackPuelInsRoms +- VBoxExtPackPuelInsRoms_TEMPLATE = VBoxInsExtPackPuel +- VBoxExtPackPuelInsRoms_SOURCES = PC/PXE/PXE-Intel.rom=>PXE-Intel.rom +-endif # VBOX_WITH_EXTPACK_PUEL +- + include $(KBUILD_PATH)/subfooter.kmk + +--- VirtualBox-4.1.18.orig/src/VBox/Main/Makefile.kmk 2012-07-24 23:38:25.304126039 -0300 ++++ VirtualBox-4.1.18/src/VBox/Main/Makefile.kmk 2012-07-24 23:38:25.350789964 -0300 +@@ -230,14 +230,12 @@ + $(if $(VBOX_USB_WITH_SYSFS),VBOX_USB_WITH_SYSFS,) \ + $(if $(VBOX_USB_WITH_INOTIFY),VBOX_USB_WITH_INOTIFY,) \ + $(if $(VBOX_WITH_LIVE_MIGRATION),VBOX_WITH_LIVE_MIGRATION,) \ +- $(if $(VBOX_WITH_EXTPACK),VBOX_WITH_EXTPACK,) \ + $(if $(VBOX_WITH_VUSB),VBOX_WITH_VUSB,) \ + $(if $(VBOX_WITH_S3),VBOX_WITH_S3,) \ + $(if $(VBOX_WITH_PCI_PASSTHROUGH),VBOX_WITH_PCI_PASSTHROUGH,) + ifdef VBOX_WITH_USB + VBoxSVC_DEFS += \ + VBOX_WITH_USB \ +- $(if $(VBOX_WITH_EHCI),VBOX_WITH_EHCI,) \ + $(if $(VBOX_WITH_NEW_USB_CODE_ON_DARWIN),VBOX_WITH_NEW_USB_CODE_ON_DARWIN,) + endif + VBoxSVC_DEFS.win += VBOX_COM_OUTOFPROC_MODULE +@@ -290,7 +288,6 @@ + src-all/SharedFolderImpl.cpp \ + src-all/VirtualBoxBase.cpp \ + src-all/VirtualBoxErrorInfoImpl.cpp \ +- $(if $(VBOX_WITH_EXTPACK),src-all/ExtPackManagerImpl.cpp src-all/ExtPackUtil.cpp,) \ + src-server/ApplianceImpl.cpp \ + src-server/ApplianceImplExport.cpp \ + src-server/ApplianceImplImport.cpp \ +@@ -543,8 +540,6 @@ + $(if $(VBOX_WITH_HGSMI),VBOX_WITH_HGSMI,) \ + $(if $(VBOX_WITH_VIDEOHWACCEL),VBOX_WITH_VIDEOHWACCEL,) \ + $(if $(VBOX_WITH_USB),VBOX_WITH_USB,) \ +- $(if-expr defined(VBOX_WITH_EHCI) && defined(VBOX_WITH_USB),VBOX_WITH_EHCI,) \ +- $(if $(VBOX_WITH_EXTPACK),VBOX_WITH_EXTPACK,) \ + $(if $(VBOX_WITH_PCI_PASSTHROUGH),VBOX_WITH_PCI_PASSTHROUGH,) + + VBoxC_DEFS.darwin.x86 = VBOX_WITH_2X_4GB_ADDR_SPACE +@@ -602,7 +597,6 @@ + src-all/SharedFolderImpl.cpp \ + src-all/VirtualBoxBase.cpp \ + src-all/VirtualBoxErrorInfoImpl.cpp \ +- $(if $(VBOX_WITH_EXTPACK),src-all/ExtPackManagerImpl.cpp src-all/ExtPackUtil.cpp,) \ + $(if $(VBOX_WITH_USB_VIDEO),src-client/UsbWebcamInterface.cpp,) \ + $(if $(VBOX_WITH_USB_CARDREADER),src-client/UsbCardReader.cpp,) \ + src-client/AdditionsFacilityImpl.cpp \ +@@ -711,22 +705,6 @@ + endif # !win + + +-# +-# The VBoxExtPackHelperApp. +-# +-ifdef VBOX_WITH_EXTPACK +- PROGRAMS += VBoxExtPackHelperApp +- VBoxExtPackHelperApp_TEMPLATE = VBoxR3SetUidToRoot +- VBoxExtPackHelperApp_LDFLAGS.darwin = -framework Security +- VBoxExtPackHelperApp_LDFLAGS.win = /SUBSYSTEM:windows +- VBoxExtPackHelperApp_SOURCES = \ +- src-helper-apps/VBoxExtPackHelperApp.cpp \ +- src-all/ExtPackUtil.cpp +- VBoxExtPackHelperApp_LIBS = \ +- $(LIB_RUNTIME) +-endif # VBOX_WITH_EXTPACK +- +- + endif # !VBOX_ONLY_SDK (the ifndef is far above) + + +--- VirtualBox-4.1.18.orig/src/VBox/Frontends/VirtualBox/Makefile.kmk 2012-07-24 23:25:04.575825175 -0300 ++++ VirtualBox-4.1.18/src/VBox/Frontends/VirtualBox/Makefile.kmk 2012-07-24 23:25:04.619156084 -0300 +@@ -888,7 +888,6 @@ + $(VBOX_MACOSX_ICON_FILE)=>Resources/virtualbox.icns \ + $(VBOX_BRAND_GUI_VBOX_64PX_PNG)=>Resources/virtualbox.png \ + $(PATH_ROOT)/src/VBox/Resources/darwin/virtualbox-vbox.icns=>Resources/virtualbox-vbox.icns \ +- $(PATH_ROOT)/src/VBox/Resources/darwin/virtualbox-vbox-extpack.icns=>Resources/virtualbox-vbox-extpack.icns \ + $(PATH_ROOT)/src/VBox/Resources/darwin/virtualbox-ovf.icns=>Resources/virtualbox-ovf.icns \ + $(PATH_ROOT)/src/VBox/Resources/darwin/virtualbox-ova.icns=>Resources/virtualbox-ova.icns \ + $(PATH_ROOT)/src/VBox/Resources/darwin/virtualbox-vdi.icns=>Resources/virtualbox-vdi.icns \ +--- VirtualBox-4.1.18.orig/src/VBox/Frontends/VirtualBox/VirtualBox2.qrc 2012-07-24 23:28:17.985011038 -0300 ++++ VirtualBox-4.1.18/src/VBox/Frontends/VirtualBox/VirtualBox2.qrc 2012-07-24 23:28:18.051673913 -0300 +@@ -167,18 +167,6 @@ + <file alias="status_check_32px.png">images/status_check_32px.png</file> + <file alias="status_error_16px.png">images/status_error_16px.png</file> + <file alias="status_error_32px.png">images/status_error_32px.png</file> +- <file alias="extension_pack_16px.png">images/extension_pack_16px.png</file> +- <file alias="extension_pack_disabled_16px.png">images/extension_pack_disabled_16px.png</file> +- <file alias="extension_pack_32px.png">images/extension_pack_32px.png</file> +- <file alias="extension_pack_disabled_32px.png">images/extension_pack_disabled_32px.png</file> +- <file alias="extension_pack_install_16px.png">images/extension_pack_install_16px.png</file> +- <file alias="extension_pack_install_disabled_16px.png">images/extension_pack_install_disabled_16px.png</file> +- <file alias="extension_pack_install_32px.png">images/extension_pack_install_32px.png</file> +- <file alias="extension_pack_install_disabled_32px.png">images/extension_pack_install_disabled_32px.png</file> +- <file alias="extension_pack_uninstall_16px.png">images/extension_pack_uninstall_16px.png</file> +- <file alias="extension_pack_uninstall_disabled_16px.png">images/extension_pack_uninstall_disabled_16px.png</file> +- <file alias="extension_pack_uninstall_32px.png">images/extension_pack_uninstall_32px.png</file> +- <file alias="extension_pack_uninstall_disabled_32px.png">images/extension_pack_uninstall_disabled_32px.png</file> + <file alias="proxy_16px.png">images/proxy_16px.png</file> + <file alias="proxy_disabled_16px.png">images/proxy_disabled_16px.png</file> + <file alias="proxy_32px.png">images/proxy_32px.png</file> +--- VirtualBox-4.1.18.orig/src/VBox/Installer/linux/Makefile.kmk 2012-07-25 00:32:00.780012664 -0300 ++++ VirtualBox-4.1.18/src/VBox/Installer/linux/Makefile.kmk 2012-07-25 00:32:00.806677728 -0300 +@@ -170,11 +170,6 @@ + VBox.sh \ + VBox.png + +-ifdef VBOX_WITH_EXTPACK +- VBOX_LNX_STRIP_BIN += \ +- VBoxExtPackHelperApp +-endif +- + # Qt4 GUI + ifdef VBOX_WITH_QTGUI + include $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/nls/ApprovedLanguages.kmk +@@ -286,7 +281,7 @@ + + VBOX_MIME_ICONS = \ + $(addprefix $(PATH_ROOT)/src/VBox/Resources/other/,\ +- $(foreach f,ova ovf vbox vbox-extpack vdi vmdk vhd hdd, \ ++ $(foreach f,ova ovf vbox vdi vmdk vhd hdd, \ + $(foreach s,16 20 24 32 48 64 72 96 128 256,\ + virtualbox-$(f)-$(s)px.png=>$(s)x$(s)/virtualbox-$(f).png))) + +--- VirtualBox-4.1.18.orig/src/VBox/Installer/win/Makefile.kmk 2012-07-25 00:34:52.253398525 -0300 ++++ VirtualBox-4.1.18/src/VBox/Installer/win/Makefile.kmk 2012-07-25 00:34:52.300062531 -0300 +@@ -435,7 +435,6 @@ + -E 'VBOX_WITH_DEBUGGER_GUI=$(if-expr defined(VBOX_WITH_DEBUGGER_GUI) && defined(VBOX_WITH_QTGUI),yes,no)' \ + -E 'VBOX_WITH_DOCS_PACKING=$(if $(VBOX_WITH_DOCS_PACKING),yes,no)' \ + -E 'VBOX_WITH_EFIFW_PACKING=$(if $(VBOX_WITH_EFIFW_PACKING),yes,no)' \ +- -E 'VBOX_WITH_EXTPACK=$(if $(VBOX_WITH_EXTPACK),yes,no)' \ + -E 'VBOX_WITH_GUEST_CONTROL=$(if $(VBOX_WITH_GUEST_CONTROL),yes,no)' \ + -E 'VBOX_WITH_GUEST_PROPS=$(if $(VBOX_WITH_GUEST_PROPS),yes,no)' \ + -E 'VBOX_WITH_NETFLT=$(if $(VBOX_WITH_NETFLT),yes,no)' \ +--- VirtualBox-4.1.18.orig/src/VBox/Installer/darwin/Makefile.kmk 2012-07-25 00:36:55.929571374 -0300 ++++ VirtualBox-4.1.18/src/VBox/Installer/darwin/Makefile.kmk 2012-07-25 00:36:55.959569630 -0300 +@@ -629,7 +629,6 @@ + MacOS/VirtualBoxVM \ + MacOS/VBoxNetAdpCtl \ + MacOS/VBoxNetDHCP \ +- MacOS/VBoxExtPackHelperApp \ + MacOS/VBoxBalloonCtrl + ifdef VBOX_WITH_WEBSERVICES + VBOX_DI_VBAPP_PROGS += \ +@@ -659,7 +658,6 @@ + Resources/virtualbox.icns \ + Resources/virtualbox.png \ + Resources/virtualbox-vbox.icns \ +- Resources/virtualbox-vbox-extpack.icns \ + Resources/virtualbox-ovf.icns \ + Resources/virtualbox-ova.icns \ + Resources/virtualbox-vdi.icns \ +--- VirtualBox-4.1.18/src/VBox/Installer/solaris/Makefile.kmk.orig 2012-07-25 00:38:48.476398293 -0300 ++++ VirtualBox-4.1.18/src/VBox/Installer/solaris/Makefile.kmk 2012-07-25 00:38:48.516396159 -0300 +@@ -185,12 +185,12 @@ + + VBOX_MIME_ICONS = \ + $(addprefix $(PATH_ROOT)/src/VBox/Resources/other/,\ +- $(foreach f,ova ovf vbox vbox-extpack vdi vmdk vhd hdd, \ ++ $(foreach f,ova ovf vbox vdi vmdk vhd hdd, \ + $(foreach s,16 20 24 32 48 64 72 96 128 256,\ + virtualbox-$(f)-$(s)px.png=>$(s)x$(s)/mimetypes/virtualbox-$(f).png))) + + SOLARIS_COMMON_ICONS = \ +- $(foreach f,ova ovf vbox vbox-extpack vdi vmdk vhd hdd, \ ++ $(foreach f,ova ovf vbox vdi vmdk vhd hdd, \ + $(foreach s,16 20 24 32 48 64 72 96 128 256,\ + $(s)x$(s)/mimetypes/virtualbox-$(f).png)) + +@@ -210,7 +210,6 @@ + $(if $(VBOX_WITH_VBOXSDL),VBoxSDL,) \ + $(if $(VBOX_WITH_NETADP),VBoxNetAdpCtl,) \ + VBoxNetDHCP \ +- $(if $(VBOX_WITH_EXTPACK),VBoxExtPackHelperApp,) \ + VBoxSVC \ + $(if $(VBOX_WITH_CROGL),VBoxTestOGL,) \ + VBoxXPCOMIPCD \ +--- VirtualBox-4.1.18.orig/src/VBox/Runtime/Makefile.kmk 2012-07-25 00:40:58.745522450 -0300 ++++ VirtualBox-4.1.18/src/VBox/Runtime/Makefile.kmk 2012-07-25 00:40:58.782186960 -0300 +@@ -53,15 +53,6 @@ + # + LIBRARIES += RuntimeR3 RuntimeBldProg + +-else ifdef VBOX_ONLY_EXTPACKS_USE_IMPLIBS +- # +- # Build docs only - need just regular R3 runtime. +- # +- LIBRARIES += RuntimeBldProg +- LIBRARIES.solaris += RuntimeR0Stub +- LIBRARIES.win += RuntimeR0Stub RuntimeRCStub +- include $(PATH_SUB_CURRENT)/tools/Makefile.kmk +- + else # !VBOX_ONLY_ADDITIONS && !VBOX_ONLY_TESTSUITE && !VBOX_ONLY_DOCS + + # diff --git a/libre/virtualbox-libre/os_blag.png b/libre/virtualbox-libre/os_blag.png Binary files differnew file mode 100644 index 000000000..61995ca10 --- /dev/null +++ b/libre/virtualbox-libre/os_blag.png diff --git a/libre/virtualbox-libre/os_blag_64.png b/libre/virtualbox-libre/os_blag_64.png Binary files differnew file mode 100644 index 000000000..aa4463a97 --- /dev/null +++ b/libre/virtualbox-libre/os_blag_64.png diff --git a/libre/virtualbox-libre/os_dragora.png b/libre/virtualbox-libre/os_dragora.png Binary files differnew file mode 100644 index 000000000..d1df45880 --- /dev/null +++ b/libre/virtualbox-libre/os_dragora.png diff --git a/libre/virtualbox-libre/os_dragora_64.png b/libre/virtualbox-libre/os_dragora_64.png Binary files differnew file mode 100644 index 000000000..64bcecf20 --- /dev/null +++ b/libre/virtualbox-libre/os_dragora_64.png diff --git a/libre/virtualbox-libre/os_dynebolic.png b/libre/virtualbox-libre/os_dynebolic.png Binary files differnew file mode 100644 index 000000000..67b07d4c0 --- /dev/null +++ b/libre/virtualbox-libre/os_dynebolic.png diff --git a/libre/virtualbox-libre/os_gnewsense.png b/libre/virtualbox-libre/os_gnewsense.png Binary files differnew file mode 100644 index 000000000..76d9e38b3 --- /dev/null +++ b/libre/virtualbox-libre/os_gnewsense.png diff --git a/libre/virtualbox-libre/os_gnewsense_64.png b/libre/virtualbox-libre/os_gnewsense_64.png Binary files differnew file mode 100644 index 000000000..8859c34e8 --- /dev/null +++ b/libre/virtualbox-libre/os_gnewsense_64.png diff --git a/libre/virtualbox-libre/os_gnu.png b/libre/virtualbox-libre/os_gnu.png Binary files differnew file mode 100644 index 000000000..26c4550f9 --- /dev/null +++ b/libre/virtualbox-libre/os_gnu.png diff --git a/libre/virtualbox-libre/os_gnu_64.png b/libre/virtualbox-libre/os_gnu_64.png Binary files differnew file mode 100644 index 000000000..4161634e9 --- /dev/null +++ b/libre/virtualbox-libre/os_gnu_64.png diff --git a/libre/virtualbox-libre/os_gnuhurd.png b/libre/virtualbox-libre/os_gnuhurd.png Binary files differnew file mode 100644 index 000000000..26c4550f9 --- /dev/null +++ b/libre/virtualbox-libre/os_gnuhurd.png diff --git a/libre/virtualbox-libre/os_gnulinux.png b/libre/virtualbox-libre/os_gnulinux.png Binary files differnew file mode 100644 index 000000000..26c4550f9 --- /dev/null +++ b/libre/virtualbox-libre/os_gnulinux.png diff --git a/libre/virtualbox-libre/os_gnulinux_64.png b/libre/virtualbox-libre/os_gnulinux_64.png Binary files differnew file mode 100644 index 000000000..4161634e9 --- /dev/null +++ b/libre/virtualbox-libre/os_gnulinux_64.png diff --git a/libre/virtualbox-libre/os_musix.png b/libre/virtualbox-libre/os_musix.png Binary files differnew file mode 100644 index 000000000..fb7b94577 --- /dev/null +++ b/libre/virtualbox-libre/os_musix.png diff --git a/libre/virtualbox-libre/os_musix_64.png b/libre/virtualbox-libre/os_musix_64.png Binary files differnew file mode 100644 index 000000000..a1bbbbf3a --- /dev/null +++ b/libre/virtualbox-libre/os_musix_64.png diff --git a/libre/virtualbox-libre/os_os64base.png b/libre/virtualbox-libre/os_os64base.png Binary files differnew file mode 100644 index 000000000..7aec20314 --- /dev/null +++ b/libre/virtualbox-libre/os_os64base.png diff --git a/libre/virtualbox-libre/os_os64base.xcf b/libre/virtualbox-libre/os_os64base.xcf Binary files differnew file mode 100644 index 000000000..d8e28e35e --- /dev/null +++ b/libre/virtualbox-libre/os_os64base.xcf diff --git a/libre/virtualbox-libre/os_osbase.png b/libre/virtualbox-libre/os_osbase.png Binary files differnew file mode 100644 index 000000000..00f197fca --- /dev/null +++ b/libre/virtualbox-libre/os_osbase.png diff --git a/libre/virtualbox-libre/os_osbase.xcf b/libre/virtualbox-libre/os_osbase.xcf Binary files differnew file mode 100644 index 000000000..c4463c857 --- /dev/null +++ b/libre/virtualbox-libre/os_osbase.xcf diff --git a/libre/virtualbox-libre/os_parabola.png b/libre/virtualbox-libre/os_parabola.png Binary files differnew file mode 100644 index 000000000..757abc484 --- /dev/null +++ b/libre/virtualbox-libre/os_parabola.png diff --git a/libre/virtualbox-libre/os_parabola_64.png b/libre/virtualbox-libre/os_parabola_64.png Binary files differnew file mode 100644 index 000000000..5ac7c2767 --- /dev/null +++ b/libre/virtualbox-libre/os_parabola_64.png diff --git a/libre/virtualbox-libre/os_trisquel.png b/libre/virtualbox-libre/os_trisquel.png Binary files differnew file mode 100644 index 000000000..c6f0d3d7a --- /dev/null +++ b/libre/virtualbox-libre/os_trisquel.png diff --git a/libre/virtualbox-libre/os_trisquel_64.png b/libre/virtualbox-libre/os_trisquel_64.png Binary files differnew file mode 100644 index 000000000..ebca3dd43 --- /dev/null +++ b/libre/virtualbox-libre/os_trisquel_64.png diff --git a/libre/virtualbox-libre/os_ututo.png b/libre/virtualbox-libre/os_ututo.png Binary files differnew file mode 100644 index 000000000..e1dffb575 --- /dev/null +++ b/libre/virtualbox-libre/os_ututo.png diff --git a/libre/virtualbox-libre/os_ututo_64.png b/libre/virtualbox-libre/os_ututo_64.png Binary files differnew file mode 100644 index 000000000..158468e0a --- /dev/null +++ b/libre/virtualbox-libre/os_ututo_64.png diff --git a/libre/virtualbox-libre/os_venenux.png b/libre/virtualbox-libre/os_venenux.png Binary files differnew file mode 100644 index 000000000..5e0c1585d --- /dev/null +++ b/libre/virtualbox-libre/os_venenux.png diff --git a/libre/virtualbox-libre/vboxdrv-reference.patch b/libre/virtualbox-libre/vboxdrv-reference.patch index 682175798..c2c673386 100644 --- a/libre/virtualbox-libre/vboxdrv-reference.patch +++ b/libre/virtualbox-libre/vboxdrv-reference.patch @@ -9,9 +9,9 @@ diff -Nur VirtualBox-4.1.6_OSE.orig/src/VBox/Frontends/VirtualBox/src/main.cpp V - "as root. If it is available in your distribution, you should install the " - "DKMS package first. This package keeps track of Linux kernel changes and " - "recompiles the vboxdrv kernel module if necessary." -+ " <font color=blue>'pacman -S virtualbox-modules'</font><br/><br/>" -+ "as root. If you don't use our stock kernel, install virtualbox-source and" -+ "execute /usr/bin/vboxbuild ." ++ " <font color=blue>'pacman -S virtualbox-libre-modules'</font><br/><br/>" ++ "as root. If you don't use our stock kernel, install virtualbox-libre-source and " ++ "execute dkms install vboxhost/4.1.18 ." ); QString g_QStrHintOtherWrongDriverVersion = QApplication::tr( @@ -25,7 +25,7 @@ diff -Nur VirtualBox-4.1.6_OSE.orig/src/VBox/Frontends/VirtualBox/src/main.cpp V - "may correct this. Make sure that you do not mix the " - "OSE version and the PUEL version of VirtualBox." + "VirtualBox. Reload the modules or if you don't use our stock kernel execute<br/><br/> " -+ " <font color=blue>'/usr/bin/vboxbuild'</font><br/><br/>" ++ " <font color=blue>'dkms install vboxhost/4.1.18'</font><br/><br/>" ); QString g_QStrHintOtherNoDriver = QApplication::tr( @@ -37,11 +37,11 @@ diff -Nur VirtualBox-4.1.6_OSE.orig/src/VBox/Installer/linux/VBox.sh VirtualBox- WARNING: The vboxdrv kernel module is not loaded. Either there is no module available for the current kernel (`uname -r`) or it failed to - load. Please recompile the kernel module and install it by -+ load. Please reinstall the kernel module virtualbox-modules or ++ load. Please reinstall the kernel module virtualbox-libre-modules or + if you don't use our stock kernel compile the modules with - sudo /etc/init.d/vboxdrv setup -+ sudo /usr/bin/vboxbuild ++ sudo dkms install vboxhost/4.1.18 You will not be able to start VMs until this problem is fixed. EOF diff --git a/libre/virtualbox-libre/vbox-service.conf b/libre/virtualbox-libre/vboxservice.conf index 9d4ec629f..9d4ec629f 100644 --- a/libre/virtualbox-libre/vbox-service.conf +++ b/libre/virtualbox-libre/vboxservice.conf diff --git a/libre/virtualbox-libre/vbox-service.rc b/libre/virtualbox-libre/vboxservice.rc index 96233f66d..5a62d69a3 100644 --- a/libre/virtualbox-libre/vbox-service.rc +++ b/libre/virtualbox-libre/vboxservice.rc @@ -2,22 +2,22 @@ . /etc/rc.conf . /etc/rc.d/functions -. /etc/conf.d/vbox-service +. /etc/conf.d/${0##*/} name=VBoxService PID=$(pidof -o %PPID $name) case "$1" in start) - stat_busy "Starting $name service" + stat_busy 'Starting VirtualBox Guest Service' [[ -z "$PID" ]] && ${name} $VBOX_SERVICE_OPTION &>/dev/null \ - && { add_daemon vbox-service; stat_done; } \ + && { add_daemon ${0##*/}; stat_done; } \ || { stat_fail; exit 1; } ;; stop) - stat_busy "Stopping $name service" + stat_busy 'Stopping VirtualBox Guest Service' [[ -n "$PID" ]] && kill $PID &>/dev/null \ - && { rm_daemon vbox-service; stat_done; } \ + && { rm_daemon ${0##*/}; stat_done; } \ || { stat_fail; exit 1; } ;; restart) @@ -26,11 +26,11 @@ case "$1" in $0 start ;; status) - stat_busy "Checking $name status"; - ck_status vbox-service + stat_busy 'Checking VirtualBox Guest Service status' + ck_status ${0##*/} ;; *) - echo "usage: $0 {start|stop|restart|status}" + echo "usage: ${0##*/} {start|stop|restart|status}" >&2 exit 1 esac diff --git a/libre/virtualbox-libre/vboxservice.service b/libre/virtualbox-libre/vboxservice.service new file mode 100644 index 000000000..bbd61617d --- /dev/null +++ b/libre/virtualbox-libre/vboxservice.service @@ -0,0 +1,9 @@ +[Unit] +Description=VirtualBox Guest Service +ConditionVirtualization=oracle + +[Service] +ExecStart=/usr/bin/VBoxService -f + +[Install] +WantedBy=multi-user.target diff --git a/libre/virtualbox-libre/vboxweb.service b/libre/virtualbox-libre/vboxweb.service new file mode 100644 index 000000000..303381597 --- /dev/null +++ b/libre/virtualbox-libre/vboxweb.service @@ -0,0 +1,11 @@ +[Unit] +Description=VirtualBox Web Service +After=network.target + +[Service] +Type=forking +PIDFile=/run/vboxweb.pid +ExecStart=/usr/bin/vboxwebsrv --pidfile /run/vboxweb.pid --background + +[Install] +WantedBy=multi-user.target diff --git a/libre/virtualbox-libre/virtualbox-libre-parabola-additions.install b/libre/virtualbox-libre/virtualbox-libre-parabola-additions.install new file mode 100644 index 000000000..38bbe807d --- /dev/null +++ b/libre/virtualbox-libre/virtualbox-libre-parabola-additions.install @@ -0,0 +1,31 @@ +#!/bin/sh + +# arg 1: the new package version +post_install() { + getent group vboxsf > /dev/null || groupadd -g 109 vboxsf + true +} + +# arg 1: the new package version +# arg 2: the old package version +post_upgrade() { + post_install "$1" + # rename /etc/rc.d/vboxservice + if [ "`vercmp $2 4.1.18-3`" -lt 0 ]; then + cat << EOF +==> rc.d vbox-service script was renamed to vboxservice. +EOF + fi + # fix gid of vboxsf + if [ "`vercmp $2 4.1.18-4`" -lt 0 ]; then + groupmod -g 109 vboxsf + fi + true +} + +# arg 1: the old package version +post_remove() { + groupdel vboxsf >/dev/null 2>&1 || true +} + +# vim:set ts=2 sw=2 ft=sh et: diff --git a/libre/virtualbox-libre/virtualbox-libre-parabola-source.install b/libre/virtualbox-libre/virtualbox-libre-parabola-source.install new file mode 100644 index 000000000..966fb5681 --- /dev/null +++ b/libre/virtualbox-libre/virtualbox-libre-parabola-source.install @@ -0,0 +1,29 @@ +#!/bin/sh + +# arg 1: the new package version +post_install() { + cat << EOF +==> To build and install your modules run dkms install vboxguest/${1%-*} +==> To do this automatically at startup you can add dkms in your DAEMONS +EOF +} + +# arg 1: the new package version +# arg 2: the old package version +pre_upgrade() { + pre_remove "$2" +} + +# arg 1: the new package version +# arg 2: the old package version +post_upgrade() { + post_install "$1" +} + +# arg 1: the old package version +pre_remove() { + # Remove modules using dkms + [ -n "${1%-*}" ] && dkms remove vboxguest/${1%-*} --all >/dev/null || true +} + +# vim:set ts=2 sw=2 ft=sh et: diff --git a/libre/virtualbox-libre/virtualbox-libre-source.install b/libre/virtualbox-libre/virtualbox-libre-source.install new file mode 100644 index 000000000..6a3994c8d --- /dev/null +++ b/libre/virtualbox-libre/virtualbox-libre-source.install @@ -0,0 +1,29 @@ +#/bin/sh + +# arg 1: the new package version +post_install() { + cat << EOF +==> To build and install your modules run dkms install vboxhost/${1%-*} +==> To do this automatically at startup you can add dkms in your DAEMONS +EOF +} + +# arg 1: the new package version +# arg 2: the old package version +pre_upgrade() { + pre_remove "$2" +} + +# arg 1: the new package version +# arg 2: the old package version +post_upgrade() { + post_install "$1" +} + +# arg 1: the old package version +pre_remove() { + # Remove modules using dkms + [ -n "${1%-*}" ] && dkms remove vboxhost/${1%-*} --all >/dev/null || true +} + +# vim:set ts=2 sw=2 ft=sh et: diff --git a/libre/virtualbox-libre/virtualbox-libre.install b/libre/virtualbox-libre/virtualbox-libre.install new file mode 100644 index 000000000..6913fe2ed --- /dev/null +++ b/libre/virtualbox-libre/virtualbox-libre.install @@ -0,0 +1,45 @@ +#!/bin/sh + +utils() { + if [ -x usr/bin/update-mime-database ]; then + update-mime-database usr/share/mime > /dev/null 2>&1 + fi + + if [ -x usr/bin/xdg-icon-resource ]; then + xdg-icon-resource forceupdate --theme hicolor > /dev/null 2>&1 + fi + + if [ -x usr/bin/update-desktop-database ]; then + usr/bin/update-desktop-database -q + fi + + if [ -x usr/bin/udevadm ]; then + usr/bin/udevadm control --reload + fi +} + +# arg 1: the new package version +post_install() { + getent group vboxusers >/dev/null || usr/sbin/groupadd -g 108 vboxusers + utils +} + +# arg 1: the new package version +# arg 2: the old package version +post_upgrade() { + post_install "$1" + if [ "$(vercmp $2 4.1.6-1)" -lt 0 ]; then + cat << EOF +===> Starting with virtualbox version 4.1.6-1, kernel modules handling is done by virtualbox-modules. +===> Use virtualbox-source package if you don't use our stock linux package. +EOF + fi +} + +# arg 1: the old package version +post_remove() { + groupdel vboxusers >/dev/null 2>&1 || true + utils +} + +# vim:set ts=2 sw=2 ft=sh et: diff --git a/libre/virtualbox-libre/virtualbox-source.install b/libre/virtualbox-libre/virtualbox-source.install deleted file mode 100644 index 24d90b1c2..000000000 --- a/libre/virtualbox-libre/virtualbox-source.install +++ /dev/null @@ -1,12 +0,0 @@ -post_install() { -/bin/cat << EOF -===> To compile the modules do /usr/bin/vboxbuild -EOF - -} - -post_upgrade() { -/bin/cat << EOF -===> To recompile the modules do /usr/bin/vboxbuild -EOF -} diff --git a/libre/virtualbox-libre/virtualbox.install b/libre/virtualbox-libre/virtualbox.install deleted file mode 100644 index 29646e973..000000000 --- a/libre/virtualbox-libre/virtualbox.install +++ /dev/null @@ -1,34 +0,0 @@ -utils() { - if [ -x usr/bin/update-mime-database ]; then - update-mime-database usr/share/mime > /dev/null 2>&1 - fi - - if [ -x usr/bin/xdg-icon-resource ]; then - xdg-icon-resource forceupdate --theme hicolor > /dev/null 2>&1 - fi - - if [ -x usr/bin/update-desktop-database ]; then - usr/bin/update-desktop-database -q - fi -} - -post_install() { - getent group vboxusers >> /dev/null || usr/sbin/groupadd -g 108 vboxusers - utils -} - -post_upgrade() { - getent group vboxusers >> /dev/null || usr/sbin/groupadd -g 108 vboxusers - utils - if [ "$(vercmp $2 4.1.6-1)" -lt 0 ]; then -/bin/cat << EOF -===> Starting with virtualbox version 4.1.6-1, kernel modules handling is done by virtualbox-modules. -===> Use virtualbox-source package if you don't use our stock linux-libre package. -EOF - fi -} - -post_remove() { - groupdel vboxusers >/dev/null 2>&1 || true - utils -} diff --git a/libre/virtualbox-modules-lts/PKGBUILD b/libre/virtualbox-modules-lts/PKGBUILD deleted file mode 100644 index da8583e87..000000000 --- a/libre/virtualbox-modules-lts/PKGBUILD +++ /dev/null @@ -1,101 +0,0 @@ -# $Id$ -# Maintainer: Bartłomiej Piotrowski <nospam@bpiotrowski.pl> -# Maintainer (Parabola): Márcio Silva <coadde@lavabit.com> -# Maintainer (Parabola): André Silva <emulatorman@lavabit.com> -# Maintainer (Parabola): Jorge López <jorginho@lavabit.com> - -pkgbase=virtualbox-modules-lts -pkgname=('virtualbox-modules-lts' 'virtualbox-parabola-modules-lts') -pkgver=4.1.18 -pkgrel=2 -arch=('i686' 'x86_64') -url='http://virtualbox.org' -license=('GPL') -makedepends=('libstdc++5' 'bin86' 'dev86' 'iasl' 'libxslt' 'libxml2' 'libpng' 'libidl2' 'xalan-c' 'sdl' 'linux-libre-lts' 'linux-libre-lts-headers') -[[ $CARCH == "x86_64" ]] && makedepends=("${makedepends[@]}" 'gcc-multilib' 'lib32-glibc') -source=(http://download.virtualbox.org/virtualbox/${pkgver}/VirtualBox-${pkgver}.tar.bz2 - LocalConfig.kmk 60-vboxguest.rules) -md5sums=('38db0a87cba659b484af868b0c2bd3ac' - '4c88bd122677a35f68abd76eb01b378b' - 'ed1341881437455d9735875ddf455fbe') - -_extramodules=extramodules-3.0-LIBRE-LTS -_kernver=$(pacman -Q linux-libre-lts | awk '{ printf "%s-LIBRE-LTS", $2; exit }') - -export KERN_DIR=/usr/lib/modules/${_kernver}/build -export KERN_INCL=/usr/src/linux-${_kernver}/include/ - -build() { - cd "$srcdir/VirtualBox-${pkgver}" - - cp "$srcdir/LocalConfig.kmk" . - - ./configure \ - --with-linux=/usr/src/linux-${_kernver} \ - --disable-java \ - --disable-docs \ - --disable-xpcom \ - --disable-python \ - --disable-sdl-ttf \ - --disable-alsa \ - --disable-pulse \ - --disable-dbus \ - --disable-opengl \ - --build-headless \ - --nofatal - source ./env.sh - kmk all - - make -C "$srcdir/VirtualBox-${pkgver}/out/linux.$BUILD_PLATFORM_ARCH/release/bin/src" - make -C "$srcdir/VirtualBox-${pkgver}/out/linux.$BUILD_PLATFORM_ARCH/release/bin/additions/src" -} - -package_virtualbox-parabola-modules-lts(){ - pkgdesc="Additions only for Parabola guests (long-term supported kernel modules)" - license=('GPL') - install=virtualbox-parabola-modules-lts.install - depends=('linux-libre-lts>=3.0' 'linux-libre-lts<3.1') - replaces=('virtualbox-archlinux-modules-lts') - conflicts=('virtualbox-archlinux-modules-lts') - provides=("virtualbox-parabola-modules=$pkgver" "virtualbox-archlinux-modules=$pkgver" "virtualbox-archlinux-modules-lts=$pkgver") - - source "$srcdir/VirtualBox-${pkgver}/env.sh" - - cd "$srcdir/VirtualBox-${pkgver}/out/linux.$BUILD_PLATFORM_ARCH/release/bin/additions/src" - - for module in vboxguest.ko vboxsf.ko vboxvideo.ko; do - install -D -m644 ${module} \ - "$pkgdir/usr/lib/modules/${_extramodules}/${module}" - done - - install -D -m 0644 "$srcdir/60-vboxguest.rules" \ - "$pkgdir/usr/lib/udev/rules.d/60-vboxguest.rules" - - find "${pkgdir}" -name '*.ko' -exec gzip -9 {} \; -} - -package_virtualbox-modules-lts(){ - pkgdesc="Long-term supported kernel modules for VirtualBox" - license=('GPL') - install=virtualbox-modules-lts.install - depends=('linux-libre-lts>=3.0' 'linux-libre-lts<3.1') - provides=("virtualbox-modules=$pkgver") - - source "$srcdir/VirtualBox-${pkgver}/env.sh" - - cd "$srcdir/VirtualBox-${pkgver}/out/linux.$BUILD_PLATFORM_ARCH/release/bin/src" - - install -D -m644 vboxdrv.ko \ - "$pkgdir/usr/lib/modules/${_extramodules}/vboxdrv.ko" - - install -D -m644 vboxnetadp.ko \ - "$pkgdir/usr/lib/modules/${_extramodules}/vboxnetadp.ko" - - install -D -m644 vboxnetflt.ko \ - "$pkgdir/usr/lib/modules/${_extramodules}/vboxnetflt.ko" - - install -D -m644 vboxpci.ko \ - "$pkgdir/usr/lib/modules/${_extramodules}/vboxpci.ko" - - find "${pkgdir}" -name '*.ko' -exec gzip -9 {} + -} diff --git a/libre/virtualbox-modules/PKGBUILD b/libre/virtualbox-modules/PKGBUILD deleted file mode 100644 index f965869f7..000000000 --- a/libre/virtualbox-modules/PKGBUILD +++ /dev/null @@ -1,104 +0,0 @@ -# $Id$ -#Maintainer: Ionut Biru <ibiru@archlinux.org> -#Maintainer (Parabola): Jorge López <jorginho@lavabit.com> -#Contributor (Parabola): André Silva <emulatorman@lavabit.com> - -pkgbase=virtualbox-modules -pkgname=('virtualbox-modules' 'virtualbox-parabola-modules') -pkgver=4.1.18 -pkgrel=4 -arch=('i686' 'x86_64') -url='http://virtualbox.org' -license=('GPL') -makedepends=('libstdc++5' 'bin86' 'dev86' 'iasl' 'libxslt' 'libxml2' 'libpng' 'libidl2' 'xalan-c' 'sdl' 'linux-libre-headers') -[[ $CARCH == "x86_64" ]] && makedepends=("${makedepends[@]}" 'gcc-multilib' 'lib32-glibc') -source=(http://download.virtualbox.org/virtualbox/${pkgver}/VirtualBox-${pkgver}.tar.bz2 - LocalConfig.kmk 60-vboxguest.rules) -md5sums=('38db0a87cba659b484af868b0c2bd3ac' - '4c88bd122677a35f68abd76eb01b378b' - 'ed1341881437455d9735875ddf455fbe') - -_extramodules=extramodules-3.4-LIBRE -_kernver="$(cat /usr/lib/modules/${_extramodules}/version || true)" - -export KERN_DIR=/usr/lib/modules/${_kernver}/build -export KERN_INCL=/usr/src/linux-${_kernver}/include/ - -build() { - cd "$srcdir/VirtualBox-${pkgver}" - - cp "$srcdir/LocalConfig.kmk" . - - ./configure \ - --with-linux=/usr/src/linux-${_kernver} \ - --disable-java \ - --disable-docs \ - --disable-xpcom \ - --disable-python \ - --disable-sdl-ttf \ - --disable-alsa \ - --disable-pulse \ - --disable-dbus \ - --disable-opengl \ - --build-headless \ - --nofatal - source ./env.sh - kmk all - - make -C "$srcdir/VirtualBox-${pkgver}/out/linux.$BUILD_PLATFORM_ARCH/release/bin/src" - make -C "$srcdir/VirtualBox-${pkgver}/out/linux.$BUILD_PLATFORM_ARCH/release/bin/additions/src" -} - -package_virtualbox-parabola-modules(){ - pkgdesc="Additions only for Parabola guests (kernel modules)" - license=('GPL') - install=virtualbox-parabola-modules.install - depends=('linux-libre>=3.4' 'linux-libre<3.5') - replaces=('virtualbox-archlinux-modules') - conflicts=('virtualbox-archlinux-modules') - provides=("virtualbox-archlinux-modules=$pkgver") - - source "$srcdir/VirtualBox-${pkgver}/env.sh" - - cd "$srcdir/VirtualBox-${pkgver}/out/linux.$BUILD_PLATFORM_ARCH/release/bin/additions/src" - - for module in vboxguest.ko vboxsf.ko vboxvideo.ko; do - install -D -m644 ${module} \ - "$pkgdir/lib/modules/${_extramodules}/${module}" - done - - install -D -m 0644 "$srcdir/60-vboxguest.rules" \ - "$pkgdir/usr/lib/udev/rules.d/60-vboxguest.rules" - - find "${pkgdir}" -name '*.ko' -exec gzip -9 {} \; - - sed -i -e "s/EXTRAMODULES='.*'/EXTRAMODULES='${_extramodules}'/" "$startdir/virtualbox-parabola-modules.install" -} - -package_virtualbox-modules(){ - pkgdesc="Kernel modules for VirtualBox" - license=('GPL') - install=virtualbox-modules.install - depends=('linux-libre>=3.4' 'linux-libre<3.5') - - source "$srcdir/VirtualBox-${pkgver}/env.sh" - - - cd "$srcdir/VirtualBox-${pkgver}/out/linux.$BUILD_PLATFORM_ARCH/release/bin/src" - - install -D -m644 vboxdrv.ko \ - "$pkgdir/usr/lib/modules/${_extramodules}/vboxdrv.ko" - - install -D -m644 vboxnetadp.ko \ - "$pkgdir/usr/lib/modules/${_extramodules}/vboxnetadp.ko" - - install -D -m644 vboxnetflt.ko \ - "$pkgdir/usr/lib/modules/${_extramodules}/vboxnetflt.ko" - - install -D -m644 vboxpci.ko \ - "$pkgdir/usr/lib/modules/${_extramodules}/vboxpci.ko" - - find "${pkgdir}" -name '*.ko' -exec gzip -9 {} + - - sed -i -e "s/EXTRAMODULES='.*'/EXTRAMODULES='${_extramodules}'/" "$startdir/virtualbox-modules.install" -} |