@@ -1374,6 +1374,51 @@ static int getenvelope(void *mc, const char *field, const char ***contents)
1374
1374
}
1375
1375
}
1376
1376
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
+
1377
1422
static int getsize (void * mc , int * size )
1378
1423
{
1379
1424
message_data_t * m = (message_data_t * ) mc ;
@@ -2200,6 +2245,7 @@ static int jmap_sieve_test(struct jmap_req *req)
2200
2245
sieve_register_header (interp , getheader );
2201
2246
sieve_register_headersection (interp , getheadersection );
2202
2247
sieve_register_envelope (interp , getenvelope );
2248
+ sieve_register_environment (interp , getenvironment );
2203
2249
sieve_register_size (interp , getsize );
2204
2250
sieve_register_body (interp , getbody );
2205
2251
sieve_register_mailboxexists (interp , & getmailboxexists );
0 commit comments