6
#include <openssl/ssl.h>
7
#include <openssl/err.h>
8
#include "libclamav/crypto.h"
10
#include <curl/curl.h>
12
#include "libclamav/clamav.h"
13
#include "libclamav/others.h"
14
#include "shared/misc.h"
15
#include "shared/getopt.h"
17
#define OPTS "e:p:n:N:H:h?v"
19
char *read_stream(void);
21
void usage(char *name)
23
fprintf(stderr, "USAGE: %s -hHinp?\n", name);
24
fprintf(stderr, "OPTIONS:\n");
25
fprintf(stderr, " -e [EMAIL]\tYour email address (required)\n");
26
fprintf(stderr, " -h or -?\tShow the help text\n");
27
fprintf(stderr, " -n [FILE]\tSubmit a false negative (FN)\n");
28
fprintf(stderr, " -N [NAME]\tYour name (required)\n");
29
fprintf(stderr, " -p [FILE]\tSubmit a fase positive (FP)\n");
30
fprintf(stderr, " -v\t\tShow version number and exit\n");
31
fprintf(stderr, "You must specify -n or -p. Both are mutually exclusive. Pass in - as the filename for stdin.\n");
41
int main(int argc, char *argv[])
46
struct curl_httppost *post=NULL, *last=NULL;
47
struct curl_slist *slist = NULL;
49
char *name=NULL, *email=NULL, *filename=NULL;
50
struct cl_engine *engine;
51
int setURL=0, fromStream=0;
53
curl_global_init(CURL_GLOBAL_ALL);
55
curl = curl_easy_init();
57
fprintf(stderr, "ERROR: Could not initialize libcurl\n");
61
while ((ch = my_getopt(argc, argv, OPTS)) > 0) {
77
curl_easy_setopt(curl, CURLOPT_URL, "http://cgi.clamav.net/sendfp.cgi");
86
curl_easy_setopt(curl, CURLOPT_URL, "http://cgi.clamav.net/sendmalware.cgi");
96
if (!(name) || !(email) || !(filename))
99
if (strlen(filename) == 1 && filename[0] == '-') {
100
filename = read_stream();
102
fprintf(stderr, "ERROR: Unable to read stream\n");
109
slist = curl_slist_append(slist, "Expect:");
110
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, slist);
112
if (curl_formadd(&post, &last, CURLFORM_COPYNAME, "sendername", CURLFORM_COPYCONTENTS, name, CURLFORM_END)) {
113
fprintf(stderr, "Unable to specify name in libcurl form for file %s\n", optarg);
117
if (curl_formadd(&post, &last, CURLFORM_COPYNAME, "email", CURLFORM_COPYCONTENTS, email, CURLFORM_END)) {
118
fprintf(stderr, "Unable to specify email in libcurl form for file %s\n", optarg);
122
if (curl_formadd(&post, &last, CURLFORM_COPYNAME, "file", CURLFORM_FILE, filename, CURLFORM_END)) {
123
fprintf(stderr, "Unable to specify file path in libcurl form for file %s\n", optarg);
127
curl_formadd(&post, &last, CURLFORM_COPYNAME, "action", CURLFORM_COPYCONTENTS, "submit", CURLFORM_END);
128
curl_formadd(&post, &last, CURLFORM_COPYNAME, "privacy", CURLFORM_COPYCONTENTS, "yes", CURLFORM_END);
129
curl_formadd(&post, &last, CURLFORM_COPYNAME, "notify", CURLFORM_COPYCONTENTS, "yes", CURLFORM_END);
131
curl_easy_setopt(curl, CURLOPT_HTTPPOST, post);
132
res = curl_easy_perform(curl);
135
fprintf(stderr, "Error: %s\n", curl_easy_strerror(res));
139
curl_easy_cleanup(curl);
148
char *read_stream(void)
152
size_t nread, nwritten;
155
filename = cli_gentemp(NULL);
160
fp = fopen(filename, "w");
166
while (!feof(stdin)) {
168
nread = fread(buf, 1, sizeof(buf), stdin);
176
while (nwritten < nread) {
178
i = fwrite(buf, 1, nread, fp);