Back to index

courier  0.68.2
pop3dcapa.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 #undef PACKAGE
00008 #undef VERSION
00009 #include      "config.h"
00010 #endif
00011 #include      <stdio.h>
00012 #include      <string.h>
00013 #include      <stdlib.h>
00014 #include      <signal.h>
00015 #include      <ctype.h>
00016 #include      <fcntl.h>
00017 #if    HAVE_UNISTD_H
00018 #include      <unistd.h>
00019 #endif
00020 
00021 
00022 extern const char *externalauth();
00023 
00024 int have_starttls()
00025 {
00026        const char *p;
00027 
00028         if ((p=getenv("POP3_STARTTLS")) == 0)   return (0);
00029         if (*p != 'y' && *p != 'Y')             return (0);
00030 
00031         p=getenv("COURIERTLS");
00032         if (!p || !*p)  return (0);
00033         if (access(p, X_OK))    return (0);
00034         return (1);
00035 }
00036 
00037 
00038 int tls_required()
00039 {
00040        const char *p=getenv("POP3_TLS_REQUIRED");
00041 
00042         if (p && atoi(p))       return (1);
00043         return (0);
00044 }
00045 
00046 const char *pop3_externalauth()
00047 {
00048        const char *external=NULL;
00049        const char *p;
00050 
00051        if ((p=getenv("POP3_TLS")) != 0 && atoi(p))
00052               external=externalauth();
00053 
00054        return external;
00055 }
00056 
00057 void pop3dcapa()
00058 {
00059        const char *p;
00060        const char *external=pop3_externalauth();
00061 
00062        printf("+OK Here's what I can do:\r\n");
00063 
00064        if ((p=getenv("POP3_TLS")) != 0 && atoi(p) &&
00065            (p=getenv("POP3AUTH_TLS")) != 0 && *p)
00066               ;
00067        else
00068               p=getenv("POP3AUTH");
00069 
00070        if ((p && *p) || external)
00071        {
00072               if (!p)
00073                      p="";
00074 
00075               if (!external)
00076                      external="";
00077 
00078               printf("SASL %s%s%s\r\n", p, *p && *external ? " ":"",
00079                      *external ? "EXTERNAL":"");
00080        }
00081               
00082        if (have_starttls())
00083               printf("STLS\r\n");
00084 
00085        printf("TOP\r\nUSER\r\nLOGIN-DELAY 10\r\nPIPELINING\r\nUIDL\r\nIMPLEMENTATION Courier Mail Server\r\n.\r\n");
00086        fflush(stdout);
00087 }