Mercurial > emacs
annotate lib-src/movemail.c @ 105832:56392d7b0ff4
(byte-compile-file-form-defvar)
(byte-compile-file-form-define-abbrev-table)
(byte-compile-file-form-custom-declare-variable)
(byte-compile-variable-ref, byte-compile-defvar):
Whether or not a warning is enabled should only affect whether we issue
the warning, not whether or not we collect the relevant data.
Eg warnings can be turned on and off throughout the course of a file.
author | Glenn Morris <rgm@gnu.org> |
---|---|
date | Tue, 03 Nov 2009 03:16:23 +0000 |
parents | e85d013e3140 |
children | 1d1d5d9bd884 |
rev | line source |
---|---|
23 | 1 /* movemail foo bar -- move file foo to file bar, |
2 locking file foo the way /bin/mail respects. | |
75250
6d19c76d81c5
Update copyright for years from Emacs 21 to present (mainly adding
Glenn Morris <rgm@gnu.org>
parents:
70280
diff
changeset
|
3 Copyright (C) 1986, 1992, 1993, 1994, 1996, 1999, 2001, 2002, 2003, 2004, |
100958 | 4 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. |
23 | 5 |
6 This file is part of GNU Emacs. | |
7 | |
94828
3a4bc081639c
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
92159
diff
changeset
|
8 GNU Emacs is free software: you can redistribute it and/or modify |
38 | 9 it under the terms of the GNU General Public License as published by |
94828
3a4bc081639c
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
92159
diff
changeset
|
10 the Free Software Foundation, either version 3 of the License, or |
3a4bc081639c
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
92159
diff
changeset
|
11 (at your option) any later version. |
23 | 12 |
38 | 13 GNU Emacs is distributed in the hope that it will be useful, |
14 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
16 GNU General Public License for more details. | |
17 | |
18 You should have received a copy of the GNU General Public License | |
94828
3a4bc081639c
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
92159
diff
changeset
|
19 along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ |
3a4bc081639c
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
92159
diff
changeset
|
20 |
23 | 21 |
6690
a1a42eefcc61
(main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents:
5532
diff
changeset
|
22 /* Important notice: defining MAIL_USE_FLOCK or MAIL_USE_LOCKF *will |
a1a42eefcc61
(main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents:
5532
diff
changeset
|
23 cause loss of mail* if you do it on a system that does not normally |
a1a42eefcc61
(main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents:
5532
diff
changeset
|
24 use flock as its way of interlocking access to inbox files. The |
a1a42eefcc61
(main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents:
5532
diff
changeset
|
25 setting of MAIL_USE_FLOCK and MAIL_USE_LOCKF *must agree* with the |
a1a42eefcc61
(main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents:
5532
diff
changeset
|
26 system's own conventions. It is not a choice that is up to you. |
510
4eaef1578a15
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
447
diff
changeset
|
27 |
4eaef1578a15
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
447
diff
changeset
|
28 So, if your system uses lock files rather than flock, then the only way |
4eaef1578a15
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
447
diff
changeset
|
29 you can get proper operation is to enable movemail to write lockfiles there. |
4eaef1578a15
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
447
diff
changeset
|
30 This means you must either give that directory access modes |
4eaef1578a15
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
447
diff
changeset
|
31 that permit everyone to write lockfiles in it, or you must make movemail |
4eaef1578a15
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
447
diff
changeset
|
32 a setuid or setgid program. */ |
4eaef1578a15
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
447
diff
changeset
|
33 |
23 | 34 /* |
35 * Modified January, 1986 by Michael R. Gretzinger (Project Athena) | |
36 * | |
14649 | 37 * Added POP (Post Office Protocol) service. When compiled -DMAIL_USE_POP |
23 | 38 * movemail will accept input filename arguments of the form |
39 * "po:username". This will cause movemail to open a connection to | |
40 * a pop server running on $MAILHOST (environment variable). Movemail | |
41 * must be setuid to root in order to work with POP. | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48314
diff
changeset
|
42 * |
23 | 43 * New module: popmail.c |
44 * Modified routines: | |
447
2e226dcdaf0f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
351
diff
changeset
|
45 * main - added code within #ifdef MAIL_USE_POP; added setuid (getuid ()) |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48314
diff
changeset
|
46 * after POP code. |
23 | 47 * New routines in movemail.c: |
48 * get_errmsg - return pointer to system error message | |
49 * | |
9157
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
50 * Modified August, 1993 by Jonathan Kamens (OpenVision Technologies) |
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
51 * |
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
52 * Move all of the POP code into a separate file, "pop.c". |
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
53 * Use strerror instead of get_errmsg. |
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
54 * |
23 | 55 */ |
56 | |
29046
7d5565d3cf32
Include config.h, not ../src/config.h.
Dave Love <fx@gnu.org>
parents:
27507
diff
changeset
|
57 #include <config.h> |
23 | 58 #include <sys/types.h> |
59 #include <sys/stat.h> | |
60 #include <sys/file.h> | |
9490
4e70299f958d
Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents:
9157
diff
changeset
|
61 #include <stdio.h> |
23 | 62 #include <errno.h> |
102006
86059ded629a
Include time.h unconditionally.
Chong Yidong <cyd@stupidchicken.com>
parents:
101936
diff
changeset
|
63 #include <time.h> |
31233
77ed917b12ee
(toplevel) [HAVE_STRING_H]: Include string.h.
Dave Love <fx@gnu.org>
parents:
31080
diff
changeset
|
64 |
16909
d878e23bbfa6
(main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents:
16897
diff
changeset
|
65 #include <getopt.h> |
31317
d431eeb4028f
(toplevel): Remove redundant <fcntl.h>. Provide definitions for F_OK
Eli Zaretskii <eliz@gnu.org>
parents:
31274
diff
changeset
|
66 #ifdef HAVE_UNISTD_H |
d431eeb4028f
(toplevel): Remove redundant <fcntl.h>. Provide definitions for F_OK
Eli Zaretskii <eliz@gnu.org>
parents:
31274
diff
changeset
|
67 #include <unistd.h> |
d431eeb4028f
(toplevel): Remove redundant <fcntl.h>. Provide definitions for F_OK
Eli Zaretskii <eliz@gnu.org>
parents:
31274
diff
changeset
|
68 #endif |
31233
77ed917b12ee
(toplevel) [HAVE_STRING_H]: Include string.h.
Dave Love <fx@gnu.org>
parents:
31080
diff
changeset
|
69 #ifdef HAVE_FCNTL_H |
77ed917b12ee
(toplevel) [HAVE_STRING_H]: Include string.h.
Dave Love <fx@gnu.org>
parents:
31080
diff
changeset
|
70 #include <fcntl.h> |
77ed917b12ee
(toplevel) [HAVE_STRING_H]: Include string.h.
Dave Love <fx@gnu.org>
parents:
31080
diff
changeset
|
71 #endif |
31317
d431eeb4028f
(toplevel): Remove redundant <fcntl.h>. Provide definitions for F_OK
Eli Zaretskii <eliz@gnu.org>
parents:
31274
diff
changeset
|
72 #include "syswait.h" |
9157
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
73 #ifdef MAIL_USE_POP |
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
74 #include "pop.h" |
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
75 #endif |
23 | 76 |
5446
726a3dc867a6
(malloc): Don't declare it.
Richard M. Stallman <rms@gnu.org>
parents:
5435
diff
changeset
|
77 #ifdef MSDOS |
726a3dc867a6
(malloc): Don't declare it.
Richard M. Stallman <rms@gnu.org>
parents:
5435
diff
changeset
|
78 #undef access |
726a3dc867a6
(malloc): Don't declare it.
Richard M. Stallman <rms@gnu.org>
parents:
5435
diff
changeset
|
79 #endif /* MSDOS */ |
726a3dc867a6
(malloc): Don't declare it.
Richard M. Stallman <rms@gnu.org>
parents:
5435
diff
changeset
|
80 |
15105
328889a58f6d
(DIRECTORY_SEP, IS_DIRECTORY_SEP): Definitions copied from lisp.h.
Richard M. Stallman <rms@gnu.org>
parents:
15101
diff
changeset
|
81 #ifndef DIRECTORY_SEP |
328889a58f6d
(DIRECTORY_SEP, IS_DIRECTORY_SEP): Definitions copied from lisp.h.
Richard M. Stallman <rms@gnu.org>
parents:
15101
diff
changeset
|
82 #define DIRECTORY_SEP '/' |
328889a58f6d
(DIRECTORY_SEP, IS_DIRECTORY_SEP): Definitions copied from lisp.h.
Richard M. Stallman <rms@gnu.org>
parents:
15101
diff
changeset
|
83 #endif |
328889a58f6d
(DIRECTORY_SEP, IS_DIRECTORY_SEP): Definitions copied from lisp.h.
Richard M. Stallman <rms@gnu.org>
parents:
15101
diff
changeset
|
84 #ifndef IS_DIRECTORY_SEP |
328889a58f6d
(DIRECTORY_SEP, IS_DIRECTORY_SEP): Definitions copied from lisp.h.
Richard M. Stallman <rms@gnu.org>
parents:
15101
diff
changeset
|
85 #define IS_DIRECTORY_SEP(_c_) ((_c_) == DIRECTORY_SEP) |
328889a58f6d
(DIRECTORY_SEP, IS_DIRECTORY_SEP): Definitions copied from lisp.h.
Richard M. Stallman <rms@gnu.org>
parents:
15101
diff
changeset
|
86 #endif |
328889a58f6d
(DIRECTORY_SEP, IS_DIRECTORY_SEP): Definitions copied from lisp.h.
Richard M. Stallman <rms@gnu.org>
parents:
15101
diff
changeset
|
87 |
15101
f86169152e74
(access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents:
14649
diff
changeset
|
88 #ifdef WINDOWSNT |
21905
b1e64615e700
[WINDOWSNT]: Undefine DISABLE_DIRECT_ACCESS. Force
Richard M. Stallman <rms@gnu.org>
parents:
21396
diff
changeset
|
89 #include "ntlib.h" |
15101
f86169152e74
(access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents:
14649
diff
changeset
|
90 #undef access |
f86169152e74
(access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents:
14649
diff
changeset
|
91 #undef unlink |
f86169152e74
(access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents:
14649
diff
changeset
|
92 #define fork() 0 |
22316
95d38cf99591
(sys_wait): Rename to wait.
Andrew Innes <andrewi@gnu.org>
parents:
22235
diff
changeset
|
93 #define wait(var) (*(var) = 0) |
15101
f86169152e74
(access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents:
14649
diff
changeset
|
94 /* Unfortunately, Samba doesn't seem to properly lock Unix files even |
f86169152e74
(access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents:
14649
diff
changeset
|
95 though the locking call succeeds (and indeed blocks local access from |
f86169152e74
(access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents:
14649
diff
changeset
|
96 other NT programs). If you have direct file access using an NFS |
f86169152e74
(access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents:
14649
diff
changeset
|
97 client or something other than Samba, the locking call might work |
21905
b1e64615e700
[WINDOWSNT]: Undefine DISABLE_DIRECT_ACCESS. Force
Richard M. Stallman <rms@gnu.org>
parents:
21396
diff
changeset
|
98 properly - make sure it does before you enable this! |
b1e64615e700
[WINDOWSNT]: Undefine DISABLE_DIRECT_ACCESS. Force
Richard M. Stallman <rms@gnu.org>
parents:
21396
diff
changeset
|
99 |
b1e64615e700
[WINDOWSNT]: Undefine DISABLE_DIRECT_ACCESS. Force
Richard M. Stallman <rms@gnu.org>
parents:
21396
diff
changeset
|
100 [18-Feb-97 andrewi] I now believe my comment above to be incorrect, |
b1e64615e700
[WINDOWSNT]: Undefine DISABLE_DIRECT_ACCESS. Force
Richard M. Stallman <rms@gnu.org>
parents:
21396
diff
changeset
|
101 since it was based on a misunderstanding of how locking calls are |
b1e64615e700
[WINDOWSNT]: Undefine DISABLE_DIRECT_ACCESS. Force
Richard M. Stallman <rms@gnu.org>
parents:
21396
diff
changeset
|
102 implemented and used on Unix. */ |
b1e64615e700
[WINDOWSNT]: Undefine DISABLE_DIRECT_ACCESS. Force
Richard M. Stallman <rms@gnu.org>
parents:
21396
diff
changeset
|
103 //#define DISABLE_DIRECT_ACCESS |
b1e64615e700
[WINDOWSNT]: Undefine DISABLE_DIRECT_ACCESS. Force
Richard M. Stallman <rms@gnu.org>
parents:
21396
diff
changeset
|
104 |
b1e64615e700
[WINDOWSNT]: Undefine DISABLE_DIRECT_ACCESS. Force
Richard M. Stallman <rms@gnu.org>
parents:
21396
diff
changeset
|
105 #include <fcntl.h> |
15101
f86169152e74
(access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents:
14649
diff
changeset
|
106 #endif /* WINDOWSNT */ |
f86169152e74
(access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents:
14649
diff
changeset
|
107 |
27 | 108 #ifndef F_OK |
109 #define F_OK 0 | |
110 #define X_OK 1 | |
111 #define W_OK 2 | |
112 #define R_OK 4 | |
113 #endif | |
23 | 114 |
87833
36e4ffad31fe
* movemail.c: Remove references to XENIX.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
87730
diff
changeset
|
115 #ifdef WINDOWSNT |
23 | 116 #include <sys/locking.h> |
117 #endif | |
118 | |
6690
a1a42eefcc61
(main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents:
5532
diff
changeset
|
119 #ifdef MAIL_USE_LOCKF |
a1a42eefcc61
(main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents:
5532
diff
changeset
|
120 #define MAIL_USE_SYSTEM_LOCK |
a1a42eefcc61
(main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents:
5532
diff
changeset
|
121 #endif |
a1a42eefcc61
(main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents:
5532
diff
changeset
|
122 |
a1a42eefcc61
(main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents:
5532
diff
changeset
|
123 #ifdef MAIL_USE_FLOCK |
a1a42eefcc61
(main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents:
5532
diff
changeset
|
124 #define MAIL_USE_SYSTEM_LOCK |
a1a42eefcc61
(main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents:
5532
diff
changeset
|
125 #endif |
a1a42eefcc61
(main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents:
5532
diff
changeset
|
126 |
25 | 127 #ifdef MAIL_USE_MMDF |
128 extern int lk_open (), lk_close (); | |
129 #endif | |
130 | |
16897
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
131 #if !defined (MAIL_USE_SYSTEM_LOCK) && !defined (MAIL_USE_MMDF) && \ |
51112
b0811540692f
Check HAVE_LIBLOCKFILE like HAVE_LIBMAIL.
Dave Love <fx@gnu.org>
parents:
49600
diff
changeset
|
132 (defined (HAVE_LIBMAIL) || defined (HAVE_LIBLOCKFILE)) && \ |
b0811540692f
Check HAVE_LIBLOCKFILE like HAVE_LIBMAIL.
Dave Love <fx@gnu.org>
parents:
49600
diff
changeset
|
133 defined (HAVE_MAILLOCK_H) |
16897
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
134 #include <maillock.h> |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
135 /* We can't use maillock unless we know what directory system mail |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
136 files appear in. */ |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
137 #ifdef MAILDIR |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
138 #define MAIL_USE_MAILLOCK |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
139 static char *mail_spool_name (); |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
140 #endif |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
141 #endif |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
142 |
571 | 143 #ifndef errno |
23 | 144 extern int errno; |
571 | 145 #endif |
9490
4e70299f958d
Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents:
9157
diff
changeset
|
146 char *strerror (); |
31376
f5cd669613d2
(index, rindex): Prototype conditionally.
Dave Love <fx@gnu.org>
parents:
31317
diff
changeset
|
147 #ifdef HAVE_INDEX |
f5cd669613d2
(index, rindex): Prototype conditionally.
Dave Love <fx@gnu.org>
parents:
31317
diff
changeset
|
148 extern char *index __P ((const char *, int)); |
f5cd669613d2
(index, rindex): Prototype conditionally.
Dave Love <fx@gnu.org>
parents:
31317
diff
changeset
|
149 #endif |
f5cd669613d2
(index, rindex): Prototype conditionally.
Dave Love <fx@gnu.org>
parents:
31317
diff
changeset
|
150 #ifdef HAVE_RINDEX |
f5cd669613d2
(index, rindex): Prototype conditionally.
Dave Love <fx@gnu.org>
parents:
31317
diff
changeset
|
151 extern char *rindex __P((const char *, int)); |
f5cd669613d2
(index, rindex): Prototype conditionally.
Dave Love <fx@gnu.org>
parents:
31317
diff
changeset
|
152 #endif |
9490
4e70299f958d
Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents:
9157
diff
changeset
|
153 |
4e70299f958d
Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents:
9157
diff
changeset
|
154 void fatal (); |
4e70299f958d
Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents:
9157
diff
changeset
|
155 void error (); |
4e70299f958d
Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents:
9157
diff
changeset
|
156 void pfatal_with_name (); |
4e70299f958d
Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents:
9157
diff
changeset
|
157 void pfatal_and_delete (); |
4e70299f958d
Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents:
9157
diff
changeset
|
158 char *concat (); |
11675
496576df5d46
(xmalloc): Declare it to return long *.
Richard M. Stallman <rms@gnu.org>
parents:
10399
diff
changeset
|
159 long *xmalloc (); |
9490
4e70299f958d
Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents:
9157
diff
changeset
|
160 int popmail (); |
4e70299f958d
Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents:
9157
diff
changeset
|
161 int pop_retr (); |
4e70299f958d
Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents:
9157
diff
changeset
|
162 int mbx_write (); |
4e70299f958d
Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents:
9157
diff
changeset
|
163 int mbx_delimit_begin (); |
4e70299f958d
Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents:
9157
diff
changeset
|
164 int mbx_delimit_end (); |
23 | 165 |
166 /* Nonzero means this is name of a lock file to delete on fatal error. */ | |
167 char *delete_lockname; | |
168 | |
9490
4e70299f958d
Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents:
9157
diff
changeset
|
169 int |
23 | 170 main (argc, argv) |
171 int argc; | |
172 char **argv; | |
173 { | |
174 char *inname, *outname; | |
175 int indesc, outdesc; | |
176 int nread; | |
96620
3bea8ede5bd0
* syswait.h: Remove old if 0 code. Do not define WAITTYPE, it was
Dan Nicolaescu <dann@ics.uci.edu>
parents:
94828
diff
changeset
|
177 int status; |
16909
d878e23bbfa6
(main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents:
16897
diff
changeset
|
178 int c, preserve_mail = 0; |
23 | 179 |
6690
a1a42eefcc61
(main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents:
5532
diff
changeset
|
180 #ifndef MAIL_USE_SYSTEM_LOCK |
23 | 181 struct stat st; |
182 long now; | |
183 int tem; | |
184 char *lockname, *p; | |
601
3db1540d4b97
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
580
diff
changeset
|
185 char *tempname; |
23 | 186 int desc; |
6690
a1a42eefcc61
(main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents:
5532
diff
changeset
|
187 #endif /* not MAIL_USE_SYSTEM_LOCK */ |
23 | 188 |
16897
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
189 #ifdef MAIL_USE_MAILLOCK |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
190 char *spool_name; |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
191 #endif |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
192 |
23182
0ba967162ee0
[MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents:
22316
diff
changeset
|
193 #ifdef MAIL_USE_POP |
0ba967162ee0
[MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents:
22316
diff
changeset
|
194 int pop_reverse_order = 0; |
0ba967162ee0
[MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents:
22316
diff
changeset
|
195 # define ARGSTR "pr" |
0ba967162ee0
[MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents:
22316
diff
changeset
|
196 #else /* ! MAIL_USE_POP */ |
0ba967162ee0
[MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents:
22316
diff
changeset
|
197 # define ARGSTR "p" |
0ba967162ee0
[MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents:
22316
diff
changeset
|
198 #endif /* MAIL_USE_POP */ |
0ba967162ee0
[MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents:
22316
diff
changeset
|
199 |
31080
7ae519dba237
(main) [WINDOWSNT]: Force binary mode for fileio.
Andrew Innes <andrewi@gnu.org>
parents:
29046
diff
changeset
|
200 #ifdef WINDOWSNT |
7ae519dba237
(main) [WINDOWSNT]: Force binary mode for fileio.
Andrew Innes <andrewi@gnu.org>
parents:
29046
diff
changeset
|
201 /* Ensure all file i/o is in binary mode. */ |
7ae519dba237
(main) [WINDOWSNT]: Force binary mode for fileio.
Andrew Innes <andrewi@gnu.org>
parents:
29046
diff
changeset
|
202 _fmode = _O_BINARY; |
7ae519dba237
(main) [WINDOWSNT]: Force binary mode for fileio.
Andrew Innes <andrewi@gnu.org>
parents:
29046
diff
changeset
|
203 #endif |
7ae519dba237
(main) [WINDOWSNT]: Force binary mode for fileio.
Andrew Innes <andrewi@gnu.org>
parents:
29046
diff
changeset
|
204 |
23 | 205 delete_lockname = 0; |
206 | |
23182
0ba967162ee0
[MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents:
22316
diff
changeset
|
207 while ((c = getopt (argc, argv, ARGSTR)) != EOF) |
9490
4e70299f958d
Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents:
9157
diff
changeset
|
208 { |
16909
d878e23bbfa6
(main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents:
16897
diff
changeset
|
209 switch (c) { |
23182
0ba967162ee0
[MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents:
22316
diff
changeset
|
210 #ifdef MAIL_USE_POP |
0ba967162ee0
[MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents:
22316
diff
changeset
|
211 case 'r': |
0ba967162ee0
[MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents:
22316
diff
changeset
|
212 pop_reverse_order = 1; |
0ba967162ee0
[MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents:
22316
diff
changeset
|
213 break; |
0ba967162ee0
[MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents:
22316
diff
changeset
|
214 #endif |
16909
d878e23bbfa6
(main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents:
16897
diff
changeset
|
215 case 'p': |
d878e23bbfa6
(main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents:
16897
diff
changeset
|
216 preserve_mail++; |
d878e23bbfa6
(main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents:
16897
diff
changeset
|
217 break; |
d878e23bbfa6
(main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents:
16897
diff
changeset
|
218 default: |
55442
a47704955f8d
Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
52401
diff
changeset
|
219 exit (EXIT_FAILURE); |
16909
d878e23bbfa6
(main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents:
16897
diff
changeset
|
220 } |
d878e23bbfa6
(main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents:
16897
diff
changeset
|
221 } |
d878e23bbfa6
(main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents:
16897
diff
changeset
|
222 |
d878e23bbfa6
(main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents:
16897
diff
changeset
|
223 if ( |
d878e23bbfa6
(main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents:
16897
diff
changeset
|
224 #ifdef MAIL_USE_POP |
d878e23bbfa6
(main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents:
16897
diff
changeset
|
225 (argc - optind < 2) || (argc - optind > 3) |
d878e23bbfa6
(main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents:
16897
diff
changeset
|
226 #else |
d878e23bbfa6
(main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents:
16897
diff
changeset
|
227 (argc - optind != 2) |
d878e23bbfa6
(main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents:
16897
diff
changeset
|
228 #endif |
d878e23bbfa6
(main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents:
16897
diff
changeset
|
229 ) |
d878e23bbfa6
(main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents:
16897
diff
changeset
|
230 { |
52069
76d453ac3c4f
(main): Fix having macros in a printf statement.
Juanma Barranquero <lekktu@gmail.com>
parents:
51112
diff
changeset
|
231 #ifdef MAIL_USE_POP |
102385
e85d013e3140
(main) [MAIL_USE_POP]: Add -r to usage message.
Glenn Morris <rgm@gnu.org>
parents:
102006
diff
changeset
|
232 fprintf (stderr, "Usage: movemail [-p] [-r] inbox destfile%s\n", |
52069
76d453ac3c4f
(main): Fix having macros in a printf statement.
Juanma Barranquero <lekktu@gmail.com>
parents:
51112
diff
changeset
|
233 " [POP-password]"); |
16909
d878e23bbfa6
(main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents:
16897
diff
changeset
|
234 #else |
52069
76d453ac3c4f
(main): Fix having macros in a printf statement.
Juanma Barranquero <lekktu@gmail.com>
parents:
51112
diff
changeset
|
235 fprintf (stderr, "Usage: movemail [-p] inbox destfile%s\n", ""); |
16909
d878e23bbfa6
(main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents:
16897
diff
changeset
|
236 #endif |
55442
a47704955f8d
Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
52401
diff
changeset
|
237 exit (EXIT_FAILURE); |
9490
4e70299f958d
Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents:
9157
diff
changeset
|
238 } |
23 | 239 |
16909
d878e23bbfa6
(main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents:
16897
diff
changeset
|
240 inname = argv[optind]; |
d878e23bbfa6
(main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents:
16897
diff
changeset
|
241 outname = argv[optind+1]; |
23 | 242 |
25 | 243 #ifdef MAIL_USE_MMDF |
244 mmdf_init (argv[0]); | |
245 #endif | |
246 | |
12793
0464324deda7
(main): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents:
12777
diff
changeset
|
247 if (*outname == 0) |
59918
5a468b3bfb27
(fatal): Accept third parameter and pass down to
Andreas Schwab <schwab@suse.de>
parents:
59775
diff
changeset
|
248 fatal ("Destination file name is empty", 0, 0); |
12793
0464324deda7
(main): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents:
12777
diff
changeset
|
249 |
120 | 250 /* Check access to output file. */ |
23 | 251 if (access (outname, F_OK) == 0 && access (outname, W_OK) != 0) |
252 pfatal_with_name (outname); | |
253 | |
14036 | 254 /* Also check that outname's directory is writable to the real uid. */ |
23 | 255 { |
5446
726a3dc867a6
(malloc): Don't declare it.
Richard M. Stallman <rms@gnu.org>
parents:
5435
diff
changeset
|
256 char *buf = (char *) xmalloc (strlen (outname) + 1); |
9490
4e70299f958d
Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents:
9157
diff
changeset
|
257 char *p; |
23 | 258 strcpy (buf, outname); |
259 p = buf + strlen (buf); | |
15101
f86169152e74
(access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents:
14649
diff
changeset
|
260 while (p > buf && !IS_DIRECTORY_SEP (p[-1])) |
23 | 261 *--p = 0; |
262 if (p == buf) | |
263 *p++ = '.'; | |
264 if (access (buf, W_OK) != 0) | |
265 pfatal_with_name (buf); | |
266 free (buf); | |
267 } | |
268 | |
269 #ifdef MAIL_USE_POP | |
3309
f00054d40753
* movemail.c [MAIL_USE_POP] (main): Don't use non-portable
Jim Blandy <jimb@redhat.com>
parents:
733
diff
changeset
|
270 if (!strncmp (inname, "po:", 3)) |
23 | 271 { |
12442
981986d7d82f
(main) [MAIL_USE_POP]: When a user specifies a
Richard M. Stallman <rms@gnu.org>
parents:
12389
diff
changeset
|
272 int status; |
23 | 273 |
16909
d878e23bbfa6
(main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents:
16897
diff
changeset
|
274 status = popmail (inname + 3, outname, preserve_mail, |
23182
0ba967162ee0
[MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents:
22316
diff
changeset
|
275 (argc - optind == 3) ? argv[optind+2] : NULL, |
0ba967162ee0
[MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents:
22316
diff
changeset
|
276 pop_reverse_order); |
23 | 277 exit (status); |
278 } | |
279 | |
447
2e226dcdaf0f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
351
diff
changeset
|
280 setuid (getuid ()); |
23 | 281 #endif /* MAIL_USE_POP */ |
282 | |
15101
f86169152e74
(access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents:
14649
diff
changeset
|
283 #ifndef DISABLE_DIRECT_ACCESS |
f86169152e74
(access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents:
14649
diff
changeset
|
284 |
120 | 285 /* Check access to input file. */ |
286 if (access (inname, R_OK | W_OK) != 0) | |
287 pfatal_with_name (inname); | |
288 | |
25 | 289 #ifndef MAIL_USE_MMDF |
6690
a1a42eefcc61
(main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents:
5532
diff
changeset
|
290 #ifndef MAIL_USE_SYSTEM_LOCK |
16897
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
291 #ifdef MAIL_USE_MAILLOCK |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
292 spool_name = mail_spool_name (inname); |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
293 if (! spool_name) |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
294 #endif |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
295 { |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
296 /* Use a lock file named after our first argument with .lock appended: |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
297 If it exists, the mail file is locked. */ |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
298 /* Note: this locking mechanism is *required* by the mailer |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
299 (on systems which use it) to prevent loss of mail. |
351
5729b1cc3942
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
127
diff
changeset
|
300 |
16897
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
301 On systems that use a lock file, extracting the mail without locking |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
302 WILL occasionally cause loss of mail due to timing errors! |
351
5729b1cc3942
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
127
diff
changeset
|
303 |
16897
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
304 So, if creation of the lock file fails |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
305 due to access permission on the mail spool directory, |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
306 you simply MUST change the permission |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
307 and/or make movemail a setgid program |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
308 so it can create lock files properly. |
351
5729b1cc3942
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
127
diff
changeset
|
309 |
16897
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
310 You might also wish to verify that your system is one |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
311 which uses lock files for this purpose. Some systems use other methods. |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
312 |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
313 If your system uses the `flock' system call for mail locking, |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
314 define MAIL_USE_SYSTEM_LOCK in config.h or the s-*.h file |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
315 and recompile movemail. If the s- file for your system |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
316 should define MAIL_USE_SYSTEM_LOCK but does not, send a bug report |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
317 to bug-gnu-emacs@prep.ai.mit.edu so we can fix it. */ |
23 | 318 |
16897
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
319 lockname = concat (inname, ".lock", ""); |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
320 tempname = (char *) xmalloc (strlen (inname) + strlen ("EXXXXXX") + 1); |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
321 strcpy (tempname, inname); |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
322 p = tempname + strlen (tempname); |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
323 while (p != tempname && !IS_DIRECTORY_SEP (p[-1])) |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
324 p--; |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
325 *p = 0; |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
326 strcpy (p, "EXXXXXX"); |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
327 mktemp (tempname); |
447
2e226dcdaf0f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
351
diff
changeset
|
328 unlink (tempname); |
16897
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
329 |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
330 while (1) |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
331 { |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
332 /* Create the lock file, but not under the lock file name. */ |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
333 /* Give up if cannot do that. */ |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
334 desc = open (tempname, O_WRONLY | O_CREAT | O_EXCL, 0666); |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
335 if (desc < 0) |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
336 { |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
337 char *message = (char *) xmalloc (strlen (tempname) + 50); |
27507 | 338 sprintf (message, "creating %s, which would become the lock file", |
16897
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
339 tempname); |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
340 pfatal_with_name (message); |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
341 } |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
342 close (desc); |
23 | 343 |
16897
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
344 tem = link (tempname, lockname); |
100823
d893844c75a7
(main): Fatal if hard links cannot be created.
Chong Yidong <cyd@stupidchicken.com>
parents:
96620
diff
changeset
|
345 |
d893844c75a7
(main): Fatal if hard links cannot be created.
Chong Yidong <cyd@stupidchicken.com>
parents:
96620
diff
changeset
|
346 #ifdef EPERM |
d893844c75a7
(main): Fatal if hard links cannot be created.
Chong Yidong <cyd@stupidchicken.com>
parents:
96620
diff
changeset
|
347 if (tem < 0 && errno == EPERM) |
d893844c75a7
(main): Fatal if hard links cannot be created.
Chong Yidong <cyd@stupidchicken.com>
parents:
96620
diff
changeset
|
348 fatal ("Unable to create hard link between %s and %s", |
d893844c75a7
(main): Fatal if hard links cannot be created.
Chong Yidong <cyd@stupidchicken.com>
parents:
96620
diff
changeset
|
349 tempname, lockname); |
d893844c75a7
(main): Fatal if hard links cannot be created.
Chong Yidong <cyd@stupidchicken.com>
parents:
96620
diff
changeset
|
350 #endif |
d893844c75a7
(main): Fatal if hard links cannot be created.
Chong Yidong <cyd@stupidchicken.com>
parents:
96620
diff
changeset
|
351 |
16897
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
352 unlink (tempname); |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
353 if (tem >= 0) |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
354 break; |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
355 sleep (1); |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
356 |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
357 /* If lock file is five minutes old, unlock it. |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
358 Five minutes should be good enough to cope with crashes |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
359 and wedgitude, and long enough to avoid being fooled |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
360 by time differences between machines. */ |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
361 if (stat (lockname, &st) >= 0) |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
362 { |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
363 now = time (0); |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
364 if (st.st_ctime < now - 300) |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
365 unlink (lockname); |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
366 } |
23 | 367 } |
16897
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
368 |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
369 delete_lockname = lockname; |
23 | 370 } |
6690
a1a42eefcc61
(main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents:
5532
diff
changeset
|
371 #endif /* not MAIL_USE_SYSTEM_LOCK */ |
a1a42eefcc61
(main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents:
5532
diff
changeset
|
372 #endif /* not MAIL_USE_MMDF */ |
23 | 373 |
5435 | 374 if (fork () == 0) |
375 { | |
16366
ed13d19dbce5
(main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents:
16218
diff
changeset
|
376 int lockcount = 0; |
16897
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
377 int status = 0; |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
378 #if defined (MAIL_USE_MAILLOCK) && defined (HAVE_TOUCHLOCK) |
102006
86059ded629a
Include time.h unconditionally.
Chong Yidong <cyd@stupidchicken.com>
parents:
101936
diff
changeset
|
379 time_t touched_lock, now; |
16897
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
380 #endif |
16366
ed13d19dbce5
(main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents:
16218
diff
changeset
|
381 |
6813
76f93e487956
(main): Use setuid, not seteuid.
Karl Heuer <kwzh@gnu.org>
parents:
6690
diff
changeset
|
382 setuid (getuid ()); |
5435 | 383 |
6690
a1a42eefcc61
(main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents:
5532
diff
changeset
|
384 #ifndef MAIL_USE_MMDF |
a1a42eefcc61
(main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents:
5532
diff
changeset
|
385 #ifdef MAIL_USE_SYSTEM_LOCK |
5435 | 386 indesc = open (inname, O_RDWR); |
6690
a1a42eefcc61
(main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents:
5532
diff
changeset
|
387 #else /* if not MAIL_USE_SYSTEM_LOCK */ |
5435 | 388 indesc = open (inname, O_RDONLY); |
6690
a1a42eefcc61
(main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents:
5532
diff
changeset
|
389 #endif /* not MAIL_USE_SYSTEM_LOCK */ |
5435 | 390 #else /* MAIL_USE_MMDF */ |
391 indesc = lk_open (inname, O_RDONLY, 0, 0, 10); | |
25 | 392 #endif /* MAIL_USE_MMDF */ |
393 | |
5435 | 394 if (indesc < 0) |
395 pfatal_with_name (inname); | |
23 | 396 |
87833
36e4ffad31fe
* movemail.c: Remove references to XENIX.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
87730
diff
changeset
|
397 #ifdef BSD_SYSTEM |
5435 | 398 /* In case movemail is setuid to root, make sure the user can |
399 read the output file. */ | |
400 /* This is desirable for all systems | |
401 but I don't want to assume all have the umask system call */ | |
402 umask (umask (0) & 0333); | |
87833
36e4ffad31fe
* movemail.c: Remove references to XENIX.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
87730
diff
changeset
|
403 #endif /* BSD_SYSTEM */ |
5435 | 404 outdesc = open (outname, O_WRONLY | O_CREAT | O_EXCL, 0666); |
405 if (outdesc < 0) | |
406 pfatal_with_name (outname); | |
16366
ed13d19dbce5
(main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents:
16218
diff
changeset
|
407 |
ed13d19dbce5
(main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents:
16218
diff
changeset
|
408 /* This label exists so we can retry locking |
ed13d19dbce5
(main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents:
16218
diff
changeset
|
409 after a delay, if it got EAGAIN or EBUSY. */ |
ed13d19dbce5
(main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents:
16218
diff
changeset
|
410 retry_lock: |
ed13d19dbce5
(main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents:
16218
diff
changeset
|
411 |
ed13d19dbce5
(main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents:
16218
diff
changeset
|
412 /* Try to lock it. */ |
16897
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
413 #ifdef MAIL_USE_MAILLOCK |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
414 if (spool_name) |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
415 { |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
416 /* The "0 - " is to make it a negative number if maillock returns |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
417 non-zero. */ |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
418 status = 0 - maillock (spool_name, 1); |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
419 #ifdef HAVE_TOUCHLOCK |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
420 touched_lock = time (0); |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
421 #endif |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
422 lockcount = 5; |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
423 } |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
424 else |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
425 #endif /* MAIL_USE_MAILLOCK */ |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
426 { |
6690
a1a42eefcc61
(main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents:
5532
diff
changeset
|
427 #ifdef MAIL_USE_SYSTEM_LOCK |
a1a42eefcc61
(main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents:
5532
diff
changeset
|
428 #ifdef MAIL_USE_LOCKF |
16897
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
429 status = lockf (indesc, F_LOCK, 0); |
6690
a1a42eefcc61
(main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents:
5532
diff
changeset
|
430 #else /* not MAIL_USE_LOCKF */ |
15101
f86169152e74
(access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents:
14649
diff
changeset
|
431 #ifdef WINDOWSNT |
16897
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
432 status = locking (indesc, LK_RLCK, -1L); |
15101
f86169152e74
(access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents:
14649
diff
changeset
|
433 #else |
16897
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
434 status = flock (indesc, LOCK_EX); |
23 | 435 #endif |
6690
a1a42eefcc61
(main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents:
5532
diff
changeset
|
436 #endif /* not MAIL_USE_LOCKF */ |
a1a42eefcc61
(main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents:
5532
diff
changeset
|
437 #endif /* MAIL_USE_SYSTEM_LOCK */ |
16897
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
438 } |
23 | 439 |
16366
ed13d19dbce5
(main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents:
16218
diff
changeset
|
440 /* If it fails, retry up to 5 times |
ed13d19dbce5
(main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents:
16218
diff
changeset
|
441 for certain failure codes. */ |
ed13d19dbce5
(main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents:
16218
diff
changeset
|
442 if (status < 0) |
ed13d19dbce5
(main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents:
16218
diff
changeset
|
443 { |
ed13d19dbce5
(main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents:
16218
diff
changeset
|
444 if (++lockcount <= 5) |
ed13d19dbce5
(main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents:
16218
diff
changeset
|
445 { |
ed13d19dbce5
(main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents:
16218
diff
changeset
|
446 #ifdef EAGAIN |
ed13d19dbce5
(main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents:
16218
diff
changeset
|
447 if (errno == EAGAIN) |
ed13d19dbce5
(main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents:
16218
diff
changeset
|
448 { |
ed13d19dbce5
(main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents:
16218
diff
changeset
|
449 sleep (1); |
ed13d19dbce5
(main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents:
16218
diff
changeset
|
450 goto retry_lock; |
ed13d19dbce5
(main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents:
16218
diff
changeset
|
451 } |
ed13d19dbce5
(main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents:
16218
diff
changeset
|
452 #endif |
ed13d19dbce5
(main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents:
16218
diff
changeset
|
453 #ifdef EBUSY |
ed13d19dbce5
(main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents:
16218
diff
changeset
|
454 if (errno == EBUSY) |
ed13d19dbce5
(main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents:
16218
diff
changeset
|
455 { |
ed13d19dbce5
(main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents:
16218
diff
changeset
|
456 sleep (1); |
ed13d19dbce5
(main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents:
16218
diff
changeset
|
457 goto retry_lock; |
ed13d19dbce5
(main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents:
16218
diff
changeset
|
458 } |
ed13d19dbce5
(main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents:
16218
diff
changeset
|
459 #endif |
ed13d19dbce5
(main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents:
16218
diff
changeset
|
460 } |
ed13d19dbce5
(main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents:
16218
diff
changeset
|
461 |
ed13d19dbce5
(main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents:
16218
diff
changeset
|
462 pfatal_with_name (inname); |
ed13d19dbce5
(main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents:
16218
diff
changeset
|
463 } |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48314
diff
changeset
|
464 |
5435 | 465 { |
466 char buf[1024]; | |
604 | 467 |
5435 | 468 while (1) |
604 | 469 { |
5435 | 470 nread = read (indesc, buf, sizeof buf); |
70280
bca72679c7d8
(main): Check for negative value from `read'.
Richard M. Stallman <rms@gnu.org>
parents:
68647
diff
changeset
|
471 if (nread < 0) |
bca72679c7d8
(main): Check for negative value from `read'.
Richard M. Stallman <rms@gnu.org>
parents:
68647
diff
changeset
|
472 pfatal_with_name (inname); |
5435 | 473 if (nread != write (outdesc, buf, nread)) |
474 { | |
475 int saved_errno = errno; | |
476 unlink (outname); | |
477 errno = saved_errno; | |
478 pfatal_with_name (outname); | |
479 } | |
480 if (nread < sizeof buf) | |
481 break; | |
16897
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
482 #if defined (MAIL_USE_MAILLOCK) && defined (HAVE_TOUCHLOCK) |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
483 if (spool_name) |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
484 { |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
485 now = time (0); |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
486 if (now - touched_lock > 60) |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
487 { |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
488 touchlock (); |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
489 touched_lock = now; |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
490 } |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
491 } |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
492 #endif /* MAIL_USE_MAILLOCK */ |
604 | 493 } |
494 } | |
23 | 495 |
16218
32f82ca8b41f
Replaced all BSD with BSD_SYSTEM.
Karl Heuer <kwzh@gnu.org>
parents:
15105
diff
changeset
|
496 #ifdef BSD_SYSTEM |
5435 | 497 if (fsync (outdesc) < 0) |
498 pfatal_and_delete (outname); | |
23 | 499 #endif |
500 | |
5435 | 501 /* Check to make sure no errors before we zap the inbox. */ |
502 if (close (outdesc) != 0) | |
503 pfatal_and_delete (outname); | |
23 | 504 |
6690
a1a42eefcc61
(main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents:
5532
diff
changeset
|
505 #ifdef MAIL_USE_SYSTEM_LOCK |
16909
d878e23bbfa6
(main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents:
16897
diff
changeset
|
506 if (! preserve_mail) |
d878e23bbfa6
(main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents:
16897
diff
changeset
|
507 { |
d878e23bbfa6
(main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents:
16897
diff
changeset
|
508 ftruncate (indesc, 0L); |
d878e23bbfa6
(main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents:
16897
diff
changeset
|
509 } |
6690
a1a42eefcc61
(main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents:
5532
diff
changeset
|
510 #endif /* MAIL_USE_SYSTEM_LOCK */ |
25 | 511 |
512 #ifdef MAIL_USE_MMDF | |
5435 | 513 lk_close (indesc, 0, 0, 0); |
25 | 514 #else |
5435 | 515 close (indesc); |
25 | 516 #endif |
23 | 517 |
6690
a1a42eefcc61
(main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents:
5532
diff
changeset
|
518 #ifndef MAIL_USE_SYSTEM_LOCK |
16909
d878e23bbfa6
(main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents:
16897
diff
changeset
|
519 if (! preserve_mail) |
d878e23bbfa6
(main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents:
16897
diff
changeset
|
520 { |
d878e23bbfa6
(main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents:
16897
diff
changeset
|
521 /* Delete the input file; if we can't, at least get rid of its |
d878e23bbfa6
(main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents:
16897
diff
changeset
|
522 contents. */ |
571 | 523 #ifdef MAIL_UNLINK_SPOOL |
16909
d878e23bbfa6
(main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents:
16897
diff
changeset
|
524 /* This is generally bad to do, because it destroys the permissions |
d878e23bbfa6
(main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents:
16897
diff
changeset
|
525 that were set on the file. Better to just empty the file. */ |
d878e23bbfa6
(main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents:
16897
diff
changeset
|
526 if (unlink (inname) < 0 && errno != ENOENT) |
571 | 527 #endif /* MAIL_UNLINK_SPOOL */ |
16909
d878e23bbfa6
(main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents:
16897
diff
changeset
|
528 creat (inname, 0600); |
d878e23bbfa6
(main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents:
16897
diff
changeset
|
529 } |
6690
a1a42eefcc61
(main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents:
5532
diff
changeset
|
530 #endif /* not MAIL_USE_SYSTEM_LOCK */ |
5435 | 531 |
16897
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
532 #ifdef MAIL_USE_MAILLOCK |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
533 /* This has to occur in the child, i.e., in the process that |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
534 acquired the lock! */ |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
535 if (spool_name) |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
536 mailunlock (); |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
537 #endif |
55442
a47704955f8d
Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
52401
diff
changeset
|
538 exit (EXIT_SUCCESS); |
5435 | 539 } |
540 | |
541 wait (&status); | |
542 if (!WIFEXITED (status)) | |
55442
a47704955f8d
Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
52401
diff
changeset
|
543 exit (EXIT_FAILURE); |
5435 | 544 else if (WRETCODE (status) != 0) |
545 exit (WRETCODE (status)); | |
546 | |
6690
a1a42eefcc61
(main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents:
5532
diff
changeset
|
547 #if !defined (MAIL_USE_MMDF) && !defined (MAIL_USE_SYSTEM_LOCK) |
16897
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
548 #ifdef MAIL_USE_MAILLOCK |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
549 if (! spool_name) |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
550 #endif /* MAIL_USE_MAILLOCK */ |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
551 unlink (lockname); |
6690
a1a42eefcc61
(main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents:
5532
diff
changeset
|
552 #endif /* not MAIL_USE_MMDF and not MAIL_USE_SYSTEM_LOCK */ |
15101
f86169152e74
(access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents:
14649
diff
changeset
|
553 |
f86169152e74
(access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents:
14649
diff
changeset
|
554 #endif /* ! DISABLE_DIRECT_ACCESS */ |
f86169152e74
(access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents:
14649
diff
changeset
|
555 |
55442
a47704955f8d
Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
52401
diff
changeset
|
556 return EXIT_SUCCESS; |
23 | 557 } |
16897
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
558 |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
559 #ifdef MAIL_USE_MAILLOCK |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
560 /* This function uses stat to confirm that the mail directory is |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
561 identical to the directory of the input file, rather than just |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
562 string-comparing the two paths, because one or both of them might |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
563 be symbolic links pointing to some other directory. */ |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
564 static char * |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
565 mail_spool_name (inname) |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
566 char *inname; |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
567 { |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
568 struct stat stat1, stat2; |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
569 char *indir, *fname; |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
570 int status; |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
571 |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
572 if (! (fname = rindex (inname, '/'))) |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
573 return NULL; |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
574 |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
575 fname++; |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
576 |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
577 if (stat (MAILDIR, &stat1) < 0) |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
578 return NULL; |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
579 |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
580 indir = (char *) xmalloc (fname - inname + 1); |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
581 strncpy (indir, inname, fname - inname); |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
582 indir[fname-inname] = '\0'; |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
583 |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
584 |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
585 status = stat (indir, &stat2); |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
586 |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
587 free (indir); |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
588 |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
589 if (status < 0) |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
590 return NULL; |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
591 |
18626
d3d968d0773a
(rindex): Add declaration.
Richard M. Stallman <rms@gnu.org>
parents:
17069
diff
changeset
|
592 if (stat1.st_dev == stat2.st_dev |
d3d968d0773a
(rindex): Add declaration.
Richard M. Stallman <rms@gnu.org>
parents:
17069
diff
changeset
|
593 && stat1.st_ino == stat2.st_ino) |
16897
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
594 return fname; |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
595 |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
596 return NULL; |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
597 } |
523d5c54a3f5
Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents:
16366
diff
changeset
|
598 #endif /* MAIL_USE_MAILLOCK */ |
23 | 599 |
600 /* Print error message and exit. */ | |
601 | |
9490
4e70299f958d
Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents:
9157
diff
changeset
|
602 void |
59918
5a468b3bfb27
(fatal): Accept third parameter and pass down to
Andreas Schwab <schwab@suse.de>
parents:
59775
diff
changeset
|
603 fatal (s1, s2, s3) |
5a468b3bfb27
(fatal): Accept third parameter and pass down to
Andreas Schwab <schwab@suse.de>
parents:
59775
diff
changeset
|
604 char *s1, *s2, *s3; |
23 | 605 { |
606 if (delete_lockname) | |
607 unlink (delete_lockname); | |
59918
5a468b3bfb27
(fatal): Accept third parameter and pass down to
Andreas Schwab <schwab@suse.de>
parents:
59775
diff
changeset
|
608 error (s1, s2, s3); |
55442
a47704955f8d
Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
52401
diff
changeset
|
609 exit (EXIT_FAILURE); |
23 | 610 } |
611 | |
31233
77ed917b12ee
(toplevel) [HAVE_STRING_H]: Include string.h.
Dave Love <fx@gnu.org>
parents:
31080
diff
changeset
|
612 /* Print error message. `s1' is printf control string, `s2' and `s3' |
77ed917b12ee
(toplevel) [HAVE_STRING_H]: Include string.h.
Dave Love <fx@gnu.org>
parents:
31080
diff
changeset
|
613 are args for it or null. */ |
23 | 614 |
9490
4e70299f958d
Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents:
9157
diff
changeset
|
615 void |
120 | 616 error (s1, s2, s3) |
617 char *s1, *s2, *s3; | |
23 | 618 { |
9490
4e70299f958d
Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents:
9157
diff
changeset
|
619 fprintf (stderr, "movemail: "); |
31233
77ed917b12ee
(toplevel) [HAVE_STRING_H]: Include string.h.
Dave Love <fx@gnu.org>
parents:
31080
diff
changeset
|
620 if (s3) |
77ed917b12ee
(toplevel) [HAVE_STRING_H]: Include string.h.
Dave Love <fx@gnu.org>
parents:
31080
diff
changeset
|
621 fprintf (stderr, s1, s2, s3); |
77ed917b12ee
(toplevel) [HAVE_STRING_H]: Include string.h.
Dave Love <fx@gnu.org>
parents:
31080
diff
changeset
|
622 else if (s2) |
77ed917b12ee
(toplevel) [HAVE_STRING_H]: Include string.h.
Dave Love <fx@gnu.org>
parents:
31080
diff
changeset
|
623 fprintf (stderr, s1, s2); |
77ed917b12ee
(toplevel) [HAVE_STRING_H]: Include string.h.
Dave Love <fx@gnu.org>
parents:
31080
diff
changeset
|
624 else |
77ed917b12ee
(toplevel) [HAVE_STRING_H]: Include string.h.
Dave Love <fx@gnu.org>
parents:
31080
diff
changeset
|
625 fprintf (stderr, s1); |
9490
4e70299f958d
Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents:
9157
diff
changeset
|
626 fprintf (stderr, "\n"); |
23 | 627 } |
628 | |
9490
4e70299f958d
Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents:
9157
diff
changeset
|
629 void |
23 | 630 pfatal_with_name (name) |
631 char *name; | |
632 { | |
59918
5a468b3bfb27
(fatal): Accept third parameter and pass down to
Andreas Schwab <schwab@suse.de>
parents:
59775
diff
changeset
|
633 fatal ("%s for %s", strerror (errno), name); |
23 | 634 } |
635 | |
9490
4e70299f958d
Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents:
9157
diff
changeset
|
636 void |
447
2e226dcdaf0f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
351
diff
changeset
|
637 pfatal_and_delete (name) |
2e226dcdaf0f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
351
diff
changeset
|
638 char *name; |
2e226dcdaf0f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
351
diff
changeset
|
639 { |
59918
5a468b3bfb27
(fatal): Accept third parameter and pass down to
Andreas Schwab <schwab@suse.de>
parents:
59775
diff
changeset
|
640 char *s = strerror (errno); |
447
2e226dcdaf0f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
351
diff
changeset
|
641 unlink (name); |
59918
5a468b3bfb27
(fatal): Accept third parameter and pass down to
Andreas Schwab <schwab@suse.de>
parents:
59775
diff
changeset
|
642 fatal ("%s for %s", s, name); |
447
2e226dcdaf0f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
351
diff
changeset
|
643 } |
2e226dcdaf0f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
351
diff
changeset
|
644 |
23 | 645 /* Return a newly-allocated string whose contents concatenate those of s1, s2, s3. */ |
646 | |
647 char * | |
648 concat (s1, s2, s3) | |
649 char *s1, *s2, *s3; | |
650 { | |
651 int len1 = strlen (s1), len2 = strlen (s2), len3 = strlen (s3); | |
652 char *result = (char *) xmalloc (len1 + len2 + len3 + 1); | |
653 | |
654 strcpy (result, s1); | |
655 strcpy (result + len1, s2); | |
656 strcpy (result + len1 + len2, s3); | |
657 *(result + len1 + len2 + len3) = 0; | |
658 | |
659 return result; | |
660 } | |
661 | |
662 /* Like malloc but get fatal error if memory is exhausted. */ | |
663 | |
11675
496576df5d46
(xmalloc): Declare it to return long *.
Richard M. Stallman <rms@gnu.org>
parents:
10399
diff
changeset
|
664 long * |
23 | 665 xmalloc (size) |
571 | 666 unsigned size; |
23 | 667 { |
11675
496576df5d46
(xmalloc): Declare it to return long *.
Richard M. Stallman <rms@gnu.org>
parents:
10399
diff
changeset
|
668 long *result = (long *) malloc (size); |
23 | 669 if (!result) |
59918
5a468b3bfb27
(fatal): Accept third parameter and pass down to
Andreas Schwab <schwab@suse.de>
parents:
59775
diff
changeset
|
670 fatal ("virtual memory exhausted", 0, 0); |
23 | 671 return result; |
672 } | |
673 | |
674 /* This is the guts of the interface to the Post Office Protocol. */ | |
675 | |
676 #ifdef MAIL_USE_POP | |
677 | |
15101
f86169152e74
(access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents:
14649
diff
changeset
|
678 #ifndef WINDOWSNT |
23 | 679 #include <sys/socket.h> |
680 #include <netinet/in.h> | |
681 #include <netdb.h> | |
15101
f86169152e74
(access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents:
14649
diff
changeset
|
682 #else |
f86169152e74
(access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents:
14649
diff
changeset
|
683 #undef _WINSOCKAPI_ |
f86169152e74
(access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents:
14649
diff
changeset
|
684 #include <winsock.h> |
f86169152e74
(access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents:
14649
diff
changeset
|
685 #endif |
634
52d0ff659265
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
604
diff
changeset
|
686 #include <pwd.h> |
101936
696b3e7c297b
(mbx_delimit_begin): Also write the current time.
Glenn Morris <rgm@gnu.org>
parents:
101915
diff
changeset
|
687 #include <string.h> |
23 | 688 |
689 #define NOTOK (-1) | |
690 #define OK 0 | |
691 #define DONE 1 | |
692 | |
693 char *progname; | |
694 FILE *sfi; | |
695 FILE *sfo; | |
9157
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
696 char ibuffer[BUFSIZ]; |
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
697 char obuffer[BUFSIZ]; |
29046
7d5565d3cf32
Include config.h, not ../src/config.h.
Dave Love <fx@gnu.org>
parents:
27507
diff
changeset
|
698 char Errmsg[200]; /* POP errors, at least, can exceed |
7d5565d3cf32
Include config.h, not ../src/config.h.
Dave Love <fx@gnu.org>
parents:
27507
diff
changeset
|
699 the original length of 80. */ |
23 | 700 |
26794
535af4b15059
(popmail): Allow mailbox specifications of the
Gerd Moellmann <gerd@gnu.org>
parents:
26083
diff
changeset
|
701 /* |
80028
f56936039199
*** empty log message ***
Juanma Barranquero <lekktu@gmail.com>
parents:
79748
diff
changeset
|
702 * The full valid syntax for a POP mailbox specification for movemail |
26794
535af4b15059
(popmail): Allow mailbox specifications of the
Gerd Moellmann <gerd@gnu.org>
parents:
26083
diff
changeset
|
703 * is "po:username:hostname". The ":hostname" is optional; if it is |
535af4b15059
(popmail): Allow mailbox specifications of the
Gerd Moellmann <gerd@gnu.org>
parents:
26083
diff
changeset
|
704 * omitted, the MAILHOST environment variable will be consulted. Note |
535af4b15059
(popmail): Allow mailbox specifications of the
Gerd Moellmann <gerd@gnu.org>
parents:
26083
diff
changeset
|
705 * that by the time popmail() is called the "po:" has been stripped |
535af4b15059
(popmail): Allow mailbox specifications of the
Gerd Moellmann <gerd@gnu.org>
parents:
26083
diff
changeset
|
706 * off of the front of the mailbox name. |
535af4b15059
(popmail): Allow mailbox specifications of the
Gerd Moellmann <gerd@gnu.org>
parents:
26083
diff
changeset
|
707 * |
535af4b15059
(popmail): Allow mailbox specifications of the
Gerd Moellmann <gerd@gnu.org>
parents:
26083
diff
changeset
|
708 * If the mailbox is in the form "po:username:hostname", then it is |
535af4b15059
(popmail): Allow mailbox specifications of the
Gerd Moellmann <gerd@gnu.org>
parents:
26083
diff
changeset
|
709 * modified by this function -- the second colon is replaced by a |
535af4b15059
(popmail): Allow mailbox specifications of the
Gerd Moellmann <gerd@gnu.org>
parents:
26083
diff
changeset
|
710 * null. |
55442
a47704955f8d
Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
52401
diff
changeset
|
711 * |
a47704955f8d
Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
52401
diff
changeset
|
712 * Return a value suitable for passing to `exit'. |
26794
535af4b15059
(popmail): Allow mailbox specifications of the
Gerd Moellmann <gerd@gnu.org>
parents:
26083
diff
changeset
|
713 */ |
535af4b15059
(popmail): Allow mailbox specifications of the
Gerd Moellmann <gerd@gnu.org>
parents:
26083
diff
changeset
|
714 |
31233
77ed917b12ee
(toplevel) [HAVE_STRING_H]: Include string.h.
Dave Love <fx@gnu.org>
parents:
31080
diff
changeset
|
715 int |
26794
535af4b15059
(popmail): Allow mailbox specifications of the
Gerd Moellmann <gerd@gnu.org>
parents:
26083
diff
changeset
|
716 popmail (mailbox, outfile, preserve, password, reverse_order) |
535af4b15059
(popmail): Allow mailbox specifications of the
Gerd Moellmann <gerd@gnu.org>
parents:
26083
diff
changeset
|
717 char *mailbox; |
120 | 718 char *outfile; |
16909
d878e23bbfa6
(main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents:
16897
diff
changeset
|
719 int preserve; |
15101
f86169152e74
(access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents:
14649
diff
changeset
|
720 char *password; |
23182
0ba967162ee0
[MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents:
22316
diff
changeset
|
721 int reverse_order; |
23 | 722 { |
120 | 723 int nmsgs, nbytes; |
724 register int i; | |
725 int mbfi; | |
726 FILE *mbf; | |
9157
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
727 char *getenv (); |
9630
5410efcb7b6e
PopServer renamed to popserver throughout.
Richard M. Stallman <rms@gnu.org>
parents:
9612
diff
changeset
|
728 popserver server; |
23182
0ba967162ee0
[MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents:
22316
diff
changeset
|
729 int start, end, increment; |
26794
535af4b15059
(popmail): Allow mailbox specifications of the
Gerd Moellmann <gerd@gnu.org>
parents:
26083
diff
changeset
|
730 char *user, *hostname; |
23 | 731 |
26794
535af4b15059
(popmail): Allow mailbox specifications of the
Gerd Moellmann <gerd@gnu.org>
parents:
26083
diff
changeset
|
732 user = mailbox; |
535af4b15059
(popmail): Allow mailbox specifications of the
Gerd Moellmann <gerd@gnu.org>
parents:
26083
diff
changeset
|
733 if ((hostname = index(mailbox, ':'))) |
535af4b15059
(popmail): Allow mailbox specifications of the
Gerd Moellmann <gerd@gnu.org>
parents:
26083
diff
changeset
|
734 *hostname++ = '\0'; |
535af4b15059
(popmail): Allow mailbox specifications of the
Gerd Moellmann <gerd@gnu.org>
parents:
26083
diff
changeset
|
735 |
535af4b15059
(popmail): Allow mailbox specifications of the
Gerd Moellmann <gerd@gnu.org>
parents:
26083
diff
changeset
|
736 server = pop_open (hostname, user, password, POP_NO_GETPASS); |
9157
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
737 if (! server) |
120 | 738 { |
31233
77ed917b12ee
(toplevel) [HAVE_STRING_H]: Include string.h.
Dave Love <fx@gnu.org>
parents:
31080
diff
changeset
|
739 error ("Error connecting to POP server: %s", pop_error, 0); |
55442
a47704955f8d
Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
52401
diff
changeset
|
740 return EXIT_FAILURE; |
23 | 741 } |
742 | |
9157
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
743 if (pop_stat (server, &nmsgs, &nbytes)) |
120 | 744 { |
31233
77ed917b12ee
(toplevel) [HAVE_STRING_H]: Include string.h.
Dave Love <fx@gnu.org>
parents:
31080
diff
changeset
|
745 error ("Error getting message count from POP server: %s", pop_error, 0); |
55442
a47704955f8d
Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
52401
diff
changeset
|
746 return EXIT_FAILURE; |
120 | 747 } |
23 | 748 |
120 | 749 if (!nmsgs) |
750 { | |
9157
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
751 pop_close (server); |
55442
a47704955f8d
Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
52401
diff
changeset
|
752 return EXIT_SUCCESS; |
23 | 753 } |
754 | |
120 | 755 mbfi = open (outfile, O_WRONLY | O_CREAT | O_EXCL, 0666); |
756 if (mbfi < 0) | |
757 { | |
9157
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
758 pop_close (server); |
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
759 error ("Error in open: %s, %s", strerror (errno), outfile); |
55442
a47704955f8d
Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
52401
diff
changeset
|
760 return EXIT_FAILURE; |
120 | 761 } |
762 fchown (mbfi, getuid (), -1); | |
763 | |
15101
f86169152e74
(access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents:
14649
diff
changeset
|
764 if ((mbf = fdopen (mbfi, "wb")) == NULL) |
120 | 765 { |
9157
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
766 pop_close (server); |
31233
77ed917b12ee
(toplevel) [HAVE_STRING_H]: Include string.h.
Dave Love <fx@gnu.org>
parents:
31080
diff
changeset
|
767 error ("Error in fdopen: %s", strerror (errno), 0); |
9157
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
768 close (mbfi); |
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
769 unlink (outfile); |
55442
a47704955f8d
Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
52401
diff
changeset
|
770 return EXIT_FAILURE; |
120 | 771 } |
772 | |
23182
0ba967162ee0
[MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents:
22316
diff
changeset
|
773 if (reverse_order) |
0ba967162ee0
[MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents:
22316
diff
changeset
|
774 { |
0ba967162ee0
[MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents:
22316
diff
changeset
|
775 start = nmsgs; |
0ba967162ee0
[MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents:
22316
diff
changeset
|
776 end = 1; |
0ba967162ee0
[MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents:
22316
diff
changeset
|
777 increment = -1; |
0ba967162ee0
[MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents:
22316
diff
changeset
|
778 } |
0ba967162ee0
[MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents:
22316
diff
changeset
|
779 else |
0ba967162ee0
[MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents:
22316
diff
changeset
|
780 { |
0ba967162ee0
[MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents:
22316
diff
changeset
|
781 start = 1; |
0ba967162ee0
[MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents:
22316
diff
changeset
|
782 end = nmsgs; |
0ba967162ee0
[MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents:
22316
diff
changeset
|
783 increment = 1; |
0ba967162ee0
[MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents:
22316
diff
changeset
|
784 } |
0ba967162ee0
[MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents:
22316
diff
changeset
|
785 |
0ba967162ee0
[MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents:
22316
diff
changeset
|
786 for (i = start; i * increment <= end * increment; i += increment) |
120 | 787 { |
788 mbx_delimit_begin (mbf); | |
17069
0b2b8a0f7570
(popmail): Remove some unnecessary function
Karl Heuer <kwzh@gnu.org>
parents:
16994
diff
changeset
|
789 if (pop_retr (server, i, mbf) != OK) |
120 | 790 { |
59775
d39551ad7f40
(popmail): Don't use Errmsg as format string.
Richard M. Stallman <rms@gnu.org>
parents:
55442
diff
changeset
|
791 error ("%s", Errmsg, 0); |
120 | 792 close (mbfi); |
55442
a47704955f8d
Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
52401
diff
changeset
|
793 return EXIT_FAILURE; |
120 | 794 } |
795 mbx_delimit_end (mbf); | |
796 fflush (mbf); | |
9157
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
797 if (ferror (mbf)) |
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
798 { |
31233
77ed917b12ee
(toplevel) [HAVE_STRING_H]: Include string.h.
Dave Love <fx@gnu.org>
parents:
31080
diff
changeset
|
799 error ("Error in fflush: %s", strerror (errno), 0); |
9157
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
800 pop_close (server); |
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
801 close (mbfi); |
55442
a47704955f8d
Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
52401
diff
changeset
|
802 return EXIT_FAILURE; |
9157
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
803 } |
120 | 804 } |
805 | |
9157
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
806 /* On AFS, a call to write only modifies the file in the local |
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
807 * workstation's AFS cache. The changes are not written to the server |
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
808 * until a call to fsync or close is made. Users with AFS home |
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
809 * directories have lost mail when over quota because these checks were |
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
810 * not made in previous versions of movemail. */ |
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
811 |
16218
32f82ca8b41f
Replaced all BSD with BSD_SYSTEM.
Karl Heuer <kwzh@gnu.org>
parents:
15105
diff
changeset
|
812 #ifdef BSD_SYSTEM |
447
2e226dcdaf0f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
351
diff
changeset
|
813 if (fsync (mbfi) < 0) |
2e226dcdaf0f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
351
diff
changeset
|
814 { |
40683
580a1a573d3e
(popmail): Always pass two args to `error'.
Richard M. Stallman <rms@gnu.org>
parents:
31376
diff
changeset
|
815 error ("Error in fsync: %s", strerror (errno), 0); |
55442
a47704955f8d
Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
52401
diff
changeset
|
816 return EXIT_FAILURE; |
447
2e226dcdaf0f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
351
diff
changeset
|
817 } |
9491
dd3b83e4ceb0
Eliminate some -Wall warnings.
David J. MacKenzie <djm@gnu.org>
parents:
9490
diff
changeset
|
818 #endif |
447
2e226dcdaf0f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
351
diff
changeset
|
819 |
2e226dcdaf0f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
351
diff
changeset
|
820 if (close (mbfi) == -1) |
2e226dcdaf0f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
351
diff
changeset
|
821 { |
31233
77ed917b12ee
(toplevel) [HAVE_STRING_H]: Include string.h.
Dave Love <fx@gnu.org>
parents:
31080
diff
changeset
|
822 error ("Error in close: %s", strerror (errno), 0); |
55442
a47704955f8d
Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
52401
diff
changeset
|
823 return EXIT_FAILURE; |
447
2e226dcdaf0f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
351
diff
changeset
|
824 } |
2e226dcdaf0f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
351
diff
changeset
|
825 |
16909
d878e23bbfa6
(main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents:
16897
diff
changeset
|
826 if (! preserve) |
d878e23bbfa6
(main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents:
16897
diff
changeset
|
827 for (i = 1; i <= nmsgs; i++) |
d878e23bbfa6
(main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents:
16897
diff
changeset
|
828 { |
d878e23bbfa6
(main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents:
16897
diff
changeset
|
829 if (pop_delete (server, i)) |
d878e23bbfa6
(main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents:
16897
diff
changeset
|
830 { |
31233
77ed917b12ee
(toplevel) [HAVE_STRING_H]: Include string.h.
Dave Love <fx@gnu.org>
parents:
31080
diff
changeset
|
831 error ("Error from POP server: %s", pop_error, 0); |
16909
d878e23bbfa6
(main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents:
16897
diff
changeset
|
832 pop_close (server); |
55442
a47704955f8d
Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
52401
diff
changeset
|
833 return EXIT_FAILURE; |
16909
d878e23bbfa6
(main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents:
16897
diff
changeset
|
834 } |
d878e23bbfa6
(main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents:
16897
diff
changeset
|
835 } |
23 | 836 |
9157
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
837 if (pop_quit (server)) |
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
838 { |
31233
77ed917b12ee
(toplevel) [HAVE_STRING_H]: Include string.h.
Dave Love <fx@gnu.org>
parents:
31080
diff
changeset
|
839 error ("Error from POP server: %s", pop_error, 0); |
55442
a47704955f8d
Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
52401
diff
changeset
|
840 return EXIT_FAILURE; |
9157
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
841 } |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48314
diff
changeset
|
842 |
55442
a47704955f8d
Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
52401
diff
changeset
|
843 return EXIT_SUCCESS; |
23 | 844 } |
845 | |
17069
0b2b8a0f7570
(popmail): Remove some unnecessary function
Karl Heuer <kwzh@gnu.org>
parents:
16994
diff
changeset
|
846 int |
0b2b8a0f7570
(popmail): Remove some unnecessary function
Karl Heuer <kwzh@gnu.org>
parents:
16994
diff
changeset
|
847 pop_retr (server, msgno, arg) |
9630
5410efcb7b6e
PopServer renamed to popserver throughout.
Richard M. Stallman <rms@gnu.org>
parents:
9612
diff
changeset
|
848 popserver server; |
48314 | 849 int msgno; |
17069
0b2b8a0f7570
(popmail): Remove some unnecessary function
Karl Heuer <kwzh@gnu.org>
parents:
16994
diff
changeset
|
850 FILE *arg; |
23 | 851 { |
9157
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
852 extern char *strerror (); |
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
853 char *line; |
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
854 int ret; |
23 | 855 |
9157
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
856 if (pop_retrieve_first (server, msgno, &line)) |
120 | 857 { |
23290
9917b9a0024d
(popmail, pop_retr) [MAIL_USE_POP]: When displaying
Karl Heuer <kwzh@gnu.org>
parents:
23182
diff
changeset
|
858 char *error = concat ("Error from POP server: ", pop_error, ""); |
9917b9a0024d
(popmail, pop_retr) [MAIL_USE_POP]: When displaying
Karl Heuer <kwzh@gnu.org>
parents:
23182
diff
changeset
|
859 strncpy (Errmsg, error, sizeof (Errmsg)); |
9157
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
860 Errmsg[sizeof (Errmsg)-1] = '\0'; |
23290
9917b9a0024d
(popmail, pop_retr) [MAIL_USE_POP]: When displaying
Karl Heuer <kwzh@gnu.org>
parents:
23182
diff
changeset
|
861 free(error); |
9157
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
862 return (NOTOK); |
23 | 863 } |
864 | |
20418
7e1538a45702
Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents:
20387
diff
changeset
|
865 while ((ret = pop_retrieve_next (server, &line)) >= 0) |
120 | 866 { |
9157
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
867 if (! line) |
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
868 break; |
23 | 869 |
20418
7e1538a45702
Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents:
20387
diff
changeset
|
870 if (mbx_write (line, ret, arg) != OK) |
9157
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
871 { |
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
872 strcpy (Errmsg, strerror (errno)); |
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
873 pop_close (server); |
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
874 return (NOTOK); |
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
875 } |
23 | 876 } |
877 | |
9157
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
878 if (ret) |
120 | 879 { |
23290
9917b9a0024d
(popmail, pop_retr) [MAIL_USE_POP]: When displaying
Karl Heuer <kwzh@gnu.org>
parents:
23182
diff
changeset
|
880 char *error = concat ("Error from POP server: ", pop_error, ""); |
9917b9a0024d
(popmail, pop_retr) [MAIL_USE_POP]: When displaying
Karl Heuer <kwzh@gnu.org>
parents:
23182
diff
changeset
|
881 strncpy (Errmsg, error, sizeof (Errmsg)); |
9157
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
882 Errmsg[sizeof (Errmsg)-1] = '\0'; |
23290
9917b9a0024d
(popmail, pop_retr) [MAIL_USE_POP]: When displaying
Karl Heuer <kwzh@gnu.org>
parents:
23182
diff
changeset
|
883 free(error); |
9157
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
884 return (NOTOK); |
23 | 885 } |
9157
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
886 |
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
887 return (OK); |
23 | 888 } |
889 | |
9157
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
890 /* Do this as a macro instead of using strcmp to save on execution time. */ |
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
891 #define IS_FROM_LINE(a) ((a[0] == 'F') \ |
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
892 && (a[1] == 'r') \ |
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
893 && (a[2] == 'o') \ |
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
894 && (a[3] == 'm') \ |
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
895 && (a[4] == ' ')) |
23 | 896 |
9157
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
897 int |
20418
7e1538a45702
Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents:
20387
diff
changeset
|
898 mbx_write (line, len, mbf) |
120 | 899 char *line; |
20418
7e1538a45702
Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents:
20387
diff
changeset
|
900 int len; |
120 | 901 FILE *mbf; |
23 | 902 { |
20387
4c524f5214ce
(mbx_write) [MAIL_USE_POP]: Disable the code which quotes with a
Paul Eggert <eggert@twinsun.com>
parents:
18626
diff
changeset
|
903 #ifdef MOVEMAIL_QUOTE_POP_FROM_LINES |
9157
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
904 if (IS_FROM_LINE (line)) |
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
905 { |
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
906 if (fputc ('>', mbf) == EOF) |
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
907 return (NOTOK); |
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
908 } |
20387
4c524f5214ce
(mbx_write) [MAIL_USE_POP]: Disable the code which quotes with a
Paul Eggert <eggert@twinsun.com>
parents:
18626
diff
changeset
|
909 #endif |
4c524f5214ce
(mbx_write) [MAIL_USE_POP]: Disable the code which quotes with a
Paul Eggert <eggert@twinsun.com>
parents:
18626
diff
changeset
|
910 if (line[0] == '\037') |
4c524f5214ce
(mbx_write) [MAIL_USE_POP]: Disable the code which quotes with a
Paul Eggert <eggert@twinsun.com>
parents:
18626
diff
changeset
|
911 { |
4c524f5214ce
(mbx_write) [MAIL_USE_POP]: Disable the code which quotes with a
Paul Eggert <eggert@twinsun.com>
parents:
18626
diff
changeset
|
912 if (fputs ("^_", mbf) == EOF) |
4c524f5214ce
(mbx_write) [MAIL_USE_POP]: Disable the code which quotes with a
Paul Eggert <eggert@twinsun.com>
parents:
18626
diff
changeset
|
913 return (NOTOK); |
4c524f5214ce
(mbx_write) [MAIL_USE_POP]: Disable the code which quotes with a
Paul Eggert <eggert@twinsun.com>
parents:
18626
diff
changeset
|
914 line++; |
4c524f5214ce
(mbx_write) [MAIL_USE_POP]: Disable the code which quotes with a
Paul Eggert <eggert@twinsun.com>
parents:
18626
diff
changeset
|
915 len--; |
4c524f5214ce
(mbx_write) [MAIL_USE_POP]: Disable the code which quotes with a
Paul Eggert <eggert@twinsun.com>
parents:
18626
diff
changeset
|
916 } |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48314
diff
changeset
|
917 if (fwrite (line, 1, len, mbf) != len) |
9157
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
918 return (NOTOK); |
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
919 if (fputc (0x0a, mbf) == EOF) |
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
920 return (NOTOK); |
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
921 return (OK); |
23 | 922 } |
923 | |
9157
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
924 int |
120 | 925 mbx_delimit_begin (mbf) |
926 FILE *mbf; | |
23 | 927 { |
101936
696b3e7c297b
(mbx_delimit_begin): Also write the current time.
Glenn Morris <rgm@gnu.org>
parents:
101915
diff
changeset
|
928 time_t now; |
696b3e7c297b
(mbx_delimit_begin): Also write the current time.
Glenn Morris <rgm@gnu.org>
parents:
101915
diff
changeset
|
929 struct tm *ltime; |
696b3e7c297b
(mbx_delimit_begin): Also write the current time.
Glenn Morris <rgm@gnu.org>
parents:
101915
diff
changeset
|
930 char fromline[40] = "From movemail "; |
696b3e7c297b
(mbx_delimit_begin): Also write the current time.
Glenn Morris <rgm@gnu.org>
parents:
101915
diff
changeset
|
931 |
696b3e7c297b
(mbx_delimit_begin): Also write the current time.
Glenn Morris <rgm@gnu.org>
parents:
101915
diff
changeset
|
932 now = time (NULL); |
696b3e7c297b
(mbx_delimit_begin): Also write the current time.
Glenn Morris <rgm@gnu.org>
parents:
101915
diff
changeset
|
933 ltime = localtime (&now); |
696b3e7c297b
(mbx_delimit_begin): Also write the current time.
Glenn Morris <rgm@gnu.org>
parents:
101915
diff
changeset
|
934 |
696b3e7c297b
(mbx_delimit_begin): Also write the current time.
Glenn Morris <rgm@gnu.org>
parents:
101915
diff
changeset
|
935 strcat (fromline, asctime (ltime)); |
696b3e7c297b
(mbx_delimit_begin): Also write the current time.
Glenn Morris <rgm@gnu.org>
parents:
101915
diff
changeset
|
936 |
696b3e7c297b
(mbx_delimit_begin): Also write the current time.
Glenn Morris <rgm@gnu.org>
parents:
101915
diff
changeset
|
937 if (fputs (fromline, mbf) == EOF) |
9157
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
938 return (NOTOK); |
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
939 return (OK); |
23 | 940 } |
941 | |
31233
77ed917b12ee
(toplevel) [HAVE_STRING_H]: Include string.h.
Dave Love <fx@gnu.org>
parents:
31080
diff
changeset
|
942 int |
120 | 943 mbx_delimit_end (mbf) |
944 FILE *mbf; | |
23 | 945 { |
101915
091a8cf73243
(mbx_delimit_begin, mbx_delimit_end): Write mbox rather than Babyl
Glenn Morris <rgm@gnu.org>
parents:
100958
diff
changeset
|
946 if (putc ('\n', mbf) == EOF) |
9157
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
947 return (NOTOK); |
29f4cce05fa5
Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents:
8449
diff
changeset
|
948 return (OK); |
23 | 949 } |
950 | |
951 #endif /* MAIL_USE_POP */ | |
5532
9c86c71e879d
[! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents:
5524
diff
changeset
|
952 |
9c86c71e879d
[! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents:
5524
diff
changeset
|
953 #ifndef HAVE_STRERROR |
9c86c71e879d
[! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents:
5524
diff
changeset
|
954 char * |
9c86c71e879d
[! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents:
5524
diff
changeset
|
955 strerror (errnum) |
9c86c71e879d
[! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents:
5524
diff
changeset
|
956 int errnum; |
9c86c71e879d
[! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents:
5524
diff
changeset
|
957 { |
9c86c71e879d
[! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents:
5524
diff
changeset
|
958 extern char *sys_errlist[]; |
9c86c71e879d
[! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents:
5524
diff
changeset
|
959 extern int sys_nerr; |
9c86c71e879d
[! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents:
5524
diff
changeset
|
960 |
9c86c71e879d
[! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents:
5524
diff
changeset
|
961 if (errnum >= 0 && errnum < sys_nerr) |
9c86c71e879d
[! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents:
5524
diff
changeset
|
962 return sys_errlist[errnum]; |
9c86c71e879d
[! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents:
5524
diff
changeset
|
963 return (char *) "Unknown error"; |
9c86c71e879d
[! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents:
5524
diff
changeset
|
964 } |
9c86c71e879d
[! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents:
5524
diff
changeset
|
965 |
9c86c71e879d
[! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents:
5524
diff
changeset
|
966 #endif /* ! HAVE_STRERROR */ |
52401 | 967 |
968 /* arch-tag: 1c323112-41fe-4fe5-8de9-494de631f73f | |
969 (do not change this comment) */ | |
55442
a47704955f8d
Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
52401
diff
changeset
|
970 |
a47704955f8d
Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
52401
diff
changeset
|
971 /* movemail.c ends here */ |