+
+ /* Briefly initialize a Sieve parser instance just so we can list the
+ * extensions that are available.
+ */
+ res = sieve2_alloc(&sieve2_context);
+ if (res != SIEVE2_OK) {
+ lprintf(CTDL_CRIT, "sieve2_alloc() returned %d: %s\n", res, sieve2_errstr(res));
+ return;
+ }
+
+ res = sieve2_callbacks(sieve2_context, ctdl_sieve_callbacks);
+ if (res != SIEVE2_OK) {
+ lprintf(CTDL_CRIT, "sieve2_callbacks() returned %d: %s\n", res, sieve2_errstr(res));
+ goto BAIL;
+ }
+
+ msiv_extensions = strdup(sieve2_listextensions(sieve2_context));
+ lprintf(CTDL_INFO, "Extensions: %s\n", msiv_extensions);
+
+BAIL: res = sieve2_free(&sieve2_context);
+ if (res != SIEVE2_OK) {
+ lprintf(CTDL_CRIT, "sieve2_free() returned %d: %s\n", res, sieve2_errstr(res));
+ }
+