/* Python prettyprinting functions */
-static indent_level;
+static int indent_level;
static void indent(char ic)
/* indent current line */
indent_level++;
}
+
static void stringdump(const char *name, const char *member)
/* dump a string member with current indent */
{
- static char buf[BUFSIZ];
-
indent('\0');
- fprintf(stdout, "'%s':", name);
+ fprintf(stdout, "\"%s\":", name);
if (member)
- fprintf(stdout, "'%s'", visbuf(member));
+ fprintf(stdout, "\"%s\"", visbuf(member));
else
fputs("None", stdout);
fputs(",\n", stdout);
}
-static int numdump(const char *name, const int num)
+static void numdump(const char *name, const int num)
/* dump a numeric quantity at current indent */
{
indent('\0');
- fprintf(stdout, "'%s':%d,\n", name, num);
+ fprintf(stdout, "'%s':%d,\n", name, NUM_VALUE_OUT(num));
}
-static int booldump(const char *name, const int onoff)
+static void booldump(const char *name, const int onoff)
/* dump a boolean quantity at current indent */
{
indent('\0');
/* dump a string list member with current indent */
{
indent('\0');
- fprintf(stdout, "'%s':", name);
+ fprintf(stdout, "\"%s\":", name);
if (!list)
- fputs("None,\n", stdout);
+ fputs("[],\n", stdout);
else
{
struct idlist *idp;
for (idp = list; idp; idp = idp->next)
if (idp->id)
{
- fprintf(stdout, "'%s'", visbuf(idp->id));
+ fprintf(stdout, "\"%s\"", visbuf(idp->id));
if (idp->next)
fputs(", ", stdout);
}
{
struct query *ctl;
struct idlist *idp;
+ const char *features;
indent_level = 0;
- fputs("from Tkinter import TRUE, FALSE\n\n", stdout);
+ /*
+ * These had better match the values fetchmailconf is expecting!
+ * (We don't want to import them from Tkinter because the user
+ * might not have it installed.)
+ */
+ fputs("TRUE=1; FALSE=0\n\n", stdout);
+
+ /*
+ * We need this in order to know whether `interface' and `monitor'
+ * are valid options or not.
+ */
+#if defined(linux)
+ fputs("os_type = 'linux'\n", stdout);
+#elif defined(__FreeBSD__)
+ fputs("os_type = 'freebsd'\n", stdout);
+#else
+ fputs("os_type = 'generic'\n", stdout);
+#endif
- fputs("# Start of initializer\n", stdout);
+ /*
+ * This should be approximately in sync with the -V option dumping
+ * in fetchmail.c.
+ */
+ features = "feature_options = ("
+#ifdef POP2_ENABLE
+ "'pop2',"
+#endif /* POP2_ENABLE */
+#ifdef POP3_ENABLE
+ "'pop3',"
+#endif /* POP3_ENABLE */
+#ifdef IMAP_ENABLE
+ "'imap',"
+#endif /* IMAP_ENABLE */
+#ifdef GSSAPI
+ "'gssapi',"
+#endif /* GSSAPI */
+#if defined(KERBEROS_V4)
+ "'kerberos',"
+#endif /* defined(IMAP4) */
+#ifdef RPA_ENABLE
+ "'rpa',"
+#endif /* RPA_ENABLE */
+#ifdef SDPS_ENABLE
+ "'sdps',"
+#endif /* SDPS_ENABLE */
+#ifdef ETRN_ENABLE
+ "'etrn',"
+#endif /* ETRN_ENABLE */
+#ifdef ODMR_ENABLE
+ "'odmr',"
+#endif /* ODMR_ENABLE */
+#ifdef SSL_ENABLE
+ "'ssl',"
+#endif /* SSL_ENABLE */
+#ifdef OPIE_ENABLE
+ "'opie',"
+#endif /* OPIE_ENABLE */
+#ifdef INET6_ENABLE
+ "'inet6',"
+#endif /* INET6_ENABLE */
+ ")\n";
+ fputs(features, stdout);
+
+ fputs("# Start of configuration initializer\n", stdout);
fputs("fetchmailrc = ", stdout);
indent('{');
numdump("poll_interval", runp->poll_interval);
- booldump("syslog", runp->use_syslog);
stringdump("logfile", runp->logfile);
stringdump("idfile", runp->idfile);
stringdump("postmaster", runp->postmaster);
+ booldump("bouncemail", runp->bouncemail);
+ booldump("spambounce", runp->spambounce);
+ stringdump("properties", runp->properties);
booldump("invisible", runp->invisible);
+ booldump("showdots", runp->showdots);
+ booldump("syslog", runp->use_syslog);
if (!querylist)
{
using_kpop =
(ctl->server.protocol == P_POP3 &&
- ctl->server.port == KPOP_PORT &&
- ctl->server.preauthenticate == A_KERBEROS_V4);
+ ctl->server.service && !strcmp(ctl->server.service, KPOP_PORT ) &&
+ ctl->server.authenticate == A_KERBEROS_V4);
stringdump("pollname", ctl->server.pollname);
booldump("active", !ctl->server.skip);
stringdump("via", ctl->server.via);
stringdump("protocol",
using_kpop ? "KPOP" : showproto(ctl->server.protocol));
- numdump("port", ctl->server.port);
+ stringdump("service", ctl->server.service);
numdump("timeout", ctl->server.timeout);
numdump("interval", ctl->server.interval);
numdump("envskip", ctl->server.envskip);
stringdump("qvirtual", ctl->server.qvirtual);
- if (ctl->server.preauthenticate == A_KERBEROS_V4)
+ if (ctl->server.authenticate == A_ANY)
+ stringdump("auth", "any");
+ else if (ctl->server.authenticate == A_PASSWORD)
+ stringdump("auth", "password");
+ else if (ctl->server.authenticate == A_OTP)
+ stringdump("auth", "otp");
+ else if (ctl->server.authenticate == A_NTLM)
+ stringdump("auth", "ntlm");
+ else if (ctl->server.authenticate == A_CRAM_MD5)
+ stringdump("auth", "cram-md5");
+ else if (ctl->server.authenticate == A_GSSAPI)
+ stringdump("auth", "gssapi");
+ else if (ctl->server.authenticate == A_KERBEROS_V4)
stringdump("auth", "kerberos_v4");
- else if (ctl->server.preauthenticate == A_KERBEROS_V5)
+ else if (ctl->server.authenticate == A_KERBEROS_V5)
stringdump("auth", "kerberos_v5");
- else
- stringdump("auth", "password");
+ else if (ctl->server.authenticate == A_SSH)
+ stringdump("auth", "ssh");
+ else if (ctl->server.authenticate == A_OTP)
+ stringdump("auth", "otp");
#if defined(HAVE_GETHOSTBYNAME) && defined(HAVE_RES_SEARCH)
booldump("dns", ctl->server.dns);
listdump("aka", ctl->server.akalist);
listdump("localdomains", ctl->server.localdomains);
-#ifdef linux
+#if defined(linux) || defined(__FreeBSD__)
stringdump("interface", ctl->server.interface);
stringdump("monitor", ctl->server.monitor);
-#endif /* linux */
+#endif /* linux || __FreeBSD__ */
+
+ stringdump("plugin", ctl->server.plugin);
+ stringdump("plugout", ctl->server.plugout);
+ stringdump("principal", ctl->server.principal);
+ if (ctl->server.esmtp_name)
+ stringdump("esmtpname",ctl->server.esmtp_name);
+ if (ctl->server.esmtp_password)
+ stringdump("esmtppassword",ctl->server.esmtp_password);
+ booldump("tracepolls", ctl->server.tracepolls);
indent(0);
fputs("'users': ", stdout);
fprintf(stdout, "'localnames':[");
for (idp = ctl->localnames; idp; idp = idp->next)
{
+ char namebuf[USERNAMELEN + 1];
+
+ strlcpy(namebuf, visbuf(idp->id), sizeof(namebuf));
if (idp->val.id2)
- fprintf(stdout, "('%s', %s)",
- visbuf(idp->id), visbuf(idp->val.id2));
+ fprintf(stdout, "(\"%s\", %s)", namebuf, visbuf(idp->val.id2));
else
- fprintf(stdout, "'%s'", visbuf(idp->id));
+ fprintf(stdout, "\"%s\"", namebuf);
if (idp->next)
fputs(", ", stdout);
}
booldump("forcecr", ctl->forcecr);
booldump("pass8bits", ctl->pass8bits);
booldump("dropstatus", ctl->dropstatus);
+ booldump("dropdelivered", ctl->dropdelivered);
booldump("mimedecode", ctl->mimedecode);
+ booldump("idle", ctl->idle);
stringdump("mda", ctl->mda);
-#ifdef INET6
- stringdump("netsec", ctl->netsec);
-#endif /* INET6 */
+ stringdump("bsmtp", ctl->bsmtp);
+ indent('\0');
+ if (ctl->listener == LMTP_MODE)
+ fputs("'lmtp':TRUE,\n", stdout);
+ else
+ fputs("'lmtp':FALSE,\n", stdout);
+
stringdump("preconnect", ctl->preconnect);
stringdump("postconnect", ctl->postconnect);
numdump("limit", ctl->limit);
+ numdump("warnings", ctl->warnings);
numdump("fetchlimit", ctl->fetchlimit);
+ numdump("fetchsizelimit", ctl->fetchsizelimit);
+ numdump("fastuidl", ctl->fastuidl);
numdump("batchlimit", ctl->batchlimit);
+#ifdef SSL_ENABLE
+ booldump("ssl", ctl->use_ssl);
+ stringdump("sslkey", ctl->sslkey);
+ stringdump("sslcert", ctl->sslcert);
+ stringdump("sslproto", ctl->sslproto);
+ booldump("sslcertck", ctl->sslcertck);
+ stringdump("sslcertpath", ctl->sslcertpath);
+ stringdump("sslfingerprint", ctl->sslfingerprint);
+#endif /* SSL_ENABLE */
numdump("expunge", ctl->expunge);
+ stringdump("properties", ctl->properties);
listdump("smtphunt", ctl->smtphunt);
+ listdump("fetchdomains", ctl->domainlist);
stringdump("smtpaddress", ctl->smtpaddress);
+ stringdump("smtpname", ctl->smtpname);
indent('\0');
- fprintf(stdout, "'antispam:'");
- if (!ctl->antispam)
- fputs("'\n", stdout);
- else
+ fprintf(stdout, "'antispam':'");
+ for (idp = ctl->antispam; idp; idp = idp->next)
{
- for (idp = ctl->antispam; idp; idp = idp->next)
- {
- fprintf(stdout, "%d", idp->val.status.num);
- if (idp->next)
- fputs(" ", stdout);
- }
- fputs("',\n", stdout);
+ fprintf(stdout, "%d", idp->val.status.num);
+ if (idp->next)
+ fputs(" ", stdout);
}
+ fputs("',\n", stdout);
listdump("mailboxes", ctl->mailboxes);
indent('}');