commit - 53fc0ebff6fe09bb6a3ae3b134647b3499fc6618
commit + 6e8cf51bb216f956e7a6fdb5c61b0f2799bf8d2d
blob - b945224efdec1bc6e5d1d55b2cd7067639fdcd40
blob + db326c98c47d15dfc4e2fc707873f7e9f573bab8
--- doc/sample-ngircd.conf
+++ doc/sample-ngircd.conf
# LINKS requests for example.
Info = Server Info Text
- # Global password for all users needed to connect to the server
+ # Global password for all users needed to connect to the server.
+ # (Default: not set)
;Password = abc
+
+ # Password required for using the WEBIRC command used by some
+ # Web-to-IRC gateways. If not set/empty, the WEBIRC command can't
+ # be used. (Default: not set)
+ ;WebircPassword = xyz
# Information about the server and the administrator, used by the
# ADMIN command. Not required by server but by RFC!
blob - 4d55592d148f9f34294a251bc3d43d78c1ae6cc5
blob + 46e0308a3f3e9fce27cd18f652dc0b2a1606648f
--- man/ngircd.conf.5.tmpl
+++ man/ngircd.conf.5.tmpl
Global password for all users needed to connect to the server. The default
is empty, so no password is required.
.TP
+\fBWebircPassword\fR
+Password required for using the WEBIRC command used by some Web-to-IRC
+gateways. If not set or empty, the WEBIRC command can't be used.
+Default: not set.
+.TP
\fBAdminInfo1\fR, \fBAdminInfo2\fR, \fBAdminEMail\fR
Information about the server and the administrator, used by the ADMIN
command.
blob - fae2a28c453efc943e419526fd72fecbb864d789
blob + 694b5d469bfa47d00b5da0075e199ff41186aad5
--- src/ngircd/conf.c
+++ src/ngircd/conf.c
/*
* ngIRCd -- The Next Generation IRC Daemon
- * Copyright (c)2001-2009 Alexander Barton (alex@barton.de)
+ * Copyright (c)2001-2010 Alexander Barton (alex@barton.de)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
}
puts( "[GLOBAL]" );
- printf( " Name = %s\n", Conf_ServerName );
- printf( " Info = %s\n", Conf_ServerInfo );
- printf( " Password = %s\n", Conf_ServerPwd );
- printf( " AdminInfo1 = %s\n", Conf_ServerAdmin1 );
- printf( " AdminInfo2 = %s\n", Conf_ServerAdmin2 );
- printf( " AdminEMail = %s\n", Conf_ServerAdminMail );
- printf( " MotdFile = %s\n", Conf_MotdFile );
- printf( " MotdPhrase = %s\n", Conf_MotdPhrase );
- printf( " ChrootDir = %s\n", Conf_Chroot );
- printf( " PidFile = %s\n", Conf_PidFile);
+ printf(" Name = %s\n", Conf_ServerName);
+ printf(" Info = %s\n", Conf_ServerInfo);
+ printf(" Password = %s\n", Conf_ServerPwd);
+ printf(" WebircPassword = %s\n", Conf_WebircPwd);
+ printf(" AdminInfo1 = %s\n", Conf_ServerAdmin1);
+ printf(" AdminInfo2 = %s\n", Conf_ServerAdmin2);
+ printf(" AdminEMail = %s\n", Conf_ServerAdminMail);
+ printf(" MotdFile = %s\n", Conf_MotdFile);
+ printf(" MotdPhrase = %s\n", Conf_MotdPhrase);
+ printf(" ChrootDir = %s\n", Conf_Chroot);
+ printf(" PidFile = %s\n", Conf_PidFile);
printf(" Listen = %s\n", Conf_ListenAddress);
fputs(" Ports = ", stdout);
ports_puts(&Conf_ListenPorts);
Config_Error_TooLong( Line, Var );
return;
}
+ if (strcasecmp(Var, "WebircPassword") == 0) {
+ /* Password required for WEBIRC command */
+ len = strlcpy(Conf_WebircPwd, Arg, sizeof(Conf_WebircPwd));
+ if (len >= sizeof(Conf_WebircPwd))
+ Config_Error_TooLong(Line, Var);
+ return;
+ }
if( strcasecmp( Var, "AdminInfo1" ) == 0 ) {
/* Administrative info #1 */
len = strlcpy( Conf_ServerAdmin1, Arg, sizeof( Conf_ServerAdmin1 ));
blob - 0180515569dcbf5515211437776a3a25a460fca3
blob + 5764d0f3556249441387bff87e452918b1049e2a
--- src/ngircd/conf.h
+++ src/ngircd/conf.h
/*
* ngIRCd -- The Next Generation IRC Daemon
- * Copyright (c)2001-2008 Alexander Barton (alex@barton.de)
+ * Copyright (c)2001-2010 Alexander Barton (alex@barton.de)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
GLOBAL bool Conf_IsService PARAMS((int ConfServer, const char *Nick));
+/* Password required by WEBIRC command */
+GLOBAL char Conf_WebircPwd[CLIENT_PASS_LEN];
+
#endif
blob - 1e4ba0abd7604397e3ad8fa2d2a8ba1b84343be8
blob + cd350a8d619700a2ca89034b5a05b132df6cba36
--- src/ngircd/conn.c
+++ src/ngircd/conn.c
c = Conn_GetClient( i );
assert( c != NULL );
- /* Only update client information of unregistered clients */
- if( Client_Type( c ) == CLIENT_UNKNOWN ) {
- strlcpy(My_Connections[i].host, readbuf, sizeof( My_Connections[i].host));
- Client_SetHostname( c, readbuf);
+ /* Only update client information of unregistered clients.
+ * Note: user commands (e. g. WEBIRC) are always read _after_ reading
+ * the resolver results, so we don't have to worry to override settings
+ * from these commands here. */
+ if(Client_Type(c) == CLIENT_UNKNOWN) {
+ strlcpy(My_Connections[i].host, readbuf,
+ sizeof(My_Connections[i].host));
+ Client_SetHostname(c, readbuf);
#ifdef IDENTAUTH
++identptr;
if (*identptr) {
blob - 7b73d40f99f285a5e9da7951ccc6b88be96061cb
blob + 2de4bd584bec73e4a081d284a67c5d52332b5392
--- src/ngircd/irc-login.c
+++ src/ngircd/irc-login.c
/*
* ngIRCd -- The Next Generation IRC Daemon
- * Copyright (c)2001-2008 Alexander Barton (alex@barton.de)
+ * Copyright (c)2001-2010 Alexander Barton (alex@barton.de)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
} /* IRC_SERVICE */
+/**
+ * Handler for the IRC command "WEBIRC".
+ * Syntax: WEBIRC <password> <username> <real-hostname> <real-IP-address>
+ */
GLOBAL bool
+IRC_WEBIRC(CLIENT *Client, REQUEST *Req)
+{
+ /* Exactly 4 parameters are requited */
+ if (Req->argc != 4)
+ return IRC_WriteStrClient(Client, ERR_NEEDMOREPARAMS_MSG,
+ Client_ID(Client), Req->command);
+
+ if (!Conf_WebircPwd[0] || strcmp(Req->argv[0], Conf_WebircPwd) != 0)
+ return IRC_WriteStrClient(Client, ERR_PASSWDMISMATCH_MSG,
+ Client_ID(Client));
+
+ LogDebug("Connection %d: got valid WEBIRC command: user=%s, host=%s, ip=%s",
+ Client_Conn(Client), Req->argv[1], Req->argv[2], Req->argv[3]);
+
+ Client_SetUser(Client, Req->argv[1], true);
+ Client_SetHostname(Client, Req->argv[2]);
+ return CONNECTED;
+} /* IRC_WEBIRC */
+
+
+GLOBAL bool
IRC_QUIT( CLIENT *Client, REQUEST *Req )
{
CLIENT *target;
blob - 0b920380ae919808acfae0f81cdd5620c1b9e5cd
blob + 1504e0b7317a0d48e32c991bf57dd11fa622ca7b
--- src/ngircd/irc-login.h
+++ src/ngircd/irc-login.h
/*
* ngIRCd -- The Next Generation IRC Daemon
- * Copyright (c)2001-2008 Alexander Barton (alex@barton.de)
+ * Copyright (c)2001-2010 Alexander Barton (alex@barton.de)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
GLOBAL bool IRC_NICK PARAMS((CLIENT *Client, REQUEST *Req));
GLOBAL bool IRC_USER PARAMS((CLIENT *Client, REQUEST *Req));
GLOBAL bool IRC_SERVICE PARAMS((CLIENT *Client, REQUEST *Req));
+GLOBAL bool IRC_WEBIRC PARAMS((CLIENT *Client, REQUEST *Req));
GLOBAL bool IRC_PING PARAMS((CLIENT *Client, REQUEST *Req));
GLOBAL bool IRC_PONG PARAMS((CLIENT *Client, REQUEST *Req));
GLOBAL bool IRC_QUIT PARAMS((CLIENT *Client, REQUEST *Req));
blob - 2c28a309a0bebf39076b06450a98ac0d5fdc1265
blob + 3710d70c494d07972d3198245a00e0dd445bb719
--- src/ngircd/parse.c
+++ src/ngircd/parse.c
/*
* ngIRCd -- The Next Generation IRC Daemon
- * Copyright (c)2001-2008 Alexander Barton (alex@barton.de)
+ * Copyright (c)2001-2010 Alexander Barton (alex@barton.de)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
{ "USERS", IRC_USERS, CLIENT_USER|CLIENT_SERVER, 0, 0, 0 },
{ "VERSION", IRC_VERSION, CLIENT_USER|CLIENT_SERVER, 0, 0, 0 },
{ "WALLOPS", IRC_WALLOPS, CLIENT_USER|CLIENT_SERVER, 0, 0, 0 },
+ { "WEBIRC", IRC_WEBIRC, CLIENT_UNKNOWN, 0, 0, 0 },
{ "WHO", IRC_WHO, CLIENT_USER, 0, 0, 0 },
{ "WHOIS", IRC_WHOIS, CLIENT_USER|CLIENT_SERVER, 0, 0, 0 },
{ "WHOWAS", IRC_WHOWAS, CLIENT_USER|CLIENT_SERVER, 0, 0, 0 },