LCOV - code coverage report
Current view: top level - reply-password - reply-password.c (source / functions) Hit Total Coverage
Test: systemd_full.info Lines: 0 40 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 42 0.0 %

           Branch data     Line data    Source code
       1                 :            : /* SPDX-License-Identifier: LGPL-2.1+ */
       2                 :            : 
       3                 :            : #include <errno.h>
       4                 :            : #include <stddef.h>
       5                 :            : #include <string.h>
       6                 :            : #include <sys/socket.h>
       7                 :            : #include <sys/un.h>
       8                 :            : 
       9                 :            : #include "alloc-util.h"
      10                 :            : #include "main-func.h"
      11                 :            : #include "fd-util.h"
      12                 :            : #include "fileio.h"
      13                 :            : #include "log.h"
      14                 :            : #include "macro.h"
      15                 :            : #include "memory-util.h"
      16                 :            : #include "socket-util.h"
      17                 :            : #include "string-util.h"
      18                 :            : #include "util.h"
      19                 :            : 
      20                 :          0 : static int send_on_socket(int fd, const char *socket_name, const void *packet, size_t size) {
      21                 :          0 :         union sockaddr_union sa = {};
      22                 :            :         int salen;
      23                 :            : 
      24         [ #  # ]:          0 :         assert(fd >= 0);
      25         [ #  # ]:          0 :         assert(socket_name);
      26         [ #  # ]:          0 :         assert(packet);
      27                 :            : 
      28                 :          0 :         salen = sockaddr_un_set_path(&sa.un, socket_name);
      29         [ #  # ]:          0 :         if (salen < 0)
      30         [ #  # ]:          0 :                 return log_error_errno(salen, "Specified socket path for AF_UNIX socket invalid, refusing: %s", socket_name);
      31                 :            : 
      32         [ #  # ]:          0 :         if (sendto(fd, packet, size, MSG_NOSIGNAL, &sa.sa, salen) < 0)
      33         [ #  # ]:          0 :                 return log_error_errno(errno, "Failed to send: %m");
      34                 :            : 
      35                 :          0 :         return 0;
      36                 :            : }
      37                 :            : 
      38                 :          0 : static int run(int argc, char *argv[]) {
      39                 :          0 :         _cleanup_(erase_and_freep) char *packet = NULL;
      40                 :          0 :         _cleanup_close_ int fd = -1;
      41                 :          0 :         size_t length = 0;
      42                 :            :         int r;
      43                 :            : 
      44                 :          0 :         log_setup_service();
      45                 :            : 
      46         [ #  # ]:          0 :         if (argc != 3)
      47         [ #  # ]:          0 :                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Wrong number of arguments.");
      48                 :            : 
      49         [ #  # ]:          0 :         if (streq(argv[1], "1")) {
      50         [ #  # ]:          0 :                 _cleanup_(erase_and_freep) char *line = NULL;
      51                 :            : 
      52                 :          0 :                 r = read_line(stdin, LONG_LINE_MAX, &line);
      53         [ #  # ]:          0 :                 if (r < 0)
      54         [ #  # ]:          0 :                         return log_error_errno(r, "Failed to read password: %m");
      55         [ #  # ]:          0 :                 if (r == 0)
      56         [ #  # ]:          0 :                         return log_error_errno(SYNTHETIC_ERRNO(EIO),
      57                 :            :                                                "Got EOF while reading password.");
      58                 :            : 
      59                 :          0 :                 packet = strjoin("+", line);
      60         [ #  # ]:          0 :                 if (!packet)
      61                 :          0 :                         return log_oom();
      62                 :            : 
      63                 :          0 :                 length = 1 + strlen(line) + 1;
      64                 :            : 
      65         [ #  # ]:          0 :         } else if (streq(argv[1], "0")) {
      66                 :          0 :                 packet = strdup("-");
      67         [ #  # ]:          0 :                 if (!packet)
      68                 :          0 :                         return log_oom();
      69                 :            : 
      70                 :          0 :                 length = 1;
      71                 :            : 
      72                 :            :         } else
      73         [ #  # ]:          0 :                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
      74                 :            :                                        "Invalid first argument %s", argv[1]);
      75                 :            : 
      76                 :          0 :         fd = socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0);
      77         [ #  # ]:          0 :         if (fd < 0)
      78         [ #  # ]:          0 :                 return log_error_errno(errno, "socket() failed: %m");
      79                 :            : 
      80                 :          0 :         return send_on_socket(fd, argv[2], packet, length);
      81                 :            : }
      82                 :            : 
      83                 :          0 : DEFINE_MAIN_FUNCTION(run);

Generated by: LCOV version 1.14