[IRCServices] ircservices 5.1.11 RFC 1459 protocol module broken?
Jille Timmermans
jille at quis.cx
Fri Nov 7 09:03:48 PST 2008
Hello,
I think you are wrong.
The IRC protocol first registers all users through an 8(?)-argument
NICK-command. The NICK command with only 2 parameters (:oldnick NICK
newnick :timestamp) is used to notify other servers of nick-changes.
The long NICK-command is used to add new nicknames.
And of course there should be nicknames registered before they can change ;)
The USER command does not even exists in server to server mode iirc.
about the ac == 5: probably ac[0] == "USER" (the command himself)
-- Jille
Note; after writing this email I realize I am used to UnrealIRCd; so I'm
not sure whether I am correct, sorry.
Alexander Barton schreef:
> Hello!
>
> I'm working on getting ngIRCd connected to the ircservices 5.1.11
> package, at the moment I'm using the RFC 1459 protocol module and
> enhanced ngIRCd to understand server and user registration according
> to this older RFC.
>
> Thereby I encountered a problem: ircservices all the time answered
> with the following error message:
>
> ----------> cut here <----------
> debug: Received: :a.irc.net PASS srvPWD 0210-IRC+ ngircd|dev:CHLZ PZ
> debug: Received: :a.irc.net SERVER a.irc.net 1 :A Server Info Text
> debug: Received: NICK test :1
> debug: Received: :test USER ~alex localhost a.irc.net :Alex
> debug: Received: :test MODE test :+w
> debug: user: MODE +w for nonexistent nick test from test: test +w
> ----------> cut here <----------
>
> "nonexistent nick test" ... hm!?
>
> Digging through the source code of ircservices, I found the folowing
> code in modules/protocol/rfc1459.c, line 42 ff.:
>
> ----------> cut here <----------
> static void m_user(char *source, int ac, char **av)
> {
> char *new_av[7];
> if (ac != 5)
> return;
> ----------> cut here <---------
>
> So this function checks if the USER command das 5(!) parameters. BUT:
> according to RFC 1459 the USER command only has 4 parameters, see
> section 4.1.3:
>
> ----------> cut here <----------
> 4.1.3 User message
>
> Command: USER
> Parameters: <username> <hostname> <servername> <realname>
>
> [...]
> ----------> cut here <----------
>
> So the above mentioned test in ircservices always silently failed.
>
> Proposed patch:
>
> ----------> cut here <----------
> --- rfc1459.c.ORIG 2008-08-13 21:28:33.000000000 +0200
> +++ rfc1459.c 2008-08-13 21:27:51.000000000 +0200
> @@ -43,8 +43,11 @@ static void m_user(char *source, int ac,
> {
> char *new_av[7];
>
> - if (ac != 5)
> + if (ac != 4) {
> + module_log_debug(1, "USER message: wrong number of parameters"
> + " (%d) for source `%s'", ac, source ?
> source : "?");
> return;
> + }
> new_av[0] = source; /* Nickname */
> new_av[1] = (char *)"0"; /* # of hops (was in NICK command... we
> lose) */
> new_av[2] = (char *)"0"; /* Timestamp */
> ----------> cut here <----------
>
> Can you tell me if I'm correct? Or do I overlook something?
>
> And can you tell me which protocol module is the "most advanced" or
> "best"?
>
> Thanks a lot!
> Alex
> ------------------------------------------------------------------
> To unsubscribe or change your subscription options, visit:
> http://lists.ircservices.za.net/mailman/listinfo/ircservices