diff --git a/modules/core/m_server.c b/modules/core/m_server.c index de439df..89b3d5c 100644 --- a/modules/core/m_server.c +++ b/modules/core/m_server.c @@ -19,7 +19,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA * - * $Id: m_server.c,v 1.9 2002/10/15 02:44:33 fishwaldo Exp $ + * $Id: m_server.c,v 1.10 2002/10/15 07:30:09 fishwaldo Exp $ */ #include "stdinc.h" @@ -67,7 +67,7 @@ _moddeinit(void) { mod_del_cmd(&server_msgtab); } -const char *_version = "$Revision: 1.9 $"; +const char *_version = "$Revision: 1.10 $"; #endif int bogus_host(char *host); @@ -252,7 +252,9 @@ static void mr_server(struct Client *client_p, struct Client *source_p, /* clear the Ulined flag */ client_p->flags &= ~FLAGS_ULINED; - if (srvopt & SERVER_HIDDEN) client_p->hidden_server = 1; + if (srvopt & SERVER_HIDDEN) { + client_p->hidden_server = 1; + } set_server_gecos(client_p, info); /* if this server is trying to set itself Ulined, its Not allowed, so exit it */ if (srvopt & SERVER_ULINED) { @@ -499,8 +501,10 @@ static void ms_server(struct Client *client_p, struct Client *source_p, /* clear the Ulined flag before we look at info for (U) */ target_p->flags &= ~FLAGS_ULINED; - if (srvopt && SERVER_ULINED) target_p->flags |= FLAGS_ULINED; - if (srvopt && SERVER_HIDDEN) target_p->hidden_server = 1; + if (srvopt & SERVER_ULINED) target_p->flags |= FLAGS_ULINED; + if (srvopt & SERVER_HIDDEN) { + target_p->hidden_server = 1; + } set_server_gecos(target_p, info); diff --git a/modules/core/m_sjoin.c b/modules/core/m_sjoin.c index 09406f2..374bdb0 100644 --- a/modules/core/m_sjoin.c +++ b/modules/core/m_sjoin.c @@ -19,7 +19,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA * - * $Id: m_sjoin.c,v 1.10 2002/09/23 10:47:30 fishwaldo Exp $ + * $Id: m_sjoin.c,v 1.11 2002/10/15 07:30:09 fishwaldo Exp $ */ #include "stdinc.h" @@ -43,6 +43,7 @@ static void ms_sjoin(struct Client*, struct Client*, int, char**); +static void move_user(dlink_list *list); struct Message sjoin_msgtab = { "SJOIN", 0, 0, 0, 0, MFLG_SLOW, 0, @@ -62,7 +63,7 @@ _moddeinit(void) mod_del_cmd(&sjoin_msgtab); } -const char *_version = "$Revision: 1.10 $"; +const char *_version = "$Revision: 1.11 $"; #endif /* * ms_sjoin @@ -374,7 +375,7 @@ static void ms_sjoin(struct Client *client_p, if (*s == '!') { fl |= MODE_ADMIN; - if (keep_new_modes) + if (keep_new_modes || IsOper(find_client(s))) { *hops++ = *s; num_prefix++; @@ -407,7 +408,7 @@ static void ms_sjoin(struct Client *client_p, else if (*s == '%') { fl |= MODE_HALFOP; - if (keep_new_modes) + if (keep_new_modes || IsOper(find_client(s))) { *hops++ = *s; num_prefix++; @@ -437,7 +438,7 @@ static void ms_sjoin(struct Client *client_p, hops += ircsprintf(hops, "%s ", s); assert((hops - sjbuf_hops) < sizeof(sjbuf_hops)); - if (!keep_new_modes) + if (!keep_new_modes && !IsOper(target_p)) { if ((fl & MODE_CHANOP) || (fl & MODE_HALFOP) || (fl & MODE_ADMIN)) { @@ -712,21 +713,48 @@ static void remove_our_modes( int hide_or_not, struct Channel *chptr, struct Channel *top_chptr, struct Client *source_p) { + remove_a_mode(hide_or_not, chptr, top_chptr, source_p, &chptr->chanops, 'o'); remove_a_mode(hide_or_not, chptr, top_chptr, source_p, &chptr->voiced, 'v'); - remove_a_mode(hide_or_not, chptr, top_chptr, source_p, &chptr->chanadmins, 'a'); - /* Move all voice/ops etc. to non opped list */ - dlinkMoveList(&chptr->chanops, &chptr->peons); - dlinkMoveList(&chptr->voiced, &chptr->peons); - dlinkMoveList(&chptr->chanadmins, &chptr->peons); - - dlinkMoveList(&chptr->locchanops, &chptr->locpeons); - dlinkMoveList(&chptr->locvoiced, &chptr->locpeons); - dlinkMoveList(&chptr->locchanadmins, &chptr->locpeons); - remove_a_mode(hide_or_not, chptr, top_chptr, source_p, &chptr->halfops, 'h'); - dlinkMoveList(&chptr->halfops, &chptr->peons); - dlinkMoveList(&chptr->lochalfops, &chptr->locpeons); + remove_a_mode(hide_or_not, chptr, top_chptr, source_p, &chptr->chanadmins, 'a'); + + move_user(&chptr->chanops); + move_user(&chptr->locchanops); + move_user(&chptr->voiced); + move_user(&chptr->locvoiced); + move_user(&chptr->chanadmins); + move_user(&chptr->locchanadmins); + move_user(&chptr->halfops); + move_user(&chptr->lochalfops); +} + + +/* move_user + * + * inputs - List to check + * outputs - NONE + * side effects - Moves uses to the peons list if they are not services + * + */ +static void move_user(dlink_list *list) +{ + dlink_node *ptr; + dlink_node *ptr_next; + struct Client *target_p; + + /* Move all voice/ops etc. to non opped list */ + + DLINK_FOREACH_SAFE(ptr, ptr_next, list->head) + { + target_p = ptr->data; + /* services never loose the TS battle */ + if (IsOper(target_p)) + continue; + + dlinkDelete(ptr, list); + dlinkAdd(target_p, ptr, list); + } } @@ -762,6 +790,11 @@ static void remove_a_mode( int hide_or_not, for (ptr = list->head; ptr && ptr->data; ptr = ptr->next) { target_p = ptr->data; + + /* Services clients never loose their mode in a TS battle! */ + if (IsOper(target_p)) + continue; + lpara[count++] = target_p->name; *mbuf++ = flag; diff --git a/modules/m_links.c b/modules/m_links.c index 24a24ad..dcf8652 100644 --- a/modules/m_links.c +++ b/modules/m_links.c @@ -19,7 +19,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA * - * $Id: m_links.c,v 1.4 2002/09/13 06:50:06 fishwaldo Exp $ + * $Id: m_links.c,v 1.5 2002/10/15 07:30:08 fishwaldo Exp $ */ #include "stdinc.h" @@ -62,7 +62,7 @@ _moddeinit(void) mod_del_cmd(&links_msgtab); } -const char *_version = "$Revision: 1.4 $"; +const char *_version = "$Revision: 1.5 $"; #endif /* * m_links - LINKS message handler @@ -141,6 +141,9 @@ static void mo_links(struct Client *client_p, struct Client *source_p, if (*mask && !match(mask, target_p->name)) continue; + + if (target_p->hidden_server && !IsOper(source_p)) + continue; if(target_p->info[0]) { diff --git a/modules/m_map.c b/modules/m_map.c index c9ee46a..efb8e9a 100644 --- a/modules/m_map.c +++ b/modules/m_map.c @@ -19,7 +19,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA * - * $Id: m_map.c,v 1.1 2002/09/13 07:05:32 fishwaldo Exp $ + * $Id: m_map.c,v 1.2 2002/10/15 07:30:08 fishwaldo Exp $ */ #include "stdinc.h" @@ -54,7 +54,7 @@ void _moddeinit(void) mod_del_cmd(&map_msgtab); } -const char *_version = "$Revision: 1.1 $"; +const char *_version = "$Revision: 1.2 $"; #endif static char buf[BUFSIZE]; @@ -98,7 +98,10 @@ static void dump_map(struct Client *client_p,struct Client *root_p, char *pbuf) struct Client *server_p,*user_p; *pbuf= '\0'; - + + if (root_p->hidden_server && !IsOper(client_p)) { + goto nextserver; + } strncat(pbuf,root_p->name,BUFSIZE - ((size_t) pbuf - (size_t) buf)); len = strlen(buf); buf[len] = ' '; @@ -120,7 +123,7 @@ static void dump_map(struct Client *client_p,struct Client *root_p, char *pbuf) 100 * (float) users / (float) Count.total); sendto_one(client_p, form_str(RPL_MAP),me.name,client_p->name,buf); - +nextserver: if ((server_p = root_p->serv->servers)) { for (; server_p; server_p = server_p->lnext) @@ -141,7 +144,7 @@ static void dump_map(struct Client *client_p,struct Client *root_p, char *pbuf) for (i = 1,server_p = root_p->serv->servers; server_p; server_p=server_p->lnext) { *pbuf = ' '; - if (i < cnt) + if ((i < cnt) && (!server_p->lnext->hidden_server && !IsOper(client_p))) *(pbuf + 1) = '|'; else *(pbuf + 1) = '`'; diff --git a/modules/m_stats.c b/modules/m_stats.c index eb21a19..ed62192 100644 --- a/modules/m_stats.c +++ b/modules/m_stats.c @@ -19,7 +19,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA * - * $Id: m_stats.c,v 1.6 2002/09/19 05:41:10 fishwaldo Exp $ + * $Id: m_stats.c,v 1.7 2002/10/15 07:30:08 fishwaldo Exp $ */ #include "stdinc.h" @@ -80,7 +80,7 @@ _moddeinit(void) mod_del_cmd(&stats_msgtab); } -const char *_version = "$Revision: 1.6 $"; +const char *_version = "$Revision: 1.7 $"; #endif const char* Lformat = ":%s %d %s %s %u %u %u %u %u :%u %u %s"; @@ -752,7 +752,7 @@ stats_ziplinks(struct Client *source_p) static void stats_servlinks(struct Client *source_p) { - static char Sformat[] = ":%s %d %s %s %u %u %u %u %u :%u %u %s"; + static char Sformat[] = ":%s %d %s %s %u %u %u %u %u :%u %u %s %s"; long uptime, sendK, receiveK; struct Client *target_p; dlink_node *ptr; @@ -769,11 +769,12 @@ stats_servlinks(struct Client *source_p) DLINK_FOREACH(ptr, serv_list.head) { target_p = ptr->data; - + if (!IsOper(source_p) && target_p->hidden_server) + continue; j++; sendK += target_p->localClient->sendK; receiveK += target_p->localClient->receiveK; - + sendto_one(source_p, Sformat, me.name, RPL_STATSLINKINFO, source_p->name, IsOperAdmin(source_p) ? get_client_name(target_p, SHOW_IP) @@ -785,7 +786,8 @@ stats_servlinks(struct Client *source_p) (int)target_p->localClient->receiveK, CurrentTime - target_p->firsttime, (CurrentTime > target_p->since) ? (CurrentTime - target_p->since): 0, - IsOper(source_p) ? show_capabilities(target_p) : "TS"); + IsOper(source_p) ? show_capabilities(target_p) : "TS", + target_p->hidden_server ? "H" : ""); } sendto_one(source_p, ":%s %d %s :%u total server(s)", diff --git a/modules/m_whois.c b/modules/m_whois.c index 45dce0a..3a2f51b 100644 --- a/modules/m_whois.c +++ b/modules/m_whois.c @@ -19,7 +19,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA * - * $Id: m_whois.c,v 1.9 2002/09/19 05:41:10 fishwaldo Exp $ + * $Id: m_whois.c,v 1.10 2002/10/15 07:30:08 fishwaldo Exp $ */ #include "stdinc.h" @@ -76,7 +76,7 @@ _moddeinit(void) mod_del_cmd(&whois_msgtab); } -const char *_version = "$Revision: 1.9 $"; +const char *_version = "$Revision: 1.10 $"; #endif /* ** m_whois @@ -433,8 +433,8 @@ whois_person(struct Client *source_p,struct Client *target_p, int glob) if ((IsOper(source_p) || !ConfigServerHide.hide_servers) || target_p == source_p) sendto_one(source_p, form_str(RPL_WHOISSERVER), - me.name, source_p->name, target_p->name, server_name, - a2client_p?a2client_p->info:"*Not On This Net*"); + me.name, source_p->name, target_p->name, !target_p->servptr->hidden_server ? server_name : ServerInfo.network_name, + target_p->servptr->hidden_server ? ServerInfo.network_desc : a2client_p ? a2client_p->info:"*Not On This Net*"); else sendto_one(source_p, form_str(RPL_WHOISSERVER), me.name, source_p->name, target_p->name,