/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
 * 
23
23
 * Contact the authors at <mandos@recompile.se>.
24
24
 */
25
25
 
26
 
#define _GNU_SOURCE             /* asprintf(),
27
 
                                   program_invocation_short_name */
 
26
#define _GNU_SOURCE             /* program_invocation_short_name */
28
27
#include <stdbool.h>            /* bool, false, true */
29
 
#include <stdio.h>              /* fprintf(), stderr, FILE, vfprintf */
30
 
#include <errno.h>              /* program_invocation_short_name,
31
 
                                   errno, perror(), EINVAL, ENOMEM */
32
 
#include <stdarg.h>             /* va_list, va_start */
33
 
#include <stdlib.h>             /* EXIT_SUCCESS */
34
 
#include <argp.h>               /* struct argp_option, error_t, struct
35
 
                                   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,
36
32
                                   argp_usage(), ARGP_KEY_END,
37
33
                                   ARGP_ERR_UNKNOWN, struct argp,
38
 
                                   argp_parse() */
39
 
#include <sysexits.h>           /* EX_USAGE, EX_OSERR */
40
 
#include <netinet/ip.h>         /* sa_family_t, AF_INET6, AF_INET */
41
 
#include <inttypes.h>           /* PRIdMAX, intmax_t */
42
 
 
 
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 */
43
42
#include <netlink/netlink.h>    /* struct nl_addr, nl_addr_parse(),
44
43
                                   nl_geterror(),
45
 
                                   nl_addr_get_family(),
 
44
                                   nl_addr_get_family(), NLM_F_EXCL,
46
45
                                   nl_addr_put() */
47
 
#include <netlink/route/route.h> /* struct rtnl_route,
48
 
                                    struct rtnl_nexthop,
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(),
56
 
                                    RTN_UNICAST,
57
 
                                    rtnl_route_set_dst(),
58
 
                                    rtnl_route_set_table(),
59
 
                                    RT_TABLE_MAIN,
60
 
                                    rtnl_route_nh_alloc(),
61
 
                                    rtnl_route_nh_set_ifindex(),
62
 
                                    rtnl_route_add_nexthop(),
63
 
                                    rtnl_route_add(),
64
 
                                    rtnl_route_delete(),
65
 
                                    rtnl_route_put(),
66
 
                                    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() */
67
66
#include <netlink/socket.h>     /* struct nl_sock, nl_socket_alloc(),
68
67
                                   nl_connect(), nl_socket_free() */
69
 
#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(),
70
73
                                   rtnl_link_get_ifindex(),
71
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
 
72
79
 
73
80
bool debug = false;
74
81
const char *argp_program_version = "mandos-client-iprouteadddel " VERSION;
86
93
__attribute__((format (gnu_printf, 2, 3), nonnull))
87
94
int fprintf_plus(FILE *stream, const char *format, ...){
88
95
  va_list ap;
89
 
  va_start (ap, format);
 
96
  va_start(ap, format);
90
97
  
91
98
  fprintf(stream, "Mandos plugin helper %s: ",
92
99
          program_invocation_short_name);
244
251
  }
245
252
  /* Set interface index number on nexthop object */
246
253
  rtnl_route_nh_set_ifindex(nexthop, ifindex);
247
 
  /* Set route tu use nexthop object */
 
254
  /* Set route to use nexthop object */
248
255
  rtnl_route_add_nexthop(route, nexthop);
249
256
  /* Add or delete route? */
250
257
  if(arguments.add){