5.7.1 命令合规性判断

来源:互联网 发布:centos ssh漏洞 编辑:程序博客网 时间:2024/04/30 13:41

各个命令处理函数都要判断命令格式的合规性:

 

1 HELO/EHLO命令有且只有1个参数,少于一个参数则报错,多于一个参数将其合并:

if (argc < 2) {         state->error_mask|= MAIL_ERROR_PROTOCOL;         smtpd_chat_reply(state,"501 Syntax: HELO hostname");         return(-1);   }   if (argc > 2)         collapse_args(argc- 1, argv + 1);

2 MAIL命令的参数合规性判断:

(1) 如果设定了smtpd_helo_required参数,则必须提供HELO命令。

(2) 宏SMTPD_IN_MAIL_TRANSACTION展开为:

/*

 * Are we in a MAIL transaction?

 */

#define SMTPD_IN_MAIL_TRANSACTION(state)((state)->sender != 0)

 

SMTPD_STATE->sender字段为发件人,如果在MAIL命令处理开始已经有发件人了,说明MAIL指令已经运行过了,smtp会话不需要多次运行MAIL命令。

(3) MAIL命令有不小于3个的参数,且第二个参数必须为”from:”:

if(var_helo_required && state->helo_name == 0) {         state->error_mask|= MAIL_ERROR_POLICY;         smtpd_chat_reply(state,"503 5.5.1 Error: send HELO/EHLO first");         return(-1);    }   if (SMTPD_IN_MAIL_TRANSACTION(state)) {         state->error_mask|= MAIL_ERROR_PROTOCOL;         smtpd_chat_reply(state,"503 5.5.1 Error: nested MAIL command");         return(-1);    }   if (argc < 3         ||strcasecmp(argv[1].strval, "from:") != 0) {         state->error_mask|= MAIL_ERROR_PROTOCOL;         smtpd_chat_reply(state,"501 5.5.4 Syntax: MAIL FROM:<address>");         return(-1);}
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span>

3 RCPT命令参数合规性判断

mail_cmd中SMTPD_IN_MAIL_TRANSACTION成立则报错,因为不能有两条MAIL指令,这里SMTPD_IN_MAIL_TRANSACTION不成立则报错,要求在执行RCPT指令前执行了MAIL指令。RCPT命令有不少于3个参数且第二个必须为“to:”:

if (!SMTPD_IN_MAIL_TRANSACTION(state)) {         state->error_mask|= MAIL_ERROR_PROTOCOL;         smtpd_chat_reply(state,"503 5.5.1 Error: need MAIL command");         return(-1);    }   if (argc < 3         ||strcasecmp(argv[1].strval, "to:") != 0) {         state->error_mask|= MAIL_ERROR_PROTOCOL;         smtpd_chat_reply(state,"501 5.5.4 Syntax: RCPT TO:<address>");         return(-1);}

4 DATA命令不能有参数

if (argc != 1) {         state->error_mask |=MAIL_ERROR_PROTOCOL;         smtpd_chat_reply(state, "501 5.5.4Syntax: DATA");         return (-1);    }


0 0
原创粉丝点击