s/qmail
4.2.29a
Next generation secure email transport
Loading...
Searching...
No Matches
sqmail-4.2.29a
src
qmail-newmrh.c
Go to the documentation of this file.
1
#include <unistd.h>
2
#include <sys/stat.h>
3
#include <stdio.h>
// rename
4
#include "logmsg.h"
5
#include "stralloc.h"
6
#include "buffer.h"
7
#include "getln.h"
8
#include "
exit.h
"
9
#include "open.h"
10
#include "
auto_qmail.h
"
11
#include "cdbmake.h"
12
#include "case.h"
13
14
#define WHO "qmail-newmrh"
15
16
int
rename
(
const
char
*,
const
char
*);
// stdio.h
17
18
void
die_read
()
19
{
20
logmsg(
WHO
,111,ERROR,
"unable to read control/morercpthosts"
);
21
}
22
void
die_write
()
23
{
24
logmsg(
WHO
,111,ERROR,
"unable to write to control/morercpthosts.tmp"
);
25
}
26
27
char
inbuf
[1024];
28
buffer
bi
;
29
30
int
fd
;
31
int
fdtemp
;
32
33
struct
cdb_make
cdb
;
34
stralloc
line
= {0};
35
int
match
;
36
37
int
main
()
38
{
39
umask(033);
40
if
(chdir(
auto_qmail
) == -1)
41
logmsg(
WHO
,111,ERROR,B(
"unable to chdir to: "
,
auto_qmail
));
42
43
fd
= open_read(
"control/morercpthosts"
);
44
if
(
fd
== -1)
die_read
();
45
46
buffer_init(&
bi
,read,
fd
,
inbuf
,
sizeof
(
inbuf
));
47
48
fdtemp
= open_trunc(
"control/morercpthosts.tmp"
);
49
if
(
fdtemp
== -1)
die_write
();
50
51
if
(cdb_make_start(&
cdb
,
fdtemp
) == -1)
die_write
();
52
53
for
(;;) {
54
if
(getln(&
bi
,&
line
,&
match
,
'\n'
) != 0)
die_read
();
55
case_lowerb(
line
.s,
line
.len);
56
while
(
line
.len) {
57
if
(
line
.s[
line
.len - 1] ==
' '
) { --
line
.len;
continue
; }
58
if
(
line
.s[
line
.len - 1] ==
'\n'
) { --
line
.len;
continue
; }
59
if
(
line
.s[
line
.len - 1] ==
'\t'
) { --
line
.len;
continue
; }
60
if
(
line
.s[0] !=
'#'
)
61
if
(cdb_make_add(&
cdb
,
line
.s,
line
.len,
""
,0) == -1)
62
die_write
();
63
break
;
64
}
65
if
(!
match
)
break
;
66
}
67
68
if
(cdb_make_finish(&
cdb
) == -1)
die_write
();
69
if
(fsync(
fdtemp
) == -1)
die_write
();
70
if
(close(
fdtemp
) == -1)
die_write
();
/* NFS stupidity */
71
if
(
rename
(
"control/morercpthosts.tmp"
,
"control/morercpthosts.cdb"
) == -1)
72
logmsg(
WHO
,111,ERROR,
"unable to move control/morercpthosts.tmp to control/morercpthosts.cdb"
);
73
74
_exit
(0);
75
}
auto_qmail.h
auto_qmail
char auto_qmail[]
exit.h
_exit
void _exit()
cdb
struct cdb_make cdb
Definition:
qmail-newmrh.c:33
inbuf
char inbuf[1024]
Definition:
qmail-newmrh.c:27
rename
int rename(const char *, const char *)
fd
int fd
Definition:
qmail-newmrh.c:30
die_write
void die_write()
Definition:
qmail-newmrh.c:22
die_read
void die_read()
Definition:
qmail-newmrh.c:18
line
stralloc line
Definition:
qmail-newmrh.c:34
bi
buffer bi
Definition:
qmail-newmrh.c:28
match
int match
Definition:
qmail-newmrh.c:35
WHO
#define WHO
Definition:
qmail-newmrh.c:14
fdtemp
int fdtemp
Definition:
qmail-newmrh.c:31
main
int main()
Definition:
qmail-newmrh.c:37
Generated on Thu Feb 29 2024 20:44:53 for s/qmail by
1.9.6