annotate src/online.c @ 203:45acc5727493

removed --with-glib-static configure option linking glib statically is interesting if no other program uses it on today's systems glib is widely used if one cares on linking statically, he can link everything statically the special case for glib will not get special care anymore
author meillo@marmaro.de
date Fri, 16 Jul 2010 14:48:17 +0200
parents 5b621742b2e7
children 3708b655a371
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
1 /* MasqMail
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
2 Copyright (C) 1999-2001 Oliver Kurth
76
3b344bf57162 added copyright notices to files I improved
meillo@marmaro.de
parents: 51
diff changeset
3 Copyright (C) 2008 markus schnalke <meillo@marmaro.de>
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
4
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
5 This program is free software; you can redistribute it and/or modify
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
6 it under the terms of the GNU General Public License as published by
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
7 the Free Software Foundation; either version 2 of the License, or
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
8 (at your option) any later version.
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
9
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
10 This program is distributed in the hope that it will be useful,
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
13 GNU General Public License for more details.
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
14
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
15 You should have received a copy of the GNU General Public License
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
16 along with this program; if not, write to the Free Software
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
18 */
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
19
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
20 #include <sys/stat.h>
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
21 #include <sys/wait.h>
15
f671821d8222 code beautifying; 0 -> \0 if appropriate
meillo@marmaro.de
parents: 10
diff changeset
22
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
23 #include "masqmail.h"
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
24 #include "peopen.h"
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
25
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
26 gchar *connection_name;
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
27
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
28 void
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
29 set_online_name(gchar * name)
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
30 {
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
31 connection_name = g_strdup(name);
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
32 }
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
33
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
34 static gchar*
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
35 detect_online_pipe(const gchar * pipe)
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
36 {
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
37 pid_t pid;
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
38 void (*old_signal) (int);
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
39 int status;
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
40 FILE *in;
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
41 gchar *name = NULL;
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
42
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
43 old_signal = signal(SIGCHLD, SIG_DFL);
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
44
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
45 in = peopen(pipe, "r", environ, &pid);
33
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
46 if (in == NULL) {
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
47 logwrite(LOG_ALERT, "could not open pipe '%s': %s\n", pipe, strerror(errno));
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
48 signal(SIGCHLD, old_signal);
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
49 return NULL;
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
50 }
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
51
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
52 gchar output[256];
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
53 if (fgets(output, 255, in)) {
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
54 g_strchomp(g_strchug(output));
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
55 if (strlen(output) == 0) {
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
56 logwrite(LOG_ALERT, "only whitespace connection name\n");
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
57 name = NULL;
18
99c09ed776c1 fixed empty or only-whitespace connection names
meillo@marmaro.de
parents: 15
diff changeset
58 } else {
33
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
59 name = g_strdup(output);
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
60 }
33
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
61 } else {
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
62 logwrite(LOG_ALERT, "nothing read from pipe %s\n", pipe);
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
63 name = NULL;
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
64 }
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
65 fclose(in);
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
66 waitpid(pid, &status, 0);
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
67 if (WEXITSTATUS(status) != EXIT_SUCCESS) {
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
68 g_free(name);
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
69 name = NULL;
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
70 }
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
71
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
72 signal(SIGCHLD, old_signal);
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
73
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
74 return name;
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
75 }
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
76
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
77 gchar*
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
78 detect_online()
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
79 {
33
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
80 if (conf.online_detect == NULL) {
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
81 return NULL;
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
82 }
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
83
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
84 if (strcmp(conf.online_detect, "file") == 0) {
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
85 DEBUG(3) debugf("online detection method 'file'\n");
51
8a92de5e8907 fixed inverted condition for undefined online_file
meillo@marmaro.de
parents: 33
diff changeset
86 if (conf.online_file == NULL) {
33
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
87 logwrite(LOG_ALERT, "online detection mode is 'file', but online_file is undefined\n");
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
88 return NULL;
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
89 }
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
90
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
91 struct stat st;
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
92 if (stat(conf.online_file, &st) == 0) {
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
93 FILE *fptr = fopen(conf.online_file, "r");
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
94 if (!fptr) {
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
95 logwrite(LOG_ALERT, "opening of %s failed: %s\n", conf.online_file, strerror(errno));
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
96 return NULL;
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
97 }
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
98 char buf[256];
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
99 if (fgets(buf, 256, fptr) == NULL) {
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
100 logwrite(LOG_ALERT, "empty online file %s\n", conf.online_file);
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
101 fclose(fptr);
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
102 return NULL;
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
103 }
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
104 g_strchomp(g_strchug(buf));
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
105 fclose(fptr);
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
106 if (strlen(buf) == 0) {
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
107 logwrite(LOG_ALERT, "only whitespace connection name in %s\n", conf.online_file);
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
108 return NULL;
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
109 }
33
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
110 return g_strdup(buf);
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
111 } else if (errno == ENOENT) {
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
112 logwrite(LOG_NOTICE, "not online.\n");
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
113 return NULL;
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
114 } else {
33
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
115 logwrite(LOG_ALERT, "stat of %s failed: %s", conf.online_file, strerror(errno));
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
116 return NULL;
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
117 }
33
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
118
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
119 } else if (strcmp(conf.online_detect, "pipe") == 0) {
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
120 DEBUG(3) debugf("connection method 'pipe'\n");
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
121 if (conf.online_pipe)
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
122 return detect_online_pipe(conf.online_pipe);
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
123 else {
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
124 logwrite(LOG_ALERT, "online detection mode is 'pipe', but online_pipe is undefined\n");
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
125 return NULL;
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
126 }
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
127 } else if (strcmp(conf.online_detect, "argument") == 0) {
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
128 return connection_name;
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
129 } else {
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
130 DEBUG(3) debugf("no connection method selected\n");
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
131 }
33
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
132
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
133 return NULL;
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
134 }