*/
LUA_FUNCTION_DEF (util, config_from_ucl);
/***
- * @function util.encode_base64(input[, str_len])
+ * @function util.encode_base64(input[, str_len, [newlines_type]])
* Encodes data in base64 breaking lines if needed
* @param {text or string} input input data
* @param {number} str_len optional size of lines or 0 if split is not needed
gchar *out;
gsize inlen, outlen;
guint str_lim = 0;
+ gboolean fold = FALSE;
if (lua_type (L, 1) == LUA_TSTRING) {
s = luaL_checklstring (L, 1, &inlen);
if (lua_gettop (L) > 1) {
str_lim = luaL_checknumber (L, 2);
+
+ fold = !!(str_lim > 0);
}
if (s == NULL) {
lua_pushnil (L);
}
else {
- out = rspamd_encode_base64 (s, inlen, str_lim, &outlen);
+
+ if (fold) {
+ out = rspamd_encode_base64 (s, inlen, str_lim, &outlen);
+ }
+ else {
+ enum rspamd_newlines_type how = RSPAMD_TASK_NEWLINES_CRLF;
+
+ if (lua_type (L, 3) == LUA_TSTRING) {
+ const gchar *how_str = lua_tostring (L, 3);
+
+ if (g_ascii_strcasecmp (how_str, "cr") == 0) {
+ how = RSPAMD_TASK_NEWLINES_CR;
+ }
+ else if (g_ascii_strcasecmp (how_str, "lf") == 0) {
+ how = RSPAMD_TASK_NEWLINES_LF;
+ }
+ else if (g_ascii_strcasecmp (how_str, "crlf") != 0) {
+ return luaL_error (L, "invalid newline style: %s", how_str);
+ }
+ }
+
+ out = rspamd_encode_base64_fold (s, inlen, str_lim, &outlen, how);
+ }
if (out != NULL) {
t = lua_newuserdata (L, sizeof (*t));
for k in pairs(reporting_addr) do
table.insert(tmp_addr, k)
end
- local encoded = rspamd_util.encode_base64(table.concat({xmlf('header'), xmlf('entries'), xmlf('footer')}), 78)
+ local encoded = rspamd_util.encode_base64(table.concat(
+ {xmlf('header'),
+ xmlf('entries'),
+ xmlf('footer')}), 78)
local function mail_cb(err, data, conn)
local function no_error(merr, mdata, wantcode)
wantcode = wantcode or '2'