Skip to content

Fix OpenBSD build: portable Makefile and missing socket headers#31

Merged
kosmas-valianos merged 1 commit into
mainfrom
bsd
May 5, 2026
Merged

Fix OpenBSD build: portable Makefile and missing socket headers#31
kosmas-valianos merged 1 commit into
mainfrom
bsd

Conversation

@kosmas-valianos
Copy link
Copy Markdown
Owner

Summary

  • Make Makefile portable to BSD make: drop GNU-only $+ / $< in explicit rules and the broken src/.o: %.c pattern rule; add explicit rule for tests/test.o.
  • Drop -ansi/-pedantic from CFLAGS so OpenBSD libc exposes POSIX/BSD socket symbols (these flags set __STRICT_ANSI__ which hides them on OpenBSD).
  • Include <sys/types.h>, <sys/socket.h>, <netinet/in.h> before <arpa/inet.h> in proxy_protocol.c, tests/test.c, and examples/client_server.c so AF_INET, AF_INET6, AF_UNIX, AF_UNSPEC, and struct in6_addr are defined on OpenBSD.

Test

Linux: make clean && make builds, all 39 tests pass, example runs.

Closes #30

Drop -ansi/-pedantic from CFLAGS and replace GNU-only $+ and $<
in explicit rules with literal source paths so BSD make accepts the
Makefile. Include <sys/types.h>, <sys/socket.h>, <netinet/in.h> before
<arpa/inet.h> so OpenBSD libc exposes AF_INET, struct in6_addr, etc.

Closes #30
@kosmas-valianos
Copy link
Copy Markdown
Owner Author

@johnjore Can you check if it works in your BSD?

@johnjore
Copy link
Copy Markdown

johnjore commented May 5, 2026

gmake is the gnu compatible make:

