]> jfr.im git - irc/rqf/shadowircd.git/blobdiff - modules/core/m_server.c
Allow for capabilities to be marked as "required".
[irc/rqf/shadowircd.git] / modules / core / m_server.c
index 400950014ba62b8256b1fba30c64b51337774918..e4abd359dd954f9218e98db8874585e27d4bf222 100644 (file)
@@ -64,7 +64,6 @@ static int set_server_gecos(struct Client *, const char *);
 
 /*
  * mr_server - SERVER message handler
- *      parv[0] = sender prefix
  *      parv[1] = servername
  *      parv[2] = serverinfo/hopcount
  *      parv[3] = serverinfo
@@ -206,13 +205,24 @@ mr_server(struct Client *client_p, struct Client *source_p, int parc, const char
                 * Definitely don't do that here. This is from an unregistered
                 * connect - A1kmm.
                 */
-               sendto_realops_snomask(SNO_GENERAL, L_ALL,
-                                    "Attempt to re-introduce server %s from %s",
-                                    name, "[@255.255.255.255]");
-               ilog(L_SERVER, "Attempt to re-introduce server %s from %s",
-                               name, log_client_name(client_p, SHOW_IP));
+               if (target_p->servptr->flags & FLAGS_SERVICE)
+               {
+                       /* Assume any servers introduced by services
+                        * are jupes.
+                        * -- jilles
+                        */
+                       sendto_one(client_p, "ERROR :Server juped.");
+               }
+               else
+               {
+                       sendto_realops_snomask(SNO_GENERAL, L_ALL,
+                                            "Attempt to re-introduce server %s from %s",
+                                            name, "[@255.255.255.255]");
+                       ilog(L_SERVER, "Attempt to re-introduce server %s from %s",
+                                       name, log_client_name(client_p, SHOW_IP));
 
-               sendto_one(client_p, "ERROR :Server already exists.");
+                       sendto_one(client_p, "ERROR :Server already exists.");
+               }
                exit_client(client_p, client_p, client_p, "Server Exists");
                return 0;
        }
@@ -250,7 +260,6 @@ mr_server(struct Client *client_p, struct Client *source_p, int parc, const char
 
 /*
  * ms_server - SERVER message handler
- *      parv[0] = sender prefix
  *      parv[1] = servername
  *      parv[2] = serverinfo/hopcount
  *      parv[3] = serverinfo
@@ -297,7 +306,7 @@ ms_server(struct Client *client_p, struct Client *source_p, int parc, const char
                ilog(L_SERVER, "Link %s cancelled, server %s already exists",
                        client_p->name, name);
 
-               snprintf(squitreason, sizeof squitreason,
+               rb_snprintf(squitreason, sizeof squitreason,
                                "Server %s already exists",
                                name);
                exit_client(client_p, client_p, &me, squitreason);
@@ -332,11 +341,6 @@ ms_server(struct Client *client_p, struct Client *source_p, int parc, const char
         * add it to list and propagate word to my other
         * server links...
         */
-       if(parc == 1 || EmptyString(info))
-       {
-               sendto_one(client_p, "ERROR :No server info specified for %s", name);
-               return 0;
-       }
 
        /*
         * See if the newly found server is behind a guaranteed
@@ -379,7 +383,7 @@ ms_server(struct Client *client_p, struct Client *source_p, int parc, const char
         * .edu's
         */
 
-       /* Ok, check client_p can hub the new server, and make sure it's not a LL */
+       /* Ok, check client_p can hub the new server */
        if(!hlined)
        {
                /* OOOPs nope can't HUB */
@@ -388,7 +392,10 @@ ms_server(struct Client *client_p, struct Client *source_p, int parc, const char
                ilog(L_SERVER, "Non-Hub link %s introduced %s.",
                        client_p->name, name);
 
-               exit_client(NULL, client_p, &me, "No matching hub_mask.");
+               rb_snprintf(squitreason, sizeof squitreason,
+                               "No matching hub_mask for %s",
+                               name);
+               exit_client(NULL, client_p, &me, squitreason);
                return 0;
        }
 
@@ -402,7 +409,10 @@ ms_server(struct Client *client_p, struct Client *source_p, int parc, const char
                ilog(L_SERVER, "Link %s introduced leafed server %s.",
                        client_p->name, name);  
 
-               exit_client(NULL, client_p, &me, "Leafed Server.");
+               rb_snprintf(squitreason, sizeof squitreason,
+                               "Matching leaf_mask for %s",
+                               name);
+               exit_client(NULL, client_p, &me, squitreason);
                return 0;
        }
 
@@ -477,7 +487,7 @@ ms_sid(struct Client *client_p, struct Client *source_p, int parc, const char *p
                ilog(L_SERVER, "Link %s cancelled, server %s already exists",
                        client_p->name, parv[1]);
 
-               snprintf(squitreason, sizeof squitreason,
+               rb_snprintf(squitreason, sizeof squitreason,
                                "Server %s already exists",
                                parv[1]);
                exit_client(NULL, client_p, &me, squitreason);
@@ -496,7 +506,7 @@ ms_sid(struct Client *client_p, struct Client *source_p, int parc, const char *p
                ilog(L_SERVER, "Link %s cancelled, SID %s for server %s already in use by %s",
                        client_p->name, parv[3], parv[1], target_p->name);
 
-               snprintf(squitreason, sizeof squitreason,
+               rb_snprintf(squitreason, sizeof squitreason,
                                "SID %s for %s already in use by %s",
                                parv[3], parv[1], target_p->name);
                exit_client(NULL, client_p, &me, squitreason);
@@ -550,26 +560,32 @@ ms_sid(struct Client *client_p, struct Client *source_p, int parc, const char *p
        /* no matching hub_mask */
        if(!hlined)
        {
-               sendto_one(client_p, "ERROR :No matching hub_mask");
                sendto_realops_snomask(SNO_GENERAL, L_ALL,
                                     "Non-Hub link %s introduced %s.",
                                     client_p->name, parv[1]);
                ilog(L_SERVER, "Non-Hub link %s introduced %s.",
                        client_p->name, parv[1]);
-               exit_client(NULL, client_p, &me, "No matching hub_mask.");
+
+               rb_snprintf(squitreason, sizeof squitreason,
+                               "No matching hub_mask for %s",
+                               parv[1]);
+               exit_client(NULL, client_p, &me, squitreason);
                return 0;
        }
 
        /* matching leaf_mask */
        if(llined)
        {
-               sendto_one(client_p, "ERROR :Matching leaf_mask");
                sendto_realops_snomask(SNO_GENERAL, L_ALL,
                                     "Link %s introduced leafed server %s.",
                                     client_p->name, parv[1]);
                ilog(L_SERVER, "Link %s introduced leafed server %s.",
                        client_p->name, parv[1]);       
-               exit_client(NULL, client_p, &me, "Leafed Server.");
+
+               rb_snprintf(squitreason, sizeof squitreason,
+                               "Matching leaf_mask for %s",
+                               parv[1]);
+               exit_client(NULL, client_p, &me, squitreason);
                return 0;
        }
 
@@ -626,7 +642,6 @@ set_server_gecos(struct Client *client_p, const char *info)
        {
                char *p;
                char *s;
-               char *t;
 
                s = LOCAL_COPY(info);
 
@@ -635,7 +650,7 @@ set_server_gecos(struct Client *client_p, const char *info)
                        *p = '\0';
 
                /* check for a ] which would symbolise an [IP] */
-               if((t = strchr(s, ']')))
+               if(strchr(s, ']'))
                {
                        /* set s to after the first space */
                        if(p)