[srvx-devel] diff/patch for opserv.c which fixes various nickname too long bugs
Brought to you by:
entrope
|
From: Byte <by...@zl...> - 2002-05-26 02:56:03
|
Hi,
?clone add <long nickname> ...
?collide <long nickname> ...
?reserve <long nickname> ...
This stops nicknames which are too long from squitting srvx before its
started,
the previous behaviour did no checking of the nick length,
which meant that it was only checked in hash.c,
from AddClone/etc. calling AddUser, and adduser squits srvx if the nick is
too long.
I've emailed entrope about this before, and he is insistent that its not a
bug,
saying he doesnt want irc protocol in opserv, (this change makes opserv
check 'nicklen' :/)
I think its a potential problem, if a clone is added, and the nickname is
accidentally too long,
it would squit srvx, which isn't good on a real network, is it?
Here is the diff/patch:
(~/services/src)
$ diff -c1 opserv.c-old opserv.c
*** opserv.c-old Wed May 22 16:36:31 2002
--- opserv.c Wed May 22 16:51:10 2002
***************
*** 198,200 ****
--- 198,202 ----
#define OSMSG_COLLIDED_NICK "Now temporarily holding nick `%s'"
+ #define OSMSG_COLLIDED_NICKTOOLONG "Not temporarily holding nick `%s':
nickname too long"
#define OSMSG_RESERVED_NICK "Now reserving nick `%s'"
+ #define OSMSG_RESERVED_NICKTOOLONG "Not reserving nick `%s': nickname
too long"
#define OSMSG_NICK_RESERVED "Nick is reserved."
***************
*** 210,211 ****
--- 212,214 ----
#define OSMSG_CLONE_ADDED "Added clone `%s'."
+ #define OSMSG_CLONE_NICKTOOLONG "Clone `%s' not added: nickname is
too long."
#define OSMSG_NOT_A_CLONE "Har har. `%s' isn't a clone."
***************
*** 2032,2039 ****
unsplit_string(argv+4, argc-4);
! resv = opserv_add_reserve(user, argv[1], argv[2], argv[3], argv[4]);
! if (resv) {
! opserv_notice(user, OSMSG_COLLIDED_NICK, resv->nick);
! return 1;
} else {
! return 0;
}
--- 2035,2047 ----
unsplit_string(argv+4, argc-4);
! if (strlen(argv[1]) > nicklen) {
! opserv_notice(user, OSMSG_COLLIDED_NICKTOOLONG, argv[1]);
! return 0;
} else {
! resv = opserv_add_reserve(user, argv[1], argv[2], argv[3], argv[4]);
! if (resv) {
! opserv_notice(user, OSMSG_COLLIDED_NICK, resv->nick);
! return 1;
! } else {
! return 0;
! }
}
***************
*** 2048,2056 ****
unsplit_string(argv+4, argc-4);
! resv = opserv_add_reserve(user, argv[1], argv[2], argv[3], argv[4]);
! if (resv) {
! resv->modes |= FLAGS_PERSISTENT;
! opserv_notice(user, OSMSG_RESERVED_NICK, resv->nick);
! return 1;
} else {
! return 0;
}
--- 2056,2069 ----
unsplit_string(argv+4, argc-4);
! if (strlen(argv[1]) > nicklen) {
! opserv_notice(user, OSMSG_RESERVED_NICKTOOLONG, argv[1]);
! return 0;
} else {
! resv = opserv_add_reserve(user, argv[1], argv[2], argv[3], argv[4]);
! if (resv) {
! resv->modes |= FLAGS_PERSISTENT;
! opserv_notice(user, OSMSG_RESERVED_NICK, resv->nick);
! return 1;
! } else {
! return 0;
! }
}
***************
*** 2455,2458 ****
}
! clone = AddClone(argv[2], argv[3], argv[3]+i, argv[4]);
! opserv_notice(user, OSMSG_CLONE_ADDED, clone->nick);
return 1;
--- 2468,2476 ----
}
! if (strlen(argv[2]) > nicklen) {
! opserv_notice(user, OSMSG_CLONE_NICKTOOLONG, argv[2]);
! return 0;
! } else {
! clone = AddClone(argv[2], argv[3], argv[3]+i, argv[4]);
! opserv_notice(user, OSMSG_CLONE_ADDED, clone->nick);
! }
return 1;
_______________________________________________
Byte
by...@zl...
http://byte.zlined.org/
_______________________________________________
http://pgp.zlined.org/Byte.asc
19-May-2002 16:21:15
-----BEGIN PGP SIGNATURE-----
Version: PGP Personal Privacy 6.5.8
iQA/AwUAPOa6jUCsucq83bnYEQK0ggCggDUPkEwQfdVoszNw/YiuSkDVG1QAniOB
+EoAWEhBXIpuNQuG9fIug2rv
=T2wY
-----END PGP SIGNATURE-----
|