Line 0
Link Here
|
|
|
1 |
--- ./src/server.c.orig 2009-05-13 03:11:11.000000000 -0400 |
2 |
+++ ./src/server.c 2010-06-22 05:31:57.000000000 -0400 |
3 |
@@ -568,7 +568,7 @@ |
4 |
the last command. A RESET command undoes the effect of this |
5 |
command. |
6 |
*/ |
7 |
-static int |
8 |
+static gpg_error_t |
9 |
cmd_session (assuan_context_t ctx, char *line) |
10 |
{ |
11 |
conn_ctrl_t ctrl = assuan_get_pointer (ctx); |
12 |
@@ -594,7 +594,7 @@ |
13 |
validity right away; if it does not (as here) all recipients are |
14 |
checked at the time of the ENCRYPT command. All RECIPIENT commands |
15 |
are cumulative until a RESET or an successful ENCRYPT command. */ |
16 |
-static int |
17 |
+static gpg_error_t |
18 |
cmd_recipient (assuan_context_t ctx, char *line) |
19 |
{ |
20 |
conn_ctrl_t ctrl = assuan_get_pointer (ctx); |
21 |
@@ -615,7 +615,7 @@ |
22 |
Set the file descriptor to read a message which is used with |
23 |
detached signatures. |
24 |
*/ |
25 |
-static int |
26 |
+static gpg_error_t |
27 |
cmd_message (assuan_context_t ctx, char *line) |
28 |
{ |
29 |
conn_ctrl_t ctrl = assuan_get_pointer (ctx); |
30 |
@@ -659,7 +659,7 @@ |
31 |
|
32 |
Encrypt the data received on INPUT to OUTPUT. |
33 |
*/ |
34 |
-static int |
35 |
+static gpg_error_t |
36 |
cmd_encrypt (assuan_context_t ctx, char *line) |
37 |
{ |
38 |
conn_ctrl_t ctrl = assuan_get_pointer (ctx); |
39 |
@@ -755,7 +755,7 @@ |
40 |
|
41 |
Dummy encryption command used to check whether the given recipients |
42 |
are all valid and to tell the client the preferred protocol. */ |
43 |
-static int |
44 |
+static gpg_error_t |
45 |
cmd_prep_encrypt (assuan_context_t ctx, char *line) |
46 |
{ |
47 |
conn_ctrl_t ctrl = assuan_get_pointer (ctx); |
48 |
@@ -814,7 +814,7 @@ |
49 |
@code{RESET} command. A second command overrides the effect of |
50 |
the first one; if EMAIL is not given the server shall use the |
51 |
default signing key. */ |
52 |
-static int |
53 |
+static gpg_error_t |
54 |
cmd_sender (assuan_context_t ctx, char *line) |
55 |
{ |
56 |
conn_ctrl_t ctrl = assuan_get_pointer (ctx); |
57 |
@@ -867,7 +867,7 @@ |
58 |
|
59 |
Sign the data received on INPUT to OUTPUT. |
60 |
*/ |
61 |
-static int |
62 |
+static gpg_error_t |
63 |
cmd_sign (assuan_context_t ctx, char *line) |
64 |
{ |
65 |
conn_ctrl_t ctrl = assuan_get_pointer (ctx); |
66 |
@@ -943,7 +943,7 @@ |
67 |
If the option --no-verify is given, the server should not try to |
68 |
verify a signature, in case the input data is an OpenPGP combined |
69 |
message. */ |
70 |
-static int |
71 |
+static gpg_error_t |
72 |
cmd_decrypt (assuan_context_t ctx, char *line) |
73 |
{ |
74 |
conn_ctrl_t ctrl = assuan_get_pointer (ctx); |
75 |
@@ -1058,7 +1058,7 @@ |
76 |
|
77 |
The DISPLAYSTRING is a percent-and-plus-encoded string with a short |
78 |
human readable description of the status. */ |
79 |
-static int |
80 |
+static gpg_error_t |
81 |
cmd_verify (assuan_context_t ctx, char *line) |
82 |
{ |
83 |
conn_ctrl_t ctrl = assuan_get_pointer (ctx); |
84 |
@@ -1143,7 +1143,7 @@ |
85 |
manager is brought into the foregound and that this command |
86 |
immediatley returns. |
87 |
*/ |
88 |
-static int |
89 |
+static gpg_error_t |
90 |
cmd_start_keymanager (assuan_context_t ctx, char *line) |
91 |
{ |
92 |
gpa_open_key_manager (NULL, NULL); |
93 |
@@ -1157,7 +1157,7 @@ |
94 |
manager is brought into the foregound and that this command |
95 |
immediatley returns. |
96 |
*/ |
97 |
-static int |
98 |
+static gpg_error_t |
99 |
cmd_start_cardmanager (assuan_context_t ctx, char *line) |
100 |
{ |
101 |
gpa_open_cardmanager (NULL, NULL); |
102 |
@@ -1172,7 +1172,7 @@ |
103 |
manager is brought into the foregound and that this command |
104 |
immediatley returns. |
105 |
*/ |
106 |
-static int |
107 |
+static gpg_error_t |
108 |
cmd_start_confdialog (assuan_context_t ctx, char *line) |
109 |
{ |
110 |
gpa_open_settings_dialog (NULL, NULL); |
111 |
@@ -1191,7 +1191,7 @@ |
112 |
version - Return the version of the program. |
113 |
pid - Return the process id of the server. |
114 |
*/ |
115 |
-static int |
116 |
+static gpg_error_t |
117 |
cmd_getinfo (assuan_context_t ctx, char *line) |
118 |
{ |
119 |
gpg_error_t err; |
120 |
@@ -1295,7 +1295,7 @@ |
121 |
|
122 |
Set the files on which to operate. |
123 |
*/ |
124 |
-static int |
125 |
+static gpg_error_t |
126 |
cmd_file (assuan_context_t ctx, char *line) |
127 |
{ |
128 |
gpg_error_t err = 0; |
129 |
@@ -1366,7 +1366,7 @@ |
130 |
|
131 |
|
132 |
/* ENCRYPT_FILES --nohup */ |
133 |
-static int |
134 |
+static gpg_error_t |
135 |
cmd_encrypt_files (assuan_context_t ctx, char *line) |
136 |
{ |
137 |
gpg_error_t err; |
138 |
@@ -1389,7 +1389,7 @@ |
139 |
|
140 |
|
141 |
/* SIGN_FILES --nohup */ |
142 |
-static int |
143 |
+static gpg_error_t |
144 |
cmd_sign_files (assuan_context_t ctx, char *line) |
145 |
{ |
146 |
gpg_error_t err; |
147 |
@@ -1412,7 +1412,7 @@ |
148 |
|
149 |
|
150 |
/* ENCRYPT_SIGN_FILES --nohup */ |
151 |
-static int |
152 |
+static gpg_error_t |
153 |
cmd_encrypt_sign_files (assuan_context_t ctx, char *line) |
154 |
{ |
155 |
gpg_error_t err; |
156 |
@@ -1474,7 +1474,7 @@ |
157 |
|
158 |
|
159 |
/* DECRYPT_FILES --nohup */ |
160 |
-static int |
161 |
+static gpg_error_t |
162 |
cmd_decrypt_files (assuan_context_t ctx, char *line) |
163 |
{ |
164 |
gpg_error_t err; |
165 |
@@ -1497,7 +1497,7 @@ |
166 |
|
167 |
|
168 |
/* VERIFY_FILES --nohup */ |
169 |
-static int |
170 |
+static gpg_error_t |
171 |
cmd_verify_files (assuan_context_t ctx, char *line) |
172 |
{ |
173 |
gpg_error_t err; |
174 |
@@ -1520,7 +1520,7 @@ |
175 |
|
176 |
|
177 |
/* DECRYPT_VERIFY_FILES --nohup */ |
178 |
-static int |
179 |
+static gpg_error_t |
180 |
cmd_decrypt_verify_files (assuan_context_t ctx, char *line) |
181 |
{ |
182 |
gpg_error_t err; |
183 |
@@ -1543,7 +1543,7 @@ |
184 |
|
185 |
|
186 |
/* IMPORT_FILES --nohup */ |
187 |
-static int |
188 |
+static gpg_error_t |
189 |
cmd_import_files (assuan_context_t ctx, char *line) |
190 |
{ |
191 |
gpg_error_t err; |
192 |
@@ -1567,7 +1567,7 @@ |
193 |
|
194 |
|
195 |
/* CHECKSUM_CREATE_FILES --nohup */ |
196 |
-static int |
197 |
+static gpg_error_t |
198 |
cmd_checksum_create_files (assuan_context_t ctx, char *line) |
199 |
{ |
200 |
gpg_error_t err; |
201 |
@@ -1591,7 +1591,7 @@ |
202 |
|
203 |
|
204 |
/* CHECKSUM_VERIFY_FILES --nohup */ |
205 |
-static int |
206 |
+static gpg_error_t |
207 |
cmd_checksum_verify_files (assuan_context_t ctx, char *line) |
208 |
{ |
209 |
gpg_error_t err; |
210 |
@@ -1614,8 +1614,8 @@ |
211 |
} |
212 |
|
213 |
|
214 |
-static void |
215 |
-reset_notify (assuan_context_t ctx) |
216 |
+static gpg_error_t |
217 |
+reset_notify (assuan_context_t ctx, char *line) |
218 |
{ |
219 |
conn_ctrl_t ctrl = assuan_get_pointer (ctx); |
220 |
|
221 |
@@ -1639,6 +1639,7 @@ |
222 |
ctrl->session_number = 0; |
223 |
xfree (ctrl->session_title); |
224 |
ctrl->session_title = NULL; |
225 |
+ return 0; |
226 |
} |
227 |
|
228 |
|
229 |
@@ -1648,7 +1649,7 @@ |
230 |
{ |
231 |
static struct { |
232 |
const char *name; |
233 |
- int (*handler)(assuan_context_t, char *line); |
234 |
+ assuan_handler_t handler; |
235 |
} table[] = { |
236 |
{ "SESSION", cmd_session }, |
237 |
{ "RECIPIENT", cmd_recipient }, |
238 |
@@ -1681,7 +1682,8 @@ |
239 |
|
240 |
for (i=0; table[i].name; i++) |
241 |
{ |
242 |
- rc = assuan_register_command (ctx, table[i].name, table[i].handler); |
243 |
+ rc = assuan_register_command (ctx, table[i].name, table[i].handler, |
244 |
+ NULL); |
245 |
if (rc) |
246 |
return rc; |
247 |
} |
248 |
@@ -1692,7 +1694,7 @@ |
249 |
|
250 |
/* Prepare for a new connection on descriptor FD. */ |
251 |
static assuan_context_t |
252 |
-connection_startup (int fd) |
253 |
+connection_startup (assuan_fd_t fd) |
254 |
{ |
255 |
gpg_error_t err; |
256 |
assuan_context_t ctx; |
257 |
@@ -1700,7 +1702,16 @@ |
258 |
|
259 |
/* Get an Assuan context for the already accepted file descriptor |
260 |
FD. Allow descriptor passing. */ |
261 |
- err = assuan_init_socket_server_ext (&ctx, ASSUAN_INT2FD(fd), 1|2); |
262 |
+ err = assuan_new (&ctx); |
263 |
+ if (err) |
264 |
+ { |
265 |
+ g_debug ("failed to initialize the new connection: %s", |
266 |
+ gpg_strerror (err)); |
267 |
+ return NULL; |
268 |
+ } |
269 |
+ |
270 |
+ err = assuan_init_socket_server (ctx, fd, ASSUAN_SOCKET_SERVER_FDPASSING |
271 |
+ | ASSUAN_SOCKET_SERVER_ACCEPTED); |
272 |
if (err) |
273 |
{ |
274 |
g_debug ("failed to initialize the new connection: %s", |
275 |
@@ -1712,7 +1723,7 @@ |
276 |
{ |
277 |
g_debug ("failed to register commands with Assuan: %s", |
278 |
gpg_strerror (err)); |
279 |
- assuan_deinit_server (ctx); |
280 |
+ assuan_release (ctx); |
281 |
return NULL; |
282 |
} |
283 |
|
284 |
@@ -1736,8 +1747,8 @@ |
285 |
{ |
286 |
conn_ctrl_t ctrl = assuan_get_pointer (ctx); |
287 |
|
288 |
- reset_notify (ctx); |
289 |
- assuan_deinit_server (ctx); |
290 |
+ reset_notify (ctx, NULL); |
291 |
+ assuan_release (ctx); |
292 |
g_free (ctrl); |
293 |
connection_counter--; |
294 |
if (!connection_counter && shutdown_pending) |
295 |
@@ -1805,14 +1816,23 @@ |
296 |
} |
297 |
else |
298 |
{ |
299 |
+ int done = 0; |
300 |
ctrl->in_command++; |
301 |
- err = assuan_process_next (ctx); |
302 |
+ err = assuan_process_next (ctx, &done); |
303 |
ctrl->in_command--; |
304 |
- g_debug ("assuan_process_next returned: %s", |
305 |
- err == -1? "EOF": gpg_strerror (err)); |
306 |
+ if (err) |
307 |
+ { |
308 |
+ g_debug ("assuan_process_next returned: %s <%s>", |
309 |
+ gpg_strerror (err), gpg_strsource (err)); |
310 |
+ } |
311 |
+ else |
312 |
+ { |
313 |
+ g_debug ("assuan_process_next returned: %s", |
314 |
+ done ? "done" : "success"); |
315 |
+ } |
316 |
if (gpg_err_code (err) == GPG_ERR_EAGAIN) |
317 |
; /* Ignore. */ |
318 |
- else if (gpg_err_code (err) == GPG_ERR_EOF || err == -1) |
319 |
+ else if (!err && done) |
320 |
{ |
321 |
if (ctrl->cont_cmd) |
322 |
ctrl->client_died = 1; /* Need to delay the cleanup. */ |
323 |
@@ -1868,14 +1888,14 @@ |
324 |
g_debug ("error accepting connection: %s", strerror (errno)); |
325 |
goto leave; |
326 |
} |
327 |
- if (assuan_sock_check_nonce (ASSUAN_INT2FD(fd), &socket_nonce)) |
328 |
+ if (assuan_sock_check_nonce ((assuan_fd_t) fd, &socket_nonce)) |
329 |
{ |
330 |
g_debug ("new connection at fd %d refused", fd); |
331 |
goto leave; |
332 |
} |
333 |
|
334 |
g_debug ("new connection at fd %d", fd); |
335 |
- ctx = connection_startup (fd); |
336 |
+ ctx = connection_startup ((assuan_fd_t) fd); |
337 |
if (!ctx) |
338 |
goto leave; |
339 |
|
340 |
@@ -1911,7 +1931,7 @@ |
341 |
|
342 |
leave: |
343 |
if (fd != -1) |
344 |
- assuan_sock_close (ASSUAN_INT2FD (fd)); |
345 |
+ assuan_sock_close ((assuan_fd_t) fd); |
346 |
return TRUE; /* Keep the listen_fd in the event loop. */ |
347 |
} |
348 |
|
349 |
@@ -1929,7 +1949,7 @@ |
350 |
GIOChannel *channel; |
351 |
unsigned int source_id; |
352 |
|
353 |
- assuan_set_assuan_err_source (GPG_ERR_SOURCE_DEFAULT); |
354 |
+ assuan_set_gpg_err_source (GPG_ERR_SOURCE_DEFAULT); |
355 |
|
356 |
socket_name = g_build_filename (gnupg_homedir, "S.uiserver", NULL); |
357 |
if (strlen (socket_name)+1 >= sizeof serv_addr.sun_path ) |
358 |
@@ -1974,14 +1994,14 @@ |
359 |
g_free (socket_name); |
360 |
socket_name = NULL; |
361 |
|
362 |
- if (listen (ASSUAN_FD2INT (fd), 5) == -1) |
363 |
+ if (listen ((int) fd, 5) == -1) |
364 |
{ |
365 |
g_debug ("listen() failed: %s\n", strerror (errno)); |
366 |
assuan_sock_close (fd); |
367 |
return; |
368 |
} |
369 |
#ifdef HAVE_W32_SYSTEM |
370 |
- channel = g_io_channel_win32_new_socket (ASSUAN_FD2INT(fd)); |
371 |
+ channel = g_io_channel_win32_new_socket ((int) fd); |
372 |
#else |
373 |
channel = g_io_channel_unix_new (fd); |
374 |
#endif |