if (!ircd_strncmp(msg,"debug",5)) {
proxyscandebug(sender);
}
-
+
+ if (!ircd_strncmp(msg,"spew ",5)) {
+ /* check our database for the ip supplied */
+ unsigned long a,b,c,d;
+ if (4 != sscanf(&msg[5],"%lu.%lu.%lu.%lu",&a,&b,&c,&d)) {
+ sendnoticetouser(proxyscannick,sender,"Usage: spew x.x.x.x");
+ } else {
+ /* check db */
+ proxyscanspewip(proxyscannick,sender,a,b,c,d);
+ }
+ }
+
+ if (!ircd_strncmp(msg,"showkill ",9)) {
+ /* check our database for the id supplied */
+ unsigned long a;
+ if (1 != sscanf(&msg[9],"%lu",&a)) {
+ sendnoticetouser(proxyscannick,sender,"Usage: showkill <id>");
+ } else {
+ /* check db */
+ proxyscanshowkill(proxyscannick,sender,a);
+ }
+ }
+
if (!ircd_strncmp(msg,"scan ",5)) {
unsigned long a,b,c,d;
if (4 != sscanf(&msg[5],"%lu.%lu.%lu.%lu",&a,&b,&c,&d)) {
}
}
- if (!ircd_strncmp(msg,"help",4)) {
+ if ((!ircd_strncmp(msg,"help",4)) || (!ircd_strncmp(msg,"showcommands",12))) {
sendnoticetouser(proxyscannick,sender,"Proxyscan commands:");
- sendnoticetouser(proxyscannick,sender,"-------------------------------------------");
- sendnoticetouser(proxyscannick,sender,"help Shows this help");
- sendnoticetouser(proxyscannick,sender,"status Prints status information");
- sendnoticetouser(proxyscannick,sender,"listopen Shows open proxies found recently");
- sendnoticetouser(proxyscannick,sender,"save Saves the clean host database");
+ sendnoticetouser(proxyscannick,sender,"----------------------------------------------------------------------");
+ sendnoticetouser(proxyscannick,sender,"help Shows this help");
+ sendnoticetouser(proxyscannick,sender,"status Prints status information");
+ sendnoticetouser(proxyscannick,sender,"listopen Shows open proxies found recently");
+ sendnoticetouser(proxyscannick,sender,"save Saves the clean host database");
+ sendnoticetouser(proxyscannick,sender,"scan <ip> Force scan of the supplied IP");
+ sendnoticetouser(proxyscannick,sender,"spew <ip> Find <ip> in our list of open proxies");
+ sendnoticetouser(proxyscannick,sender,"showkill <id> Shows details of a kill or gline made by the service");
}
}
void proxyscandbclose();
int proxyscandbinit();
void proxyscandolistopen(nick *mynick, nick *usernick, time_t snce);
+void proxyscanspewip(nick *mynick, nick *usernick, unsigned long a, unsigned long b, unsigned long c, unsigned long d);
+void proxyscanshowkill(nick *mynick, nick *usernick, unsigned long a);
const char *scantostr(int type);
#if defined(PROXYSCAN_MAIL)
sendnoticetouser(mynick,usernick,"--- End of list ---");
mysql_free_result(myres);
}
+
+/*
+ * proxyscanspewip
+ * Check db for open proxies matching the given IP, send to user usernick.
+ */
+
+void proxyscanspewip(nick *mynick, nick *usernick, unsigned long a, unsigned long b, unsigned long c, unsigned long d) {
+ char mysqlquery[2000];
+ MYSQL_RES *myres;
+ MYSQL_ROW myrow;
+
+ sprintf(mysqlquery, "SELECT ID,IP,TS,RH FROM openproxies WHERE IP='%lu.%lu.%lu.%lu' ORDER BY TS DESC LIMIT 10",a,b,c,d);
+
+ if ((mysql_query(&proxyscansql,mysqlquery))!=0) {
+ sendnoticetouser(mynick,usernick,"Error performing database query!");
+ Error("proxyscan",ERR_ERROR,"Error performing spew query");
+ return;
+ }
+
+ myres=mysql_use_result(&proxyscansql);
+ if (mysql_num_fields(myres)!=4) {
+ sendnoticetouser(mynick,usernick,"Error performing database query!");
+ Error("proxyscan",ERR_ERROR,"Error performing spew query");
+ return;
+ }
+
+ sendnoticetouser(mynick,usernick,"%-5s %-20s %-22s %s","ID","IP","Found at","What was open");
+ while ((myrow=mysql_fetch_row(myres))) {
+ sendnoticetouser(mynick,usernick,"%-5s %-20s %-22s %s",myrow[0],myrow[1],myrow[2],myrow[3]);
+ }
+ sendnoticetouser(mynick,usernick,"--- End of list ---");
+ mysql_free_result(myres);
+}
+
+/*
+ * proxyscanshowkill
+ * Check db for open proxies matching the given kill/gline ID, send to user usernick.
+ */
+
+void proxyscanshowkill(nick *mynick, nick *usernick, unsigned long a) {
+ char mysqlquery[2000];
+ MYSQL_RES *myres;
+ MYSQL_ROW myrow;
+
+ sprintf(mysqlquery, "SELECT ID,IP,TS,RH FROM openproxies WHERE ID='%lu'",a);
+
+ if ((mysql_query(&proxyscansql,mysqlquery))!=0) {
+ sendnoticetouser(mynick,usernick,"Error performing database query!");
+ Error("proxyscan",ERR_ERROR,"Error performing showkill query");
+ return;
+ }
+
+ myres=mysql_use_result(&proxyscansql);
+ if (mysql_num_fields(myres)!=4) {
+ sendnoticetouser(mynick,usernick,"Error performing database query!");
+ Error("proxyscan",ERR_ERROR,"Error performing showkill query");
+ return;
+ }
+
+ sendnoticetouser(mynick,usernick,"%-5s %-20s %-22s %s","ID","IP","Found at","What was open");
+ /* even though we should only ever have 1 result, still loop below - who knows eh? */
+ while ((myrow=mysql_fetch_row(myres))) {
+ sendnoticetouser(mynick,usernick,"%-5s %-20s %-22s %s",myrow[0],myrow[1],myrow[2],myrow[3]);
+ }
+ sendnoticetouser(mynick,usernick,"--- End of list ---");
+ mysql_free_result(myres);
+}