]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
[Minor] Allow to require encryption when checking messages
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Tue, 20 Nov 2018 16:15:05 +0000 (16:15 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Tue, 20 Nov 2018 20:45:22 +0000 (20:45 +0000)
src/libutil/http.c
src/libutil/http.h

index 189d34b90b6d047ce2b4d7ae8cebc8479104b059..bc4fc52837089186f861edf1c4165b3577578827 100644 (file)
@@ -432,7 +432,7 @@ rspamd_http_parse_key (rspamd_ftok_t *data, struct rspamd_http_connection *conn,
 
        if (priv->local_key == NULL) {
                /* In this case we cannot do anything, e.g. we cannot decrypt payload */
-               priv->flags |= RSPAMD_HTTP_CONN_FLAG_ENCRYPTED;
+               priv->flags &= ~RSPAMD_HTTP_CONN_FLAG_ENCRYPTED;
        }
        else {
                /* Check sanity of what we have */
@@ -914,6 +914,11 @@ rspamd_http_on_message_complete (http_parser * parser)
 
        priv = conn->priv;
 
+       if ((conn->opts & RSPAMD_HTTP_REQUIRE_ENCRYPTION) && !IS_CONN_ENCRYPTED (priv)) {
+               msg_err ("unencrypted connection when encryption has been requested");
+               return -1;
+       }
+
        if ((conn->opts & RSPAMD_HTTP_BODY_PARTIAL) == 0 && IS_CONN_ENCRYPTED (priv)) {
                mode = rspamd_keypair_alg (priv->local_key);
 
index c271caaa40ad1252dc885c6e1d013a5987116ec2..df6f99756e22596d9ad8fb28a42c2e9a5017b91b 100644 (file)
@@ -76,9 +76,10 @@ struct rspamd_storage_shmem {
  */
 enum rspamd_http_options {
        RSPAMD_HTTP_BODY_PARTIAL = 0x1, /**< Call body handler on all body data portions *///!< RSPAMD_HTTP_BODY_PARTIAL
-       RSPAMD_HTTP_CLIENT_SIMPLE = 0x2, /**< Read HTTP client reply automatically */      //!< RSPAMD_HTTP_CLIENT_SIMPLE
-       RSPAMD_HTTP_CLIENT_ENCRYPTED = 0x4, /**< Encrypt data for client */                //!< RSPAMD_HTTP_CLIENT_ENCRYPTED
-       RSPAMD_HTTP_CLIENT_SHARED = 0x8, /**< Store reply in shared memory */              //!< RSPAMD_HTTP_CLIENT_SHARED
+       RSPAMD_HTTP_CLIENT_SIMPLE = 0x1u << 1, /**< Read HTTP client reply automatically */      //!< RSPAMD_HTTP_CLIENT_SIMPLE
+       RSPAMD_HTTP_CLIENT_ENCRYPTED = 0x1u << 2, /**< Encrypt data for client */                //!< RSPAMD_HTTP_CLIENT_ENCRYPTED
+       RSPAMD_HTTP_CLIENT_SHARED = 0x1u << 3, /**< Store reply in shared memory */              //!< RSPAMD_HTTP_CLIENT_SHARED
+       RSPAMD_HTTP_REQUIRE_ENCRYPTION = 0x1u << 4
 };
 
 typedef int (*rspamd_http_body_handler_t) (struct rspamd_http_connection *conn,