git checkout BRANCHNAME
Switched to branch 'BRANCHNAME'
-bash-5.3# gmake
mkdir -p libs
cc -Wall -Wextra -Wshadow -fshort-enums -fpic -c -o src/proxy_protocol.o src/proxy_protocol.c
cc -shared -o libs/libproxyprotocol.so src/proxy_protocol.o
cc -Wall -Wextra -Wshadow -fshort-enums -fpic -c -o tests/test.o tests/test.c
cc -Llibs/ -Wall -Wextra -Wshadow -fshort-enums -fpic -o tests/test_libproxyprotocol tests/test.o -lproxyprotocol
LD_LIBRARY_PATH=libs/ tests/test_libproxyprotocol
Running test: v1 PROXY protocol header: UNKNOWN - short...PASSED
Running test: v1 PROXY protocol header: UNKNOWN - full...PASSED
Running test: v2 PROXY protocol header: PROXY, TCP over IPv4. TLVs: PP2_TYPE_CRC32C, PP2_TYPE_AWS(PP2_SUBTYPE_AWS_VPCE_ID)...PASSED
Running test: v2 PROXY protocol header: create and parse - PROXY, TCP over IPv4...PASSED
Running test: v1 PROXY protocol header: create and parse- TCP4...PASSED
Running test: v2 PROXY protocol header: create and parse - PROXY, UNIX stream...PASSED
Running test: v2 PROXY protocol header: create and parse - LOCAL, AF_UNSPEC...PASSED
Running test: v2 PROXY protocol header: create and parse - PROXY, TCP over IPv6...PASSED
Running test: v1 PROXY protocol header: create and parse - TCP6...PASSED
Running test: v2 PROXY protocol header: create and parse - PROXY, TCP over IPv4. Aligned, padded. TLVs: PP2_TYPE_SSL, PP2_SUBTYPE_SSL_VERSION, PP2_SUBTYPE_SSL_CN, PP2_SUBTYPE_SSL_CIPHER,PP2_SUBTYPE_SSL_SIG_ALG, PP2_SUBTYPE_SSL_KEY_ALG, PP2_TYPE_AWS(PP2_SUBTYPE_AWS_VPCE_ID), PP2_TYPE_CRC32C...PASSED
Running test: v2 PROXY protocol header: PROXY, TCP over IPv4. TLVs: PP2_TYPE_SSL, PP2_SUBTYPE_SSL_VERSION, PP2_SUBTYPE_SSL_CN, PP2_SUBTYPE_SSL_CIPHER, PP2_SUBTYPE_SSL_SIG_ALG, PP2_SUBTYPE_SSL_KEY_ALG...PASSED
Running test: v2 PROXY protocol header: create and parse - PROXY, TCP over IPv4. TLVs: PP2_TYPE_SSL, PP2_SUBTYPE_SSL_VERSION, PP2_SUBTYPE_SSL_CN, PP2_SUBTYPE_SSL_CIPHER, PP2_SUBTYPE_SSL_SIG_ALG, PP2_SUBTYPE_SSL_KEY_ALG, PP2_SUBTYPE_SSL_GROUP, PP2_SUBTYPE_SSL_SIG_SCHEME, PP2_SUBTYPE_SSL_CLIENT_CERT...PASSED
Running test: v2 PROXY protocol header: create and parse - PROXY, TCP over IPv4. TLVs: PP2_TYPE_ALPN, PP2_TYPE_AUTHORITY, PP2_TYPE_UNIQUE_ID, PP2_TYPE_NETNS, PP2_TYPE_AZURE...PASSED
Running test: v1 PROXY protocol header: create and parse - AF_UNSPEC...PASSED
Running test: v2 PROXY protocol header: pp2_create_healthcheck_hdr() and parse - LOCAL, AF_UNSPEC...PASSED
Running test: v1 PROXY protocol header: -ERR_PP1_TRANSPORT_FAMILY...PASSED
Running test: v1 PROXY protocol header: -ERR_PP1_TRANSPORT_FAMILY...PASSED
Running test: v1 PROXY protocol header: -ERR_PP1_IPV4_SRC_IP...PASSED
Running test: v1 PROXY protocol header: -ERR_PP1_IPV4_DST_IP...PASSED
Running test: v1 PROXY protocol header: -ERR_PP1_IPV6_SRC_IP...PASSED
Running test: v1 PROXY protocol header: -ERR_PP1_IPV6_DST_IP...PASSED
Running test: v2 PROXY protocol header: -ERR_PP2_CMD...PASSED
Running test: v2 PROXY protocol header: -ERR_PP2_ADDR_FAMILY...PASSED
Running test: v2 PROXY protocol header: -ERR_PP2_TRANSPORT_PROTOCOL...PASSED
Running test: v2 PROXY protocol header: -ERR_PP2_IPV4_SRC_IP...PASSED
Running test: v2 PROXY protocol header: -ERR_PP2_IPV4_DST_IP...PASSED
Running test: v2 PROXY protocol header: -ERR_PP2_IPV6_SRC_IP...PASSED
Running test: v2 PROXY protocol header: -ERR_PP2_IPV6_DST_IP...PASSED
Running test: v2 PROXY protocol header: -ERR_PP2_TLV_LENGTH (TLV length overflow)...PASSED
Running test: v2 PROXY protocol header: -ERR_PP2_TYPE_SSL (SSL TLV too short)...PASSED
Running test: v2 PROXY protocol header: -ERR_PP2_TYPE_SSL (SSL sub-TLV trailing bytes)...PASSED
Running test: v1 PROXY protocol header: -ERR_PP1_TRANSPORT_FAMILY (invalid family, 15-byte header)...PASSED
Running test: v1 PROXY protocol header: -ERR_PP1_CRLF (buffer >= 108 bytes, no CRLF)...PASSED
Running test: v1 PROXY protocol header: -ERR_PP1_SRC_PORT (+ prefix)...PASSED
Running test: v1 PROXY protocol header: -ERR_PP1_DST_PORT (trailing garbage)...PASSED
Running test: pp_info_add_unique_id length > 128...PASSED
Running test: pp_info_add_netns NULL...PASSED
Running test: pp_info_add_aws_vpce_id NULL...PASSED
Running test: pp_strerror()...PASSED
All tests completed successfully
cc -Wall -Wextra -Wshadow -fshort-enums -fpic -c -o examples/client_server.o examples/client_server.c
cc -Llibs/ -Wall -Wextra -Wshadow -fshort-enums -fpic -o examples/client_server examples/client_server.o -lproxyprotocol
LD_LIBRARY_PATH=libs/ examples/client_server
45 bytes PROXY protocol header: 172.22.32.1 172.22.33.1 4040 443
535 bytes PROXY protocol header:
        Azure Link ID: 1234
        CRC32C checksum: verified
        SSL version: TLSv1.2
        SSL cipher: ECDHE-RSA-AES128-GCM-SHA256
        SSL sig_alg: SHA256
        SSL key_alg: RSA2048
        SSL group: secp256r1
        SSL sig_scheme: rsa_pss_rsae_sha256
        SSL CN: example.com
        SSL client_cert: present
        192.168.10.100 192.168.11.90 42332 8080

