Jump to content
SubSpace Forum Network

Recommended Posts

Posted

Replace in aliasdb.c

 

local helptext_t qip_help =
"Targets: none or player\n"
"Args: -i<ip address or pattern> -l<limit>\n"
"Queries the alias database for players connecting from that ip.\n"
"Queries can be an exact address, ?qip -i216.34.65.%, or ?qip -i216.34.65.0/24.\n";

local void Cqip(const char *params, Player *p, const Target *target)
{
   char ip [256];
   unsigned int limit;

   if (target->type != T_ARENA && target->type != T_PLAYER)
       return;

   if (!strstr(params,"-i") && target->type != T_PLAYER)
       return;

   p->flags.during_query = 1;

   if (strstr(params,"-l"))
   {
       limit = atoi(strstr(params,"-l")+2);

       if ( limit < 1 )
           limit = 1;

       if ( limit > 500 )
           limit = 500;
   } else
   {
       limit = 50;
   }

   if (target->type == T_PLAYER)
   {
       db->Query(dbcb_nameipmac, p, 1,
           "select name, inet_ntoa(ip), macid, to_days(now()) - to_days(lastseen) as daysago "
           "from " TABLE_NAME " "
           "where ip = inet_aton(?) "
           "order by name "
           "limit # ",
           target->u.p->ipaddr, limit);
   }
   else
   {
       if (strchr(strstr(params,"-i")+2, ' '))
       {
           ip [strchr(strstr(params,"-i")+2, ' ')-params-2] = 0;

           strncpy ( ip, strstr(params,"-i")+2, strchr(strstr(params,"-i")+2, ' ')-params-2);
       }
       else
       {
           strcpy ( ip, strstr(params,"-i")+2);
       }

       if (strchr(params, '/'))
       {
           char baseip[16];
           const char *next;
           unsigned int bits;

           next = delimcpy(baseip, ip, sizeof(baseip), '/');
           if (!next) return;
           bits = atoi(next);

           db->Query(dbcb_nameipmac, p, 1,
               "select name, inet_ntoa(ip), macid, to_days(now()) - to_days(lastseen) as daysago "
               "from " TABLE_NAME " "
               "where (ip & ((~0) << (32-#))) = (inet_aton(?) & ((~0) << (32-#))) "
               "order by name "
               "limit # ",
               bits, baseip, bits, limit);
       }
       else if (strchr(ip, '%'))
       {
           /* this is going to be a really really slow query... */
           db->Query(dbcb_nameipmac, p, 1,
               "select name, inet_ntoa(ip), macid, to_days(now()) - to_days(lastseen) as daysago "
               "from " TABLE_NAME " "
               "where inet_ntoa(ip) like ? "
               "order by name "
               "limit #",
               ip, limit);
       }
       else /* try exact ip match */
       {
           db->Query(dbcb_nameipmac, p, 1,
               "select name, inet_ntoa(ip), macid, to_days(now()) - to_days(lastseen) as daysago "
               "from " TABLE_NAME " "
               "where ip = inet_aton(?) "
               "order by name "
               "limit # ",
               ip, limit);
       }
   }
}

Posted
True, but haven't worked with patchfiles before, anyway I've also send it to Grel, so if the general consensus is that this in indeed an improvement over the old ?qip then it will be in the public dist anyway.
Posted
The only problem is that there is no real convention on how ASSS command parameters should look, and because I do think there needs to be a certain consistency, ah well, we'll see what I come up with, ?rawquery is next
Guest
This topic is now closed to further replies.
×
×
  • Create New...