summaryrefslogtreecommitdiffstats
path: root/meta-networking/recipes-support/strongswan
diff options
context:
space:
mode:
Diffstat (limited to 'meta-networking/recipes-support/strongswan')
-rw-r--r--meta-networking/recipes-support/strongswan/strongswan/0001-pki-Fix-signature-of-help-to-match-that-of-a-callbac.patch25
-rw-r--r--meta-networking/recipes-support/strongswan/strongswan/0002-callback-job-Replace-return_false-in-constructors-wi.patch90
-rw-r--r--meta-networking/recipes-support/strongswan/strongswan/0003-Cast-uses-of-return_-nop-and-enumerator_create_empty.patch118
-rw-r--r--meta-networking/recipes-support/strongswan/strongswan_6.0.1.bb (renamed from meta-networking/recipes-support/strongswan/strongswan_5.9.14.bb)32
4 files changed, 250 insertions, 15 deletions
diff --git a/meta-networking/recipes-support/strongswan/strongswan/0001-pki-Fix-signature-of-help-to-match-that-of-a-callbac.patch b/meta-networking/recipes-support/strongswan/strongswan/0001-pki-Fix-signature-of-help-to-match-that-of-a-callbac.patch
new file mode 100644
index 0000000000..92c848f095
--- /dev/null
+++ b/meta-networking/recipes-support/strongswan/strongswan/0001-pki-Fix-signature-of-help-to-match-that-of-a-callbac.patch
@@ -0,0 +1,25 @@
1From a7b5de569082398a14b7e571498e55d005903aaf Mon Sep 17 00:00:00 2001
2From: Tobias Brunner <tobias@strongswan.org>
3Date: Fri, 21 Feb 2025 17:18:35 +0100
4Subject: [PATCH] pki: Fix signature of help() to match that of a callback in
5 command_t
6
7Upstream-Status: Backport [a7b5de5 pki: Fix signature of help() to match that of a callback in command_t]
8Signed-off-by: mark.yang <mark.yang@lge.com>
9---
10 src/pki/command.c | 2 +-
11 1 file changed, 1 insertion(+), 1 deletion(-)
12
13diff --git a/src/pki/command.c b/src/pki/command.c
14index accec5fe5..6e6bf041e 100644
15--- a/src/pki/command.c
16+++ b/src/pki/command.c
17@@ -265,7 +265,7 @@ int command_usage(char *error)
18 /**
19 * Show usage information
20 */
21-static int help(int c, char *v[])
22+static int help()
23 {
24 return command_usage(NULL);
25 }
diff --git a/meta-networking/recipes-support/strongswan/strongswan/0002-callback-job-Replace-return_false-in-constructors-wi.patch b/meta-networking/recipes-support/strongswan/strongswan/0002-callback-job-Replace-return_false-in-constructors-wi.patch
new file mode 100644
index 0000000000..09451206ca
--- /dev/null
+++ b/meta-networking/recipes-support/strongswan/strongswan/0002-callback-job-Replace-return_false-in-constructors-wi.patch
@@ -0,0 +1,90 @@
1From d5d2568ff0e88d364dadf50b67bf17050763cf98 Mon Sep 17 00:00:00 2001
2From: Tobias Brunner <tobias@strongswan.org>
3Date: Fri, 21 Feb 2025 16:45:57 +0100
4Subject: [PATCH] callback-job: Replace return_false() in constructors with
5 dedicated function
6
7Besides being clearer, this fixes issues with GCC 15. The latter uses
8C23 by default, which changes the meaning of function declarations
9without parameters such as
10
11 bool return false();
12
13Instead of "this function takes an unknown number of arguments", this
14now equals (void), that is, "this function takes no arguments". So we
15run into incompatible pointer type warnings all over when using such
16functions. They could be cast to (void*) but this seems the cleaner
17solution for this use case.
18
19Upstream-Status: Backport [d5d2568 callback-job: Replace return_false() in constructors with dedicated function]
20Signed-off-by: mark.yang <mark.yang@lge.com>
21---
22 src/libstrongswan/processing/jobs/callback_job.c | 10 +++++++++-
23 src/libstrongswan/processing/jobs/callback_job.h | 11 ++++++++++-
24 src/libstrongswan/processing/scheduler.c | 3 ++-
25 3 files changed, 21 insertions(+), 3 deletions(-)
26
27diff --git a/src/libstrongswan/processing/jobs/callback_job.c b/src/libstrongswan/processing/jobs/callback_job.c
28index cb2a0aba5..3ab40b947 100644
29--- a/src/libstrongswan/processing/jobs/callback_job.c
30+++ b/src/libstrongswan/processing/jobs/callback_job.c
31@@ -1,5 +1,5 @@
32 /*
33- * Copyright (C) 2009-2012 Tobias Brunner
34+ * Copyright (C) 2009-2025 Tobias Brunner
35 * Copyright (C) 2007-2011 Martin Willi
36 *
37 * Copyright (C) secunet Security Networks AG
38@@ -131,3 +131,11 @@ callback_job_t *callback_job_create(callback_job_cb_t cb, void *data,
39 return callback_job_create_with_prio(cb, data, cleanup, cancel,
40 JOB_PRIO_MEDIUM);
41 }
42+
43+/*
44+ * Described in header
45+ */
46+bool callback_job_cancel_thread(void *data)
47+{
48+ return FALSE;
49+}
50diff --git a/src/libstrongswan/processing/jobs/callback_job.h b/src/libstrongswan/processing/jobs/callback_job.h
51index 0f1ae212d..fda868879 100644
52--- a/src/libstrongswan/processing/jobs/callback_job.h
53+++ b/src/libstrongswan/processing/jobs/callback_job.h
54@@ -1,5 +1,5 @@
55 /*
56- * Copyright (C) 2012 Tobias Brunner
57+ * Copyright (C) 2012-2025 Tobias Brunner
58 * Copyright (C) 2007-2011 Martin Willi
59 *
60 * Copyright (C) secunet Security Networks AG
61@@ -62,6 +62,15 @@ typedef void (*callback_job_cleanup_t)(void *data);
62 */
63 typedef bool (*callback_job_cancel_t)(void *data);
64
65+/**
66+ * Default implementation of callback_job_cancel_t that simply returns FALSE
67+ * to force cancellation of the thread by the processor.
68+ *
69+ * @param data ignored argument
70+ * @return always returns FALSE
71+ */
72+bool callback_job_cancel_thread(void *data);
73+
74 /**
75 * Class representing an callback Job.
76 *
77diff --git a/src/libstrongswan/processing/scheduler.c b/src/libstrongswan/processing/scheduler.c
78index c5e5dd83e..76d98ddff 100644
79--- a/src/libstrongswan/processing/scheduler.c
80+++ b/src/libstrongswan/processing/scheduler.c
81@@ -329,7 +329,8 @@ scheduler_t * scheduler_create()
82 this->heap = (event_t**)calloc(this->heap_size + 1, sizeof(event_t*));
83
84 job = callback_job_create_with_prio((callback_job_cb_t)schedule, this,
85- NULL, return_false, JOB_PRIO_CRITICAL);
86+ NULL, callback_job_cancel_thread,
87+ JOB_PRIO_CRITICAL);
88 lib->processor->queue_job(lib->processor, (job_t*)job);
89
90 return &this->public;
diff --git a/meta-networking/recipes-support/strongswan/strongswan/0003-Cast-uses-of-return_-nop-and-enumerator_create_empty.patch b/meta-networking/recipes-support/strongswan/strongswan/0003-Cast-uses-of-return_-nop-and-enumerator_create_empty.patch
new file mode 100644
index 0000000000..6c2a77105a
--- /dev/null
+++ b/meta-networking/recipes-support/strongswan/strongswan/0003-Cast-uses-of-return_-nop-and-enumerator_create_empty.patch
@@ -0,0 +1,118 @@
1From 11978ddd39e800b5f35f721d726e8a4cb7e4ec0f Mon Sep 17 00:00:00 2001
2From: Tobias Brunner <tobias@strongswan.org>
3Date: Fri, 21 Feb 2025 17:00:44 +0100
4Subject: [PATCH] Cast uses of return_*(), nop() and enumerator_create_empty()
5
6As described in the previous commit, GCC 15 uses C23 by default and that
7changes the meaning of such argument-less function declarations. So
8whenever we assign such a function to a pointer that expects a function
9with arguments it causes an incompatible pointer type warning. We
10could define dedicated functions/callbacks whenever necessary, but this
11seems like the simpler approach for now (especially since most uses of
12these functions have already been cast).
13
14Upstream-Status: Backport [11978dd Cast uses of return_*(), nop() and enumerator_create_empty()]
15Signed-off-by: mark.yang <mark.yang@lge.com>
16---
17 src/charon-nm/nm/nm_handler.c | 2 +-
18 src/libcharon/encoding/payloads/encrypted_payload.c | 2 +-
19 src/libcharon/plugins/android_dns/android_dns_handler.c | 2 +-
20 src/libcharon/plugins/ha/ha_attribute.c | 2 +-
21 src/libcharon/plugins/updown/updown_handler.c | 2 +-
22 src/libstrongswan/utils/identification.c | 6 +++---
23 6 files changed, 8 insertions(+), 8 deletions(-)
24
25diff --git a/src/charon-nm/nm/nm_handler.c b/src/charon-nm/nm/nm_handler.c
26index d7331ad72..39d0190ac 100644
27--- a/src/charon-nm/nm/nm_handler.c
28+++ b/src/charon-nm/nm/nm_handler.c
29@@ -195,7 +195,7 @@ nm_handler_t *nm_handler_create()
30 .public = {
31 .handler = {
32 .handle = _handle,
33- .release = nop,
34+ .release = (void*)nop,
35 .create_attribute_enumerator = _create_attribute_enumerator,
36 },
37 .create_enumerator = _create_enumerator,
38diff --git a/src/libcharon/encoding/payloads/encrypted_payload.c b/src/libcharon/encoding/payloads/encrypted_payload.c
39index 676d00b7a..4821c6108 100644
40--- a/src/libcharon/encoding/payloads/encrypted_payload.c
41+++ b/src/libcharon/encoding/payloads/encrypted_payload.c
42@@ -1023,7 +1023,7 @@ encrypted_fragment_payload_t *encrypted_fragment_payload_create()
43 .get_length = _frag_get_length,
44 .add_payload = _frag_add_payload,
45 .remove_payload = (void*)return_null,
46- .generate_payloads = nop,
47+ .generate_payloads = (void*)nop,
48 .set_transform = _frag_set_transform,
49 .get_transform = _frag_get_transform,
50 .encrypt = _frag_encrypt,
51diff --git a/src/libcharon/plugins/android_dns/android_dns_handler.c b/src/libcharon/plugins/android_dns/android_dns_handler.c
52index 78f4f702a..14d2ff99a 100644
53--- a/src/libcharon/plugins/android_dns/android_dns_handler.c
54+++ b/src/libcharon/plugins/android_dns/android_dns_handler.c
55@@ -191,7 +191,7 @@ METHOD(enumerator_t, enumerate_dns, bool,
56 VA_ARGS_VGET(args, type, data);
57 *type = INTERNAL_IP4_DNS;
58 *data = chunk_empty;
59- this->venumerate = return_false;
60+ this->venumerate = (void*)return_false;
61 return TRUE;
62 }
63
64diff --git a/src/libcharon/plugins/ha/ha_attribute.c b/src/libcharon/plugins/ha/ha_attribute.c
65index b865a4b82..103d1a937 100644
66--- a/src/libcharon/plugins/ha/ha_attribute.c
67+++ b/src/libcharon/plugins/ha/ha_attribute.c
68@@ -381,7 +381,7 @@ ha_attribute_t *ha_attribute_create(ha_kernel_t *kernel, ha_segments_t *segments
69 .provider = {
70 .acquire_address = _acquire_address,
71 .release_address = _release_address,
72- .create_attribute_enumerator = enumerator_create_empty,
73+ .create_attribute_enumerator = (void*)enumerator_create_empty,
74 },
75 .reserve = _reserve,
76 .destroy = _destroy,
77diff --git a/src/libcharon/plugins/updown/updown_handler.c b/src/libcharon/plugins/updown/updown_handler.c
78index 36eb15615..3707e1e65 100644
79--- a/src/libcharon/plugins/updown/updown_handler.c
80+++ b/src/libcharon/plugins/updown/updown_handler.c
81@@ -220,7 +220,7 @@ updown_handler_t *updown_handler_create()
82 .handler = {
83 .handle = _handle,
84 .release = _release,
85- .create_attribute_enumerator = enumerator_create_empty,
86+ .create_attribute_enumerator = (void*)enumerator_create_empty,
87 },
88 .create_dns_enumerator = _create_dns_enumerator,
89 .destroy = _destroy,
90diff --git a/src/libstrongswan/utils/identification.c b/src/libstrongswan/utils/identification.c
91index d31955b38..58a05052d 100644
92--- a/src/libstrongswan/utils/identification.c
93+++ b/src/libstrongswan/utils/identification.c
94@@ -1625,7 +1625,7 @@ static private_identification_t *identification_create(id_type_t type)
95 this->public.hash = _hash_binary;
96 this->public.equals = _equals_binary;
97 this->public.matches = _matches_any;
98- this->public.contains_wildcards = return_true;
99+ this->public.contains_wildcards = (void*)return_true;
100 break;
101 case ID_FQDN:
102 case ID_RFC822_ADDR:
103@@ -1660,13 +1660,13 @@ static private_identification_t *identification_create(id_type_t type)
104 this->public.hash = _hash_binary;
105 this->public.equals = _equals_binary;
106 this->public.matches = _matches_range;
107- this->public.contains_wildcards = return_false;
108+ this->public.contains_wildcards = (void*)return_false;
109 break;
110 default:
111 this->public.hash = _hash_binary;
112 this->public.equals = _equals_binary;
113 this->public.matches = _matches_binary;
114- this->public.contains_wildcards = return_false;
115+ this->public.contains_wildcards = (void*)return_false;
116 break;
117 }
118 return this;
diff --git a/meta-networking/recipes-support/strongswan/strongswan_5.9.14.bb b/meta-networking/recipes-support/strongswan/strongswan_6.0.1.bb
index 2e2da8274b..771470f695 100644
--- a/meta-networking/recipes-support/strongswan/strongswan_5.9.14.bb
+++ b/meta-networking/recipes-support/strongswan/strongswan_6.0.1.bb
@@ -8,10 +8,14 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
8DEPENDS = "flex-native flex bison-native" 8DEPENDS = "flex-native flex bison-native"
9DEPENDS:append = "${@bb.utils.contains('DISTRO_FEATURES', 'tpm2', ' tpm2-tss', '', d)}" 9DEPENDS:append = "${@bb.utils.contains('DISTRO_FEATURES', 'tpm2', ' tpm2-tss', '', d)}"
10 10
11SRC_URI = "https://download.strongswan.org/strongswan-${PV}.tar.bz2 \ 11SRC_URI = " \
12 " 12 https://download.strongswan.org/strongswan-${PV}.tar.bz2 \
13 file://0001-pki-Fix-signature-of-help-to-match-that-of-a-callbac.patch \
14 file://0002-callback-job-Replace-return_false-in-constructors-wi.patch \
15 file://0003-Cast-uses-of-return_-nop-and-enumerator_create_empty.patch \
16 "
13 17
14SRC_URI[sha256sum] = "728027ddda4cb34c67c4cec97d3ddb8c274edfbabdaeecf7e74693b54fc33678" 18SRC_URI[sha256sum] = "212368cbc674fed31f3292210303fff06da8b90acad2d1387375ed855e6879c4"
15 19
16UPSTREAM_CHECK_REGEX = "strongswan-(?P<pver>\d+(\.\d+)+)\.tar" 20UPSTREAM_CHECK_REGEX = "strongswan-(?P<pver>\d+(\.\d+)+)\.tar"
17 21
@@ -22,24 +26,33 @@ EXTRA_OECONF = " \
22 26
23EXTRA_OECONF += "${@bb.utils.contains('DISTRO_FEATURES', 'systemd', '--with-systemdsystemunitdir=${systemd_unitdir}/system/', '--without-systemdsystemunitdir', d)}" 27EXTRA_OECONF += "${@bb.utils.contains('DISTRO_FEATURES', 'systemd', '--with-systemdsystemunitdir=${systemd_unitdir}/system/', '--without-systemdsystemunitdir', d)}"
24 28
25PACKAGECONFIG ?= "curl gmp openssl sqlite3 swanctl curve25519\ 29PACKAGECONFIG ?= "curl openssl sqlite3 swanctl \
26 ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'systemd-charon', 'charon', d)} \ 30 ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'systemd-charon', 'charon', d)} \
27 ${@bb.utils.contains('DISTRO_FEATURES', 'tpm2', 'tpm2', '', d)} \ 31 ${@bb.utils.contains('DISTRO_FEATURES', 'tpm2', 'tpm2', '', d)} \
28 ${@bb.utils.contains('DISTRO_FEATURES', 'ima', 'tnc-imc imc-hcd imc-os imc-scanner imc-attestation', '', d)} \ 32 ${@bb.utils.contains('DISTRO_FEATURES', 'ima', 'tnc-imc imc-hcd imc-os imc-scanner imc-attestation', '', d)} \
29 ${@bb.utils.contains('DISTRO_FEATURES', 'ima', 'tnc-imv imv-hcd imv-os imv-scanner imv-attestation', '', d)} \ 33 ${@bb.utils.contains('DISTRO_FEATURES', 'ima', 'tnc-imv imv-hcd imv-os imv-scanner imv-attestation', '', d)} \
30" 34"
31 35
36PACKAGECONFIG[aes] = "--enable-aes,--disable-aes,,${PN}-plugin-aes"
32PACKAGECONFIG[aesni] = "--enable-aesni,--disable-aesni,,${PN}-plugin-aesni" 37PACKAGECONFIG[aesni] = "--enable-aesni,--disable-aesni,,${PN}-plugin-aesni"
33PACKAGECONFIG[bfd] = "--enable-bfd-backtraces,--disable-bfd-backtraces,binutils" 38PACKAGECONFIG[bfd] = "--enable-bfd-backtraces,--disable-bfd-backtraces,binutils"
34PACKAGECONFIG[charon] = "--enable-charon,--disable-charon," 39PACKAGECONFIG[charon] = "--enable-charon,--disable-charon,"
35PACKAGECONFIG[curl] = "--enable-curl,--disable-curl,curl,${PN}-plugin-curl" 40PACKAGECONFIG[curl] = "--enable-curl,--disable-curl,curl,${PN}-plugin-curl"
41PACKAGECONFIG[des] = "--enable-des,--disable-des,,${PN}-plugin-des"
36PACKAGECONFIG[eap-identity] = "--enable-eap-identity,--disable-eap-identity,,${PN}-plugin-eap-identity" 42PACKAGECONFIG[eap-identity] = "--enable-eap-identity,--disable-eap-identity,,${PN}-plugin-eap-identity"
37PACKAGECONFIG[eap-mschapv2] = "--enable-eap-mschapv2,--disable-eap-mschapv2,,${PN}-plugin-eap-mschapv2" 43PACKAGECONFIG[eap-mschapv2] = "--enable-eap-mschapv2,--disable-eap-mschapv2,,${PN}-plugin-eap-mschapv2"
44PACKAGECONFIG[fips-prf] = "--enable-fips-prf,--disable-fips-prf,,${PN}-plugin-fips-prf"
38PACKAGECONFIG[gmp] = "--enable-gmp,--disable-gmp,gmp,${PN}-plugin-gmp" 45PACKAGECONFIG[gmp] = "--enable-gmp,--disable-gmp,gmp,${PN}-plugin-gmp"
46PACKAGECONFIG[hmac] = "--enable-hmac,--disable-hmac,,${PN}-plugin-hmac"
39PACKAGECONFIG[ldap] = "--enable-ldap,--disable-ldap,openldap,${PN}-plugin-ldap" 47PACKAGECONFIG[ldap] = "--enable-ldap,--disable-ldap,openldap,${PN}-plugin-ldap"
48PACKAGECONFIG[md5] = "--enable-md5,--disable-md5,,${PN}-plugin-md5"
40PACKAGECONFIG[mysql] = "--enable-mysql,--disable-mysql,mysql5,${PN}-plugin-mysql" 49PACKAGECONFIG[mysql] = "--enable-mysql,--disable-mysql,mysql5,${PN}-plugin-mysql"
41PACKAGECONFIG[nm] = "--enable-nm,--disable-nm,networkmanager,${PN}-nm" 50PACKAGECONFIG[nm] = "--enable-nm,--disable-nm,networkmanager,${PN}-nm"
42PACKAGECONFIG[openssl] = "--enable-openssl,--disable-openssl,openssl,${PN}-plugin-openssl" 51PACKAGECONFIG[openssl] = "--enable-openssl,--disable-openssl,openssl,${PN}-plugin-openssl"
52PACKAGECONFIG[pkcs12] = "--enable-pkcs12,--disable-pkcs12,,${PN}-plugin-pkcs12"
53PACKAGECONFIG[rc2] = "--enable-rc2,--disable-rc2,,${PN}-plugin-rc2"
54PACKAGECONFIG[sha1] = "--enable-sha1,--disable-sha1,,${PN}-plugin-sha1"
55PACKAGECONFIG[sha2] = "--enable-sha2,--disable-sha2,,${PN}-plugin-sha2"
43PACKAGECONFIG[soup] = "--enable-soup,--disable-soup,libsoup-2.4,${PN}-plugin-soup" 56PACKAGECONFIG[soup] = "--enable-soup,--disable-soup,libsoup-2.4,${PN}-plugin-soup"
44PACKAGECONFIG[sqlite3] = "--enable-sqlite,--disable-sqlite,sqlite3,${PN}-plugin-sqlite" 57PACKAGECONFIG[sqlite3] = "--enable-sqlite,--disable-sqlite,sqlite3,${PN}-plugin-sqlite"
45PACKAGECONFIG[stroke] = "--enable-stroke,--disable-stroke,,${PN}-plugin-stroke" 58PACKAGECONFIG[stroke] = "--enable-stroke,--disable-stroke,,${PN}-plugin-stroke"
@@ -144,34 +157,23 @@ PACKAGESPLITFUNCS:prepend = "split_strongswan_plugins "
144# Install some default plugins based on default strongSwan ./configure options 157# Install some default plugins based on default strongSwan ./configure options
145# See https://wiki.strongswan.org/projects/strongswan/wiki/Pluginlist 158# See https://wiki.strongswan.org/projects/strongswan/wiki/Pluginlist
146RDEPENDS:${PN} += "\ 159RDEPENDS:${PN} += "\
147 ${PN}-plugin-aes \
148 ${PN}-plugin-attr \ 160 ${PN}-plugin-attr \
149 ${PN}-plugin-cmac \ 161 ${PN}-plugin-cmac \
150 ${PN}-plugin-constraints \ 162 ${PN}-plugin-constraints \
151 ${PN}-plugin-des \
152 ${PN}-plugin-dnskey \ 163 ${PN}-plugin-dnskey \
153 ${PN}-plugin-drbg \ 164 ${PN}-plugin-drbg \
154 ${PN}-plugin-fips-prf \
155 ${PN}-plugin-gcm \
156 ${PN}-plugin-hmac \
157 ${PN}-plugin-kdf \ 165 ${PN}-plugin-kdf \
158 ${PN}-plugin-kernel-netlink \ 166 ${PN}-plugin-kernel-netlink \
159 ${PN}-plugin-md5 \
160 ${PN}-plugin-mgf1 \
161 ${PN}-plugin-nonce \ 167 ${PN}-plugin-nonce \
162 ${PN}-plugin-pem \ 168 ${PN}-plugin-pem \
163 ${PN}-plugin-pgp \ 169 ${PN}-plugin-pgp \
164 ${PN}-plugin-pkcs1 \ 170 ${PN}-plugin-pkcs1 \
165 ${PN}-plugin-pkcs7 \ 171 ${PN}-plugin-pkcs7 \
166 ${PN}-plugin-pkcs8 \ 172 ${PN}-plugin-pkcs8 \
167 ${PN}-plugin-pkcs12 \
168 ${PN}-plugin-pubkey \ 173 ${PN}-plugin-pubkey \
169 ${PN}-plugin-random \ 174 ${PN}-plugin-random \
170 ${PN}-plugin-rc2 \
171 ${PN}-plugin-resolve \ 175 ${PN}-plugin-resolve \
172 ${PN}-plugin-revocation \ 176 ${PN}-plugin-revocation \
173 ${PN}-plugin-sha1 \
174 ${PN}-plugin-sha2 \
175 ${PN}-plugin-socket-default \ 177 ${PN}-plugin-socket-default \
176 ${PN}-plugin-sshkey \ 178 ${PN}-plugin-sshkey \
177 ${PN}-plugin-updown \ 179 ${PN}-plugin-updown \