blob: ca9e12e50005a6ec34f6027064a7ed272ded18d0 (
plain)
| 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
 | /*
** Copyright 1998 - 2018 Double Precision, Inc.
** See COPYING for distribution information.
*/
#if	HAVE_CONFIG_H
#undef	PACKAGE
#undef	VERSION
#include	"config.h"
#endif
#include	<stdio.h>
#include	<string.h>
#include	<stdlib.h>
#include	<signal.h>
#include	<ctype.h>
#include	<fcntl.h>
#if	HAVE_UNISTD_H
#include	<unistd.h>
#endif
extern const char *externalauth();
int have_starttls()
{
	const char *p;
        if ((p=getenv("POP3_STARTTLS")) == 0)   return (0);
        if (*p != 'y' && *p != 'Y')             return (0);
        p=getenv("COURIERTLS");
        if (!p || !*p)  return (0);
        if (access(p, X_OK))    return (0);
        return (1);
}
int tls_required()
{
	const char *p=getenv("POP3_TLS_REQUIRED");
        if (p && atoi(p))       return (1);
        return (0);
}
const char *pop3_externalauth()
{
	const char *external=NULL;
	const char *p;
	if ((p=getenv("POP3_TLS")) != 0 && atoi(p))
		external=externalauth();
	return external;
}
void pop3dcapa()
{
	const char *p;
	const char *external=pop3_externalauth();
	printf("+OK Here's what I can do:\r\n");
	if ((p=getenv("POP3_TLS")) != 0 && atoi(p) &&
	    (p=getenv("POP3AUTH_TLS")) != 0 && *p)
		;
	else
		p=getenv("POP3AUTH");
	if ((p && *p) || external)
	{
		if (!p)
			p="";
		if (!external)
			external="";
		printf("SASL %s%s%s\r\n", p, *p && *external ? " ":"",
		       *external ? "EXTERNAL":"");
	}
	if (have_starttls())
		printf("STLS\r\n");
	printf("TOP\r\nUSER\r\nLOGIN-DELAY 10\r\n"
	       "PIPELINING\r\nUIDL\r\n"
	       "UTF8 USER\r\n"
	       "IMPLEMENTATION Courier Mail Server\r\n.\r\n");
	fflush(stdout);
}
 |