summaryrefslogtreecommitdiff
path: root/src/sp_upload_validation.c
diff options
context:
space:
mode:
authorxXx-caillou-xXx2018-07-13 10:36:50 +0200
committerjvoisin2018-07-13 08:36:50 +0000
commit7963580d72a358975133f86f01de2d2eab08ba38 (patch)
tree4bec345d70f687a2a6002b36e2f2fc79318959f6 /src/sp_upload_validation.c
parent12b740bc7bb01ffe397cecc5b6fa25b136304911 (diff)
Massively optimize how rules are handled
This commit does a lot of things: - Use hashtables instead of lists to store the rules - Rules that can be applied at launch time won't be tried at runtime - Improve feedback when writing nonsensical rules - Make intensive use of `zend_string` instead of `char*`
Diffstat (limited to 'src/sp_upload_validation.c')
-rw-r--r--src/sp_upload_validation.c26
1 files changed, 16 insertions, 10 deletions
diff --git a/src/sp_upload_validation.c b/src/sp_upload_validation.c
index 73244ae..794c61f 100644
--- a/src/sp_upload_validation.c
+++ b/src/sp_upload_validation.c
@@ -41,12 +41,14 @@ int sp_rfc1867_callback(unsigned int event, void *event_data, void **extra) {
41 char *cmd[3] = {0}; 41 char *cmd[3] = {0};
42 char *env[5] = {0}; 42 char *env[5] = {0};
43 43
44 sp_log_debug("Filename: %s\nTmpname: %s\nSize: %d\nError: %d\nScript: %s", 44 sp_log_debug(
45 filename, tmp_name, filesize, 45 "Filename: %s\nTmpname: %s\nSize: %d\nError: %d\nScript: %s",
46 Z_LVAL_P(zend_hash_str_find(Z_ARRVAL_P(file), "error", 5)), 46 filename, tmp_name, filesize,
47 SNUFFLEUPAGUS_G(config).config_upload_validation->script); 47 Z_LVAL_P(zend_hash_str_find(Z_ARRVAL_P(file), "error", 5)),
48 ZSTR_VAL(SNUFFLEUPAGUS_G(config).config_upload_validation->script));
48 49
49 cmd[0] = SNUFFLEUPAGUS_G(config).config_upload_validation->script; 50 cmd[0] =
51 ZSTR_VAL(SNUFFLEUPAGUS_G(config).config_upload_validation->script);
50 cmd[1] = tmp_name; 52 cmd[1] = tmp_name;
51 cmd[2] = NULL; 53 cmd[2] = NULL;
52 54
@@ -58,11 +60,15 @@ int sp_rfc1867_callback(unsigned int event, void *event_data, void **extra) {
58 env[4] = NULL; 60 env[4] = NULL;
59 61
60 if ((pid = fork()) == 0) { 62 if ((pid = fork()) == 0) {
61 if (execve(SNUFFLEUPAGUS_G(config).config_upload_validation->script, 63 if (execve(
62 cmd, env) == -1) { 64 ZSTR_VAL(
63 sp_log_err("upload_validation", "Could not call '%s' : %s", 65 SNUFFLEUPAGUS_G(config).config_upload_validation->script),
64 SNUFFLEUPAGUS_G(config).config_upload_validation->script, 66 cmd, env) == -1) {
65 strerror(errno)); 67 sp_log_err(
68 "upload_validation", "Could not call '%s' : %s",
69 ZSTR_VAL(
70 SNUFFLEUPAGUS_G(config).config_upload_validation->script),
71 strerror(errno));
66 EFREE_3(env); 72 EFREE_3(env);
67 exit(1); 73 exit(1);
68 } 74 }