CVSROOT : /cvsroot/undernet-ircu Module : ircu2.10 Branch tags: u2_10_11_03 Commit time: 2002-11-23 19:46:01 UTC
Modified files: Tag: u2_10_11_03 ChangeLog include/client.h include/whocmds.h ircd/client.c ircd/s_bsd.c Log message: Author: Kev <[EMAIL PROTECTED]> Log message: Fix a bug with Entrope's patch--a SetFlag() in deliver_it() than should have been a ClrFlag(). Bug resulted in crashes on /restart and probably other nastiness. Fixed a long-standing bug in SEE_LUSER()--PRIV_SHOW_INVIS and PRIV_SHOW_ALL_INVIS were or'd together in the argument to a HasPriv() macro, which made those privileges of little use. Use an enum for Privileges, like Entrope's enum Flag. ---------------------- diff included ---------------------- Index: ircu2.10/ChangeLog diff -u ircu2.10/ChangeLog:1.290.2.125.2.17 ircu2.10/ChangeLog:1.290.2.125.2.18 --- ircu2.10/ChangeLog:1.290.2.125.2.17 Sat Nov 23 11:05:07 2002 +++ ircu2.10/ChangeLog Sat Nov 23 11:45:49 2002 @@ -1,5 +1,20 @@ 2002-11-23 Kevin L Mitchell <[EMAIL PROTECTED]> + * ircd/s_bsd.c (deliver_it): this should have been a ClrFlag(), + not a SetFlag()--caused crashes on /restart and probably other + nastiness + + * ircd/client.c (client_set_privs): must count up through + PRIV_LAST_PRIV rather than 0, since we *start* at zero + + * include/client.h: I was so inspired by the use of enum Flag by + Entrope that I decided to use an enum for privileges as well + + * include/whocmds.h (SEE_LUSER): correct a bug in SEE_LUSER with + regard to the PRIV_SHOW_INVIS / PRIV_SHOW_ALL_INVIS privileges + + * ircd/client.c: use enum Priv for privilage table + * include/client.h: remove a comma from the end of the enumerator list--resulted in a gcc warning. Index: ircu2.10/include/client.h diff -u ircu2.10/include/client.h:1.23.2.4.8.1 ircu2.10/include/client.h:1.23.2.4.8.2 --- ircu2.10/include/client.h:1.23.2.4.8.1 Sat Nov 23 11:05:07 2002 +++ ircu2.10/include/client.h Sat Nov 23 11:45:50 2002 @@ -18,7 +18,7 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * - * $Id: client.h,v 1.23.2.4.8.1 2002/11/23 19:05:07 klmitch Exp $ + * $Id: client.h,v 1.23.2.4.8.2 2002/11/23 19:45:50 klmitch Exp $ */ #ifndef INCLUDED_client_h #define INCLUDED_client_h @@ -66,41 +66,43 @@ * source file, or in the source file itself (when only used in that file). */ -#define PRIV_CHAN_LIMIT 1 /* no channel limit on oper */ -#define PRIV_MODE_LCHAN 2 /* oper can mode local chans */ -#define PRIV_WALK_LCHAN 3 /* oper can walk thru local modes */ -#define PRIV_DEOP_LCHAN 4 /* no deop oper on local chans */ -#define PRIV_SHOW_INVIS 5 /* show local invisible users */ -#define PRIV_SHOW_ALL_INVIS 6 /* show all invisible users */ -#define PRIV_UNLIMIT_QUERY 7 /* unlimit who queries */ - -#define PRIV_KILL 8 /* oper can KILL */ -#define PRIV_LOCAL_KILL 9 /* oper can local KILL */ -#define PRIV_REHASH 10 /* oper can REHASH */ -#define PRIV_RESTART 11 /* oper can RESTART */ -#define PRIV_DIE 12 /* oper can DIE */ -#define PRIV_GLINE 13 /* oper can GLINE */ -#define PRIV_LOCAL_GLINE 14 /* oper can local GLINE */ -#define PRIV_JUPE 15 /* oper can JUPE */ -#define PRIV_LOCAL_JUPE 16 /* oper can local JUPE */ -#define PRIV_OPMODE 17 /* oper can OP/CLEARMODE */ -#define PRIV_LOCAL_OPMODE 18 /* oper can local OP/CLEARMODE */ -#define PRIV_SET 19 /* oper can SET */ -#define PRIV_WHOX 20 /* oper can use /who x */ -#define PRIV_BADCHAN 21 /* oper can BADCHAN */ -#define PRIV_LOCAL_BADCHAN 22 /* oper can local BADCHAN */ -#define PRIV_SEE_CHAN 23 /* oper can see in secret chans */ - -#define PRIV_PROPAGATE 24 /* propagate oper status */ -#define PRIV_DISPLAY 25 /* "Is an oper" displayed */ -#define PRIV_SEE_OPERS 26 /* display hidden opers */ +enum Priv { + PRIV_CHAN_LIMIT, /* no channel limit on oper */ + PRIV_MODE_LCHAN, /* oper can mode local chans */ + PRIV_WALK_LCHAN, /* oper can walk thru local modes */ + PRIV_DEOP_LCHAN, /* no deop oper on local chans */ + PRIV_SHOW_INVIS, /* show local invisible users */ + PRIV_SHOW_ALL_INVIS, /* show all invisible users */ + PRIV_UNLIMIT_QUERY, /* unlimit who queries */ + + PRIV_KILL, /* oper can KILL */ + PRIV_LOCAL_KILL, /* oper can local KILL */ + PRIV_REHASH, /* oper can REHASH */ + PRIV_RESTART, /* oper can RESTART */ + PRIV_DIE, /* oper can DIE */ + PRIV_GLINE, /* oper can GLINE */ + PRIV_LOCAL_GLINE, /* oper can local GLINE */ + PRIV_JUPE, /* oper can JUPE */ + PRIV_LOCAL_JUPE, /* oper can local JUPE */ + PRIV_OPMODE, /* oper can OP/CLEARMODE */ + PRIV_LOCAL_OPMODE, /* oper can local OP/CLEARMODE */ + PRIV_SET, /* oper can SET */ + PRIV_WHOX, /* oper can use /who x */ + PRIV_BADCHAN, /* oper can BADCHAN */ + PRIV_LOCAL_BADCHAN, /* oper can local BADCHAN */ + PRIV_SEE_CHAN, /* oper can see in secret chans */ + + PRIV_PROPAGATE, /* propagate oper status */ + PRIV_DISPLAY, /* "Is an oper" displayed */ + PRIV_SEE_OPERS, /* display hidden opers */ -#define PRIV_WIDE_GLINE 27 /* oper can set wider G-lines */ + PRIV_WIDE_GLINE, /* oper can set wider G-lines */ -#define PRIV_FORCE_OPMODE 28 /* oper can override a Q-line */ -#define PRIV_FORCE_LOCAL_OPMODE 29 /* oper can override a local channel Q-line */ + PRIV_FORCE_OPMODE, /* oper can override a Q-line */ + PRIV_FORCE_LOCAL_OPMODE,/* oper can override a local channel Q-line */ -#define PRIV_LAST_PRIV 29 /* must be the same as the last priv */ + PRIV_LAST_PRIV /* must be the same as the last priv */ +}; #define _PRIV_NBITS (8 * sizeof(unsigned long)) @@ -108,7 +110,7 @@ #define _PRIV_BIT(priv) (1 << ((priv) % _PRIV_NBITS)) struct Privs { - unsigned long priv_mask[(PRIV_LAST_PRIV / _PRIV_NBITS) + 1]; + unsigned long priv_mask[(PRIV_LAST_PRIV + _PRIV_NBITS - 1) / _PRIV_NBITS]; }; enum Flag { Index: ircu2.10/include/whocmds.h diff -u ircu2.10/include/whocmds.h:1.6.2.1 ircu2.10/include/whocmds.h:1.6.2.1.4.1 --- ircu2.10/include/whocmds.h:1.6.2.1 Sat Sep 14 13:44:32 2002 +++ ircu2.10/include/whocmds.h Sat Nov 23 11:45:50 2002 @@ -1,7 +1,7 @@ /* * whocmds.h * - * $Id: whocmds.h,v 1.6.2.1 2002/09/14 20:44:32 kev Exp $ + * $Id: whocmds.h,v 1.6.2.1.4.1 2002/11/23 19:45:50 klmitch Exp $ */ #ifndef INCLUDED_whocmds_h #define INCLUDED_whocmds_h @@ -42,7 +42,7 @@ #define IS_VISIBLE_USER(s,ac) ((s==ac) || (!IsInvisible(ac))) -#define SEE_LUSER(s, ac, b) (IS_VISIBLE_USER(s, ac) || ((b & WHOSELECT_EXTRA) && MyConnect(ac) && HasPriv((s), PRIV_SHOW_INVIS | PRIV_SHOW_ALL_INVIS))) +#define SEE_LUSER(s, ac, b) (IS_VISIBLE_USER(s, ac) || ((b & WHOSELECT_EXTRA) && +MyConnect(ac) && (HasPriv((s), PRIV_SHOW_INVIS) || HasPriv((s), +PRIV_SHOW_ALL_INVIS)))) #define SEE_USER(s, ac, b) (SEE_LUSER(s, ac, b) || ((b & WHOSELECT_EXTRA) && HasPriv((s), PRIV_SHOW_ALL_INVIS))) Index: ircu2.10/ircd/client.c diff -u ircu2.10/ircd/client.c:1.15.2.3.8.1 ircu2.10/ircd/client.c:1.15.2.3.8.2 --- ircu2.10/ircd/client.c:1.15.2.3.8.1 Sat Nov 23 11:05:08 2002 +++ ircu2.10/ircd/client.c Sat Nov 23 11:45:50 2002 @@ -16,7 +16,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * - * $Id: client.c,v 1.15.2.3.8.1 2002/11/23 19:05:08 klmitch Exp $ + * $Id: client.c,v 1.15.2.3.8.2 2002/11/23 19:45:50 klmitch Exp $ */ #include "config.h" @@ -102,7 +102,7 @@ } static struct { - unsigned int priv; + enum Priv priv; enum Feature feat; enum { FEATFLAG_DISABLES_PRIV, @@ -163,7 +163,7 @@ { PRIV_SEE_CHAN, FEAT_LOCOP_SEE_IN_SECRET_CHANNELS, FEATFLAG_LOCAL_OPERS }, { PRIV_WIDE_GLINE, FEAT_LOCOP_WIDE_GLINE, FEATFLAG_LOCAL_OPERS }, - { 0, FEAT_LAST_F, 0 } + { PRIV_LAST_PRIV, FEAT_LAST_F, 0 } }; /* client_set_privs(struct Client* client) @@ -191,7 +191,7 @@ /* This sequence is temporary until the .conf is carefully rewritten */ - for (i = 0; feattab[i].priv; i++) { + for (i = 0; feattab[i].priv != PRIV_LAST_PRIV; i++) { if (feattab[i].flag == FEATFLAG_ENABLES_PRIV) { if (!feature_bool(feattab[i].feat)) PrivSet(&antiprivs, feattab[i].priv); Index: ircu2.10/ircd/s_bsd.c diff -u ircu2.10/ircd/s_bsd.c:1.45.2.11.8.1 ircu2.10/ircd/s_bsd.c:1.45.2.11.8.2 --- ircu2.10/ircd/s_bsd.c:1.45.2.11.8.1 Sat Nov 23 11:05:09 2002 +++ ircu2.10/ircd/s_bsd.c Sat Nov 23 11:45:50 2002 @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * - * $Id: s_bsd.c,v 1.45.2.11.8.1 2002/11/23 19:05:09 klmitch Exp $ + * $Id: s_bsd.c,v 1.45.2.11.8.2 2002/11/23 19:45:50 klmitch Exp $ */ #include "config.h" @@ -356,7 +356,7 @@ switch (os_sendv_nonb(cli_fd(cptr), buf, &bytes_count, &bytes_written)) { case IO_SUCCESS: - SetFlag(cptr, FLAG_BLOCKED); + ClrFlag(cptr, FLAG_BLOCKED); cli_sendB(cptr) += bytes_written; cli_sendB(&me) += bytes_written; ----------------------- End of diff -----------------------