]> jfr.im git - solanum.git/blobdiff - modules/m_capab.c
whois: Fix UID leak.
[solanum.git] / modules / m_capab.c
index 58901fb8df222be0a4ae6bb0c3dfc4a778c7362a..b03fb3fd13a88f2e57762d007ad2dbe11a0e9791 100644 (file)
@@ -1,6 +1,6 @@
 /*
  *  ircd-ratbox: A slightly useful ircd.
- *  m_away.c: Negotiates capabilities with a remote server.
+ *  m_capab.c: Negotiates capabilities with a remote server.
  *
  *  Copyright (C) 1990 Jarkko Oikarinen and University of Oulu, Co Center
  *  Copyright (C) 1996-2002 Hybrid Development Team
@@ -26,7 +26,7 @@
 
 #include "stdinc.h"
 #include "client.h"
-#include "irc_string.h"
+#include "match.h"
 #include "s_serv.h"
 #include "s_conf.h"
 #include "msg.h"
@@ -38,7 +38,7 @@ static int me_gcap(struct Client *, struct Client *, int, const char **);
 
 struct Message capab_msgtab = {
        "CAPAB", 0, 0, 0, MFLG_SLOW | MFLG_UNREG,
-       {{mr_capab, 0}, mg_ignore, mg_ignore, mg_ignore, mg_ignore, mg_ignore}
+       {{mr_capab, 2}, mg_ignore, mg_ignore, mg_ignore, mg_ignore, mg_ignore}
 };
 struct Message gcap_msgtab = {
        "GCAP", 0, 0, 0, MFLG_SLOW,
@@ -50,14 +50,12 @@ DECLARE_MODULE_AV1(capab, NULL, NULL, capab_clist, NULL, NULL, "$Revision: 1295
 
 /*
  * mr_capab - CAPAB message handler
- *      parv[0] = sender prefix
  *      parv[1] = space-separated list of capabilities
  *
  */
 static int
 mr_capab(struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
 {
-       struct Capability *cap;
        int i;
        char *p;
        char *s;
@@ -85,16 +83,7 @@ mr_capab(struct Client *client_p, struct Client *source_p, int parc, const char
        {
                char *t = LOCAL_COPY(parv[i]);
                for (s = rb_strtok_r(t, " ", &p); s; s = rb_strtok_r(NULL, " ", &p))
-               {
-                       for (cap = captab; cap->name; cap++)
-                       {
-                               if(!irccmp(cap->name, s))
-                               {
-                                       client_p->localClient->caps |= cap->cap;
-                                       break;
-                               }
-                       }
-               }
+                       client_p->localClient->caps |= capability_get(serv_capindex, s);
        }
 
        return 0;
@@ -104,7 +93,6 @@ static int
 me_gcap(struct Client *client_p, struct Client *source_p,
                int parc, const char *parv[])
 {
-       struct Capability *cap;
        char *t = LOCAL_COPY(parv[1]);
        char *s;
        char *p;
@@ -122,16 +110,7 @@ me_gcap(struct Client *client_p, struct Client *source_p,
        source_p->serv->fullcaps = rb_strdup(parv[1]);
 
        for (s = rb_strtok_r(t, " ", &p); s; s = rb_strtok_r(NULL, " ", &p))
-       {
-               for (cap = captab; cap->name; cap++)
-               {
-                       if(!irccmp(cap->name, s))
-                       {
-                               source_p->serv->caps |= cap->cap;
-                               break;
-                       }
-               }
-       }
+               source_p->serv->caps |= capability_get(serv_capindex, s);
 
        return 0;
 }