"normal" make on OpenBSD

make
mkdir -p libs
cc -Wall -Wextra -Wshadow -fshort-enums -fpic -c -o src/proxy_protocol.o src/proxy_protocol.c
cc -shared -o libs/libproxyprotocol.so src/proxy_protocol.o
cc -Wall -Wextra -Wshadow -fshort-enums -fpic -c -o tests/test.o tests/test.c
cc -Llibs/ -Wall -Wextra -Wshadow -fshort-enums -fpic -o tests/test_libproxyprotocol tests/test.o -lproxyprotocol
cc -Wall -Wextra -Wshadow -fshort-enums -fpic -c -o examples/client_server.o examples/client_server.c
cc -Llibs/ -Wall -Wextra -Wshadow -fshort-enums -fpic -o examples/client_server examples/client_server.o -lproxyprotocol
LD_LIBRARY_PATH=libs/ examples/client_server
45 bytes PROXY protocol header: 172.22.32.1 172.22.33.1 4040 443
535 bytes PROXY protocol header:
        Azure Link ID: 1234
        CRC32C checksum: verified
        SSL version: TLSv1.2
        SSL cipher: ECDHE-RSA-AES128-GCM-SHA256
        SSL sig_alg: SHA256
        SSL key_alg: RSA2048
        SSL group: secp256r1
        SSL sig_scheme: rsa_pss_rsae_sha256
        SSL CN: example.com
        SSL client_cert: present
        192.168.10.100 192.168.11.90 42332 8080

