Mercurial > masqmail
annotate src/child.c @ 421:f37384470855
Changed lockdir to /var/lock/masqmail; Create lockdir and piddir on startup.
Moved the lockdir out of the spool dir. (When /var/lock is a ramdisk
we do well to have the lock files there.) Added the new configure option
--with-lockdir to change that location. Nontheless, if we run_as_user,
then lock files are always stored in the spool dir directly.
Instead of installing the lockdir and piddir at installation time, we
create them on startup time now if they are missing. This is necessary
if lockdir or piddir are a tmpfs.
author | markus schnalke <meillo@marmaro.de> |
---|---|
date | Wed, 30 May 2012 09:38:38 +0200 |
parents | 885e3d886199 |
children |
rev | line source |
---|---|
367
b27f66555ba8
Reformated multiline comments to have leading asterisks on each line
markus schnalke <meillo@marmaro.de>
parents:
262
diff
changeset
|
1 /* |
b27f66555ba8
Reformated multiline comments to have leading asterisks on each line
markus schnalke <meillo@marmaro.de>
parents:
262
diff
changeset
|
2 ** child.c |
b27f66555ba8
Reformated multiline comments to have leading asterisks on each line
markus schnalke <meillo@marmaro.de>
parents:
262
diff
changeset
|
3 ** Copyright (C) 2000 by Oliver Kurth, |
b27f66555ba8
Reformated multiline comments to have leading asterisks on each line
markus schnalke <meillo@marmaro.de>
parents:
262
diff
changeset
|
4 ** |
b27f66555ba8
Reformated multiline comments to have leading asterisks on each line
markus schnalke <meillo@marmaro.de>
parents:
262
diff
changeset
|
5 ** This program is free software; you can redistribute it and/or modify |
b27f66555ba8
Reformated multiline comments to have leading asterisks on each line
markus schnalke <meillo@marmaro.de>
parents:
262
diff
changeset
|
6 ** it under the terms of the GNU General Public License as published by |
b27f66555ba8
Reformated multiline comments to have leading asterisks on each line
markus schnalke <meillo@marmaro.de>
parents:
262
diff
changeset
|
7 ** the Free Software Foundation; either version 2 of the License, or |
b27f66555ba8
Reformated multiline comments to have leading asterisks on each line
markus schnalke <meillo@marmaro.de>
parents:
262
diff
changeset
|
8 ** (at your option) any later version. |
b27f66555ba8
Reformated multiline comments to have leading asterisks on each line
markus schnalke <meillo@marmaro.de>
parents:
262
diff
changeset
|
9 ** |
b27f66555ba8
Reformated multiline comments to have leading asterisks on each line
markus schnalke <meillo@marmaro.de>
parents:
262
diff
changeset
|
10 ** This program is distributed in the hope that it will be useful, |
b27f66555ba8
Reformated multiline comments to have leading asterisks on each line
markus schnalke <meillo@marmaro.de>
parents:
262
diff
changeset
|
11 ** but WITHOUT ANY WARRANTY; without even the implied warranty of |
b27f66555ba8
Reformated multiline comments to have leading asterisks on each line
markus schnalke <meillo@marmaro.de>
parents:
262
diff
changeset
|
12 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
b27f66555ba8
Reformated multiline comments to have leading asterisks on each line
markus schnalke <meillo@marmaro.de>
parents:
262
diff
changeset
|
13 ** GNU General Public License for more details. |
b27f66555ba8
Reformated multiline comments to have leading asterisks on each line
markus schnalke <meillo@marmaro.de>
parents:
262
diff
changeset
|
14 ** |
b27f66555ba8
Reformated multiline comments to have leading asterisks on each line
markus schnalke <meillo@marmaro.de>
parents:
262
diff
changeset
|
15 ** You should have received a copy of the GNU General Public License |
b27f66555ba8
Reformated multiline comments to have leading asterisks on each line
markus schnalke <meillo@marmaro.de>
parents:
262
diff
changeset
|
16 ** along with this program; if not, write to the Free Software |
b27f66555ba8
Reformated multiline comments to have leading asterisks on each line
markus schnalke <meillo@marmaro.de>
parents:
262
diff
changeset
|
17 ** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
b27f66555ba8
Reformated multiline comments to have leading asterisks on each line
markus schnalke <meillo@marmaro.de>
parents:
262
diff
changeset
|
18 */ |
0 | 19 |
20 #include <errno.h> | |
21 #include <stdio.h> | |
22 #include <stdlib.h> | |
23 #include <unistd.h> | |
24 #include <signal.h> | |
25 #include <sys/types.h> | |
26 #include <sys/socket.h> | |
27 #include <syslog.h> | |
28 #include <string.h> | |
29 | |
30 #include "masqmail.h" | |
31 | |
32 | |
10
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
33 int |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
34 child(const char *command) |
0 | 35 { |
10
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
36 int pipe[2]; |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
37 |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
38 if (socketpair(AF_UNIX, SOCK_STREAM, 0, pipe) == 0) { |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
39 pid_t pid; |
0 | 40 |
10
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
41 pid = fork(); |
391
0ca270ca11fa
Refactoring and code layouting.
markus schnalke <meillo@marmaro.de>
parents:
367
diff
changeset
|
42 if (pid == -1) { |
0ca270ca11fa
Refactoring and code layouting.
markus schnalke <meillo@marmaro.de>
parents:
367
diff
changeset
|
43 return -1; |
401
885e3d886199
Various minor refactoring.
markus schnalke <meillo@marmaro.de>
parents:
391
diff
changeset
|
44 |
391
0ca270ca11fa
Refactoring and code layouting.
markus schnalke <meillo@marmaro.de>
parents:
367
diff
changeset
|
45 } else if (pid == 0) { |
0ca270ca11fa
Refactoring and code layouting.
markus schnalke <meillo@marmaro.de>
parents:
367
diff
changeset
|
46 /* child */ |
401
885e3d886199
Various minor refactoring.
markus schnalke <meillo@marmaro.de>
parents:
391
diff
changeset
|
47 char *argv[] = { "/bin/sh", "-c", (char *)command, |
885e3d886199
Various minor refactoring.
markus schnalke <meillo@marmaro.de>
parents:
391
diff
changeset
|
48 NULL }; |
10
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
49 int i, max_fd = sysconf(_SC_OPEN_MAX); |
401
885e3d886199
Various minor refactoring.
markus schnalke <meillo@marmaro.de>
parents:
391
diff
changeset
|
50 |
10
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
51 dup2(pipe[0], 0); |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
52 dup2(pipe[0], 1); |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
53 dup2(pipe[0], 2); |
0 | 54 |
401
885e3d886199
Various minor refactoring.
markus schnalke <meillo@marmaro.de>
parents:
391
diff
changeset
|
55 if (max_fd <= 0) { |
10
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
56 max_fd = 64; |
401
885e3d886199
Various minor refactoring.
markus schnalke <meillo@marmaro.de>
parents:
391
diff
changeset
|
57 } |
885e3d886199
Various minor refactoring.
markus schnalke <meillo@marmaro.de>
parents:
391
diff
changeset
|
58 for (i = 3; i < max_fd; i++) { |
10
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
59 close(i); |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
60 } |
401
885e3d886199
Various minor refactoring.
markus schnalke <meillo@marmaro.de>
parents:
391
diff
changeset
|
61 execve(*argv, argv, NULL); |
391
0ca270ca11fa
Refactoring and code layouting.
markus schnalke <meillo@marmaro.de>
parents:
367
diff
changeset
|
62 logwrite(LOG_ALERT, "execve failed: %s\n", |
0ca270ca11fa
Refactoring and code layouting.
markus schnalke <meillo@marmaro.de>
parents:
367
diff
changeset
|
63 strerror(errno)); |
262
fc1c6425c024
s/EXIT_SUCCESS/0/ && s/EXIT_FAILURE/1/
markus schnalke <meillo@marmaro.de>
parents:
71
diff
changeset
|
64 _exit(1); |
401
885e3d886199
Various minor refactoring.
markus schnalke <meillo@marmaro.de>
parents:
391
diff
changeset
|
65 |
10
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
66 } else { |
391
0ca270ca11fa
Refactoring and code layouting.
markus schnalke <meillo@marmaro.de>
parents:
367
diff
changeset
|
67 /* parent */ |
10
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
68 close(pipe[0]); |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
69 return pipe[1]; |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
70 } |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
71 } |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
72 return -2; |
0 | 73 } |