summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Volkov <pva@gentoo.org>2009-12-18 10:51:30 +0000
committerPeter Volkov <pva@gentoo.org>2009-12-18 10:51:30 +0000
commitecb50968d3babcce5c5f3311951dc683efbf3c15 (patch)
tree6a099fd96afb307fb73b07edc8ce2eb84b8f2a60 /net-analyzer/hydra
parentBug #297255 - When converting $mycmakeargs to an array inside (diff)
downloadgentoo-2-ecb50968d3babcce5c5f3311951dc683efbf3c15.tar.gz
gentoo-2-ecb50968d3babcce5c5f3311951dc683efbf3c15.tar.bz2
gentoo-2-ecb50968d3babcce5c5f3311951dc683efbf3c15.zip
Fixed compatibility issue with libssh-0.4, bug #296816, thank Willard Dawson for report and Jonathan-Christofer Demay for ideas.
(Portage version: 2.1.7.15/cvs/Linux x86_64)
Diffstat (limited to 'net-analyzer/hydra')
-rw-r--r--net-analyzer/hydra/ChangeLog9
-rw-r--r--net-analyzer/hydra/files/hydra-5.4-libssh-0.4.0.patch254
-rw-r--r--net-analyzer/hydra/hydra-5.4-r2.ebuild3
-rw-r--r--net-analyzer/hydra/hydra-5.4-r3.ebuild72
4 files changed, 336 insertions, 2 deletions
diff --git a/net-analyzer/hydra/ChangeLog b/net-analyzer/hydra/ChangeLog
index c736e5d1d849..68bbae6556a6 100644
--- a/net-analyzer/hydra/ChangeLog
+++ b/net-analyzer/hydra/ChangeLog
@@ -1,6 +1,13 @@
# ChangeLog for net-analyzer/hydra
# Copyright 1999-2009 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/net-analyzer/hydra/ChangeLog,v 1.33 2009/12/17 12:52:12 scarabeus Exp $
+# $Header: /var/cvsroot/gentoo-x86/net-analyzer/hydra/ChangeLog,v 1.34 2009/12/18 10:51:29 pva Exp $
+
+*hydra-5.4-r3 (18 Dec 2009)
+
+ 18 Dec 2009; Peter Volkov <pva@gentoo.org> hydra-5.4-r2.ebuild,
+ +hydra-5.4-r3.ebuild, +files/hydra-5.4-libssh-0.4.0.patch:
+ Fixed compatibility issue with libssh-0.4, bug #296816, thank Willard
+ Dawson for report and Jonathan-Christofer Demay for ideas.
17 Dec 2009; Tomáš Chvátal <scarabeus@gentoo.org> hydra-5.4-r2.ebuild:
Stable amd64. It was not CCed on stablebug.
diff --git a/net-analyzer/hydra/files/hydra-5.4-libssh-0.4.0.patch b/net-analyzer/hydra/files/hydra-5.4-libssh-0.4.0.patch
new file mode 100644
index 000000000000..a283fe6ee8a2
--- /dev/null
+++ b/net-analyzer/hydra/files/hydra-5.4-libssh-0.4.0.patch
@@ -0,0 +1,254 @@
+http://bugs.gentoo.org/show_bug.cgi?id=296816
+
+Author: Peter Volkov <pva@gentoo.org> with some ideas from Jonathan-Christofer Demay.
+
+=== modified file 'configure'
+--- configure 2009-12-15 08:46:59 +0000
++++ configure 2009-12-17 08:26:59 +0000
+@@ -243,11 +243,11 @@
+
+ if [ -n "$SSH_PATH" ]; then
+ echo " ... found"
+- echo 'NOTE: ensure that you have libssh v0.11 installed!! Get it from http://0xbadc0de.be !'
++ echo 'NOTE: ensure that you have libssh v0.4 or later installed!! Get it from http://www.libssh.org !'
+ fi
+ if [ "X" = "X$SSH_PATH" ]; then
+ echo " ... NOT found, module ssh2 disabled"
+- echo 'Get it from http://0xbadc0de.be/ - use v0.11!'
++ echo 'Get it from http://www.libssh.org/ - use v0.4!'
+ fi
+ if [ "$SSH_IPATH" = "/usr/include" ]; then
+ SSH_IPATH=""
+
+=== modified file 'hydra-ssh2.c'
+--- hydra-ssh2.c 2009-12-15 08:46:59 +0000
++++ hydra-ssh2.c 2009-12-18 10:21:52 +0000
+@@ -7,31 +7,70 @@
+ }
+ #else
+
+-#warning "If compilation of hydra-ssh2 fails, you are not using v0.11. Download from http://www.0xbadc0de.be/"
+-
+ #include <libssh/libssh.h>
+
+ extern char *HYDRA_EXIT;
+
++/* try to authenticate with one password */
++static int
++try_password(ssh_session ssh_session, const char *login, const char *password){
++ int auth_state;
++ int i, j, n;
++ int methods;
++
++#ifdef DEBUG_SSH2
++ printf("[DEBUG] try_password(): trying login = \"%s\", pass \"%s\"\n", login, password);
++#endif
++
++ methods = ssh_auth_list(ssh_session);
++ if (methods & SSH_AUTH_METHOD_INTERACTIVE) {
++#ifdef DEBUG_SSH2
++ printf("[DEBUG] try_password(): trying keyboard interactive method\n");
++#endif
++ auth_state = ssh_userauth_kbdint(ssh_session, login, NULL);
++ /* For safety we'll limit number of prompts to 33 */
++ for(j=0; auth_state == SSH_AUTH_INFO && j<33; j++) {
++ n=ssh_userauth_kbdint_getnprompts(ssh_session);
++ for(i=0; i<n; ++i) {
++ ssh_userauth_kbdint_setanswer(ssh_session, i, password);
++ }
++ auth_state = ssh_userauth_kbdint(ssh_session, login, NULL);
++ }
++ /* Password is valid but an other authentication token is needed */
++ if(auth_state == SSH_AUTH_PARTIAL
++ || auth_state == SSH_AUTH_SUCCESS)
++ return SSH_AUTH_SUCCESS;
++ }
++
++ if (methods & SSH_AUTH_METHOD_PASSWORD) {
++#ifdef DEBUG_SSH2
++ printf("[DEBUG] try_password(): trying password method\n");
++#endif
++ auth_state = ssh_userauth_password(ssh_session, login, password);
++ if(auth_state == SSH_AUTH_PARTIAL
++ || auth_state == SSH_AUTH_SUCCESS)
++ return SSH_AUTH_SUCCESS;
++ }
++ return auth_state;
++}
++
++
+ int
+-start_ssh2(int s, unsigned long int ip, int port, unsigned char options, char *miscptr, FILE * fp)
++start_ssh2(int s, unsigned long int ip, int port, unsigned char options, char *miscptr, FILE * fp, char *libssh_error)
+ {
+ char *empty = "";
+- char *login, *pass;
++ char *login, *pass, prev_login[260];
+ char *buf;
+- char *rc;
+ struct sockaddr_in targetip;
+- SSH_SESSION *ssh_session;
+- SSH_OPTIONS *ssh_opt;
++ ssh_session ssh_session = ssh_new();
+ int auth_state;
+- int i = 0;
+
+ if (strlen(login = hydra_get_next_login()) == 0)
+ login = empty;
++ strcpy(prev_login, login);
+ if (strlen(pass = hydra_get_next_password()) == 0)
+ pass = empty;
+
+- ssh_opt=options_new();
+ memset(&targetip, 0, sizeof(targetip));
+ memcpy(&targetip.sin_addr.s_addr, &ip, 4);
+ targetip.sin_family = AF_INET;
+@@ -41,62 +80,79 @@
+ buf = malloc(20);
+ inet_ntop(AF_INET, &targetip.sin_addr, buf, 20);
+ #endif
+- options_set_wanted_method(ssh_opt,KEX_COMP_C_S,"none");
+- options_set_wanted_method(ssh_opt,KEX_COMP_S_C,"none");
+- options_set_port(ssh_opt, port);
+- options_set_host(ssh_opt, buf);
+- options_set_username(ssh_opt, login);
+-
+- if ((ssh_session = ssh_connect(ssh_opt)) == NULL) {
+- rc = ssh_get_error(ssh_session);
+- if ((rc != NULL) && (rc[0] != '\0')) {
+- if (strncmp("connect:", ssh_get_error(ssh_session), strlen("connect:")) == 0)
+- return 3;
+- else
+- return 4;
+- }
++
++#ifdef DEBUG_SSH2
++ printf("[DEBUG] ssh_options_set host=%s:%d, login=%s.\n", buf, port, login);
++#endif
++ ssh_options_set(ssh_session, SSH_OPTIONS_HOST, buf);
++ ssh_options_set(ssh_session, SSH_OPTIONS_PORT, &port);
++ ssh_options_set(ssh_session, SSH_OPTIONS_USER, login);
++ ssh_options_set(ssh_session, SSH_OPTIONS_COMPRESSION_C_S, "none");
++ ssh_options_set(ssh_session, SSH_OPTIONS_COMPRESSION_S_C, "none");
++
++ if ( ssh_connect(ssh_session) != SSH_OK ) {
++#ifdef DEBUG_SSH2
++ printf("[DEBUG] ssh_connect(ssh_session) != SSH_OK\n");
++#endif
++ strcpy(libssh_error,ssh_get_error(ssh_session));
++ ssh_disconnect(ssh_session);
++ return 3;
+ }
+ #ifndef CYGWIN
+ free(buf);
+ buf = NULL;
+ #endif
+
++ /* Try 'none' method for passwordless servers */
++ auth_state = ssh_userauth_none(ssh_session, login);
++#ifdef DEBUG_SSH2
++ printf("[DEBUG] ssh_userauth_none (0) state = %d\n", auth_state);
++#endif
+ do {
+- /* why this crap? */
+- auth_state = ssh_userauth_kbdint(ssh_session, login, NULL);
+- while (i < 10 && auth_state == SSH_AUTH_INFO) {
+- ssh_userauth_kbdint_setanswer(ssh_session, i, pass);
+- auth_state = ssh_userauth_kbdint(ssh_session, login, NULL);
+- i++;
+- }
+-
+- if (auth_state == SSH_AUTH_SUCCESS || ssh_userauth_password(ssh_session, login, pass) == SSH_AUTH_SUCCESS) {
+- ssh_disconnect(ssh_session); /* this automagically frees the ssh_opt buffer */
++ if (auth_state != SSH_AUTH_SUCCESS)
++ auth_state = try_password(ssh_session, login, pass);
++#ifdef DEBUG_SSH2
++ printf("[DEBUG] try_password returned auth_state = %d\n", auth_state);
++#endif
++ if (auth_state == SSH_AUTH_SUCCESS) {
++ ssh_disconnect(ssh_session);
+ hydra_report_found_host(port, ip, "ssh2", fp);
+ hydra_completed_pair_found();
+ if (memcmp(hydra_get_next_pair(), &HYDRA_EXIT, sizeof(HYDRA_EXIT)) == 0)
+ return 2;
+- /* free(ssh_opt); */ /* DOUBLE FREE ! */
+ return 1;
++ }
++ if (auth_state == SSH_AUTH_DENIED) {
++ hydra_completed_pair();
++ if (memcmp(hydra_get_next_pair(), &HYDRA_EXIT, sizeof(HYDRA_EXIT)) == 0) {
++ ssh_disconnect(ssh_session);
++ return 2;
++ }
++ if (strlen(login = hydra_get_next_login()) == 0)
++ login = empty;
++
++ if(strcmp(login,prev_login) != 0) {
++ ssh_disconnect(ssh_session);
++#ifdef DEBUG_SSH2
++ printf("[DEBUG] new login (%s): we have to restart ssh sessionte\n", login);
++#endif
++ return 1;
++ }
++ if (strlen(pass = hydra_get_next_password()) == 0)
++ pass = empty;
+ } else {
+- if (ssh_error_code(ssh_session) == 1) {
+- hydra_completed_pair();
+- if (memcmp(hydra_get_next_pair(), &HYDRA_EXIT, sizeof(HYDRA_EXIT)) == 0)
+- return 2;
+- } else {
+- ssh_disconnect(ssh_session); /* this automagically frees the ssh_opt buffer */
+- hydra_completed_pair(); /* really? */
+- if (memcmp(hydra_get_next_pair(), &HYDRA_EXIT, sizeof(HYDRA_EXIT)) == 0)
+- return 2;
+- /* free(ssh_opt); */ /* DOUBLE FREE ! */
+- return 1;
+- }
++#ifdef DEBUG_SSH2
++ printf("[DEBUG] ssh session problem (%d)\n", auth_state);
++#endif
++ hydra_completed_pair(); /* really? */
++ ssh_disconnect(ssh_session);
++ if (memcmp(hydra_get_next_pair(), &HYDRA_EXIT, sizeof(HYDRA_EXIT)) == 0)
++ return 2;
++ return 1;
+ }
+ } while(1);
+
+ /* not reached */
+-
+- /* free(ssh_opt); */ /* risk of double free */
+ return 1;
+ }
+
+@@ -104,6 +160,7 @@
+ service_ssh2(unsigned long int ip, int sp, unsigned char options, char *miscptr, FILE * fp, int port)
+ {
+ int run = 1, next_run = 1, sock = -1;
++ char libssh_error[1024]; /* check ERROR_BUFFERLEN in libssh */
+
+ hydra_register_socket(sp);
+ if (memcmp(hydra_get_next_pair(), &HYDRA_EXIT, sizeof(HYDRA_EXIT)) == 0)
+@@ -111,16 +168,15 @@
+ while (1) {
+ switch (run) {
+ case 1: /* connect and service init function */
+- next_run = start_ssh2(sock, ip, port, options, miscptr, fp);
++ next_run = start_ssh2(sock, ip, port, options, miscptr, fp, libssh_error);
+ break;
+ case 2:
+ hydra_child_exit(0);
++ break;
+ case 3: /* clean exit */
+- fprintf(stderr, "Error: could not connect to target port %d\n", port);
++ fprintf(stderr, "ssh_connect failed: %s\n", libssh_error);
+ hydra_child_exit(1);
+- case 4:
+- fprintf(stderr, "Error: ssh2 protocol error\n");
+- hydra_child_exit(2);
++ break;
+ default:
+ hydra_report(stderr, "Caught unknown return code, exiting!\n");
+ hydra_child_exit(-1);
+
diff --git a/net-analyzer/hydra/hydra-5.4-r2.ebuild b/net-analyzer/hydra/hydra-5.4-r2.ebuild
index f4355101b0f6..cb673851d0bb 100644
--- a/net-analyzer/hydra/hydra-5.4-r2.ebuild
+++ b/net-analyzer/hydra/hydra-5.4-r2.ebuild
@@ -1,6 +1,6 @@
# Copyright 1999-2009 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/net-analyzer/hydra/hydra-5.4-r2.ebuild,v 1.4 2009/12/17 12:52:12 scarabeus Exp $
+# $Header: /var/cvsroot/gentoo-x86/net-analyzer/hydra/hydra-5.4-r2.ebuild,v 1.5 2009/12/18 10:51:29 pva Exp $
inherit eutils
@@ -17,6 +17,7 @@ DEPEND="gtk? ( >=x11-libs/gtk+-1.2 )
ssl? (
dev-libs/openssl
>=net-libs/libssh-0.2
+ <net-libs/libssh-0.4.0
)"
S=${WORKDIR}/${P}-src
diff --git a/net-analyzer/hydra/hydra-5.4-r3.ebuild b/net-analyzer/hydra/hydra-5.4-r3.ebuild
new file mode 100644
index 000000000000..81e03ec0c9e7
--- /dev/null
+++ b/net-analyzer/hydra/hydra-5.4-r3.ebuild
@@ -0,0 +1,72 @@
+# Copyright 1999-2009 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/net-analyzer/hydra/hydra-5.4-r3.ebuild,v 1.1 2009/12/18 10:51:29 pva Exp $
+
+EAPI="2"
+inherit eutils
+
+DESCRIPTION="Advanced parallized login hacker"
+HOMEPAGE="http://www.thc.org/thc-hydra/"
+SRC_URI="http://www.thc.org/releases/${P}-src.tar.gz"
+
+LICENSE="HYDRA GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~ppc ~x86"
+IUSE="gtk ssl"
+
+DEPEND="gtk? ( >=x11-libs/gtk+-1.2 )
+ ssl? (
+ dev-libs/openssl
+ >=net-libs/libssh-0.4.0
+ )"
+
+S=${WORKDIR}/${P}-src
+
+src_prepare() {
+ sed -i "s:-O2:${CFLAGS}:" Makefile.am || die "sed failed"
+ epatch "${FILESDIR}/${P}-_FORTIFY_SOURCE.patch"
+ epatch "${FILESDIR}/${P}-free-without-malloc.patch"
+ epatch "${FILESDIR}/${P}-libssh-0.4.0.patch"
+}
+
+src_configure() {
+ ./configure \
+ --prefix=/usr \
+ $(use gtk && echo --disable-xhydra) \
+ || die "configure failed"
+
+ sed -i \
+ -e '/^XDEFINES=/s:=.*:=:' \
+ -e '/^XLIBS=/s:=.*:=:' \
+ -e '/^XLIBPATHS/s:=.*:=:' \
+ -e '/^XIPATHS=/s:=.*:=:' \
+ Makefile || die "pruning vars"
+
+ if use ssl ; then
+ sed -i \
+ -e '/^XDEFINES=/s:=:=-DLIBOPENSSL -DLIBSSH:' \
+ -e '/^XLIBS=/s:=:=-lcrypto -lssl -lssh:' \
+ Makefile || die "adding ssl"
+ fi
+
+ if use gtk ; then
+ cd hydra-gtk && \
+ econf
+ fi
+}
+
+src_compile() {
+ emake || die "make failed"
+ if use gtk ; then
+ cd hydra-gtk && \
+ emake || die "emake hydra-gtk failed"
+ fi
+}
+
+src_install() {
+ dobin hydra pw-inspector || die "dobin failed"
+ if use gtk ; then
+ dobin hydra-gtk/src/xhydra || die "gtk"
+ fi
+ dodoc CHANGES README TODO
+}