annotate src/master/dict-process.c @ 4907:5b4c9b20eba0 HEAD

Replaced void *context from a lot of callbacks with the actual context type. Also added/fixed some context type checks.
author Timo Sirainen <tss@iki.fi>
date Fri, 15 Dec 2006 20:38:08 +0200
parents 9928ebb54719
children f655c4d4a419
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3855
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
1 /* Copyright (C) 2006 Timo Sirainen */
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
2
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
3 #include "common.h"
4393
9928ebb54719 Instead of passing URIs directly to dictionary server, it now accepts only
Timo Sirainen <tss@iki.fi>
parents: 3975
diff changeset
4 #include "array.h"
3855
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
5 #include "ioloop.h"
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
6 #include "network.h"
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
7 #include "fd-close-on-exec.h"
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
8 #include "env-util.h"
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
9 #include "log.h"
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
10 #include "dict-process.h"
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
11
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
12 #include <syslog.h>
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
13 #include <unistd.h>
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
14 #include <sys/stat.h>
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
15
3885
b624b687fe13 Create dict-server socket to base_dir.
Timo Sirainen <tss@iki.fi>
parents: 3879
diff changeset
16 #define DICT_SERVER_SOCKET_NAME "dict-server"
3855
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
17
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
18 struct dict_process {
3885
b624b687fe13 Create dict-server socket to base_dir.
Timo Sirainen <tss@iki.fi>
parents: 3879
diff changeset
19 char *path;
3855
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
20 int fd;
4393
9928ebb54719 Instead of passing URIs directly to dictionary server, it now accepts only
Timo Sirainen <tss@iki.fi>
parents: 3975
diff changeset
21
9928ebb54719 Instead of passing URIs directly to dictionary server, it now accepts only
Timo Sirainen <tss@iki.fi>
parents: 3975
diff changeset
22 struct log_io *log;
3855
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
23 struct io *io;
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
24 };
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
25
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
26 static struct dict_process *process;
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
27
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
28 static void dict_process_unlisten(struct dict_process *process);
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
29
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
30 static int dict_process_start(struct dict_process *process)
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
31 {
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
32 struct log_io *log;
4393
9928ebb54719 Instead of passing URIs directly to dictionary server, it now accepts only
Timo Sirainen <tss@iki.fi>
parents: 3975
diff changeset
33 const char *executable, *const *dicts;
9928ebb54719 Instead of passing URIs directly to dictionary server, it now accepts only
Timo Sirainen <tss@iki.fi>
parents: 3975
diff changeset
34 unsigned int i, count;
9928ebb54719 Instead of passing URIs directly to dictionary server, it now accepts only
Timo Sirainen <tss@iki.fi>
parents: 3975
diff changeset
35 int log_fd;
3855
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
36 pid_t pid;
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
37
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
38 log_fd = log_create_pipe(&log, 0);
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
39 if (log_fd < 0)
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
40 pid = -1;
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
41 else {
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
42 pid = fork();
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
43 if (pid < 0)
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
44 i_error("fork() failed: %m");
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
45 }
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
46
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
47 if (pid < 0) {
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
48 (void)close(log_fd);
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
49 return -1;
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
50 }
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
51
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
52 if (pid != 0) {
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
53 /* master */
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
54 PID_ADD_PROCESS_TYPE(pid, PROCESS_TYPE_DICT);
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
55 log_set_prefix(log, "dict: ");
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
56 (void)close(log_fd);
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
57
4393
9928ebb54719 Instead of passing URIs directly to dictionary server, it now accepts only
Timo Sirainen <tss@iki.fi>
parents: 3975
diff changeset
58 process->log = log;
9928ebb54719 Instead of passing URIs directly to dictionary server, it now accepts only
Timo Sirainen <tss@iki.fi>
parents: 3975
diff changeset
59 log_ref(process->log);
3855
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
60 dict_process_unlisten(process);
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
61 return 0;
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
62 }
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
63 log_set_prefix(log, "master-dict: ");
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
64
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
65 /* set stdin and stdout to /dev/null, so anything written into it
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
66 gets ignored. */
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
67 if (dup2(null_fd, 0) < 0)
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
68 i_fatal("dup2(stdin) failed: %m");
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
69 if (dup2(null_fd, 1) < 0)
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
70 i_fatal("dup2(stdout) failed: %m");
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
71
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
72 /* stderr = log, 3 = listener */
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
73 if (dup2(log_fd, 2) < 0)
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
74 i_fatal("dup2(stderr) failed: %m");
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
75 if (dup2(process->fd, 3) < 0)
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
76 i_fatal("dup2(3) failed: %m");
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
77
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
78 for (i = 0; i <= 3; i++)
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
79 fd_close_on_exec(i, FALSE);
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
80
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
81 child_process_init_env();
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
82 env_put(t_strconcat("DICT_LISTEN_FROM_FD=", process->path, NULL));
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
83
4393
9928ebb54719 Instead of passing URIs directly to dictionary server, it now accepts only
Timo Sirainen <tss@iki.fi>
parents: 3975
diff changeset
84 dicts = array_get(&settings_root->dicts, &count);
9928ebb54719 Instead of passing URIs directly to dictionary server, it now accepts only
Timo Sirainen <tss@iki.fi>
parents: 3975
diff changeset
85 i_assert((count % 2) == 0);
9928ebb54719 Instead of passing URIs directly to dictionary server, it now accepts only
Timo Sirainen <tss@iki.fi>
parents: 3975
diff changeset
86 for (i = 0; i < count; i += 2)
9928ebb54719 Instead of passing URIs directly to dictionary server, it now accepts only
Timo Sirainen <tss@iki.fi>
parents: 3975
diff changeset
87 env_put(t_strdup_printf("DICT_%s=%s", dicts[i], dicts[i+1]));
9928ebb54719 Instead of passing URIs directly to dictionary server, it now accepts only
Timo Sirainen <tss@iki.fi>
parents: 3975
diff changeset
88
3855
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
89 /* make sure we don't leak syslog fd, but do it last so that
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
90 any errors above will be logged */
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
91 closelog();
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
92
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
93 executable = PKG_LIBEXECDIR"/dict";
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
94 client_process_exec(executable, "");
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
95 i_fatal_status(FATAL_EXEC, "execv(%s) failed: %m", executable);
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
96 return -1;
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
97 }
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
98
4907
5b4c9b20eba0 Replaced void *context from a lot of callbacks with the actual context
Timo Sirainen <tss@iki.fi>
parents: 4393
diff changeset
99 static void dict_process_listen_input(struct dict_process *process)
3855
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
100 {
4393
9928ebb54719 Instead of passing URIs directly to dictionary server, it now accepts only
Timo Sirainen <tss@iki.fi>
parents: 3975
diff changeset
101 i_assert(process->log == NULL);
3855
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
102 dict_process_start(process);
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
103 }
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
104
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
105 static int dict_process_listen(struct dict_process *process)
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
106 {
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
107 mode_t old_umask;
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
108 int fd, i = 0;
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
109
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
110 for (;;) {
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
111 old_umask = umask(0);
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
112 process->fd = net_listen_unix(process->path, 64);
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
113 umask(old_umask);
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
114
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
115 if (process->fd != -1)
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
116 break;
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
117
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
118 if (errno != EADDRINUSE || ++i == 2) {
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
119 i_error("net_listen_unix(%s) failed: %m",
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
120 process->path);
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
121 return -1;
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
122 }
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
123
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
124 /* see if it really exists */
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
125 fd = net_connect_unix(process->path);
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
126 if (fd != -1 || errno != ECONNREFUSED) {
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
127 if (fd != -1) (void)close(fd);
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
128 i_error("Socket already exists: %s", process->path);
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
129 return -1;
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
130 }
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
131
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
132 /* delete and try again */
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
133 if (unlink(process->path) < 0 && errno != ENOENT) {
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
134 i_error("unlink(%s) failed: %m", process->path);
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
135 return -1;
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
136 }
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
137 }
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
138
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
139 fd_close_on_exec(process->fd, TRUE);
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
140 process->io = io_add(process->fd, IO_READ,
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
141 dict_process_listen_input, process);
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
142
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
143 return process->fd != -1 ? 0 : -1;
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
144 }
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
145
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
146 static void dict_process_unlisten(struct dict_process *process)
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
147 {
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
148 if (process->fd == -1)
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
149 return;
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
150
3960
aeb424e64f24 Call io_remove() before closing the fd. It's required by kqueue.
Timo Sirainen <tss@iki.fi>
parents: 3892
diff changeset
151 io_remove(&process->io);
aeb424e64f24 Call io_remove() before closing the fd. It's required by kqueue.
Timo Sirainen <tss@iki.fi>
parents: 3892
diff changeset
152
3855
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
153 if (close(process->fd) < 0)
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
154 i_error("close(dict) failed: %m");
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
155 process->fd = -1;
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
156 }
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
157
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
158 void dict_process_init(void)
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
159 {
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
160 process = i_new(struct dict_process, 1);
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
161 process->fd = -1;
3885
b624b687fe13 Create dict-server socket to base_dir.
Timo Sirainen <tss@iki.fi>
parents: 3879
diff changeset
162 process->path = i_strconcat(settings_root->defaults->base_dir,
3975
9de8bce1077e Added plugin {} section to dovecot.conf for passing extra environment
Timo Sirainen <tss@iki.fi>
parents: 3960
diff changeset
163 "/"DICT_SERVER_SOCKET_NAME, NULL);
9de8bce1077e Added plugin {} section to dovecot.conf for passing extra environment
Timo Sirainen <tss@iki.fi>
parents: 3960
diff changeset
164 (void)dict_process_listen(process);
3855
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
165 }
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
166
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
167 void dict_process_deinit(void)
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
168 {
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
169 dict_process_unlisten(process);
4393
9928ebb54719 Instead of passing URIs directly to dictionary server, it now accepts only
Timo Sirainen <tss@iki.fi>
parents: 3975
diff changeset
170 if (process->log != NULL)
9928ebb54719 Instead of passing URIs directly to dictionary server, it now accepts only
Timo Sirainen <tss@iki.fi>
parents: 3975
diff changeset
171 log_unref(process->log);
3885
b624b687fe13 Create dict-server socket to base_dir.
Timo Sirainen <tss@iki.fi>
parents: 3879
diff changeset
172 i_free(process->path);
3855
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
173 i_free(process);
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
174 }
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
175
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
176 void dict_process_restart(void)
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
177 {
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
178 dict_process_deinit();
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
179 dict_process_init();
8ce85fb481aa Forgot to add in last commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
180 }
4393
9928ebb54719 Instead of passing URIs directly to dictionary server, it now accepts only
Timo Sirainen <tss@iki.fi>
parents: 3975
diff changeset
181
9928ebb54719 Instead of passing URIs directly to dictionary server, it now accepts only
Timo Sirainen <tss@iki.fi>
parents: 3975
diff changeset
182 void dict_process_kill(void)
9928ebb54719 Instead of passing URIs directly to dictionary server, it now accepts only
Timo Sirainen <tss@iki.fi>
parents: 3975
diff changeset
183 {
9928ebb54719 Instead of passing URIs directly to dictionary server, it now accepts only
Timo Sirainen <tss@iki.fi>
parents: 3975
diff changeset
184 if (process->log != NULL) {
9928ebb54719 Instead of passing URIs directly to dictionary server, it now accepts only
Timo Sirainen <tss@iki.fi>
parents: 3975
diff changeset
185 log_unref(process->log);
9928ebb54719 Instead of passing URIs directly to dictionary server, it now accepts only
Timo Sirainen <tss@iki.fi>
parents: 3975
diff changeset
186 process->log = NULL;
9928ebb54719 Instead of passing URIs directly to dictionary server, it now accepts only
Timo Sirainen <tss@iki.fi>
parents: 3975
diff changeset
187 }
9928ebb54719 Instead of passing URIs directly to dictionary server, it now accepts only
Timo Sirainen <tss@iki.fi>
parents: 3975
diff changeset
188 }