comparison src/get.c @ 10:26e34ae9a3e3

changed indention and line wrapping to a more consistent style
author meillo@marmaro.de
date Mon, 27 Oct 2008 16:23:10 +0100
parents 08114f7dcc23
children f671821d8222
comparison
equal deleted inserted replaced
9:31cc8a89cb74 10:26e34ae9a3e3
25 25
26 #ifdef ENABLE_POP3 26 #ifdef ENABLE_POP3
27 27
28 static int volatile sighup_seen = 0; 28 static int volatile sighup_seen = 0;
29 29
30 static 30 static void
31 void sighup_handler(int sig) 31 sighup_handler(int sig)
32 { 32 {
33 sighup_seen = 1; 33 sighup_seen = 1;
34 signal(SIGHUP, sighup_handler); 34 signal(SIGHUP, sighup_handler);
35 } 35 }
36 36
37 static 37 static void
38 void sigchld_handler(int sig) 38 sigchld_handler(int sig)
39 { 39 {
40 pid_t pid; 40 pid_t pid;
41 int status; 41 int status;
42 42
43 pid = waitpid(0, &status, 0); 43 pid = waitpid(0, &status, 0);
44 if(pid > 0){ 44 if (pid > 0) {
45 if(WEXITSTATUS(status) != EXIT_SUCCESS) 45 if (WEXITSTATUS(status) != EXIT_SUCCESS)
46 logwrite(LOG_WARNING, "process %d exited with %d\n", 46 logwrite(LOG_WARNING, "process %d exited with %d\n", pid, WEXITSTATUS(status));
47 pid, WEXITSTATUS(status)); 47 if (WIFSIGNALED(status))
48 if(WIFSIGNALED(status)) 48 logwrite(LOG_WARNING, "process with pid %d got signal: %d\n", pid, WTERMSIG(status));
49 logwrite(LOG_WARNING, 49 }
50 "process with pid %d got signal: %d\n", 50 signal(SIGCHLD, sigchld_handler);
51 pid, WTERMSIG(status)); 51 }
52 } 52
53 signal(SIGCHLD, sigchld_handler); 53 static int
54 } 54 get_lock(get_conf * gc)
55
56 static
57 int get_lock(get_conf *gc)
58 { 55 {
59 #ifdef USE_DOTLOCK 56 #ifdef USE_DOTLOCK
60 gboolean ok = FALSE; 57 gboolean ok = FALSE;
61 gchar *hitch_name; 58 gchar *hitch_name;
62 gchar *lock_name; 59 gchar *lock_name;
63 60
64 /* the name of the lock is constructed from the user 61 /* the name of the lock is constructed from the user
65 and the server name, to prevent more than one connection at the same time 62 and the server name, to prevent more than one connection at the same time
66 to the same server and the same user. This way concurrent connections 63 to the same server and the same user. This way concurrent connections
67 are possible to different servers or different users */ 64 are possible to different servers or different users */
68 hitch_name = g_strdup_printf("%s/masqmail-get-%s@%s-%d.lock", 65 hitch_name = g_strdup_printf("%s/masqmail-get-%s@%s-%d.lock", conf.lock_dir, gc->login_user, gc->server_name, getpid());
69 conf.lock_dir, gc->login_user, 66 lock_name = g_strdup_printf("%s/masqmail-get-%s@%s.lock", conf.lock_dir, gc->login_user, gc->server_name);
70 gc->server_name, getpid()); 67
71 lock_name = g_strdup_printf("%s/masqmail-get-%s@%s.lock", 68 ok = dot_lock(lock_name, hitch_name);
72 conf.lock_dir, gc->login_user, gc->server_name); 69 if (!ok)
73 70 logwrite(LOG_WARNING, "getting mail for %s@%s is locked\n", gc->login_user, gc->server_name);
74 ok = dot_lock(lock_name, hitch_name); 71
75 if(!ok) logwrite(LOG_WARNING, 72 g_free(lock_name);
76 "getting mail for %s@%s is locked\n", 73 g_free(hitch_name);
77 gc->login_user, gc->server_name); 74
78 75 return ok;
79 g_free(lock_name);
80 g_free(hitch_name);
81
82 return ok;
83 #else 76 #else
84 gchar *lock_name; 77 gchar *lock_name;
85 int fd; 78 int fd;
86 79
87 lock_name = g_strdup_printf("%s/masqmail-get-%s@%s.lock", 80 lock_name = g_strdup_printf("%s/masqmail-get-%s@%s.lock", conf.lock_dir, gc->login_user, gc->server_name);
88 conf.lock_dir, gc->login_user, gc->server_name); 81
89 82 if ((fd = open(lock_name, O_WRONLY | O_NDELAY | O_APPEND | O_CREAT, 0600)) >= 0) {
90 if((fd = open(lock_name, O_WRONLY|O_NDELAY|O_APPEND|O_CREAT, 0600)) >= 0){ 83 if (flock(fd, LOCK_EX | LOCK_NB) != 0) {
91 if(flock(fd, LOCK_EX|LOCK_NB) != 0){ 84 close(fd);
92 close(fd); 85 logwrite(LOG_WARNING, "getting mail for %s@%s is locked\n", gc->login_user, gc->server_name);
93 logwrite(LOG_WARNING, 86 fd = -1;
94 "getting mail for %s@%s is locked\n", 87 }
95 gc->login_user, gc->server_name); 88 } else
96 fd = -1; 89 logwrite(LOG_WARNING, "could not open lock %s: %s\n", lock_name, strerror(errno));
97 } 90
98 }else 91 g_free(lock_name);
99 logwrite(LOG_WARNING, 92
100 "could not open lock %s: %s\n", lock_name, strerror(errno)); 93 return fd;
101
102 g_free(lock_name);
103
104 return fd;
105 #endif 94 #endif
106 } 95 }
107 96
108 #ifdef USE_DOTLOCK 97 #ifdef USE_DOTLOCK
109 static 98 static gboolean
110 gboolean get_unlock(get_conf *gc) 99 get_unlock(get_conf * gc)
111 { 100 {
112 gchar *lock_name lock_name = 101 gchar *lock_name lock_name = g_strdup_printf("%s/masqmail-get-%s@%s.lock", conf.lock_dir, gc->login_user, gc->server_name);
113 g_strdup_printf("%s/masqmail-get-%s@%s.lock", 102
114 conf.lock_dir, gc->login_user, gc->server_name); 103 dot_unlock(lock_name);
115 104 g_free(lock_name);
116 dot_unlock(lock_name); 105
117 106 return TRUE;
118 g_free(lock_name);
119
120 return TRUE;
121 } 107 }
122 #else 108 #else
123 static void get_unlock(get_conf *gc, int fd) 109 static void
124 { 110 get_unlock(get_conf * gc, int fd)
125 gchar *lock_name = 111 {
126 g_strdup_printf("%s/masqmail-get-%s@%s.lock", 112 gchar *lock_name = g_strdup_printf("%s/masqmail-get-%s@%s.lock", conf.lock_dir, gc->login_user, gc->server_name);
127 conf.lock_dir, gc->login_user, gc->server_name); 113
128 114 flock(fd, LOCK_UN);
129 flock(fd, LOCK_UN); 115 close(fd);
130 close(fd); 116
131 117 unlink(lock_name);
132 unlink(lock_name); 118 g_free(lock_name);
133 g_free(lock_name); 119 }
134 } 120 #endif
135 #endif 121
136 122 gboolean
137 gboolean get_from_file(gchar *fname) 123 get_from_file(gchar * fname)
138 { 124 {
139 guint flags = 0; 125 guint flags = 0;
140 get_conf *gc = read_get_conf(fname); 126 get_conf *gc = read_get_conf(fname);
141 gboolean ok = TRUE; 127 gboolean ok = TRUE;
142 int lock; 128 int lock;
143 129
144 if(gc){ 130 if (gc) {
145 if(!gc->do_keep) flags |= POP3_FLAG_DELETE; 131 if (!gc->do_keep)
146 if(gc->do_uidl) flags |= POP3_FLAG_UIDL; 132 flags |= POP3_FLAG_DELETE;
147 if(gc->do_uidl_dele) flags |= POP3_FLAG_UIDL_DELE; 133 if (gc->do_uidl)
148 134 flags |= POP3_FLAG_UIDL;
149 if(!(gc->server_name)){ 135 if (gc->do_uidl_dele)
150 logwrite(LOG_ALERT, "no server name given in %s\n", fname); return FALSE; 136 flags |= POP3_FLAG_UIDL_DELE;
151 } 137
152 if(!(gc->address)){ 138 if (!(gc->server_name)) {
153 logwrite(LOG_ALERT, "no address given in %s\n", fname); return FALSE; 139 logwrite(LOG_ALERT, "no server name given in %s\n", fname);
154 } 140 return FALSE;
155 if(!(gc->login_user)){ 141 }
156 logwrite(LOG_ALERT, "no user name given in %s\n", fname); return FALSE; 142 if (!(gc->address)) {
157 } 143 logwrite(LOG_ALERT, "no address given in %s\n", fname);
158 if(!(gc->login_pass)){ 144 return FALSE;
159 logwrite(LOG_ALERT, "no password given in %s\n", fname); return FALSE; 145 }
160 } 146 if (!(gc->login_user)) {
161 147 logwrite(LOG_ALERT, "no user name given in %s\n", fname);
162 DEBUG(3) debugf("flags = %d\n", flags); 148 return FALSE;
163 149 }
164 if((strcmp(gc->protocol, "pop3") == 0) || (strcmp(gc->protocol, "apop") == 0)){ 150 if (!(gc->login_pass)) {
165 pop3_base *popb = NULL; 151 logwrite(LOG_ALERT, "no password given in %s\n", fname);
166 152 return FALSE;
167 if(strcmp(gc->protocol, "apop") == 0){ 153 }
168 flags |= POP3_FLAG_APOP; 154
169 DEBUG(3) debugf("attempting to get mail for user %s at host %s" 155 DEBUG(3) debugf("flags = %d\n", flags);
170 " for %s@%s with apop\n", 156
171 gc->login_user, gc->server_name, 157 if ((strcmp(gc->protocol, "pop3") == 0) || (strcmp(gc->protocol, "apop") == 0)) {
172 gc->address->local_part, gc->address->domain); 158 pop3_base *popb = NULL;
173 }else{ 159
174 DEBUG(3) debugf("attempting to get mail for user %s at host %s" 160 if (strcmp(gc->protocol, "apop") == 0) {
175 " for %s@%s with pop3\n", 161 flags |= POP3_FLAG_APOP;
176 gc->login_user, gc->server_name, 162 DEBUG(3) debugf("attempting to get mail for user %s at host %s for %s@%s with apop\n",
177 gc->address->local_part, gc->address->domain); 163 gc->login_user, gc->server_name, gc->address->local_part, gc->address->domain);
178 } 164 } else {
165 DEBUG(3) debugf("attempting to get mail for user %s at host %s for %s@%s with pop3\n",
166 gc->login_user, gc->server_name, gc->address->local_part, gc->address->domain);
167 }
179 #ifdef USE_DOTLOCK 168 #ifdef USE_DOTLOCK
180 if((lock = get_lock(gc))){ 169 if ((lock = get_lock(gc))) {
181 #else 170 #else
182 if((lock = get_lock(gc)) >= 0){ 171 if ((lock = get_lock(gc)) >= 0) {
183 #endif 172 #endif
184 if(gc->wrapper){ 173 if (gc->wrapper) {
185 popb = pop3_in_open_child(gc->wrapper, flags); 174 popb = pop3_in_open_child(gc->wrapper, flags);
186 /* quick hack */ 175 /* quick hack */
187 popb->remote_host = gc->server_name; 176 popb->remote_host = gc->server_name;
188 }else{ 177 } else {
189 popb = pop3_in_open(gc->server_name, gc->server_port, 178 popb = pop3_in_open(gc->server_name, gc->server_port, gc->resolve_list, flags);
190 gc->resolve_list, flags); 179 }
191 } 180 if (popb) {
192 if(popb){ 181 ok = pop3_get(popb, gc->login_user, gc->login_pass, gc->address, gc->return_path,
193 ok = pop3_get(popb, gc->login_user, gc->login_pass, 182 gc->max_count, gc->max_size, gc->max_size_delete);
194 gc->address, gc->return_path, 183 pop3_in_close(popb);
195 gc->max_count, gc->max_size, gc->max_size_delete); 184 } else {
196 pop3_in_close(popb); 185 ok = FALSE;
197 }else{ 186 logwrite(LOG_ALERT, "failed to connect to host %s\n", gc->server_name);
198 ok = FALSE; 187 }
199 logwrite(LOG_ALERT, "failed to connect to host %s\n", gc->server_name);
200 }
201 #ifdef USE_DOTLOCK 188 #ifdef USE_DOTLOCK
202 get_unlock(gc); 189 get_unlock(gc);
203 #else 190 #else
204 get_unlock(gc, lock); 191 get_unlock(gc, lock);
205 #endif 192 #endif
206 } 193 }
207 }else{ 194 } else {
208 logwrite(LOG_ALERT, "get protocol %s unknown\n", gc->protocol); 195 logwrite(LOG_ALERT, "get protocol %s unknown\n", gc->protocol);
209 ok = FALSE; 196 ok = FALSE;
210 } 197 }
211 198
212 destroy_get_conf(gc); 199 destroy_get_conf(gc);
213 } 200 }
214 return ok; 201 return ok;
215 } 202 }
216 203
217 gboolean get_from_name(gchar *name) 204 gboolean
218 { 205 get_from_name(gchar * name)
219 gchar *fname = (gchar *)table_find(conf.get_names, name); 206 {
220 if(fname) 207 gchar *fname = (gchar *) table_find(conf.get_names, name);
221 return get_from_file(fname); 208 if (fname)
222 return FALSE; 209 return get_from_file(fname);
223 } 210 return FALSE;
224 211 }
225 gboolean get_all() 212
226 { 213 gboolean
227 GList *get_table = conf.get_names; 214 get_all()
228 GList *get_node; 215 {
229 void (*old_signal)(int); 216 GList *get_table = conf.get_names;
230 217 GList *get_node;
231 old_signal = signal(SIGCHLD, SIG_DFL); 218 void (*old_signal) (int);
232 219
233 foreach(get_table, get_node){ 220 old_signal = signal(SIGCHLD, SIG_DFL);
234 table_pair *pair = (table_pair *)(get_node->data); 221
235 gchar *fname = (gchar *)pair->value; 222 foreach(get_table, get_node) {
236 pid_t pid; 223 table_pair *pair = (table_pair *) (get_node->data);
237 224 gchar *fname = (gchar *) pair->value;
238 pid = fork(); 225 pid_t pid;
239 if(pid == 0){ 226
240 signal(SIGCHLD, old_signal); 227 pid = fork();
241 exit(get_from_file(fname) ? EXIT_SUCCESS : EXIT_FAILURE); 228 if (pid == 0) {
242 }else if(pid > 0){ 229 signal(SIGCHLD, old_signal);
243 int status; 230 exit(get_from_file(fname) ? EXIT_SUCCESS : EXIT_FAILURE);
244 waitpid(pid, &status, 0); 231 } else if (pid > 0) {
245 if(WEXITSTATUS(status) != EXIT_SUCCESS) 232 int status;
246 logwrite(LOG_WARNING, "child returned %d\n", WEXITSTATUS(status)); 233 waitpid(pid, &status, 0);
247 if(WIFSIGNALED(status)) 234 if (WEXITSTATUS(status) != EXIT_SUCCESS)
248 logwrite(LOG_WARNING, "child got signal: %d\n", WTERMSIG(status)); 235 logwrite(LOG_WARNING, "child returned %d\n", WEXITSTATUS(status));
249 }else 236 if (WIFSIGNALED(status))
250 logwrite(LOG_WARNING, "forking child failed: %s\n", strerror(errno)); 237 logwrite(LOG_WARNING, "child got signal: %d\n", WTERMSIG(status));
251 } 238 } else
252 239 logwrite(LOG_WARNING, "forking child failed: %s\n", strerror(errno));
253 signal(SIGCHLD, old_signal); 240 }
254 241
255 return TRUE; 242 signal(SIGCHLD, old_signal);
256 } 243
257 244 return TRUE;
258 void get_online() 245 }
259 { 246
260 GList *gf_list = NULL; 247 void
261 gchar *connect_name = detect_online(); 248 get_online()
262 249 {
263 if(connect_name != NULL){ 250 GList *gf_list = NULL;
264 void (*old_signal)(int); 251 gchar *connect_name = detect_online();
265 252
266 old_signal = signal(SIGCHLD, SIG_DFL); 253 if (connect_name != NULL) {
267 254 void (*old_signal) (int);
268 logwrite(LOG_NOTICE, "detected online configuration %s\n", connect_name); 255
269 /* we are online! */ 256 old_signal = signal(SIGCHLD, SIG_DFL);
270 gf_list = (GList *)table_find(conf.online_gets, connect_name); 257
271 if(gf_list != NULL){ 258 logwrite(LOG_NOTICE, "detected online configuration %s\n", connect_name);
272 GList *node; 259 /* we are online! */
273 foreach(gf_list, node){ 260 gf_list = (GList *) table_find(conf.online_gets, connect_name);
274 gchar *fname = (gchar *)(node->data); 261 if (gf_list != NULL) {
275 pid_t pid; 262 GList *node;
276 263 foreach(gf_list, node) {
277 if(fname[0] != '/') 264 gchar *fname = (gchar *) (node->data);
278 fname = (gchar *)table_find(conf.get_names, fname); 265 pid_t pid;
279 266
280 if(fname != NULL){ 267 if (fname[0] != '/')
281 pid = fork(); 268 fname = (gchar *) table_find(conf.get_names, fname);
282 if(pid == 0){ 269
283 signal(SIGCHLD, old_signal); 270 if (fname != NULL) {
284 exit(get_from_file(fname) ? EXIT_SUCCESS : EXIT_FAILURE); 271 pid = fork();
285 }else if(pid > 0){ 272 if (pid == 0) {
286 int status; 273 signal(SIGCHLD, old_signal);
287 waitpid(pid, &status, 0); 274 exit(get_from_file(fname) ? EXIT_SUCCESS : EXIT_FAILURE);
288 if(WEXITSTATUS(status) != EXIT_SUCCESS) 275 } else if (pid > 0) {
289 logwrite(LOG_WARNING, "child returned %d\n", WEXITSTATUS(status)); 276 int status;
290 if(WIFSIGNALED(status)) 277 waitpid(pid, &status, 0);
291 logwrite(LOG_WARNING, "child got signal: %d\n", WTERMSIG(status)); 278 if (WEXITSTATUS(status) != EXIT_SUCCESS)
292 }else 279 logwrite(LOG_WARNING, "child returned %d\n", WEXITSTATUS(status));
293 logwrite(LOG_WARNING, "forking child failed: %s\n", strerror(errno)); 280 if (WIFSIGNALED(status))
294 } 281 logwrite(LOG_WARNING, "child got signal: %d\n", WTERMSIG(status));
295 } 282 } else
296 } 283 logwrite(LOG_WARNING, "forking child failed: %s\n", strerror(errno));
297 signal(SIGCHLD, old_signal); 284 }
298 } 285 }
299 } 286 }
300 287 signal(SIGCHLD, old_signal);
301 void get_daemon(gint gival, char *argv[]) 288 }
302 { 289 }
303 struct timeval tm; 290
304 time_t time_before, time_now; 291 void
305 int sel_ret; 292 get_daemon(gint gival, char *argv[])
306 293 {
307 /* setup handler for HUP signal: */ 294 struct timeval tm;
308 signal(SIGHUP, sighup_handler); 295 time_t time_before, time_now;
309 296 int sel_ret;
310 /* we can give up root privileges */ 297
311 if(!conf.run_as_user){ 298 /* setup handler for HUP signal: */
312 if(setegid(conf.mail_gid) != 0){ 299 signal(SIGHUP, sighup_handler);
313 logwrite(LOG_ALERT, "could not change gid to %d: %s\n", 300
314 conf.mail_gid, strerror(errno)); 301 /* we can give up root privileges */
315 exit(EXIT_FAILURE); 302 if (!conf.run_as_user) {
316 } 303 if (setegid(conf.mail_gid) != 0) {
317 if(seteuid(conf.mail_uid) != 0){ 304 logwrite(LOG_ALERT, "could not change gid to %d: %s\n", conf.mail_gid, strerror(errno));
318 logwrite(LOG_ALERT, "could not change uid to %d: %s\n", 305 exit(EXIT_FAILURE);
319 conf.mail_uid, strerror(errno)); 306 }
320 exit(EXIT_FAILURE); 307 if (seteuid(conf.mail_uid) != 0) {
321 } 308 logwrite(LOG_ALERT, "could not change uid to %d: %s\n", conf.mail_uid, strerror(errno));
322 } 309 exit(EXIT_FAILURE);
323 310 }
324 /* sel_ret = 0;*/ 311 }
325 time(&time_before); 312
326 time_before -= gival; 313 /* sel_ret = 0; */
327 sel_ret = -1; 314 time(&time_before);
328 315 time_before -= gival;
329 while (1){ 316 sel_ret = -1;
330 /* see listen_port() in listen.c */ 317
331 if(gival > 0){ 318 while (1) {
332 time(&time_now); 319 /* see listen_port() in listen.c */
333 if(sel_ret == 0){ /* we are either just starting or did a queue run */ 320 if (gival > 0) {
334 tm.tv_sec = gival; 321 time(&time_now);
335 tm.tv_usec = 0; 322 if (sel_ret == 0) { /* we are either just starting or did a queue run */
336 time_before = time_now; 323 tm.tv_sec = gival;
337 }else{ 324 tm.tv_usec = 0;
338 tm.tv_sec = gival - (time_now - time_before); 325 time_before = time_now;
339 tm.tv_usec = 0; 326 } else {
340 327 tm.tv_sec = gival - (time_now - time_before);
341 /* race condition, very unlikely (but possible): */ 328 tm.tv_usec = 0;
342 if(tm.tv_sec < 0) 329
343 tm.tv_sec = 0; 330 /* race condition, very unlikely (but possible): */
344 } 331 if (tm.tv_sec < 0)
345 } 332 tm.tv_sec = 0;
346 333 }
347 if ((sel_ret = select(0, NULL, NULL, NULL, &tm)) < 0){ 334 }
348 if(errno != EINTR){ 335
349 logwrite(LOG_ALERT, "select: (terminating): %s\n", strerror(errno)); 336 if ((sel_ret = select(0, NULL, NULL, NULL, &tm)) < 0) {
350 exit (EXIT_FAILURE); 337 if (errno != EINTR) {
351 }else{ 338 logwrite(LOG_ALERT, "select: (terminating): %s\n", strerror(errno));
352 if(sighup_seen){ 339 exit(EXIT_FAILURE);
353 logwrite(LOG_NOTICE, "HUP signal received. Restarting daemon\n"); 340 } else {
354 341 if (sighup_seen) {
355 if(argv == NULL) exit(EXIT_SUCCESS); 342 logwrite(LOG_NOTICE, "HUP signal received. Restarting daemon\n");
356 343
357 execv(argv[0], &(argv[0])); 344 if (argv == NULL)
358 logwrite(LOG_ALERT, "restarting failed: %s\n", strerror(errno)); 345 exit(EXIT_SUCCESS);
359 exit(EXIT_FAILURE); 346
360 347 execv(argv[0], &(argv[0]));
361 } 348 logwrite(LOG_ALERT, "restarting failed: %s\n", strerror(errno));
362 } 349 exit(EXIT_FAILURE);
363 }else{ 350
364 /* If select returns 0, the interval time has elapsed. 351 }
365 We start a new get process */ 352 }
366 int pid; 353 } else {
367 signal(SIGCHLD, sigchld_handler); 354 /* If select returns 0, the interval time has elapsed.
368 if((pid = fork()) == 0){ 355 We start a new get process */
369 get_online(); 356 int pid;
370 357 signal(SIGCHLD, sigchld_handler);
371 _exit(EXIT_SUCCESS); 358 if ((pid = fork()) == 0) {
372 } 359 get_online();
373 else if(pid < 0){ 360
374 logwrite(LOG_ALERT, "could not fork for get run"); 361 _exit(EXIT_SUCCESS);
375 } 362 } else if (pid < 0) {
376 } 363 logwrite(LOG_ALERT, "could not fork for get run");
377 } 364 }
378 } 365 }
379 366 }
380 gboolean pop_before_smtp(gchar *fname) 367 }
381 { 368
382 gboolean ok = FALSE; 369 gboolean
383 GList *resolve_list = NULL; 370 pop_before_smtp(gchar * fname)
384 get_conf *gc = read_get_conf(fname); 371 {
385 guint flags = 0; 372 gboolean ok = FALSE;
373 GList *resolve_list = NULL;
374 get_conf *gc = read_get_conf(fname);
375 guint flags = 0;
386 376
387 #ifdef ENABLE_RESOLVER 377 #ifdef ENABLE_RESOLVER
388 resolve_list = g_list_append(resolve_list, resolve_dns_a); 378 resolve_list = g_list_append(resolve_list, resolve_dns_a);
389 #endif 379 #endif
390 resolve_list = g_list_append(resolve_list, resolve_byname); 380 resolve_list = g_list_append(resolve_list, resolve_byname);
391 381
392 if(strcmp(gc->protocol, "pop3") == 0){ 382 if (strcmp(gc->protocol, "pop3") == 0) {
393 DEBUG(3) debugf("attempting to login for user %s, host = %s with pop3\n", 383 DEBUG(3) debugf("attempting to login for user %s, host = %s with pop3\n", gc->login_user, gc->server_name);
394 gc->login_user, gc->server_name); 384 ok = pop3_login(gc->server_name, gc->server_port, resolve_list, gc->login_user, gc->login_pass, flags);
395 ok = pop3_login(gc->server_name, gc->server_port, resolve_list, 385 } else if (strcmp(gc->protocol, "apop") == 0) {
396 gc->login_user, gc->login_pass, 386 DEBUG(3) debugf ("attempting to login for user %s, host = %s with apop\n", gc->login_user, gc->server_name);
397 flags); 387 ok = pop3_login(gc->server_name, gc->server_port, resolve_list, gc->login_user, gc->login_pass, flags | POP3_FLAG_APOP);
398 }else if(strcmp(gc->protocol, "apop") == 0){ 388 } else {
399 DEBUG(3) debugf("attempting to login for user %s, host = %s with apop\n", 389 logwrite(LOG_ALERT, "get protocol %s unknown\n", gc->protocol);
400 gc->login_user, gc->server_name); 390 }
401 ok = pop3_login(gc->server_name, gc->server_port, resolve_list, 391 return ok;
402 gc->login_user, gc->login_pass, 392 }
403 flags | POP3_FLAG_APOP); 393
404 }else{ 394 #endif
405 logwrite(LOG_ALERT, "get protocol %s unknown\n", gc->protocol);
406 }
407 return ok;
408 }
409
410 #endif