[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----- |