summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRick Farina <zerochaos@gentoo.org>2014-04-25 16:28:42 +0000
committerRick Farina <zerochaos@gentoo.org>2014-04-25 16:28:42 +0000
commit477ececdfa20fbebda735ac33e0c505beffb930f (patch)
tree00017b4bd3210e868532959834d244f27d8d9d33 /app-admin/eselect-metasploit
parentVersion bump (bug #504896). (diff)
downloadgentoo-2-477ececdfa20fbebda735ac33e0c505beffb930f.tar.gz
gentoo-2-477ececdfa20fbebda735ac33e0c505beffb930f.tar.bz2
gentoo-2-477ececdfa20fbebda735ac33e0c505beffb930f.zip
improvements to the new method of handling Gemfile.lock
(Portage version: 2.2.8-r1/cvs/Linux x86_64, signed Manifest commit with key DD11F94A)
Diffstat (limited to 'app-admin/eselect-metasploit')
-rw-r--r--app-admin/eselect-metasploit/ChangeLog9
-rw-r--r--app-admin/eselect-metasploit/eselect-metasploit-0.13.ebuild41
-rw-r--r--app-admin/eselect-metasploit/files/metasploit.eselect-0.13207
-rw-r--r--app-admin/eselect-metasploit/files/msfloader-0.1332
4 files changed, 288 insertions, 1 deletions
diff --git a/app-admin/eselect-metasploit/ChangeLog b/app-admin/eselect-metasploit/ChangeLog
index 88b18ba544ab..1b485e3db076 100644
--- a/app-admin/eselect-metasploit/ChangeLog
+++ b/app-admin/eselect-metasploit/ChangeLog
@@ -1,6 +1,13 @@
# ChangeLog for app-admin/eselect-metasploit
# Copyright 1999-2014 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/app-admin/eselect-metasploit/ChangeLog,v 1.3 2014/04/25 05:24:38 zerochaos Exp $
+# $Header: /var/cvsroot/gentoo-x86/app-admin/eselect-metasploit/ChangeLog,v 1.4 2014/04/25 16:28:42 zerochaos Exp $
+
+*eselect-metasploit-0.13 (25 Apr 2014)
+
+ 25 Apr 2014; Rick Farina <zerochaos@gentoo.org>
+ +eselect-metasploit-0.13.ebuild, +files/metasploit.eselect-0.13,
+ +files/msfloader-0.13:
+ improvements to the new method of handling Gemfile.lock
25 Apr 2014; Rick Farina <zerochaos@gentoo.org> files/metasploit.eselect-0.12:
missed a debug line, removing
diff --git a/app-admin/eselect-metasploit/eselect-metasploit-0.13.ebuild b/app-admin/eselect-metasploit/eselect-metasploit-0.13.ebuild
new file mode 100644
index 000000000000..e11af87ab888
--- /dev/null
+++ b/app-admin/eselect-metasploit/eselect-metasploit-0.13.ebuild
@@ -0,0 +1,41 @@
+# Copyright 1999-2014 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/app-admin/eselect-metasploit/eselect-metasploit-0.13.ebuild,v 1.1 2014/04/25 16:28:42 zerochaos Exp $
+
+EAPI=5
+
+inherit multilib
+
+DESCRIPTION="eselect module for metasploit"
+HOMEPAGE="http://www.pentoo.ch/"
+SRC_URI=""
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~x86"
+IUSE=""
+
+DEPEND="app-admin/eselect
+ !<net-analyzer/metasploit-4.6"
+RDEPEND="${DEPEND}"
+
+S=${WORKDIR}
+
+src_install() {
+ #force to use the outdated bundled version of metasm
+ doenvd "${FILESDIR}"/91metasploit
+
+ newinitd "${FILESDIR}"/msfrpcd.initd msfrpcd
+ newconfd "${FILESDIR}"/msfrpcd.confd msfrpcd
+
+ insinto /usr/share/eselect/modules
+ newins "${FILESDIR}/metasploit.eselect-${PV}" metasploit.eselect
+
+ newbin "${FILESDIR}"/msfloader-${PV} msfloader
+}
+
+pkg_postinst() {
+ "${EROOT}"/usr/bin/eselect metasploit set --use-old 1
+ elog "To switch between installed slots, execute as root:"
+ elog " # eselect metasploit set [slot number]"
+}
diff --git a/app-admin/eselect-metasploit/files/metasploit.eselect-0.13 b/app-admin/eselect-metasploit/files/metasploit.eselect-0.13
new file mode 100644
index 000000000000..44d6f69de7a5
--- /dev/null
+++ b/app-admin/eselect-metasploit/files/metasploit.eselect-0.13
@@ -0,0 +1,207 @@
+# -*-eselect-*- vim: ft=eselect
+# Copyright 2005-2014 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2 or later
+# $
+
+DESCRIPTION="Control which metaploit version is active"
+MAINTAINER="zerochaos@pentoo.ch"
+
+###WARNING: don't even think of using this insanity for a reference (but it works,mostly)
+#base idea from kernel.eselect, get_libdir from php.eselect with --use-old from opencl.eselect
+#all modified randomly until it worked, entropy is wonderful
+###/WARNING
+
+inherit multilib
+
+get_libdir() {
+ local dir
+ if has lib64 $(list_libdirs); then
+ echo lib64
+ return
+ fi
+ echo lib
+}
+
+MSFPATH="/usr/$(get_libdir)/metasploit"
+
+# find a list of metasploit symlink targets and sort them
+find_targets() {
+ local f
+ for f in "${EROOT}${MSFPATH}"[[:digit:]]*; do
+ [[ -d ${f} ]] && basename "${f}"
+ done | LC_ALL=C sort
+}
+
+# remove the metasploit symlink
+remove_symlink() {
+ for i in $(qlist metasploit | grep $(canonicalise "${EROOT}${MSFPATH}")/msf)
+ do
+ if [ -L /usr/bin/$(echo ${i} | awk -F'/' '{print $5}') ]; then
+ unlink /usr/bin/$(echo ${i} | awk -F'/' '{print $5}') || die -q "failed to unlink ${i}"
+ fi
+ done
+ if [ -L ${EROOT}${MSFPATH} ]; then
+ unlink "${EROOT}${MSFPATH}" || die -q "failed to unlink ${EROOT}${MSFPATH}"
+ elif [ -e ${EROOT}${MSFPATH} ]; then
+ die -q "${EROOT}${MSFPATH} exists but is not a symlink"
+ fi
+}
+
+# set the metasploit symlink
+set_symlink() {
+ local target=$1
+
+ if is_number "${target}"; then
+ local targets=( $(find_targets) )
+ target=${targets[target-1]}
+ fi
+
+ if [[ -z ${target} ]]; then
+ die -q "Target \"$1\" doesn't appear to be valid!"
+ elif [[ -d ${EROOT}/usr/$(get_libdir)/${target} ]]; then
+ ln -s "${target}" "${EROOT}${MSFPATH}"
+ for i in $(qlist metasploit | grep /usr/$(get_libdir)/${target}/msf)
+ do
+ ln -s /usr/bin/msfloader /usr/bin/$(echo ${i} | awk -F'/' '{print $5}')
+ done
+ #this elif looks like it is trying to support setting by slot only,
+ #but that isn't supported by the rest of the script... fix or remove?
+ elif [[ -d ${EROOT}${MSFPATH}${target} ]]; then
+ ln -s "metasploit${target}" "${EROOT}${MSFPATH}"
+ for i in $(qlist metasploit | grep /usr/$(get_libdir)/${target}/msf)
+ do
+ ln -s /usr/bin/msfloader /usr/bin/$(echo ${i} | awk -F'/' '{print $5}')
+ done
+ else
+ die -q "Target \"$1\" doesn't appear to be valid!"
+ fi
+}
+
+# wrapper to safely set the symlink
+set_symlink_safe() {
+ if [[ -L ${EROOT}${MSFPATH} ]]; then
+ # existing symlink
+ remove_symlink || die -q "Couldn't remove existing symlink"
+ set_symlink "$1" || die -q "Couldn't set a new symlink"
+ #um, why is there an env-update here?
+ env-update
+ elif [[ -e ${EROOT}${MSFPATH} ]]; then
+ # we have something strange
+ die -q "${EROOT}${MSFPATH} exists but is not a symlink"
+ else
+ set_symlink "$1" || die -q "Couldn't set a new symlink"
+ fi
+}
+
+### show action ###
+
+describe_show() {
+ echo "Show the current metasploit symlink"
+}
+
+do_show() {
+ write_list_start "Current metasploit symlink:"
+ if [[ -L ${EROOT}${MSFPATH} ]]; then
+ local metasploit=$(canonicalise "${EROOT}${MSFPATH}")
+ write_kv_list_entry "${metasploit%/}" ""
+ else
+ write_kv_list_entry "(unset)" ""
+ fi
+}
+
+### list action ###
+
+describe_list() {
+ echo "List available metasploit symlink targets"
+}
+
+do_list() {
+ local i targets=( $(find_targets) )
+
+ write_list_start "Available metasploit symlink targets:"
+ for (( i = 0; i < ${#targets[@]}; i++ )); do
+ [[ ${targets[i]} = \
+ $(basename "$(canonicalise "${EROOT}${MSFPATH}")") ]] \
+ && targets[i]=$(highlight_marker "${targets[i]}")
+ done
+ write_numbered_list -m "(none found)" "${targets[@]}"
+}
+
+### set action ###
+
+describe_set() {
+ echo "Set a new metasploit symlink target"
+}
+
+describe_set_parameters() {
+ echo "<target>"
+}
+
+describe_set_options() {
+ echo "<target> : Target name or number (from 'list' action)"
+ echo "--use-old : If an implementation is already set, use that one instead"
+}
+
+do_set() {
+ local action="error"
+ local current=$(basename "$(canonicalise "${EROOT}${MSFPATH}")")
+ local available=( $(find_targets) )
+ local new
+ local opt
+
+ while [[ ${#@} -gt 0 ]] ; do
+ opt=$1
+ shift
+ case ${opt} in
+ --use-old)
+ if [[ -n "${current}" ]] && has "${current}" "${available[@]}"; then
+ action="old-implementation"
+ fi
+ ;;
+ metasploit*)
+ if [[ "${action}" != "old-implementation" ]] ; then
+ action="set-implementation"
+ fi
+
+ if has ${opt} ${available[@]}; then
+ new="${opt}"
+ else
+ echo "You need to emerge ${opt} before you try to eselect it"
+ fi
+ ;;
+ *)
+ if [[ "${action}" != "old-implementation" ]] ; then
+ action="set-implementation"
+ fi
+
+ if is_number ${opt} ; then
+ #targets=( $(get_implementations) )
+ new=${available[opt - 1]}
+ if [[ -z ${new} ]] ; then
+ die -q "Unrecognized option: ${opt}"
+ fi
+ else
+ die -q "Unrecognized option: ${opt}"
+ fi
+ ;;
+ esac
+ done
+
+ case ${action} in
+ old-implementation)
+ set_symlink_safe ${current}
+ return $?
+ ;;
+ set-implementation)
+ if [[ -n ${new} ]] ; then
+ set_symlink_safe ${new}
+ return $?
+ else
+ die -q "Please specify an implementation to set"
+ fi
+ ;;
+ *)
+ die -q "Invalid usage of set action."
+ ;;
+ esac
+}
diff --git a/app-admin/eselect-metasploit/files/msfloader-0.13 b/app-admin/eselect-metasploit/files/msfloader-0.13
new file mode 100644
index 000000000000..56a0c5545870
--- /dev/null
+++ b/app-admin/eselect-metasploit/files/msfloader-0.13
@@ -0,0 +1,32 @@
+#!/bin/sh
+
+#todo:
+#add in optional auto starting/stopping of postgres
+#check if Gemfile was modified before copying it EVERY time.
+
+#normally msf makes this dir, however, this script runs first
+if [ ! -d ~/.msf4 ]; then
+ mkdir ~/.msf4
+fi
+
+#we cannot control if msf* exits normally so always start with cleanup
+if [ -f ~/.msf4/Gemfile ]; then
+ rm ~/.msf4/Gemfile
+fi
+
+#fetch the latest Gemfile from the selected version of msf
+cp /usr/lib/metasploit/Gemfile ~/.msf4
+
+#ensure Gemfile.lock is up to date
+BUNDLE_GEMFILE=~/.msf4/Gemfile bundle check > /dev/null 2>&1
+if [ "$?" != "0" ]; then
+ if [ -f ~/.msf4/Gemfile.lock ]; then
+ rm ~/.msf4/Gemfile.lock
+ else
+ echo "Something went wrong, please open a bug for metasploit on https://bugs.gentoo.org"
+ fi
+fi
+
+#ready to go
+BUNDLE_GEMFILE=~/.msf4/Gemfile exec /usr/lib/metasploit/$(basename $0) "$@"
+#profit