]> git.sesse.net Git - nbtscanner/blobdiff - mysql_interface.c
Import nbtscanner 0.2.0.
[nbtscanner] / mysql_interface.c
index c51633a455d264f6610d41aeb2340952b9373a5e..fccd58c9edf22714055c09c329e53c6a162aa720 100644 (file)
@@ -23,6 +23,7 @@
  */
 
 #include <stdio.h>
+#include <string.h>
 #include <stdlib.h>
 #include <mysql.h>
 
@@ -53,12 +54,19 @@ void init_mysql(char *host, char *username, char *password)
        }
 }
 
-void add_record_mysql(char *ip, char *hostname, char *fileservername, char *groupname)
+void add_record_mysql(char *ip, char *hostname, char *fileservername, char *groupname,
+                     char messenger)
 {
        char query[256];
+       char hname[256], fsname[256], gname[256];
+
+       mysql_real_escape_string(mysql, hname, hostname, strlen(hostname));
+       mysql_real_escape_string(mysql, fsname, fileservername, strlen(fileservername));
+       mysql_real_escape_string(mysql, gname, groupname, strlen(groupname));
+
        snprintf(query, 256,
-               "REPLACE INTO nbtscanner.nbtscanner SET ip='%s', hostname='%s', fileservername='%s', groupname='%s';",
-               ip, hostname, fileservername, groupname);
+               "REPLACE INTO nbtscanner.nbtscanner SET ip='%s', hostname='%s', fileservername='%s', groupname='%s', active='y', lastactive=now(), messenger='%c';",
+               ip, hname, fsname, gname, messenger);
 
        if (mysql_query(mysql, query) != 0) {
                if (verbosity >= 1) {
@@ -72,7 +80,7 @@ void delete_record_mysql(char *ip)
 {
        char query[256];
        snprintf(query, 256,
-               "DELETE FROM nbtscanner.nbtscanner WHERE ip='%s';",
+               "UPDATE nbtscanner.nbtscanner SET ACTIVE='n' WHERE ip='%s';",
                ip);
 
        if (mysql_query(mysql, query) != 0) {
@@ -89,8 +97,12 @@ void print_all_records_mysql()
        unsigned long *lengths;
        unsigned int num_fields;
        int i;
+       char query[512];
 
-       if (mysql_query(mysql, "SELECT ip,fileservername,groupname,(fileservername <> '-unknown-nbtscanner-') FROM nbtscanner.nbtscanner;") != 0) {
+       snprintf(query, 512, "SELECT ip,(CASE WHEN fileservername='-unknown-nbtscanner-' THEN hostname ELSE fileservername END),groupname,(fileservername <> '-unknown-nbtscanner-') FROM nbtscanner.nbtscanner WHERE active='y' OR lastactive>DATE_SUB(NOW(), INTERVAL %d SECOND);",
+               ghost_lifetime);
+
+       if (mysql_query(mysql, query) != 0) {
                if (verbosity >= 1) {
                        fprintf(stderr, "mysql_query('SELECT ip'...) failed\n");
                }
@@ -117,12 +129,12 @@ void print_all_records_mysql()
 
                        /* strip away CR/LFs */
                        for (j = 0; j < lengths[i]; j++) {
-                               if (row[i][j] == 0 || row[i][j] == 10 || row[i][j] == 13) {
+                               if (row[i][j] == 0 || row[i][j] == 10 || row[i][j] == 13 || row[i][j] == ',') {
                                        row[i][j] = '?';
                                }
                        }
                        printf("%.*s", (int) lengths[i], row[i] ? row[i] : "NULL");
-                       if (i != num_fields - 1) putchar(0);
+                       if (i != num_fields - 1) printf(",");
                }
                printf("\r\n");
         }