Changed databases
This commit is contained in:
parent
e3ad201c51
commit
c4b5cb546e
@ -95,16 +95,6 @@ typedef struct _channel_rec {
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* List of banned users from a channel. This is a dynamic list.
|
||||
*/
|
||||
typedef struct _banned {
|
||||
int channel; /* Channel the user is banned from */
|
||||
char user[36]; /* The user who is banned */
|
||||
} banned_users;
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* The buffers
|
||||
*/
|
||||
@ -154,12 +144,12 @@ void chat_dump(void)
|
||||
for (tmpu = users; tmpu; tmpu = tmpu->next) {
|
||||
if (tmpu->pid) {
|
||||
if (first) {
|
||||
Syslog('u', " pid username nick channel chats sysop");
|
||||
Syslog('u', "----- ------------------------------------ --------- -------------------- ----- -----");
|
||||
Syslog('u', " pid username nick channel sysop");
|
||||
Syslog('u', "----- ------------------------------------ --------- -------------------- -----");
|
||||
first = FALSE;
|
||||
}
|
||||
Syslog('u', "%5d %-36s %-9s %-20s %s %s", tmpu->pid, tmpu->realname, tmpu->nick,
|
||||
tmpu->channel, tmpu->chatting?"True ":"False", tmpu->sysop?"True ":"False");
|
||||
Syslog('u', "%5d %-36s %-9s %-20s %s", tmpu->pid, tmpu->realname, tmpu->nick,
|
||||
tmpu->channel, tmpu->sysop?"True ":"False");
|
||||
}
|
||||
}
|
||||
#else
|
||||
@ -293,7 +283,6 @@ int join(pid_t pid, char *channel, int sysop)
|
||||
|
||||
pthread_mutex_lock(&b_mutex);
|
||||
strncpy(tmpu->channel, channel, 20);
|
||||
tmpu->chatting = TRUE;
|
||||
pthread_mutex_unlock(&b_mutex);
|
||||
Syslog('+', "IBC: user %s has joined channel %s", tmpu->nick, channel);
|
||||
usrchg = TRUE;
|
||||
@ -358,8 +347,6 @@ int join(pid_t pid, char *channel, int sysop)
|
||||
|
||||
pthread_mutex_lock(&b_mutex);
|
||||
strncpy(tmpu->channel, channel, 20);
|
||||
tmpu->chatting = TRUE;
|
||||
tmpu->chanop = TRUE;
|
||||
pthread_mutex_unlock(&b_mutex);
|
||||
Syslog('+', "IBC: user %s created and joined channel %s", tmpu->nick, channel);
|
||||
usrchg = TRUE;
|
||||
@ -435,7 +422,7 @@ int part(pid_t pid, char *reason)
|
||||
|
||||
#ifdef USE_EXPERIMENT
|
||||
for (tmpu = users; tmpu; tmpu = tmpu->next) {
|
||||
if ((tmpu->pid == pid) && tmpu->chatting) {
|
||||
if ((tmpu->pid == pid) && strlen(tmpu->channel)) {
|
||||
for (tmp = channels; tmp; tmp = tmp->next) {
|
||||
if (strcmp(tmp->name, tmpu->channel) == 0) {
|
||||
tmp->users--;
|
||||
@ -466,6 +453,7 @@ int part(pid_t pid, char *reason)
|
||||
*/
|
||||
Syslog('+', "IBC: removed channel %s, no more users left", tmp->name);
|
||||
del_channel(&channels, tmp->name);
|
||||
chnchg = TRUE;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -473,7 +461,6 @@ int part(pid_t pid, char *reason)
|
||||
*/
|
||||
pthread_mutex_lock(&b_mutex);
|
||||
tmpu->channel[0] = '\0';
|
||||
tmpu->chatting = FALSE;
|
||||
pthread_mutex_unlock(&b_mutex);
|
||||
usrchg = TRUE;
|
||||
|
||||
@ -516,7 +503,6 @@ int part(pid_t pid, char *reason)
|
||||
}
|
||||
#endif
|
||||
|
||||
Syslog('-', "No channel found");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@ -567,7 +553,7 @@ void chat_msg(char *channel, char *nick, char *msg)
|
||||
buf[79] = '\0';
|
||||
|
||||
for (tmpu = users; tmpu; tmpu = tmpu->next) {
|
||||
if ((strcmp(tmpu->channel, channel) == 0) && tmpu->chatting) {
|
||||
if (strlen(tmpu->channel) && (strcmp(tmpu->channel, channel) == 0)) {
|
||||
system_msg(tmpu->pid, buf);
|
||||
}
|
||||
}
|
||||
@ -911,16 +897,16 @@ char *chat_put(char *data)
|
||||
if (strlen(tmpu->channel)) {
|
||||
sprintf(buf, "Present in channel %s:", tmpu->channel);
|
||||
system_msg(tmpu->pid, buf);
|
||||
sprintf(buf, "Nick Real name Flags");
|
||||
sprintf(buf, "Nick Real name Flags");
|
||||
system_msg(tmpu->pid, buf);
|
||||
sprintf(buf, "---------------------------------------- ----------------------------- -------");
|
||||
sprintf(buf, "---------------------------------------- ------------------------------ -------");
|
||||
system_msg(tmpu->pid, buf);
|
||||
count = 0;
|
||||
for (tmp = users; tmp; tmp = tmp->next) {
|
||||
if (strcmp(tmp->channel, tmpu->channel) == 0) {
|
||||
sprintf(temp, "%s@%s", tmp->nick, tmp->server);
|
||||
sprintf(buf, "%-40s %-30s %s", temp, tmp->realname,
|
||||
tmp->chanop ? (char *)"chanop" : (char *)"");
|
||||
tmp->sysop ? (char *)"sysop" : (char *)"");
|
||||
system_msg(tmpu->pid, buf);
|
||||
count++;
|
||||
}
|
||||
@ -1211,7 +1197,7 @@ char *chat_checksysop(char *data)
|
||||
#ifdef USE_EXPERIMENT
|
||||
for (tmpu = users; tmpu; tmpu = tmpu->next) {
|
||||
if (atoi(pid) != tmpu->pid) {
|
||||
if (tmpu->chatting && tmpu->sysop) {
|
||||
if (strlen(tmpu->channel) && (strcasecmp(tmpu->channel, "#sysop") == 0) && tmpu->sysop) {
|
||||
Syslog('-', "Sending ACK on check");
|
||||
sprintf(buf, "100:1,1;");
|
||||
reg_sysoptalk(pid);
|
||||
|
@ -48,14 +48,18 @@ ncs_list *ncsl = NULL; /* Neighbours list */
|
||||
srv_list *servers = NULL; /* Active servers */
|
||||
usr_list *users = NULL; /* Active users */
|
||||
chn_list *channels = NULL; /* Active channels */
|
||||
ban_list *banned = NULL; /* Banned users */
|
||||
nick_list *nicknames = NULL; /* Known nicknames */
|
||||
int ls; /* Listen socket */
|
||||
struct sockaddr_in myaddr_in; /* Listen socket address */
|
||||
struct sockaddr_in clientaddr_in; /* Remote socket address */
|
||||
int changed = FALSE; /* Databases changed */
|
||||
char crbuf[512]; /* Chat receive buffer */
|
||||
int srvchg = FALSE; /* Is serverlist changed */
|
||||
int usrchg = FALSE; /* Is userlist changed */
|
||||
int chnchg = FALSE; /* Is channellist changed */
|
||||
int banchg = FALSE; /* Is banned users changed */
|
||||
int nickchg = FALSE; /* Is nicknames changed */
|
||||
|
||||
|
||||
|
||||
pthread_mutex_t b_mutex = PTHREAD_MUTEX_INITIALIZER;
|
||||
@ -145,33 +149,41 @@ void dump_ncslist(void)
|
||||
usr_list *usrp;
|
||||
chn_list *chnp;
|
||||
|
||||
if (!changed && !srvchg && !usrchg && !chnchg)
|
||||
if (!srvchg && !usrchg && !chnchg && !banchg && !nickchg)
|
||||
return;
|
||||
|
||||
Syslog('r', "Server State Del Pwd Srv Next action");
|
||||
Syslog('r', "------------------------------ ------- --- --- --- -----------");
|
||||
|
||||
for (tmp = ncsl; tmp; tmp = tmp->next) {
|
||||
Syslog('r', "%-30s %-7s %s %s %s %d", tmp->server, ncsstate[tmp->state],
|
||||
tmp->remove ? "yes":"no ", tmp->gotpass ? "yes":"no ",
|
||||
tmp->gotserver ? "yes":"no ", (int)tmp->action - (int)now);
|
||||
}
|
||||
|
||||
if (srvchg) {
|
||||
Syslog('+', "IBC: Server Router Hops Users Connect time");
|
||||
Syslog('+', "IBC: ------------------------- ------------------------- ----- ----- --------------------");
|
||||
for (srv = servers; srv; srv = srv->next) {
|
||||
Syslog('+', "IBC: %-25s %-25s %5d %5d %s", srv->server, srv->router, srv->hops, srv->users, rfcdate(srv->connected));
|
||||
if (ncsl) {
|
||||
Syslog('r', "Server State Del Pwd Srv Next action");
|
||||
Syslog('r', "------------------------------ ------- --- --- --- -----------");
|
||||
for (tmp = ncsl; tmp; tmp = tmp->next) {
|
||||
Syslog('r', "%-30s %-7s %s %s %s %d", tmp->server, ncsstate[tmp->state],
|
||||
tmp->remove ? "yes":"no ", tmp->gotpass ? "yes":"no ",
|
||||
tmp->gotserver ? "yes":"no ", (int)tmp->action - (int)now);
|
||||
}
|
||||
} else {
|
||||
Syslog('r', "No servers configured");
|
||||
}
|
||||
|
||||
if (servers) {
|
||||
Syslog('+', "IBC: Server Router Hops Users Connect time");
|
||||
Syslog('+', "IBC: ------------------------- ------------------------- ----- ----- --------------------");
|
||||
for (srv = servers; srv; srv = srv->next) {
|
||||
Syslog('+', "IBC: %-25s %-25s %5d %5d %s", srv->server, srv->router, srv->hops,
|
||||
srv->users, rfcdate(srv->connected));
|
||||
}
|
||||
} else {
|
||||
Syslog('+', "IBC: Servers list is empty");
|
||||
}
|
||||
}
|
||||
|
||||
if (usrchg) {
|
||||
if (users) {
|
||||
Syslog('+', "IBC: Server User Name/Nick Channel Cop Connect time");
|
||||
Syslog('+', "IBC: Server User Name/Nick Channel Sys Connect time");
|
||||
Syslog('+', "IBC: -------------------- -------------------- --------- ------------- --- --------------------");
|
||||
for (usrp = users; usrp; usrp = usrp->next) {
|
||||
Syslog('+', "IBC: %-20s %-20s %-9s %-13s %s %s", usrp->server, usrp->realname, usrp->nick, usrp->channel,
|
||||
usrp->chanop ? "yes":"no ", rfcdate(usrp->connected));
|
||||
usrp->sysop ? "yes":"no ", rfcdate(usrp->connected));
|
||||
}
|
||||
} else {
|
||||
Syslog('+', "IBC: Users list is empty");
|
||||
@ -194,7 +206,8 @@ void dump_ncslist(void)
|
||||
srvchg = FALSE;
|
||||
usrchg = FALSE;
|
||||
chnchg = FALSE;
|
||||
changed = FALSE;
|
||||
banchg = FALSE;
|
||||
nickchg = FALSE;
|
||||
}
|
||||
|
||||
|
||||
@ -595,7 +608,7 @@ void check_servers(void)
|
||||
}
|
||||
if (!inlist ) {
|
||||
fill_ncslist(&ncsl, ibcsrv.server, ibcsrv.myname, ibcsrv.passwd);
|
||||
changed = TRUE;
|
||||
srvchg = TRUE;
|
||||
Syslog('+', "IBC: new configured Internet BBS Chatserver: %s", ibcsrv.server);
|
||||
}
|
||||
}
|
||||
@ -617,7 +630,7 @@ void check_servers(void)
|
||||
Syslog('+', "IBC: server %s removed from configuration", tnsl->server);
|
||||
tnsl->remove = TRUE;
|
||||
tnsl->action = now;
|
||||
changed = TRUE;
|
||||
srvchg = TRUE;
|
||||
}
|
||||
}
|
||||
fclose(fp);
|
||||
@ -635,7 +648,7 @@ void check_servers(void)
|
||||
if (((int)tnsl->action - (int)now) <= 0) {
|
||||
switch (tnsl->state) {
|
||||
case NCS_INIT: Syslog('r', "%s init", tnsl->server);
|
||||
changed = TRUE;
|
||||
srvchg = TRUE;
|
||||
|
||||
/*
|
||||
* If Internet is available, setup the connection.
|
||||
@ -665,7 +678,7 @@ void check_servers(void)
|
||||
Syslog('!', "IBC: no IP address for %s: %s", tnsl->server, errmsg);
|
||||
tnsl->action = now + (time_t)120;
|
||||
tnsl->state = NCS_FAIL;
|
||||
changed = TRUE;
|
||||
srvchg = TRUE;
|
||||
break;
|
||||
}
|
||||
|
||||
@ -674,7 +687,7 @@ void check_servers(void)
|
||||
Syslog('!', "$IBC: can't create socket for %s", tnsl->server);
|
||||
tnsl->state = NCS_FAIL;
|
||||
tnsl->action = now + (time_t)120;
|
||||
changed = TRUE;
|
||||
srvchg = TRUE;
|
||||
break;
|
||||
}
|
||||
|
||||
@ -697,7 +710,7 @@ void check_servers(void)
|
||||
VERSION, CFG.bbs_name);
|
||||
tnsl->action = now + (time_t)10;
|
||||
tnsl->state = NCS_WAITPWD;
|
||||
changed = TRUE;
|
||||
srvchg = TRUE;
|
||||
break;
|
||||
|
||||
case NCS_WAITPWD: /*
|
||||
@ -714,7 +727,7 @@ void check_servers(void)
|
||||
}
|
||||
Syslog('r', "next call in %d %d seconds", CFG.dialdelay, j);
|
||||
tnsl->action = now + (time_t)j;
|
||||
changed = TRUE;
|
||||
srvchg = TRUE;
|
||||
break;
|
||||
|
||||
case NCS_CONNECT: /*
|
||||
@ -732,7 +745,7 @@ void check_servers(void)
|
||||
tnsl->token = 0;
|
||||
del_router(&servers, tnsl->server);
|
||||
broadcast(tnsl->server, "SQUIT %s Connection died\r\n", tnsl->server);
|
||||
changed = TRUE;
|
||||
srvchg = TRUE;
|
||||
system_shout("*** NETWORK SPLIT, lost connection with server %s", tnsl->server);
|
||||
break;
|
||||
}
|
||||
@ -754,19 +767,19 @@ void check_servers(void)
|
||||
case NCS_HANGUP: Syslog('r', "%s hangup => call", tnsl->server);
|
||||
tnsl->action = now + (time_t)1;
|
||||
tnsl->state = NCS_CALL;
|
||||
changed = TRUE;
|
||||
srvchg = TRUE;
|
||||
break;
|
||||
|
||||
case NCS_DEAD: Syslog('r', "%s dead -> call", tnsl->server);
|
||||
tnsl->action = now + (time_t)1;
|
||||
tnsl->state = NCS_CALL;
|
||||
changed = TRUE;
|
||||
srvchg = TRUE;
|
||||
break;
|
||||
|
||||
case NCS_FAIL: Syslog('r', "%s fail => init", tnsl->server);
|
||||
tnsl->action = now + (time_t)1;
|
||||
tnsl->state = NCS_INIT;
|
||||
changed = TRUE;
|
||||
srvchg = TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -806,7 +819,7 @@ int command_pass(char *hostname, char *parameters)
|
||||
tnsl->version = atoi(version);
|
||||
if (lnk && strchr(lnk, 'Z'))
|
||||
tnsl->compress = TRUE;
|
||||
changed = TRUE;
|
||||
srvchg = TRUE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -854,7 +867,7 @@ int command_server(char *hostname, char *parameters)
|
||||
broadcast(tnsl->server, "SERVER %s %d %s %s %s %s\r\n", name, ihops, id, prod, vers, fullname);
|
||||
system_shout("* New server: %s, %s", name, fullname);
|
||||
tnsl->gotserver = TRUE;
|
||||
changed = TRUE;
|
||||
srvchg = TRUE;
|
||||
tnsl->state = NCS_CONNECT;
|
||||
tnsl->action = now + (time_t)10;
|
||||
Syslog('+', "IBC: connected with neighbour server: %s", tnsl->server);
|
||||
@ -934,7 +947,7 @@ int command_server(char *hostname, char *parameters)
|
||||
}
|
||||
}
|
||||
add_server(&servers, tnsl->server, ihops, prod, vers, fullname, hostname);
|
||||
changed = TRUE;
|
||||
srvchg = TRUE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -944,7 +957,7 @@ int command_server(char *hostname, char *parameters)
|
||||
*/
|
||||
add_server(&servers, name, ihops, prod, vers, fullname, hostname);
|
||||
broadcast(hostname, "SERVER %s %d %s %s %s %s\r\n", name, ihops, id, prod, vers, fullname);
|
||||
changed = TRUE;
|
||||
srvchg = TRUE;
|
||||
Syslog('+', "IBC: new relay server %s: %s", name, fullname);
|
||||
system_shout("* New server: %s, %s", name, fullname);
|
||||
return 0;
|
||||
@ -985,7 +998,7 @@ int command_squit(char *hostname, char *parameters)
|
||||
|
||||
system_shout("* Server %s disconnected: %s", name, message);
|
||||
broadcast(hostname, "SQUIT %s %s\r\n", name, message);
|
||||
changed = TRUE;
|
||||
srvchg = TRUE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -57,9 +57,7 @@ typedef struct _usr_list {
|
||||
char realname[37]; /* Users real name */
|
||||
char channel[21]; /* Users channel */
|
||||
time_t connected; /* Users connect time */
|
||||
unsigned chanop : 1; /* User is a chanop */
|
||||
unsigned sysop : 1; /* User is a sysop */
|
||||
unsigned chatting : 1; /* User is chating */
|
||||
pid_t pid; /* Users pid if local */
|
||||
int pointer; /* Users message pointer */
|
||||
} usr_list;
|
||||
@ -82,6 +80,31 @@ typedef struct _chn_list {
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Database with banned users
|
||||
*/
|
||||
typedef struct _ban_list {
|
||||
struct _ban_list *next;
|
||||
char name[10]; /* Users name */
|
||||
char server[64]; /* Users server */
|
||||
char channel[21]; /* Users banned channel */
|
||||
time_t kicked; /* Users banned time */
|
||||
} ban_list;
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Database with nicknames
|
||||
*/
|
||||
typedef struct _nick_list {
|
||||
struct _nick_list *next;
|
||||
char nick[10]; /* Nickname */
|
||||
char server[64]; /* Originating server */
|
||||
time_t lastused; /* Last used time */
|
||||
} nick_list;
|
||||
|
||||
|
||||
|
||||
int add_user(usr_list **, char *, char *, char *);
|
||||
void del_user(usr_list **, char *, char *);
|
||||
int add_channel(chn_list **, char *, char *, char *);
|
||||
|
Reference in New Issue
Block a user