Back to index

courier  0.68.2
capability.c
Go to the documentation of this file.
00001 /*
00002 ** Copyright 1998 - 2008 Double Precision, Inc.
00003 ** See COPYING for distribution information.
00004 */
00005 
00006 #if    HAVE_CONFIG_H
00007 #include      "config.h"
00008 #endif
00009 #include      <stdio.h>
00010 #include      <stdlib.h>
00011 #include      <string.h>
00012 #if    HAVE_UNISTD_H
00013 #include      <unistd.h>
00014 #endif
00015 #include      "imapwrite.h"
00016 
00017 
00018 static int capa_keywords=0;
00019 
00020 extern const char *externalauth();
00021 
00022 void initcapability()
00023 {
00024        const char *p=getenv("IMAP_KEYWORDS");
00025 
00026        if (p) capa_keywords=atoi(p);
00027 }
00028 
00029 int have_starttls()
00030 {
00031 const char *p;
00032 
00033        if ((p=getenv("IMAP_STARTTLS")) == 0)     return (0);
00034        if (*p != 'y' && *p != 'Y')        return (0);
00035 
00036        p=getenv("COURIERTLS");
00037        if (!p || !*p)       return (0);
00038        if (access(p, X_OK)) return (0);
00039        return (1);
00040 }
00041 
00042 
00043 int tlsrequired()
00044 {
00045 const char *p=getenv("IMAP_TLS_REQUIRED");
00046 
00047        if (p && atoi(p))       return (1);
00048        return (0);
00049 }
00050 
00051 int keywords()
00052 {
00053        return capa_keywords != 0;
00054 }
00055 
00056 int fastkeywords()
00057 {
00058        return capa_keywords == 1;
00059 }
00060 
00061 int magictrash()
00062 {
00063        const char *p;
00064 
00065        p=getenv("IMAP_MOVE_EXPUNGE_TO_TRASH");
00066 
00067        if (p && atoi(p))
00068               return 1;
00069        return 0;
00070 }
00071 
00072 const char *imap_externalauth()
00073 {
00074        const char *p;
00075 
00076        if ((p=getenv("IMAP_TLS")) && atoi(p))
00077               return externalauth();
00078 
00079        return NULL;
00080 }
00081 
00082 
00083 void imapcapability()
00084 {
00085        const char *p;
00086 
00087        if ((p=getenv("IMAP_TLS")) && atoi(p) &&
00088            (p=getenv("IMAP_CAPABILITY_TLS")) && *p)
00089               writes(p);
00090        else if ((p=getenv("IMAP_CAPABILITY")) != 0 && *p)
00091               writes(p);
00092        else
00093               writes("IMAP4rev1");
00094 
00095 #if SMAP
00096        p=getenv("SMAP_CAPABILITY");
00097 
00098        if (p && *p)
00099        {
00100               writes(" ");
00101               writes(p);
00102 
00103               if (keywords())
00104                      writes(" KEYWORDS");
00105        }
00106 #endif
00107 
00108        if ((p=getenv("IMAP_ACL")) && atoi(p))
00109               writes(" ACL ACL2=UNION");
00110 
00111        if (have_starttls())
00112        {
00113               writes(" STARTTLS");
00114               if (tlsrequired())
00115                      writes(" LOGINDISABLED");
00116        }
00117        else
00118        {
00119               if (imap_externalauth())
00120                      writes(" AUTH=EXTERNAL");
00121        }
00122                      
00123 
00124        p=getenv("OUTBOX");
00125 
00126        if (p && *p)
00127        {
00128               writes(" XCOURIEROUTBOX=INBOX");
00129               writes(p);
00130        }
00131 
00132        if (magictrash())
00133               writes(" XMAGICTRASH");
00134 }