masqmail-0.2
diff 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 |
line diff
1.1 --- a/src/get.c Mon Oct 27 16:21:27 2008 +0100 1.2 +++ b/src/get.c Mon Oct 27 16:23:10 2008 +0100 1.3 @@ -27,384 +27,368 @@ 1.4 1.5 static int volatile sighup_seen = 0; 1.6 1.7 -static 1.8 -void sighup_handler(int sig) 1.9 +static void 1.10 +sighup_handler(int sig) 1.11 { 1.12 - sighup_seen = 1; 1.13 - signal(SIGHUP, sighup_handler); 1.14 + sighup_seen = 1; 1.15 + signal(SIGHUP, sighup_handler); 1.16 } 1.17 1.18 -static 1.19 -void sigchld_handler(int sig) 1.20 +static void 1.21 +sigchld_handler(int sig) 1.22 { 1.23 - pid_t pid; 1.24 - int status; 1.25 - 1.26 - pid = waitpid(0, &status, 0); 1.27 - if(pid > 0){ 1.28 - if(WEXITSTATUS(status) != EXIT_SUCCESS) 1.29 - logwrite(LOG_WARNING, "process %d exited with %d\n", 1.30 - pid, WEXITSTATUS(status)); 1.31 - if(WIFSIGNALED(status)) 1.32 - logwrite(LOG_WARNING, 1.33 - "process with pid %d got signal: %d\n", 1.34 - pid, WTERMSIG(status)); 1.35 - } 1.36 - signal(SIGCHLD, sigchld_handler); 1.37 + pid_t pid; 1.38 + int status; 1.39 + 1.40 + pid = waitpid(0, &status, 0); 1.41 + if (pid > 0) { 1.42 + if (WEXITSTATUS(status) != EXIT_SUCCESS) 1.43 + logwrite(LOG_WARNING, "process %d exited with %d\n", pid, WEXITSTATUS(status)); 1.44 + if (WIFSIGNALED(status)) 1.45 + logwrite(LOG_WARNING, "process with pid %d got signal: %d\n", pid, WTERMSIG(status)); 1.46 + } 1.47 + signal(SIGCHLD, sigchld_handler); 1.48 } 1.49 1.50 -static 1.51 -int get_lock(get_conf *gc) 1.52 +static int 1.53 +get_lock(get_conf * gc) 1.54 { 1.55 #ifdef USE_DOTLOCK 1.56 - gboolean ok = FALSE; 1.57 - gchar *hitch_name; 1.58 - gchar *lock_name; 1.59 + gboolean ok = FALSE; 1.60 + gchar *hitch_name; 1.61 + gchar *lock_name; 1.62 1.63 - /* the name of the lock is constructed from the user 1.64 - and the server name, to prevent more than one connection at the same time 1.65 - to the same server and the same user. This way concurrent connections 1.66 - are possible to different servers or different users */ 1.67 - hitch_name = g_strdup_printf("%s/masqmail-get-%s@%s-%d.lock", 1.68 - conf.lock_dir, gc->login_user, 1.69 - gc->server_name, getpid()); 1.70 - lock_name = g_strdup_printf("%s/masqmail-get-%s@%s.lock", 1.71 - conf.lock_dir, gc->login_user, gc->server_name); 1.72 - 1.73 - ok = dot_lock(lock_name, hitch_name); 1.74 - if(!ok) logwrite(LOG_WARNING, 1.75 - "getting mail for %s@%s is locked\n", 1.76 - gc->login_user, gc->server_name); 1.77 + /* the name of the lock is constructed from the user 1.78 + and the server name, to prevent more than one connection at the same time 1.79 + to the same server and the same user. This way concurrent connections 1.80 + are possible to different servers or different users */ 1.81 + hitch_name = g_strdup_printf("%s/masqmail-get-%s@%s-%d.lock", conf.lock_dir, gc->login_user, gc->server_name, getpid()); 1.82 + lock_name = g_strdup_printf("%s/masqmail-get-%s@%s.lock", conf.lock_dir, gc->login_user, gc->server_name); 1.83 1.84 - g_free(lock_name); 1.85 - g_free(hitch_name); 1.86 + ok = dot_lock(lock_name, hitch_name); 1.87 + if (!ok) 1.88 + logwrite(LOG_WARNING, "getting mail for %s@%s is locked\n", gc->login_user, gc->server_name); 1.89 1.90 - return ok; 1.91 + g_free(lock_name); 1.92 + g_free(hitch_name); 1.93 + 1.94 + return ok; 1.95 #else 1.96 - gchar *lock_name; 1.97 - int fd; 1.98 + gchar *lock_name; 1.99 + int fd; 1.100 1.101 - lock_name = g_strdup_printf("%s/masqmail-get-%s@%s.lock", 1.102 - conf.lock_dir, gc->login_user, gc->server_name); 1.103 + lock_name = g_strdup_printf("%s/masqmail-get-%s@%s.lock", conf.lock_dir, gc->login_user, gc->server_name); 1.104 1.105 - if((fd = open(lock_name, O_WRONLY|O_NDELAY|O_APPEND|O_CREAT, 0600)) >= 0){ 1.106 - if(flock(fd, LOCK_EX|LOCK_NB) != 0){ 1.107 - close(fd); 1.108 - logwrite(LOG_WARNING, 1.109 - "getting mail for %s@%s is locked\n", 1.110 - gc->login_user, gc->server_name); 1.111 - fd = -1; 1.112 - } 1.113 - }else 1.114 - logwrite(LOG_WARNING, 1.115 - "could not open lock %s: %s\n", lock_name, strerror(errno)); 1.116 + if ((fd = open(lock_name, O_WRONLY | O_NDELAY | O_APPEND | O_CREAT, 0600)) >= 0) { 1.117 + if (flock(fd, LOCK_EX | LOCK_NB) != 0) { 1.118 + close(fd); 1.119 + logwrite(LOG_WARNING, "getting mail for %s@%s is locked\n", gc->login_user, gc->server_name); 1.120 + fd = -1; 1.121 + } 1.122 + } else 1.123 + logwrite(LOG_WARNING, "could not open lock %s: %s\n", lock_name, strerror(errno)); 1.124 1.125 - g_free(lock_name); 1.126 + g_free(lock_name); 1.127 1.128 - return fd; 1.129 + return fd; 1.130 #endif 1.131 } 1.132 1.133 #ifdef USE_DOTLOCK 1.134 -static 1.135 -gboolean get_unlock(get_conf *gc) 1.136 +static gboolean 1.137 +get_unlock(get_conf * gc) 1.138 { 1.139 - gchar *lock_name lock_name = 1.140 - g_strdup_printf("%s/masqmail-get-%s@%s.lock", 1.141 - conf.lock_dir, gc->login_user, gc->server_name); 1.142 - 1.143 - dot_unlock(lock_name); 1.144 + gchar *lock_name lock_name = g_strdup_printf("%s/masqmail-get-%s@%s.lock", conf.lock_dir, gc->login_user, gc->server_name); 1.145 1.146 - g_free(lock_name); 1.147 + dot_unlock(lock_name); 1.148 + g_free(lock_name); 1.149 1.150 - return TRUE; 1.151 + return TRUE; 1.152 } 1.153 #else 1.154 -static void get_unlock(get_conf *gc, int fd) 1.155 +static void 1.156 +get_unlock(get_conf * gc, int fd) 1.157 { 1.158 - gchar *lock_name = 1.159 - g_strdup_printf("%s/masqmail-get-%s@%s.lock", 1.160 - conf.lock_dir, gc->login_user, gc->server_name); 1.161 + gchar *lock_name = g_strdup_printf("%s/masqmail-get-%s@%s.lock", conf.lock_dir, gc->login_user, gc->server_name); 1.162 1.163 - flock(fd, LOCK_UN); 1.164 - close(fd); 1.165 + flock(fd, LOCK_UN); 1.166 + close(fd); 1.167 1.168 - unlink(lock_name); 1.169 - g_free(lock_name); 1.170 + unlink(lock_name); 1.171 + g_free(lock_name); 1.172 } 1.173 #endif 1.174 1.175 -gboolean get_from_file(gchar *fname) 1.176 +gboolean 1.177 +get_from_file(gchar * fname) 1.178 { 1.179 - guint flags = 0; 1.180 - get_conf *gc = read_get_conf(fname); 1.181 - gboolean ok = TRUE; 1.182 - int lock; 1.183 + guint flags = 0; 1.184 + get_conf *gc = read_get_conf(fname); 1.185 + gboolean ok = TRUE; 1.186 + int lock; 1.187 1.188 - if(gc){ 1.189 - if(!gc->do_keep) flags |= POP3_FLAG_DELETE; 1.190 - if(gc->do_uidl) flags |= POP3_FLAG_UIDL; 1.191 - if(gc->do_uidl_dele) flags |= POP3_FLAG_UIDL_DELE; 1.192 - 1.193 - if(!(gc->server_name)){ 1.194 - logwrite(LOG_ALERT, "no server name given in %s\n", fname); return FALSE; 1.195 - } 1.196 - if(!(gc->address)){ 1.197 - logwrite(LOG_ALERT, "no address given in %s\n", fname); return FALSE; 1.198 - } 1.199 - if(!(gc->login_user)){ 1.200 - logwrite(LOG_ALERT, "no user name given in %s\n", fname); return FALSE; 1.201 - } 1.202 - if(!(gc->login_pass)){ 1.203 - logwrite(LOG_ALERT, "no password given in %s\n", fname); return FALSE; 1.204 - } 1.205 + if (gc) { 1.206 + if (!gc->do_keep) 1.207 + flags |= POP3_FLAG_DELETE; 1.208 + if (gc->do_uidl) 1.209 + flags |= POP3_FLAG_UIDL; 1.210 + if (gc->do_uidl_dele) 1.211 + flags |= POP3_FLAG_UIDL_DELE; 1.212 1.213 - DEBUG(3) debugf("flags = %d\n", flags); 1.214 - 1.215 - if((strcmp(gc->protocol, "pop3") == 0) || (strcmp(gc->protocol, "apop") == 0)){ 1.216 - pop3_base *popb = NULL; 1.217 + if (!(gc->server_name)) { 1.218 + logwrite(LOG_ALERT, "no server name given in %s\n", fname); 1.219 + return FALSE; 1.220 + } 1.221 + if (!(gc->address)) { 1.222 + logwrite(LOG_ALERT, "no address given in %s\n", fname); 1.223 + return FALSE; 1.224 + } 1.225 + if (!(gc->login_user)) { 1.226 + logwrite(LOG_ALERT, "no user name given in %s\n", fname); 1.227 + return FALSE; 1.228 + } 1.229 + if (!(gc->login_pass)) { 1.230 + logwrite(LOG_ALERT, "no password given in %s\n", fname); 1.231 + return FALSE; 1.232 + } 1.233 1.234 - if(strcmp(gc->protocol, "apop") == 0){ 1.235 - flags |= POP3_FLAG_APOP; 1.236 - DEBUG(3) debugf("attempting to get mail for user %s at host %s" 1.237 - " for %s@%s with apop\n", 1.238 - gc->login_user, gc->server_name, 1.239 - gc->address->local_part, gc->address->domain); 1.240 - }else{ 1.241 - DEBUG(3) debugf("attempting to get mail for user %s at host %s" 1.242 - " for %s@%s with pop3\n", 1.243 - gc->login_user, gc->server_name, 1.244 - gc->address->local_part, gc->address->domain); 1.245 - } 1.246 + DEBUG(3) debugf("flags = %d\n", flags); 1.247 + 1.248 + if ((strcmp(gc->protocol, "pop3") == 0) || (strcmp(gc->protocol, "apop") == 0)) { 1.249 + pop3_base *popb = NULL; 1.250 + 1.251 + if (strcmp(gc->protocol, "apop") == 0) { 1.252 + flags |= POP3_FLAG_APOP; 1.253 + DEBUG(3) debugf("attempting to get mail for user %s at host %s for %s@%s with apop\n", 1.254 + gc->login_user, gc->server_name, gc->address->local_part, gc->address->domain); 1.255 + } else { 1.256 + DEBUG(3) debugf("attempting to get mail for user %s at host %s for %s@%s with pop3\n", 1.257 + gc->login_user, gc->server_name, gc->address->local_part, gc->address->domain); 1.258 + } 1.259 #ifdef USE_DOTLOCK 1.260 - if((lock = get_lock(gc))){ 1.261 + if ((lock = get_lock(gc))) { 1.262 #else 1.263 - if((lock = get_lock(gc)) >= 0){ 1.264 + if ((lock = get_lock(gc)) >= 0) { 1.265 #endif 1.266 - if(gc->wrapper){ 1.267 - popb = pop3_in_open_child(gc->wrapper, flags); 1.268 - /* quick hack */ 1.269 - popb->remote_host = gc->server_name; 1.270 - }else{ 1.271 - popb = pop3_in_open(gc->server_name, gc->server_port, 1.272 - gc->resolve_list, flags); 1.273 + if (gc->wrapper) { 1.274 + popb = pop3_in_open_child(gc->wrapper, flags); 1.275 + /* quick hack */ 1.276 + popb->remote_host = gc->server_name; 1.277 + } else { 1.278 + popb = pop3_in_open(gc->server_name, gc->server_port, gc->resolve_list, flags); 1.279 + } 1.280 + if (popb) { 1.281 + ok = pop3_get(popb, gc->login_user, gc->login_pass, gc->address, gc->return_path, 1.282 + gc->max_count, gc->max_size, gc->max_size_delete); 1.283 + pop3_in_close(popb); 1.284 + } else { 1.285 + ok = FALSE; 1.286 + logwrite(LOG_ALERT, "failed to connect to host %s\n", gc->server_name); 1.287 + } 1.288 +#ifdef USE_DOTLOCK 1.289 + get_unlock(gc); 1.290 +#else 1.291 + get_unlock(gc, lock); 1.292 +#endif 1.293 + } 1.294 + } else { 1.295 + logwrite(LOG_ALERT, "get protocol %s unknown\n", gc->protocol); 1.296 + ok = FALSE; 1.297 + } 1.298 + 1.299 + destroy_get_conf(gc); 1.300 } 1.301 - if(popb){ 1.302 - ok = pop3_get(popb, gc->login_user, gc->login_pass, 1.303 - gc->address, gc->return_path, 1.304 - gc->max_count, gc->max_size, gc->max_size_delete); 1.305 - pop3_in_close(popb); 1.306 - }else{ 1.307 - ok = FALSE; 1.308 - logwrite(LOG_ALERT, "failed to connect to host %s\n", gc->server_name); 1.309 - } 1.310 -#ifdef USE_DOTLOCK 1.311 - get_unlock(gc); 1.312 -#else 1.313 - get_unlock(gc, lock); 1.314 -#endif 1.315 - } 1.316 - }else{ 1.317 - logwrite(LOG_ALERT, "get protocol %s unknown\n", gc->protocol); 1.318 - ok = FALSE; 1.319 - } 1.320 - 1.321 - destroy_get_conf(gc); 1.322 - } 1.323 - return ok; 1.324 + return ok; 1.325 } 1.326 1.327 -gboolean get_from_name(gchar *name) 1.328 +gboolean 1.329 +get_from_name(gchar * name) 1.330 { 1.331 - gchar *fname = (gchar *)table_find(conf.get_names, name); 1.332 - if(fname) 1.333 - return get_from_file(fname); 1.334 - return FALSE; 1.335 + gchar *fname = (gchar *) table_find(conf.get_names, name); 1.336 + if (fname) 1.337 + return get_from_file(fname); 1.338 + return FALSE; 1.339 } 1.340 1.341 -gboolean get_all() 1.342 +gboolean 1.343 +get_all() 1.344 { 1.345 - GList *get_table = conf.get_names; 1.346 - GList *get_node; 1.347 - void (*old_signal)(int); 1.348 + GList *get_table = conf.get_names; 1.349 + GList *get_node; 1.350 + void (*old_signal) (int); 1.351 1.352 - old_signal = signal(SIGCHLD, SIG_DFL); 1.353 + old_signal = signal(SIGCHLD, SIG_DFL); 1.354 1.355 - foreach(get_table, get_node){ 1.356 - table_pair *pair = (table_pair *)(get_node->data); 1.357 - gchar *fname = (gchar *)pair->value; 1.358 - pid_t pid; 1.359 + foreach(get_table, get_node) { 1.360 + table_pair *pair = (table_pair *) (get_node->data); 1.361 + gchar *fname = (gchar *) pair->value; 1.362 + pid_t pid; 1.363 1.364 - pid = fork(); 1.365 - if(pid == 0){ 1.366 - signal(SIGCHLD, old_signal); 1.367 - exit(get_from_file(fname) ? EXIT_SUCCESS : EXIT_FAILURE); 1.368 - }else if(pid > 0){ 1.369 - int status; 1.370 - waitpid(pid, &status, 0); 1.371 - if(WEXITSTATUS(status) != EXIT_SUCCESS) 1.372 - logwrite(LOG_WARNING, "child returned %d\n", WEXITSTATUS(status)); 1.373 - if(WIFSIGNALED(status)) 1.374 - logwrite(LOG_WARNING, "child got signal: %d\n", WTERMSIG(status)); 1.375 - }else 1.376 - logwrite(LOG_WARNING, "forking child failed: %s\n", strerror(errno)); 1.377 - } 1.378 - 1.379 - signal(SIGCHLD, old_signal); 1.380 + pid = fork(); 1.381 + if (pid == 0) { 1.382 + signal(SIGCHLD, old_signal); 1.383 + exit(get_from_file(fname) ? EXIT_SUCCESS : EXIT_FAILURE); 1.384 + } else if (pid > 0) { 1.385 + int status; 1.386 + waitpid(pid, &status, 0); 1.387 + if (WEXITSTATUS(status) != EXIT_SUCCESS) 1.388 + logwrite(LOG_WARNING, "child returned %d\n", WEXITSTATUS(status)); 1.389 + if (WIFSIGNALED(status)) 1.390 + logwrite(LOG_WARNING, "child got signal: %d\n", WTERMSIG(status)); 1.391 + } else 1.392 + logwrite(LOG_WARNING, "forking child failed: %s\n", strerror(errno)); 1.393 + } 1.394 1.395 - return TRUE; 1.396 + signal(SIGCHLD, old_signal); 1.397 + 1.398 + return TRUE; 1.399 } 1.400 1.401 -void get_online() 1.402 +void 1.403 +get_online() 1.404 { 1.405 - GList *gf_list = NULL; 1.406 - gchar *connect_name = detect_online(); 1.407 + GList *gf_list = NULL; 1.408 + gchar *connect_name = detect_online(); 1.409 1.410 - if(connect_name != NULL){ 1.411 - void (*old_signal)(int); 1.412 + if (connect_name != NULL) { 1.413 + void (*old_signal) (int); 1.414 1.415 - old_signal = signal(SIGCHLD, SIG_DFL); 1.416 + old_signal = signal(SIGCHLD, SIG_DFL); 1.417 1.418 - logwrite(LOG_NOTICE, "detected online configuration %s\n", connect_name); 1.419 - /* we are online! */ 1.420 - gf_list = (GList *)table_find(conf.online_gets, connect_name); 1.421 - if(gf_list != NULL){ 1.422 - GList *node; 1.423 - foreach(gf_list, node){ 1.424 - gchar *fname = (gchar *)(node->data); 1.425 - pid_t pid; 1.426 + logwrite(LOG_NOTICE, "detected online configuration %s\n", connect_name); 1.427 + /* we are online! */ 1.428 + gf_list = (GList *) table_find(conf.online_gets, connect_name); 1.429 + if (gf_list != NULL) { 1.430 + GList *node; 1.431 + foreach(gf_list, node) { 1.432 + gchar *fname = (gchar *) (node->data); 1.433 + pid_t pid; 1.434 1.435 - if(fname[0] != '/') 1.436 - fname = (gchar *)table_find(conf.get_names, fname); 1.437 + if (fname[0] != '/') 1.438 + fname = (gchar *) table_find(conf.get_names, fname); 1.439 1.440 - if(fname != NULL){ 1.441 - pid = fork(); 1.442 - if(pid == 0){ 1.443 - signal(SIGCHLD, old_signal); 1.444 - exit(get_from_file(fname) ? EXIT_SUCCESS : EXIT_FAILURE); 1.445 - }else if(pid > 0){ 1.446 - int status; 1.447 - waitpid(pid, &status, 0); 1.448 - if(WEXITSTATUS(status) != EXIT_SUCCESS) 1.449 - logwrite(LOG_WARNING, "child returned %d\n", WEXITSTATUS(status)); 1.450 - if(WIFSIGNALED(status)) 1.451 - logwrite(LOG_WARNING, "child got signal: %d\n", WTERMSIG(status)); 1.452 - }else 1.453 - logwrite(LOG_WARNING, "forking child failed: %s\n", strerror(errno)); 1.454 + if (fname != NULL) { 1.455 + pid = fork(); 1.456 + if (pid == 0) { 1.457 + signal(SIGCHLD, old_signal); 1.458 + exit(get_from_file(fname) ? EXIT_SUCCESS : EXIT_FAILURE); 1.459 + } else if (pid > 0) { 1.460 + int status; 1.461 + waitpid(pid, &status, 0); 1.462 + if (WEXITSTATUS(status) != EXIT_SUCCESS) 1.463 + logwrite(LOG_WARNING, "child returned %d\n", WEXITSTATUS(status)); 1.464 + if (WIFSIGNALED(status)) 1.465 + logwrite(LOG_WARNING, "child got signal: %d\n", WTERMSIG(status)); 1.466 + } else 1.467 + logwrite(LOG_WARNING, "forking child failed: %s\n", strerror(errno)); 1.468 + } 1.469 + } 1.470 + } 1.471 + signal(SIGCHLD, old_signal); 1.472 } 1.473 - } 1.474 - } 1.475 - signal(SIGCHLD, old_signal); 1.476 - } 1.477 } 1.478 1.479 -void get_daemon(gint gival, char *argv[]) 1.480 +void 1.481 +get_daemon(gint gival, char *argv[]) 1.482 { 1.483 - struct timeval tm; 1.484 - time_t time_before, time_now; 1.485 - int sel_ret; 1.486 + struct timeval tm; 1.487 + time_t time_before, time_now; 1.488 + int sel_ret; 1.489 1.490 - /* setup handler for HUP signal: */ 1.491 - signal(SIGHUP, sighup_handler); 1.492 + /* setup handler for HUP signal: */ 1.493 + signal(SIGHUP, sighup_handler); 1.494 1.495 - /* we can give up root privileges */ 1.496 - if(!conf.run_as_user){ 1.497 - if(setegid(conf.mail_gid) != 0){ 1.498 - logwrite(LOG_ALERT, "could not change gid to %d: %s\n", 1.499 - conf.mail_gid, strerror(errno)); 1.500 - exit(EXIT_FAILURE); 1.501 - } 1.502 - if(seteuid(conf.mail_uid) != 0){ 1.503 - logwrite(LOG_ALERT, "could not change uid to %d: %s\n", 1.504 - conf.mail_uid, strerror(errno)); 1.505 - exit(EXIT_FAILURE); 1.506 - } 1.507 - } 1.508 + /* we can give up root privileges */ 1.509 + if (!conf.run_as_user) { 1.510 + if (setegid(conf.mail_gid) != 0) { 1.511 + logwrite(LOG_ALERT, "could not change gid to %d: %s\n", conf.mail_gid, strerror(errno)); 1.512 + exit(EXIT_FAILURE); 1.513 + } 1.514 + if (seteuid(conf.mail_uid) != 0) { 1.515 + logwrite(LOG_ALERT, "could not change uid to %d: %s\n", conf.mail_uid, strerror(errno)); 1.516 + exit(EXIT_FAILURE); 1.517 + } 1.518 + } 1.519 1.520 - /* sel_ret = 0;*/ 1.521 - time(&time_before); 1.522 - time_before -= gival; 1.523 - sel_ret = -1; 1.524 + /* sel_ret = 0; */ 1.525 + time(&time_before); 1.526 + time_before -= gival; 1.527 + sel_ret = -1; 1.528 1.529 - while (1){ 1.530 - /* see listen_port() in listen.c */ 1.531 - if(gival > 0){ 1.532 - time(&time_now); 1.533 - if(sel_ret == 0){ /* we are either just starting or did a queue run */ 1.534 - tm.tv_sec = gival; 1.535 - tm.tv_usec = 0; 1.536 - time_before = time_now; 1.537 - }else{ 1.538 - tm.tv_sec = gival - (time_now - time_before); 1.539 - tm.tv_usec = 0; 1.540 + while (1) { 1.541 + /* see listen_port() in listen.c */ 1.542 + if (gival > 0) { 1.543 + time(&time_now); 1.544 + if (sel_ret == 0) { /* we are either just starting or did a queue run */ 1.545 + tm.tv_sec = gival; 1.546 + tm.tv_usec = 0; 1.547 + time_before = time_now; 1.548 + } else { 1.549 + tm.tv_sec = gival - (time_now - time_before); 1.550 + tm.tv_usec = 0; 1.551 1.552 - /* race condition, very unlikely (but possible): */ 1.553 - if(tm.tv_sec < 0) 1.554 - tm.tv_sec = 0; 1.555 - } 1.556 - } 1.557 + /* race condition, very unlikely (but possible): */ 1.558 + if (tm.tv_sec < 0) 1.559 + tm.tv_sec = 0; 1.560 + } 1.561 + } 1.562 1.563 - if ((sel_ret = select(0, NULL, NULL, NULL, &tm)) < 0){ 1.564 - if(errno != EINTR){ 1.565 - logwrite(LOG_ALERT, "select: (terminating): %s\n", strerror(errno)); 1.566 - exit (EXIT_FAILURE); 1.567 - }else{ 1.568 - if(sighup_seen){ 1.569 - logwrite(LOG_NOTICE, "HUP signal received. Restarting daemon\n"); 1.570 + if ((sel_ret = select(0, NULL, NULL, NULL, &tm)) < 0) { 1.571 + if (errno != EINTR) { 1.572 + logwrite(LOG_ALERT, "select: (terminating): %s\n", strerror(errno)); 1.573 + exit(EXIT_FAILURE); 1.574 + } else { 1.575 + if (sighup_seen) { 1.576 + logwrite(LOG_NOTICE, "HUP signal received. Restarting daemon\n"); 1.577 1.578 - if(argv == NULL) exit(EXIT_SUCCESS); 1.579 + if (argv == NULL) 1.580 + exit(EXIT_SUCCESS); 1.581 1.582 - execv(argv[0], &(argv[0])); 1.583 - logwrite(LOG_ALERT, "restarting failed: %s\n", strerror(errno)); 1.584 - exit(EXIT_FAILURE); 1.585 + execv(argv[0], &(argv[0])); 1.586 + logwrite(LOG_ALERT, "restarting failed: %s\n", strerror(errno)); 1.587 + exit(EXIT_FAILURE); 1.588 1.589 + } 1.590 + } 1.591 + } else { 1.592 + /* If select returns 0, the interval time has elapsed. 1.593 + We start a new get process */ 1.594 + int pid; 1.595 + signal(SIGCHLD, sigchld_handler); 1.596 + if ((pid = fork()) == 0) { 1.597 + get_online(); 1.598 + 1.599 + _exit(EXIT_SUCCESS); 1.600 + } else if (pid < 0) { 1.601 + logwrite(LOG_ALERT, "could not fork for get run"); 1.602 + } 1.603 + } 1.604 } 1.605 - } 1.606 - }else{ 1.607 - /* If select returns 0, the interval time has elapsed. 1.608 - We start a new get process */ 1.609 - int pid; 1.610 - signal(SIGCHLD, sigchld_handler); 1.611 - if((pid = fork()) == 0){ 1.612 - get_online(); 1.613 - 1.614 - _exit(EXIT_SUCCESS); 1.615 - } 1.616 - else if(pid < 0){ 1.617 - logwrite(LOG_ALERT, "could not fork for get run"); 1.618 - } 1.619 - } 1.620 - } 1.621 } 1.622 1.623 -gboolean pop_before_smtp(gchar *fname) 1.624 +gboolean 1.625 +pop_before_smtp(gchar * fname) 1.626 { 1.627 - gboolean ok = FALSE; 1.628 - GList *resolve_list = NULL; 1.629 - get_conf *gc = read_get_conf(fname); 1.630 - guint flags = 0; 1.631 + gboolean ok = FALSE; 1.632 + GList *resolve_list = NULL; 1.633 + get_conf *gc = read_get_conf(fname); 1.634 + guint flags = 0; 1.635 1.636 #ifdef ENABLE_RESOLVER 1.637 - resolve_list = g_list_append(resolve_list, resolve_dns_a); 1.638 + resolve_list = g_list_append(resolve_list, resolve_dns_a); 1.639 #endif 1.640 - resolve_list = g_list_append(resolve_list, resolve_byname); 1.641 + resolve_list = g_list_append(resolve_list, resolve_byname); 1.642 1.643 - if(strcmp(gc->protocol, "pop3") == 0){ 1.644 - DEBUG(3) debugf("attempting to login for user %s, host = %s with pop3\n", 1.645 - gc->login_user, gc->server_name); 1.646 - ok = pop3_login(gc->server_name, gc->server_port, resolve_list, 1.647 - gc->login_user, gc->login_pass, 1.648 - flags); 1.649 - }else if(strcmp(gc->protocol, "apop") == 0){ 1.650 - DEBUG(3) debugf("attempting to login for user %s, host = %s with apop\n", 1.651 - gc->login_user, gc->server_name); 1.652 - ok = pop3_login(gc->server_name, gc->server_port, resolve_list, 1.653 - gc->login_user, gc->login_pass, 1.654 - flags | POP3_FLAG_APOP); 1.655 - }else{ 1.656 - logwrite(LOG_ALERT, "get protocol %s unknown\n", gc->protocol); 1.657 - } 1.658 - return ok; 1.659 + if (strcmp(gc->protocol, "pop3") == 0) { 1.660 + DEBUG(3) debugf("attempting to login for user %s, host = %s with pop3\n", gc->login_user, gc->server_name); 1.661 + ok = pop3_login(gc->server_name, gc->server_port, resolve_list, gc->login_user, gc->login_pass, flags); 1.662 + } else if (strcmp(gc->protocol, "apop") == 0) { 1.663 + DEBUG(3) debugf ("attempting to login for user %s, host = %s with apop\n", gc->login_user, gc->server_name); 1.664 + ok = pop3_login(gc->server_name, gc->server_port, resolve_list, gc->login_user, gc->login_pass, flags | POP3_FLAG_APOP); 1.665 + } else { 1.666 + logwrite(LOG_ALERT, "get protocol %s unknown\n", gc->protocol); 1.667 + } 1.668 + return ok; 1.669 } 1.670 1.671 #endif