c- cap和附件文件

c-icap and attachment file

本文关键字:文件 cap      更新时间:2023-10-16

我想挂起附件文件。例如,当用户试图使用webmail或其他方式附加文件时,我想要钩住附件文件。对echo服务进行了分析,在echo_check_preview_handler函数中可以钩住数据的内容。但我想挂钩附件文件。我搜索了一些c- cap模块(squidclamav和yara),但我没有找到这个能力。在simple_api.c代码中,我使用了下面的代码,但是我只能用data->body->filename钩住ascii文件。

data->body = ci_simple_file_new(0);
     if ((SEND_PERCENT_BYTES >= 0) && (START_SEND_AFTER == 0))
     {
        ci_req_unlock_data(req);
        ci_simple_file_lock_all(data->body);
     }
if (!data->body)
        return CI_ERROR;
       if (ci_simple_file_write(data->body, preview_data, preview_data_len,  ci_req_hasalldata(req)) == CI_ERROR)
               return CI_ERROR;

那么我怎么才能做到这一点呢?有任何例子c-icap模块或文档或代码块?

你不应该在preview_handler中这样做,相反,你应该这样做:

preview_handler - return CI_MOD_CONTINUE

然后实现IO,其中ci_simple_file_write…

然后在数据处理程序的末尾,你可以实现你的分析。

services.h的注释简要说明了c-icap插件的生命周期:

  • 是实现服务的结构*
  • 要实现服务,需要实现成员此结构体的函数。这些函数
  • 将被c- cap调用如下:
    • 此服务的新请求到达->ci_service_module: mod_init_request_data叫做
    • icap客户端发送预览数据-ci_service_module: mod_check_preview_handler。
  • 如果此函数返回CI_MOD_ALLOW204 ICAP事务停止在这里。如果这个函数返回
  • CI_MOD_CONTINUE如果存在,ICAP客户端将发送其余的body数据。
    • 客户机开始发送更多数据->多次调用ci_service_module::mod_service_io,直到
  • 客户端已经发送了所有的body数据。服务可以开始发送使用此函数将数据发送到客户端
  • 在接收到所有数据之前
    • 客户端已发送所有数据-ci_service_module: mod_end_of_data_handler叫做
    • 客户端等待从c- cap ->读取剩余数据ci_service_module::mod_service_io called multiple
  • 的次数,直到所有的身体数据发送到客户端*/

-您不能直接挂钩附件,但您必须从您通过ci_simple_file API编写的内容中解析出附件文件。

例如,当用户尝试使用webmail或其他方式附加文件时,我想要钩住附件文件

你需要钩子HTTP请求包含文件作为它的主体数据。

所以你的目标是REQMOD ICAP请求。

这里有3个提示给你。

  1. 预览,检查体魔术,识别体类型为'文件数据' (ci_magic_data_type_ext帮助)。
  2. 在service_io中读取所有数据,而iseof不为真(ci_simple_file..函数帮助)。
  3. end_of_data中的
  4. 文件,修改或检查为ci_simple_file object。

请记住,文件数据通常是gzip或deflate压缩的。

c-icap文档可以通过make doc.

生成。