annotate lib-src/pop.c @ 39625:e441240482b2

(add-change-log-entry): Skip copyright notice and copying permission notice at start of file, if any. Make use of terms "entry" and "item" accord with Emacs manual. Simplify the logic for moving point while entering or creating an entry and then an item. (add-change-log-entry-other-window): Doc fix.
author Richard M. Stallman <rms@gnu.org>
date Sat, 06 Oct 2001 02:32:54 +0000
parents e7d9947be23b
children 83c1951257f1
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
26083
134b57acef68 Add support for large files. Merge glibc 2.1.2.
Paul Eggert <eggert@twinsun.com>
parents: 25976
diff changeset
2 Copyright (c) 1991, 1993, 1996, 1997, 1999 Free Software Foundation, Inc.
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3 Written by Jonathan Kamens, jik@security.ov.com.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5 This file is part of GNU Emacs.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7 GNU Emacs is free software; you can redistribute it and/or modify
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8 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
9 the Free Software Foundation; either version 2, or (at your option)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
10 any later version.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
11
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
12 GNU Emacs is distributed in the hope that it will be useful,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15 GNU General Public License for more details.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
18 along with GNU Emacs; see the file COPYING. If not, write to
14186
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
20 Boston, MA 02111-1307, USA. */
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21
9613
530b4511e5b3 Only include ../src/config.h if HAVE_CONFIG_H is
Richard M. Stallman <rms@gnu.org>
parents: 9600
diff changeset
22 #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
23 #define NO_SHORTNAMES /* Tell config not to load remap.h */
9592
132798b0352b Include ../src/config.h.
Richard M. Stallman <rms@gnu.org>
parents: 9591
diff changeset
24 #include <../src/config.h>
9613
530b4511e5b3 Only include ../src/config.h if HAVE_CONFIG_H is
Richard M. Stallman <rms@gnu.org>
parents: 9600
diff changeset
25 #else
530b4511e5b3 Only include ../src/config.h if HAVE_CONFIG_H is
Richard M. Stallman <rms@gnu.org>
parents: 9600
diff changeset
26 #define MAIL_USE_POP
530b4511e5b3 Only include ../src/config.h if HAVE_CONFIG_H is
Richard M. Stallman <rms@gnu.org>
parents: 9600
diff changeset
27 #endif
9592
132798b0352b Include ../src/config.h.
Richard M. Stallman <rms@gnu.org>
parents: 9591
diff changeset
28
9613
530b4511e5b3 Only include ../src/config.h if HAVE_CONFIG_H is
Richard M. Stallman <rms@gnu.org>
parents: 9600
diff changeset
29 #ifdef MAIL_USE_POP
530b4511e5b3 Only include ../src/config.h if HAVE_CONFIG_H is
Richard M. Stallman <rms@gnu.org>
parents: 9600
diff changeset
30
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
31 #include <sys/types.h>
15102
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
32 #ifdef WINDOWSNT
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
33 #include "ntlib.h"
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
34 #include <winsock.h>
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
35 #undef SOCKET_ERROR
15108
442458addd50 (SEND, RECV): Renamed from send, recv.
Richard M. Stallman <rms@gnu.org>
parents: 15102
diff changeset
36 #define RECV(s,buf,len,flags) recv(s,buf,len,flags)
442458addd50 (SEND, RECV): Renamed from send, recv.
Richard M. Stallman <rms@gnu.org>
parents: 15102
diff changeset
37 #define SEND(s,buf,len,flags) send(s,buf,len,flags)
442458addd50 (SEND, RECV): Renamed from send, recv.
Richard M. Stallman <rms@gnu.org>
parents: 15102
diff changeset
38 #define CLOSESOCKET(s) closesocket(s)
15102
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
39 #else
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
40 #include <netinet/in.h>
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
41 #include <sys/socket.h>
15108
442458addd50 (SEND, RECV): Renamed from send, recv.
Richard M. Stallman <rms@gnu.org>
parents: 15102
diff changeset
42 #define RECV(s,buf,len,flags) read(s,buf,len)
442458addd50 (SEND, RECV): Renamed from send, recv.
Richard M. Stallman <rms@gnu.org>
parents: 15102
diff changeset
43 #define SEND(s,buf,len,flags) write(s,buf,len)
442458addd50 (SEND, RECV): Renamed from send, recv.
Richard M. Stallman <rms@gnu.org>
parents: 15102
diff changeset
44 #define CLOSESOCKET(s) close(s)
15102
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
45 #endif
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
46 #include <pop.h>
9600
f0d3266e07d7 Fix mismatch in conditionals.
Richard M. Stallman <rms@gnu.org>
parents: 9594
diff changeset
47
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
48 #ifdef sun
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
49 #include <malloc.h>
9613
530b4511e5b3 Only include ../src/config.h if HAVE_CONFIG_H is
Richard M. Stallman <rms@gnu.org>
parents: 9600
diff changeset
50 #endif /* sun */
9600
f0d3266e07d7 Fix mismatch in conditionals.
Richard M. Stallman <rms@gnu.org>
parents: 9594
diff changeset
51
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
52 #ifdef HESIOD
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
53 #include <hesiod.h>
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
54 /*
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
55 * It really shouldn't be necessary to put this declaration here, but
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
56 * the version of hesiod.h that Athena has installed in release 7.2
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
57 * doesn't declare this function; I don't know if the 7.3 version of
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
58 * hesiod.h does.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
59 */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
60 extern struct servent *hes_getservbyname (/* char *, char * */);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
61 #endif
9600
f0d3266e07d7 Fix mismatch in conditionals.
Richard M. Stallman <rms@gnu.org>
parents: 9594
diff changeset
62
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
63 #include <pwd.h>
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
64 #include <netdb.h>
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
65 #include <errno.h>
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
66 #include <stdio.h>
19018
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
67 #ifdef STDC_HEADERS
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
68 #include <string.h>
19978
83050d7e3f64 Use system header files instead of declaring C-library
Karl Heuer <kwzh@gnu.org>
parents: 19018
diff changeset
69 #define index strchr
83050d7e3f64 Use system header files instead of declaring C-library
Karl Heuer <kwzh@gnu.org>
parents: 19018
diff changeset
70 #endif
83050d7e3f64 Use system header files instead of declaring C-library
Karl Heuer <kwzh@gnu.org>
parents: 19018
diff changeset
71 #ifdef HAVE_UNISTD_H
83050d7e3f64 Use system header files instead of declaring C-library
Karl Heuer <kwzh@gnu.org>
parents: 19018
diff changeset
72 #include <unistd.h>
19018
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
73 #endif
9600
f0d3266e07d7 Fix mismatch in conditionals.
Richard M. Stallman <rms@gnu.org>
parents: 9594
diff changeset
74
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
75 #ifdef KERBEROS
19018
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
76 # ifdef HAVE_KRB5_H
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
77 # include <krb5.h>
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
78 # endif
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
79 # ifdef HAVE_DES_H
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
80 # include <des.h>
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
81 # else
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
82 # ifdef HAVE_KERBEROSIV_DES_H
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
83 # include <kerberosIV/des.h>
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
84 # else
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
85 # ifdef HAVE_KERBEROS_DES_H
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
86 # include <kerberos/des.h>
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
87 # endif
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
88 # endif
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
89 # endif
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
90 # ifdef HAVE_KRB_H
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
91 # include <krb.h>
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
92 # else
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
93 # ifdef HAVE_KERBEROSIV_KRB_H
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
94 # include <kerberosIV/krb.h>
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
95 # else
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
96 # ifdef HAVE_KERBEROS_KRB_H
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
97 # include <kerberos/krb.h>
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
98 # endif
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
99 # endif
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
100 # endif
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
101 # ifdef HAVE_COM_ERR_H
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
102 # include <com_err.h>
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
103 # endif
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
9613
530b4511e5b3 Only include ../src/config.h if HAVE_CONFIG_H is
Richard M. Stallman <rms@gnu.org>
parents: 9600
diff changeset
106 #ifdef KERBEROS
19018
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
107 #ifndef KERBEROS5
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
108 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
109 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
110 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
111 char * */);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
112 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
113 #endif /* ! KERBEROS5 */
9613
530b4511e5b3 Only include ../src/config.h if HAVE_CONFIG_H is
Richard M. Stallman <rms@gnu.org>
parents: 9600
diff changeset
114 #endif /* KERBEROS */
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
115
15102
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
116 #ifndef WINDOWSNT
9613
530b4511e5b3 Only include ../src/config.h if HAVE_CONFIG_H is
Richard M. Stallman <rms@gnu.org>
parents: 9600
diff changeset
117 #if !defined(HAVE_H_ERRNO) || !defined(HAVE_CONFIG_H)
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
118 extern int h_errno;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
119 #endif
15102
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
120 #endif
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
121
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
122 #ifndef _P
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
123 # ifdef __STDC__
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
124 # define _P(a) a
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
125 # else
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
126 # define _P(a) ()
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
127 # endif /* __STDC__ */
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
128 #endif /* ! __P */
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
129
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
130 static int socket_connection _P((char *, int));
21295
f399e51d6d11 (pop_getline): Renamed from getline.
Richard M. Stallman <rms@gnu.org>
parents: 20418
diff changeset
131 static int pop_getline _P((popserver, char **));
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
132 static int sendline _P((popserver, char *));
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
133 static int fullwrite _P((int, char *, int));
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
134 static int getok _P((popserver));
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
135 #if 0
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
136 static int gettermination _P((popserver));
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
137 #endif
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
138 static void pop_trash _P((popserver));
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
139 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
140
29047
71b1a76cd64a (ERROR_MAX): Increase to 160.
Dave Love <fx@gnu.org>
parents: 26083
diff changeset
141 #define ERROR_MAX 160 /* a pretty arbitrary size, but needs
29784
e7d9947be23b comment
Dave Love <fx@gnu.org>
parents: 29047
diff changeset
142 to be bigger than the original
e7d9947be23b comment
Dave Love <fx@gnu.org>
parents: 29047
diff changeset
143 value of 80 */
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
144 #define POP_PORT 110
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
145 #define KPOP_PORT 1109
15102
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
146 #define POP_SERVICE "pop3" /* we don't want the POP2 port! */
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
147 #ifdef KERBEROS
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
148 #define KPOP_SERVICE "kpop"
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
149 #endif
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
150
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
151 char pop_error[ERROR_MAX];
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
152 int pop_debug = 0;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
153
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
154 #ifndef min
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
155 #define min(a,b) (((a) < (b)) ? (a) : (b))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
156 #endif
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
157
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
158 /*
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
159 * Function: pop_open (char *host, char *username, char *password,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
160 * int flags)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
161 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
162 * Purpose: Establishes a connection with a post-office server, and
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
163 * completes the authorization portion of the session.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
164 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
165 * Arguments:
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
166 * host The server host with which the connection should be
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
167 * established. Optional. If omitted, internal
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
168 * heuristics will be used to determine the server host,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
169 * if possible.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
170 * username
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
171 * The username of the mail-drop to access. Optional.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
172 * If omitted, internal heuristics will be used to
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
173 * determine the username, if possible.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
174 * password
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
175 * The password to use for authorization. If omitted,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
176 * internal heuristics will be used to determine the
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
177 * password, if possible.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
178 * flags A bit mask containing flags controlling certain
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
179 * functions of the routine. Valid flags are defined in
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
180 * the file pop.h
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
181 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
182 * Return value: Upon successful establishment of a connection, a
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
183 * non-null popserver will be returned. Otherwise, null will be
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
184 * returned, and the string variable pop_error will contain an
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
185 * explanation of the error.
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 popserver
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
188 pop_open (host, username, password, flags)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
189 char *host;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
190 char *username;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
191 char *password;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
192 int flags;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
193 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
194 int sock;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
195 popserver server;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
196
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
197 /* Determine the user name */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
198 if (! username)
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 = getenv ("USER");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
201 if (! (username && *username))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
202 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
203 username = getlogin ();
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
204 if (! (username && *username))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
205 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
206 struct passwd *passwd;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
207 passwd = getpwuid (getuid ());
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
208 if (passwd && passwd->pw_name && *passwd->pw_name)
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 username = passwd->pw_name;
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 else
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 strcpy (pop_error, "Could not determine username");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
215 return (0);
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 }
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
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
221 /*
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
222 * Determine the mail host.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
223 */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
224
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
225 if (! host)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
226 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
227 host = getenv ("MAILHOST");
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
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
230 #ifdef HESIOD
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
231 if ((! host) && (! (flags & POP_NO_HESIOD)))
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 struct hes_postoffice *office;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
234 office = hes_getmailhost (username);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
235 if (office && office->po_type && (! strcmp (office->po_type, "POP"))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
236 && office->po_name && *office->po_name && office->po_host
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
237 && *office->po_host)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
238 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
239 host = office->po_host;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
240 username = office->po_name;
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 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
243 #endif
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
244
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
245 #ifdef MAILHOST
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
246 if (! host)
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 host = MAILHOST;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
249 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
250 #endif
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
251
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
252 if (! host)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
253 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
254 strcpy (pop_error, "Could not determine POP server");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
255 return (0);
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
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
258 /* Determine the password */
22236
bfaacbee089a Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 21397
diff changeset
259 #ifdef KERBEROS
bfaacbee089a Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 21397
diff changeset
260 #define DONT_NEED_PASSWORD (! (flags & POP_NO_KERBEROS))
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
261 #else
22236
bfaacbee089a Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 21397
diff changeset
262 #define DONT_NEED_PASSWORD 0
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
263 #endif
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
264
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
265 if ((! password) && (! DONT_NEED_PASSWORD))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
266 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
267 if (! (flags & POP_NO_GETPASS))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
268 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
269 password = getpass ("Enter POP password:");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
270 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
271 if (! password)
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 strcpy (pop_error, "Could not determine POP password");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
274 return (0);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
275 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
276 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
277 if (password)
22236
bfaacbee089a Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 21397
diff changeset
278 flags |= POP_NO_KERBEROS;
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
279 else
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
280 password = username;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
281
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
282 sock = socket_connection (host, flags);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
283 if (sock == -1)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
284 return (0);
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 server = (popserver) malloc (sizeof (struct _popserver));
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
287 if (! server)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
288 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
289 strcpy (pop_error, "Out of memory in pop_open");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
290 return (0);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
291 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
292 server->buffer = (char *) malloc (GETLINE_MIN);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
293 if (! server->buffer)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
294 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
295 strcpy (pop_error, "Out of memory in pop_open");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
296 free ((char *) server);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
297 return (0);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
298 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
299
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
300 server->file = sock;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
301 server->data = 0;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
302 server->buffer_index = 0;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
303 server->buffer_size = GETLINE_MIN;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
304 server->in_multi = 0;
15102
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
305 server->trash_started = 0;
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
306
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
307 if (getok (server))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
308 return (0);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
309
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
310 /*
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
311 * I really shouldn't use the pop_error variable like this, but....
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 (strlen (username) > ERROR_MAX - 6)
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 pop_close (server);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
316 strcpy (pop_error,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
317 "Username too long; recompile pop.c with larger ERROR_MAX");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
318 return (0);
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 sprintf (pop_error, "USER %s", username);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
321
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
322 if (sendline (server, pop_error) || getok (server))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
323 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
324 return (0);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
325 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
326
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
327 if (strlen (password) > ERROR_MAX - 6)
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 pop_close (server);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
330 strcpy (pop_error,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
331 "Password too long; recompile pop.c with larger ERROR_MAX");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
332 return (0);
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 sprintf (pop_error, "PASS %s", password);
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 if (sendline (server, pop_error) || getok (server))
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 return (0);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
339 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
340
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
341 return (server);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
342 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
343
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
344 /*
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
345 * Function: pop_stat
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
346 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
347 * Purpose: Issue the STAT command to the server and return (in the
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
348 * value parameters) the number of messages in the maildrop and
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
349 * the total size of the maildrop.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
350 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
351 * 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
352 * in failure.
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 * Side effects: On failure, may make further operations on the
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
355 * connection impossible.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
356 */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
357 int
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
358 pop_stat (server, count, size)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
359 popserver server;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
360 int *count;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
361 int *size;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
362 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
363 char *fromserver;
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 (server->in_multi)
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 strcpy (pop_error, "In multi-line query in pop_stat");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
368 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
369 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
370
21295
f399e51d6d11 (pop_getline): Renamed from getline.
Richard M. Stallman <rms@gnu.org>
parents: 20418
diff changeset
371 if (sendline (server, "STAT") || (pop_getline (server, &fromserver) < 0))
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
372 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
373
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
374 if (strncmp (fromserver, "+OK ", 4))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
375 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
376 if (0 == strncmp (fromserver, "-ERR", 4))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
377 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
378 strncpy (pop_error, fromserver, ERROR_MAX);
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 else
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
381 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
382 strcpy (pop_error,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
383 "Unexpected response from POP server in pop_stat");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
384 pop_trash (server);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
385 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
386 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
387 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
388
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
389 *count = atoi (&fromserver[4]);
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 fromserver = index (&fromserver[4], ' ');
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
392 if (! fromserver)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
393 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
394 strcpy (pop_error,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
395 "Badly formatted response from server in pop_stat");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
396 pop_trash (server);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
397 return (-1);
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
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
400 *size = atoi (fromserver + 1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
401
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
402 return (0);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
403 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
404
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
405 /*
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
406 * Function: pop_list
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
407 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
408 * Purpose: Performs the POP "list" command and returns (in value
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
409 * parameters) two malloc'd zero-terminated arrays -- one of
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
410 * message IDs, and a parallel one of sizes.
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 * Arguments:
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
413 * server The pop connection to talk to.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
414 * message The number of the one message about which to get
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
415 * information, or 0 to get information about all
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
416 * messages.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
417 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
418 * 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
419 * failure.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
420 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
421 * Side effects: On failure, may make further operations on the
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
422 * connection impossible.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
423 */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
424 int
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
425 pop_list (server, message, IDs, sizes)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
426 popserver server;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
427 int message;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
428 int **IDs;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
429 int **sizes;
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 int how_many, i;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
432 char *fromserver;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
433
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
434 if (server->in_multi)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
435 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
436 strcpy (pop_error, "In multi-line query in pop_list");
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 }
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 if (message)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
441 how_many = 1;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
442 else
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
443 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
444 int count, size;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
445 if (pop_stat (server, &count, &size))
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 how_many = count;
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
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
450 *IDs = (int *) malloc ((how_many + 1) * sizeof (int));
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
451 *sizes = (int *) malloc ((how_many + 1) * sizeof (int));
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
452 if (! (*IDs && *sizes))
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 strcpy (pop_error, "Out of memory in pop_list");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
455 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
456 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
457
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
458 if (message)
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 sprintf (pop_error, "LIST %d", message);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
461 if (sendline (server, pop_error))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
462 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
463 free ((char *) *IDs);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
464 free ((char *) *sizes);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
465 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
466 }
21295
f399e51d6d11 (pop_getline): Renamed from getline.
Richard M. Stallman <rms@gnu.org>
parents: 20418
diff changeset
467 if (pop_getline (server, &fromserver) < 0)
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
468 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
469 free ((char *) *IDs);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
470 free ((char *) *sizes);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
471 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
472 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
473 if (strncmp (fromserver, "+OK ", 4))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
474 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
475 if (! strncmp (fromserver, "-ERR", 4))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
476 strncpy (pop_error, fromserver, ERROR_MAX);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
477 else
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
478 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
479 strcpy (pop_error,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
480 "Unexpected response from server in pop_list");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
481 pop_trash (server);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
482 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
483 free ((char *) *IDs);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
484 free ((char *) *sizes);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
485 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
486 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
487 (*IDs)[0] = atoi (&fromserver[4]);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
488 fromserver = index (&fromserver[4], ' ');
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
489 if (! fromserver)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
490 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
491 strcpy (pop_error,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
492 "Badly formatted response from server in pop_list");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
493 pop_trash (server);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
494 free ((char *) *IDs);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
495 free ((char *) *sizes);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
496 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
497 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
498 (*sizes)[0] = atoi (fromserver);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
499 (*IDs)[1] = (*sizes)[1] = 0;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
500 return (0);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
501 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
502 else
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
503 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
504 if (pop_multi_first (server, "LIST", &fromserver))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
505 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
506 free ((char *) *IDs);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
507 free ((char *) *sizes);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
508 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
509 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
510 for (i = 0; i < how_many; i++)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
511 {
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
512 if (pop_multi_next (server, &fromserver) <= 0)
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
513 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
514 free ((char *) *IDs);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
515 free ((char *) *sizes);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
516 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
517 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
518 (*IDs)[i] = atoi (fromserver);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
519 fromserver = index (fromserver, ' ');
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
520 if (! fromserver)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
521 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
522 strcpy (pop_error,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
523 "Badly formatted response from server in pop_list");
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 pop_trash (server);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
527 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
528 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
529 (*sizes)[i] = atoi (fromserver);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
530 }
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
531 if (pop_multi_next (server, &fromserver) < 0)
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
532 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
533 free ((char *) *IDs);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
534 free ((char *) *sizes);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
535 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
536 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
537 else if (fromserver)
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 strcpy (pop_error,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
540 "Too many response lines from server in pop_list");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
541 free ((char *) *IDs);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
542 free ((char *) *sizes);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
543 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
544 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
545 (*IDs)[i] = (*sizes)[i] = 0;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
546 return (0);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
547 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
548 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
549
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
550 /*
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
551 * Function: pop_retrieve
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
552 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
553 * Purpose: Retrieve a specified message from the maildrop.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
554 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
555 * Arguments:
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
556 * server The server to retrieve from.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
557 * message The message number to retrieve.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
558 * markfrom
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
559 * If true, then mark the string "From " at the beginning
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
560 * of lines with '>'.
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
561 * 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
562 * message is assigned.
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
563 *
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
564 * 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
565 * 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
566 * with pop_error set.
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 * Side effects: May kill connection on error.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
569 */
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
570 int
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
571 pop_retrieve (server, message, markfrom, msg_buf)
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
572 popserver server;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
573 int message;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
574 int markfrom;
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
575 char **msg_buf;
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 int *IDs, *sizes, bufsize, fromcount = 0, cp = 0;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
578 char *ptr, *fromserver;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
579 int ret;
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 (server->in_multi)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
582 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
583 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
584 return (-1);
9158
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 if (pop_list (server, message, &IDs, &sizes))
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
588 return (-1);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
589
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
590 if (pop_retrieve_first (server, message, &fromserver))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
591 {
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
592 return (-1);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
593 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
594
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
595 /*
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
596 * The "5" below is an arbitrary constant -- I assume that if
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
597 * there are "From" lines in the text to be marked, there
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
598 * 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
599 * allocate more space for them below.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
600 */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
601 bufsize = sizes[0] + (markfrom ? 5 : 0);
14238
b55e97028105 (pop_retrieve, getline): Avoid type clashes.
Karl Heuer <kwzh@gnu.org>
parents: 14186
diff changeset
602 ptr = (char *)malloc (bufsize);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
603 free ((char *) IDs);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
604 free ((char *) sizes);
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 (! ptr)
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 strcpy (pop_error, "Out of memory in pop_retrieve");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
609 pop_retrieve_flush (server);
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
610 return (-1);
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
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
613 while ((ret = pop_retrieve_next (server, &fromserver)) >= 0)
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
614 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
615 if (! fromserver)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
616 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
617 ptr[cp] = '\0';
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
618 *msg_buf = ptr;
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
619 return (cp);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
620 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
621 if (markfrom && fromserver[0] == 'F' && fromserver[1] == 'r' &&
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
622 fromserver[2] == 'o' && fromserver[3] == 'm' &&
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
623 fromserver[4] == ' ')
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
624 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
625 if (++fromcount == 5)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
626 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
627 bufsize += 5;
14238
b55e97028105 (pop_retrieve, getline): Avoid type clashes.
Karl Heuer <kwzh@gnu.org>
parents: 14186
diff changeset
628 ptr = (char *)realloc (ptr, bufsize);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
629 if (! ptr)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
630 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
631 strcpy (pop_error, "Out of memory in pop_retrieve");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
632 pop_retrieve_flush (server);
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
633 return (-1);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
634 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
635 fromcount = 0;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
636 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
637 ptr[cp++] = '>';
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
638 }
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
639 bcopy (fromserver, &ptr[cp], ret);
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
640 cp += ret;
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
641 ptr[cp++] = '\n';
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
642 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
643
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
644 free (ptr);
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
645 return (-1);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
646 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
647
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
648 int
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
649 pop_retrieve_first (server, message, response)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
650 popserver server;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
651 int message;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
652 char **response;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
653 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
654 sprintf (pop_error, "RETR %d", message);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
655 return (pop_multi_first (server, pop_error, response));
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
656 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
657
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
658 /*
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
659 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
660 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
661 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
662 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
663 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
664 */
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
665
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
666 int
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
667 pop_retrieve_next (server, line)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
668 popserver server;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
669 char **line;
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 return (pop_multi_next (server, line));
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
672 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
673
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
674 int
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
675 pop_retrieve_flush (server)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
676 popserver server;
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 return (pop_multi_flush (server));
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
679 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
680
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
681 int
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
682 pop_top_first (server, message, lines, response)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
683 popserver server;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
684 int message, lines;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
685 char **response;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
686 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
687 sprintf (pop_error, "TOP %d %d", message, lines);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
688 return (pop_multi_first (server, pop_error, response));
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
689 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
690
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
691 /*
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
692 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
693 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
694 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
695 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
696 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
697 */
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
698
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
699 int
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
700 pop_top_next (server, line)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
701 popserver server;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
702 char **line;
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 return (pop_multi_next (server, line));
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
705 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
706
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
707 int
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
708 pop_top_flush (server)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
709 popserver server;
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 return (pop_multi_flush (server));
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
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
714 int
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
715 pop_multi_first (server, command, response)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
716 popserver server;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
717 char *command;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
718 char **response;
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 if (server->in_multi)
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 strcpy (pop_error,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
723 "Already in multi-line query in pop_multi_first");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
724 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
725 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
726
21295
f399e51d6d11 (pop_getline): Renamed from getline.
Richard M. Stallman <rms@gnu.org>
parents: 20418
diff changeset
727 if (sendline (server, command) || (pop_getline (server, response) < 0))
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
728 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
729 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
730 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
731
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
732 if (0 == strncmp (*response, "-ERR", 4))
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 strncpy (pop_error, *response, ERROR_MAX);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
735 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
736 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
737 else if (0 == strncmp (*response, "+OK", 3))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
738 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
739 for (*response += 3; **response == ' '; (*response)++) /* empty */;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
740 server->in_multi = 1;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
741 return (0);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
742 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
743 else
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
744 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
745 strcpy (pop_error,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
746 "Unexpected response from server in pop_multi_first");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
747 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
748 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
749 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
750
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
751 /*
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
752 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
753 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
754 (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
755 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
756 (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
757 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
758 0, LINE is set to null. */
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
759
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
760 int
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
761 pop_multi_next (server, line)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
762 popserver server;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
763 char **line;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
764 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
765 char *fromserver;
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
766 int ret;
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
767
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
768 if (! server->in_multi)
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 strcpy (pop_error, "Not in multi-line query in pop_multi_next");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
771 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
772 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
773
21295
f399e51d6d11 (pop_getline): Renamed from getline.
Richard M. Stallman <rms@gnu.org>
parents: 20418
diff changeset
774 if ((ret = pop_getline (server, &fromserver)) < 0)
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
775 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
776 return (-1);
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
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
779 if (fromserver[0] == '.')
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
780 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
781 if (! fromserver[1])
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 *line = 0;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
784 server->in_multi = 0;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
785 return (0);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
786 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
787 else
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 *line = fromserver + 1;
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
790 return (ret - 1);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
791 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
792 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
793 else
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 *line = fromserver;
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
796 return (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 }
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 int
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
801 pop_multi_flush (server)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
802 popserver server;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
803 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
804 char *line;
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
805 int ret;
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
806
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
807 if (! server->in_multi)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
808 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
809 return (0);
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
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
812 while ((ret = pop_multi_next (server, &line)))
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
813 {
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
814 if (ret < 0)
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
815 return (-1);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
816 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
817
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
818 return (0);
9158
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
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
821 /* Function: pop_delete
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 * Purpose: Delete a specified message.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
824 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
825 * Arguments:
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
826 * server Server from which to delete the message.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
827 * message Message to delete.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
828 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
829 * Return value: 0 on success, non-zero with error in pop_error
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
830 * otherwise.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
831 */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
832 int
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
833 pop_delete (server, message)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
834 popserver server;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
835 int message;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
836 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
837 if (server->in_multi)
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 strcpy (pop_error, "In multi-line query in pop_delete");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
840 return (-1);
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 sprintf (pop_error, "DELE %d", message);
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 if (sendline (server, pop_error) || getok (server))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
846 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
847
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
848 return (0);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
849 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
850
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
851 /*
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
852 * Function: pop_noop
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
853 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
854 * Purpose: Send a noop command to the server.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
855 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
856 * Argument:
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
857 * server The server to send to.
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 * Return value: 0 on success, non-zero with error in pop_error
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
860 * otherwise.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
861 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
862 * Side effects: Closes connection on error.
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 int
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
865 pop_noop (server)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
866 popserver server;
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 if (server->in_multi)
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 strcpy (pop_error, "In multi-line query in pop_noop");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
871 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
872 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
873
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
874 if (sendline (server, "NOOP") || getok (server))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
875 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
876
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
877 return (0);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
878 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
879
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
880 /*
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
881 * Function: pop_last
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 * Purpose: Find out the highest seen message from the server.
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 * Arguments:
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
886 * server The server.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
887 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
888 * Return value: If successful, the highest seen message, which is
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
889 * greater than or equal to 0. Otherwise, a negative number with
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
890 * the error explained in pop_error.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
891 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
892 * Side effects: Closes the connection on error.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
893 */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
894 int
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
895 pop_last (server)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
896 popserver server;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
897 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
898 char *fromserver;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
899
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
900 if (server->in_multi)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
901 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
902 strcpy (pop_error, "In multi-line query in pop_last");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
903 return (-1);
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
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
906 if (sendline (server, "LAST"))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
907 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
908
21295
f399e51d6d11 (pop_getline): Renamed from getline.
Richard M. Stallman <rms@gnu.org>
parents: 20418
diff changeset
909 if (pop_getline (server, &fromserver) < 0)
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
910 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
911
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
912 if (! strncmp (fromserver, "-ERR", 4))
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 strncpy (pop_error, fromserver, ERROR_MAX);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
915 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
916 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
917 else if (strncmp (fromserver, "+OK ", 4))
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 strcpy (pop_error, "Unexpected response from server in pop_last");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
920 pop_trash (server);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
921 return (-1);
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 else
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 return (atoi (&fromserver[4]));
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
926 }
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
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
929 /*
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
930 * Function: pop_reset
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
931 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
932 * Purpose: Reset the server to its initial connect state
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
933 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
934 * Arguments:
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
935 * server The 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 * Return value: 0 for success, non-0 with error in pop_error
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
938 * otherwise.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
939 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
940 * Side effects: Closes the connection on error.
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 int
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
943 pop_reset (server)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
944 popserver server;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
945 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
946 if (pop_retrieve_flush (server))
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 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
949 }
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 if (sendline (server, "RSET") || getok (server))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
952 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
953
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
954 return (0);
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
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
957 /*
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
958 * Function: pop_quit
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
959 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
960 * Purpose: Quit the connection to the server,
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 * Arguments:
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
963 * server The server to quit.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
964 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
965 * Return value: 0 for success, non-zero otherwise with error in
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
966 * pop_error.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
967 *
14036
621a575db6f7 Comment fixes.
Karl Heuer <kwzh@gnu.org>
parents: 9674
diff changeset
968 * Side Effects: The popserver passed in is unusable after this
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
969 * function is called, even if an error occurs.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
970 */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
971 int
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
972 pop_quit (server)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
973 popserver server;
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 int ret = 0;
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 if (server->file >= 0)
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 if (pop_retrieve_flush (server))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
980 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
981 ret = -1;
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
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
984 if (sendline (server, "QUIT") || getok (server))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
985 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
986 ret = -1;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
987 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
988
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
989 close (server->file);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
990 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
991
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
992 if (server->buffer)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
993 free (server->buffer);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
994 free ((char *) server);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
995
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
996 return (ret);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
997 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
998
15102
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
999 #ifdef WINDOWSNT
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
1000 static int have_winsock = 0;
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
1001 #endif
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
1002
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1003 /*
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1004 * Function: socket_connection
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1005 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1006 * Purpose: Opens the network connection with the mail host, without
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1007 * doing any sort of I/O with it or anything.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1008 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1009 * Arguments:
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1010 * host The host to which to connect.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1011 * flags Option 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 * Return value: A file descriptor indicating the connection, or -1
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1014 * indicating failure, in which case an error has been copied
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1015 * into pop_error.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1016 */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1017 static int
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1018 socket_connection (host, flags)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1019 char *host;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1020 int flags;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1021 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1022 struct hostent *hostent;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1023 struct servent *servent;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1024 struct sockaddr_in addr;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1025 char found_port = 0;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1026 char *service;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1027 int sock;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1028 #ifdef KERBEROS
19018
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1029 #ifdef KERBEROS5
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1030 krb5_error_code rem;
19018
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1031 krb5_context kcontext = 0;
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1032 krb5_auth_context auth_context = 0;
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1033 krb5_ccache ccdef;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1034 krb5_principal client, server;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1035 krb5_error *err_ret;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1036 register char *cp;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1037 #else
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1038 KTEXT ticket;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1039 MSG_DAT msg_data;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1040 CREDENTIALS cred;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1041 Key_schedule schedule;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1042 int rem;
16603
a12b8815bcf0 gethostbyname() may return a pointer to static data, which is
Charles Hannum <mycroft@gnu.org>
parents: 15934
diff changeset
1043 char *realhost;
19018
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1044 #endif /* KERBEROS5 */
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1045 #endif /* KERBEROS */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1046
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1047 int try_count = 0;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1048
15102
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
1049 #ifdef WINDOWSNT
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
1050 {
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
1051 WSADATA winsockData;
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
1052 if (WSAStartup (0x101, &winsockData) == 0)
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
1053 have_winsock = 1;
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
1054 }
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
1055 #endif
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
1056
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1057 do
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1058 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1059 hostent = gethostbyname (host);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1060 try_count++;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1061 if ((! hostent) && ((h_errno != TRY_AGAIN) || (try_count == 5)))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1062 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1063 strcpy (pop_error, "Could not determine POP server's address");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1064 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1065 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1066 } while (! hostent);
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 bzero ((char *) &addr, sizeof (addr));
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1069 addr.sin_family = AF_INET;
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 #ifdef KERBEROS
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1072 service = (flags & POP_NO_KERBEROS) ? POP_SERVICE : KPOP_SERVICE;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1073 #else
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1074 service = POP_SERVICE;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1075 #endif
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1076
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1077 #ifdef HESIOD
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1078 if (! (flags & POP_NO_HESIOD))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1079 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1080 servent = hes_getservbyname (service, "tcp");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1081 if (servent)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1082 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1083 addr.sin_port = servent->s_port;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1084 found_port = 1;
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 #endif
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1088 if (! found_port)
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 servent = getservbyname (service, "tcp");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1091 if (servent)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1092 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1093 addr.sin_port = servent->s_port;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1094 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1095 else
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1096 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1097 #ifdef KERBEROS
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1098 addr.sin_port = htons ((flags & POP_NO_KERBEROS) ?
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1099 POP_PORT : KPOP_PORT);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1100 #else
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1101 addr.sin_port = htons (POP_PORT);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1102 #endif
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1103 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1104 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1105
19018
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1106 #define POP_SOCKET_ERROR "Could not create socket for POP connection: "
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1107
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1108 sock = socket (PF_INET, SOCK_STREAM, 0);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1109 if (sock < 0)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1110 {
19018
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1111 strcpy (pop_error, POP_SOCKET_ERROR);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1112 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
1113 ERROR_MAX - sizeof (POP_SOCKET_ERROR));
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1114 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1115
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1116 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1117
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1118 while (*hostent->h_addr_list)
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 bcopy (*hostent->h_addr_list, (char *) &addr.sin_addr,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1121 hostent->h_length);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1122 if (! connect (sock, (struct sockaddr *) &addr, sizeof (addr)))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1123 break;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1124 hostent->h_addr_list++;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1125 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1126
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1127 #define CONNECT_ERROR "Could not connect to POP server: "
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1128
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1129 if (! *hostent->h_addr_list)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1130 {
15108
442458addd50 (SEND, RECV): Renamed from send, recv.
Richard M. Stallman <rms@gnu.org>
parents: 15102
diff changeset
1131 CLOSESOCKET (sock);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1132 strcpy (pop_error, CONNECT_ERROR);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1133 strncat (pop_error, strerror (errno),
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1134 ERROR_MAX - sizeof (CONNECT_ERROR));
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1135 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1136
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1137 }
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 #ifdef KERBEROS
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1140 #define KRB_ERROR "Kerberos error connecting to POP server: "
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1141 if (! (flags & POP_NO_KERBEROS))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1142 {
19018
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1143 #ifdef KERBEROS5
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1144 if ((rem = krb5_init_context (&kcontext)))
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1145 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1146 krb5error:
19018
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1147 if (auth_context)
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1148 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
1149 if (kcontext)
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1150 krb5_free_context (kcontext);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1151 strcpy (pop_error, KRB_ERROR);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1152 strncat (pop_error, error_message (rem),
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1153 ERROR_MAX - sizeof(KRB_ERROR));
15108
442458addd50 (SEND, RECV): Renamed from send, recv.
Richard M. Stallman <rms@gnu.org>
parents: 15102
diff changeset
1154 CLOSESOCKET (sock);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1155 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1156 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1157
19018
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1158 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
1159 goto krb5error;
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1160
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1161 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
1162 goto krb5error;
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1163
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1164 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
1165 goto krb5error;
9158
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 for (cp = hostent->h_name; *cp; cp++)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1168 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1169 if (isupper (*cp))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1170 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1171 *cp = tolower (*cp);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1172 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1173 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1174
19018
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1175 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
1176 POP_SERVICE, FALSE, &server))
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1177 goto krb5error;
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1178
19018
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1179 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
1180 (krb5_pointer) &sock, "KPOPV1.0", client, server,
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1181 AP_OPTS_MUTUAL_REQUIRED,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1182 0, /* no checksum */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1183 0, /* no creds, use ccache instead */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1184 ccdef,
19018
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1185 &err_ret,
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1186 0, /* don't need subsession key */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1187 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
1188 krb5_free_principal (kcontext, server);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1189 if (rem)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1190 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1191 if (err_ret && err_ret->text.length)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1192 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1193 strcpy (pop_error, KRB_ERROR);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1194 strncat (pop_error, error_message (rem),
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1195 ERROR_MAX - sizeof (KRB_ERROR));
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1196 strncat (pop_error, " [server says '",
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1197 ERROR_MAX - strlen (pop_error) - 1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1198 strncat (pop_error, err_ret->text.data,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1199 min (ERROR_MAX - strlen (pop_error) - 1,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1200 err_ret->text.length));
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1201 strncat (pop_error, "']",
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1202 ERROR_MAX - strlen (pop_error) - 1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1203 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1204 else
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1205 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1206 strcpy (pop_error, KRB_ERROR);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1207 strncat (pop_error, error_message (rem),
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1208 ERROR_MAX - sizeof (KRB_ERROR));
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1209 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1210 if (err_ret)
19018
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1211 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
1212 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
1213 krb5_free_context (kcontext);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1214
15108
442458addd50 (SEND, RECV): Renamed from send, recv.
Richard M. Stallman <rms@gnu.org>
parents: 15102
diff changeset
1215 CLOSESOCKET (sock);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1216 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1217 }
19018
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1218 #else /* ! KERBEROS5 */
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1219 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
1220 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
1221 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
1222 (char *) krb_realmofhost (realhost),
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1223 (unsigned long) 0, &msg_data, &cred, schedule,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1224 (struct sockaddr_in *) 0,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1225 (struct sockaddr_in *) 0,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1226 "KPOPV0.1");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1227 free ((char *) ticket);
16697
83946dc6f4e7 (socket_connection): Free realhost after using it.
Richard M. Stallman <rms@gnu.org>
parents: 16603
diff changeset
1228 free (realhost);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1229 if (rem != KSUCCESS)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1230 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1231 strcpy (pop_error, KRB_ERROR);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1232 strncat (pop_error, krb_err_txt[rem],
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1233 ERROR_MAX - sizeof (KRB_ERROR));
15108
442458addd50 (SEND, RECV): Renamed from send, recv.
Richard M. Stallman <rms@gnu.org>
parents: 15102
diff changeset
1234 CLOSESOCKET (sock);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1235 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1236 }
19018
f1f7c254aa77 Support auto-configuration of both Kerberos V4 and
Richard M. Stallman <rms@gnu.org>
parents: 17683
diff changeset
1237 #endif /* KERBEROS5 */
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1238 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1239 #endif /* KERBEROS */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1240
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1241 return (sock);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1242 } /* socket_connection */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1243
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1244 /*
21295
f399e51d6d11 (pop_getline): Renamed from getline.
Richard M. Stallman <rms@gnu.org>
parents: 20418
diff changeset
1245 * Function: pop_getline
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1246 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1247 * Purpose: Get a line of text from the connection and return a
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1248 * pointer to it. The carriage return and linefeed at the end of
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1249 * the line are stripped, but periods at the beginnings of lines
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1250 * are NOT dealt with in any special way.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1251 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1252 * Arguments:
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1253 * server The server from which to get the line of text.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1254 *
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1255 * 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
1256 * 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
1257 * 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
1258 * 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
1259 * case of error, an error message is copied into pop_error.
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1260 *
21295
f399e51d6d11 (pop_getline): Renamed from getline.
Richard M. Stallman <rms@gnu.org>
parents: 20418
diff changeset
1261 * 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
1262 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1263 * Side effects: Closes the connection on error.
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1264 *
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1265 * THE RETURNED LINE MAY CONTAIN EMBEDDED NULLS!
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1266 */
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1267 static int
21295
f399e51d6d11 (pop_getline): Renamed from getline.
Richard M. Stallman <rms@gnu.org>
parents: 20418
diff changeset
1268 pop_getline (server, line)
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1269 popserver server;
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1270 char **line;
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1271 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1272 #define GETLINE_ERROR "Error reading from server: "
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1273
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1274 int ret;
9674
e5a897cf215d (getline): When a search of already-read input for CRLF
Richard M. Stallman <rms@gnu.org>
parents: 9613
diff changeset
1275 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
1276
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1277 if (server->data)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1278 {
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1279 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
1280 server->data);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1281 if (cp)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1282 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1283 int found;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1284 int 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 found = server->buffer_index;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1287 data_used = (cp + 2) - server->buffer - found;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1288
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1289 *cp = '\0'; /* terminate the string to be returned */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1290 server->data -= data_used;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1291 server->buffer_index += data_used;
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 if (pop_debug)
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1294 /* Embedded nulls will truncate this output prematurely,
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1295 but that's OK because it's just for debugging anyway. */
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1296 fprintf (stderr, "<<< %s\n", server->buffer + found);
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1297 *line = server->buffer + found;
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1298 return (data_used - 2);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1299 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1300 else
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1301 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1302 bcopy (server->buffer + server->buffer_index,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1303 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
1304 /* 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
1305 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
1306 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
1307 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
1308 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
1309 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
1310 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
1311 search_offset = server->data - 1;
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1312 server->buffer_index = 0;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1313 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1314 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1315 else
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1316 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1317 server->buffer_index = 0;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1318 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1319
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1320 while (1)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1321 {
22236
bfaacbee089a Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 21397
diff changeset
1322 /* 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
1323 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
1324 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
1325 if (server->data == server->buffer_size - 1)
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1326 {
22236
bfaacbee089a Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 21397
diff changeset
1327 server->buffer_size += GETLINE_INCR;
bfaacbee089a Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 21397
diff changeset
1328 server->buffer = (char *)realloc (server->buffer, server->buffer_size);
bfaacbee089a Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 21397
diff changeset
1329 if (! server->buffer)
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1330 {
22236
bfaacbee089a Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 21397
diff changeset
1331 strcpy (pop_error, "Out of memory in pop_getline");
bfaacbee089a Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 21397
diff changeset
1332 pop_trash (server);
bfaacbee089a Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 21397
diff changeset
1333 return (-1);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1334 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1335 }
22236
bfaacbee089a Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 21397
diff changeset
1336 ret = RECV (server->file, server->buffer + server->data,
bfaacbee089a Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 21397
diff changeset
1337 server->buffer_size - server->data - 1, 0);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1338 if (ret < 0)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1339 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1340 strcpy (pop_error, GETLINE_ERROR);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1341 strncat (pop_error, strerror (errno),
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1342 ERROR_MAX - sizeof (GETLINE_ERROR));
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1343 pop_trash (server);
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1344 return (-1);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1345 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1346 else if (ret == 0)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1347 {
21295
f399e51d6d11 (pop_getline): Renamed from getline.
Richard M. Stallman <rms@gnu.org>
parents: 20418
diff changeset
1348 strcpy (pop_error, "Unexpected EOF from server in pop_getline");
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1349 pop_trash (server);
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1350 return (-1);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1351 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1352 else
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1353 {
9591
0774e217e8aa Don't declare malloc, realloc, free.
Richard M. Stallman <rms@gnu.org>
parents: 9158
diff changeset
1354 char *cp;
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1355 server->data += ret;
9591
0774e217e8aa Don't declare malloc, realloc, free.
Richard M. Stallman <rms@gnu.org>
parents: 9158
diff changeset
1356 server->buffer[server->data] = '\0';
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1357
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1358 cp = find_crlf (server->buffer + search_offset,
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1359 server->data - search_offset);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1360 if (cp)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1361 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1362 int data_used = (cp + 2) - server->buffer;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1363 *cp = '\0';
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1364 server->data -= data_used;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1365 server->buffer_index = data_used;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1366
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1367 if (pop_debug)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1368 fprintf (stderr, "<<< %s\n", server->buffer);
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1369 *line = server->buffer;
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1370 return (data_used - 2);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1371 }
17683
975d093d45fb (getline): Don't miss CRLF pairs when the CR and LF are
Richard M. Stallman <rms@gnu.org>
parents: 16697
diff changeset
1372 /* 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
1373 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
1374 search_offset += ret - 1;
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1375 }
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
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1378 /* NOTREACHED */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1379 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1380
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 * Function: sendline
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1383 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1384 * 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
1385 * passed into this function should NOT have the carriage return
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1386 * and linefeed on the end of it. Periods at beginnings of lines
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1387 * will NOT be treated specially by this function.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1388 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1389 * Arguments:
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1390 * server The server to which to send the text.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1391 * line The line of text to send.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1392 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1393 * Return value: Upon successful completion, a value of 0 will be
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1394 * returned. Otherwise, a non-zero value will be returned, and
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1395 * an error will be copied into pop_error.
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 * Side effects: Closes the connection on error.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1398 */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1399 static int
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1400 sendline (server, line)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1401 popserver server;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1402 char *line;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1403 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1404 #define SENDLINE_ERROR "Error writing to POP server: "
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1405 int ret;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1406
22236
bfaacbee089a Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 21397
diff changeset
1407 ret = fullwrite (server->file, line, strlen (line));
bfaacbee089a Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 21397
diff changeset
1408 if (ret >= 0)
bfaacbee089a Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 21397
diff changeset
1409 { /* 0 indicates that a blank line was written */
bfaacbee089a Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 21397
diff changeset
1410 ret = fullwrite (server->file, "\r\n", 2);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1411 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1412
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1413 if (ret < 0)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1414 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1415 pop_trash (server);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1416 strcpy (pop_error, SENDLINE_ERROR);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1417 strncat (pop_error, strerror (errno),
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1418 ERROR_MAX - sizeof (SENDLINE_ERROR));
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1419 return (ret);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1420 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1421
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1422 if (pop_debug)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1423 fprintf (stderr, ">>> %s\n", line);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1424
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1425 return (0);
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
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1428 /*
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1429 * Procedure: fullwrite
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1430 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1431 * Purpose: Just like write, but keeps trying until the entire string
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1432 * has been written.
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 * Return value: Same as write. Pop_error is not set.
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 static int
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1437 fullwrite (fd, buf, nbytes)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1438 int fd;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1439 char *buf;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1440 int nbytes;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1441 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1442 char *cp;
20204
44f91b648e03 (fullwrite): Get rid of an extra call to write. Problem
Karl Heuer <kwzh@gnu.org>
parents: 19978
diff changeset
1443 int ret = 0;
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1444
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1445 cp = buf;
20204
44f91b648e03 (fullwrite): Get rid of an extra call to write. Problem
Karl Heuer <kwzh@gnu.org>
parents: 19978
diff changeset
1446 while (nbytes && ((ret = SEND (fd, cp, nbytes, 0)) > 0))
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1447 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1448 cp += ret;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1449 nbytes -= ret;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1450 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1451
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1452 return (ret);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1453 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1454
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 * Procedure getok
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1457 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1458 * Purpose: Reads a line from the server. If the return indicator is
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1459 * positive, return with a zero exit status. If not, return with
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1460 * a negative exit status.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1461 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1462 * Arguments:
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1463 * server The server to read from.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1464 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1465 * 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
1466 *
14036
621a575db6f7 Comment fixes.
Karl Heuer <kwzh@gnu.org>
parents: 9674
diff changeset
1467 * Side effects: On failure, may make the connection unusable.
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1468 */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1469 static int
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1470 getok (server)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1471 popserver server;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1472 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1473 char *fromline;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1474
21295
f399e51d6d11 (pop_getline): Renamed from getline.
Richard M. Stallman <rms@gnu.org>
parents: 20418
diff changeset
1475 if (pop_getline (server, &fromline) < 0)
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1476 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1477 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1478 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1479
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1480 if (! strncmp (fromline, "+OK", 3))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1481 return (0);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1482 else if (! strncmp (fromline, "-ERR", 4))
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 strncpy (pop_error, fromline, ERROR_MAX);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1485 pop_error[ERROR_MAX-1] = '\0';
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1486 return (-1);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1487 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1488 else
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1489 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1490 strcpy (pop_error,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1491 "Unexpected response from server; expecting +OK or -ERR");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1492 pop_trash (server);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1493 return (-1);
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 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1496
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1497 #if 0
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1498 /*
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1499 * Function: gettermination
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1500 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1501 * Purpose: Gets the next line and verifies that it is a termination
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1502 * line (nothing but a dot).
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 * 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
1505 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1506 * Side effects: Closes the connection on error.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1507 */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1508 static int
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1509 gettermination (server)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1510 popserver server;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1511 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1512 char *fromserver;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1513
21295
f399e51d6d11 (pop_getline): Renamed from getline.
Richard M. Stallman <rms@gnu.org>
parents: 20418
diff changeset
1514 if (pop_getline (server, &fromserver) < 0)
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1515 return (-1);
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 if (strcmp (fromserver, "."))
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1518 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1519 strcpy (pop_error,
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1520 "Unexpected response from server in gettermination");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1521 pop_trash (server);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1522 return (-1);
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
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1525 return (0);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1526 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1527 #endif
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 * Function pop_close
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 * Purpose: Close a pop connection, sending a "RSET" command to try to
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1533 * preserve any changes that were made and a "QUIT" command to
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1534 * try to get the server to quit, but ignoring any responses that
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1535 * are received.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1536 *
14036
621a575db6f7 Comment fixes.
Karl Heuer <kwzh@gnu.org>
parents: 9674
diff changeset
1537 * Side effects: The server is unusable after this function returns.
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1538 * Changes made to the maildrop since the session was started (or
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1539 * since the last pop_reset) may be lost.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1540 */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1541 void
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1542 pop_close (server)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1543 popserver server;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1544 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1545 pop_trash (server);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1546 free ((char *) server);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1547
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1548 return;
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
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1551 /*
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1552 * Function: pop_trash
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1553 *
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1554 * Purpose: Like pop_close or pop_quit, but doesn't deallocate the
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1555 * memory associated with the server. It is legal to call
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1556 * pop_close or pop_quit after this function has been called.
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1557 */
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1558 static void
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1559 pop_trash (server)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1560 popserver server;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1561 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1562 if (server->file >= 0)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1563 {
15102
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
1564 /* 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
1565 if (server->trash_started)
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
1566 return;
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
1567 server->trash_started = 1;
15108
442458addd50 (SEND, RECV): Renamed from send, recv.
Richard M. Stallman <rms@gnu.org>
parents: 15102
diff changeset
1568
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1569 sendline (server, "RSET");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1570 sendline (server, "QUIT");
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1571
15108
442458addd50 (SEND, RECV): Renamed from send, recv.
Richard M. Stallman <rms@gnu.org>
parents: 15102
diff changeset
1572 CLOSESOCKET (server->file);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1573 server->file = -1;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1574 if (server->buffer)
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1575 {
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1576 free (server->buffer);
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1577 server->buffer = 0;
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1578 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1579 }
15102
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
1580
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
1581 #ifdef WINDOWSNT
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
1582 if (have_winsock)
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
1583 WSACleanup ();
ed550d0805ca [WINDOWSNT]: Include winsock.h and ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14238
diff changeset
1584 #endif
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1585 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1586
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1587 /* 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
1588 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
1589 null, or 0 if it does not contain one. */
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 static char *
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1592 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
1593 char *in_string;
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1594 int len;
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1595 {
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1596 while (len--)
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1597 {
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1598 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
1599 {
530b4511e5b3 Only include ../src/config.h if HAVE_CONFIG_H is
Richard M. Stallman <rms@gnu.org>
parents: 9600
diff changeset
1600 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
1601 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
1602 }
530b4511e5b3 Only include ../src/config.h if HAVE_CONFIG_H is
Richard M. Stallman <rms@gnu.org>
parents: 9600
diff changeset
1603 else
530b4511e5b3 Only include ../src/config.h if HAVE_CONFIG_H is
Richard M. Stallman <rms@gnu.org>
parents: 9600
diff changeset
1604 in_string++;
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1605 }
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20204
diff changeset
1606 return (0);
9158
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1607 }
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1608
939488de5d3f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1609 #endif /* MAIL_USE_POP */