./tests/test_libproxyprotocol
Running test: v1 PROXY protocol header: UNKNOWN - short...PASSED
Running test: v1 PROXY protocol header: UNKNOWN - full...PASSED
Running test: v2 PROXY protocol header: PROXY, TCP over IPv4. TLVs: PP2_TYPE_CRC32C, PP2_TYPE_AWS(PP2_SUBTYPE_AWS_VPCE_ID)...PASSED
Running test: v2 PROXY protocol header: create and parse - PROXY, TCP over IPv4...PASSED
Running test: v1 PROXY protocol header: create and parse- TCP4...PASSED
Running test: v2 PROXY protocol header: create and parse - PROXY, UNIX stream...PASSED
Running test: v2 PROXY protocol header: create and parse - LOCAL, AF_UNSPEC...PASSED
Running test: v2 PROXY protocol header: create and parse - PROXY, TCP over IPv6...PASSED
Running test: v1 PROXY protocol header: create and parse - TCP6...PASSED
Running test: v2 PROXY protocol header: create and parse - PROXY, TCP over IPv4. Aligned, padded. TLVs: PP2_TYPE_SSL, PP2_SUBTYPE_SSL_VERSION, PP2_SUBTYPE_SSL_CN, PP2_SUBTYPE_SSL_CIPHER,PP2_SUBTYPE_SSL_SIG_ALG, PP2_SUBTYPE_SSL_KEY_ALG, PP2_TYPE_AWS(PP2_SUBTYPE_AWS_VPCE_ID), PP2_TYPE_CRC32C...PASSED
Running test: v2 PROXY protocol header: PROXY, TCP over IPv4. TLVs: PP2_TYPE_SSL, PP2_SUBTYPE_SSL_VERSION, PP2_SUBTYPE_SSL_CN, PP2_SUBTYPE_SSL_CIPHER, PP2_SUBTYPE_SSL_SIG_ALG, PP2_SUBTYPE_SSL_KEY_ALG...PASSED
Running test: v2 PROXY protocol header: create and parse - PROXY, TCP over IPv4. TLVs: PP2_TYPE_SSL, PP2_SUBTYPE_SSL_VERSION, PP2_SUBTYPE_SSL_CN, PP2_SUBTYPE_SSL_CIPHER, PP2_SUBTYPE_SSL_SIG_ALG, PP2_SUBTYPE_SSL_KEY_ALG, PP2_SUBTYPE_SSL_GROUP, PP2_SUBTYPE_SSL_SIG_SCHEME, PP2_SUBTYPE_SSL_CLIENT_CERT...PASSED
Running test: v2 PROXY protocol header: create and parse - PROXY, TCP over IPv4. TLVs: PP2_TYPE_ALPN, PP2_TYPE_AUTHORITY, PP2_TYPE_UNIQUE_ID, PP2_TYPE_NETNS, PP2_TYPE_AZURE...PASSED
Running test: v1 PROXY protocol header: create and parse - AF_UNSPEC...PASSED
Running test: v2 PROXY protocol header: pp2_create_healthcheck_hdr() and parse - LOCAL, AF_UNSPEC...PASSED
Running test: v1 PROXY protocol header: -ERR_PP1_TRANSPORT_FAMILY...PASSED
Running test: v1 PROXY protocol header: -ERR_PP1_TRANSPORT_FAMILY...PASSED
Running test: v1 PROXY protocol header: -ERR_PP1_IPV4_SRC_IP...PASSED
Running test: v1 PROXY protocol header: -ERR_PP1_IPV4_DST_IP...PASSED
Running test: v1 PROXY protocol header: -ERR_PP1_IPV6_SRC_IP...PASSED
Running test: v1 PROXY protocol header: -ERR_PP1_IPV6_DST_IP...PASSED
Running test: v2 PROXY protocol header: -ERR_PP2_CMD...PASSED
Running test: v2 PROXY protocol header: -ERR_PP2_ADDR_FAMILY...PASSED
Running test: v2 PROXY protocol header: -ERR_PP2_TRANSPORT_PROTOCOL...PASSED
Running test: v2 PROXY protocol header: -ERR_PP2_IPV4_SRC_IP...PASSED
Running test: v2 PROXY protocol header: -ERR_PP2_IPV4_DST_IP...PASSED
Running test: v2 PROXY protocol header: -ERR_PP2_IPV6_SRC_IP...PASSED
Running test: v2 PROXY protocol header: -ERR_PP2_IPV6_DST_IP...PASSED
Running test: v2 PROXY protocol header: -ERR_PP2_TLV_LENGTH (TLV length overflow)...PASSED
Running test: v2 PROXY protocol header: -ERR_PP2_TYPE_SSL (SSL TLV too short)...PASSED
Running test: v2 PROXY protocol header: -ERR_PP2_TYPE_SSL (SSL sub-TLV trailing bytes)...PASSED
Running test: v1 PROXY protocol header: -ERR_PP1_TRANSPORT_FAMILY (invalid family, 15-byte header)...PASSED
Running test: v1 PROXY protocol header: -ERR_PP1_CRLF (buffer >= 108 bytes, no CRLF)...PASSED
Running test: v1 PROXY protocol header: -ERR_PP1_SRC_PORT (+ prefix)...PASSED
Running test: v1 PROXY protocol header: -ERR_PP1_DST_PORT (trailing garbage)...PASSED
Running test: pp_info_add_unique_id length > 128...PASSED
Running test: pp_info_add_netns NULL...PASSED
Running test: pp_info_add_aws_vpce_id NULL...PASSED
Running test: pp_strerror()...PASSED
All tests completed successfully

Very nice! Thanks for doing this!

@kosmas-valianos kosmas-valianos merged commit 648f906 into main May 5, 2026
2 checks passed
@kosmas-valianos kosmas-valianos deleted the bsd branch May 5, 2026 14:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Feature Request: Compile on OpenBSD 7.x

2 participants