static void 
check_smtp_parser_init(smtp_parser *sp, void *data) 
{
    sp->data = data;
    sp->hello_reply_code = 0;

    sp->domain = domain;
    sp->greeting_text = greeting_text;
    sp->reply_code = reply_code;
    sp->reply_text = reply_text;
    sp->smtp_done = smtp_done;

    smtp_parser_init(sp);
}
示例#2
0
文件: smtp-syntax.c 项目: bdraco/core
int smtp_helo_domain_parse(const char *helo,
	bool allow_literal, const char **domain_r)
{
	struct smtp_parser parser;
	int ret;

	smtp_parser_init(&parser, pool_datastack_create(), helo);

	if ((ret=smtp_parser_parse_domain(&parser, domain_r)) == 0) {
		if (allow_literal)
			ret = smtp_parser_parse_address_literal(&parser, domain_r, NULL);
	}

	if (ret <= 0 || (parser.cur < parser.end && *parser.cur != ' '))
		return -1;

	return 0;
}
示例#3
0
文件: smtp-syntax.c 项目: bdraco/core
int smtp_ehlo_line_parse(const char *ehlo_line, const char **key_r,
	const char *const **params_r, const char **error_r)
{
	struct smtp_parser parser;
	int ret;

	if (ehlo_line == NULL || *ehlo_line == '\0') {
		if (error_r != NULL)
			*error_r = "Parameter is empty";
		return -1;
	}

	smtp_parser_init(&parser, pool_datastack_create(), ehlo_line);

	if ((ret=smtp_parse_ehlo_line(&parser, key_r, params_r)) <= 0) {
		if (error_r != NULL)
			*error_r = parser.error;
		return -1;
	}
	return 1;
}
示例#4
0
文件: smtp-syntax.c 项目: bdraco/core
int smtp_xtext_parse(const char *xtext,
	const char **value_r, const char **error_r)
{
	struct smtp_parser parser;
	string_t *value = NULL;
	int ret;

	if (xtext == NULL || *xtext == '\0') {
		*value_r = "";
		return 1;
	}

	if (value_r != NULL)
		value = t_str_new(256);
	smtp_parser_init(&parser, pool_datastack_create(), xtext);

	if ((ret=smtp_parser_parse_xtext(&parser, value)) < 0) {
		if (error_r != NULL)
			*error_r = parser.error;
		return -1;
	}
	if (parser.cur < parser.end) {
		*error_r = "Invalid character in xtext";
		return -1;
	}

	if (value_r != NULL) {
		*value_r = str_c(value);
		if (strlen(*value_r) != str_len(value)) {
			if (*error_r != NULL)
				*error_r = "Encountered NUL character in xtext";
			return -1;
		}
	}
	return 1;
}
示例#5
0
文件: smtp-syntax.c 项目: bdraco/core
int smtp_string_parse(const char *string,
	const char **value_r, const char **error_r)
{
	struct smtp_parser parser;
	int ret;

	if (string == NULL || *string == '\0') {
		*value_r = "";
		return 1;
	}

	smtp_parser_init(&parser, pool_datastack_create(), string);

	if ((ret=smtp_parser_parse_string(&parser, value_r)) < 0) {
		if (error_r != NULL)
			*error_r = parser.error;
		return -1;
	}
	if (parser.cur < parser.end) {
		*error_r = "Invalid character in string";
		return -1;
	}
	return 1;
}