annotate lib-src/pop.c @ 72863:526dc1f36b09

(produce_image_glyph): Automatically crop wide images at right window edge so we can draw the cursor on the same row to avoid confusing redisplay by placing the cursor outside the visible window area.
author Kim F. Storm <storm@cua.dk>
date Thu, 14 Sep 2006 09:37:44 +0000
parents d2542ee8a5c9
children 6d19c76d81c5 a8190f7e546e
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
64769
6358e3c6075c Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 64293
diff changeset
2 Copyright (C) 1991, 1993, 1996, 1997, 1999, 2002, 2003, 2004,
68647
3661e9b3c48f Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 64769
diff changeset
3 2005, 2006 Free Software Foundation, Inc.
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4 Written by Jonathan Kamens, jik@security.ov.com.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6 This file is part of GNU Emacs.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8 GNU Emacs is free software; you can redistribute it and/or modify
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
9 it under the terms of the GNU General Public License as published by
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
10 the Free Software Foundation; either version 2, or (at your option)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
11 any later version.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
12
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
13 GNU Emacs is distributed in the hope that it will be useful,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16 GNU General Public License for more details.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
18 You should have received a copy of the GNU General Public License
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19 along with GNU Emacs; see the file COPYING. If not, write to
64083
23a17af379b1 Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 52401
diff changeset
20 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
23a17af379b1 Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 52401
diff changeset
21 Boston, MA 02110-1301, USA. */
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
530b4511e5b3 Only include ../src/config.h if HAVE_CONFIG_H is
Richard M. Stallman <rms@gnu.org>
parents: 9600
diff changeset
24 #define NO_SHORTNAMES /* Tell config not to load remap.h */
42412
83c1951257f1 Include <config.h>.
Pavel Janík <Pavel@Janik.cz>
parents: 29784
diff changeset
25 #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
26 #else
530b4511e5b3 Only include ../src/config.h if HAVE_CONFIG_H is
Richard M. Stallman <rms@gnu.org>
parents: 9600
diff changeset
27 #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
28 #endif
9592
132798b0352b Include ../src/config.h.
Richard M. Stallman <rms@gnu.org>
parents: 9591
diff changeset
29
9613
530b4511e5b3 Only include ../src/config.h if HAVE_CONFIG_H is
Richard M. Stallman <rms@gnu.org>
parents: 9600
diff changeset
30 #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
31
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
32 #include <sys/types.h>
15102
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
33 #ifdef WINDOWSNT
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
34 #include "ntlib.h"
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
35 #include <winsock.h>
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
36 #undef SOCKET_ERROR
15108
442458addd50 (SEND, RECV): Renamed from send, recv.
Richard M. Stallman <rms@gnu.org>
parents: 15102
diff changeset
37 #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
38 #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
39 #define CLOSESOCKET(s) closesocket(s)
15102
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
40 #else
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
41 #include <netinet/in.h>
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
42 #include <sys/socket.h>
15108
442458addd50 (SEND, RECV): Renamed from send, recv.
Richard M. Stallman <rms@gnu.org>
parents: 15102
diff changeset
43 #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
44 #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
45 #define CLOSESOCKET(s) close(s)
15102
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
46 #endif
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
47 #include <pop.h>
9600
f0d3266e07d7 Fix mismatch in conditionals.
Richard M. Stallman <rms@gnu.org>
parents: 9594
diff changeset
48
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
49 #ifdef sun
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
50 #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
51 #endif /* sun */
9600
f0d3266e07d7 Fix mismatch in conditionals.
Richard M. Stallman <rms@gnu.org>
parents: 9594
diff changeset
52
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
53 #ifdef HESIOD
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
54 #include <hesiod.h>
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
55 /*
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
56 * It really shouldn't be necessary to put this declaration here, but
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
57 * 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
58 * 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
59 * hesiod.h does.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
60 */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
61 extern struct servent *hes_getservbyname (/* char *, char * */);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
62 #endif
9600
f0d3266e07d7 Fix mismatch in conditionals.
Richard M. Stallman <rms@gnu.org>
parents: 9594
diff changeset
63
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
64 #include <pwd.h>
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
65 #include <netdb.h>
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
66 #include <errno.h>
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
67 #include <stdio.h>
19018
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
68 #ifdef STDC_HEADERS
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
69 #include <string.h>
19978
83050d7e3f64 Use system header files instead of declaring C-library
Karl Heuer <kwzh@gnu.org>
parents: 19018
diff changeset
70 #define index strchr
83050d7e3f64 Use system header files instead of declaring C-library
Karl Heuer <kwzh@gnu.org>
parents: 19018
diff changeset
71 #endif
83050d7e3f64 Use system header files instead of declaring C-library
Karl Heuer <kwzh@gnu.org>
parents: 19018
diff changeset
72 #ifdef HAVE_UNISTD_H
83050d7e3f64 Use system header files instead of declaring C-library
Karl Heuer <kwzh@gnu.org>
parents: 19018
diff changeset
73 #include <unistd.h>
19018
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
74 #endif
9600
f0d3266e07d7 Fix mismatch in conditionals.
Richard M. Stallman <rms@gnu.org>
parents: 9594
diff changeset
75
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
76 #ifdef KERBEROS
19018
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
77 # ifdef HAVE_KRB5_H
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
78 # include <krb5.h>
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
79 # endif
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
80 # ifdef HAVE_KRB_H
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
81 # include <krb.h>
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
82 # else
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
83 # ifdef HAVE_KERBEROSIV_KRB_H
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
84 # include <kerberosIV/krb.h>
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
85 # else
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
86 # ifdef HAVE_KERBEROS_KRB_H
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
87 # include <kerberos/krb.h>
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 # endif
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
91 # ifdef HAVE_COM_ERR_H
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
92 # include <com_err.h>
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
93 # endif
9613
530b4511e5b3 Only include ../src/config.h if HAVE_CONFIG_H is
Richard M. Stallman <rms@gnu.org>
parents: 9600
diff changeset
94 #endif /* KERBEROS */
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
95
9613
530b4511e5b3 Only include ../src/config.h if HAVE_CONFIG_H is
Richard M. Stallman <rms@gnu.org>
parents: 9600
diff changeset
96 #ifdef KERBEROS
19018
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
97 #ifndef KERBEROS5
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
98 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
99 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
100 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
101 char * */);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
102 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
103 #endif /* ! KERBEROS5 */
9613
530b4511e5b3 Only include ../src/config.h if HAVE_CONFIG_H is
Richard M. Stallman <rms@gnu.org>
parents: 9600
diff changeset
104 #endif /* KERBEROS */
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
105
15102
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
106 #ifndef WINDOWSNT
9613
530b4511e5b3 Only include ../src/config.h if HAVE_CONFIG_H is
Richard M. Stallman <rms@gnu.org>
parents: 9600
diff changeset
107 #if !defined(HAVE_H_ERRNO) || !defined(HAVE_CONFIG_H)
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
108 extern int h_errno;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
109 #endif
15102
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
110 #endif
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
111
49053
2990b2f8bfb5 (__P): Renamed from _P to avoid problems on Cygwin.
Kim F. Storm <storm@cua.dk>
parents: 45328
diff changeset
112 #ifndef __P
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
113 # ifdef __STDC__
49053
2990b2f8bfb5 (__P): Renamed from _P to avoid problems on Cygwin.
Kim F. Storm <storm@cua.dk>
parents: 45328
diff changeset
114 # define __P(a) a
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
115 # else
49053
2990b2f8bfb5 (__P): Renamed from _P to avoid problems on Cygwin.
Kim F. Storm <storm@cua.dk>
parents: 45328
diff changeset
116 # define __P(a) ()
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
117 # endif /* __STDC__ */
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
118 #endif /* ! __P */
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
119
49053
2990b2f8bfb5 (__P): Renamed from _P to avoid problems on Cygwin.
Kim F. Storm <storm@cua.dk>
parents: 45328
diff changeset
120 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
121 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
122 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
123 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
124 static int getok __P((popserver));
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
125 #if 0
49053
2990b2f8bfb5 (__P): Renamed from _P to avoid problems on Cygwin.
Kim F. Storm <storm@cua.dk>
parents: 45328
diff changeset
126 static int gettermination __P((popserver));
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
127 #endif
49053
2990b2f8bfb5 (__P): Renamed from _P to avoid problems on Cygwin.
Kim F. Storm <storm@cua.dk>
parents: 45328
diff changeset
128 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
129 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
130
29047
71b1a76cd64a (ERROR_MAX): Increase to 160.
Dave Love <fx@gnu.org>
parents: 26083
diff changeset
131 #define ERROR_MAX 160 /* a pretty arbitrary size, but needs
29784
e7d9947be23b comment
Dave Love <fx@gnu.org>
parents: 29047
diff changeset
132 to be bigger than the original
e7d9947be23b comment
Dave Love <fx@gnu.org>
parents: 29047
diff changeset
133 value of 80 */
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
134 #define POP_PORT 110
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
135 #define KPOP_PORT 1109
15102
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
136 #define POP_SERVICE "pop3" /* we don't want the POP2 port! */
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
137 #ifdef KERBEROS
70857
d2542ee8a5c9 (pop_open, socket_connection, KPOP_SERVICE): Added
Francesco Potortì <pot@gnu.org>
parents: 68647
diff changeset
138 #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
139 #endif
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
140
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
141 char pop_error[ERROR_MAX];
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
142 int pop_debug = 0;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
143
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
144 #ifndef min
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
145 #define min(a,b) (((a) < (b)) ? (a) : (b))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
146 #endif
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 /*
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
149 * Function: pop_open (char *host, char *username, char *password,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
150 * int flags)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
151 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
152 * Purpose: Establishes a connection with a post-office server, and
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
153 * completes the authorization portion of the session.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
154 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
155 * Arguments:
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
156 * host The server host with which the connection should be
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
157 * established. Optional. If omitted, internal
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
158 * heuristics will be used to determine the server host,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
159 * if possible.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
160 * username
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
161 * The username of the mail-drop to access. Optional.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
162 * If omitted, internal heuristics will be used to
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
163 * determine the username, if possible.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
164 * password
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
165 * The password to use for authorization. If omitted,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
166 * internal heuristics will be used to determine the
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
167 * password, if possible.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
168 * flags A bit mask containing flags controlling certain
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
169 * functions of the routine. Valid flags are defined in
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
170 * the file pop.h
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
171 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
172 * Return value: Upon successful establishment of a connection, a
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
173 * non-null popserver will be returned. Otherwise, null will be
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
174 * returned, and the string variable pop_error will contain an
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
175 * explanation of the error.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
176 */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
177 popserver
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
178 pop_open (host, username, password, flags)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
179 char *host;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
180 char *username;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
181 char *password;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
182 int flags;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
183 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
184 int sock;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
185 popserver server;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
186
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
187 /* Determine the user name */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
188 if (! username)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
189 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
190 username = getenv ("USER");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
191 if (! (username && *username))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
192 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
193 username = getlogin ();
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
194 if (! (username && *username))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
195 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
196 struct passwd *passwd;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
197 passwd = getpwuid (getuid ());
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
198 if (passwd && passwd->pw_name && *passwd->pw_name)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
199 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
200 username = passwd->pw_name;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
201 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
202 else
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
203 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
204 strcpy (pop_error, "Could not determine username");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
205 return (0);
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 /*
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
212 * Determine the mail host.
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
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
215 if (! host)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
216 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
217 host = getenv ("MAILHOST");
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
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
220 #ifdef HESIOD
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
221 if ((! host) && (! (flags & POP_NO_HESIOD)))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
222 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
223 struct hes_postoffice *office;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
224 office = hes_getmailhost (username);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
225 if (office && office->po_type && (! strcmp (office->po_type, "POP"))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
226 && office->po_name && *office->po_name && office->po_host
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
227 && *office->po_host)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
228 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
229 host = office->po_host;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
230 username = office->po_name;
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 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
233 #endif
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
234
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
235 #ifdef MAILHOST
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
236 if (! host)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
237 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
238 host = MAILHOST;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
239 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
240 #endif
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
241
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
242 if (! host)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
243 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
244 strcpy (pop_error, "Could not determine POP server");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
245 return (0);
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
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
248 /* Determine the password */
22236
bfaacbee089a Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 21397
diff changeset
249 #ifdef KERBEROS
bfaacbee089a Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 21397
diff changeset
250 #define DONT_NEED_PASSWORD (! (flags & POP_NO_KERBEROS))
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
251 #else
22236
bfaacbee089a Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 21397
diff changeset
252 #define DONT_NEED_PASSWORD 0
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
253 #endif
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49053
diff changeset
254
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
255 if ((! password) && (! DONT_NEED_PASSWORD))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
256 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
257 if (! (flags & POP_NO_GETPASS))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
258 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
259 password = getpass ("Enter POP password:");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
260 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
261 if (! password)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
262 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
263 strcpy (pop_error, "Could not determine POP password");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
264 return (0);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
265 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
266 }
70857
d2542ee8a5c9 (pop_open, socket_connection, KPOP_SERVICE): Added
Francesco Potortì <pot@gnu.org>
parents: 68647
diff changeset
267 if (password) /* always true, detected 20060515 */
22236
bfaacbee089a Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 21397
diff changeset
268 flags |= POP_NO_KERBEROS;
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
269 else
70857
d2542ee8a5c9 (pop_open, socket_connection, KPOP_SERVICE): Added
Francesco Potortì <pot@gnu.org>
parents: 68647
diff changeset
270 password = username; /* dead code, detected 20060515 */
d2542ee8a5c9 (pop_open, socket_connection, KPOP_SERVICE): Added
Francesco Potortì <pot@gnu.org>
parents: 68647
diff changeset
271 /** "kpop" service is never used: look for 20060515 to see why **/
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
272
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
273 sock = socket_connection (host, flags);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
274 if (sock == -1)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
275 return (0);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
276
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
277 server = (popserver) malloc (sizeof (struct _popserver));
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
278 if (! server)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
279 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
280 strcpy (pop_error, "Out of memory in pop_open");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
281 return (0);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
282 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
283 server->buffer = (char *) malloc (GETLINE_MIN);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
284 if (! server->buffer)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
285 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
286 strcpy (pop_error, "Out of memory in pop_open");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
287 free ((char *) server);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
288 return (0);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
289 }
42439
d8a417105504 Remove unnecessary whitespaces.
Pavel Janík <Pavel@Janik.cz>
parents: 42412
diff changeset
290
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
291 server->file = sock;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
292 server->data = 0;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
293 server->buffer_index = 0;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
294 server->buffer_size = GETLINE_MIN;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
295 server->in_multi = 0;
15102
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
296 server->trash_started = 0;
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
297
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
298 if (getok (server))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
299 return (0);
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 /*
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
302 * I really shouldn't use the pop_error variable like this, but....
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
303 */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
304 if (strlen (username) > ERROR_MAX - 6)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
305 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
306 pop_close (server);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
307 strcpy (pop_error,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
308 "Username too long; recompile pop.c with larger ERROR_MAX");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
309 return (0);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
310 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
311 sprintf (pop_error, "USER %s", username);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
312
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
313 if (sendline (server, pop_error) || getok (server))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
314 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
315 return (0);
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
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
318 if (strlen (password) > ERROR_MAX - 6)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
319 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
320 pop_close (server);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
321 strcpy (pop_error,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
322 "Password too long; recompile pop.c with larger ERROR_MAX");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
323 return (0);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
324 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
325 sprintf (pop_error, "PASS %s", password);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
326
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
327 if (sendline (server, pop_error) || getok (server))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
328 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
329 return (0);
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
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
332 return (server);
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 /*
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
336 * Function: pop_stat
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
337 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
338 * Purpose: Issue the STAT command to the server and return (in the
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
339 * value parameters) the number of messages in the maildrop and
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
340 * the total size of the maildrop.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
341 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
342 * 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
343 * in failure.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
344 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
345 * Side effects: On failure, may make further operations on the
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
346 * connection impossible.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
347 */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
348 int
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
349 pop_stat (server, count, size)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
350 popserver server;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
351 int *count;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
352 int *size;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
353 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
354 char *fromserver;
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
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
380 *count = atoi (&fromserver[4]);
42439
d8a417105504 Remove unnecessary whitespaces.
Pavel Janík <Pavel@Janik.cz>
parents: 42412
diff changeset
381
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
382 fromserver = index (&fromserver[4], ' ');
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
383 if (! fromserver)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
384 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
385 strcpy (pop_error,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
386 "Badly formatted response from server in pop_stat");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
387 pop_trash (server);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
388 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
389 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
390
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
391 *size = atoi (fromserver + 1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
392
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
393 return (0);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
394 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
395
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
396 /*
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
397 * Function: pop_list
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
398 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
399 * Purpose: Performs the POP "list" command and returns (in value
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
400 * parameters) two malloc'd zero-terminated arrays -- one of
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
401 * message IDs, and a parallel one of sizes.
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 * Arguments:
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
404 * server The pop connection to talk to.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
405 * message The number of the one message about which to get
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
406 * information, or 0 to get information about all
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
407 * messages.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
408 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
409 * 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
410 * failure.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
411 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
412 * Side effects: On failure, may make further operations on the
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
413 * connection impossible.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
414 */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
415 int
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
416 pop_list (server, message, IDs, sizes)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
417 popserver server;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
418 int message;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
419 int **IDs;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
420 int **sizes;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
421 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
422 int how_many, i;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
423 char *fromserver;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
424
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
425 if (server->in_multi)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
426 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
427 strcpy (pop_error, "In multi-line query in pop_list");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
428 return (-1);
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
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
431 if (message)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
432 how_many = 1;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
433 else
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 int count, size;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
436 if (pop_stat (server, &count, &size))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
437 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
438 how_many = count;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
439 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
440
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
441 *IDs = (int *) malloc ((how_many + 1) * sizeof (int));
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
442 *sizes = (int *) malloc ((how_many + 1) * sizeof (int));
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
443 if (! (*IDs && *sizes))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
444 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
445 strcpy (pop_error, "Out of memory in pop_list");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
446 return (-1);
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 if (message)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
450 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
451 sprintf (pop_error, "LIST %d", message);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
452 if (sendline (server, pop_error))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
453 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
454 free ((char *) *IDs);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
455 free ((char *) *sizes);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
456 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
457 }
21295
f399e51d6d11 (pop_getline): Renamed from getline.
Richard M. Stallman <rms@gnu.org>
parents: 20418
diff changeset
458 if (pop_getline (server, &fromserver) < 0)
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
459 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
460 free ((char *) *IDs);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
461 free ((char *) *sizes);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
462 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
463 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
464 if (strncmp (fromserver, "+OK ", 4))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
465 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
466 if (! strncmp (fromserver, "-ERR", 4))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
467 strncpy (pop_error, fromserver, ERROR_MAX);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
468 else
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
469 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
470 strcpy (pop_error,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
471 "Unexpected response from server in pop_list");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
472 pop_trash (server);
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 free ((char *) *IDs);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
475 free ((char *) *sizes);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
476 return (-1);
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 (*IDs)[0] = atoi (&fromserver[4]);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
479 fromserver = index (&fromserver[4], ' ');
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
480 if (! fromserver)
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 strcpy (pop_error,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
483 "Badly formatted response from server in pop_list");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
484 pop_trash (server);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
485 free ((char *) *IDs);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
486 free ((char *) *sizes);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
487 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
488 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
489 (*sizes)[0] = atoi (fromserver);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
490 (*IDs)[1] = (*sizes)[1] = 0;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
491 return (0);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
492 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
493 else
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
494 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
495 if (pop_multi_first (server, "LIST", &fromserver))
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 free ((char *) *IDs);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
498 free ((char *) *sizes);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
499 return (-1);
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 for (i = 0; i < how_many; i++)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
502 {
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
503 if (pop_multi_next (server, &fromserver) <= 0)
9158
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 (*IDs)[i] = atoi (fromserver);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
510 fromserver = index (fromserver, ' ');
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
511 if (! fromserver)
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 strcpy (pop_error,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
514 "Badly formatted response from server in pop_list");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
515 free ((char *) *IDs);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
516 free ((char *) *sizes);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
517 pop_trash (server);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
518 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
519 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
520 (*sizes)[i] = atoi (fromserver);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
521 }
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
522 if (pop_multi_next (server, &fromserver) < 0)
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
523 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
524 free ((char *) *IDs);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
525 free ((char *) *sizes);
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 else if (fromserver)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
529 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
530 strcpy (pop_error,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
531 "Too many response lines from server in pop_list");
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 (*IDs)[i] = (*sizes)[i] = 0;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
537 return (0);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
538 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
539 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
540
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
541 /*
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
542 * Function: pop_retrieve
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 * Purpose: Retrieve a specified message from the maildrop.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
545 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
546 * Arguments:
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
547 * server The server to retrieve from.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
548 * message The message number to retrieve.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
549 * markfrom
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
550 * If true, then mark the string "From " at the beginning
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
551 * of lines with '>'.
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
552 * 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
553 * message is assigned.
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49053
diff changeset
554 *
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
555 * 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
556 * 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
557 * with pop_error set.
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
558 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
559 * Side effects: May kill connection on error.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
560 */
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
561 int
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
562 pop_retrieve (server, message, markfrom, msg_buf)
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
563 popserver server;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
564 int message;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
565 int markfrom;
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
566 char **msg_buf;
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
567 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
568 int *IDs, *sizes, bufsize, fromcount = 0, cp = 0;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
569 char *ptr, *fromserver;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
570 int ret;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
571
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
572 if (server->in_multi)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
573 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
574 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
575 return (-1);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
576 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
577
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
578 if (pop_list (server, message, &IDs, &sizes))
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
579 return (-1);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
580
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
581 if (pop_retrieve_first (server, message, &fromserver))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
582 {
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 /*
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
587 * The "5" below is an arbitrary constant -- I assume that if
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
588 * there are "From" lines in the text to be marked, there
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
589 * 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
590 * allocate more space for them below.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
591 */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
592 bufsize = sizes[0] + (markfrom ? 5 : 0);
14238
b55e97028105 (pop_retrieve, getline): Avoid type clashes.
Karl Heuer <kwzh@gnu.org>
parents: 14186
diff changeset
593 ptr = (char *)malloc (bufsize);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
594 free ((char *) IDs);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
595 free ((char *) sizes);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
596
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
597 if (! ptr)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
598 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
599 strcpy (pop_error, "Out of memory in pop_retrieve");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
600 pop_retrieve_flush (server);
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
601 return (-1);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
602 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
603
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
604 while ((ret = pop_retrieve_next (server, &fromserver)) >= 0)
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
605 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
606 if (! fromserver)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
607 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
608 ptr[cp] = '\0';
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
609 *msg_buf = ptr;
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
610 return (cp);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
611 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
612 if (markfrom && fromserver[0] == 'F' && fromserver[1] == 'r' &&
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
613 fromserver[2] == 'o' && fromserver[3] == 'm' &&
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
614 fromserver[4] == ' ')
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 if (++fromcount == 5)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
617 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
618 bufsize += 5;
14238
b55e97028105 (pop_retrieve, getline): Avoid type clashes.
Karl Heuer <kwzh@gnu.org>
parents: 14186
diff changeset
619 ptr = (char *)realloc (ptr, bufsize);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
620 if (! ptr)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
621 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
622 strcpy (pop_error, "Out of memory in pop_retrieve");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
623 pop_retrieve_flush (server);
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
624 return (-1);
9158
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 fromcount = 0;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
627 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
628 ptr[cp++] = '>';
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
629 }
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
630 bcopy (fromserver, &ptr[cp], ret);
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
631 cp += ret;
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
632 ptr[cp++] = '\n';
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
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
635 free (ptr);
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
636 return (-1);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49053
diff changeset
637 }
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
638
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
639 int
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
640 pop_retrieve_first (server, message, response)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
641 popserver server;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
642 int message;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
643 char **response;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
644 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
645 sprintf (pop_error, "RETR %d", message);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
646 return (pop_multi_first (server, pop_error, response));
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
647 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
648
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
649 /*
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
650 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
651 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
652 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
653 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
654 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
655 */
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
656
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
657 int
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
658 pop_retrieve_next (server, line)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
659 popserver server;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
660 char **line;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
661 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
662 return (pop_multi_next (server, line));
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
663 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
664
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_flush (server)
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 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
669 return (pop_multi_flush (server));
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
670 }
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 int
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
673 pop_top_first (server, message, lines, response)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
674 popserver server;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
675 int message, lines;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
676 char **response;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
677 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
678 sprintf (pop_error, "TOP %d %d", message, lines);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
679 return (pop_multi_first (server, pop_error, response));
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
680 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
681
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
682 /*
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
683 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
684 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
685 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
686 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
687 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
688 */
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
689
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
690 int
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
691 pop_top_next (server, line)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
692 popserver server;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
693 char **line;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
694 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
695 return (pop_multi_next (server, line));
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
696 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
697
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_flush (server)
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 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
702 return (pop_multi_flush (server));
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
703 }
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 int
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
706 pop_multi_first (server, command, response)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
707 popserver server;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
708 char *command;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
709 char **response;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
710 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
711 if (server->in_multi)
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 strcpy (pop_error,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
714 "Already in multi-line query in pop_multi_first");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
715 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
716 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
717
21295
f399e51d6d11 (pop_getline): Renamed from getline.
Richard M. Stallman <rms@gnu.org>
parents: 20418
diff changeset
718 if (sendline (server, command) || (pop_getline (server, response) < 0))
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
719 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
720 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
721 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
722
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
723 if (0 == strncmp (*response, "-ERR", 4))
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 strncpy (pop_error, *response, ERROR_MAX);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
726 return (-1);
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 else if (0 == strncmp (*response, "+OK", 3))
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 for (*response += 3; **response == ' '; (*response)++) /* empty */;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
731 server->in_multi = 1;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
732 return (0);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
733 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
734 else
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 strcpy (pop_error,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
737 "Unexpected response from server in pop_multi_first");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
738 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
739 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
740 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
741
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
742 /*
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
743 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
744 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
745 (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
746 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
747 (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
748 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
749 0, LINE is set to null. */
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
750
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
751 int
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
752 pop_multi_next (server, line)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
753 popserver server;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
754 char **line;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
755 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
756 char *fromserver;
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
757 int ret;
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
758
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
759 if (! server->in_multi)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
760 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
761 strcpy (pop_error, "Not in multi-line query in pop_multi_next");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
762 return (-1);
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
21295
f399e51d6d11 (pop_getline): Renamed from getline.
Richard M. Stallman <rms@gnu.org>
parents: 20418
diff changeset
765 if ((ret = pop_getline (server, &fromserver)) < 0)
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 return (-1);
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
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
770 if (fromserver[0] == '.')
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 if (! fromserver[1])
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
773 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
774 *line = 0;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
775 server->in_multi = 0;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
776 return (0);
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 else
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 *line = fromserver + 1;
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
781 return (ret - 1);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
782 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
783 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
784 else
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 *line = fromserver;
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
787 return (ret);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
788 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
789 }
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 int
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
792 pop_multi_flush (server)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
793 popserver server;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
794 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
795 char *line;
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
796 int ret;
9158
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 if (! server->in_multi)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
799 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
800 return (0);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
801 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
802
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
803 while ((ret = pop_multi_next (server, &line)))
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
804 {
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
805 if (ret < 0)
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
806 return (-1);
9158
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
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
809 return (0);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
810 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
811
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
812 /* Function: pop_delete
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
813 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
814 * Purpose: Delete a specified message.
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 * Arguments:
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
817 * server Server from which to delete the message.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
818 * message Message to delete.
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 * Return value: 0 on success, non-zero with error in pop_error
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
821 * otherwise.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
822 */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
823 int
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
824 pop_delete (server, message)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
825 popserver server;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
826 int message;
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 if (server->in_multi)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
829 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
830 strcpy (pop_error, "In multi-line query in pop_delete");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
831 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
832 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
833
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
834 sprintf (pop_error, "DELE %d", 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 (sendline (server, pop_error) || getok (server))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
837 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
838
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
839 return (0);
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 /*
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
843 * Function: pop_noop
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
844 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
845 * Purpose: Send a noop command to the server.
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 * Argument:
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
848 * server The server to send to.
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 * Return value: 0 on success, non-zero with error in pop_error
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
851 * otherwise.
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 * Side effects: Closes connection on error.
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 int
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
856 pop_noop (server)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
857 popserver server;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
858 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
859 if (server->in_multi)
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 strcpy (pop_error, "In multi-line query in pop_noop");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
862 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
863 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
864
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
865 if (sendline (server, "NOOP") || getok (server))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
866 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
867
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
868 return (0);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
869 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
870
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 * Function: pop_last
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
873 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
874 * Purpose: Find out the highest seen message from the server.
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 * Arguments:
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
877 * server The server.
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 * Return value: If successful, the highest seen message, which is
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
880 * greater than or equal to 0. Otherwise, a negative number with
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
881 * the error explained in pop_error.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
882 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
883 * Side effects: Closes the connection on error.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
884 */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
885 int
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
886 pop_last (server)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
887 popserver server;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
888 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
889 char *fromserver;
42439
d8a417105504 Remove unnecessary whitespaces.
Pavel Janík <Pavel@Janik.cz>
parents: 42412
diff changeset
890
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
891 if (server->in_multi)
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 strcpy (pop_error, "In multi-line query in pop_last");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
894 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
895 }
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 if (sendline (server, "LAST"))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
898 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
899
21295
f399e51d6d11 (pop_getline): Renamed from getline.
Richard M. Stallman <rms@gnu.org>
parents: 20418
diff changeset
900 if (pop_getline (server, &fromserver) < 0)
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
901 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
902
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
903 if (! strncmp (fromserver, "-ERR", 4))
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 strncpy (pop_error, fromserver, ERROR_MAX);
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 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
908 else if (strncmp (fromserver, "+OK ", 4))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
909 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
910 strcpy (pop_error, "Unexpected response from server in pop_last");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
911 pop_trash (server);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
912 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
913 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
914 else
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 return (atoi (&fromserver[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 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
919
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
920 /*
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
921 * Function: pop_reset
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
922 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
923 * Purpose: Reset the server to its initial connect state
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
924 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
925 * Arguments:
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
926 * server The server.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
927 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
928 * Return value: 0 for success, non-0 with error in pop_error
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
929 * otherwise.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
930 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
931 * Side effects: Closes the connection on error.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
932 */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
933 int
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
934 pop_reset (server)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
935 popserver server;
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 if (pop_retrieve_flush (server))
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 return (-1);
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
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
942 if (sendline (server, "RSET") || getok (server))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
943 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
944
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
945 return (0);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
946 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
947
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 * Function: pop_quit
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 * Purpose: Quit the connection to the server,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
952 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
953 * Arguments:
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
954 * server The server to quit.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
955 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
956 * Return value: 0 for success, non-zero otherwise with error in
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
957 * pop_error.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
958 *
14036
621a575db6f7 Comment fixes.
Karl Heuer <kwzh@gnu.org>
parents: 9674
diff changeset
959 * Side Effects: The popserver passed in is unusable after this
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
960 * function is called, even if an error occurs.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
961 */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
962 int
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
963 pop_quit (server)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
964 popserver server;
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 int ret = 0;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
967
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
968 if (server->file >= 0)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
969 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
970 if (pop_retrieve_flush (server))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
971 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
972 ret = -1;
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
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
975 if (sendline (server, "QUIT") || getok (server))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
976 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
977 ret = -1;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
978 }
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 close (server->file);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
981 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
982
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
983 if (server->buffer)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
984 free (server->buffer);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
985 free ((char *) server);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
986
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
987 return (ret);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
988 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
989
15102
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
990 #ifdef WINDOWSNT
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
991 static int have_winsock = 0;
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
992 #endif
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
993
9158
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 * Function: socket_connection
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 * Purpose: Opens the network connection with the mail host, without
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
998 * doing any sort of I/O with it or anything.
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 * Arguments:
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1001 * host The host to which to connect.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1002 * flags Option flags.
42439
d8a417105504 Remove unnecessary whitespaces.
Pavel Janík <Pavel@Janik.cz>
parents: 42412
diff changeset
1003 *
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1004 * Return value: A file descriptor indicating the connection, or -1
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1005 * indicating failure, in which case an error has been copied
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1006 * into pop_error.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1007 */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1008 static int
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1009 socket_connection (host, flags)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1010 char *host;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1011 int flags;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1012 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1013 struct hostent *hostent;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1014 struct servent *servent;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1015 struct sockaddr_in addr;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1016 char found_port = 0;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1017 char *service;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1018 int sock;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1019 #ifdef KERBEROS
19018
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1020 #ifdef KERBEROS5
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1021 krb5_error_code rem;
19018
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1022 krb5_context kcontext = 0;
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1023 krb5_auth_context auth_context = 0;
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1024 krb5_ccache ccdef;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1025 krb5_principal client, server;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1026 krb5_error *err_ret;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1027 register char *cp;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1028 #else
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1029 KTEXT ticket;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1030 MSG_DAT msg_data;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1031 CREDENTIALS cred;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1032 Key_schedule schedule;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1033 int rem;
16603
a12b8815bcf0 gethostbyname() may return a pointer to static data, which is
Charles Hannum <mycroft@gnu.org>
parents: 15934
diff changeset
1034 char *realhost;
19018
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1035 #endif /* KERBEROS5 */
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1036 #endif /* KERBEROS */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1037
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1038 int try_count = 0;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1039
15102
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
1040 #ifdef WINDOWSNT
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
1041 {
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
1042 WSADATA winsockData;
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
1043 if (WSAStartup (0x101, &winsockData) == 0)
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
1044 have_winsock = 1;
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
1045 }
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
1046 #endif
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
1047
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1048 bzero ((char *) &addr, sizeof (addr));
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1049 addr.sin_family = AF_INET;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1050
70857
d2542ee8a5c9 (pop_open, socket_connection, KPOP_SERVICE): Added
Francesco Potortì <pot@gnu.org>
parents: 68647
diff changeset
1051 /** "kpop" service is never used: look for 20060515 to see why **/
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1052 #ifdef KERBEROS
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1053 service = (flags & POP_NO_KERBEROS) ? POP_SERVICE : KPOP_SERVICE;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1054 #else
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1055 service = POP_SERVICE;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1056 #endif
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1057
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1058 #ifdef HESIOD
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1059 if (! (flags & POP_NO_HESIOD))
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 servent = hes_getservbyname (service, "tcp");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1062 if (servent)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1063 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1064 addr.sin_port = servent->s_port;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1065 found_port = 1;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1066 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1067 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1068 #endif
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1069 if (! found_port)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1070 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1071 servent = getservbyname (service, "tcp");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1072 if (servent)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1073 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1074 addr.sin_port = servent->s_port;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1075 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1076 else
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1077 {
70857
d2542ee8a5c9 (pop_open, socket_connection, KPOP_SERVICE): Added
Francesco Potortì <pot@gnu.org>
parents: 68647
diff changeset
1078 /** "kpop" service is never used: look for 20060515 to see why **/
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1079 #ifdef KERBEROS
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1080 addr.sin_port = htons ((flags & POP_NO_KERBEROS) ?
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1081 POP_PORT : KPOP_PORT);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1082 #else
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1083 addr.sin_port = htons (POP_PORT);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1084 #endif
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1085 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1086 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1087
19018
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1088 #define POP_SOCKET_ERROR "Could not create socket for POP connection: "
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1089
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1090 sock = socket (PF_INET, SOCK_STREAM, 0);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1091 if (sock < 0)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1092 {
19018
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1093 strcpy (pop_error, POP_SOCKET_ERROR);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1094 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
1095 ERROR_MAX - sizeof (POP_SOCKET_ERROR));
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1096 return (-1);
42439
d8a417105504 Remove unnecessary whitespaces.
Pavel Janík <Pavel@Janik.cz>
parents: 42412
diff changeset
1097
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1098 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1099
45328
cbcc456b9a76 (socket_connection): Move the code to resolve the POP
Eli Zaretskii <eliz@gnu.org>
parents: 42439
diff changeset
1100 do
cbcc456b9a76 (socket_connection): Move the code to resolve the POP
Eli Zaretskii <eliz@gnu.org>
parents: 42439
diff changeset
1101 {
cbcc456b9a76 (socket_connection): Move the code to resolve the POP
Eli Zaretskii <eliz@gnu.org>
parents: 42439
diff changeset
1102 hostent = gethostbyname (host);
cbcc456b9a76 (socket_connection): Move the code to resolve the POP
Eli Zaretskii <eliz@gnu.org>
parents: 42439
diff changeset
1103 try_count++;
cbcc456b9a76 (socket_connection): Move the code to resolve the POP
Eli Zaretskii <eliz@gnu.org>
parents: 42439
diff changeset
1104 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
1105 {
cbcc456b9a76 (socket_connection): Move the code to resolve the POP
Eli Zaretskii <eliz@gnu.org>
parents: 42439
diff changeset
1106 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
1107 return (-1);
cbcc456b9a76 (socket_connection): Move the code to resolve the POP
Eli Zaretskii <eliz@gnu.org>
parents: 42439
diff changeset
1108 }
cbcc456b9a76 (socket_connection): Move the code to resolve the POP
Eli Zaretskii <eliz@gnu.org>
parents: 42439
diff changeset
1109 } while (! hostent);
cbcc456b9a76 (socket_connection): Move the code to resolve the POP
Eli Zaretskii <eliz@gnu.org>
parents: 42439
diff changeset
1110
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1111 while (*hostent->h_addr_list)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1112 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1113 bcopy (*hostent->h_addr_list, (char *) &addr.sin_addr,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1114 hostent->h_length);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1115 if (! connect (sock, (struct sockaddr *) &addr, sizeof (addr)))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1116 break;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1117 hostent->h_addr_list++;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1118 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1119
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1120 #define CONNECT_ERROR "Could not connect to POP server: "
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 if (! *hostent->h_addr_list)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1123 {
15108
442458addd50 (SEND, RECV): Renamed from send, recv.
Richard M. Stallman <rms@gnu.org>
parents: 15102
diff changeset
1124 CLOSESOCKET (sock);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1125 strcpy (pop_error, CONNECT_ERROR);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1126 strncat (pop_error, strerror (errno),
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1127 ERROR_MAX - sizeof (CONNECT_ERROR));
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1128 return (-1);
42439
d8a417105504 Remove unnecessary whitespaces.
Pavel Janík <Pavel@Janik.cz>
parents: 42412
diff changeset
1129
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1130 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1131
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1132 #ifdef KERBEROS
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1133 #define KRB_ERROR "Kerberos error connecting to POP server: "
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1134 if (! (flags & POP_NO_KERBEROS))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1135 {
19018
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1136 #ifdef KERBEROS5
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1137 if ((rem = krb5_init_context (&kcontext)))
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1138 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1139 krb5error:
19018
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1140 if (auth_context)
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1141 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
1142 if (kcontext)
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1143 krb5_free_context (kcontext);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1144 strcpy (pop_error, KRB_ERROR);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1145 strncat (pop_error, error_message (rem),
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1146 ERROR_MAX - sizeof(KRB_ERROR));
15108
442458addd50 (SEND, RECV): Renamed from send, recv.
Richard M. Stallman <rms@gnu.org>
parents: 15102
diff changeset
1147 CLOSESOCKET (sock);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1148 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1149 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1150
19018
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1151 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
1152 goto krb5error;
42439
d8a417105504 Remove unnecessary whitespaces.
Pavel Janík <Pavel@Janik.cz>
parents: 42412
diff changeset
1153
19018
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1154 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
1155 goto krb5error;
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1156
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1157 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
1158 goto krb5error;
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1159
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1160 for (cp = hostent->h_name; *cp; cp++)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1161 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1162 if (isupper (*cp))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1163 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1164 *cp = tolower (*cp);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1165 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1166 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1167
19018
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1168 if (rem = krb5_sname_to_principal (kcontext, hostent->h_name,
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1169 POP_SERVICE, FALSE, &server))
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1170 goto krb5error;
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1171
19018
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1172 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
1173 (krb5_pointer) &sock, "KPOPV1.0", client, server,
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1174 AP_OPTS_MUTUAL_REQUIRED,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1175 0, /* no checksum */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1176 0, /* no creds, use ccache instead */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1177 ccdef,
19018
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1178 &err_ret,
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1179 0, /* don't need subsession key */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1180 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
1181 krb5_free_principal (kcontext, server);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1182 if (rem)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1183 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1184 if (err_ret && err_ret->text.length)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1185 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1186 strcpy (pop_error, KRB_ERROR);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1187 strncat (pop_error, error_message (rem),
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1188 ERROR_MAX - sizeof (KRB_ERROR));
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1189 strncat (pop_error, " [server says '",
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1190 ERROR_MAX - strlen (pop_error) - 1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1191 strncat (pop_error, err_ret->text.data,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1192 min (ERROR_MAX - strlen (pop_error) - 1,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1193 err_ret->text.length));
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1194 strncat (pop_error, "']",
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1195 ERROR_MAX - strlen (pop_error) - 1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1196 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1197 else
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1198 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1199 strcpy (pop_error, KRB_ERROR);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1200 strncat (pop_error, error_message (rem),
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1201 ERROR_MAX - sizeof (KRB_ERROR));
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 if (err_ret)
19018
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1204 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
1205 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
1206 krb5_free_context (kcontext);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1207
15108
442458addd50 (SEND, RECV): Renamed from send, recv.
Richard M. Stallman <rms@gnu.org>
parents: 15102
diff changeset
1208 CLOSESOCKET (sock);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1209 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1210 }
42439
d8a417105504 Remove unnecessary whitespaces.
Pavel Janík <Pavel@Janik.cz>
parents: 42412
diff changeset
1211 #else /* ! KERBEROS5 */
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1212 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
1213 realhost = strdup (hostent->h_name);
a12b8815bcf0 gethostbyname() may return a pointer to static data, which is
Charles Hannum <mycroft@gnu.org>
parents: 15934
diff changeset
1214 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
1215 (char *) krb_realmofhost (realhost),
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1216 (unsigned long) 0, &msg_data, &cred, schedule,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1217 (struct sockaddr_in *) 0,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1218 (struct sockaddr_in *) 0,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1219 "KPOPV0.1");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1220 free ((char *) ticket);
16697
83946dc6f4e7 (socket_connection): Free realhost after using it.
Richard M. Stallman <rms@gnu.org>
parents: 16603
diff changeset
1221 free (realhost);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1222 if (rem != KSUCCESS)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1223 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1224 strcpy (pop_error, KRB_ERROR);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1225 strncat (pop_error, krb_err_txt[rem],
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1226 ERROR_MAX - sizeof (KRB_ERROR));
15108
442458addd50 (SEND, RECV): Renamed from send, recv.
Richard M. Stallman <rms@gnu.org>
parents: 15102
diff changeset
1227 CLOSESOCKET (sock);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1228 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1229 }
19018
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1230 #endif /* KERBEROS5 */
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1231 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1232 #endif /* KERBEROS */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1233
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1234 return (sock);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1235 } /* socket_connection */
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 /*
21295
f399e51d6d11 (pop_getline): Renamed from getline.
Richard M. Stallman <rms@gnu.org>
parents: 20418
diff changeset
1238 * Function: pop_getline
9158
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 * Purpose: Get a line of text from the connection and return a
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1241 * pointer to it. The carriage return and linefeed at the end of
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1242 * the line are stripped, but periods at the beginnings of lines
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1243 * are NOT dealt with in any special way.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1244 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1245 * Arguments:
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1246 * server The server from which to get the line of text.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1247 *
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1248 * 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
1249 * 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
1250 * 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
1251 * 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
1252 * case of error, an error message is copied into pop_error.
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1253 *
21295
f399e51d6d11 (pop_getline): Renamed from getline.
Richard M. Stallman <rms@gnu.org>
parents: 20418
diff changeset
1254 * 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
1255 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1256 * Side effects: Closes the connection on error.
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1257 *
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1258 * THE RETURNED LINE MAY CONTAIN EMBEDDED NULLS!
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1259 */
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1260 static int
21295
f399e51d6d11 (pop_getline): Renamed from getline.
Richard M. Stallman <rms@gnu.org>
parents: 20418
diff changeset
1261 pop_getline (server, line)
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1262 popserver server;
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1263 char **line;
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1264 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1265 #define GETLINE_ERROR "Error reading from server: "
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1266
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1267 int ret;
9674
e5a897cf215d (getline): When a search of already-read input for CRLF
Richard M. Stallman <rms@gnu.org>
parents: 9613
diff changeset
1268 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
1269
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1270 if (server->data)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1271 {
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1272 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
1273 server->data);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1274 if (cp)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1275 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1276 int found;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1277 int data_used;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1278
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1279 found = server->buffer_index;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1280 data_used = (cp + 2) - server->buffer - found;
42439
d8a417105504 Remove unnecessary whitespaces.
Pavel Janík <Pavel@Janik.cz>
parents: 42412
diff changeset
1281
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1282 *cp = '\0'; /* terminate the string to be returned */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1283 server->data -= data_used;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1284 server->buffer_index += data_used;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1285
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1286 if (pop_debug)
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1287 /* Embedded nulls will truncate this output prematurely,
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1288 but that's OK because it's just for debugging anyway. */
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1289 fprintf (stderr, "<<< %s\n", server->buffer + found);
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1290 *line = server->buffer + found;
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1291 return (data_used - 2);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1292 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1293 else
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1294 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1295 bcopy (server->buffer + server->buffer_index,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1296 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
1297 /* 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
1298 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
1299 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
1300 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
1301 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
1302 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
1303 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
1304 search_offset = server->data - 1;
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1305 server->buffer_index = 0;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1306 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1307 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1308 else
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1309 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1310 server->buffer_index = 0;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1311 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1312
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1313 while (1)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1314 {
22236
bfaacbee089a Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 21397
diff changeset
1315 /* 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
1316 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
1317 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
1318 if (server->data == server->buffer_size - 1)
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1319 {
22236
bfaacbee089a Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 21397
diff changeset
1320 server->buffer_size += GETLINE_INCR;
bfaacbee089a Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 21397
diff changeset
1321 server->buffer = (char *)realloc (server->buffer, server->buffer_size);
bfaacbee089a Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 21397
diff changeset
1322 if (! server->buffer)
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1323 {
22236
bfaacbee089a Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 21397
diff changeset
1324 strcpy (pop_error, "Out of memory in pop_getline");
bfaacbee089a Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 21397
diff changeset
1325 pop_trash (server);
bfaacbee089a Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 21397
diff changeset
1326 return (-1);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1327 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1328 }
22236
bfaacbee089a Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 21397
diff changeset
1329 ret = RECV (server->file, server->buffer + server->data,
bfaacbee089a Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 21397
diff changeset
1330 server->buffer_size - server->data - 1, 0);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1331 if (ret < 0)
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 strcpy (pop_error, GETLINE_ERROR);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1334 strncat (pop_error, strerror (errno),
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1335 ERROR_MAX - sizeof (GETLINE_ERROR));
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1336 pop_trash (server);
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1337 return (-1);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1338 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1339 else if (ret == 0)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1340 {
21295
f399e51d6d11 (pop_getline): Renamed from getline.
Richard M. Stallman <rms@gnu.org>
parents: 20418
diff changeset
1341 strcpy (pop_error, "Unexpected EOF from server in pop_getline");
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1342 pop_trash (server);
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1343 return (-1);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1344 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1345 else
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1346 {
9591
0774e217e8aa Don't declare malloc, realloc, free.
Richard M. Stallman <rms@gnu.org>
parents: 9158
diff changeset
1347 char *cp;
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1348 server->data += ret;
9591
0774e217e8aa Don't declare malloc, realloc, free.
Richard M. Stallman <rms@gnu.org>
parents: 9158
diff changeset
1349 server->buffer[server->data] = '\0';
42439
d8a417105504 Remove unnecessary whitespaces.
Pavel Janík <Pavel@Janik.cz>
parents: 42412
diff changeset
1350
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1351 cp = find_crlf (server->buffer + search_offset,
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1352 server->data - search_offset);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1353 if (cp)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1354 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1355 int data_used = (cp + 2) - server->buffer;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1356 *cp = '\0';
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1357 server->data -= data_used;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1358 server->buffer_index = data_used;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1359
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1360 if (pop_debug)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1361 fprintf (stderr, "<<< %s\n", server->buffer);
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1362 *line = server->buffer;
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1363 return (data_used - 2);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1364 }
17683
975d093d45fb (getline): Don't miss CRLF pairs when the CR and LF are
Richard M. Stallman <rms@gnu.org>
parents: 16697
diff changeset
1365 /* 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
1366 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
1367 search_offset += ret - 1;
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1368 }
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
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1371 /* NOTREACHED */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1372 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1373
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1374 /*
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1375 * Function: sendline
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1376 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1377 * 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
1378 * passed into this function should NOT have the carriage return
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1379 * and linefeed on the end of it. Periods at beginnings of lines
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1380 * will NOT be treated specially by this function.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1381 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1382 * Arguments:
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1383 * server The server to which to send the text.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1384 * line The line of text to send.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1385 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1386 * Return value: Upon successful completion, a value of 0 will be
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1387 * returned. Otherwise, a non-zero value will be returned, and
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1388 * an error will be copied into pop_error.
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 * Side effects: Closes the connection on error.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1391 */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1392 static int
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1393 sendline (server, line)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1394 popserver server;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1395 char *line;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1396 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1397 #define SENDLINE_ERROR "Error writing to POP server: "
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1398 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
1399 char *buf;
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1400
64293
0238a53b950b Don't include des.h (or variants thereof); krb.h will do it.
Ken Raeburn <raeburn@raeburn.org>
parents: 64083
diff changeset
1401 /* 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
1402 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
1403 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
1404 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
1405 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
1406 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
1407 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
1408 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
1409
0238a53b950b Don't include des.h (or variants thereof); krb.h will do it.
Ken Raeburn <raeburn@raeburn.org>
parents: 64083
diff changeset
1410 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
1411 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
1412 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
1413 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
1414 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
1415 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
1416 ret = fullwrite (server->file, buf, strlen (buf));
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1417
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1418 if (ret < 0)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1419 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1420 pop_trash (server);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1421 strcpy (pop_error, SENDLINE_ERROR);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1422 strncat (pop_error, strerror (errno),
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1423 ERROR_MAX - sizeof (SENDLINE_ERROR));
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1424 return (ret);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1425 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1426
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1427 if (pop_debug)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1428 fprintf (stderr, ">>> %s\n", line);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1429
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1430 return (0);
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
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1433 /*
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1434 * Procedure: fullwrite
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1435 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1436 * Purpose: Just like write, but keeps trying until the entire string
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1437 * has been written.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1438 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1439 * Return value: Same as write. Pop_error is not set.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1440 */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1441 static int
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1442 fullwrite (fd, buf, nbytes)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1443 int fd;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1444 char *buf;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1445 int nbytes;
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 char *cp;
20204
44f91b648e03 (fullwrite): Get rid of an extra call to write. Problem
Karl Heuer <kwzh@gnu.org>
parents: 19978
diff changeset
1448 int ret = 0;
9158
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 cp = buf;
20204
44f91b648e03 (fullwrite): Get rid of an extra call to write. Problem
Karl Heuer <kwzh@gnu.org>
parents: 19978
diff changeset
1451 while (nbytes && ((ret = SEND (fd, cp, nbytes, 0)) > 0))
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1452 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1453 cp += ret;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1454 nbytes -= ret;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1455 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1456
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1457 return (ret);
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
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1460 /*
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1461 * Procedure getok
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 * Purpose: Reads a line from the server. If the return indicator is
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1464 * positive, return with a zero exit status. If not, return with
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1465 * a negative exit status.
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 * Arguments:
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1468 * server The server to read from.
42439
d8a417105504 Remove unnecessary whitespaces.
Pavel Janík <Pavel@Janik.cz>
parents: 42412
diff changeset
1469 *
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1470 * 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
1471 *
14036
621a575db6f7 Comment fixes.
Karl Heuer <kwzh@gnu.org>
parents: 9674
diff changeset
1472 * Side effects: On failure, may make the connection unusable.
9158
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 static int
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1475 getok (server)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1476 popserver server;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1477 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1478 char *fromline;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1479
21295
f399e51d6d11 (pop_getline): Renamed from getline.
Richard M. Stallman <rms@gnu.org>
parents: 20418
diff changeset
1480 if (pop_getline (server, &fromline) < 0)
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1481 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1482 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1483 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1484
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1485 if (! strncmp (fromline, "+OK", 3))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1486 return (0);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1487 else if (! strncmp (fromline, "-ERR", 4))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1488 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1489 strncpy (pop_error, fromline, ERROR_MAX);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1490 pop_error[ERROR_MAX-1] = '\0';
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1491 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1492 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1493 else
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 strcpy (pop_error,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1496 "Unexpected response from server; expecting +OK or -ERR");
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 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1499 }
42439
d8a417105504 Remove unnecessary whitespaces.
Pavel Janík <Pavel@Janik.cz>
parents: 42412
diff changeset
1500 }
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1501
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1502 #if 0
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 * Function: gettermination
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1505 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1506 * Purpose: Gets the next line and verifies that it is a termination
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1507 * line (nothing but a dot).
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 * 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
1510 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1511 * Side effects: Closes the connection on error.
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 static int
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1514 gettermination (server)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1515 popserver server;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1516 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1517 char *fromserver;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1518
21295
f399e51d6d11 (pop_getline): Renamed from getline.
Richard M. Stallman <rms@gnu.org>
parents: 20418
diff changeset
1519 if (pop_getline (server, &fromserver) < 0)
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1520 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1521
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1522 if (strcmp (fromserver, "."))
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 strcpy (pop_error,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1525 "Unexpected response from server in gettermination");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1526 pop_trash (server);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1527 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1528 }
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 return (0);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1531 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1532 #endif
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 /*
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1535 * Function pop_close
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 * Purpose: Close a pop connection, sending a "RSET" command to try to
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1538 * preserve any changes that were made and a "QUIT" command to
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1539 * try to get the server to quit, but ignoring any responses that
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1540 * are received.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1541 *
14036
621a575db6f7 Comment fixes.
Karl Heuer <kwzh@gnu.org>
parents: 9674
diff changeset
1542 * Side effects: The server is unusable after this function returns.
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1543 * Changes made to the maildrop since the session was started (or
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1544 * since the last pop_reset) may be lost.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1545 */
42439
d8a417105504 Remove unnecessary whitespaces.
Pavel Janík <Pavel@Janik.cz>
parents: 42412
diff changeset
1546 void
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1547 pop_close (server)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1548 popserver server;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1549 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1550 pop_trash (server);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1551 free ((char *) server);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1552
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1553 return;
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
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1556 /*
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1557 * Function: pop_trash
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 * Purpose: Like pop_close or pop_quit, but doesn't deallocate the
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1560 * memory associated with the server. It is legal to call
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1561 * pop_close or pop_quit after this function has been called.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1562 */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1563 static void
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1564 pop_trash (server)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1565 popserver server;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1566 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1567 if (server->file >= 0)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1568 {
15102
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
1569 /* 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
1570 if (server->trash_started)
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
1571 return;
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
1572 server->trash_started = 1;
15108
442458addd50 (SEND, RECV): Renamed from send, recv.
Richard M. Stallman <rms@gnu.org>
parents: 15102
diff changeset
1573
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1574 sendline (server, "RSET");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1575 sendline (server, "QUIT");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1576
15108
442458addd50 (SEND, RECV): Renamed from send, recv.
Richard M. Stallman <rms@gnu.org>
parents: 15102
diff changeset
1577 CLOSESOCKET (server->file);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1578 server->file = -1;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1579 if (server->buffer)
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 free (server->buffer);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1582 server->buffer = 0;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1583 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1584 }
15102
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
1585
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
1586 #ifdef WINDOWSNT
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
1587 if (have_winsock)
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
1588 WSACleanup ();
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
1589 #endif
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1590 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1591
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1592 /* 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
1593 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
1594 null, or 0 if it does not contain one. */
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1595
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1596 static char *
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1597 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
1598 char *in_string;
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1599 int len;
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1600 {
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1601 while (len--)
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1602 {
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1603 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
1604 {
530b4511e5b3 Only include ../src/config.h if HAVE_CONFIG_H is
Richard M. Stallman <rms@gnu.org>
parents: 9600
diff changeset
1605 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
1606 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
1607 }
530b4511e5b3 Only include ../src/config.h if HAVE_CONFIG_H is
Richard M. Stallman <rms@gnu.org>
parents: 9600
diff changeset
1608 else
530b4511e5b3 Only include ../src/config.h if HAVE_CONFIG_H is
Richard M. Stallman <rms@gnu.org>
parents: 9600
diff changeset
1609 in_string++;
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1610 }
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1611 return (0);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1612 }
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 #endif /* MAIL_USE_POP */
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 49600
diff changeset
1615
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 49600
diff changeset
1616 /* arch-tag: ceb37041-b7ad-49a8-a63d-286618b8367d
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 49600
diff changeset
1617 (do not change this comment) */