summaryrefslogtreecommitdiff
path: root/src/sp_upload_validation.c
diff options
context:
space:
mode:
authorjvoisin2022-03-20 18:20:45 +0100
committerjvoisin2022-03-20 18:20:45 +0100
commit81dd7f2ef07af306fe83d7755cbac4529aa9fc8d (patch)
tree32cc44c6231b30db5ac7b15699297863460784aa /src/sp_upload_validation.c
parent83b01942dfc80474cc05e09aeef4b44307a7120b (diff)
parentc38df1077a6c1dfbca1baca049214d053e2e7684 (diff)
Merge remote-tracking branch 'sektioneins/master'
Diffstat (limited to 'src/sp_upload_validation.c')
-rw-r--r--src/sp_upload_validation.c34
1 files changed, 11 insertions, 23 deletions
diff --git a/src/sp_upload_validation.c b/src/sp_upload_validation.c
index cebab3e..38b4cb3 100644
--- a/src/sp_upload_validation.c
+++ b/src/sp_upload_validation.c
@@ -32,28 +32,21 @@ int sp_rfc1867_callback(unsigned int event, void *event_data, void **extra) {
32 32
33 if (event == MULTIPART_EVENT_END) { 33 if (event == MULTIPART_EVENT_END) {
34 zend_string *file_key __attribute__((unused)) = NULL; 34 zend_string *file_key __attribute__((unused)) = NULL;
35 const sp_config_upload_validation *config_upload = 35 const sp_config_upload_validation *config_upload = &(SPCFG(upload_validation));
36 SNUFFLEUPAGUS_G(config).config_upload_validation;
37 zval *file; 36 zval *file;
38 pid_t pid; 37 pid_t pid;
39 38
40 sp_log_debug( 39 sp_log_debug("Got %d files", zend_hash_num_elements(Z_ARRVAL(PG(http_globals)[TRACK_VARS_FILES])));
41 "Got %d files",
42 zend_hash_num_elements(Z_ARRVAL(PG(http_globals)[TRACK_VARS_FILES])));
43 40
44 ZEND_HASH_FOREACH_STR_KEY_VAL(Z_ARRVAL(PG(http_globals)[TRACK_VARS_FILES]), 41 ZEND_HASH_FOREACH_STR_KEY_VAL(Z_ARRVAL(PG(http_globals)[TRACK_VARS_FILES]), file_key, file) { // for each uploaded file
45 file_key, file) { // for each uploaded file
46 42
47 char *filename = Z_STRVAL_P( 43 char *filename = Z_STRVAL_P(zend_hash_str_find(Z_ARRVAL_P(file), ZEND_STRL("name")));
48 zend_hash_str_find(Z_ARRVAL_P(file), "name", sizeof("name") - 1)); 44 char *tmp_name = Z_STRVAL_P(zend_hash_str_find(Z_ARRVAL_P(file), ZEND_STRL("tmp_name")));
49 char *tmp_name = Z_STRVAL_P(zend_hash_str_find( 45 size_t filesize = Z_LVAL_P(zend_hash_str_find(Z_ARRVAL_P(file), ZEND_STRL("size")));
50 Z_ARRVAL_P(file), "tmp_name", sizeof("tmp_name") - 1));
51 size_t filesize = Z_LVAL_P(
52 zend_hash_str_find(Z_ARRVAL_P(file), "size", sizeof("size") - 1));
53 char *cmd[3] = {0}; 46 char *cmd[3] = {0};
54 char *env[5] = {0}; 47 char *env[5] = {0};
55 48
56 sp_log_debug("Filename: %s\nTmpname: %s\nSize: %d\nError: %d\nScript: %s", 49 sp_log_debug("Filename: %s\nTmpname: %s\nSize: %zd\nError: %lld\nScript: %s",
57 filename, tmp_name, filesize, 50 filename, tmp_name, filesize,
58 Z_LVAL_P(zend_hash_str_find(Z_ARRVAL_P(file), "error", 5)), 51 Z_LVAL_P(zend_hash_str_find(Z_ARRVAL_P(file), "error", 5)),
59 ZSTR_VAL(config_upload->script)); 52 ZSTR_VAL(config_upload->script));
@@ -64,22 +57,19 @@ int sp_rfc1867_callback(unsigned int event, void *event_data, void **extra) {
64 57
65 spprintf(&env[0], 0, "SP_FILENAME=%s", filename); 58 spprintf(&env[0], 0, "SP_FILENAME=%s", filename);
66 spprintf(&env[1], 0, "SP_REMOTE_ADDR=%s", getenv("REMOTE_ADDR")); 59 spprintf(&env[1], 0, "SP_REMOTE_ADDR=%s", getenv("REMOTE_ADDR"));
67 spprintf(&env[2], 0, "SP_CURRENT_FILE=%s", 60 spprintf(&env[2], 0, "SP_CURRENT_FILE=%s", zend_get_executed_filename(TSRMLS_C));
68 zend_get_executed_filename(TSRMLS_C));
69 spprintf(&env[3], 0, "SP_FILESIZE=%zu", filesize); 61 spprintf(&env[3], 0, "SP_FILESIZE=%zu", filesize);
70 env[4] = NULL; 62 env[4] = NULL;
71 63
72 if ((pid = fork()) == 0) { 64 if ((pid = fork()) == 0) {
73 if (execve(ZSTR_VAL(config_upload->script), cmd, env) == -1) { 65 if (execve(ZSTR_VAL(config_upload->script), cmd, env) == -1) {
74 sp_log_warn("upload_validation", "Could not call '%s' : %s", 66 sp_log_warn("upload_validation", "Could not call '%s' : %s", ZSTR_VAL(config_upload->script), strerror(errno));
75 ZSTR_VAL(config_upload->script), strerror(errno));
76 EFREE_3(env); 67 EFREE_3(env);
77 exit(1); 68 exit(1);
78 } 69 }
79 } else if (pid == -1) { 70 } else if (pid == -1) {
80 // LCOV_EXCL_START 71 // LCOV_EXCL_START
81 sp_log_err("upload_validation", "Could not fork process : %s\n", 72 sp_log_err("upload_validation", "Could not fork process : %s\n", strerror(errno));
82 strerror(errno));
83 EFREE_3(env); 73 EFREE_3(env);
84 continue; 74 continue;
85 // LCOV_EXCL_STOP 75 // LCOV_EXCL_STOP
@@ -91,9 +81,7 @@ int sp_rfc1867_callback(unsigned int event, void *event_data, void **extra) {
91 if (WEXITSTATUS(waitstatus) != 0) { // Nope 81 if (WEXITSTATUS(waitstatus) != 0) { // Nope
92 char *uri = getenv("REQUEST_URI"); 82 char *uri = getenv("REQUEST_URI");
93 int sim = config_upload->simulation; 83 int sim = config_upload->simulation;
94 sp_log_auto("upload_validation", sim, 84 sp_log_auto("upload_validation", sim, "The upload of %s on %s was rejected.", filename, uri ? uri : "?");
95 "The upload of %s on %s was rejected.", filename,
96 uri ? uri : "?");
97 } 85 }
98 } 86 }
99 ZEND_HASH_FOREACH_END(); 87 ZEND_HASH_FOREACH_END();