X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=ircd%2Fm_links.c;h=68bf87fd92fc1edc781f9b1c37b0f4847ac2a681;hb=refs%2Fheads%2Fupstream;hp=60cd7d388411ae515a3712a3ad65e38e25ed4ffb;hpb=1110a5d3d27947066b4ba846a0d80c6b573d6ca0;p=ircu2.10.12-pk.git diff --git a/ircd/m_links.c b/ircd/m_links.c index 60cd7d3..68bf87f 100644 --- a/ircd/m_links.c +++ b/ircd/m_links.c @@ -84,7 +84,8 @@ #include "client.h" #include "ircd.h" #include "ircd_defs.h" -#include "ircd_policy.h" +#include "ircd_features.h" +#include "ircd_log.h" #include "ircd_reply.h" #include "ircd_string.h" #include "match.h" @@ -94,9 +95,8 @@ #include "s_user.h" #include "send.h" #include "struct.h" -#include "map.h" -#include +/* #include -- Now using assert in ircd_log.h */ /* * m_links - generic message handler @@ -113,7 +113,16 @@ int m_links(struct Client* cptr, struct Client* sptr, int parc, char* parv[]) { char *mask; - struct Client *acptr = 0; + struct Client *acptr; + + if (feature_bool(FEAT_HIS_LINKS) && !IsAnOper(sptr)) + { + send_reply(sptr, RPL_ENDOFLINKS, parc < 2 ? "*" : parv[1]); + sendcmdto_one(&me, CMD_NOTICE, sptr, "%C :%s %s", sptr, + "/LINKS has been disabled, from CFV-165. Visit ", + feature_str(FEAT_HIS_URLSERVERS)); + return 0; + } if (parc > 2) { @@ -141,24 +150,45 @@ int m_links(struct Client* cptr, struct Client* sptr, int parc, char* parv[]) return 0; } -#ifdef HEAD_IN_SAND_LINKS -int m_links_redirect(struct Client* cptr, struct Client* sptr, int parc, char* parv[]) -{ - if (parc > 2) - return send_reply(cptr, ERR_NOPRIVILEGES); - - map_dump_links_head_in_sand(sptr, parv[1]); - - send_reply(sptr, RPL_ENDOFLINKS, BadPtr(parv[1]) ? "*" : parv[1]); - - return 0; -} - -#endif HEAD_IN_SAND_LINKS - - - - - - - +/* + * ms_links - server message handler + * + * parv[0] = sender prefix + * parv[1] = servername mask + * + * or + * + * parv[0] = sender prefix + * parv[1] = server to query + * parv[2] = servername mask + */ +int +ms_links(struct Client* cptr, struct Client* sptr, int parc, char* parv[]) + { + char *mask; + struct Client *acptr; + + if (parc > 2) + { + if (hunt_server_cmd(sptr, CMD_LINKS, cptr, 1, "%C :%s", 1, parc, parv) != + HUNTED_ISME) + return 0; + mask = parv[2]; + } + else + mask = parc < 2 ? 0 : parv[1]; + + for (acptr = GlobalClientList, collapse(mask); acptr; acptr = cli_next(acptr)) + { + if (!IsServer(acptr) && !IsMe(acptr)) + continue; + if (!BadPtr(mask) && match(mask, cli_name(acptr))) + continue; + send_reply(sptr, RPL_LINKS, cli_name(acptr), cli_name(cli_serv(acptr)->up), + cli_hopcount(acptr), cli_serv(acptr)->prot, + ((cli_info(acptr))[0] ? cli_info(acptr) : "(Unknown Location)")); + } + + send_reply(sptr, RPL_ENDOFLINKS, BadPtr(mask) ? "*" : mask); + return 0; + }