[srvx-commits] CVS: services/src hash.h,1.98,1.99 nickserv.c,1.225,1.226 proto-bahamut.c,1.32,1.33 p
Brought to you by:
entrope
|
From: Entrope <en...@us...> - 2003-01-10 03:36:29
|
Update of /cvsroot/srvx/services/src
In directory sc8-pr-cvs1:/tmp/cvs-serv25019/src
Modified Files:
hash.h nickserv.c proto-bahamut.c proto-p10.c proto.h
Log Message:
add (and support) service-set usermode +r under Bahamut
do not yell at stamped Bahamut users during their burst if they are
using their regged nick
send SVSMODE as NickServ rather than as server
Index: hash.h
===================================================================
RCS file: /cvsroot/srvx/services/src/hash.h,v
retrieving revision 1.98
retrieving revision 1.99
diff -C2 -r1.98 -r1.99
*** hash.h 6 Jan 2003 01:53:01 -0000 1.98
--- hash.h 10 Jan 2003 03:36:26 -0000 1.99
***************
*** 55,58 ****
--- 55,59 ----
#define FLAGS_STAMPED 0x1000 /* for users who have been stamped */
#define FLAGS_HIDDEN_HOST 0x2000 /* user's host is masked by their account */
+ #define FLAGS_REGNICK 0x4000 /* user owns their current nick */
#define IsOper(x) ((x)->modes & FLAGS_OPER)
***************
*** 68,71 ****
--- 69,73 ----
#define IsStamped(x) ((x)->modes & FLAGS_STAMPED)
#define IsHiddenHost(x) ((x)->modes & FLAGS_HIDDEN_HOST)
+ #define IsReggedNick(x) ((x)->modes & FLAGS_REGNICK)
#define IsLocal(x) ((x)->uplink == self)
Index: nickserv.c
===================================================================
RCS file: /cvsroot/srvx/services/src/nickserv.c,v
retrieving revision 1.225
retrieving revision 1.226
diff -C2 -r1.225 -r1.226
*** nickserv.c 7 Jan 2003 04:25:57 -0000 1.225
--- nickserv.c 10 Jan 2003 03:36:26 -0000 1.226
***************
*** 398,401 ****
--- 398,407 ----
{
struct nick_info *last, *next;
+ struct userNode *user;
+ /* Check to see if we should mark a user as unregistered. */
+ if ((user = GetUserH(ni->nick)) && IsReggedNick(user)) {
+ user->modes &= ~FLAGS_REGNICK;
+ irc_regnick(user);
+ }
/* Remove ni from the nick_info linked list. */
if (ni == ni->owner->nicks) {
***************
*** 818,821 ****
--- 824,836 ----
char *id = hi->handle;
#endif
+ if (!nickserv_conf.disable_nicks) {
+ struct nick_info *ni;
+ for (ni = hi->nicks; ni; ni = ni->next) {
+ if (!irccasecmp(user->nick, ni->nick)) {
+ user->modes |= FLAGS_REGNICK;
+ break;
+ }
+ }
+ }
StampUser(user, id);
}
***************
*** 3210,3214 ****
check_user_nick(struct userNode *user, const char *nick) {
struct nick_info *ni;
! if (!(ni = get_nick_info(nick)) || (user->handle_info == ni->owner)) return 0;
if (nickserv_conf.warn_nick_owned) {
send_message(user, nickserv, NSMSG_RECLAIM_WARN, ni->nick, ni->owner->handle);
--- 3225,3244 ----
check_user_nick(struct userNode *user, const char *nick) {
struct nick_info *ni;
! user->modes &= ~FLAGS_REGNICK;
! if (!(ni = get_nick_info(nick))) return 0;
! if (user->handle_info == ni->owner) {
! user->modes |= FLAGS_REGNICK;
! /* Yes, I want a pointer compare. Compare handle_new_user()
! * to handle_nick_change(). */
! if (nick != user->nick) {
! /* Note to self: Use garbage collected pointers next time. Asshat. */
! char old_nick[NICKLEN+1];
! strcpy(old_nick, user->nick);
! strcpy(user->nick, nick);
! irc_regnick(user);
! strcpy(user->nick, nick);
! }
! return 0;
! }
if (nickserv_conf.warn_nick_owned) {
send_message(user, nickserv, NSMSG_RECLAIM_WARN, ni->nick, ni->owner->handle);
Index: proto-bahamut.c
===================================================================
RCS file: /cvsroot/srvx/services/src/proto-bahamut.c,v
retrieving revision 1.32
retrieving revision 1.33
diff -C2 -r1.32 -r1.33
*** proto-bahamut.c 9 Jan 2003 05:43:24 -0000 1.32
--- proto-bahamut.c 10 Jan 2003 03:36:26 -0000 1.33
***************
*** 74,78 ****
DelServer(struct server* serv, int announce, const char *message) {
unsigned int nn;
! dict_iterator_t it;
if (!serv) return;
--- 74,78 ----
DelServer(struct server* serv, int announce, const char *message) {
unsigned int nn;
! dict_iterator_t it, next;
if (!serv) return;
***************
*** 85,89 ****
}
}
! for (it=dict_first(serv->users); it; it=iter_next(it)) {
DelUser(iter_data(it), NULL, false, "server delinking");
}
--- 85,90 ----
}
}
! for (it=dict_first(serv->users); it; it=next) {
! next = iter_next(it);
DelUser(iter_data(it), NULL, false, "server delinking");
}
***************
*** 113,117 ****
struct userNode *
! AddUser(struct server* uplink, const char *nick, const char *ident, const char *hostname, const char *modes, const char *userinfo, time_t timestamp, unsigned int realip) {
struct userNode *uNode, *oldUser;
struct policer_params *pol_params;
--- 114,118 ----
struct userNode *
! AddUser(struct server* uplink, const char *nick, const char *ident, const char *hostname, const char *modes, const char *userinfo, time_t timestamp, unsigned int realip, const char *stamp) {
struct userNode *uNode, *oldUser;
struct policer_params *pol_params;
***************
*** 166,169 ****
--- 167,171 ----
mod_usermode(uNode, modes);
+ if (stamp) call_account_func(uNode, stamp);
if (IsLocal(uNode)) irc_user(uNode);
for (nn=0; nn<nuf_used; nn++) {
***************
*** 178,182 ****
struct userNode *old_user = GetUserH(nick);
if (old_user) timestamp = old_user->timestamp - 1;
! return AddUser(self, nick, nick, self->name, "+oik", desc, timestamp, (127<<24)|1);
}
--- 180,184 ----
struct userNode *old_user = GetUserH(nick);
if (old_user) timestamp = old_user->timestamp - 1;
! return AddUser(self, nick, nick, self->name, "+oikr", desc, timestamp, (127<<24)|1, 0);
}
***************
*** 186,190 ****
struct userNode *old_user = GetUserH(nick);
if (old_user) timestamp = old_user->timestamp - 1;
! return AddUser(self, nick, ident, hostname, "+i", desc, timestamp, (127<<24)|1);
}
--- 188,192 ----
struct userNode *old_user = GetUserH(nick);
if (old_user) timestamp = old_user->timestamp - 1;
! return AddUser(self, nick, ident, hostname, "+ir", desc, timestamp, (127<<24)|1, 0);
}
***************
*** 238,241 ****
--- 240,244 ----
if (IsServNotice(user)) modes[modelen++] = 's';
if (IsDeaf(user)) modes[modelen++] = 'd';
+ if (IsReggedNick(user)) modes[modelen++] = 'r';
if (IsGlobal(user)) modes[modelen++] = 'g';
modes[modelen] = 0;
***************
*** 248,252 ****
irc_account(struct userNode *user, const char *stamp)
{
! irc_svsmode(user, "+d", base64toint(stamp, IDLEN));
}
--- 251,269 ----
irc_account(struct userNode *user, const char *stamp)
{
! if (IsReggedNick(user)) {
! irc_svsmode(user, "+rd", base64toint(stamp, IDLEN));
! } else {
! irc_svsmode(user, "+d", base64toint(stamp, IDLEN));
! }
! }
!
! void
! irc_regnick(struct userNode *user)
! {
! if (IsReggedNick(user)) {
! irc_svsmode(user, "+r", 0);
! } else {
! irc_svsmode(user, "-r", 0);
! }
}
***************
*** 367,374 ****
void
irc_svsmode(struct userNode *target, char *modes, unsigned long stamp) {
if (stamp) {
! putsock(":%s SVSMODE %s "FMT_TIME_T" %s %lu", self->name, target->nick, target->timestamp, modes, stamp);
} else {
! putsock(":%s SVSMODE %s "FMT_TIME_T" %s", self->name, target->nick, target->timestamp, modes);
}
}
--- 384,392 ----
void
irc_svsmode(struct userNode *target, char *modes, unsigned long stamp) {
+ extern struct userNode *nickserv;
if (stamp) {
! putsock(":%s SVSMODE %s "FMT_TIME_T" %s %lu", nickserv->nick, target->nick, target->timestamp, modes, stamp);
} else {
! putsock(":%s SVSMODE %s "FMT_TIME_T" %s", nickserv->nick, target->nick, target->timestamp, modes);
}
}
***************
*** 711,733 ****
} else {
/* new nick from a server */
if (argc < 10) return 0;
if (argc > 10) {
! un = AddUser(GetServerH(argv[7]), argv[1], argv[5], argv[6], argv[4], argv[argc-1], atoi(argv[3]), atoi(argv[9]));
} else {
/* No IP address received. */
! un = AddUser(GetServerH(argv[7]), argv[1], argv[5], argv[6], argv[4], argv[argc-1], atoi(argv[3]), 0);
! }
!
! if(un)
! {
! unsigned long stamp;
!
! stamp = strtoul(argv[8], NULL, 0);
! if (stamp) {
! char id[IDLEN + 1];
!
! inttobase64(id, stamp, IDLEN);
! call_account_func(un, id);
! }
}
}
--- 729,742 ----
} else {
/* new nick from a server */
+ char id[8];
if (argc < 10) return 0;
+ unsigned long stamp;
+ stamp = strtoul(argv[8], NULL, 0);
+ if (stamp) inttobase64(id, stamp, IDLEN);
if (argc > 10) {
! un = AddUser(GetServerH(argv[7]), argv[1], argv[5], argv[6], argv[4], argv[argc-1], atoi(argv[3]), atoi(argv[9]), (stamp ? id : 0));
} else {
/* No IP address received. */
! un = AddUser(GetServerH(argv[7]), argv[1], argv[5], argv[6], argv[4], argv[argc-1], atoi(argv[3]), 0, (stamp ? id : 0));
}
}
***************
*** 1084,1088 ****
int add = 1;
! if (!user || !mode_change || !*mode_change) return;
while (1) {
#define do_user_mode(FLAG) do { if (add) user->modes |= FLAG; else user->modes &= ~FLAG; } while (0)
--- 1093,1097 ----
int add = 1;
! if (!user || !mode_change) return;
while (1) {
#define do_user_mode(FLAG) do { if (add) user->modes |= FLAG; else user->modes &= ~FLAG; } while (0)
***************
*** 1113,1116 ****
--- 1122,1126 ----
case 's': do_user_mode(FLAGS_SERVNOTICE); break;
case 'd': do_user_mode(FLAGS_DEAF); break;
+ case 'r': do_user_mode(FLAGS_REGNICK); break;
case 'k': do_user_mode(FLAGS_SERVICE); break;
case 'g': do_user_mode(FLAGS_GLOBAL); break;
Index: proto-p10.c
===================================================================
RCS file: /cvsroot/srvx/services/src/proto-p10.c,v
retrieving revision 1.57
retrieving revision 1.58
diff -C2 -r1.57 -r1.58
*** proto-p10.c 7 Jan 2003 04:29:49 -0000 1.57
--- proto-p10.c 10 Jan 2003 03:36:26 -0000 1.58
***************
*** 409,412 ****
--- 409,418 ----
void
+ irc_regnick(struct userNode *user)
+ {
+ (void)user;
+ }
+
+ void
irc_nick(struct userNode *user, const char *new_nick)
{
***************
*** 1881,1885 ****
int add = 1;
! if (!user || !mode_change || !*mode_change) return;
while (1) {
#define do_user_mode(FLAG) do { if (add) user->modes |= FLAG; else user->modes &= ~FLAG; } while (0)
--- 1887,1891 ----
int add = 1;
! if (!user || !mode_change) return;
while (1) {
#define do_user_mode(FLAG) do { if (add) user->modes |= FLAG; else user->modes &= ~FLAG; } while (0)
Index: proto.h
===================================================================
RCS file: /cvsroot/srvx/services/src/proto.h,v
retrieving revision 1.69
retrieving revision 1.70
diff -C2 -r1.69 -r1.70
*** proto.h 14 Nov 2002 02:22:36 -0000 1.69
--- proto.h 10 Jan 2003 03:36:26 -0000 1.70
***************
*** 154,157 ****
--- 154,158 ----
/* account maintenance */
void irc_account(struct userNode *user, const char *stamp);
+ void irc_regnick(struct userNode *user);
/* numeric messages */
|