1PORTNAME=	wpa_supplicant
2PORTVERSION=	2.9
3PORTREVISION=	12
4CATEGORIES=	security net
5MASTER_SITES=	https://w1.fi/releases/
6PKGNAMESUFFIX=	29
7
8PATCH_SITES=	https://w1.fi/security/2020-1/ \
9		https://w1.fi/security/2021-1/
10PATCHFILES=	0001-WPS-UPnP-Do-not-allow-event-subscriptions-with-URLs-.patch:-p1 \
11		0002-WPS-UPnP-Fix-event-message-generation-using-a-long-U.patch:-p1 \
12		0003-WPS-UPnP-Handle-HTTP-initiation-failures-for-events-.patch:-p1 \
13		0001-P2P-Fix-a-corner-case-in-peer-addition-based-on-PD-R.patch:-p1
14
15MAINTAINER=	ports@MidnightBSD.org
16COMMENT=	Supplicant (client) for WPA/802.1x protocols
17WWW=		https://w1.fi/wpa_supplicant/
18
19LICENSE=	bsd3
20LICENSE_FILE=	${WRKSRC}/README
21
22USES=		cpe gmake pkgconfig:build readline ssl
23BUILD_WRKSRC=	${WRKSRC}/wpa_supplicant
24INSTALL_WRKSRC=	${WRKSRC}/src
25CFLAGS+=	${CPPFLAGS} # USES=readline only augments CPPFLAGS and LDFLAGS
26CFLAGS+=	-I${OPENSSLINC}
27LDFLAGS+=	-L${OPENSSLLIB} -lutil
28MAKE_ENV=	V=1
29
30SUB_FILES=	pkg-message
31PORTDOCS=	README ChangeLog
32
33CFG=		${BUILD_WRKSRC}/.config
34
35.if !exists(/etc/rc.d/wpa_supplicant)
36USE_RC_SUBR=	wpa_supplicant
37.endif
38
39OPTIONS_MULTI=		DRV EAP
40OPTIONS_MULTI_DRV=	BSD WIRED NDIS TEST NONE #ROBOSWITCH
41OPTIONS_MULTI_EAP=	TLS PEAP TTLS MD5 MSCHAPV2 GTC LEAP OTP PSK FAST \
42			SIM PWD PAX AKA AKA_PRIME SAKE GPSK TNC IKEV2 EKE
43OPTIONS_DEFINE=		WPS WPS_ER WPS_NOREG WPS_NFC WPS_UPNP PKCS12 SMARTCARD \
44			HT_OVERRIDES VHT_OVERRIDES TLSV12 IEEE80211W \
45			IEEE80211R DEBUG_FILE DEBUG_SYSLOG PRIVSEP \
46			DELAYED_MIC IEEE80211N IEEE80211AC INTERWORKING \
47			IEEE8021X_EAPOL EAPOL_TEST \
48			HS20 NO_ROAMING P2P TDLS DBUS MATCH DOCS \
49                        SIM_SIMULATOR USIM_SIMULATOR
50OPTIONS_DEFAULT=	BSD WIRED \
51			TLS PEAP TTLS MD5 MSCHAPV2 GTC LEAP OTP PSK \
52			WPS PKCS12 SMARTCARD IEEE80211R DEBUG_SYSLOG \
53			INTERWORKING HS20 DBUS MATCH IEEE80211R IEEE80211W \
54			IEEE8021X_EAPOL WPS_ER WPS_NFC WPS_UPNP \
55			FAST PWD PAX SAKE GPSK TNC IKEV2 EKE
56OPTIONS_SUB=
57
58WPS_DESC=		Wi-Fi Protected Setup
59WPS_ER_DESC=		Enable WPS External Registrar
60WPS_NOREG_DESC=		Disable open network credentials when registrar
61WPS_NFC_DESC=		Near Field Communication (NFC) configuration
62WPS_UPNP_DESC=		Universal Plug and Play support
63PKCS12_DESC=		PKCS\#12 (PFS) support
64SMARTCARD_DESC=		Private key on smartcard support
65HT_OVERRIDES_DESC=	Disable HT/HT40, mask MCS rates, etc
66VHT_OVERRIDES_DESC=	Disable VHT, mask MCS rates, etc
67TLSV12_DESC=		Build with TLS v1.2 instead of TLS v1.0
68IEEE80211AC_DESC=	Very High Throughput, AP mode (IEEE 802.11ac)
69IEEE80211N_DESC=	High Throughput, AP mode (IEEE 802.11n)
70IEEE80211R_DESC=	Fast BSS Transition (IEEE 802.11r-2008)
71IEEE80211W_DESC=	Management Frame Protection (IEEE 802.11w)
72IEEE8021X_EAPOL_DESC=	EAP over LAN support
73EAPOL_TEST_DESC=	Development testing
74DEBUG_FILE_DESC=	Support for writing debug log to a file
75DEBUG_SYSLOG_DESC=	Send debug messages to syslog instead of stdout
76PRIVSEP_DESC=		Privilege separation
77DELAYED_MIC_DESC=	Mitigate TKIP attack, random delay on MIC errors
78INTERWORKING_DESC=	Improve ext. network interworking (IEEE 802.11u)
79HS20_DESC=		Hotspot 2.0
80NO_ROAMING_DESC=	Disable roaming
81P2P_DESC=		Peer-to-Peer support
82TDLS_DESC=		Tunneled Direct Link Setup
83MATCH_DESC=		Interface match mode
84
85DRV_DESC=		Driver options
86BSD_DESC=		BSD net80211 interface
87NDIS_DESC=		Windows NDIS interface
88WIRED_DESC=		Wired ethernet interface
89ROBOSWITCH_DESC=	Broadcom Roboswitch interface
90TEST_DESC=		Development testing interface
91NONE_DESC=		The 'no driver' interface, e.g. WPS ER only
92
93EAP_DESC=		Extensible Authentication Protocols
94TLS_DESC=		Transport Layer Security
95PEAP_DESC=		Protected Extensible Authentication Protocol
96TTLS_DESC=		Tunneled Transport Layer Security
97MD5_DESC=		MD5 hash (deprecated, no key generation)
98MSCHAPV2_DESC=		Microsoft CHAP version 2 (RFC 2759)
99GTC_DESC=		Generic Token Card
100LEAP_DESC=		Lightweight Extensible Authentication Protocol
101OTP_DESC=		One-Time Password
102PSK_DESC=		Pre-Shared key
103FAST_DESC=		Flexible Authentication via Secure Tunneling
104AKA_DESC=		Autentication and Key Agreement (UMTS)
105AKA_PRIME_DESC=		AKA Prime variant (RFC 5448)
106EKE_DESC=		Encrypted Key Exchange
107SIM_DESC=		Subscriber Identity Module
108SIM_SIMULATOR_DESC=	SIM simulator (Milenage) for EAP-SIM
109USIM_SIMULATOR_DESC=	SIM simulator (Milenage) for EAP-AKA
110IKEV2_DESC=		Internet Key Exchange version 2
111PWD_DESC=		Shared password (RFC 5931)
112PAX_DESC=		Password Authenticated Exchange
113SAKE_DESC=		Shared-Secret Authentication & Key Establishment
114GPSK_DESC=		Generalized Pre-Shared Key
115TNC_DESC=		Trusted Network Connect
116
117PRIVSEP_PLIST_FILES=	sbin/wpa_priv
118DBUS_PLIST_FILES=	share/dbus-1/system-services/fi.w1.wpa_supplicant1.service \
119			etc/dbus-1/system.d/dbus-wpa_supplicant.conf
120
121.include <bsd.port.pre.mk>
122
123.if ${PORT_OPTIONS:MNDIS} && ${PORT_OPTIONS:MPRIVSEP}
124BROKEN=	Fails to compile with both NDIS and PRIVSEP
125.endif
126
127.if ${PORT_OPTIONS:MIEEE80211AC} && ${PORT_OPTIONS:MIEEE80211N}
128BROKEN=	Fails to compile with both IEEE80211AC and IEEE80211N
129.endif
130
131.if ${PORT_OPTIONS:MSIM} || ${PORT_OPTIONS:MAKA} || ${PORT_OPTIONS:MAKA_PRIME}
132LIB_DEPENDS+=	libpcsclite.so:devel/pcsc-lite
133CFLAGS+=	-I${LOCALBASE}/include/PCSC
134LDFLAGS+=	-L${LOCALBASE}/lib
135.endif
136
137.if ${PORT_OPTIONS:MDBUS}
138LIB_DEPENDS+=	libdbus-1.so:devel/dbus
139.endif
140
141post-patch:
142	@${CP} ${FILESDIR}/Packet32.[ch] ${FILESDIR}/ntddndis.h \
143		${WRKSRC}/src/utils
144	# Set driver(s)
145.for item in BSD NDIS WIRED ROBOSWITCH TEST NONE
146.  if ${PORT_OPTIONS:M${item}}
147	@${ECHO_CMD} CONFIG_DRIVER_${item}=y >> ${CFG}
148.  endif
149.endfor
150	# Set EAP protocol(s)
151.for item in MD5 MSCHAPV2 TLS PEAP TTLS FAST GTC OTP PSK PWD PAX LEAP SIM \
152	AKA AKA_PRIME SAKE GPSK TNC IKEV2 EKE
153.  if ${PORT_OPTIONS:M${item}}
154	@${ECHO_CMD} CONFIG_EAP_${item:tu}=y >> ${CFG}
155.  endif
156.endfor
157.if ${PORT_OPTIONS:MSIM} || ${PORT_OPTIONS:MAKA} || ${PORT_OPTIONS:MAKA_PRIME}
158	@${ECHO_CMD} CONFIG_PCSC=y >> ${CFG}
159.endif
160.for simple in WPS WPS_ER WPS_NFC WPS_UPNP PKCS12 SMARTCARD HT_OVERRIDES \
161	VHT_OVERRIDES TLSV12 IEEE80211AC IEEE80211N IEEE80211R IEEE80211W \
162	IEEE8021X_EAPOL EAPOL_TEST \
163	INTERWORKING DEBUG_FILE DEBUG_SYSLOG HS20 NO_ROAMING PRIVSEP P2P TDLS
164.  if ${PORT_OPTIONS:M${simple}}
165	@${ECHO_CMD} CONFIG_${simple}=y >> ${CFG}
166.  endif
167.endfor
168.for item in READLINE PEERKEY
169	@${ECHO_CMD} CONFIG_${item}=y >> ${CFG}
170.endfor
171.if ${PORT_OPTIONS:MIEEE80211AC} || ${PORT_OPTIONS:MIEEE80211N}
172	@${ECHO_CMD} CONFIG_AP=y >> ${CFG}
173.endif
174.if ${PORT_OPTIONS:MGPSK}
175	# GPSK desired, assume highest SHA desired too
176	@${ECHO_CMD} CONFIG_EAP_GPSK_SHA256=y >> ${CFG}
177.endif
178.if ${PORT_OPTIONS:MWPS_NOREG}
179	@${ECHO_CMD} CONFIG_WPS_REG_DISABLE_OPEN=y >> ${CFG}
180.endif
181.if ${PORT_OPTIONS:MDELAYED_MIC}
182	@${ECHO_CMD} CONFIG_DELAYED_MIC_ERROR_REPORT=y >> ${CFG}
183.endif
184.if ${PORT_OPTIONS:MDBUS}
185	@${ECHO_CMD} CONFIG_CTRL_IFACE_DBUS_NEW=y >> ${CFG}
186	@${ECHO_CMD} CONFIG_CTRL_IFACE_DBUS_INTRO=y >> ${CFG}
187.endif
188.if ${PORT_OPTIONS:MMATCH}
189	@${ECHO_CMD} CONFIG_MATCH_IFACE=y >> ${CFG}
190.endif
191.if ${PORT_OPTIONS:MUSIM_SIMULATOR}
192	@${ECHO_CMD} CONFIG_USIM_SIMULATOR=y >> ${CFG}
193.endif
194.if ${PORT_OPTIONS:MSIM_SIMULATOR}
195	@${ECHO_CMD} CONFIG_SIM_SIMULATOR=y >> ${CFG}
196.endif
197	@${ECHO_CMD} CONFIG_OS=unix >> ${CFG}
198	@${ECHO_CMD} CONFIG_CTRL_IFACE=unix >> ${CFG}
199	@${ECHO_CMD} CONFIG_BACKEND=file >> ${CFG}
200	@${ECHO_CMD} CONFIG_L2_PACKET=freebsd >> ${CFG}
201	@${ECHO_CMD} CONFIG_TLS=openssl >> ${CFG}
202
203post-build-EAPOL_TEST-on:
204	cd ${BUILD_WRKSRC} && ${GMAKE} eapol_test
205
206do-install:
207	(cd ${BUILD_WRKSRC} && ${INSTALL_PROGRAM} wpa_supplicant wpa_cli \
208		wpa_passphrase ${PREFIX}/sbin)
209	${INSTALL_DATA} ${BUILD_WRKSRC}/wpa_supplicant.conf \
210		${PREFIX}/etc/wpa_supplicant.conf.sample
211
212do-install-EAPOL_TEST-on:
213	${INSTALL_PROGRAM} ${BUILD_WRKSRC}/eapol_test ${FAKE_DESTDIR}${PREFIX}/sbin
214
215do-install-DOCS-on:
216	@${MKDIR} ${FAKE_DESTDIR}${DOCSDIR}
217	(cd ${BUILD_WRKSRC} && \
218		${INSTALL_DATA} ${PORTDOCS} ${FAKE_DESTDIR}${DOCSDIR})
219
220do-install-PRIVSEP-on:
221	${INSTALL_PROGRAM} ${BUILD_WRKSRC}/wpa_priv ${FAKE_DESTDIR}${PREFIX}/sbin
222
223do-install-DBUS-on:
224	@${MKDIR} ${FAKE_DESTDIR}${PREFIX}/share/dbus-1/system-services/
225	@${MKDIR} ${FAKE_DESTDIR}${PREFIX}/etc/dbus-1/system.d/
226	${INSTALL_DATA} ${BUILD_WRKSRC}/dbus/fi.w1.wpa_supplicant1.service \
227		${FAKE_DESTDIR}${PREFIX}/share/dbus-1/system-services/
228	${INSTALL_DATA} ${BUILD_WRKSRC}/dbus/dbus-wpa_supplicant.conf \
229		${FAKE_DESTDIR}${PREFIX}/etc/dbus-1/system.d/
230
231.include <bsd.port.post.mk>
232