LCOV - code coverage report
Current view: top level - resolve - resolved-dnssd-bus.c (source / functions) Hit Total Coverage
Test: systemd_full.info Lines: 0 65 0.0 %
Date: 2019-08-23 13:36:53 Functions: 0 3 0.0 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 0 56 0.0 %

           Branch data     Line data    Source code
       1                 :            : 
       2                 :            : #include "alloc-util.h"
       3                 :            : #include "bus-util.h"
       4                 :            : #include "missing_capability.h"
       5                 :            : #include "resolved-dnssd.h"
       6                 :            : #include "resolved-dnssd-bus.h"
       7                 :            : #include "resolved-link.h"
       8                 :            : #include "strv.h"
       9                 :            : #include "user-util.h"
      10                 :            : 
      11                 :          0 : int bus_dnssd_method_unregister(sd_bus_message *message, void *userdata, sd_bus_error *error) {
      12                 :          0 :         DnssdService *s = userdata;
      13                 :            :         DnssdTxtData *txt_data;
      14                 :            :         Manager *m;
      15                 :            :         Iterator i;
      16                 :            :         Link *l;
      17                 :            :         int r;
      18                 :            : 
      19         [ #  # ]:          0 :         assert(message);
      20         [ #  # ]:          0 :         assert(s);
      21                 :            : 
      22                 :          0 :         m = s->manager;
      23                 :            : 
      24                 :          0 :         r = bus_verify_polkit_async(message, CAP_SYS_ADMIN,
      25                 :            :                                     "org.freedesktop.resolve1.unregister-service",
      26                 :            :                                     NULL, false, s->originator,
      27                 :            :                                     &m->polkit_registry, error);
      28         [ #  # ]:          0 :         if (r < 0)
      29                 :          0 :                 return r;
      30         [ #  # ]:          0 :         if (r == 0)
      31                 :          0 :                 return 1; /* Polkit will call us back */
      32                 :            : 
      33         [ #  # ]:          0 :         HASHMAP_FOREACH(l, m->links, i) {
      34         [ #  # ]:          0 :                 if (l->mdns_ipv4_scope) {
      35                 :          0 :                         r = dns_scope_announce(l->mdns_ipv4_scope, true);
      36         [ #  # ]:          0 :                         if (r < 0)
      37         [ #  # ]:          0 :                                 log_warning_errno(r, "Failed to send goodbye messages in IPv4 scope: %m");
      38                 :            : 
      39                 :          0 :                         dns_zone_remove_rr(&l->mdns_ipv4_scope->zone, s->ptr_rr);
      40                 :          0 :                         dns_zone_remove_rr(&l->mdns_ipv4_scope->zone, s->srv_rr);
      41         [ #  # ]:          0 :                         LIST_FOREACH(items, txt_data, s->txt_data_items)
      42                 :          0 :                                 dns_zone_remove_rr(&l->mdns_ipv4_scope->zone, txt_data->rr);
      43                 :            :                 }
      44                 :            : 
      45         [ #  # ]:          0 :                 if (l->mdns_ipv6_scope) {
      46                 :          0 :                         r = dns_scope_announce(l->mdns_ipv6_scope, true);
      47         [ #  # ]:          0 :                         if (r < 0)
      48         [ #  # ]:          0 :                                 log_warning_errno(r, "Failed to send goodbye messages in IPv6 scope: %m");
      49                 :            : 
      50                 :          0 :                         dns_zone_remove_rr(&l->mdns_ipv6_scope->zone, s->ptr_rr);
      51                 :          0 :                         dns_zone_remove_rr(&l->mdns_ipv6_scope->zone, s->srv_rr);
      52         [ #  # ]:          0 :                         LIST_FOREACH(items, txt_data, s->txt_data_items)
      53                 :          0 :                                 dns_zone_remove_rr(&l->mdns_ipv6_scope->zone, txt_data->rr);
      54                 :            :                 }
      55                 :            :         }
      56                 :            : 
      57                 :          0 :         dnssd_service_free(s);
      58                 :            : 
      59                 :          0 :         manager_refresh_rrs(m);
      60                 :            : 
      61                 :          0 :         return sd_bus_reply_method_return(message, NULL);
      62                 :            : }
      63                 :            : 
      64                 :            : const sd_bus_vtable dnssd_vtable[] = {
      65                 :            :         SD_BUS_VTABLE_START(0),
      66                 :            : 
      67                 :            :         SD_BUS_METHOD("Unregister", NULL, NULL, bus_dnssd_method_unregister, SD_BUS_VTABLE_UNPRIVILEGED),
      68                 :            :         SD_BUS_SIGNAL("Conflicted", NULL, 0),
      69                 :            : 
      70                 :            :         SD_BUS_VTABLE_END
      71                 :            : };
      72                 :            : 
      73                 :          0 : int dnssd_object_find(sd_bus *bus, const char *path, const char *interface, void *userdata, void **found, sd_bus_error *error) {
      74                 :          0 :         _cleanup_free_ char *name = NULL;
      75                 :          0 :         Manager *m = userdata;
      76                 :            :         DnssdService *service;
      77                 :            :         int r;
      78                 :            : 
      79         [ #  # ]:          0 :         assert(bus);
      80         [ #  # ]:          0 :         assert(path);
      81         [ #  # ]:          0 :         assert(interface);
      82         [ #  # ]:          0 :         assert(found);
      83         [ #  # ]:          0 :         assert(m);
      84                 :            : 
      85                 :          0 :         r = sd_bus_path_decode(path, "/org/freedesktop/resolve1/dnssd", &name);
      86         [ #  # ]:          0 :         if (r <= 0)
      87                 :          0 :                 return 0;
      88                 :            : 
      89                 :          0 :         service = hashmap_get(m->dnssd_services, name);
      90         [ #  # ]:          0 :         if (!service)
      91                 :          0 :                 return 0;
      92                 :            : 
      93                 :          0 :         *found = service;
      94                 :          0 :         return 1;
      95                 :            : }
      96                 :            : 
      97                 :          0 : int dnssd_node_enumerator(sd_bus *bus, const char *path, void *userdata, char ***nodes, sd_bus_error *error) {
      98                 :          0 :         _cleanup_strv_free_ char **l = NULL;
      99                 :          0 :         Manager *m = userdata;
     100                 :            :         DnssdService *service;
     101                 :            :         Iterator i;
     102                 :          0 :         unsigned c = 0;
     103                 :            :         int r;
     104                 :            : 
     105         [ #  # ]:          0 :         assert(bus);
     106         [ #  # ]:          0 :         assert(path);
     107         [ #  # ]:          0 :         assert(m);
     108         [ #  # ]:          0 :         assert(nodes);
     109                 :            : 
     110         [ #  # ]:          0 :         l = new0(char*, hashmap_size(m->dnssd_services) + 1);
     111         [ #  # ]:          0 :         if (!l)
     112                 :          0 :                 return -ENOMEM;
     113                 :            : 
     114         [ #  # ]:          0 :         HASHMAP_FOREACH(service, m->dnssd_services, i) {
     115                 :            :                 char *p;
     116                 :            : 
     117                 :          0 :                 r = sd_bus_path_encode("/org/freedesktop/resolve1/dnssd", service->name, &p);
     118         [ #  # ]:          0 :                 if (r < 0)
     119                 :          0 :                         return r;
     120                 :            : 
     121                 :          0 :                 l[c++] = p;
     122                 :            :         }
     123                 :            : 
     124                 :          0 :         l[c] = NULL;
     125                 :          0 :         *nodes = TAKE_PTR(l);
     126                 :            : 
     127                 :          0 :         return 1;
     128                 :            : }

Generated by: LCOV version 1.14