From 6ae1a85dcd5322c27a5c17a0a3a8566b5166538c Mon Sep 17 00:00:00 2001 From: Michael Poole Date: Thu, 26 Mar 2009 02:50:39 +0000 Subject: [PATCH] Fix SourceForge bug #1722030. git-svn-id: file:///home/klmitch/undernet-ircu/undernet-ircu-svn/ircu2/branches/u2_10_12_branch@1911 c9e4aea6-c8fd-4c43-8297-357d70d61c8c --- ChangeLog | 8 ++++++++ ircd/s_auth.c | 8 ++++++++ tools/iauth-test | 13 +++++++++++++ 3 files changed, 29 insertions(+) diff --git a/ChangeLog b/ChangeLog index aec8fc8..05d0901 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2009-03-25 Michael Poole + + * ircd/s_auth.c (iauth_cmd_hostname): Properly assign the spoofed + hostname (yea, even as the "real" host) in the hurry state. + + * tools/iauth-test: Add reminder about perl's RTMIN signal and a + new handler to exercise the N command in the hurry state. + 2009-03-25 Michael Poole * ircd/channel.c (mode_parse): Add Doxygen comment. When bouncing diff --git a/ircd/s_auth.c b/ircd/s_auth.c index a000295..6ea8361 100644 --- a/ircd/s_auth.c +++ b/ircd/s_auth.c @@ -1736,6 +1736,14 @@ static int iauth_cmd_hostname(struct IAuth *iauth, struct Client *cli, } /* Set hostname from params. */ ircd_strncpy(cli_sockhost(cli), params[0], HOSTLEN); + /* If we have gotten here, the user is in a "hurry" state and has + * been pre-registered. Their hostname was set during that, and + * needs to be overwritten now. + */ + if (FlagHas(&auth->flags, AR_IAUTH_HURRY)) { + ircd_strncpy(cli_user(cli)->host, cli_sockhost(cli), HOSTLEN); + ircd_strncpy(cli_user(cli)->realhost, cli_sockhost(cli), HOSTLEN); + } return 1; } diff --git a/tools/iauth-test b/tools/iauth-test index 7013d16..78e80ab 100755 --- a/tools/iauth-test +++ b/tools/iauth-test @@ -26,6 +26,8 @@ use FileHandle; # for autoflush method on file handles # SIGRTMIN + 2 -> Set policy options ('O'). # SIGRTMIN + 3 -> Simulate config change ('a', 'A'). # SIGRTMIN + 4 -> Simulate statistics change ('s', 'S'). +# Note that Perl's value for SIGRTMIN may be different than your OS's. +# The easiest check is by running "perl -V:sig_num -V:sig_name". # In the following discussion, sX means message X from the server, and # iX means message X from iauth. The hard part is the ordering of @@ -175,6 +177,7 @@ my %handlers = ( '127.0.2.0' => { C_reply => 'N iauth.assigned.host', H_reply => 'D' }, '127.0.2.1' => { C_reply => \&ip_change }, + '127.0.2.2' => { H_reply => \&host_change_and_done }, # 127.0.3.x: iC/sP functionality. '127.0.3.0' => { C_reply => 'C :Please enter the password.', P_reply => \&passwd_check }, @@ -198,6 +201,16 @@ sub ip_change ($$) { reply 'D', $client; } +# Note to potential debuggers: You will have to change the iauth +# policy before this (or any other H_reply hooks) will have any +# effect. Do this by sending two signals of $SIG{RTMIN+2} to the +# iauth-test process, as noted near the beginning of this script. +sub host_change_and_done ($$) { + my ($client, $extra) = @_; + reply 'N iauth.assigned.host', $client; + reply 'D', $client; +} + sub passwd_check ($$) { my ($client, $extra) = @_; if ($extra eq 'secret') { -- 2.20.1