void DatabaseManager::slotQuery(QString connection, QString query, QueryProcess process){
    QSqlQuery databaseQuery(QSqlDatabase::database(connection));
    databaseQuery.setForwardOnly(true);
    databaseQuery.prepare(query);

    process(&databaseQuery);
}
Example #2
0
void launch_push_queries(char* address, void* context, struct email* email)
{ /* SELECT push_id, push_type FROM push_ids WHERE email = '*****@*****.**'; */
  size_t email_len = strlen(address); /* I am aware that I should escape this right here.. */
  size_t output_len = email_len + 55 + 2 + 1; /* Sadly that requires a PGconn* object, which I don't have here. */
  char buffer[output_len]; //TODO escape this query properly
  snprintf(buffer, sizeof(buffer), "SELECT push_id, push_type FROM push_ids WHERE email = '%s';", address);
  char* query = malloc(output_len);
  strcpy(query, buffer);
  struct push_info* push_info = malloc(sizeof(struct push_info));
  if (email->subject) {
    push_info->subject = malloc(strlen(email->subject));
    strcpy(push_info->subject, email->subject);
  } else
    push_info->subject = NULL;
  if (email->data) {
    push_info->data = malloc(strlen(email->data));
    strcpy(push_info->data, email->data);
  } else
    push_info = NULL;
  if (email->from) {
    push_info->sender = malloc(strlen(email->from));
    strcpy(push_info->sender, email->from);
  } else
    push_info->sender = NULL;
  push_info->event_base = (struct event_base*) context;
  if (!dns)
    dns = evdns_base_new(push_info->event_base, 1);
  databaseQuery(query, push_query_result, push_info);
}
Example #3
0
void kismet_conn_readcb(struct bufferevent *bev, void* args) {
  DEBUG(255, "kismet_conn_readcb(%p, %p);", bev, args);
  struct evbuffer* input = bufferevent_get_input(bev);
  struct evbuffer* output = bufferevent_get_output(bev);
  struct server* server = (struct server*) args;
  size_t len;
  char* line = evbuffer_readln(input, &len, EVBUFFER_EOL_CRLF);
  while (line) {
    DEBUG(255, "Input: '%s'", line);
    static const char* CAPABILITY_SSCANF = "*CAPABILITY: %s %[^\n]";
    static const char* GENERAL_HEADER_SSCANF = "*%[A-Z]: %[^\n]";
    char type[BUFSIZ];
    char rest[BUFSIZ];
    if (sscanf(line, CAPABILITY_SSCANF, type, rest) == 2) {
      struct inserter* inserter = server->inserters;
      while (inserter) {
        if (strcmp(inserter->type, type) == 0)
          break;
        inserter = inserter->next;
      };
      if (inserter && !inserter->capabilities) {
        char* token = strtok(rest, ",");
        while (token) {
          unsigned int next_token = 0;
          if (inserter->capabilities) {
            while (inserter->capabilities[++next_token]);
            inserter->capabilities = realloc(inserter->capabilities, sizeof(char*) * (next_token + 2));
          } else
            inserter->capabilities = malloc(sizeof(char*) * 2);
          inserter->capabilities[next_token] = strdup(token);
          inserter->capabilities[++next_token] = NULL;
          token = strtok(NULL, ",");
        };
        static const char* ENABLE_EVENT = "!%d ENABLE %s *\n";
        evbuffer_add_printf(output, ENABLE_EVENT, inserter->ack_id, inserter->type);
      };
    } else if (sscanf(line, GENERAL_HEADER_SSCANF, type, rest) == 2) {
      struct inserter* inserter = server->inserters;
      while (inserter) {
        if (strcmp(inserter->type, type) == 0) {
          char query[1024*64]; /* Should be plenty */
          memset(query, 0, 1024*64);
          if (query_printf(query, rest, inserter)) {
            DEBUG(255, "Query: '%s'", query);
            databaseQuery(server->db, query, NULL, NULL);
          }
          break;
        }
        inserter = inserter->next;
      };
    };
    free(line);
    line = evbuffer_readln(input, &len, EVBUFFER_EOL_CRLF);
  };
};
static bool extractMetaData(SQLiteDatabase& sqliteDatabase, const String& name, String& foundVersion, int64& foundId)
{
    SQLiteStatement databaseQuery(sqliteDatabase, "SELECT id, version FROM Databases WHERE name = ?");
    if (databaseQuery.prepare() != SQLResultOk) {
        ASSERT_NOT_REACHED();
        return false;
    }
    databaseQuery.bindText(1, name);
    if (databaseQuery.step() != SQLResultRow)
        return false;

    foundId = databaseQuery.getColumnInt64(0);
    foundVersion = databaseQuery.getColumnText(1);

    if (databaseQuery.step() == SQLResultRow)
        ASSERT_NOT_REACHED();
    return true;
}
Example #5
0
static void smtp_conn_readcb(struct bufferevent *bev, void* args)
{
  struct evbuffer* buffer = bufferevent_get_input(bev);
  struct email* email = (struct email*) args;
  size_t len;
  char* line = evbuffer_readln(buffer, &len, EVBUFFER_EOL_CRLF);
  while (line) {
    if (email->mode != DATA) {
      if (string_equals(line, "QUIT"))
        bufferevent_write(bev, _221_BYE, strlen(_221_BYE));
      else if (string_equals(line, "RSET"))
        bufferevent_write(bev, _502_NOT_SUPPORTED, strlen(_502_NOT_SUPPORTED));
    }
    switch (email->mode) {
    case HEADERS:
      if (len >= 4 && !email->ehlo) { /* Could be an EHLO or HELO */
        if (string_startsWith(line, "EHLO") || string_startsWith(line, "HELO")) {
          email->ehlo = 1;
          bufferevent_write(bev, _250_OK, strlen(_250_OK));
        }
      } else if (email->ehlo) {
        if (!forEachCharacter(line, isEmailCharacters)) {
          if (string_startsWith(line, "MAIL FROM:<")) {
            char* addr = stripOutEmailAddress(line);
            if (addr) {
              char* query = create_check_email_from_query(addr);
              if (query)
                databaseQuery(query, check_email_from_callback, email);
              else
                bufferevent_write(bev, _550_NOT_ALLOWED, strlen(_550_NOT_ALLOWED));
              SAFEFREE(addr);
            } else
              bufferevent_write(bev, _550_NOT_ALLOWED, strlen(_550_NOT_ALLOWED));
          } else if (string_startsWith(line, "RCPT TO:<")) {
            char* addr = stripOutEmailAddress(line);
            if (addr) {
              char* query = create_check_email_to_query(addr);
              if (query)
                databaseQuery(query, check_email_to_callback, email);
              else
                bufferevent_write(bev, _550_NOT_ALLOWED, strlen(_550_NOT_ALLOWED));
              SAFEFREE(addr);
            } else
              bufferevent_write(bev, _550_NOT_ALLOWED, strlen(_550_NOT_ALLOWED));
          } else if (string_equals(line, "DATA")) {
            if (email_has_recipients(email)) {
              bufferevent_write(bev, _354_GO_AHEAD, strlen(_354_GO_AHEAD));
              email->mode = DATA_HEADERS;
            } else
              bufferevent_write(bev, _503_BAD_SEQUENCE, strlen(_503_BAD_SEQUENCE));
          } else
            bufferevent_write(bev, _550_NOT_ALLOWED, strlen(_550_NOT_ALLOWED));
        } else
          bufferevent_write(bev, _502_NOT_SUPPORTED, strlen(_502_NOT_SUPPORTED));
      }
      break;
    case DATA_HEADERS:
      if (strlen(line) == 0)
        email->mode = DATA;
      else if (!string_contains(line, ':')) {
        email->mode = DATA;
        email_append_data(email, line);
      } else if (string_startsWith(line, "Subject: "))
        email_set_subject(email, line);
      break;
    case DATA:
      if (strlen(line) > 0) {
        if (string_equals(line, ".")) {
          bufferevent_write(bev, _250_OK, strlen(_250_OK));
          email->mode = DATA_DONE;
          email_for_each_recipient(email, bufferevent_get_base(bev), launch_push_queries);
        } else
          email_append_data(email, line);
      }
      break;
    default:
      break;
    }
#ifdef DEV
    printf("I got the following line: %s\n", line);
#endif
    SAFEFREE(line);
    line = evbuffer_readln(buffer, &len, EVBUFFER_EOL_CRLF);
  }
}