chiark / gitweb /
bus: let's simplify things by getting rid of unnecessary bus parameters
[elogind.git] / src / libsystemd-bus / sd-bus.c
1 /*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
2
3 /***
4   This file is part of systemd.
5
6   Copyright 2013 Lennart Poettering
7
8   systemd is free software; you can redistribute it and/or modify it
9   under the terms of the GNU Lesser General Public License as published by
10   the Free Software Foundation; either version 2.1 of the License, or
11   (at your option) any later version.
12
13   systemd is distributed in the hope that it will be useful, but
14   WITHOUT ANY WARRANTY; without even the implied warranty of
15   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16   Lesser General Public License for more details.
17
18   You should have received a copy of the GNU Lesser General Public License
19   along with systemd; If not, see <http://www.gnu.org/licenses/>.
20 ***/
21
22 #include <endian.h>
23 #include <assert.h>
24 #include <stdlib.h>
25 #include <unistd.h>
26 #include <netdb.h>
27 #include <sys/poll.h>
28 #include <byteswap.h>
29 #include <sys/mman.h>
30 #include <pthread.h>
31
32 #include "util.h"
33 #include "macro.h"
34 #include "strv.h"
35 #include "set.h"
36 #include "missing.h"
37
38 #include "sd-bus.h"
39 #include "bus-internal.h"
40 #include "bus-message.h"
41 #include "bus-type.h"
42 #include "bus-socket.h"
43 #include "bus-kernel.h"
44 #include "bus-control.h"
45 #include "bus-introspect.h"
46 #include "bus-signature.h"
47 #include "bus-objects.h"
48 #include "bus-util.h"
49 #include "bus-container.h"
50
51 static int bus_poll(sd_bus *bus, bool need_more, uint64_t timeout_usec);
52
53 static void bus_close_fds(sd_bus *b) {
54         assert(b);
55
56         if (b->input_fd >= 0)
57                 close_nointr_nofail(b->input_fd);
58
59         if (b->output_fd >= 0 && b->output_fd != b->input_fd)
60                 close_nointr_nofail(b->output_fd);
61
62         b->input_fd = b->output_fd = -1;
63 }
64
65 static void bus_node_destroy(sd_bus *b, struct node *n) {
66         struct node_callback *c;
67         struct node_vtable *v;
68         struct node_enumerator *e;
69
70         assert(b);
71
72         if (!n)
73                 return;
74
75         while (n->child)
76                 bus_node_destroy(b, n->child);
77
78         while ((c = n->callbacks)) {
79                 LIST_REMOVE(callbacks, n->callbacks, c);
80                 free(c);
81         }
82
83         while ((v = n->vtables)) {
84                 LIST_REMOVE(vtables, n->vtables, v);
85                 free(v->interface);
86                 free(v);
87         }
88
89         while ((e = n->enumerators)) {
90                 LIST_REMOVE(enumerators, n->enumerators, e);
91                 free(e);
92         }
93
94         if (n->parent)
95                 LIST_REMOVE(siblings, n->parent->child, n);
96
97         assert_se(hashmap_remove(b->nodes, n->path) == n);
98         free(n->path);
99         free(n);
100 }
101
102 static void bus_free(sd_bus *b) {
103         struct filter_callback *f;
104         struct node *n;
105         unsigned i;
106
107         assert(b);
108
109         sd_bus_detach_event(b);
110
111         bus_close_fds(b);
112
113         if (b->kdbus_buffer)
114                 munmap(b->kdbus_buffer, KDBUS_POOL_SIZE);
115
116         free(b->rbuffer);
117         free(b->unique_name);
118         free(b->auth_buffer);
119         free(b->address);
120         free(b->kernel);
121         free(b->machine);
122
123         free(b->exec_path);
124         strv_free(b->exec_argv);
125
126         close_many(b->fds, b->n_fds);
127         free(b->fds);
128
129         for (i = 0; i < b->rqueue_size; i++)
130                 sd_bus_message_unref(b->rqueue[i]);
131         free(b->rqueue);
132
133         for (i = 0; i < b->wqueue_size; i++)
134                 sd_bus_message_unref(b->wqueue[i]);
135         free(b->wqueue);
136
137         hashmap_free_free(b->reply_callbacks);
138         prioq_free(b->reply_callbacks_prioq);
139
140         while ((f = b->filter_callbacks)) {
141                 LIST_REMOVE(callbacks, b->filter_callbacks, f);
142                 free(f);
143         }
144
145         bus_match_free(&b->match_callbacks);
146
147         hashmap_free_free(b->vtable_methods);
148         hashmap_free_free(b->vtable_properties);
149
150         while ((n = hashmap_first(b->nodes)))
151                 bus_node_destroy(b, n);
152
153         hashmap_free(b->nodes);
154
155         bus_kernel_flush_memfd(b);
156
157         assert_se(pthread_mutex_destroy(&b->memfd_cache_mutex) == 0);
158
159         free(b);
160 }
161
162 _public_ int sd_bus_new(sd_bus **ret) {
163         sd_bus *r;
164
165         assert_return(ret, -EINVAL);
166
167         r = new0(sd_bus, 1);
168         if (!r)
169                 return -ENOMEM;
170
171         r->n_ref = REFCNT_INIT;
172         r->input_fd = r->output_fd = -1;
173         r->message_version = 1;
174         r->hello_flags |= KDBUS_HELLO_ACCEPT_FD;
175         r->original_pid = getpid();
176
177         assert_se(pthread_mutex_init(&r->memfd_cache_mutex, NULL) == 0);
178
179         /* We guarantee that wqueue always has space for at least one
180          * entry */
181         r->wqueue = new(sd_bus_message*, 1);
182         if (!r->wqueue) {
183                 free(r);
184                 return -ENOMEM;
185         }
186
187         *ret = r;
188         return 0;
189 }
190
191 _public_ int sd_bus_set_address(sd_bus *bus, const char *address) {
192         char *a;
193
194         assert_return(bus, -EINVAL);
195         assert_return(bus->state == BUS_UNSET, -EPERM);
196         assert_return(address, -EINVAL);
197         assert_return(!bus_pid_changed(bus), -ECHILD);
198
199         a = strdup(address);
200         if (!a)
201                 return -ENOMEM;
202
203         free(bus->address);
204         bus->address = a;
205
206         return 0;
207 }
208
209 _public_ int sd_bus_set_fd(sd_bus *bus, int input_fd, int output_fd) {
210         assert_return(bus, -EINVAL);
211         assert_return(bus->state == BUS_UNSET, -EPERM);
212         assert_return(input_fd >= 0, -EINVAL);
213         assert_return(output_fd >= 0, -EINVAL);
214         assert_return(!bus_pid_changed(bus), -ECHILD);
215
216         bus->input_fd = input_fd;
217         bus->output_fd = output_fd;
218         return 0;
219 }
220
221 _public_ int sd_bus_set_exec(sd_bus *bus, const char *path, char *const argv[]) {
222         char *p, **a;
223
224         assert_return(bus, -EINVAL);
225         assert_return(bus->state == BUS_UNSET, -EPERM);
226         assert_return(path, -EINVAL);
227         assert_return(!strv_isempty(argv), -EINVAL);
228         assert_return(!bus_pid_changed(bus), -ECHILD);
229
230         p = strdup(path);
231         if (!p)
232                 return -ENOMEM;
233
234         a = strv_copy(argv);
235         if (!a) {
236                 free(p);
237                 return -ENOMEM;
238         }
239
240         free(bus->exec_path);
241         strv_free(bus->exec_argv);
242
243         bus->exec_path = p;
244         bus->exec_argv = a;
245
246         return 0;
247 }
248
249 _public_ int sd_bus_set_bus_client(sd_bus *bus, int b) {
250         assert_return(bus, -EINVAL);
251         assert_return(bus->state == BUS_UNSET, -EPERM);
252         assert_return(!bus_pid_changed(bus), -ECHILD);
253
254         bus->bus_client = !!b;
255         return 0;
256 }
257
258 _public_ int sd_bus_negotiate_fds(sd_bus *bus, int b) {
259         assert_return(bus, -EINVAL);
260         assert_return(bus->state == BUS_UNSET, -EPERM);
261         assert_return(!bus_pid_changed(bus), -ECHILD);
262
263         SET_FLAG(bus->hello_flags, KDBUS_HELLO_ACCEPT_FD, b);
264         return 0;
265 }
266
267 _public_ int sd_bus_negotiate_attach_timestamp(sd_bus *bus, int b) {
268         assert_return(bus, -EINVAL);
269         assert_return(bus->state == BUS_UNSET, -EPERM);
270         assert_return(!bus_pid_changed(bus), -ECHILD);
271
272         SET_FLAG(bus->hello_flags, KDBUS_HELLO_ATTACH_TIMESTAMP, b);
273         return 0;
274 }
275
276 _public_ int sd_bus_negotiate_attach_creds(sd_bus *bus, int b) {
277         assert_return(bus, -EINVAL);
278         assert_return(bus->state == BUS_UNSET, -EPERM);
279         assert_return(!bus_pid_changed(bus), -ECHILD);
280
281         SET_FLAG(bus->hello_flags, KDBUS_HELLO_ATTACH_CREDS, b);
282         return 0;
283 }
284
285 _public_ int sd_bus_negotiate_attach_comm(sd_bus *bus, int b) {
286         assert_return(bus, -EINVAL);
287         assert_return(bus->state == BUS_UNSET, -EPERM);
288         assert_return(!bus_pid_changed(bus), -ECHILD);
289
290         SET_FLAG(bus->hello_flags, KDBUS_HELLO_ATTACH_COMM, b);
291         return 0;
292 }
293
294 _public_ int sd_bus_negotiate_attach_exe(sd_bus *bus, int b) {
295         assert_return(bus, -EINVAL);
296         assert_return(bus->state == BUS_UNSET, -EPERM);
297         assert_return(!bus_pid_changed(bus), -ECHILD);
298
299         SET_FLAG(bus->hello_flags, KDBUS_HELLO_ATTACH_EXE, b);
300         return 0;
301 }
302
303 _public_ int sd_bus_negotiate_attach_cmdline(sd_bus *bus, int b) {
304         assert_return(bus, -EINVAL);
305         assert_return(bus->state == BUS_UNSET, -EPERM);
306         assert_return(!bus_pid_changed(bus), -ECHILD);
307
308         SET_FLAG(bus->hello_flags, KDBUS_HELLO_ATTACH_CMDLINE, b);
309         return 0;
310 }
311
312 _public_ int sd_bus_negotiate_attach_cgroup(sd_bus *bus, int b) {
313         assert_return(bus, -EINVAL);
314         assert_return(bus->state == BUS_UNSET, -EPERM);
315         assert_return(!bus_pid_changed(bus), -ECHILD);
316
317         SET_FLAG(bus->hello_flags, KDBUS_HELLO_ATTACH_CGROUP, b);
318         return 0;
319 }
320
321 _public_ int sd_bus_negotiate_attach_caps(sd_bus *bus, int b) {
322         assert_return(bus, -EINVAL);
323         assert_return(bus->state == BUS_UNSET, -EPERM);
324         assert_return(!bus_pid_changed(bus), -ECHILD);
325
326         SET_FLAG(bus->hello_flags, KDBUS_HELLO_ATTACH_CAPS, b);
327         return 0;
328 }
329
330 _public_ int sd_bus_negotiate_attach_selinux_context(sd_bus *bus, int b) {
331         assert_return(bus, -EINVAL);
332         assert_return(bus->state == BUS_UNSET, -EPERM);
333         assert_return(!bus_pid_changed(bus), -ECHILD);
334
335         SET_FLAG(bus->hello_flags, KDBUS_HELLO_ATTACH_SECLABEL, b);
336         return 0;
337 }
338
339 _public_ int sd_bus_negotiate_attach_audit(sd_bus *bus, int b) {
340         assert_return(bus, -EINVAL);
341         assert_return(bus->state == BUS_UNSET, -EPERM);
342         assert_return(!bus_pid_changed(bus), -ECHILD);
343
344         SET_FLAG(bus->hello_flags, KDBUS_HELLO_ATTACH_AUDIT, b);
345         return 0;
346 }
347
348 _public_ int sd_bus_set_server(sd_bus *bus, int b, sd_id128_t server_id) {
349         assert_return(bus, -EINVAL);
350         assert_return(b || sd_id128_equal(server_id, SD_ID128_NULL), -EINVAL);
351         assert_return(bus->state == BUS_UNSET, -EPERM);
352         assert_return(!bus_pid_changed(bus), -ECHILD);
353
354         bus->is_server = !!b;
355         bus->server_id = server_id;
356         return 0;
357 }
358
359 _public_ int sd_bus_set_anonymous(sd_bus *bus, int b) {
360         assert_return(bus, -EINVAL);
361         assert_return(bus->state == BUS_UNSET, -EPERM);
362         assert_return(!bus_pid_changed(bus), -ECHILD);
363
364         bus->anonymous_auth = !!b;
365         return 0;
366 }
367
368 static int hello_callback(sd_bus *bus, sd_bus_message *reply, void *userdata) {
369         const char *s;
370         int r;
371
372         assert(bus);
373         assert(bus->state == BUS_HELLO);
374         assert(reply);
375
376         r = sd_bus_message_get_errno(reply);
377         if (r < 0)
378                 return r;
379         if (r > 0)
380                 return -r;
381
382         r = sd_bus_message_read(reply, "s", &s);
383         if (r < 0)
384                 return r;
385
386         if (!service_name_is_valid(s) || s[0] != ':')
387                 return -EBADMSG;
388
389         bus->unique_name = strdup(s);
390         if (!bus->unique_name)
391                 return -ENOMEM;
392
393         bus->state = BUS_RUNNING;
394
395         return 1;
396 }
397
398 static int bus_send_hello(sd_bus *bus) {
399         _cleanup_bus_message_unref_ sd_bus_message *m = NULL;
400         int r;
401
402         assert(bus);
403
404         if (!bus->bus_client || bus->is_kernel)
405                 return 0;
406
407         r = sd_bus_message_new_method_call(
408                         bus,
409                         "org.freedesktop.DBus",
410                         "/",
411                         "org.freedesktop.DBus",
412                         "Hello",
413                         &m);
414         if (r < 0)
415                 return r;
416
417         return sd_bus_call_async(bus, m, hello_callback, NULL, 0, &bus->hello_serial);
418 }
419
420 int bus_start_running(sd_bus *bus) {
421         assert(bus);
422
423         if (bus->bus_client && !bus->is_kernel) {
424                 bus->state = BUS_HELLO;
425                 return 1;
426         }
427
428         bus->state = BUS_RUNNING;
429         return 1;
430 }
431
432 static int parse_address_key(const char **p, const char *key, char **value) {
433         size_t l, n = 0;
434         const char *a;
435         char *r = NULL;
436
437         assert(p);
438         assert(*p);
439         assert(value);
440
441         if (key) {
442                 l = strlen(key);
443                 if (strncmp(*p, key, l) != 0)
444                         return 0;
445
446                 if ((*p)[l] != '=')
447                         return 0;
448
449                 if (*value)
450                         return -EINVAL;
451
452                 a = *p + l + 1;
453         } else
454                 a = *p;
455
456         while (*a != ';' && *a != ',' && *a != 0) {
457                 char c, *t;
458
459                 if (*a == '%') {
460                         int x, y;
461
462                         x = unhexchar(a[1]);
463                         if (x < 0) {
464                                 free(r);
465                                 return x;
466                         }
467
468                         y = unhexchar(a[2]);
469                         if (y < 0) {
470                                 free(r);
471                                 return y;
472                         }
473
474                         c = (char) ((x << 4) | y);
475                         a += 3;
476                 } else {
477                         c = *a;
478                         a++;
479                 }
480
481                 t = realloc(r, n + 2);
482                 if (!t) {
483                         free(r);
484                         return -ENOMEM;
485                 }
486
487                 r = t;
488                 r[n++] = c;
489         }
490
491         if (!r) {
492                 r = strdup("");
493                 if (!r)
494                         return -ENOMEM;
495         } else
496                 r[n] = 0;
497
498         if (*a == ',')
499                 a++;
500
501         *p = a;
502
503         free(*value);
504         *value = r;
505
506         return 1;
507 }
508
509 static void skip_address_key(const char **p) {
510         assert(p);
511         assert(*p);
512
513         *p += strcspn(*p, ",");
514
515         if (**p == ',')
516                 (*p) ++;
517 }
518
519 static int parse_unix_address(sd_bus *b, const char **p, char **guid) {
520         _cleanup_free_ char *path = NULL, *abstract = NULL;
521         size_t l;
522         int r;
523
524         assert(b);
525         assert(p);
526         assert(*p);
527         assert(guid);
528
529         while (**p != 0 && **p != ';') {
530                 r = parse_address_key(p, "guid", guid);
531                 if (r < 0)
532                         return r;
533                 else if (r > 0)
534                         continue;
535
536                 r = parse_address_key(p, "path", &path);
537                 if (r < 0)
538                         return r;
539                 else if (r > 0)
540                         continue;
541
542                 r = parse_address_key(p, "abstract", &abstract);
543                 if (r < 0)
544                         return r;
545                 else if (r > 0)
546                         continue;
547
548                 skip_address_key(p);
549         }
550
551         if (!path && !abstract)
552                 return -EINVAL;
553
554         if (path && abstract)
555                 return -EINVAL;
556
557         if (path) {
558                 l = strlen(path);
559                 if (l > sizeof(b->sockaddr.un.sun_path))
560                         return -E2BIG;
561
562                 b->sockaddr.un.sun_family = AF_UNIX;
563                 strncpy(b->sockaddr.un.sun_path, path, sizeof(b->sockaddr.un.sun_path));
564                 b->sockaddr_size = offsetof(struct sockaddr_un, sun_path) + l;
565         } else if (abstract) {
566                 l = strlen(abstract);
567                 if (l > sizeof(b->sockaddr.un.sun_path) - 1)
568                         return -E2BIG;
569
570                 b->sockaddr.un.sun_family = AF_UNIX;
571                 b->sockaddr.un.sun_path[0] = 0;
572                 strncpy(b->sockaddr.un.sun_path+1, abstract, sizeof(b->sockaddr.un.sun_path)-1);
573                 b->sockaddr_size = offsetof(struct sockaddr_un, sun_path) + 1 + l;
574         }
575
576         return 0;
577 }
578
579 static int parse_tcp_address(sd_bus *b, const char **p, char **guid) {
580         _cleanup_free_ char *host = NULL, *port = NULL, *family = NULL;
581         int r;
582         struct addrinfo *result, hints = {
583                 .ai_socktype = SOCK_STREAM,
584                 .ai_flags = AI_ADDRCONFIG,
585         };
586
587         assert(b);
588         assert(p);
589         assert(*p);
590         assert(guid);
591
592         while (**p != 0 && **p != ';') {
593                 r = parse_address_key(p, "guid", guid);
594                 if (r < 0)
595                         return r;
596                 else if (r > 0)
597                         continue;
598
599                 r = parse_address_key(p, "host", &host);
600                 if (r < 0)
601                         return r;
602                 else if (r > 0)
603                         continue;
604
605                 r = parse_address_key(p, "port", &port);
606                 if (r < 0)
607                         return r;
608                 else if (r > 0)
609                         continue;
610
611                 r = parse_address_key(p, "family", &family);
612                 if (r < 0)
613                         return r;
614                 else if (r > 0)
615                         continue;
616
617                 skip_address_key(p);
618         }
619
620         if (!host || !port)
621                 return -EINVAL;
622
623         if (family) {
624                 if (streq(family, "ipv4"))
625                         hints.ai_family = AF_INET;
626                 else if (streq(family, "ipv6"))
627                         hints.ai_family = AF_INET6;
628                 else
629                         return -EINVAL;
630         }
631
632         r = getaddrinfo(host, port, &hints, &result);
633         if (r == EAI_SYSTEM)
634                 return -errno;
635         else if (r != 0)
636                 return -EADDRNOTAVAIL;
637
638         memcpy(&b->sockaddr, result->ai_addr, result->ai_addrlen);
639         b->sockaddr_size = result->ai_addrlen;
640
641         freeaddrinfo(result);
642
643         return 0;
644 }
645
646 static int parse_exec_address(sd_bus *b, const char **p, char **guid) {
647         char *path = NULL;
648         unsigned n_argv = 0, j;
649         char **argv = NULL;
650         int r;
651
652         assert(b);
653         assert(p);
654         assert(*p);
655         assert(guid);
656
657         while (**p != 0 && **p != ';') {
658                 r = parse_address_key(p, "guid", guid);
659                 if (r < 0)
660                         goto fail;
661                 else if (r > 0)
662                         continue;
663
664                 r = parse_address_key(p, "path", &path);
665                 if (r < 0)
666                         goto fail;
667                 else if (r > 0)
668                         continue;
669
670                 if (startswith(*p, "argv")) {
671                         unsigned ul;
672
673                         errno = 0;
674                         ul = strtoul(*p + 4, (char**) p, 10);
675                         if (errno > 0 || **p != '=' || ul > 256) {
676                                 r = -EINVAL;
677                                 goto fail;
678                         }
679
680                         (*p) ++;
681
682                         if (ul >= n_argv) {
683                                 char **x;
684
685                                 x = realloc(argv, sizeof(char*) * (ul + 2));
686                                 if (!x) {
687                                         r = -ENOMEM;
688                                         goto fail;
689                                 }
690
691                                 memset(x + n_argv, 0, sizeof(char*) * (ul - n_argv + 2));
692
693                                 argv = x;
694                                 n_argv = ul + 1;
695                         }
696
697                         r = parse_address_key(p, NULL, argv + ul);
698                         if (r < 0)
699                                 goto fail;
700
701                         continue;
702                 }
703
704                 skip_address_key(p);
705         }
706
707         if (!path) {
708                 r = -EINVAL;
709                 goto fail;
710         }
711
712         /* Make sure there are no holes in the array, with the
713          * exception of argv[0] */
714         for (j = 1; j < n_argv; j++)
715                 if (!argv[j]) {
716                         r = -EINVAL;
717                         goto fail;
718                 }
719
720         if (argv && argv[0] == NULL) {
721                 argv[0] = strdup(path);
722                 if (!argv[0]) {
723                         r = -ENOMEM;
724                         goto fail;
725                 }
726         }
727
728         b->exec_path = path;
729         b->exec_argv = argv;
730         return 0;
731
732 fail:
733         for (j = 0; j < n_argv; j++)
734                 free(argv[j]);
735
736         free(argv);
737         free(path);
738         return r;
739 }
740
741 static int parse_kernel_address(sd_bus *b, const char **p, char **guid) {
742         _cleanup_free_ char *path = NULL;
743         int r;
744
745         assert(b);
746         assert(p);
747         assert(*p);
748         assert(guid);
749
750         while (**p != 0 && **p != ';') {
751                 r = parse_address_key(p, "guid", guid);
752                 if (r < 0)
753                         return r;
754                 else if (r > 0)
755                         continue;
756
757                 r = parse_address_key(p, "path", &path);
758                 if (r < 0)
759                         return r;
760                 else if (r > 0)
761                         continue;
762
763                 skip_address_key(p);
764         }
765
766         if (!path)
767                 return -EINVAL;
768
769         free(b->kernel);
770         b->kernel = path;
771         path = NULL;
772
773         return 0;
774 }
775
776 static int parse_container_address(sd_bus *b, const char **p, char **guid) {
777         _cleanup_free_ char *machine = NULL;
778         int r;
779
780         assert(b);
781         assert(p);
782         assert(*p);
783         assert(guid);
784
785         while (**p != 0 && **p != ';') {
786                 r = parse_address_key(p, "guid", guid);
787                 if (r < 0)
788                         return r;
789                 else if (r > 0)
790                         continue;
791
792                 r = parse_address_key(p, "machine", &machine);
793                 if (r < 0)
794                         return r;
795                 else if (r > 0)
796                         continue;
797
798                 skip_address_key(p);
799         }
800
801         if (!machine)
802                 return -EINVAL;
803
804         free(b->machine);
805         b->machine = machine;
806         machine = NULL;
807
808         b->sockaddr.un.sun_family = AF_UNIX;
809         strncpy(b->sockaddr.un.sun_path, "/var/run/dbus/system_bus_socket", sizeof(b->sockaddr.un.sun_path));
810         b->sockaddr_size = offsetof(struct sockaddr_un, sun_path) + sizeof("/var/run/dbus/system_bus_socket") - 1;
811
812         return 0;
813 }
814
815 static void bus_reset_parsed_address(sd_bus *b) {
816         assert(b);
817
818         zero(b->sockaddr);
819         b->sockaddr_size = 0;
820         strv_free(b->exec_argv);
821         free(b->exec_path);
822         b->exec_path = NULL;
823         b->exec_argv = NULL;
824         b->server_id = SD_ID128_NULL;
825         free(b->kernel);
826         b->kernel = NULL;
827         free(b->machine);
828         b->machine = NULL;
829 }
830
831 static int bus_parse_next_address(sd_bus *b) {
832         _cleanup_free_ char *guid = NULL;
833         const char *a;
834         int r;
835
836         assert(b);
837
838         if (!b->address)
839                 return 0;
840         if (b->address[b->address_index] == 0)
841                 return 0;
842
843         bus_reset_parsed_address(b);
844
845         a = b->address + b->address_index;
846
847         while (*a != 0) {
848
849                 if (*a == ';') {
850                         a++;
851                         continue;
852                 }
853
854                 if (startswith(a, "unix:")) {
855                         a += 5;
856
857                         r = parse_unix_address(b, &a, &guid);
858                         if (r < 0)
859                                 return r;
860                         break;
861
862                 } else if (startswith(a, "tcp:")) {
863
864                         a += 4;
865                         r = parse_tcp_address(b, &a, &guid);
866                         if (r < 0)
867                                 return r;
868
869                         break;
870
871                 } else if (startswith(a, "unixexec:")) {
872
873                         a += 9;
874                         r = parse_exec_address(b, &a, &guid);
875                         if (r < 0)
876                                 return r;
877
878                         break;
879
880                 } else if (startswith(a, "kernel:")) {
881
882                         a += 7;
883                         r = parse_kernel_address(b, &a, &guid);
884                         if (r < 0)
885                                 return r;
886
887                         break;
888                 } else if (startswith(a, "x-container:")) {
889
890                         a += 12;
891                         r = parse_container_address(b, &a, &guid);
892                         if (r < 0)
893                                 return r;
894
895                         break;
896                 }
897
898                 a = strchr(a, ';');
899                 if (!a)
900                         return 0;
901         }
902
903         if (guid) {
904                 r = sd_id128_from_string(guid, &b->server_id);
905                 if (r < 0)
906                         return r;
907         }
908
909         b->address_index = a - b->address;
910         return 1;
911 }
912
913 static int bus_start_address(sd_bus *b) {
914         int r;
915
916         assert(b);
917
918         for (;;) {
919                 sd_bus_close(b);
920
921                 if (b->exec_path) {
922
923                         r = bus_socket_exec(b);
924                         if (r >= 0)
925                                 return r;
926
927                         b->last_connect_error = -r;
928                 } else if (b->kernel) {
929
930                         r = bus_kernel_connect(b);
931                         if (r >= 0)
932                                 return r;
933
934                         b->last_connect_error = -r;
935
936                 } else if (b->machine) {
937
938                         r = bus_container_connect(b);
939                         if (r >= 0)
940                                 return r;
941
942                         b->last_connect_error = -r;
943
944                 } else if (b->sockaddr.sa.sa_family != AF_UNSPEC) {
945
946                         r = bus_socket_connect(b);
947                         if (r >= 0)
948                                 return r;
949
950                         b->last_connect_error = -r;
951                 }
952
953                 r = bus_parse_next_address(b);
954                 if (r < 0)
955                         return r;
956                 if (r == 0)
957                         return b->last_connect_error ? -b->last_connect_error : -ECONNREFUSED;
958         }
959 }
960
961 int bus_next_address(sd_bus *b) {
962         assert(b);
963
964         bus_reset_parsed_address(b);
965         return bus_start_address(b);
966 }
967
968 static int bus_start_fd(sd_bus *b) {
969         struct stat st;
970         int r;
971
972         assert(b);
973         assert(b->input_fd >= 0);
974         assert(b->output_fd >= 0);
975
976         r = fd_nonblock(b->input_fd, true);
977         if (r < 0)
978                 return r;
979
980         r = fd_cloexec(b->input_fd, true);
981         if (r < 0)
982                 return r;
983
984         if (b->input_fd != b->output_fd) {
985                 r = fd_nonblock(b->output_fd, true);
986                 if (r < 0)
987                         return r;
988
989                 r = fd_cloexec(b->output_fd, true);
990                 if (r < 0)
991                         return r;
992         }
993
994         if (fstat(b->input_fd, &st) < 0)
995                 return -errno;
996
997         if (S_ISCHR(b->input_fd))
998                 return bus_kernel_take_fd(b);
999         else
1000                 return bus_socket_take_fd(b);
1001 }
1002
1003 _public_ int sd_bus_start(sd_bus *bus) {
1004         int r;
1005
1006         assert_return(bus, -EINVAL);
1007         assert_return(bus->state == BUS_UNSET, -EPERM);
1008         assert_return(!bus_pid_changed(bus), -ECHILD);
1009
1010         bus->state = BUS_OPENING;
1011
1012         if (bus->is_server && bus->bus_client)
1013                 return -EINVAL;
1014
1015         if (bus->input_fd >= 0)
1016                 r = bus_start_fd(bus);
1017         else if (bus->address || bus->sockaddr.sa.sa_family != AF_UNSPEC || bus->exec_path || bus->kernel || bus->machine)
1018                 r = bus_start_address(bus);
1019         else
1020                 return -EINVAL;
1021
1022         if (r < 0)
1023                 return r;
1024
1025         return bus_send_hello(bus);
1026 }
1027
1028 _public_ int sd_bus_open_system(sd_bus **ret) {
1029         const char *e;
1030         sd_bus *b;
1031         int r;
1032
1033         assert_return(ret, -EINVAL);
1034
1035         r = sd_bus_new(&b);
1036         if (r < 0)
1037                 return r;
1038
1039         e = secure_getenv("DBUS_SYSTEM_BUS_ADDRESS");
1040         if (e) {
1041                 r = sd_bus_set_address(b, e);
1042                 if (r < 0)
1043                         goto fail;
1044         } else {
1045                 b->sockaddr.un.sun_family = AF_UNIX;
1046                 strncpy(b->sockaddr.un.sun_path, "/run/dbus/system_bus_socket", sizeof(b->sockaddr.un.sun_path));
1047                 b->sockaddr_size = offsetof(struct sockaddr_un, sun_path) + sizeof("/run/dbus/system_bus_socket") - 1;
1048         }
1049
1050         b->bus_client = true;
1051
1052         r = sd_bus_start(b);
1053         if (r < 0)
1054                 goto fail;
1055
1056         *ret = b;
1057         return 0;
1058
1059 fail:
1060         bus_free(b);
1061         return r;
1062 }
1063
1064 _public_ int sd_bus_open_user(sd_bus **ret) {
1065         const char *e;
1066         sd_bus *b;
1067         size_t l;
1068         int r;
1069
1070         assert_return(ret, -EINVAL);
1071
1072         r = sd_bus_new(&b);
1073         if (r < 0)
1074                 return r;
1075
1076         e = secure_getenv("DBUS_SESSION_BUS_ADDRESS");
1077         if (e) {
1078                 r = sd_bus_set_address(b, e);
1079                 if (r < 0)
1080                         goto fail;
1081         } else {
1082                 e = secure_getenv("XDG_RUNTIME_DIR");
1083                 if (!e) {
1084                         r = -ENOENT;
1085                         goto fail;
1086                 }
1087
1088                 l = strlen(e);
1089                 if (l + 4 > sizeof(b->sockaddr.un.sun_path)) {
1090                         r = -E2BIG;
1091                         goto fail;
1092                 }
1093
1094                 b->sockaddr.un.sun_family = AF_UNIX;
1095                 memcpy(mempcpy(b->sockaddr.un.sun_path, e, l), "/bus", 4);
1096                 b->sockaddr_size = offsetof(struct sockaddr_un, sun_path) + l + 4;
1097         }
1098
1099         b->bus_client = true;
1100
1101         r = sd_bus_start(b);
1102         if (r < 0)
1103                 goto fail;
1104
1105         *ret = b;
1106         return 0;
1107
1108 fail:
1109         bus_free(b);
1110         return r;
1111 }
1112
1113 _public_ int sd_bus_open_system_remote(const char *host, sd_bus **ret) {
1114         _cleanup_free_ char *e = NULL;
1115         char *p = NULL;
1116         sd_bus *bus;
1117         int r;
1118
1119         assert_return(host, -EINVAL);
1120         assert_return(ret, -EINVAL);
1121
1122         e = bus_address_escape(host);
1123         if (!e)
1124                 return -ENOMEM;
1125
1126         p = strjoin("unixexec:path=ssh,argv1=-xT,argv2=", e, ",argv3=systemd-stdio-bridge", NULL);
1127         if (!p)
1128                 return -ENOMEM;
1129
1130         r = sd_bus_new(&bus);
1131         if (r < 0) {
1132                 free(p);
1133                 return r;
1134         }
1135
1136         bus->address = p;
1137         bus->bus_client = true;
1138
1139         r = sd_bus_start(bus);
1140         if (r < 0) {
1141                 bus_free(bus);
1142                 return r;
1143         }
1144
1145         *ret = bus;
1146         return 0;
1147 }
1148
1149 _public_ int sd_bus_open_system_container(const char *machine, sd_bus **ret) {
1150         _cleanup_free_ char *e = NULL;
1151         sd_bus *bus;
1152         char *p;
1153         int r;
1154
1155         assert_return(machine, -EINVAL);
1156         assert_return(ret, -EINVAL);
1157
1158         e = bus_address_escape(machine);
1159         if (!e)
1160                 return -ENOMEM;
1161
1162         p = strjoin("x-container:machine=", e, NULL);
1163         if (!p)
1164                 return -ENOMEM;
1165
1166         r = sd_bus_new(&bus);
1167         if (r < 0) {
1168                 free(p);
1169                 return r;
1170         }
1171
1172         bus->address = p;
1173         bus->bus_client = true;
1174
1175         r = sd_bus_start(bus);
1176         if (r < 0) {
1177                 bus_free(bus);
1178                 return r;
1179         }
1180
1181         *ret = bus;
1182         return 0;
1183 }
1184
1185 _public_ void sd_bus_close(sd_bus *bus) {
1186         if (!bus)
1187                 return;
1188         if (bus->state == BUS_CLOSED)
1189                 return;
1190         if (bus_pid_changed(bus))
1191                 return;
1192
1193         bus->state = BUS_CLOSED;
1194
1195         sd_bus_detach_event(bus);
1196
1197         if (!bus->is_kernel)
1198                 bus_close_fds(bus);
1199
1200         /* We'll leave the fd open in case this is a kernel bus, since
1201          * there might still be memblocks around that reference this
1202          * bus, and they might need to invoke the
1203          * KDBUS_CMD_MSG_RELEASE ioctl on the fd when they are
1204          * freed. */
1205 }
1206
1207 static void bus_enter_closing(sd_bus *bus) {
1208         assert(bus);
1209
1210         if (bus->state != BUS_OPENING &&
1211             bus->state != BUS_AUTHENTICATING &&
1212             bus->state != BUS_HELLO &&
1213             bus->state != BUS_RUNNING)
1214                 return;
1215
1216         bus->state = BUS_CLOSING;
1217 }
1218
1219 _public_ sd_bus *sd_bus_ref(sd_bus *bus) {
1220         assert_return(bus, NULL);
1221
1222         assert_se(REFCNT_INC(bus->n_ref) >= 2);
1223
1224         return bus;
1225 }
1226
1227 _public_ sd_bus *sd_bus_unref(sd_bus *bus) {
1228         assert_return(bus, NULL);
1229
1230         if (REFCNT_DEC(bus->n_ref) <= 0)
1231                 bus_free(bus);
1232
1233         return NULL;
1234 }
1235
1236 _public_ int sd_bus_is_open(sd_bus *bus) {
1237
1238         assert_return(bus, -EINVAL);
1239         assert_return(!bus_pid_changed(bus), -ECHILD);
1240
1241         return BUS_IS_OPEN(bus->state);
1242 }
1243
1244 _public_ int sd_bus_can_send(sd_bus *bus, char type) {
1245         int r;
1246
1247         assert_return(bus, -EINVAL);
1248         assert_return(bus->state != BUS_UNSET, -ENOTCONN);
1249         assert_return(!bus_pid_changed(bus), -ECHILD);
1250
1251         if (type == SD_BUS_TYPE_UNIX_FD) {
1252                 if (!(bus->hello_flags & KDBUS_HELLO_ACCEPT_FD))
1253                         return 0;
1254
1255                 r = bus_ensure_running(bus);
1256                 if (r < 0)
1257                         return r;
1258
1259                 return bus->can_fds;
1260         }
1261
1262         return bus_type_is_valid(type);
1263 }
1264
1265 _public_ int sd_bus_get_server_id(sd_bus *bus, sd_id128_t *server_id) {
1266         int r;
1267
1268         assert_return(bus, -EINVAL);
1269         assert_return(server_id, -EINVAL);
1270         assert_return(!bus_pid_changed(bus), -ECHILD);
1271
1272         r = bus_ensure_running(bus);
1273         if (r < 0)
1274                 return r;
1275
1276         *server_id = bus->server_id;
1277         return 0;
1278 }
1279
1280 static int bus_seal_message(sd_bus *b, sd_bus_message *m) {
1281         assert(m);
1282
1283         if (m->header->version > b->message_version)
1284                 return -EPERM;
1285
1286         if (m->sealed) {
1287                 /* If we copy the same message to multiple
1288                  * destinations, avoid using the same serial
1289                  * numbers. */
1290                 b->serial = MAX(b->serial, BUS_MESSAGE_SERIAL(m));
1291                 return 0;
1292         }
1293
1294         return bus_message_seal(m, ++b->serial);
1295 }
1296
1297 static int bus_write_message(sd_bus *bus, sd_bus_message *message, size_t *idx) {
1298         int r;
1299
1300         assert(bus);
1301         assert(message);
1302
1303         if (bus->is_kernel)
1304                 r = bus_kernel_write_message(bus, message);
1305         else
1306                 r = bus_socket_write_message(bus, message, idx);
1307
1308         return r;
1309 }
1310
1311 static int dispatch_wqueue(sd_bus *bus) {
1312         int r, ret = 0;
1313
1314         assert(bus);
1315         assert(bus->state == BUS_RUNNING || bus->state == BUS_HELLO);
1316
1317         while (bus->wqueue_size > 0) {
1318
1319                 r = bus_write_message(bus, bus->wqueue[0], &bus->windex);
1320                 if (r < 0)
1321                         return r;
1322                 else if (r == 0)
1323                         /* Didn't do anything this time */
1324                         return ret;
1325                 else if (bus->is_kernel || bus->windex >= BUS_MESSAGE_SIZE(bus->wqueue[0])) {
1326                         /* Fully written. Let's drop the entry from
1327                          * the queue.
1328                          *
1329                          * This isn't particularly optimized, but
1330                          * well, this is supposed to be our worst-case
1331                          * buffer only, and the socket buffer is
1332                          * supposed to be our primary buffer, and if
1333                          * it got full, then all bets are off
1334                          * anyway. */
1335
1336                         sd_bus_message_unref(bus->wqueue[0]);
1337                         bus->wqueue_size --;
1338                         memmove(bus->wqueue, bus->wqueue + 1, sizeof(sd_bus_message*) * bus->wqueue_size);
1339                         bus->windex = 0;
1340
1341                         ret = 1;
1342                 }
1343         }
1344
1345         return ret;
1346 }
1347
1348 static int bus_read_message(sd_bus *bus, sd_bus_message **m) {
1349         int r;
1350
1351         assert(bus);
1352         assert(m);
1353
1354         if (bus->is_kernel)
1355                 r = bus_kernel_read_message(bus, m);
1356         else
1357                 r = bus_socket_read_message(bus, m);
1358
1359         return r;
1360 }
1361
1362 static int dispatch_rqueue(sd_bus *bus, sd_bus_message **m) {
1363         sd_bus_message *z = NULL;
1364         int r, ret = 0;
1365
1366         assert(bus);
1367         assert(m);
1368         assert(bus->state == BUS_RUNNING || bus->state == BUS_HELLO);
1369
1370         if (bus->rqueue_size > 0) {
1371                 /* Dispatch a queued message */
1372
1373                 *m = bus->rqueue[0];
1374                 bus->rqueue_size --;
1375                 memmove(bus->rqueue, bus->rqueue + 1, sizeof(sd_bus_message*) * bus->rqueue_size);
1376                 return 1;
1377         }
1378
1379         /* Try to read a new message */
1380         do {
1381                 r = bus_read_message(bus, &z);
1382                 if (r < 0)
1383                         return r;
1384                 if (r == 0)
1385                         return ret;
1386
1387                 ret = 1;
1388         } while (!z);
1389
1390         *m = z;
1391         return ret;
1392 }
1393
1394 _public_ int sd_bus_send(sd_bus *bus, sd_bus_message *m, uint64_t *serial) {
1395         int r;
1396
1397         assert_return(bus, -EINVAL);
1398         assert_return(BUS_IS_OPEN(bus->state), -ENOTCONN);
1399         assert_return(m, -EINVAL);
1400         assert_return(!bus_pid_changed(bus), -ECHILD);
1401
1402         if (m->n_fds > 0) {
1403                 r = sd_bus_can_send(bus, SD_BUS_TYPE_UNIX_FD);
1404                 if (r < 0)
1405                         return r;
1406                 if (r == 0)
1407                         return -ENOTSUP;
1408         }
1409
1410         /* If the serial number isn't kept, then we know that no reply
1411          * is expected */
1412         if (!serial && !m->sealed)
1413                 m->header->flags |= SD_BUS_MESSAGE_NO_REPLY_EXPECTED;
1414
1415         r = bus_seal_message(bus, m);
1416         if (r < 0)
1417                 return r;
1418
1419         /* If this is a reply and no reply was requested, then let's
1420          * suppress this, if we can */
1421         if (m->dont_send && !serial)
1422                 return 1;
1423
1424         if ((bus->state == BUS_RUNNING || bus->state == BUS_HELLO) && bus->wqueue_size <= 0) {
1425                 size_t idx = 0;
1426
1427                 r = bus_write_message(bus, m, &idx);
1428                 if (r < 0)
1429                         return r;
1430                 else if (!bus->is_kernel && idx < BUS_MESSAGE_SIZE(m))  {
1431                         /* Wasn't fully written. So let's remember how
1432                          * much was written. Note that the first entry
1433                          * of the wqueue array is always allocated so
1434                          * that we always can remember how much was
1435                          * written. */
1436                         bus->wqueue[0] = sd_bus_message_ref(m);
1437                         bus->wqueue_size = 1;
1438                         bus->windex = idx;
1439                 }
1440         } else {
1441                 sd_bus_message **q;
1442
1443                 /* Just append it to the queue. */
1444
1445                 if (bus->wqueue_size >= BUS_WQUEUE_MAX)
1446                         return -ENOBUFS;
1447
1448                 q = realloc(bus->wqueue, sizeof(sd_bus_message*) * (bus->wqueue_size + 1));
1449                 if (!q)
1450                         return -ENOMEM;
1451
1452                 bus->wqueue = q;
1453                 q[bus->wqueue_size ++] = sd_bus_message_ref(m);
1454         }
1455
1456         if (serial)
1457                 *serial = BUS_MESSAGE_SERIAL(m);
1458
1459         return 1;
1460 }
1461
1462 _public_ int sd_bus_send_to(sd_bus *bus, sd_bus_message *m, const char *destination, uint64_t *serial) {
1463         int r;
1464
1465         assert_return(bus, -EINVAL);
1466         assert_return(BUS_IS_OPEN(bus->state), -ENOTCONN);
1467         assert_return(m, -EINVAL);
1468         assert_return(!bus_pid_changed(bus), -ECHILD);
1469
1470         if (!streq_ptr(m->destination, destination)) {
1471
1472                 if (!destination)
1473                         return -EEXIST;
1474
1475                 r = sd_bus_message_set_destination(m, destination);
1476                 if (r < 0)
1477                         return r;
1478         }
1479
1480         return sd_bus_send(bus, m, serial);
1481 }
1482
1483 static usec_t calc_elapse(uint64_t usec) {
1484         if (usec == (uint64_t) -1)
1485                 return 0;
1486
1487         if (usec == 0)
1488                 usec = BUS_DEFAULT_TIMEOUT;
1489
1490         return now(CLOCK_MONOTONIC) + usec;
1491 }
1492
1493 static int timeout_compare(const void *a, const void *b) {
1494         const struct reply_callback *x = a, *y = b;
1495
1496         if (x->timeout != 0 && y->timeout == 0)
1497                 return -1;
1498
1499         if (x->timeout == 0 && y->timeout != 0)
1500                 return 1;
1501
1502         if (x->timeout < y->timeout)
1503                 return -1;
1504
1505         if (x->timeout > y->timeout)
1506                 return 1;
1507
1508         return 0;
1509 }
1510
1511 _public_ int sd_bus_call_async(
1512                 sd_bus *bus,
1513                 sd_bus_message *m,
1514                 sd_bus_message_handler_t callback,
1515                 void *userdata,
1516                 uint64_t usec,
1517                 uint64_t *serial) {
1518
1519         struct reply_callback *c;
1520         int r;
1521
1522         assert_return(bus, -EINVAL);
1523         assert_return(BUS_IS_OPEN(bus->state), -ENOTCONN);
1524         assert_return(m, -EINVAL);
1525         assert_return(m->header->type == SD_BUS_MESSAGE_METHOD_CALL, -EINVAL);
1526         assert_return(!(m->header->flags & SD_BUS_MESSAGE_NO_REPLY_EXPECTED), -EINVAL);
1527         assert_return(callback, -EINVAL);
1528         assert_return(!bus_pid_changed(bus), -ECHILD);
1529
1530         r = hashmap_ensure_allocated(&bus->reply_callbacks, uint64_hash_func, uint64_compare_func);
1531         if (r < 0)
1532                 return r;
1533
1534         if (usec != (uint64_t) -1) {
1535                 r = prioq_ensure_allocated(&bus->reply_callbacks_prioq, timeout_compare);
1536                 if (r < 0)
1537                         return r;
1538         }
1539
1540         r = bus_seal_message(bus, m);
1541         if (r < 0)
1542                 return r;
1543
1544         c = new0(struct reply_callback, 1);
1545         if (!c)
1546                 return -ENOMEM;
1547
1548         c->callback = callback;
1549         c->userdata = userdata;
1550         c->serial = BUS_MESSAGE_SERIAL(m);
1551         c->timeout = calc_elapse(usec);
1552
1553         r = hashmap_put(bus->reply_callbacks, &c->serial, c);
1554         if (r < 0) {
1555                 free(c);
1556                 return r;
1557         }
1558
1559         if (c->timeout != 0) {
1560                 r = prioq_put(bus->reply_callbacks_prioq, c, &c->prioq_idx);
1561                 if (r < 0) {
1562                         c->timeout = 0;
1563                         sd_bus_call_async_cancel(bus, c->serial);
1564                         return r;
1565                 }
1566         }
1567
1568         r = sd_bus_send(bus, m, serial);
1569         if (r < 0) {
1570                 sd_bus_call_async_cancel(bus, c->serial);
1571                 return r;
1572         }
1573
1574         return r;
1575 }
1576
1577 _public_ int sd_bus_call_async_cancel(sd_bus *bus, uint64_t serial) {
1578         struct reply_callback *c;
1579
1580         assert_return(bus, -EINVAL);
1581         assert_return(serial != 0, -EINVAL);
1582         assert_return(!bus_pid_changed(bus), -ECHILD);
1583
1584         c = hashmap_remove(bus->reply_callbacks, &serial);
1585         if (!c)
1586                 return 0;
1587
1588         if (c->timeout != 0)
1589                 prioq_remove(bus->reply_callbacks_prioq, c, &c->prioq_idx);
1590
1591         free(c);
1592         return 1;
1593 }
1594
1595 int bus_ensure_running(sd_bus *bus) {
1596         int r;
1597
1598         assert(bus);
1599
1600         if (bus->state == BUS_UNSET || bus->state == BUS_CLOSED || bus->state == BUS_CLOSING)
1601                 return -ENOTCONN;
1602         if (bus->state == BUS_RUNNING)
1603                 return 1;
1604
1605         for (;;) {
1606                 r = sd_bus_process(bus, NULL);
1607                 if (r < 0)
1608                         return r;
1609                 if (bus->state == BUS_RUNNING)
1610                         return 1;
1611                 if (r > 0)
1612                         continue;
1613
1614                 r = sd_bus_wait(bus, (uint64_t) -1);
1615                 if (r < 0)
1616                         return r;
1617         }
1618 }
1619
1620 _public_ int sd_bus_call(
1621                 sd_bus *bus,
1622                 sd_bus_message *m,
1623                 uint64_t usec,
1624                 sd_bus_error *error,
1625                 sd_bus_message **reply) {
1626
1627         int r;
1628         usec_t timeout;
1629         uint64_t serial;
1630         bool room = false;
1631
1632         assert_return(bus, -EINVAL);
1633         assert_return(BUS_IS_OPEN(bus->state), -ENOTCONN);
1634         assert_return(m, -EINVAL);
1635         assert_return(m->header->type == SD_BUS_MESSAGE_METHOD_CALL, -EINVAL);
1636         assert_return(!(m->header->flags & SD_BUS_MESSAGE_NO_REPLY_EXPECTED), -EINVAL);
1637         assert_return(!bus_error_is_dirty(error), -EINVAL);
1638         assert_return(!bus_pid_changed(bus), -ECHILD);
1639
1640         r = bus_ensure_running(bus);
1641         if (r < 0)
1642                 return r;
1643
1644         r = sd_bus_send(bus, m, &serial);
1645         if (r < 0)
1646                 return r;
1647
1648         timeout = calc_elapse(usec);
1649
1650         for (;;) {
1651                 usec_t left;
1652                 sd_bus_message *incoming = NULL;
1653
1654                 if (!room) {
1655                         sd_bus_message **q;
1656
1657                         if (bus->rqueue_size >= BUS_RQUEUE_MAX)
1658                                 return -ENOBUFS;
1659
1660                         /* Make sure there's room for queuing this
1661                          * locally, before we read the message */
1662
1663                         q = realloc(bus->rqueue, (bus->rqueue_size + 1) * sizeof(sd_bus_message*));
1664                         if (!q)
1665                                 return -ENOMEM;
1666
1667                         bus->rqueue = q;
1668                         room = true;
1669                 }
1670
1671                 r = bus_read_message(bus, &incoming);
1672                 if (r < 0)
1673                         return r;
1674
1675                 if (incoming) {
1676
1677                         if (incoming->reply_serial == serial) {
1678                                 /* Found a match! */
1679
1680                                 if (incoming->header->type == SD_BUS_MESSAGE_METHOD_RETURN) {
1681
1682                                         if (reply)
1683                                                 *reply = incoming;
1684                                         else
1685                                                 sd_bus_message_unref(incoming);
1686
1687                                         return 1;
1688                                 }
1689
1690                                 if (incoming->header->type == SD_BUS_MESSAGE_METHOD_ERROR) {
1691                                         int k;
1692
1693                                         r = sd_bus_error_copy(error, &incoming->error);
1694                                         if (r < 0) {
1695                                                 sd_bus_message_unref(incoming);
1696                                                 return r;
1697                                         }
1698
1699                                         k = sd_bus_error_get_errno(&incoming->error);
1700                                         sd_bus_message_unref(incoming);
1701                                         return -k;
1702                                 }
1703
1704                                 sd_bus_message_unref(incoming);
1705                                 return -EIO;
1706
1707                         } else if (incoming->header->serial == serial &&
1708                                    bus->unique_name &&
1709                                    incoming->sender &&
1710                                    streq(bus->unique_name, incoming->sender)) {
1711
1712                                 /* Our own message? Somebody is trying
1713                                  * to send its own client a message,
1714                                  * let's not dead-lock, let's fail
1715                                  * immediately. */
1716
1717                                 sd_bus_message_unref(incoming);
1718                                 return -ELOOP;
1719                         }
1720
1721                         /* There's already guaranteed to be room for
1722                          * this, so need to resize things here */
1723                         bus->rqueue[bus->rqueue_size ++] = incoming;
1724                         room = false;
1725
1726                         /* Try to read more, right-away */
1727                         continue;
1728                 }
1729                 if (r != 0)
1730                         continue;
1731
1732                 if (timeout > 0) {
1733                         usec_t n;
1734
1735                         n = now(CLOCK_MONOTONIC);
1736                         if (n >= timeout)
1737                                 return -ETIMEDOUT;
1738
1739                         left = timeout - n;
1740                 } else
1741                         left = (uint64_t) -1;
1742
1743                 r = bus_poll(bus, true, left);
1744                 if (r < 0)
1745                         return r;
1746
1747                 r = dispatch_wqueue(bus);
1748                 if (r < 0)
1749                         return r;
1750         }
1751 }
1752
1753 _public_ int sd_bus_get_fd(sd_bus *bus) {
1754
1755         assert_return(bus, -EINVAL);
1756         assert_return(bus->input_fd == bus->output_fd, -EPERM);
1757         assert_return(!bus_pid_changed(bus), -ECHILD);
1758
1759         return bus->input_fd;
1760 }
1761
1762 _public_ int sd_bus_get_events(sd_bus *bus) {
1763         int flags = 0;
1764
1765         assert_return(bus, -EINVAL);
1766         assert_return(BUS_IS_OPEN(bus->state) || bus->state == BUS_CLOSING, -ENOTCONN);
1767         assert_return(!bus_pid_changed(bus), -ECHILD);
1768
1769         if (bus->state == BUS_OPENING)
1770                 flags |= POLLOUT;
1771         else if (bus->state == BUS_AUTHENTICATING) {
1772
1773                 if (bus_socket_auth_needs_write(bus))
1774                         flags |= POLLOUT;
1775
1776                 flags |= POLLIN;
1777
1778         } else if (bus->state == BUS_RUNNING || bus->state == BUS_HELLO) {
1779                 if (bus->rqueue_size <= 0)
1780                         flags |= POLLIN;
1781                 if (bus->wqueue_size > 0)
1782                         flags |= POLLOUT;
1783         }
1784
1785         return flags;
1786 }
1787
1788 _public_ int sd_bus_get_timeout(sd_bus *bus, uint64_t *timeout_usec) {
1789         struct reply_callback *c;
1790
1791         assert_return(bus, -EINVAL);
1792         assert_return(timeout_usec, -EINVAL);
1793         assert_return(BUS_IS_OPEN(bus->state) || bus->state == BUS_CLOSING, -ENOTCONN);
1794         assert_return(!bus_pid_changed(bus), -ECHILD);
1795
1796         if (bus->state == BUS_CLOSING) {
1797                 *timeout_usec = 0;
1798                 return 1;
1799         }
1800
1801         if (bus->state == BUS_AUTHENTICATING) {
1802                 *timeout_usec = bus->auth_timeout;
1803                 return 1;
1804         }
1805
1806         if (bus->state != BUS_RUNNING && bus->state != BUS_HELLO) {
1807                 *timeout_usec = (uint64_t) -1;
1808                 return 0;
1809         }
1810
1811         if (bus->rqueue_size > 0) {
1812                 *timeout_usec = 0;
1813                 return 1;
1814         }
1815
1816         c = prioq_peek(bus->reply_callbacks_prioq);
1817         if (!c) {
1818                 *timeout_usec = (uint64_t) -1;
1819                 return 0;
1820         }
1821
1822         *timeout_usec = c->timeout;
1823         return 1;
1824 }
1825
1826 static int process_timeout(sd_bus *bus) {
1827         _cleanup_bus_message_unref_ sd_bus_message* m = NULL;
1828         struct reply_callback *c;
1829         usec_t n;
1830         int r;
1831
1832         assert(bus);
1833
1834         c = prioq_peek(bus->reply_callbacks_prioq);
1835         if (!c)
1836                 return 0;
1837
1838         n = now(CLOCK_MONOTONIC);
1839         if (c->timeout > n)
1840                 return 0;
1841
1842         r = bus_message_new_synthetic_error(
1843                         bus,
1844                         c->serial,
1845                         &SD_BUS_ERROR_MAKE(SD_BUS_ERROR_NO_REPLY, "Method call timed out"),
1846                         &m);
1847         if (r < 0)
1848                 return r;
1849
1850         r = bus_seal_message(bus, m);
1851         if (r < 0)
1852                 return r;
1853
1854         assert_se(prioq_pop(bus->reply_callbacks_prioq) == c);
1855         hashmap_remove(bus->reply_callbacks, &c->serial);
1856
1857         bus->current = m;
1858         bus->iteration_counter ++;
1859
1860         r = c->callback(bus, m, c->userdata);
1861         free(c);
1862
1863         bus->current = NULL;
1864
1865         return r < 0 ? r : 1;
1866 }
1867
1868 static int process_hello(sd_bus *bus, sd_bus_message *m) {
1869         assert(bus);
1870         assert(m);
1871
1872         if (bus->state != BUS_HELLO)
1873                 return 0;
1874
1875         /* Let's make sure the first message on the bus is the HELLO
1876          * reply. But note that we don't actually parse the message
1877          * here (we leave that to the usual handling), we just verify
1878          * we don't let any earlier msg through. */
1879
1880         if (m->header->type != SD_BUS_MESSAGE_METHOD_RETURN &&
1881             m->header->type != SD_BUS_MESSAGE_METHOD_ERROR)
1882                 return -EIO;
1883
1884         if (m->reply_serial != bus->hello_serial)
1885                 return -EIO;
1886
1887         return 0;
1888 }
1889
1890 static int process_reply(sd_bus *bus, sd_bus_message *m) {
1891         struct reply_callback *c;
1892         int r;
1893
1894         assert(bus);
1895         assert(m);
1896
1897         if (m->header->type != SD_BUS_MESSAGE_METHOD_RETURN &&
1898             m->header->type != SD_BUS_MESSAGE_METHOD_ERROR)
1899                 return 0;
1900
1901         c = hashmap_remove(bus->reply_callbacks, &m->reply_serial);
1902         if (!c)
1903                 return 0;
1904
1905         if (c->timeout != 0)
1906                 prioq_remove(bus->reply_callbacks_prioq, c, &c->prioq_idx);
1907
1908         r = sd_bus_message_rewind(m, true);
1909         if (r < 0)
1910                 return r;
1911
1912         r = c->callback(bus, m, c->userdata);
1913         free(c);
1914
1915         return r < 0 ? r : 1;
1916 }
1917
1918 static int process_filter(sd_bus *bus, sd_bus_message *m) {
1919         struct filter_callback *l;
1920         int r;
1921
1922         assert(bus);
1923         assert(m);
1924
1925         do {
1926                 bus->filter_callbacks_modified = false;
1927
1928                 LIST_FOREACH(callbacks, l, bus->filter_callbacks) {
1929
1930                         if (bus->filter_callbacks_modified)
1931                                 break;
1932
1933                         /* Don't run this more than once per iteration */
1934                         if (l->last_iteration == bus->iteration_counter)
1935                                 continue;
1936
1937                         l->last_iteration = bus->iteration_counter;
1938
1939                         r = sd_bus_message_rewind(m, true);
1940                         if (r < 0)
1941                                 return r;
1942
1943                         r = l->callback(bus, m, l->userdata);
1944                         if (r != 0)
1945                                 return r;
1946
1947                 }
1948
1949         } while (bus->filter_callbacks_modified);
1950
1951         return 0;
1952 }
1953
1954 static int process_match(sd_bus *bus, sd_bus_message *m) {
1955         int r;
1956
1957         assert(bus);
1958         assert(m);
1959
1960         do {
1961                 bus->match_callbacks_modified = false;
1962
1963                 r = bus_match_run(bus, &bus->match_callbacks, m);
1964                 if (r != 0)
1965                         return r;
1966
1967         } while (bus->match_callbacks_modified);
1968
1969         return 0;
1970 }
1971
1972 static int process_builtin(sd_bus *bus, sd_bus_message *m) {
1973         _cleanup_bus_message_unref_ sd_bus_message *reply = NULL;
1974         int r;
1975
1976         assert(bus);
1977         assert(m);
1978
1979         if (m->header->type != SD_BUS_MESSAGE_METHOD_CALL)
1980                 return 0;
1981
1982         if (!streq_ptr(m->interface, "org.freedesktop.DBus.Peer"))
1983                 return 0;
1984
1985         if (m->header->flags & SD_BUS_MESSAGE_NO_REPLY_EXPECTED)
1986                 return 1;
1987
1988         if (streq_ptr(m->member, "Ping"))
1989                 r = sd_bus_message_new_method_return(m, &reply);
1990         else if (streq_ptr(m->member, "GetMachineId")) {
1991                 sd_id128_t id;
1992                 char sid[33];
1993
1994                 r = sd_id128_get_machine(&id);
1995                 if (r < 0)
1996                         return r;
1997
1998                 r = sd_bus_message_new_method_return(m, &reply);
1999                 if (r < 0)
2000                         return r;
2001
2002                 r = sd_bus_message_append(reply, "s", sd_id128_to_string(id, sid));
2003         } else {
2004                 r = sd_bus_message_new_method_errorf(
2005                                 m, &reply,
2006                                 SD_BUS_ERROR_UNKNOWN_METHOD,
2007                                  "Unknown method '%s' on interface '%s'.", m->member, m->interface);
2008         }
2009
2010         if (r < 0)
2011                 return r;
2012
2013         r = sd_bus_send(bus, reply, NULL);
2014         if (r < 0)
2015                 return r;
2016
2017         return 1;
2018 }
2019
2020 static int process_message(sd_bus *bus, sd_bus_message *m) {
2021         int r;
2022
2023         assert(bus);
2024         assert(m);
2025
2026         bus->current = m;
2027         bus->iteration_counter++;
2028
2029         log_debug("Got message sender=%s object=%s interface=%s member=%s",
2030                   strna(sd_bus_message_get_sender(m)),
2031                   strna(sd_bus_message_get_path(m)),
2032                   strna(sd_bus_message_get_interface(m)),
2033                   strna(sd_bus_message_get_member(m)));
2034
2035         r = process_hello(bus, m);
2036         if (r != 0)
2037                 goto finish;
2038
2039         r = process_reply(bus, m);
2040         if (r != 0)
2041                 goto finish;
2042
2043         r = process_filter(bus, m);
2044         if (r != 0)
2045                 goto finish;
2046
2047         r = process_match(bus, m);
2048         if (r != 0)
2049                 goto finish;
2050
2051         r = process_builtin(bus, m);
2052         if (r != 0)
2053                 goto finish;
2054
2055         r = bus_process_object(bus, m);
2056
2057 finish:
2058         bus->current = NULL;
2059         return r;
2060 }
2061
2062 static int process_running(sd_bus *bus, sd_bus_message **ret) {
2063         _cleanup_bus_message_unref_ sd_bus_message *m = NULL;
2064         int r;
2065
2066         assert(bus);
2067         assert(bus->state == BUS_RUNNING || bus->state == BUS_HELLO);
2068
2069         r = process_timeout(bus);
2070         if (r != 0)
2071                 goto null_message;
2072
2073         r = dispatch_wqueue(bus);
2074         if (r != 0)
2075                 goto null_message;
2076
2077         r = dispatch_rqueue(bus, &m);
2078         if (r < 0)
2079                 return r;
2080         if (!m)
2081                 goto null_message;
2082
2083         r = process_message(bus, m);
2084         if (r != 0)
2085                 goto null_message;
2086
2087         if (ret) {
2088                 r = sd_bus_message_rewind(m, true);
2089                 if (r < 0)
2090                         return r;
2091
2092                 *ret = m;
2093                 m = NULL;
2094                 return 1;
2095         }
2096
2097         if (m->header->type == SD_BUS_MESSAGE_METHOD_CALL) {
2098
2099                 r = sd_bus_reply_method_errorf(
2100                                 m,
2101                                 SD_BUS_ERROR_UNKNOWN_OBJECT,
2102                                 "Unknown object '%s'.", m->path);
2103                 if (r < 0)
2104                         return r;
2105         }
2106
2107         return 1;
2108
2109 null_message:
2110         if (r >= 0 && ret)
2111                 *ret = NULL;
2112
2113         return r;
2114 }
2115
2116 static int process_closing(sd_bus *bus, sd_bus_message **ret) {
2117         _cleanup_bus_message_unref_ sd_bus_message *m = NULL;
2118         struct reply_callback *c;
2119         int r;
2120
2121         assert(bus);
2122         assert(bus->state == BUS_CLOSING);
2123
2124         c = hashmap_first(bus->reply_callbacks);
2125         if (c) {
2126                 /* First, fail all outstanding method calls */
2127                 r = bus_message_new_synthetic_error(
2128                                 bus,
2129                                 c->serial,
2130                                 &SD_BUS_ERROR_MAKE(SD_BUS_ERROR_NO_REPLY, "Connection terminated"),
2131                                 &m);
2132                 if (r < 0)
2133                         return r;
2134
2135                 r = bus_seal_message(bus, m);
2136                 if (r < 0)
2137                         return r;
2138
2139                 if (c->timeout != 0)
2140                         prioq_remove(bus->reply_callbacks_prioq, c, &c->prioq_idx);
2141
2142                 hashmap_remove(bus->reply_callbacks, &c->serial);
2143
2144                 bus->current = m;
2145                 bus->iteration_counter++;
2146
2147                 r = c->callback(bus, m, c->userdata);
2148                 free(c);
2149
2150                 if (r >= 0)
2151                         r = 1;
2152
2153                 goto finish;
2154         }
2155
2156         /* Then, synthesize a Disconnected message */
2157         r = sd_bus_message_new_signal(
2158                         bus,
2159                         "/org/freedesktop/DBus/Local",
2160                         "org.freedesktop.DBus.Local",
2161                         "Disconnected",
2162                         &m);
2163         if (r < 0)
2164                 return r;
2165
2166         r = bus_seal_message(bus, m);
2167         if (r < 0)
2168                 return r;
2169
2170         sd_bus_close(bus);
2171
2172         bus->current = m;
2173         bus->iteration_counter++;
2174
2175         r = process_filter(bus, m);
2176         if (r != 0)
2177                 goto finish;
2178
2179         r = process_match(bus, m);
2180         if (r != 0)
2181                 goto finish;
2182
2183         if (ret) {
2184                 *ret = m;
2185                 m = NULL;
2186         }
2187
2188         r = 1;
2189
2190 finish:
2191         bus->current = NULL;
2192         return r;
2193 }
2194
2195 _public_ int sd_bus_process(sd_bus *bus, sd_bus_message **ret) {
2196         BUS_DONT_DESTROY(bus);
2197         int r;
2198
2199         /* Returns 0 when we didn't do anything. This should cause the
2200          * caller to invoke sd_bus_wait() before returning the next
2201          * time. Returns > 0 when we did something, which possibly
2202          * means *ret is filled in with an unprocessed message. */
2203
2204         assert_return(bus, -EINVAL);
2205         assert_return(!bus_pid_changed(bus), -ECHILD);
2206
2207         /* We don't allow recursively invoking sd_bus_process(). */
2208         assert_return(!bus->current, -EBUSY);
2209
2210         switch (bus->state) {
2211
2212         case BUS_UNSET:
2213         case BUS_CLOSED:
2214                 return -ENOTCONN;
2215
2216         case BUS_OPENING:
2217                 r = bus_socket_process_opening(bus);
2218                 if (r == -ECONNRESET || r == -EPIPE) {
2219                         bus_enter_closing(bus);
2220                         r = 1;
2221                 } else if (r < 0)
2222                         return r;
2223                 if (ret)
2224                         *ret = NULL;
2225                 return r;
2226
2227         case BUS_AUTHENTICATING:
2228                 r = bus_socket_process_authenticating(bus);
2229                 if (r == -ECONNRESET || r == -EPIPE) {
2230                         bus_enter_closing(bus);
2231                         r = 1;
2232                 } else if (r < 0)
2233                         return r;
2234
2235                 if (ret)
2236                         *ret = NULL;
2237
2238                 return r;
2239
2240         case BUS_RUNNING:
2241         case BUS_HELLO:
2242                 r = process_running(bus, ret);
2243                 if (r == -ECONNRESET || r == -EPIPE) {
2244                         bus_enter_closing(bus);
2245                         r = 1;
2246
2247                         if (ret)
2248                                 *ret = NULL;
2249                 }
2250
2251                 return r;
2252
2253         case BUS_CLOSING:
2254                 return process_closing(bus, ret);
2255         }
2256
2257         assert_not_reached("Unknown state");
2258 }
2259
2260 static int bus_poll(sd_bus *bus, bool need_more, uint64_t timeout_usec) {
2261         struct pollfd p[2] = {};
2262         int r, e, n;
2263         struct timespec ts;
2264         usec_t m = (usec_t) -1;
2265
2266         assert(bus);
2267
2268         if (bus->state == BUS_CLOSING)
2269                 return 1;
2270
2271         assert_return(BUS_IS_OPEN(bus->state), -ENOTCONN);
2272
2273         e = sd_bus_get_events(bus);
2274         if (e < 0)
2275                 return e;
2276
2277         if (need_more)
2278                 /* The caller really needs some more data, he doesn't
2279                  * care about what's already read, or any timeouts
2280                  * except its own.*/
2281                 e |= POLLIN;
2282         else {
2283                 usec_t until;
2284                 /* The caller wants to process if there's something to
2285                  * process, but doesn't care otherwise */
2286
2287                 r = sd_bus_get_timeout(bus, &until);
2288                 if (r < 0)
2289                         return r;
2290                 if (r > 0) {
2291                         usec_t nw;
2292                         nw = now(CLOCK_MONOTONIC);
2293                         m = until > nw ? until - nw : 0;
2294                 }
2295         }
2296
2297         if (timeout_usec != (uint64_t) -1 && (m == (uint64_t) -1 || timeout_usec < m))
2298                 m = timeout_usec;
2299
2300         p[0].fd = bus->input_fd;
2301         if (bus->output_fd == bus->input_fd) {
2302                 p[0].events = e;
2303                 n = 1;
2304         } else {
2305                 p[0].events = e & POLLIN;
2306                 p[1].fd = bus->output_fd;
2307                 p[1].events = e & POLLOUT;
2308                 n = 2;
2309         }
2310
2311         r = ppoll(p, n, m == (uint64_t) -1 ? NULL : timespec_store(&ts, m), NULL);
2312         if (r < 0)
2313                 return -errno;
2314
2315         return r > 0 ? 1 : 0;
2316 }
2317
2318 _public_ int sd_bus_wait(sd_bus *bus, uint64_t timeout_usec) {
2319
2320         assert_return(bus, -EINVAL);
2321         assert_return(!bus_pid_changed(bus), -ECHILD);
2322
2323         if (bus->state == BUS_CLOSING)
2324                 return 0;
2325
2326         assert_return(BUS_IS_OPEN(bus->state) , -ENOTCONN);
2327
2328         if (bus->rqueue_size > 0)
2329                 return 0;
2330
2331         return bus_poll(bus, false, timeout_usec);
2332 }
2333
2334 _public_ int sd_bus_flush(sd_bus *bus) {
2335         int r;
2336
2337         assert_return(bus, -EINVAL);
2338         assert_return(!bus_pid_changed(bus), -ECHILD);
2339
2340         if (bus->state == BUS_CLOSING)
2341                 return 0;
2342
2343         assert_return(BUS_IS_OPEN(bus->state), -ENOTCONN);
2344
2345         r = bus_ensure_running(bus);
2346         if (r < 0)
2347                 return r;
2348
2349         if (bus->wqueue_size <= 0)
2350                 return 0;
2351
2352         for (;;) {
2353                 r = dispatch_wqueue(bus);
2354                 if (r < 0)
2355                         return r;
2356
2357                 if (bus->wqueue_size <= 0)
2358                         return 0;
2359
2360                 r = bus_poll(bus, false, (uint64_t) -1);
2361                 if (r < 0)
2362                         return r;
2363         }
2364 }
2365
2366 _public_ int sd_bus_add_filter(sd_bus *bus,
2367                                sd_bus_message_handler_t callback,
2368                                void *userdata) {
2369
2370         struct filter_callback *f;
2371
2372         assert_return(bus, -EINVAL);
2373         assert_return(callback, -EINVAL);
2374         assert_return(!bus_pid_changed(bus), -ECHILD);
2375
2376         f = new0(struct filter_callback, 1);
2377         if (!f)
2378                 return -ENOMEM;
2379         f->callback = callback;
2380         f->userdata = userdata;
2381
2382         bus->filter_callbacks_modified = true;
2383         LIST_PREPEND(callbacks, bus->filter_callbacks, f);
2384         return 0;
2385 }
2386
2387 _public_ int sd_bus_remove_filter(sd_bus *bus,
2388                                   sd_bus_message_handler_t callback,
2389                                   void *userdata) {
2390
2391         struct filter_callback *f;
2392
2393         assert_return(bus, -EINVAL);
2394         assert_return(callback, -EINVAL);
2395         assert_return(!bus_pid_changed(bus), -ECHILD);
2396
2397         LIST_FOREACH(callbacks, f, bus->filter_callbacks) {
2398                 if (f->callback == callback && f->userdata == userdata) {
2399                         bus->filter_callbacks_modified = true;
2400                         LIST_REMOVE(callbacks, bus->filter_callbacks, f);
2401                         free(f);
2402                         return 1;
2403                 }
2404         }
2405
2406         return 0;
2407 }
2408
2409 _public_ int sd_bus_add_match(sd_bus *bus,
2410                               const char *match,
2411                               sd_bus_message_handler_t callback,
2412                               void *userdata) {
2413
2414         struct bus_match_component *components = NULL;
2415         unsigned n_components = 0;
2416         uint64_t cookie = 0;
2417         int r = 0;
2418
2419         assert_return(bus, -EINVAL);
2420         assert_return(match, -EINVAL);
2421         assert_return(!bus_pid_changed(bus), -ECHILD);
2422
2423         r = bus_match_parse(match, &components, &n_components);
2424         if (r < 0)
2425                 goto finish;
2426
2427         if (bus->bus_client) {
2428                 cookie = ++bus->match_cookie;
2429
2430                 r = bus_add_match_internal(bus, match, components, n_components, cookie);
2431                 if (r < 0)
2432                         goto finish;
2433         }
2434
2435         bus->match_callbacks_modified = true;
2436         r = bus_match_add(&bus->match_callbacks, components, n_components, callback, userdata, cookie, NULL);
2437         if (r < 0) {
2438                 if (bus->bus_client)
2439                         bus_remove_match_internal(bus, match, cookie);
2440         }
2441
2442 finish:
2443         bus_match_parse_free(components, n_components);
2444         return r;
2445 }
2446
2447 _public_ int sd_bus_remove_match(sd_bus *bus,
2448                                  const char *match,
2449                                  sd_bus_message_handler_t callback,
2450                                  void *userdata) {
2451
2452         struct bus_match_component *components = NULL;
2453         unsigned n_components = 0;
2454         int r = 0, q = 0;
2455         uint64_t cookie = 0;
2456
2457         assert_return(bus, -EINVAL);
2458         assert_return(match, -EINVAL);
2459         assert_return(!bus_pid_changed(bus), -ECHILD);
2460
2461         r = bus_match_parse(match, &components, &n_components);
2462         if (r < 0)
2463                 return r;
2464
2465         bus->match_callbacks_modified = true;
2466         r = bus_match_remove(&bus->match_callbacks, components, n_components, callback, userdata, &cookie);
2467
2468         if (bus->bus_client)
2469                 q = bus_remove_match_internal(bus, match, cookie);
2470
2471         bus_match_parse_free(components, n_components);
2472
2473         return r < 0 ? r : q;
2474 }
2475
2476 bool bus_pid_changed(sd_bus *bus) {
2477         assert(bus);
2478
2479         /* We don't support people creating a bus connection and
2480          * keeping it around over a fork(). Let's complain. */
2481
2482         return bus->original_pid != getpid();
2483 }
2484
2485 static int io_callback(sd_event_source *s, int fd, uint32_t revents, void *userdata) {
2486         sd_bus *bus = userdata;
2487         int r;
2488
2489         assert(bus);
2490
2491         r = sd_bus_process(bus, NULL);
2492         if (r < 0)
2493                 return r;
2494
2495         return 1;
2496 }
2497
2498 static int time_callback(sd_event_source *s, uint64_t usec, void *userdata) {
2499         sd_bus *bus = userdata;
2500         int r;
2501
2502         assert(bus);
2503
2504         r = sd_bus_process(bus, NULL);
2505         if (r < 0)
2506                 return r;
2507
2508         return 1;
2509 }
2510
2511 static int prepare_callback(sd_event_source *s, void *userdata) {
2512         sd_bus *bus = userdata;
2513         int r, e;
2514         usec_t until;
2515
2516         assert(s);
2517         assert(bus);
2518
2519         e = sd_bus_get_events(bus);
2520         if (e < 0)
2521                 return e;
2522
2523         if (bus->output_fd != bus->input_fd) {
2524
2525                 r = sd_event_source_set_io_events(bus->input_io_event_source, e & POLLIN);
2526                 if (r < 0)
2527                         return r;
2528
2529                 r = sd_event_source_set_io_events(bus->output_io_event_source, e & POLLOUT);
2530                 if (r < 0)
2531                         return r;
2532         } else {
2533                 r = sd_event_source_set_io_events(bus->input_io_event_source, e);
2534                 if (r < 0)
2535                         return r;
2536         }
2537
2538         r = sd_bus_get_timeout(bus, &until);
2539         if (r < 0)
2540                 return r;
2541         if (r > 0) {
2542                 int j;
2543
2544                 j = sd_event_source_set_time(bus->time_event_source, until);
2545                 if (j < 0)
2546                         return j;
2547         }
2548
2549         r = sd_event_source_set_enabled(bus->time_event_source, r > 0);
2550         if (r < 0)
2551                 return r;
2552
2553         return 1;
2554 }
2555
2556 static int quit_callback(sd_event_source *event, void *userdata) {
2557         sd_bus *bus = userdata;
2558
2559         assert(event);
2560
2561         sd_bus_flush(bus);
2562
2563         return 1;
2564 }
2565
2566 _public_ int sd_bus_attach_event(sd_bus *bus, sd_event *event, int priority) {
2567         int r;
2568
2569         assert_return(bus, -EINVAL);
2570         assert_return(!bus->event, -EBUSY);
2571
2572         assert(!bus->input_io_event_source);
2573         assert(!bus->output_io_event_source);
2574         assert(!bus->time_event_source);
2575
2576         if (event)
2577                 bus->event = sd_event_ref(event);
2578         else  {
2579                 r = sd_event_default(&bus->event);
2580                 if (r < 0)
2581                         return r;
2582         }
2583
2584         r = sd_event_add_io(bus->event, bus->input_fd, 0, io_callback, bus, &bus->input_io_event_source);
2585         if (r < 0)
2586                 goto fail;
2587
2588         r = sd_event_source_set_priority(bus->input_io_event_source, priority);
2589         if (r < 0)
2590                 goto fail;
2591
2592         if (bus->output_fd != bus->input_fd) {
2593                 r = sd_event_add_io(bus->event, bus->output_fd, 0, io_callback, bus, &bus->output_io_event_source);
2594                 if (r < 0)
2595                         goto fail;
2596
2597                 r = sd_event_source_set_priority(bus->output_io_event_source, priority);
2598                 if (r < 0)
2599                         goto fail;
2600         }
2601
2602         r = sd_event_source_set_prepare(bus->input_io_event_source, prepare_callback);
2603         if (r < 0)
2604                 goto fail;
2605
2606         r = sd_event_add_monotonic(bus->event, 0, 0, time_callback, bus, &bus->time_event_source);
2607         if (r < 0)
2608                 goto fail;
2609
2610         r = sd_event_source_set_priority(bus->time_event_source, priority);
2611         if (r < 0)
2612                 goto fail;
2613
2614         r = sd_event_add_quit(bus->event, quit_callback, bus, &bus->quit_event_source);
2615         if (r < 0)
2616                 goto fail;
2617
2618         return 0;
2619
2620 fail:
2621         sd_bus_detach_event(bus);
2622         return r;
2623 }
2624
2625 _public_ int sd_bus_detach_event(sd_bus *bus) {
2626         assert_return(bus, -EINVAL);
2627         assert_return(bus->event, -ENXIO);
2628
2629         if (bus->input_io_event_source) {
2630                 sd_event_source_set_enabled(bus->input_io_event_source, SD_EVENT_OFF);
2631                 bus->input_io_event_source = sd_event_source_unref(bus->input_io_event_source);
2632         }
2633
2634         if (bus->output_io_event_source) {
2635                 sd_event_source_set_enabled(bus->output_io_event_source, SD_EVENT_OFF);
2636                 bus->output_io_event_source = sd_event_source_unref(bus->output_io_event_source);
2637         }
2638
2639         if (bus->time_event_source) {
2640                 sd_event_source_set_enabled(bus->time_event_source, SD_EVENT_OFF);
2641                 bus->time_event_source = sd_event_source_unref(bus->time_event_source);
2642         }
2643
2644         if (bus->quit_event_source) {
2645                 sd_event_source_set_enabled(bus->quit_event_source, SD_EVENT_OFF);
2646                 bus->quit_event_source = sd_event_source_unref(bus->quit_event_source);
2647         }
2648
2649         if (bus->event)
2650                 bus->event = sd_event_unref(bus->event);
2651
2652         return 0;
2653 }
2654
2655 _public_ sd_bus_message* sd_bus_get_current(sd_bus *bus) {
2656         assert_return(bus, NULL);
2657
2658         return bus->current;
2659 }
2660
2661 static int bus_default(int (*bus_open)(sd_bus **), sd_bus **default_bus, sd_bus **ret) {
2662         sd_bus *b = NULL;
2663         int r;
2664
2665         assert(bus_open);
2666         assert(default_bus);
2667
2668         if (!ret)
2669                 return !!*default_bus;
2670
2671         if (*default_bus) {
2672                 *ret = sd_bus_ref(*default_bus);
2673                 return 0;
2674         }
2675
2676         r = bus_open(&b);
2677         if (r < 0)
2678                 return r;
2679
2680         b->default_bus_ptr = default_bus;
2681         b->tid = gettid();
2682         *default_bus = b;
2683
2684         *ret = b;
2685         return 1;
2686 }
2687
2688 _public_ int sd_bus_default_system(sd_bus **ret) {
2689         static __thread sd_bus *default_system_bus = NULL;
2690
2691         return bus_default(sd_bus_open_system, &default_system_bus, ret);
2692 }
2693
2694 _public_ int sd_bus_default_user(sd_bus **ret) {
2695         static __thread sd_bus *default_user_bus = NULL;
2696
2697         return bus_default(sd_bus_open_user, &default_user_bus, ret);
2698 }
2699
2700 _public_ int sd_bus_get_tid(sd_bus *b, pid_t *tid) {
2701         assert_return(b, -EINVAL);
2702         assert_return(tid, -EINVAL);
2703         assert_return(!bus_pid_changed(b), -ECHILD);
2704
2705         if (b->tid != 0) {
2706                 *tid = b->tid;
2707                 return 0;
2708         }
2709
2710         if (b->event)
2711                 return sd_event_get_tid(b->event, tid);
2712
2713         return -ENXIO;
2714 }
2715
2716 _public_ char *sd_bus_label_escape(const char *s) {
2717         char *r, *t;
2718         const char *f;
2719
2720         assert_return(s, NULL);
2721
2722         /* Escapes all chars that D-Bus' object path cannot deal
2723          * with. Can be reversed with bus_path_unescape(). We special
2724          * case the empty string. */
2725
2726         if (*s == 0)
2727                 return strdup("_");
2728
2729         r = new(char, strlen(s)*3 + 1);
2730         if (!r)
2731                 return NULL;
2732
2733         for (f = s, t = r; *f; f++) {
2734
2735                 /* Escape everything that is not a-zA-Z0-9. We also
2736                  * escape 0-9 if it's the first character */
2737
2738                 if (!(*f >= 'A' && *f <= 'Z') &&
2739                     !(*f >= 'a' && *f <= 'z') &&
2740                     !(f > s && *f >= '0' && *f <= '9')) {
2741                         *(t++) = '_';
2742                         *(t++) = hexchar(*f >> 4);
2743                         *(t++) = hexchar(*f);
2744                 } else
2745                         *(t++) = *f;
2746         }
2747
2748         *t = 0;
2749
2750         return r;
2751 }
2752
2753 _public_ char *sd_bus_label_unescape(const char *f) {
2754         char *r, *t;
2755
2756         assert_return(f, NULL);
2757
2758         /* Special case for the empty string */
2759         if (streq(f, "_"))
2760                 return strdup("");
2761
2762         r = new(char, strlen(f) + 1);
2763         if (!r)
2764                 return NULL;
2765
2766         for (t = r; *f; f++) {
2767
2768                 if (*f == '_') {
2769                         int a, b;
2770
2771                         if ((a = unhexchar(f[1])) < 0 ||
2772                             (b = unhexchar(f[2])) < 0) {
2773                                 /* Invalid escape code, let's take it literal then */
2774                                 *(t++) = '_';
2775                         } else {
2776                                 *(t++) = (char) ((a << 4) | b);
2777                                 f += 2;
2778                         }
2779                 } else
2780                         *(t++) = *f;
2781         }
2782
2783         *t = 0;
2784
2785         return r;
2786 }