annotate src/online.c @ 170:0f0e4e7cd762

added misc/list-versions This script helps to check if the versions numbers in the project are the same as the one for the release. This script is motivated by the 0.2.27 release in which masqmail introduces itself as being version 0.2.26.
author meillo@marmaro.de
date Mon, 19 Jul 2010 14:01:13 +0200
parents 3b344bf57162
children
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 "mserver.h"
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
25 #include "peopen.h"
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
26
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
27 gchar *connection_name;
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
28
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
29 void
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
30 set_online_name(gchar * name)
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
31 {
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
32 connection_name = g_strdup(name);
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
33 }
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
34
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
35 static gchar*
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
36 detect_online_pipe(const gchar * pipe)
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
37 {
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
38 pid_t pid;
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
39 void (*old_signal) (int);
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
40 int status;
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
41 FILE *in;
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
42 gchar *name = NULL;
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
43
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
44 old_signal = signal(SIGCHLD, SIG_DFL);
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
45
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
46 in = peopen(pipe, "r", environ, &pid);
33
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
47 if (in == NULL) {
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
48 logwrite(LOG_ALERT, "could not open pipe '%s': %s\n", pipe, strerror(errno));
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
49 signal(SIGCHLD, old_signal);
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
50 return NULL;
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
51 }
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
52
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
53 gchar output[256];
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
54 if (fgets(output, 255, in)) {
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
55 g_strchomp(g_strchug(output));
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
56 if (strlen(output) == 0) {
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
57 logwrite(LOG_ALERT, "only whitespace connection name\n");
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
58 name = NULL;
18
99c09ed776c1 fixed empty or only-whitespace connection names
meillo@marmaro.de
parents: 15
diff changeset
59 } else {
33
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
60 name = g_strdup(output);
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
61 }
33
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
62 } else {
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
63 logwrite(LOG_ALERT, "nothing read from pipe %s\n", pipe);
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
64 name = NULL;
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
65 }
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
66 fclose(in);
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
67 waitpid(pid, &status, 0);
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
68 if (WEXITSTATUS(status) != EXIT_SUCCESS) {
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
69 g_free(name);
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
70 name = NULL;
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
71 }
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
72
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
73 signal(SIGCHLD, old_signal);
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
74
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
75 return name;
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
76 }
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
77
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
78 gchar*
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
79 detect_online()
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
80 {
33
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
81 if (conf.online_detect == NULL) {
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
82 return NULL;
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
83 }
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
84
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
85 if (strcmp(conf.online_detect, "file") == 0) {
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
86 DEBUG(3) debugf("online detection method 'file'\n");
51
8a92de5e8907 fixed inverted condition for undefined online_file
meillo@marmaro.de
parents: 33
diff changeset
87 if (conf.online_file == NULL) {
33
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
88 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
89 return NULL;
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
90 }
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
91
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
92 struct stat st;
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
93 if (stat(conf.online_file, &st) == 0) {
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
94 FILE *fptr = fopen(conf.online_file, "r");
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
95 if (!fptr) {
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
96 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
97 return NULL;
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
98 }
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
99 char buf[256];
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
100 if (fgets(buf, 256, fptr) == NULL) {
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
101 logwrite(LOG_ALERT, "empty online file %s\n", conf.online_file);
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
102 fclose(fptr);
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
103 return NULL;
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
104 }
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
105 g_strchomp(g_strchug(buf));
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
106 fclose(fptr);
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
107 if (strlen(buf) == 0) {
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
108 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
109 return NULL;
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
110 }
33
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
111 return g_strdup(buf);
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
112 } else if (errno == ENOENT) {
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
113 logwrite(LOG_NOTICE, "not online.\n");
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
114 return NULL;
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
115 } else {
33
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
116 logwrite(LOG_ALERT, "stat of %s failed: %s", conf.online_file, strerror(errno));
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
117 return NULL;
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
118 }
33
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
119
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
120 #ifdef ENABLE_MSERVER
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
121 } else if (strcmp(conf.online_detect, "mserver") == 0) {
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
122 DEBUG(3) debugf("connection method 'mserver'\n");
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
123 return mserver_detect_online(conf.mserver_iface);
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
124 #endif
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
125 } else if (strcmp(conf.online_detect, "pipe") == 0) {
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
126 DEBUG(3) debugf("connection method 'pipe'\n");
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
127 if (conf.online_pipe)
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
128 return detect_online_pipe(conf.online_pipe);
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 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
131 return NULL;
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
132 }
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
133 } else if (strcmp(conf.online_detect, "argument") == 0) {
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
134 return connection_name;
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
135 } else {
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
136 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
137 }
33
e1004fcc93c9 flattened conditional nesting
meillo@marmaro.de
parents: 19
diff changeset
138
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
139 return NULL;
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
140 }