[srvx-commits] CVS: services/src proto-bahamut.c,1.30,1.31 proto-common.c,1.25,1.26
Brought to you by:
entrope
|
From: Entrope <en...@us...> - 2003-01-07 04:29:28
|
Update of /cvsroot/srvx/services/src
In directory sc8-pr-cvs1:/tmp/cvs-serv28131/src
Modified Files:
proto-bahamut.c proto-common.c
Log Message:
fix AddUser() to make the right user a zombie
when calling AddClone() or AddService(), make sure we collide existing users
Index: proto-bahamut.c
===================================================================
RCS file: /cvsroot/srvx/services/src/proto-bahamut.c,v
retrieving revision 1.30
retrieving revision 1.31
diff -C2 -r1.30 -r1.31
*** proto-bahamut.c 4 Jan 2003 06:25:20 -0000 1.30
--- proto-bahamut.c 7 Jan 2003 04:29:25 -0000 1.31
***************
*** 128,131 ****
--- 128,146 ----
}
+ if ((oldUser = GetUserH(nick))) {
+ if (IsLocal(oldUser) && IsService(oldUser)) {
+ /* The service should collide the new user off. */
+ oldUser->timestamp = timestamp - 1;
+ irc_user(oldUser);
+ }
+ if (oldUser->timestamp > timestamp) {
+ /* "Old" user is really newer; remove them */
+ DelUser(oldUser, 0, 1, "Overruled by older nick");
+ } else {
+ /* User being added is too new */
+ return NULL;
+ }
+ }
+
uNode = calloc(1, sizeof(*uNode));
safestrncpy(uNode->nick, nick, sizeof(uNode->nick));
***************
*** 144,165 ****
uNode->command_policer = policer_new(pol_params, uNode->timestamp);
! /* does the nick already exist? if so, how to handle? */
! if ((oldUser = GetUserH(nick))) {
! if (IsLocal(oldUser) && IsService(oldUser)) {
! oldUser->timestamp = uNode->timestamp - 1;
! irc_user(oldUser);
! }
! if (oldUser->timestamp > uNode->timestamp) {
! DelUser(oldUser, NULL, false, "Newer nick overruled");
! oldUser = NULL;
! }
! }
!
! if (!oldUser) {
! dict_insert(clients, uNode->nick, uNode);
! if (dict_size(clients) > max_clients) {
! max_clients = dict_size(clients);
! max_clients_time = now;
! }
}
--- 159,166 ----
uNode->command_policer = policer_new(pol_params, uNode->timestamp);
! dict_insert(clients, uNode->nick, uNode);
! if (dict_size(clients) > max_clients) {
! max_clients = dict_size(clients);
! max_clients_time = now;
}
***************
*** 174,183 ****
struct userNode *
AddService(const char *nick, const char *desc) {
! return AddUser(self, nick, nick, self->name, "+oik", desc, now, (127<<24)|1);
}
struct userNode *
AddClone(const char *nick, const char *ident, const char *hostname, const char *desc) {
! return AddUser(self, nick, ident, hostname, "+i", desc, now, (127<<24)|1);
}
--- 175,190 ----
struct userNode *
AddService(const char *nick, const char *desc) {
! time_t timestamp = now;
! 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);
}
struct userNode *
AddClone(const char *nick, const char *ident, const char *hostname, const char *desc) {
! time_t timestamp = now;
! 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);
}
Index: proto-common.c
===================================================================
RCS file: /cvsroot/srvx/services/src/proto-common.c,v
retrieving revision 1.25
retrieving revision 1.26
diff -C2 -r1.25 -r1.26
*** proto-common.c 2 Jan 2003 23:11:34 -0000 1.25
--- proto-common.c 7 Jan 2003 04:29:25 -0000 1.26
***************
*** 125,129 ****
log(MAIN_LOG, LOG_INFO, "Connecting to %s:%i...\n", addr, port);
! socket_io_fd = ioset_connect((struct sockaddr*)cManager.uplink->bind_addr, sizeof(struct sockaddr), addr, port, 1, NULL);
if (!socket_io_fd) {
log(MAIN_LOG, LOG_ERROR, "Connection to uplink failed: %s (%d)\n", strerror(errno), errno);
--- 125,129 ----
log(MAIN_LOG, LOG_INFO, "Connecting to %s:%i...\n", addr, port);
! socket_io_fd = ioset_connect((struct sockaddr*)cManager.uplink->bind_addr, sizeof(struct sockaddr), addr, port, 1, 0, NULL);
if (!socket_io_fd) {
log(MAIN_LOG, LOG_ERROR, "Connection to uplink failed: %s (%d)\n", strerror(errno), errno);
|