void DatabaseManager::slotQuery(QString connection, QString query, QueryProcess process){ QSqlQuery databaseQuery(QSqlDatabase::database(connection)); databaseQuery.setForwardOnly(true); databaseQuery.prepare(query); process(&databaseQuery); }
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); }
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; }
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); } }