annotate lib-src/pop.c @ 99492:ee792794d888

(isearch-search-fun): Compare the length of the current search string with the length of the string from the previous search state to detect the situation when the user adds or removes characters in the search string. Use word-search-forward-lax and word-search-backward-lax in this case, and otherwise word-search-forward and word-search-backward.
author Juri Linkov <juri@jurta.org>
date Tue, 11 Nov 2008 19:43:09 +0000
parents 9e7bd13d8b05
children a9f7e446141d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1 /* pop.c: client routines for talking to a POP3-protocol post-office server
75250
6d19c76d81c5 Update copyright for years from Emacs 21 to present (mainly adding
Glenn Morris <rgm@gnu.org>
parents: 70857
diff changeset
2 Copyright (C) 1991, 1993, 1996, 1997, 1999, 2001, 2002, 2003, 2004,
79748
5714ff101fd9 Add 2008 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 78257
diff changeset
3 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
94828
3a4bc081639c Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 92159
diff changeset
4
3a4bc081639c Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 92159
diff changeset
5 Author: Jonathan Kamens <jik@security.ov.com>
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7 This file is part of GNU Emacs.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8
94828
3a4bc081639c Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 92159
diff changeset
9 GNU Emacs is free software: you can redistribute it and/or modify
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
10 it under the terms of the GNU General Public License as published by
94828
3a4bc081639c Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 92159
diff changeset
11 the Free Software Foundation, either version 3 of the License, or
3a4bc081639c Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 92159
diff changeset
12 (at your option) any later version.
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
13
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
14 GNU Emacs is distributed in the hope that it will be useful,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17 GNU General Public License for more details.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
18
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19 You should have received a copy of the GNU General Public License
94828
3a4bc081639c Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 92159
diff changeset
20 along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
3a4bc081639c Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 92159
diff changeset
21
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
22
9613
530b4511e5b3 Only include ../src/config.h if HAVE_CONFIG_H is
Richard M. Stallman <rms@gnu.org>
parents: 9600
diff changeset
23 #ifdef HAVE_CONFIG_H
42412
83c1951257f1 Include <config.h>.
Pavel Janík <Pavel@Janik.cz>
parents: 29784
diff changeset
24 #include <config.h>
9613
530b4511e5b3 Only include ../src/config.h if HAVE_CONFIG_H is
Richard M. Stallman <rms@gnu.org>
parents: 9600
diff changeset
25 #else
530b4511e5b3 Only include ../src/config.h if HAVE_CONFIG_H is
Richard M. Stallman <rms@gnu.org>
parents: 9600
diff changeset
26 #define MAIL_USE_POP
530b4511e5b3 Only include ../src/config.h if HAVE_CONFIG_H is
Richard M. Stallman <rms@gnu.org>
parents: 9600
diff changeset
27 #endif
9592
132798b0352b Include ../src/config.h.
Richard M. Stallman <rms@gnu.org>
parents: 9591
diff changeset
28
9613
530b4511e5b3 Only include ../src/config.h if HAVE_CONFIG_H is
Richard M. Stallman <rms@gnu.org>
parents: 9600
diff changeset
29 #ifdef MAIL_USE_POP
530b4511e5b3 Only include ../src/config.h if HAVE_CONFIG_H is
Richard M. Stallman <rms@gnu.org>
parents: 9600
diff changeset
30
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
31 #include <sys/types.h>
15102
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
32 #ifdef WINDOWSNT
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
33 #include "ntlib.h"
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
34 #include <winsock.h>
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
35 #undef SOCKET_ERROR
15108
442458addd50 (SEND, RECV): Renamed from send, recv.
Richard M. Stallman <rms@gnu.org>
parents: 15102
diff changeset
36 #define RECV(s,buf,len,flags) recv(s,buf,len,flags)
442458addd50 (SEND, RECV): Renamed from send, recv.
Richard M. Stallman <rms@gnu.org>
parents: 15102
diff changeset
37 #define SEND(s,buf,len,flags) send(s,buf,len,flags)
442458addd50 (SEND, RECV): Renamed from send, recv.
Richard M. Stallman <rms@gnu.org>
parents: 15102
diff changeset
38 #define CLOSESOCKET(s) closesocket(s)
15102
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
39 #else
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
40 #include <netinet/in.h>
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
41 #include <sys/socket.h>
15108
442458addd50 (SEND, RECV): Renamed from send, recv.
Richard M. Stallman <rms@gnu.org>
parents: 15102
diff changeset
42 #define RECV(s,buf,len,flags) read(s,buf,len)
442458addd50 (SEND, RECV): Renamed from send, recv.
Richard M. Stallman <rms@gnu.org>
parents: 15102
diff changeset
43 #define SEND(s,buf,len,flags) write(s,buf,len)
442458addd50 (SEND, RECV): Renamed from send, recv.
Richard M. Stallman <rms@gnu.org>
parents: 15102
diff changeset
44 #define CLOSESOCKET(s) close(s)
15102
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
45 #endif
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
46 #include <pop.h>
9600
f0d3266e07d7 Fix mismatch in conditionals.
Richard M. Stallman <rms@gnu.org>
parents: 9594
diff changeset
47
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
48 #ifdef sun
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
49 #include <malloc.h>
9613
530b4511e5b3 Only include ../src/config.h if HAVE_CONFIG_H is
Richard M. Stallman <rms@gnu.org>
parents: 9600
diff changeset
50 #endif /* sun */
9600
f0d3266e07d7 Fix mismatch in conditionals.
Richard M. Stallman <rms@gnu.org>
parents: 9594
diff changeset
51
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
52 #ifdef HESIOD
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
53 #include <hesiod.h>
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
54 /*
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
55 * It really shouldn't be necessary to put this declaration here, but
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
56 * the version of hesiod.h that Athena has installed in release 7.2
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
57 * doesn't declare this function; I don't know if the 7.3 version of
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
58 * hesiod.h does.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
59 */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
60 extern struct servent *hes_getservbyname (/* char *, char * */);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
61 #endif
9600
f0d3266e07d7 Fix mismatch in conditionals.
Richard M. Stallman <rms@gnu.org>
parents: 9594
diff changeset
62
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
63 #include <pwd.h>
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
64 #include <netdb.h>
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
65 #include <errno.h>
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
66 #include <stdio.h>
19018
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
67 #ifdef STDC_HEADERS
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
68 #include <string.h>
19978
83050d7e3f64 Use system header files instead of declaring C-library
Karl Heuer <kwzh@gnu.org>
parents: 19018
diff changeset
69 #define index strchr
83050d7e3f64 Use system header files instead of declaring C-library
Karl Heuer <kwzh@gnu.org>
parents: 19018
diff changeset
70 #endif
83050d7e3f64 Use system header files instead of declaring C-library
Karl Heuer <kwzh@gnu.org>
parents: 19018
diff changeset
71 #ifdef HAVE_UNISTD_H
83050d7e3f64 Use system header files instead of declaring C-library
Karl Heuer <kwzh@gnu.org>
parents: 19018
diff changeset
72 #include <unistd.h>
19018
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
73 #endif
9600
f0d3266e07d7 Fix mismatch in conditionals.
Richard M. Stallman <rms@gnu.org>
parents: 9594
diff changeset
74
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
75 #ifdef KERBEROS
19018
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
76 # ifdef HAVE_KRB5_H
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
77 # include <krb5.h>
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
78 # endif
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
79 # ifdef HAVE_KRB_H
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
80 # include <krb.h>
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
81 # else
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
82 # ifdef HAVE_KERBEROSIV_KRB_H
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
83 # include <kerberosIV/krb.h>
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
84 # else
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
85 # ifdef HAVE_KERBEROS_KRB_H
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
86 # include <kerberos/krb.h>
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
87 # endif
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
88 # endif
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
89 # endif
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
90 # ifdef HAVE_COM_ERR_H
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
91 # include <com_err.h>
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
92 # endif
9613
530b4511e5b3 Only include ../src/config.h if HAVE_CONFIG_H is
Richard M. Stallman <rms@gnu.org>
parents: 9600
diff changeset
93 #endif /* KERBEROS */
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
94
9613
530b4511e5b3 Only include ../src/config.h if HAVE_CONFIG_H is
Richard M. Stallman <rms@gnu.org>
parents: 9600
diff changeset
95 #ifdef KERBEROS
19018
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
96 #ifndef KERBEROS5
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
97 extern int krb_sendauth (/* long, int, KTEXT, char *, char *, char *,
9613
530b4511e5b3 Only include ../src/config.h if HAVE_CONFIG_H is
Richard M. Stallman <rms@gnu.org>
parents: 9600
diff changeset
98 u_long, MSG_DAT *, CREDENTIALS *, Key_schedule,
530b4511e5b3 Only include ../src/config.h if HAVE_CONFIG_H is
Richard M. Stallman <rms@gnu.org>
parents: 9600
diff changeset
99 struct sockaddr_in *, struct sockaddr_in *,
530b4511e5b3 Only include ../src/config.h if HAVE_CONFIG_H is
Richard M. Stallman <rms@gnu.org>
parents: 9600
diff changeset
100 char * */);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
101 extern char *krb_realmofhost (/* char * */);
19018
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
102 #endif /* ! KERBEROS5 */
9613
530b4511e5b3 Only include ../src/config.h if HAVE_CONFIG_H is
Richard M. Stallman <rms@gnu.org>
parents: 9600
diff changeset
103 #endif /* KERBEROS */
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
104
15102
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
105 #ifndef WINDOWSNT
9613
530b4511e5b3 Only include ../src/config.h if HAVE_CONFIG_H is
Richard M. Stallman <rms@gnu.org>
parents: 9600
diff changeset
106 #if !defined(HAVE_H_ERRNO) || !defined(HAVE_CONFIG_H)
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
107 extern int h_errno;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
108 #endif
15102
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
109 #endif
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
110
49053
2990b2f8bfb5 (__P): Renamed from _P to avoid problems on Cygwin.
Kim F. Storm <storm@cua.dk>
parents: 45328
diff changeset
111 #ifndef __P
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
112 # ifdef __STDC__
49053
2990b2f8bfb5 (__P): Renamed from _P to avoid problems on Cygwin.
Kim F. Storm <storm@cua.dk>
parents: 45328
diff changeset
113 # define __P(a) a
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
114 # else
49053
2990b2f8bfb5 (__P): Renamed from _P to avoid problems on Cygwin.
Kim F. Storm <storm@cua.dk>
parents: 45328
diff changeset
115 # define __P(a) ()
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
116 # endif /* __STDC__ */
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
117 #endif /* ! __P */
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
118
49053
2990b2f8bfb5 (__P): Renamed from _P to avoid problems on Cygwin.
Kim F. Storm <storm@cua.dk>
parents: 45328
diff changeset
119 static int socket_connection __P((char *, int));
2990b2f8bfb5 (__P): Renamed from _P to avoid problems on Cygwin.
Kim F. Storm <storm@cua.dk>
parents: 45328
diff changeset
120 static int pop_getline __P((popserver, char **));
2990b2f8bfb5 (__P): Renamed from _P to avoid problems on Cygwin.
Kim F. Storm <storm@cua.dk>
parents: 45328
diff changeset
121 static int sendline __P((popserver, char *));
2990b2f8bfb5 (__P): Renamed from _P to avoid problems on Cygwin.
Kim F. Storm <storm@cua.dk>
parents: 45328
diff changeset
122 static int fullwrite __P((int, char *, int));
2990b2f8bfb5 (__P): Renamed from _P to avoid problems on Cygwin.
Kim F. Storm <storm@cua.dk>
parents: 45328
diff changeset
123 static int getok __P((popserver));
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
124 #if 0
49053
2990b2f8bfb5 (__P): Renamed from _P to avoid problems on Cygwin.
Kim F. Storm <storm@cua.dk>
parents: 45328
diff changeset
125 static int gettermination __P((popserver));
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
126 #endif
49053
2990b2f8bfb5 (__P): Renamed from _P to avoid problems on Cygwin.
Kim F. Storm <storm@cua.dk>
parents: 45328
diff changeset
127 static void pop_trash __P((popserver));
2990b2f8bfb5 (__P): Renamed from _P to avoid problems on Cygwin.
Kim F. Storm <storm@cua.dk>
parents: 45328
diff changeset
128 static char *find_crlf __P((char *, int));
9591
0774e217e8aa Don't declare malloc, realloc, free.
Richard M. Stallman <rms@gnu.org>
parents: 9158
diff changeset
129
29047
71b1a76cd64a (ERROR_MAX): Increase to 160.
Dave Love <fx@gnu.org>
parents: 26083
diff changeset
130 #define ERROR_MAX 160 /* a pretty arbitrary size, but needs
29784
e7d9947be23b comment
Dave Love <fx@gnu.org>
parents: 29047
diff changeset
131 to be bigger than the original
e7d9947be23b comment
Dave Love <fx@gnu.org>
parents: 29047
diff changeset
132 value of 80 */
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
133 #define POP_PORT 110
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
134 #define KPOP_PORT 1109
15102
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
135 #define POP_SERVICE "pop3" /* we don't want the POP2 port! */
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
136 #ifdef KERBEROS
70857
d2542ee8a5c9 (pop_open, socket_connection, KPOP_SERVICE): Added
Francesco Potortì <pot@gnu.org>
parents: 68647
diff changeset
137 #define KPOP_SERVICE "kpop" /* never used: look for 20060515 to see why */
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
138 #endif
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
139
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
140 char pop_error[ERROR_MAX];
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
141 int pop_debug = 0;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
142
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
143 #ifndef min
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
144 #define min(a,b) (((a) < (b)) ? (a) : (b))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
145 #endif
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
146
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
147 /*
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
148 * Function: pop_open (char *host, char *username, char *password,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
149 * int flags)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
150 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
151 * Purpose: Establishes a connection with a post-office server, and
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
152 * completes the authorization portion of the session.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
153 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
154 * Arguments:
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
155 * host The server host with which the connection should be
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
156 * established. Optional. If omitted, internal
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
157 * heuristics will be used to determine the server host,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
158 * if possible.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
159 * username
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
160 * The username of the mail-drop to access. Optional.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
161 * If omitted, internal heuristics will be used to
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
162 * determine the username, if possible.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
163 * password
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
164 * The password to use for authorization. If omitted,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
165 * internal heuristics will be used to determine the
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
166 * password, if possible.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
167 * flags A bit mask containing flags controlling certain
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
168 * functions of the routine. Valid flags are defined in
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
169 * the file pop.h
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
170 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
171 * Return value: Upon successful establishment of a connection, a
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
172 * non-null popserver will be returned. Otherwise, null will be
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
173 * returned, and the string variable pop_error will contain an
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
174 * explanation of the error.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
175 */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
176 popserver
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
177 pop_open (host, username, password, flags)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
178 char *host;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
179 char *username;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
180 char *password;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
181 int flags;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
182 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
183 int sock;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
184 popserver server;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
185
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
186 /* Determine the user name */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
187 if (! username)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
188 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
189 username = getenv ("USER");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
190 if (! (username && *username))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
191 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
192 username = getlogin ();
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
193 if (! (username && *username))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
194 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
195 struct passwd *passwd;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
196 passwd = getpwuid (getuid ());
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
197 if (passwd && passwd->pw_name && *passwd->pw_name)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
198 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
199 username = passwd->pw_name;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
200 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
201 else
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
202 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
203 strcpy (pop_error, "Could not determine username");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
204 return (0);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
205 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
206 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
207 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
208 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
209
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
210 /*
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
211 * Determine the mail host.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
212 */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
213
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
214 if (! host)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
215 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
216 host = getenv ("MAILHOST");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
217 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
218
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
219 #ifdef HESIOD
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
220 if ((! host) && (! (flags & POP_NO_HESIOD)))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
221 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
222 struct hes_postoffice *office;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
223 office = hes_getmailhost (username);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
224 if (office && office->po_type && (! strcmp (office->po_type, "POP"))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
225 && office->po_name && *office->po_name && office->po_host
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
226 && *office->po_host)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
227 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
228 host = office->po_host;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
229 username = office->po_name;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
230 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
231 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
232 #endif
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
233
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
234 #ifdef MAILHOST
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
235 if (! host)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
236 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
237 host = MAILHOST;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
238 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
239 #endif
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
240
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
241 if (! host)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
242 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
243 strcpy (pop_error, "Could not determine POP server");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
244 return (0);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
245 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
246
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
247 /* Determine the password */
22236
bfaacbee089a Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 21397
diff changeset
248 #ifdef KERBEROS
bfaacbee089a Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 21397
diff changeset
249 #define DONT_NEED_PASSWORD (! (flags & POP_NO_KERBEROS))
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
250 #else
22236
bfaacbee089a Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 21397
diff changeset
251 #define DONT_NEED_PASSWORD 0
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
252 #endif
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49053
diff changeset
253
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
254 if ((! password) && (! DONT_NEED_PASSWORD))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
255 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
256 if (! (flags & POP_NO_GETPASS))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
257 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
258 password = getpass ("Enter POP password:");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
259 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
260 if (! password)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
261 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
262 strcpy (pop_error, "Could not determine POP password");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
263 return (0);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
264 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
265 }
70857
d2542ee8a5c9 (pop_open, socket_connection, KPOP_SERVICE): Added
Francesco Potortì <pot@gnu.org>
parents: 68647
diff changeset
266 if (password) /* always true, detected 20060515 */
22236
bfaacbee089a Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 21397
diff changeset
267 flags |= POP_NO_KERBEROS;
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
268 else
70857
d2542ee8a5c9 (pop_open, socket_connection, KPOP_SERVICE): Added
Francesco Potortì <pot@gnu.org>
parents: 68647
diff changeset
269 password = username; /* dead code, detected 20060515 */
d2542ee8a5c9 (pop_open, socket_connection, KPOP_SERVICE): Added
Francesco Potortì <pot@gnu.org>
parents: 68647
diff changeset
270 /** "kpop" service is never used: look for 20060515 to see why **/
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
271
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
272 sock = socket_connection (host, flags);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
273 if (sock == -1)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
274 return (0);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
275
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
276 server = (popserver) malloc (sizeof (struct _popserver));
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
277 if (! server)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
278 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
279 strcpy (pop_error, "Out of memory in pop_open");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
280 return (0);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
281 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
282 server->buffer = (char *) malloc (GETLINE_MIN);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
283 if (! server->buffer)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
284 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
285 strcpy (pop_error, "Out of memory in pop_open");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
286 free ((char *) server);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
287 return (0);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
288 }
42439
d8a417105504 Remove unnecessary whitespaces.
Pavel Janík <Pavel@Janik.cz>
parents: 42412
diff changeset
289
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
290 server->file = sock;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
291 server->data = 0;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
292 server->buffer_index = 0;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
293 server->buffer_size = GETLINE_MIN;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
294 server->in_multi = 0;
15102
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
295 server->trash_started = 0;
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
296
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
297 if (getok (server))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
298 return (0);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
299
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
300 /*
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
301 * I really shouldn't use the pop_error variable like this, but....
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
302 */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
303 if (strlen (username) > ERROR_MAX - 6)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
304 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
305 pop_close (server);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
306 strcpy (pop_error,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
307 "Username too long; recompile pop.c with larger ERROR_MAX");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
308 return (0);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
309 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
310 sprintf (pop_error, "USER %s", username);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
311
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
312 if (sendline (server, pop_error) || getok (server))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
313 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
314 return (0);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
315 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
316
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
317 if (strlen (password) > ERROR_MAX - 6)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
318 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
319 pop_close (server);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
320 strcpy (pop_error,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
321 "Password too long; recompile pop.c with larger ERROR_MAX");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
322 return (0);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
323 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
324 sprintf (pop_error, "PASS %s", password);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
325
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
326 if (sendline (server, pop_error) || getok (server))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
327 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
328 return (0);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
329 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
330
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
331 return (server);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
332 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
333
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
334 /*
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
335 * Function: pop_stat
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
336 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
337 * Purpose: Issue the STAT command to the server and return (in the
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
338 * value parameters) the number of messages in the maildrop and
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
339 * the total size of the maildrop.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
340 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
341 * Return value: 0 on success, or non-zero with an error in pop_error
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
342 * in failure.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
343 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
344 * Side effects: On failure, may make further operations on the
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
345 * connection impossible.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
346 */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
347 int
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
348 pop_stat (server, count, size)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
349 popserver server;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
350 int *count;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
351 int *size;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
352 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
353 char *fromserver;
79817
dd778207ebb2 (pop_stat, pop_last): Check validity of string-to-integer
Chong Yidong <cyd@stupidchicken.com>
parents: 79748
diff changeset
354 char *end_ptr;
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
355
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
356 if (server->in_multi)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
357 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
358 strcpy (pop_error, "In multi-line query in pop_stat");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
359 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
360 }
42439
d8a417105504 Remove unnecessary whitespaces.
Pavel Janík <Pavel@Janik.cz>
parents: 42412
diff changeset
361
21295
f399e51d6d11 (pop_getline): Renamed from getline.
Richard M. Stallman <rms@gnu.org>
parents: 20418
diff changeset
362 if (sendline (server, "STAT") || (pop_getline (server, &fromserver) < 0))
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
363 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
364
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
365 if (strncmp (fromserver, "+OK ", 4))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
366 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
367 if (0 == strncmp (fromserver, "-ERR", 4))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
368 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
369 strncpy (pop_error, fromserver, ERROR_MAX);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
370 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
371 else
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
372 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
373 strcpy (pop_error,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
374 "Unexpected response from POP server in pop_stat");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
375 pop_trash (server);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
376 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
377 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
378 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
379
79817
dd778207ebb2 (pop_stat, pop_last): Check validity of string-to-integer
Chong Yidong <cyd@stupidchicken.com>
parents: 79748
diff changeset
380 errno = 0;
dd778207ebb2 (pop_stat, pop_last): Check validity of string-to-integer
Chong Yidong <cyd@stupidchicken.com>
parents: 79748
diff changeset
381 *count = strtol (&fromserver[4], &end_ptr, 10);
dd778207ebb2 (pop_stat, pop_last): Check validity of string-to-integer
Chong Yidong <cyd@stupidchicken.com>
parents: 79748
diff changeset
382 /* Check validity of string-to-integer conversion. */
79905
de27c7b1b268 (pop_stat, pop_last): Fix last fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 79817
diff changeset
383 if (fromserver + 4 == end_ptr || *end_ptr != ' ' || errno)
79817
dd778207ebb2 (pop_stat, pop_last): Check validity of string-to-integer
Chong Yidong <cyd@stupidchicken.com>
parents: 79748
diff changeset
384 {
dd778207ebb2 (pop_stat, pop_last): Check validity of string-to-integer
Chong Yidong <cyd@stupidchicken.com>
parents: 79748
diff changeset
385 strcpy (pop_error, "Unexpected response from POP server in pop_stat");
dd778207ebb2 (pop_stat, pop_last): Check validity of string-to-integer
Chong Yidong <cyd@stupidchicken.com>
parents: 79748
diff changeset
386 pop_trash (server);
dd778207ebb2 (pop_stat, pop_last): Check validity of string-to-integer
Chong Yidong <cyd@stupidchicken.com>
parents: 79748
diff changeset
387 return (-1);
dd778207ebb2 (pop_stat, pop_last): Check validity of string-to-integer
Chong Yidong <cyd@stupidchicken.com>
parents: 79748
diff changeset
388 }
42439
d8a417105504 Remove unnecessary whitespaces.
Pavel Janík <Pavel@Janik.cz>
parents: 42412
diff changeset
389
79905
de27c7b1b268 (pop_stat, pop_last): Fix last fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 79817
diff changeset
390 fromserver = end_ptr;
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
391
79817
dd778207ebb2 (pop_stat, pop_last): Check validity of string-to-integer
Chong Yidong <cyd@stupidchicken.com>
parents: 79748
diff changeset
392 errno = 0;
dd778207ebb2 (pop_stat, pop_last): Check validity of string-to-integer
Chong Yidong <cyd@stupidchicken.com>
parents: 79748
diff changeset
393 *size = strtol (fromserver + 1, &end_ptr, 10);
79905
de27c7b1b268 (pop_stat, pop_last): Fix last fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 79817
diff changeset
394 if (fromserver + 1 == end_ptr || errno)
79817
dd778207ebb2 (pop_stat, pop_last): Check validity of string-to-integer
Chong Yidong <cyd@stupidchicken.com>
parents: 79748
diff changeset
395 {
dd778207ebb2 (pop_stat, pop_last): Check validity of string-to-integer
Chong Yidong <cyd@stupidchicken.com>
parents: 79748
diff changeset
396 strcpy (pop_error, "Unexpected response from POP server in pop_stat");
dd778207ebb2 (pop_stat, pop_last): Check validity of string-to-integer
Chong Yidong <cyd@stupidchicken.com>
parents: 79748
diff changeset
397 pop_trash (server);
dd778207ebb2 (pop_stat, pop_last): Check validity of string-to-integer
Chong Yidong <cyd@stupidchicken.com>
parents: 79748
diff changeset
398 return (-1);
dd778207ebb2 (pop_stat, pop_last): Check validity of string-to-integer
Chong Yidong <cyd@stupidchicken.com>
parents: 79748
diff changeset
399 }
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
400
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
401 return (0);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
402 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
403
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
404 /*
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
405 * Function: pop_list
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
406 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
407 * Purpose: Performs the POP "list" command and returns (in value
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
408 * parameters) two malloc'd zero-terminated arrays -- one of
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
409 * message IDs, and a parallel one of sizes.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
410 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
411 * Arguments:
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
412 * server The pop connection to talk to.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
413 * message The number of the one message about which to get
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
414 * information, or 0 to get information about all
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
415 * messages.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
416 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
417 * Return value: 0 on success, non-zero with error in pop_error on
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
418 * failure.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
419 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
420 * Side effects: On failure, may make further operations on the
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
421 * connection impossible.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
422 */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
423 int
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
424 pop_list (server, message, IDs, sizes)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
425 popserver server;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
426 int message;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
427 int **IDs;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
428 int **sizes;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
429 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
430 int how_many, i;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
431 char *fromserver;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
432
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
433 if (server->in_multi)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
434 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
435 strcpy (pop_error, "In multi-line query in pop_list");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
436 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
437 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
438
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
439 if (message)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
440 how_many = 1;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
441 else
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
442 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
443 int count, size;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
444 if (pop_stat (server, &count, &size))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
445 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
446 how_many = count;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
447 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
448
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
449 *IDs = (int *) malloc ((how_many + 1) * sizeof (int));
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
450 *sizes = (int *) malloc ((how_many + 1) * sizeof (int));
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
451 if (! (*IDs && *sizes))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
452 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
453 strcpy (pop_error, "Out of memory in pop_list");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
454 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
455 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
456
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
457 if (message)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
458 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
459 sprintf (pop_error, "LIST %d", message);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
460 if (sendline (server, pop_error))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
461 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
462 free ((char *) *IDs);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
463 free ((char *) *sizes);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
464 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
465 }
21295
f399e51d6d11 (pop_getline): Renamed from getline.
Richard M. Stallman <rms@gnu.org>
parents: 20418
diff changeset
466 if (pop_getline (server, &fromserver) < 0)
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
467 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
468 free ((char *) *IDs);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
469 free ((char *) *sizes);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
470 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
471 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
472 if (strncmp (fromserver, "+OK ", 4))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
473 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
474 if (! strncmp (fromserver, "-ERR", 4))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
475 strncpy (pop_error, fromserver, ERROR_MAX);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
476 else
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
477 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
478 strcpy (pop_error,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
479 "Unexpected response from server in pop_list");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
480 pop_trash (server);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
481 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
482 free ((char *) *IDs);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
483 free ((char *) *sizes);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
484 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
485 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
486 (*IDs)[0] = atoi (&fromserver[4]);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
487 fromserver = index (&fromserver[4], ' ');
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
488 if (! fromserver)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
489 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
490 strcpy (pop_error,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
491 "Badly formatted response from server in pop_list");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
492 pop_trash (server);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
493 free ((char *) *IDs);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
494 free ((char *) *sizes);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
495 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
496 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
497 (*sizes)[0] = atoi (fromserver);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
498 (*IDs)[1] = (*sizes)[1] = 0;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
499 return (0);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
500 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
501 else
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
502 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
503 if (pop_multi_first (server, "LIST", &fromserver))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
504 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
505 free ((char *) *IDs);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
506 free ((char *) *sizes);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
507 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
508 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
509 for (i = 0; i < how_many; i++)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
510 {
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
511 if (pop_multi_next (server, &fromserver) <= 0)
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
512 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
513 free ((char *) *IDs);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
514 free ((char *) *sizes);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
515 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
516 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
517 (*IDs)[i] = atoi (fromserver);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
518 fromserver = index (fromserver, ' ');
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
519 if (! fromserver)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
520 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
521 strcpy (pop_error,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
522 "Badly formatted response from server in pop_list");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
523 free ((char *) *IDs);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
524 free ((char *) *sizes);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
525 pop_trash (server);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
526 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
527 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
528 (*sizes)[i] = atoi (fromserver);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
529 }
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
530 if (pop_multi_next (server, &fromserver) < 0)
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
531 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
532 free ((char *) *IDs);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
533 free ((char *) *sizes);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
534 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
535 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
536 else if (fromserver)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
537 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
538 strcpy (pop_error,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
539 "Too many response lines from server in pop_list");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
540 free ((char *) *IDs);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
541 free ((char *) *sizes);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
542 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
543 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
544 (*IDs)[i] = (*sizes)[i] = 0;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
545 return (0);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
546 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
547 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
548
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
549 /*
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
550 * Function: pop_retrieve
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
551 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
552 * Purpose: Retrieve a specified message from the maildrop.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
553 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
554 * Arguments:
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
555 * server The server to retrieve from.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
556 * message The message number to retrieve.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
557 * markfrom
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
558 * If true, then mark the string "From " at the beginning
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
559 * of lines with '>'.
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
560 * msg_buf Output parameter to which a buffer containing the
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
561 * message is assigned.
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49053
diff changeset
562 *
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
563 * Return value: The number of bytes in msg_buf, which may contain
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
564 * embedded nulls, not including its final null, or -1 on error
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
565 * with pop_error set.
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
566 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
567 * Side effects: May kill connection on error.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
568 */
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
569 int
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
570 pop_retrieve (server, message, markfrom, msg_buf)
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
571 popserver server;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
572 int message;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
573 int markfrom;
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
574 char **msg_buf;
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
575 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
576 int *IDs, *sizes, bufsize, fromcount = 0, cp = 0;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
577 char *ptr, *fromserver;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
578 int ret;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
579
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
580 if (server->in_multi)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
581 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
582 strcpy (pop_error, "In multi-line query in pop_retrieve");
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
583 return (-1);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
584 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
585
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
586 if (pop_list (server, message, &IDs, &sizes))
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
587 return (-1);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
588
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
589 if (pop_retrieve_first (server, message, &fromserver))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
590 {
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
591 return (-1);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
592 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
593
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
594 /*
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
595 * The "5" below is an arbitrary constant -- I assume that if
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
596 * there are "From" lines in the text to be marked, there
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
597 * probably won't be more than 5 of them. If there are, I
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
598 * allocate more space for them below.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
599 */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
600 bufsize = sizes[0] + (markfrom ? 5 : 0);
14238
b55e97028105 (pop_retrieve, getline): Avoid type clashes.
Karl Heuer <kwzh@gnu.org>
parents: 14186
diff changeset
601 ptr = (char *)malloc (bufsize);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
602 free ((char *) IDs);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
603 free ((char *) sizes);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
604
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
605 if (! ptr)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
606 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
607 strcpy (pop_error, "Out of memory in pop_retrieve");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
608 pop_retrieve_flush (server);
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
609 return (-1);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
610 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
611
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
612 while ((ret = pop_retrieve_next (server, &fromserver)) >= 0)
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
613 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
614 if (! fromserver)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
615 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
616 ptr[cp] = '\0';
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
617 *msg_buf = ptr;
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
618 return (cp);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
619 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
620 if (markfrom && fromserver[0] == 'F' && fromserver[1] == 'r' &&
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
621 fromserver[2] == 'o' && fromserver[3] == 'm' &&
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
622 fromserver[4] == ' ')
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
623 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
624 if (++fromcount == 5)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
625 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
626 bufsize += 5;
14238
b55e97028105 (pop_retrieve, getline): Avoid type clashes.
Karl Heuer <kwzh@gnu.org>
parents: 14186
diff changeset
627 ptr = (char *)realloc (ptr, bufsize);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
628 if (! ptr)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
629 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
630 strcpy (pop_error, "Out of memory in pop_retrieve");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
631 pop_retrieve_flush (server);
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
632 return (-1);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
633 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
634 fromcount = 0;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
635 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
636 ptr[cp++] = '>';
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
637 }
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
638 bcopy (fromserver, &ptr[cp], ret);
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
639 cp += ret;
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
640 ptr[cp++] = '\n';
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
641 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
642
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
643 free (ptr);
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
644 return (-1);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49053
diff changeset
645 }
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
646
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
647 int
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
648 pop_retrieve_first (server, message, response)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
649 popserver server;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
650 int message;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
651 char **response;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
652 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
653 sprintf (pop_error, "RETR %d", message);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
654 return (pop_multi_first (server, pop_error, response));
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
655 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
656
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
657 /*
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
658 Returns a negative number on error, 0 to indicate that the data has
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
659 all been read (i.e., the server has returned a "." termination
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
660 line), or a positive number indicating the number of bytes in the
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
661 returned buffer (which is null-terminated and may contain embedded
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
662 nulls, but the returned bytecount doesn't include the final null).
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
663 */
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
664
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
665 int
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
666 pop_retrieve_next (server, line)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
667 popserver server;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
668 char **line;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
669 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
670 return (pop_multi_next (server, line));
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
671 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
672
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
673 int
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
674 pop_retrieve_flush (server)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
675 popserver server;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
676 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
677 return (pop_multi_flush (server));
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
678 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
679
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
680 int
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
681 pop_top_first (server, message, lines, response)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
682 popserver server;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
683 int message, lines;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
684 char **response;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
685 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
686 sprintf (pop_error, "TOP %d %d", message, lines);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
687 return (pop_multi_first (server, pop_error, response));
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
688 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
689
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
690 /*
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
691 Returns a negative number on error, 0 to indicate that the data has
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
692 all been read (i.e., the server has returned a "." termination
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
693 line), or a positive number indicating the number of bytes in the
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
694 returned buffer (which is null-terminated and may contain embedded
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
695 nulls, but the returned bytecount doesn't include the final null).
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
696 */
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
697
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
698 int
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
699 pop_top_next (server, line)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
700 popserver server;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
701 char **line;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
702 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
703 return (pop_multi_next (server, line));
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
704 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
705
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
706 int
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
707 pop_top_flush (server)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
708 popserver server;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
709 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
710 return (pop_multi_flush (server));
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
711 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
712
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
713 int
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
714 pop_multi_first (server, command, response)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
715 popserver server;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
716 char *command;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
717 char **response;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
718 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
719 if (server->in_multi)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
720 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
721 strcpy (pop_error,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
722 "Already in multi-line query in pop_multi_first");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
723 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
724 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
725
21295
f399e51d6d11 (pop_getline): Renamed from getline.
Richard M. Stallman <rms@gnu.org>
parents: 20418
diff changeset
726 if (sendline (server, command) || (pop_getline (server, response) < 0))
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
727 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
728 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
729 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
730
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
731 if (0 == strncmp (*response, "-ERR", 4))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
732 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
733 strncpy (pop_error, *response, ERROR_MAX);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
734 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
735 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
736 else if (0 == strncmp (*response, "+OK", 3))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
737 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
738 for (*response += 3; **response == ' '; (*response)++) /* empty */;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
739 server->in_multi = 1;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
740 return (0);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
741 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
742 else
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
743 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
744 strcpy (pop_error,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
745 "Unexpected response from server in pop_multi_first");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
746 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
747 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
748 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
749
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
750 /*
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
751 Read the next line of data from SERVER and place a pointer to it
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
752 into LINE. Return -1 on error, 0 if there are no more lines to read
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
753 (i.e., the server has returned a line containing only "."), or a
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
754 positive number indicating the number of bytes in the LINE buffer
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
755 (not including the final null). The data in that buffer may contain
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
756 embedded nulls, but does not contain the final CRLF. When returning
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
757 0, LINE is set to null. */
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
758
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
759 int
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
760 pop_multi_next (server, line)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
761 popserver server;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
762 char **line;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
763 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
764 char *fromserver;
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
765 int ret;
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
766
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
767 if (! server->in_multi)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
768 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
769 strcpy (pop_error, "Not in multi-line query in pop_multi_next");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
770 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
771 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
772
21295
f399e51d6d11 (pop_getline): Renamed from getline.
Richard M. Stallman <rms@gnu.org>
parents: 20418
diff changeset
773 if ((ret = pop_getline (server, &fromserver)) < 0)
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
774 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
775 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
776 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
777
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
778 if (fromserver[0] == '.')
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
779 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
780 if (! fromserver[1])
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
781 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
782 *line = 0;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
783 server->in_multi = 0;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
784 return (0);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
785 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
786 else
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
787 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
788 *line = fromserver + 1;
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
789 return (ret - 1);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
790 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
791 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
792 else
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
793 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
794 *line = fromserver;
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
795 return (ret);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
796 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
797 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
798
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
799 int
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
800 pop_multi_flush (server)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
801 popserver server;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
802 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
803 char *line;
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
804 int ret;
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
805
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
806 if (! server->in_multi)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
807 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
808 return (0);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
809 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
810
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
811 while ((ret = pop_multi_next (server, &line)))
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
812 {
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
813 if (ret < 0)
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
814 return (-1);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
815 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
816
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
817 return (0);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
818 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
819
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
820 /* Function: pop_delete
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
821 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
822 * Purpose: Delete a specified message.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
823 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
824 * Arguments:
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
825 * server Server from which to delete the message.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
826 * message Message to delete.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
827 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
828 * Return value: 0 on success, non-zero with error in pop_error
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
829 * otherwise.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
830 */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
831 int
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
832 pop_delete (server, message)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
833 popserver server;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
834 int message;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
835 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
836 if (server->in_multi)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
837 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
838 strcpy (pop_error, "In multi-line query in pop_delete");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
839 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
840 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
841
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
842 sprintf (pop_error, "DELE %d", message);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
843
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
844 if (sendline (server, pop_error) || getok (server))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
845 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
846
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
847 return (0);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
848 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
849
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
850 /*
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
851 * Function: pop_noop
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
852 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
853 * Purpose: Send a noop command to the server.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
854 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
855 * Argument:
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
856 * server The server to send to.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
857 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
858 * Return value: 0 on success, non-zero with error in pop_error
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
859 * otherwise.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
860 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
861 * Side effects: Closes connection on error.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
862 */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
863 int
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
864 pop_noop (server)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
865 popserver server;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
866 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
867 if (server->in_multi)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
868 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
869 strcpy (pop_error, "In multi-line query in pop_noop");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
870 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
871 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
872
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
873 if (sendline (server, "NOOP") || getok (server))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
874 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
875
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
876 return (0);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
877 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
878
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
879 /*
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
880 * Function: pop_last
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
881 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
882 * Purpose: Find out the highest seen message from the server.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
883 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
884 * Arguments:
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
885 * server The server.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
886 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
887 * Return value: If successful, the highest seen message, which is
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
888 * greater than or equal to 0. Otherwise, a negative number with
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
889 * the error explained in pop_error.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
890 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
891 * Side effects: Closes the connection on error.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
892 */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
893 int
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
894 pop_last (server)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
895 popserver server;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
896 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
897 char *fromserver;
42439
d8a417105504 Remove unnecessary whitespaces.
Pavel Janík <Pavel@Janik.cz>
parents: 42412
diff changeset
898
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
899 if (server->in_multi)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
900 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
901 strcpy (pop_error, "In multi-line query in pop_last");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
902 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
903 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
904
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
905 if (sendline (server, "LAST"))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
906 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
907
21295
f399e51d6d11 (pop_getline): Renamed from getline.
Richard M. Stallman <rms@gnu.org>
parents: 20418
diff changeset
908 if (pop_getline (server, &fromserver) < 0)
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
909 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
910
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
911 if (! strncmp (fromserver, "-ERR", 4))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
912 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
913 strncpy (pop_error, fromserver, ERROR_MAX);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
914 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
915 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
916 else if (strncmp (fromserver, "+OK ", 4))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
917 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
918 strcpy (pop_error, "Unexpected response from server in pop_last");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
919 pop_trash (server);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
920 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
921 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
922 else
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
923 {
79817
dd778207ebb2 (pop_stat, pop_last): Check validity of string-to-integer
Chong Yidong <cyd@stupidchicken.com>
parents: 79748
diff changeset
924 char *end_ptr;
dd778207ebb2 (pop_stat, pop_last): Check validity of string-to-integer
Chong Yidong <cyd@stupidchicken.com>
parents: 79748
diff changeset
925 int count;
dd778207ebb2 (pop_stat, pop_last): Check validity of string-to-integer
Chong Yidong <cyd@stupidchicken.com>
parents: 79748
diff changeset
926 errno = 0;
dd778207ebb2 (pop_stat, pop_last): Check validity of string-to-integer
Chong Yidong <cyd@stupidchicken.com>
parents: 79748
diff changeset
927 count = strtol (&fromserver[4], &end_ptr, 10);
79905
de27c7b1b268 (pop_stat, pop_last): Fix last fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 79817
diff changeset
928 if (fromserver + 4 == end_ptr || errno)
79817
dd778207ebb2 (pop_stat, pop_last): Check validity of string-to-integer
Chong Yidong <cyd@stupidchicken.com>
parents: 79748
diff changeset
929 {
dd778207ebb2 (pop_stat, pop_last): Check validity of string-to-integer
Chong Yidong <cyd@stupidchicken.com>
parents: 79748
diff changeset
930 strcpy (pop_error, "Unexpected response from server in pop_last");
dd778207ebb2 (pop_stat, pop_last): Check validity of string-to-integer
Chong Yidong <cyd@stupidchicken.com>
parents: 79748
diff changeset
931 pop_trash (server);
dd778207ebb2 (pop_stat, pop_last): Check validity of string-to-integer
Chong Yidong <cyd@stupidchicken.com>
parents: 79748
diff changeset
932 return (-1);
dd778207ebb2 (pop_stat, pop_last): Check validity of string-to-integer
Chong Yidong <cyd@stupidchicken.com>
parents: 79748
diff changeset
933 }
dd778207ebb2 (pop_stat, pop_last): Check validity of string-to-integer
Chong Yidong <cyd@stupidchicken.com>
parents: 79748
diff changeset
934 return count;
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
935 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
936 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
937
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
938 /*
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
939 * Function: pop_reset
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
940 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
941 * Purpose: Reset the server to its initial connect state
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
942 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
943 * Arguments:
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
944 * server The server.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
945 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
946 * Return value: 0 for success, non-0 with error in pop_error
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
947 * otherwise.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
948 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
949 * Side effects: Closes the connection on error.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
950 */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
951 int
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
952 pop_reset (server)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
953 popserver server;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
954 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
955 if (pop_retrieve_flush (server))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
956 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
957 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
958 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
959
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
960 if (sendline (server, "RSET") || getok (server))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
961 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
962
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
963 return (0);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
964 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
965
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
966 /*
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
967 * Function: pop_quit
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
968 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
969 * Purpose: Quit the connection to the server,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
970 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
971 * Arguments:
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
972 * server The server to quit.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
973 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
974 * Return value: 0 for success, non-zero otherwise with error in
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
975 * pop_error.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
976 *
14036
621a575db6f7 Comment fixes.
Karl Heuer <kwzh@gnu.org>
parents: 9674
diff changeset
977 * Side Effects: The popserver passed in is unusable after this
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
978 * function is called, even if an error occurs.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
979 */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
980 int
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
981 pop_quit (server)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
982 popserver server;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
983 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
984 int ret = 0;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
985
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
986 if (server->file >= 0)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
987 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
988 if (pop_retrieve_flush (server))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
989 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
990 ret = -1;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
991 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
992
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
993 if (sendline (server, "QUIT") || getok (server))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
994 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
995 ret = -1;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
996 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
997
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
998 close (server->file);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
999 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1000
95479
9588c3703f38 remove useless if-before-free tests
Jim Meyering <jim@meyering.net>
parents: 94828
diff changeset
1001 free (server->buffer);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1002 free ((char *) server);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1003
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1004 return (ret);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1005 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1006
15102
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
1007 #ifdef WINDOWSNT
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
1008 static int have_winsock = 0;
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
1009 #endif
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
1010
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1011 /*
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1012 * Function: socket_connection
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1013 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1014 * Purpose: Opens the network connection with the mail host, without
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1015 * doing any sort of I/O with it or anything.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1016 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1017 * Arguments:
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1018 * host The host to which to connect.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1019 * flags Option flags.
42439
d8a417105504 Remove unnecessary whitespaces.
Pavel Janík <Pavel@Janik.cz>
parents: 42412
diff changeset
1020 *
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1021 * Return value: A file descriptor indicating the connection, or -1
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1022 * indicating failure, in which case an error has been copied
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1023 * into pop_error.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1024 */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1025 static int
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1026 socket_connection (host, flags)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1027 char *host;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1028 int flags;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1029 {
86210
7ae58179773b (socket_connection): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78257
diff changeset
1030 #ifdef HAVE_GETADDRINFO
7ae58179773b (socket_connection): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78257
diff changeset
1031 struct addrinfo *res, *it;
7ae58179773b (socket_connection): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78257
diff changeset
1032 struct addrinfo hints;
7ae58179773b (socket_connection): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78257
diff changeset
1033 int ret;
7ae58179773b (socket_connection): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78257
diff changeset
1034 #else /* !HAVE_GETADDRINFO */
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1035 struct hostent *hostent;
86210
7ae58179773b (socket_connection): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78257
diff changeset
1036 #endif
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1037 struct servent *servent;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1038 struct sockaddr_in addr;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1039 char found_port = 0;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1040 char *service;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1041 int sock;
86235
79cf32b82b23 (socket_connection): Move realhost out of #ifdefs.
Jan Djärv <jan.h.d@swipnet.se>
parents: 86210
diff changeset
1042 char *realhost;
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1043 #ifdef KERBEROS
19018
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1044 #ifdef KERBEROS5
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1045 krb5_error_code rem;
19018
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1046 krb5_context kcontext = 0;
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1047 krb5_auth_context auth_context = 0;
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1048 krb5_ccache ccdef;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1049 krb5_principal client, server;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1050 krb5_error *err_ret;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1051 register char *cp;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1052 #else
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1053 KTEXT ticket;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1054 MSG_DAT msg_data;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1055 CREDENTIALS cred;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1056 Key_schedule schedule;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1057 int rem;
19018
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1058 #endif /* KERBEROS5 */
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1059 #endif /* KERBEROS */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1060
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1061 int try_count = 0;
86210
7ae58179773b (socket_connection): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78257
diff changeset
1062 int connect_ok;
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1063
15102
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
1064 #ifdef WINDOWSNT
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
1065 {
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
1066 WSADATA winsockData;
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
1067 if (WSAStartup (0x101, &winsockData) == 0)
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
1068 have_winsock = 1;
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
1069 }
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
1070 #endif
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
1071
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1072 bzero ((char *) &addr, sizeof (addr));
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1073 addr.sin_family = AF_INET;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1074
70857
d2542ee8a5c9 (pop_open, socket_connection, KPOP_SERVICE): Added
Francesco Potortì <pot@gnu.org>
parents: 68647
diff changeset
1075 /** "kpop" service is never used: look for 20060515 to see why **/
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1076 #ifdef KERBEROS
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1077 service = (flags & POP_NO_KERBEROS) ? POP_SERVICE : KPOP_SERVICE;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1078 #else
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1079 service = POP_SERVICE;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1080 #endif
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1081
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1082 #ifdef HESIOD
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1083 if (! (flags & POP_NO_HESIOD))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1084 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1085 servent = hes_getservbyname (service, "tcp");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1086 if (servent)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1087 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1088 addr.sin_port = servent->s_port;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1089 found_port = 1;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1090 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1091 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1092 #endif
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1093 if (! found_port)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1094 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1095 servent = getservbyname (service, "tcp");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1096 if (servent)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1097 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1098 addr.sin_port = servent->s_port;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1099 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1100 else
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1101 {
70857
d2542ee8a5c9 (pop_open, socket_connection, KPOP_SERVICE): Added
Francesco Potortì <pot@gnu.org>
parents: 68647
diff changeset
1102 /** "kpop" service is never used: look for 20060515 to see why **/
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1103 #ifdef KERBEROS
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1104 addr.sin_port = htons ((flags & POP_NO_KERBEROS) ?
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1105 POP_PORT : KPOP_PORT);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1106 #else
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1107 addr.sin_port = htons (POP_PORT);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1108 #endif
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1109 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1110 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1111
19018
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1112 #define POP_SOCKET_ERROR "Could not create socket for POP connection: "
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1113
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1114 sock = socket (PF_INET, SOCK_STREAM, 0);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1115 if (sock < 0)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1116 {
19018
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1117 strcpy (pop_error, POP_SOCKET_ERROR);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1118 strncat (pop_error, strerror (errno),
19018
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1119 ERROR_MAX - sizeof (POP_SOCKET_ERROR));
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1120 return (-1);
42439
d8a417105504 Remove unnecessary whitespaces.
Pavel Janík <Pavel@Janik.cz>
parents: 42412
diff changeset
1121
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1122 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1123
86210
7ae58179773b (socket_connection): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78257
diff changeset
1124 #ifdef HAVE_GETADDRINFO
7ae58179773b (socket_connection): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78257
diff changeset
1125 memset (&hints, 0, sizeof(hints));
7ae58179773b (socket_connection): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78257
diff changeset
1126 hints.ai_socktype = SOCK_STREAM;
86504
8b582ee742ce (socket_connection): Remove AI_ADDRCONFIG.
Jan Djärv <jan.h.d@swipnet.se>
parents: 86235
diff changeset
1127 hints.ai_flags = AI_CANONNAME;
86210
7ae58179773b (socket_connection): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78257
diff changeset
1128 hints.ai_family = AF_INET;
7ae58179773b (socket_connection): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78257
diff changeset
1129 do
7ae58179773b (socket_connection): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78257
diff changeset
1130 {
7ae58179773b (socket_connection): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78257
diff changeset
1131 ret = getaddrinfo (host, service, &hints, &res);
7ae58179773b (socket_connection): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78257
diff changeset
1132 try_count++;
7ae58179773b (socket_connection): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78257
diff changeset
1133 if (ret != 0 && (ret != EAI_AGAIN || try_count == 5))
7ae58179773b (socket_connection): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78257
diff changeset
1134 {
7ae58179773b (socket_connection): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78257
diff changeset
1135 strcpy (pop_error, "Could not determine POP server's address");
7ae58179773b (socket_connection): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78257
diff changeset
1136 return (-1);
7ae58179773b (socket_connection): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78257
diff changeset
1137 }
7ae58179773b (socket_connection): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78257
diff changeset
1138 } while (ret != 0);
7ae58179773b (socket_connection): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78257
diff changeset
1139
7ae58179773b (socket_connection): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78257
diff changeset
1140 if (ret == 0)
7ae58179773b (socket_connection): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78257
diff changeset
1141 {
7ae58179773b (socket_connection): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78257
diff changeset
1142 it = res;
7ae58179773b (socket_connection): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78257
diff changeset
1143 while (it)
7ae58179773b (socket_connection): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78257
diff changeset
1144 {
7ae58179773b (socket_connection): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78257
diff changeset
1145 if (it->ai_addrlen == sizeof (addr))
7ae58179773b (socket_connection): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78257
diff changeset
1146 {
7ae58179773b (socket_connection): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78257
diff changeset
1147 struct sockaddr_in *in_a = (struct sockaddr_in *) it->ai_addr;
7ae58179773b (socket_connection): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78257
diff changeset
1148 bcopy (&in_a->sin_addr, (char *) &addr.sin_addr,
7ae58179773b (socket_connection): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78257
diff changeset
1149 sizeof (addr.sin_addr));
7ae58179773b (socket_connection): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78257
diff changeset
1150 if (! connect (sock, (struct sockaddr *) &addr, sizeof (addr)))
7ae58179773b (socket_connection): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78257
diff changeset
1151 break;
7ae58179773b (socket_connection): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78257
diff changeset
1152 }
7ae58179773b (socket_connection): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78257
diff changeset
1153 it = it->ai_next;
7ae58179773b (socket_connection): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78257
diff changeset
1154 }
7ae58179773b (socket_connection): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78257
diff changeset
1155 connect_ok = it != NULL;
86235
79cf32b82b23 (socket_connection): Move realhost out of #ifdefs.
Jan Djärv <jan.h.d@swipnet.se>
parents: 86210
diff changeset
1156 if (connect_ok)
79cf32b82b23 (socket_connection): Move realhost out of #ifdefs.
Jan Djärv <jan.h.d@swipnet.se>
parents: 86210
diff changeset
1157 {
79cf32b82b23 (socket_connection): Move realhost out of #ifdefs.
Jan Djärv <jan.h.d@swipnet.se>
parents: 86210
diff changeset
1158 realhost = alloca (strlen (it->ai_canonname) + 1);
79cf32b82b23 (socket_connection): Move realhost out of #ifdefs.
Jan Djärv <jan.h.d@swipnet.se>
parents: 86210
diff changeset
1159 strcpy (realhost, it->ai_canonname);
79cf32b82b23 (socket_connection): Move realhost out of #ifdefs.
Jan Djärv <jan.h.d@swipnet.se>
parents: 86210
diff changeset
1160 }
86210
7ae58179773b (socket_connection): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78257
diff changeset
1161 freeaddrinfo (res);
7ae58179773b (socket_connection): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78257
diff changeset
1162 }
7ae58179773b (socket_connection): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78257
diff changeset
1163 #else /* !HAVE_GETADDRINFO */
45328
cbcc456b9a76 (socket_connection): Move the code to resolve the POP
Eli Zaretskii <eliz@gnu.org>
parents: 42439
diff changeset
1164 do
cbcc456b9a76 (socket_connection): Move the code to resolve the POP
Eli Zaretskii <eliz@gnu.org>
parents: 42439
diff changeset
1165 {
cbcc456b9a76 (socket_connection): Move the code to resolve the POP
Eli Zaretskii <eliz@gnu.org>
parents: 42439
diff changeset
1166 hostent = gethostbyname (host);
cbcc456b9a76 (socket_connection): Move the code to resolve the POP
Eli Zaretskii <eliz@gnu.org>
parents: 42439
diff changeset
1167 try_count++;
cbcc456b9a76 (socket_connection): Move the code to resolve the POP
Eli Zaretskii <eliz@gnu.org>
parents: 42439
diff changeset
1168 if ((! hostent) && ((h_errno != TRY_AGAIN) || (try_count == 5)))
cbcc456b9a76 (socket_connection): Move the code to resolve the POP
Eli Zaretskii <eliz@gnu.org>
parents: 42439
diff changeset
1169 {
cbcc456b9a76 (socket_connection): Move the code to resolve the POP
Eli Zaretskii <eliz@gnu.org>
parents: 42439
diff changeset
1170 strcpy (pop_error, "Could not determine POP server's address");
cbcc456b9a76 (socket_connection): Move the code to resolve the POP
Eli Zaretskii <eliz@gnu.org>
parents: 42439
diff changeset
1171 return (-1);
cbcc456b9a76 (socket_connection): Move the code to resolve the POP
Eli Zaretskii <eliz@gnu.org>
parents: 42439
diff changeset
1172 }
cbcc456b9a76 (socket_connection): Move the code to resolve the POP
Eli Zaretskii <eliz@gnu.org>
parents: 42439
diff changeset
1173 } while (! hostent);
cbcc456b9a76 (socket_connection): Move the code to resolve the POP
Eli Zaretskii <eliz@gnu.org>
parents: 42439
diff changeset
1174
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1175 while (*hostent->h_addr_list)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1176 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1177 bcopy (*hostent->h_addr_list, (char *) &addr.sin_addr,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1178 hostent->h_length);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1179 if (! connect (sock, (struct sockaddr *) &addr, sizeof (addr)))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1180 break;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1181 hostent->h_addr_list++;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1182 }
86210
7ae58179773b (socket_connection): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78257
diff changeset
1183 connect_ok = *hostent->h_addr_list != NULL;
86235
79cf32b82b23 (socket_connection): Move realhost out of #ifdefs.
Jan Djärv <jan.h.d@swipnet.se>
parents: 86210
diff changeset
1184 if (! connect_ok)
79cf32b82b23 (socket_connection): Move realhost out of #ifdefs.
Jan Djärv <jan.h.d@swipnet.se>
parents: 86210
diff changeset
1185 {
79cf32b82b23 (socket_connection): Move realhost out of #ifdefs.
Jan Djärv <jan.h.d@swipnet.se>
parents: 86210
diff changeset
1186 realhost = alloca (strlen (hostent->h_name) + 1);
79cf32b82b23 (socket_connection): Move realhost out of #ifdefs.
Jan Djärv <jan.h.d@swipnet.se>
parents: 86210
diff changeset
1187 strcpy (realhost, hostent->h_name);
79cf32b82b23 (socket_connection): Move realhost out of #ifdefs.
Jan Djärv <jan.h.d@swipnet.se>
parents: 86210
diff changeset
1188 }
79cf32b82b23 (socket_connection): Move realhost out of #ifdefs.
Jan Djärv <jan.h.d@swipnet.se>
parents: 86210
diff changeset
1189
86210
7ae58179773b (socket_connection): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78257
diff changeset
1190 #endif /* !HAVE_GETADDRINFO */
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1191
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1192 #define CONNECT_ERROR "Could not connect to POP server: "
42439
d8a417105504 Remove unnecessary whitespaces.
Pavel Janík <Pavel@Janik.cz>
parents: 42412
diff changeset
1193
86210
7ae58179773b (socket_connection): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78257
diff changeset
1194 if (! connect_ok)
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1195 {
15108
442458addd50 (SEND, RECV): Renamed from send, recv.
Richard M. Stallman <rms@gnu.org>
parents: 15102
diff changeset
1196 CLOSESOCKET (sock);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1197 strcpy (pop_error, CONNECT_ERROR);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1198 strncat (pop_error, strerror (errno),
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1199 ERROR_MAX - sizeof (CONNECT_ERROR));
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1200 return (-1);
42439
d8a417105504 Remove unnecessary whitespaces.
Pavel Janík <Pavel@Janik.cz>
parents: 42412
diff changeset
1201
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1202 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1203
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1204 #ifdef KERBEROS
86210
7ae58179773b (socket_connection): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78257
diff changeset
1205
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1206 #define KRB_ERROR "Kerberos error connecting to POP server: "
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1207 if (! (flags & POP_NO_KERBEROS))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1208 {
19018
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1209 #ifdef KERBEROS5
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1210 if ((rem = krb5_init_context (&kcontext)))
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1211 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1212 krb5error:
19018
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1213 if (auth_context)
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1214 krb5_auth_con_free (kcontext, auth_context);
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1215 if (kcontext)
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1216 krb5_free_context (kcontext);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1217 strcpy (pop_error, KRB_ERROR);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1218 strncat (pop_error, error_message (rem),
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1219 ERROR_MAX - sizeof(KRB_ERROR));
15108
442458addd50 (SEND, RECV): Renamed from send, recv.
Richard M. Stallman <rms@gnu.org>
parents: 15102
diff changeset
1220 CLOSESOCKET (sock);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1221 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1222 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1223
19018
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1224 if ((rem = krb5_auth_con_init (kcontext, &auth_context)))
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1225 goto krb5error;
42439
d8a417105504 Remove unnecessary whitespaces.
Pavel Janík <Pavel@Janik.cz>
parents: 42412
diff changeset
1226
19018
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1227 if (rem = krb5_cc_default (kcontext, &ccdef))
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1228 goto krb5error;
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1229
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1230 if (rem = krb5_cc_get_principal (kcontext, ccdef, &client))
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1231 goto krb5error;
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1232
86210
7ae58179773b (socket_connection): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78257
diff changeset
1233 for (cp = realhost; *cp; cp++)
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1234 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1235 if (isupper (*cp))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1236 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1237 *cp = tolower (*cp);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1238 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1239 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1240
86210
7ae58179773b (socket_connection): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78257
diff changeset
1241 if (rem = krb5_sname_to_principal (kcontext, realhost,
19018
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1242 POP_SERVICE, FALSE, &server))
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1243 goto krb5error;
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1244
19018
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1245 rem = krb5_sendauth (kcontext, &auth_context,
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1246 (krb5_pointer) &sock, "KPOPV1.0", client, server,
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1247 AP_OPTS_MUTUAL_REQUIRED,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1248 0, /* no checksum */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1249 0, /* no creds, use ccache instead */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1250 ccdef,
19018
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1251 &err_ret,
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1252 0, /* don't need subsession key */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1253 0); /* don't need reply */
19018
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1254 krb5_free_principal (kcontext, server);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1255 if (rem)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1256 {
97309
9e7bd13d8b05 (socket_connection): Add conditionals for HAVE_KRB5_ERROR_TEXT and
Chong Yidong <cyd@stupidchicken.com>
parents: 95479
diff changeset
1257 strcpy (pop_error, KRB_ERROR);
9e7bd13d8b05 (socket_connection): Add conditionals for HAVE_KRB5_ERROR_TEXT and
Chong Yidong <cyd@stupidchicken.com>
parents: 95479
diff changeset
1258 strncat (pop_error, error_message (rem),
9e7bd13d8b05 (socket_connection): Add conditionals for HAVE_KRB5_ERROR_TEXT and
Chong Yidong <cyd@stupidchicken.com>
parents: 95479
diff changeset
1259 ERROR_MAX - sizeof (KRB_ERROR));
9e7bd13d8b05 (socket_connection): Add conditionals for HAVE_KRB5_ERROR_TEXT and
Chong Yidong <cyd@stupidchicken.com>
parents: 95479
diff changeset
1260 #if defined HAVE_KRB5_ERROR_TEXT
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1261 if (err_ret && err_ret->text.length)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1262 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1263 strncat (pop_error, " [server says '",
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1264 ERROR_MAX - strlen (pop_error) - 1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1265 strncat (pop_error, err_ret->text.data,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1266 min (ERROR_MAX - strlen (pop_error) - 1,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1267 err_ret->text.length));
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1268 strncat (pop_error, "']",
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1269 ERROR_MAX - strlen (pop_error) - 1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1270 }
97309
9e7bd13d8b05 (socket_connection): Add conditionals for HAVE_KRB5_ERROR_TEXT and
Chong Yidong <cyd@stupidchicken.com>
parents: 95479
diff changeset
1271 #elif defined HAVE_KRB5_ERROR_E_TEXT
9e7bd13d8b05 (socket_connection): Add conditionals for HAVE_KRB5_ERROR_TEXT and
Chong Yidong <cyd@stupidchicken.com>
parents: 95479
diff changeset
1272 if (err_ret && err_ret->e_text && strlen(*err_ret->e_text))
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1273 {
97309
9e7bd13d8b05 (socket_connection): Add conditionals for HAVE_KRB5_ERROR_TEXT and
Chong Yidong <cyd@stupidchicken.com>
parents: 95479
diff changeset
1274 strncat (pop_error, " [server says '",
9e7bd13d8b05 (socket_connection): Add conditionals for HAVE_KRB5_ERROR_TEXT and
Chong Yidong <cyd@stupidchicken.com>
parents: 95479
diff changeset
1275 ERROR_MAX - strlen (pop_error) - 1);
9e7bd13d8b05 (socket_connection): Add conditionals for HAVE_KRB5_ERROR_TEXT and
Chong Yidong <cyd@stupidchicken.com>
parents: 95479
diff changeset
1276 strncat (pop_error, *err_ret->e_text,
9e7bd13d8b05 (socket_connection): Add conditionals for HAVE_KRB5_ERROR_TEXT and
Chong Yidong <cyd@stupidchicken.com>
parents: 95479
diff changeset
1277 ERROR_MAX - strlen (pop_error) - 1);
9e7bd13d8b05 (socket_connection): Add conditionals for HAVE_KRB5_ERROR_TEXT and
Chong Yidong <cyd@stupidchicken.com>
parents: 95479
diff changeset
1278 strncat (pop_error, "']",
9e7bd13d8b05 (socket_connection): Add conditionals for HAVE_KRB5_ERROR_TEXT and
Chong Yidong <cyd@stupidchicken.com>
parents: 95479
diff changeset
1279 ERROR_MAX - strlen (pop_error) - 1);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1280 }
97309
9e7bd13d8b05 (socket_connection): Add conditionals for HAVE_KRB5_ERROR_TEXT and
Chong Yidong <cyd@stupidchicken.com>
parents: 95479
diff changeset
1281 #endif
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1282 if (err_ret)
19018
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1283 krb5_free_error (kcontext, err_ret);
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1284 krb5_auth_con_free (kcontext, auth_context);
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1285 krb5_free_context (kcontext);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1286
15108
442458addd50 (SEND, RECV): Renamed from send, recv.
Richard M. Stallman <rms@gnu.org>
parents: 15102
diff changeset
1287 CLOSESOCKET (sock);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1288 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1289 }
42439
d8a417105504 Remove unnecessary whitespaces.
Pavel Janík <Pavel@Janik.cz>
parents: 42412
diff changeset
1290 #else /* ! KERBEROS5 */
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1291 ticket = (KTEXT) malloc (sizeof (KTEXT_ST));
16603
a12b8815bcf0 gethostbyname() may return a pointer to static data, which is
Charles Hannum <mycroft@gnu.org>
parents: 15934
diff changeset
1292 rem = krb_sendauth (0L, sock, ticket, "pop", realhost,
a12b8815bcf0 gethostbyname() may return a pointer to static data, which is
Charles Hannum <mycroft@gnu.org>
parents: 15934
diff changeset
1293 (char *) krb_realmofhost (realhost),
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1294 (unsigned long) 0, &msg_data, &cred, schedule,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1295 (struct sockaddr_in *) 0,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1296 (struct sockaddr_in *) 0,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1297 "KPOPV0.1");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1298 free ((char *) ticket);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1299 if (rem != KSUCCESS)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1300 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1301 strcpy (pop_error, KRB_ERROR);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1302 strncat (pop_error, krb_err_txt[rem],
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1303 ERROR_MAX - sizeof (KRB_ERROR));
15108
442458addd50 (SEND, RECV): Renamed from send, recv.
Richard M. Stallman <rms@gnu.org>
parents: 15102
diff changeset
1304 CLOSESOCKET (sock);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1305 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1306 }
19018
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1307 #endif /* KERBEROS5 */
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1308 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1309 #endif /* KERBEROS */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1310
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1311 return (sock);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1312 } /* socket_connection */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1313
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1314 /*
21295
f399e51d6d11 (pop_getline): Renamed from getline.
Richard M. Stallman <rms@gnu.org>
parents: 20418
diff changeset
1315 * Function: pop_getline
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1316 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1317 * Purpose: Get a line of text from the connection and return a
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1318 * pointer to it. The carriage return and linefeed at the end of
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1319 * the line are stripped, but periods at the beginnings of lines
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1320 * are NOT dealt with in any special way.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1321 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1322 * Arguments:
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1323 * server The server from which to get the line of text.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1324 *
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1325 * Returns: The number of characters in the line, which is returned in
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1326 * LINE, not including the final null. A return value of 0
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1327 * indicates a blank line. A negative return value indicates an
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1328 * error (in which case the contents of LINE are undefined. In
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1329 * case of error, an error message is copied into pop_error.
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1330 *
21295
f399e51d6d11 (pop_getline): Renamed from getline.
Richard M. Stallman <rms@gnu.org>
parents: 20418
diff changeset
1331 * Notes: The line returned is overwritten with each call to pop_getline.
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1332 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1333 * Side effects: Closes the connection on error.
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1334 *
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1335 * THE RETURNED LINE MAY CONTAIN EMBEDDED NULLS!
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1336 */
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1337 static int
21295
f399e51d6d11 (pop_getline): Renamed from getline.
Richard M. Stallman <rms@gnu.org>
parents: 20418
diff changeset
1338 pop_getline (server, line)
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1339 popserver server;
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1340 char **line;
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1341 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1342 #define GETLINE_ERROR "Error reading from server: "
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1343
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1344 int ret;
9674
e5a897cf215d (getline): When a search of already-read input for CRLF
Richard M. Stallman <rms@gnu.org>
parents: 9613
diff changeset
1345 int search_offset = 0;
e5a897cf215d (getline): When a search of already-read input for CRLF
Richard M. Stallman <rms@gnu.org>
parents: 9613
diff changeset
1346
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1347 if (server->data)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1348 {
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1349 char *cp = find_crlf (server->buffer + server->buffer_index,
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1350 server->data);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1351 if (cp)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1352 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1353 int found;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1354 int data_used;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1355
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1356 found = server->buffer_index;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1357 data_used = (cp + 2) - server->buffer - found;
42439
d8a417105504 Remove unnecessary whitespaces.
Pavel Janík <Pavel@Janik.cz>
parents: 42412
diff changeset
1358
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1359 *cp = '\0'; /* terminate the string to be returned */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1360 server->data -= data_used;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1361 server->buffer_index += data_used;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1362
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1363 if (pop_debug)
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1364 /* Embedded nulls will truncate this output prematurely,
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1365 but that's OK because it's just for debugging anyway. */
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1366 fprintf (stderr, "<<< %s\n", server->buffer + found);
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1367 *line = server->buffer + found;
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1368 return (data_used - 2);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1369 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1370 else
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1371 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1372 bcopy (server->buffer + server->buffer_index,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1373 server->buffer, server->data);
9674
e5a897cf215d (getline): When a search of already-read input for CRLF
Richard M. Stallman <rms@gnu.org>
parents: 9613
diff changeset
1374 /* Record the fact that we've searched the data already in
e5a897cf215d (getline): When a search of already-read input for CRLF
Richard M. Stallman <rms@gnu.org>
parents: 9613
diff changeset
1375 the buffer for a CRLF, so that when we search below, we
e5a897cf215d (getline): When a search of already-read input for CRLF
Richard M. Stallman <rms@gnu.org>
parents: 9613
diff changeset
1376 don't have to search the same data twice. There's a "-
e5a897cf215d (getline): When a search of already-read input for CRLF
Richard M. Stallman <rms@gnu.org>
parents: 9613
diff changeset
1377 1" here to account for the fact that the last character
e5a897cf215d (getline): When a search of already-read input for CRLF
Richard M. Stallman <rms@gnu.org>
parents: 9613
diff changeset
1378 of the data we have may be the CR of a CRLF pair, of
e5a897cf215d (getline): When a search of already-read input for CRLF
Richard M. Stallman <rms@gnu.org>
parents: 9613
diff changeset
1379 which we haven't read the second half yet, so we may have
e5a897cf215d (getline): When a search of already-read input for CRLF
Richard M. Stallman <rms@gnu.org>
parents: 9613
diff changeset
1380 to search it again when we read more data. */
e5a897cf215d (getline): When a search of already-read input for CRLF
Richard M. Stallman <rms@gnu.org>
parents: 9613
diff changeset
1381 search_offset = server->data - 1;
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1382 server->buffer_index = 0;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1383 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1384 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1385 else
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1386 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1387 server->buffer_index = 0;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1388 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1389
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1390 while (1)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1391 {
22236
bfaacbee089a Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 21397
diff changeset
1392 /* There's a "- 1" here to leave room for the null that we put
bfaacbee089a Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 21397
diff changeset
1393 at the end of the read data below. We put the null there so
bfaacbee089a Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 21397
diff changeset
1394 that find_crlf knows where to stop when we call it. */
bfaacbee089a Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 21397
diff changeset
1395 if (server->data == server->buffer_size - 1)
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1396 {
22236
bfaacbee089a Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 21397
diff changeset
1397 server->buffer_size += GETLINE_INCR;
bfaacbee089a Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 21397
diff changeset
1398 server->buffer = (char *)realloc (server->buffer, server->buffer_size);
bfaacbee089a Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 21397
diff changeset
1399 if (! server->buffer)
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1400 {
22236
bfaacbee089a Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 21397
diff changeset
1401 strcpy (pop_error, "Out of memory in pop_getline");
bfaacbee089a Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 21397
diff changeset
1402 pop_trash (server);
bfaacbee089a Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 21397
diff changeset
1403 return (-1);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1404 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1405 }
22236
bfaacbee089a Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 21397
diff changeset
1406 ret = RECV (server->file, server->buffer + server->data,
bfaacbee089a Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 21397
diff changeset
1407 server->buffer_size - server->data - 1, 0);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1408 if (ret < 0)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1409 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1410 strcpy (pop_error, GETLINE_ERROR);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1411 strncat (pop_error, strerror (errno),
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1412 ERROR_MAX - sizeof (GETLINE_ERROR));
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1413 pop_trash (server);
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1414 return (-1);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1415 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1416 else if (ret == 0)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1417 {
21295
f399e51d6d11 (pop_getline): Renamed from getline.
Richard M. Stallman <rms@gnu.org>
parents: 20418
diff changeset
1418 strcpy (pop_error, "Unexpected EOF from server in pop_getline");
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1419 pop_trash (server);
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1420 return (-1);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1421 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1422 else
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1423 {
9591
0774e217e8aa Don't declare malloc, realloc, free.
Richard M. Stallman <rms@gnu.org>
parents: 9158
diff changeset
1424 char *cp;
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1425 server->data += ret;
9591
0774e217e8aa Don't declare malloc, realloc, free.
Richard M. Stallman <rms@gnu.org>
parents: 9158
diff changeset
1426 server->buffer[server->data] = '\0';
42439
d8a417105504 Remove unnecessary whitespaces.
Pavel Janík <Pavel@Janik.cz>
parents: 42412
diff changeset
1427
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1428 cp = find_crlf (server->buffer + search_offset,
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1429 server->data - search_offset);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1430 if (cp)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1431 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1432 int data_used = (cp + 2) - server->buffer;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1433 *cp = '\0';
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1434 server->data -= data_used;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1435 server->buffer_index = data_used;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1436
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1437 if (pop_debug)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1438 fprintf (stderr, "<<< %s\n", server->buffer);
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1439 *line = server->buffer;
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1440 return (data_used - 2);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1441 }
17683
975d093d45fb (getline): Don't miss CRLF pairs when the CR and LF are
Richard M. Stallman <rms@gnu.org>
parents: 16697
diff changeset
1442 /* As above, the "- 1" here is to account for the fact that
975d093d45fb (getline): Don't miss CRLF pairs when the CR and LF are
Richard M. Stallman <rms@gnu.org>
parents: 16697
diff changeset
1443 we may have read a CR without its accompanying LF. */
975d093d45fb (getline): Don't miss CRLF pairs when the CR and LF are
Richard M. Stallman <rms@gnu.org>
parents: 16697
diff changeset
1444 search_offset += ret - 1;
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1445 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1446 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1447
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1448 /* NOTREACHED */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1449 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1450
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1451 /*
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1452 * Function: sendline
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1453 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1454 * Purpose: Sends a line of text to the POP server. The line of text
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1455 * passed into this function should NOT have the carriage return
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1456 * and linefeed on the end of it. Periods at beginnings of lines
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1457 * will NOT be treated specially by this function.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1458 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1459 * Arguments:
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1460 * server The server to which to send the text.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1461 * line The line of text to send.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1462 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1463 * Return value: Upon successful completion, a value of 0 will be
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1464 * returned. Otherwise, a non-zero value will be returned, and
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1465 * an error will be copied into pop_error.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1466 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1467 * Side effects: Closes the connection on error.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1468 */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1469 static int
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1470 sendline (server, line)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1471 popserver server;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1472 char *line;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1473 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1474 #define SENDLINE_ERROR "Error writing to POP server: "
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1475 int ret;
64293
0238a53b950b Don't include des.h (or variants thereof); krb.h will do it.
Ken Raeburn <raeburn@raeburn.org>
parents: 64083
diff changeset
1476 char *buf;
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1477
64293
0238a53b950b Don't include des.h (or variants thereof); krb.h will do it.
Ken Raeburn <raeburn@raeburn.org>
parents: 64083
diff changeset
1478 /* Combine the string and the CR-LF into one buffer. Otherwise, two
0238a53b950b Don't include des.h (or variants thereof); krb.h will do it.
Ken Raeburn <raeburn@raeburn.org>
parents: 64083
diff changeset
1479 reasonable network stack optimizations, Nagle's algorithm and
0238a53b950b Don't include des.h (or variants thereof); krb.h will do it.
Ken Raeburn <raeburn@raeburn.org>
parents: 64083
diff changeset
1480 delayed acks, combine to delay us a fraction of a second on every
0238a53b950b Don't include des.h (or variants thereof); krb.h will do it.
Ken Raeburn <raeburn@raeburn.org>
parents: 64083
diff changeset
1481 message we send. (Movemail writes line without \r\n, client
0238a53b950b Don't include des.h (or variants thereof); krb.h will do it.
Ken Raeburn <raeburn@raeburn.org>
parents: 64083
diff changeset
1482 kernel sends packet, server kernel delays the ack to see if it
0238a53b950b Don't include des.h (or variants thereof); krb.h will do it.
Ken Raeburn <raeburn@raeburn.org>
parents: 64083
diff changeset
1483 can combine it with data, movemail writes \r\n, client kernel
0238a53b950b Don't include des.h (or variants thereof); krb.h will do it.
Ken Raeburn <raeburn@raeburn.org>
parents: 64083
diff changeset
1484 waits because it has unacked data already in its outgoing queue,
0238a53b950b Don't include des.h (or variants thereof); krb.h will do it.
Ken Raeburn <raeburn@raeburn.org>
parents: 64083
diff changeset
1485 client kernel eventually times out and sends.)
0238a53b950b Don't include des.h (or variants thereof); krb.h will do it.
Ken Raeburn <raeburn@raeburn.org>
parents: 64083
diff changeset
1486
0238a53b950b Don't include des.h (or variants thereof); krb.h will do it.
Ken Raeburn <raeburn@raeburn.org>
parents: 64083
diff changeset
1487 This can be something like 0.2s per command, which can add up
0238a53b950b Don't include des.h (or variants thereof); krb.h will do it.
Ken Raeburn <raeburn@raeburn.org>
parents: 64083
diff changeset
1488 over a few dozen messages, and is a big chunk of the time we
0238a53b950b Don't include des.h (or variants thereof); krb.h will do it.
Ken Raeburn <raeburn@raeburn.org>
parents: 64083
diff changeset
1489 spend fetching mail from a server close by. */
0238a53b950b Don't include des.h (or variants thereof); krb.h will do it.
Ken Raeburn <raeburn@raeburn.org>
parents: 64083
diff changeset
1490 buf = alloca (strlen (line) + 3);
0238a53b950b Don't include des.h (or variants thereof); krb.h will do it.
Ken Raeburn <raeburn@raeburn.org>
parents: 64083
diff changeset
1491 strcpy (buf, line);
0238a53b950b Don't include des.h (or variants thereof); krb.h will do it.
Ken Raeburn <raeburn@raeburn.org>
parents: 64083
diff changeset
1492 strcat (buf, "\r\n");
0238a53b950b Don't include des.h (or variants thereof); krb.h will do it.
Ken Raeburn <raeburn@raeburn.org>
parents: 64083
diff changeset
1493 ret = fullwrite (server->file, buf, strlen (buf));
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1494
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1495 if (ret < 0)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1496 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1497 pop_trash (server);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1498 strcpy (pop_error, SENDLINE_ERROR);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1499 strncat (pop_error, strerror (errno),
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1500 ERROR_MAX - sizeof (SENDLINE_ERROR));
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1501 return (ret);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1502 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1503
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1504 if (pop_debug)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1505 fprintf (stderr, ">>> %s\n", line);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1506
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1507 return (0);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1508 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1509
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1510 /*
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1511 * Procedure: fullwrite
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1512 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1513 * Purpose: Just like write, but keeps trying until the entire string
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1514 * has been written.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1515 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1516 * Return value: Same as write. Pop_error is not set.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1517 */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1518 static int
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1519 fullwrite (fd, buf, nbytes)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1520 int fd;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1521 char *buf;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1522 int nbytes;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1523 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1524 char *cp;
20204
44f91b648e03 (fullwrite): Get rid of an extra call to write. Problem
Karl Heuer <kwzh@gnu.org>
parents: 19978
diff changeset
1525 int ret = 0;
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1526
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1527 cp = buf;
20204
44f91b648e03 (fullwrite): Get rid of an extra call to write. Problem
Karl Heuer <kwzh@gnu.org>
parents: 19978
diff changeset
1528 while (nbytes && ((ret = SEND (fd, cp, nbytes, 0)) > 0))
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1529 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1530 cp += ret;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1531 nbytes -= ret;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1532 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1533
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1534 return (ret);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1535 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1536
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1537 /*
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1538 * Procedure getok
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1539 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1540 * Purpose: Reads a line from the server. If the return indicator is
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1541 * positive, return with a zero exit status. If not, return with
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1542 * a negative exit status.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1543 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1544 * Arguments:
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1545 * server The server to read from.
42439
d8a417105504 Remove unnecessary whitespaces.
Pavel Janík <Pavel@Janik.cz>
parents: 42412
diff changeset
1546 *
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1547 * Returns: 0 for success, else for failure and puts error in pop_error.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1548 *
14036
621a575db6f7 Comment fixes.
Karl Heuer <kwzh@gnu.org>
parents: 9674
diff changeset
1549 * Side effects: On failure, may make the connection unusable.
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1550 */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1551 static int
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1552 getok (server)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1553 popserver server;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1554 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1555 char *fromline;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1556
21295
f399e51d6d11 (pop_getline): Renamed from getline.
Richard M. Stallman <rms@gnu.org>
parents: 20418
diff changeset
1557 if (pop_getline (server, &fromline) < 0)
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1558 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1559 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1560 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1561
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1562 if (! strncmp (fromline, "+OK", 3))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1563 return (0);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1564 else if (! strncmp (fromline, "-ERR", 4))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1565 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1566 strncpy (pop_error, fromline, ERROR_MAX);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1567 pop_error[ERROR_MAX-1] = '\0';
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1568 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1569 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1570 else
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1571 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1572 strcpy (pop_error,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1573 "Unexpected response from server; expecting +OK or -ERR");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1574 pop_trash (server);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1575 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1576 }
42439
d8a417105504 Remove unnecessary whitespaces.
Pavel Janík <Pavel@Janik.cz>
parents: 42412
diff changeset
1577 }
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1578
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1579 #if 0
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1580 /*
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1581 * Function: gettermination
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1582 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1583 * Purpose: Gets the next line and verifies that it is a termination
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1584 * line (nothing but a dot).
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1585 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1586 * Return value: 0 on success, non-zero with pop_error set on error.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1587 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1588 * Side effects: Closes the connection on error.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1589 */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1590 static int
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1591 gettermination (server)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1592 popserver server;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1593 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1594 char *fromserver;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1595
21295
f399e51d6d11 (pop_getline): Renamed from getline.
Richard M. Stallman <rms@gnu.org>
parents: 20418
diff changeset
1596 if (pop_getline (server, &fromserver) < 0)
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1597 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1598
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1599 if (strcmp (fromserver, "."))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1600 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1601 strcpy (pop_error,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1602 "Unexpected response from server in gettermination");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1603 pop_trash (server);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1604 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1605 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1606
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1607 return (0);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1608 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1609 #endif
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1610
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1611 /*
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1612 * Function pop_close
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1613 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1614 * Purpose: Close a pop connection, sending a "RSET" command to try to
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1615 * preserve any changes that were made and a "QUIT" command to
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1616 * try to get the server to quit, but ignoring any responses that
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1617 * are received.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1618 *
14036
621a575db6f7 Comment fixes.
Karl Heuer <kwzh@gnu.org>
parents: 9674
diff changeset
1619 * Side effects: The server is unusable after this function returns.
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1620 * Changes made to the maildrop since the session was started (or
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1621 * since the last pop_reset) may be lost.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1622 */
42439
d8a417105504 Remove unnecessary whitespaces.
Pavel Janík <Pavel@Janik.cz>
parents: 42412
diff changeset
1623 void
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1624 pop_close (server)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1625 popserver server;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1626 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1627 pop_trash (server);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1628 free ((char *) server);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1629
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1630 return;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1631 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1632
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1633 /*
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1634 * Function: pop_trash
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1635 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1636 * Purpose: Like pop_close or pop_quit, but doesn't deallocate the
80029
e1b6ef5c6464 *** empty log message ***
Juanma Barranquero <lekktu@gmail.com>
parents: 79905
diff changeset
1637 * memory associated with the server. It is valid to call
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1638 * pop_close or pop_quit after this function has been called.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1639 */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1640 static void
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1641 pop_trash (server)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1642 popserver server;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1643 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1644 if (server->file >= 0)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1645 {
15102
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
1646 /* avoid recursion; sendline can call pop_trash */
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
1647 if (server->trash_started)
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
1648 return;
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
1649 server->trash_started = 1;
15108
442458addd50 (SEND, RECV): Renamed from send, recv.
Richard M. Stallman <rms@gnu.org>
parents: 15102
diff changeset
1650
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1651 sendline (server, "RSET");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1652 sendline (server, "QUIT");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1653
15108
442458addd50 (SEND, RECV): Renamed from send, recv.
Richard M. Stallman <rms@gnu.org>
parents: 15102
diff changeset
1654 CLOSESOCKET (server->file);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1655 server->file = -1;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1656 if (server->buffer)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1657 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1658 free (server->buffer);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1659 server->buffer = 0;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1660 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1661 }
15102
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
1662
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
1663 #ifdef WINDOWSNT
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
1664 if (have_winsock)
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
1665 WSACleanup ();
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
1666 #endif
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1667 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1668
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1669 /* Return a pointer to the first CRLF in IN_STRING, which can contain
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1670 embedded nulls and has LEN characters in it not including the final
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1671 null, or 0 if it does not contain one. */
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1672
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1673 static char *
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1674 find_crlf (in_string, len)
9613
530b4511e5b3 Only include ../src/config.h if HAVE_CONFIG_H is
Richard M. Stallman <rms@gnu.org>
parents: 9600
diff changeset
1675 char *in_string;
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1676 int len;
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1677 {
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1678 while (len--)
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1679 {
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1680 if (*in_string == '\r')
9613
530b4511e5b3 Only include ../src/config.h if HAVE_CONFIG_H is
Richard M. Stallman <rms@gnu.org>
parents: 9600
diff changeset
1681 {
530b4511e5b3 Only include ../src/config.h if HAVE_CONFIG_H is
Richard M. Stallman <rms@gnu.org>
parents: 9600
diff changeset
1682 if (*++in_string == '\n')
530b4511e5b3 Only include ../src/config.h if HAVE_CONFIG_H is
Richard M. Stallman <rms@gnu.org>
parents: 9600
diff changeset
1683 return (in_string - 1);
530b4511e5b3 Only include ../src/config.h if HAVE_CONFIG_H is
Richard M. Stallman <rms@gnu.org>
parents: 9600
diff changeset
1684 }
530b4511e5b3 Only include ../src/config.h if HAVE_CONFIG_H is
Richard M. Stallman <rms@gnu.org>
parents: 9600
diff changeset
1685 else
530b4511e5b3 Only include ../src/config.h if HAVE_CONFIG_H is
Richard M. Stallman <rms@gnu.org>
parents: 9600
diff changeset
1686 in_string++;
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1687 }
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1688 return (0);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1689 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1690
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1691 #endif /* MAIL_USE_POP */
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 49600
diff changeset
1692
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 49600
diff changeset
1693 /* arch-tag: ceb37041-b7ad-49a8-a63d-286618b8367d
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 49600
diff changeset
1694 (do not change this comment) */