Skip to content

Commit bb99858

Browse files
committed
SieveScript/test: Support environment tests
1 parent 46f3923 commit bb99858

File tree

2 files changed

+56
-1
lines changed

2 files changed

+56
-1
lines changed

cassandane/tiny-tests/JMAPSieve/sieve-test-extensive

+10-1
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,15 @@ add_sieve_tests(
142142
],
143143
);
144144

145+
### environment
146+
add_sieve_tests(
147+
"environment",
148+
'if environment :contains "phase" "during" { discard; }',
149+
[
150+
[ 'discard', {}, [] ],
151+
],
152+
);
153+
145154
### someInThreadHaveKeyword
146155
sub test_sieve_test_extensive_some_in_thread_have_keyword
147156
:min_version_3_3 :JMAPExtensions
@@ -244,7 +253,7 @@ sub new_sieve_blob {
244253

245254
xlog "create script";
246255
my $fullscript = <<EOF;
247-
require ["fileinto", "extlists", "imap4flags", "copy", "variables", "mailbox", "mailboxid", "special-use", "vnd.cyrus.log", "vnd.cyrus.jmapquery", "vnd.cyrus.imip", "duplicate"];
256+
require ["fileinto", "extlists", "imap4flags", "copy", "variables", "mailbox", "mailboxid", "special-use", "vnd.cyrus.log", "vnd.cyrus.jmapquery", "vnd.cyrus.imip", "duplicate", "environment"];
248257
249258
$sieve
250259
EOF

imap/jmap_sieve.c

+46
Original file line numberDiff line numberDiff line change
@@ -1374,6 +1374,51 @@ static int getenvelope(void *mc, const char *field, const char ***contents)
13741374
}
13751375
}
13761376

1377+
static int getenvironment(void *sc __attribute__((unused)),
1378+
const char *keyname, char **res)
1379+
{
1380+
*res = NULL;
1381+
1382+
switch (*keyname) {
1383+
case 'd':
1384+
if (!strcmp(keyname, "domain")) {
1385+
const char *domain = strchr(config_servername, '.');
1386+
1387+
if (domain) domain++;
1388+
else domain = "";
1389+
1390+
*res = xstrdup(domain);
1391+
}
1392+
break;
1393+
1394+
case 'h':
1395+
if (!strcmp(keyname, "host")) *res = xstrdup(config_servername);
1396+
break;
1397+
1398+
case 'l':
1399+
if (!strcmp(keyname, "location")) *res = xstrdup("MDA");
1400+
break;
1401+
1402+
case 'n':
1403+
if (!strcmp(keyname, "name")) *res = xstrdup("Cyrus LMTP");
1404+
break;
1405+
1406+
case 'p':
1407+
if (!strcmp(keyname, "phase")) *res = xstrdup("during");
1408+
break;
1409+
1410+
/* Not supporting remote host or ip since they'd be the jmap client, not
1411+
the lmtp client */
1412+
1413+
case 'v':
1414+
if (!strcmp(keyname, "version")) *res = xstrdup(CYRUS_VERSION);
1415+
break;
1416+
}
1417+
1418+
return (*res ? SIEVE_OK : SIEVE_FAIL);
1419+
}
1420+
1421+
13771422
static int getsize(void *mc, int *size)
13781423
{
13791424
message_data_t *m = (message_data_t *) mc;
@@ -2200,6 +2245,7 @@ static int jmap_sieve_test(struct jmap_req *req)
22002245
sieve_register_header(interp, getheader);
22012246
sieve_register_headersection(interp, getheadersection);
22022247
sieve_register_envelope(interp, getenvelope);
2248+
sieve_register_environment(interp, getenvironment);
22032249
sieve_register_size(interp, getsize);
22042250
sieve_register_body(interp, getbody);
22052251
sieve_register_mailboxexists(interp, &getmailboxexists);

0 commit comments

Comments
 (0)