Mercurial > dovecot > original-hg > dovecot-1.2
comparison src/master/login-process.c @ 6519:66e5f514355e HEAD
Login processes started by inetd aren't ours, don't treat them as such.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sun, 30 Sep 2007 18:03:18 +0300 |
parents | 65c69a53a7be |
children | 402d14b5ef8b |
comparison
equal
deleted
inserted
replaced
6518:9b71007b70c7 | 6519:66e5f514355e |
---|---|
433 req.auth_id, authreq); | 433 req.auth_id, authreq); |
434 } | 434 } |
435 } | 435 } |
436 | 436 |
437 static struct login_process * | 437 static struct login_process * |
438 login_process_new(struct login_group *group, pid_t pid, int fd) | 438 login_process_new(struct login_group *group, pid_t pid, int fd, |
439 bool inetd_child) | |
439 { | 440 { |
440 struct login_process *p; | 441 struct login_process *p; |
441 | 442 |
442 i_assert(pid != 0); | 443 i_assert(pid != 0); |
443 | 444 |
445 p->process.type = PROCESS_TYPE_LOGIN; | 446 p->process.type = PROCESS_TYPE_LOGIN; |
446 p->group = group; | 447 p->group = group; |
447 p->refcount = 2; /* once for fd close, another for process exit */ | 448 p->refcount = 2; /* once for fd close, another for process exit */ |
448 p->pid = pid; | 449 p->pid = pid; |
449 p->fd = fd; | 450 p->fd = fd; |
451 p->inetd_child = inetd_child; | |
450 p->io = io_add(fd, IO_READ, login_process_input, p); | 452 p->io = io_add(fd, IO_READ, login_process_input, p); |
451 p->output = o_stream_create_fd(fd, sizeof(struct master_login_reply)*10, | 453 p->output = o_stream_create_fd(fd, sizeof(struct master_login_reply)*10, |
452 FALSE); | 454 FALSE); |
453 child_process_add(pid, &p->process); | 455 if (!inetd_child) |
456 child_process_add(pid, &p->process); | |
454 | 457 |
455 p->state = LOGIN_STATE_LISTENING; | 458 p->state = LOGIN_STATE_LISTENING; |
456 | 459 |
457 if (p->group != NULL) { | 460 if (p->group != NULL) { |
458 p->group->refcount++; | 461 p->group->refcount++; |
625 process_names[group->mail_process_type]); | 628 process_names[group->mail_process_type]); |
626 log_set_prefix(log, prefix); | 629 log_set_prefix(log, prefix); |
627 | 630 |
628 net_set_nonblock(fd[0], TRUE); | 631 net_set_nonblock(fd[0], TRUE); |
629 fd_close_on_exec(fd[0], TRUE); | 632 fd_close_on_exec(fd[0], TRUE); |
630 (void)login_process_new(group, pid, fd[0]); | 633 (void)login_process_new(group, pid, fd[0], FALSE); |
631 (void)close(fd[1]); | 634 (void)close(fd[1]); |
632 (void)close(log_fd); | 635 (void)close(log_fd); |
633 return pid; | 636 return pid; |
634 } | 637 } |
635 | 638 |
905 i_error("accept(inetd_login_fd) failed: %m"); | 908 i_error("accept(inetd_login_fd) failed: %m"); |
906 } else { | 909 } else { |
907 net_set_nonblock(fd, TRUE); | 910 net_set_nonblock(fd, TRUE); |
908 fd_close_on_exec(fd, TRUE); | 911 fd_close_on_exec(fd, TRUE); |
909 | 912 |
910 p = login_process_new(NULL, ++login_pid_counter, fd); | 913 p = login_process_new(NULL, ++login_pid_counter, fd, TRUE); |
911 p->initialized = TRUE; | 914 p->initialized = TRUE; |
912 p->inetd_child = TRUE; | |
913 } | 915 } |
914 } | 916 } |
915 | 917 |
916 void login_processes_init(void) | 918 void login_processes_init(void) |
917 { | 919 { |