/mandos/trunk

To get this branch, use:
bzr branch http://bzr.recompile.se/loggerhead/mandos/trunk

« back to all changes in this revision

Viewing changes to plugin-helpers/mandos-client-iprouteadddel.c

  • Committer: Teddy Hogeborn
  • Date: 2024-09-09 04:24:39 UTC
  • Revision ID: teddy@recompile.se-20240909042439-j85mr20uli2hnyis
Eliminate compiler warnings

Many programs use nested functions, which now result in a linker
warning about executable stack.  Hide this warning.  Also, rewrite a
loop in the plymouth plugin to avoid warning about signed overflow.
This change also makes the plugin pick the alphabetically first
process entry instead of the last, in case many plymouth processes are
found (which should be unlikely).

* Makefile (plugin-runner, dracut-module/password-agent,
  plugins.d/password-prompt, plugins.d/mandos-client,
  plugins.d/plymouth): New target; set LDFLAGS to add "-Xlinker
  --no-warn-execstack".
* plugins.d/plymouth.c (get_pid): When no pid files are found, and we
  are looking through the process list, go though it from the start
  instead of from the end, i.e. in normal alphabetical order and not
  in reverse order.

Show diffs side-by-side

added added

removed removed

Lines of Context:
2
2
/* 
3
3
 * iprouteadddel - Add or delete direct route to a local IP address
4
4
 * 
5
 
 * Copyright © 2015-2018 Teddy Hogeborn
6
 
 * Copyright © 2015-2018 Björn Påhlsson
 
5
 * Copyright © 2015-2018, 2021-2022 Teddy Hogeborn
 
6
 * Copyright © 2015-2018, 2021-2022 Björn Påhlsson
7
7
 * 
8
8
 * This file is part of Mandos.
9
9
 * 
25
25
 
26
26
#define _GNU_SOURCE             /* program_invocation_short_name */
27
27
#include <stdbool.h>            /* bool, false, true */
28
 
#include <stdio.h>              /* fprintf(), stderr, FILE, vfprintf */
29
 
#include <errno.h>              /* program_invocation_short_name,
30
 
                                   errno, perror(), EINVAL, ENOMEM */
31
 
#include <stdarg.h>             /* va_list, va_start */
32
 
#include <stdlib.h>             /* EXIT_SUCCESS */
33
 
#include <argp.h>               /* struct argp_option, error_t, struct
34
 
                                   argp_state, ARGP_KEY_ARG,
 
28
#include <argp.h>               /* argp_program_version,
 
29
                                   argp_program_bug_address,
 
30
                                   struct argp_option,
 
31
                                   struct argp_state, ARGP_KEY_ARG,
35
32
                                   argp_usage(), ARGP_KEY_END,
36
33
                                   ARGP_ERR_UNKNOWN, struct argp,
37
 
                                   argp_parse() */
38
 
#include <sysexits.h>           /* EX_USAGE, EX_OSERR */
39
 
#include <netinet/ip.h>         /* sa_family_t, AF_INET6, AF_INET */
40
 
#include <inttypes.h>           /* PRIdMAX, intmax_t */
41
 
 
 
34
                                   argp_parse(), ARGP_IN_ORDER */
 
35
#include <errno.h>              /* errno,
 
36
                                   program_invocation_short_name,
 
37
                                   error_t, EINVAL, ENOMEM */
 
38
#include <stdio.h>              /* fprintf(), stderr, perror(), FILE,
 
39
                                   vfprintf() */
 
40
#include <stdarg.h>             /* va_list, va_start(), vfprintf() */
 
41
#include <stdlib.h>             /* EXIT_SUCCESS */
42
42
#include <netlink/netlink.h>    /* struct nl_addr, nl_addr_parse(),
43
43
                                   nl_geterror(),
44
 
                                   nl_addr_get_family(),
 
44
                                   nl_addr_get_family(), NLM_F_EXCL,
45
45
                                   nl_addr_put() */
46
 
#include <netlink/route/route.h> /* struct rtnl_route,
47
 
                                    struct rtnl_nexthop,
48
 
                                    rtnl_route_alloc(),
49
 
                                    rtnl_route_set_family(),
50
 
                                    rtnl_route_set_protocol(),
51
 
                                    RTPROT_BOOT,
52
 
                                    rtnl_route_set_scope(),
53
 
                                    RT_SCOPE_LINK,
54
 
                                    rtnl_route_set_type(),
55
 
                                    RTN_UNICAST,
56
 
                                    rtnl_route_set_dst(),
57
 
                                    rtnl_route_set_table(),
58
 
                                    RT_TABLE_MAIN,
59
 
                                    rtnl_route_nh_alloc(),
60
 
                                    rtnl_route_nh_set_ifindex(),
61
 
                                    rtnl_route_add_nexthop(),
62
 
                                    rtnl_route_add(),
63
 
                                    rtnl_route_delete(),
64
 
                                    rtnl_route_put(),
65
 
                                    rtnl_route_nh_free() */
 
46
#include <stddef.h>             /* NULL */
 
47
#include <netlink/route/route.h>/* struct rtnl_route,
 
48
                                   struct rtnl_nexthop, NETLINK_ROUTE,
 
49
                                   rtnl_route_alloc(),
 
50
                                   rtnl_route_set_family(),
 
51
                                   rtnl_route_set_protocol(),
 
52
                                   RTPROT_BOOT,
 
53
                                   rtnl_route_set_scope(),
 
54
                                   RT_SCOPE_LINK,
 
55
                                   rtnl_route_set_type(), RTN_UNICAST,
 
56
                                   rtnl_route_set_dst(),
 
57
                                   rtnl_route_set_table(),
 
58
                                   RT_TABLE_MAIN,
 
59
                                   rtnl_route_nh_alloc(),
 
60
                                   rtnl_route_nh_set_ifindex(),
 
61
                                   rtnl_route_add_nexthop(),
 
62
                                   rtnl_route_add(),
 
63
                                   rtnl_route_delete(),
 
64
                                   rtnl_route_put(),
 
65
                                   rtnl_route_nh_free() */
66
66
#include <netlink/socket.h>     /* struct nl_sock, nl_socket_alloc(),
67
67
                                   nl_connect(), nl_socket_free() */
68
 
#include <netlink/route/link.h> /* rtnl_link_get_kernel(),
 
68
#include <strings.h>            /* strcasecmp() */
 
69
#include <sys/socket.h>         /* AF_UNSPEC, AF_INET6, AF_INET */
 
70
#include <sysexits.h>           /* EX_USAGE, EX_OSERR */
 
71
#include <netlink/route/link.h> /* struct rtnl_link,
 
72
                                   rtnl_link_get_kernel(),
69
73
                                   rtnl_link_get_ifindex(),
70
74
                                   rtnl_link_put() */
 
75
#include <netinet/in.h>         /* sa_family_t */
 
76
#include <inttypes.h>           /* PRIdMAX, intmax_t */
 
77
#include <stdint.h>             /* uint8_t */
 
78
 
71
79
 
72
80
bool debug = false;
73
81
const char *argp_program_version = "mandos-client-iprouteadddel " VERSION;
85
93
__attribute__((format (gnu_printf, 2, 3), nonnull))
86
94
int fprintf_plus(FILE *stream, const char *format, ...){
87
95
  va_list ap;
88
 
  va_start (ap, format);
 
96
  va_start(ap, format);
89
97
  
90
98
  fprintf(stream, "Mandos plugin helper %s: ",
91
99
          program_invocation_short_name);