dns/acme-dns: add new port

This port provides a limited DNS server with RESTful HTTP API to
handle ACME DNS challenges.
This commit is contained in:
freultwah 2022-05-20 13:07:31 +02:00 committed by Stefan Eßer
parent 32ad969046
commit b30a7af70d
9 changed files with 262 additions and 0 deletions

View File

@ -1,5 +1,6 @@
COMMENT = Domain Name Service tools
SUBDIR += acme-dns
SUBDIR += adns
SUBDIR += adsuck
SUBDIR += amass

83
dns/acme-dns/Makefile Normal file
View File

@ -0,0 +1,83 @@
PORTNAME= acme-dns
DISTVERSION= g20220126
CATEGORIES= dns
MAINTAINER= mops@punkt.de
COMMENT= Limited DNS server with RESTful HTTP API to handle ACME DNS challenges
LICENSE= MIT
LICENSE_FILE= ${WRKSRC}/LICENSE
USES= go:modules
USE_GITHUB= yes
GH_ACCOUNT= joohoi
GH_TAGNAME= a33c09a
GH_TUPLE= \
BurntSushi:toml:v0.4.1:burntsushi_toml/vendor/github.com/BurntSushi/toml \
DATA-DOG:go-sqlmock:v1.5.0:data_dog_go_sqlmock/vendor/github.com/DATA-DOG/go-sqlmock \
ajg:form:v1.5.1:ajg_form/vendor/github.com/ajg/form \
andybalholm:brotli:v1.0.2:andybalholm_brotli/vendor/github.com/andybalholm/brotli \
caddyserver:certmagic:v0.15.2:caddyserver_certmagic/vendor/github.com/caddyserver/certmagic \
davecgh:go-spew:v1.1.1:davecgh_go_spew/vendor/github.com/davecgh/go-spew \
erikstmartin:go-testdb:8d10e4a1bae5:erikstmartin_go_testdb/vendor/github.com/erikstmartin/go-testdb \
fasthttp-contrib:websocket:1f3b11f56072:fasthttp_contrib_websocket/vendor/github.com/fasthttp-contrib/websocket \
fatih:structs:v1.1.0:fatih_structs/vendor/github.com/fatih/structs \
gavv:httpexpect:v2.0.0:gavv_httpexpect/vendor/github.com/gavv/httpexpect \
go-acme:lego:v3.9.0:go_acme_lego_v3/vendor/github.com/go-acme/lego/v3 \
go-yaml:yaml:496545a6307b:go_yaml_yaml/vendor/gopkg.in/yaml.v3 \
golang:crypto:e495a2d5b3d3:golang_crypto/vendor/golang.org/x/crypto \
golang:mod:v0.5.1:golang_mod/vendor/golang.org/x/mod \
golang:net:5cfca573fb4d:golang_net/vendor/golang.org/x/net \
golang:sys:1d35b9e2eb4e:golang_sys/vendor/golang.org/x/sys \
golang:text:v0.3.7:golang_text/vendor/golang.org/x/text \
golang:tools:v0.1.8:golang_tools/vendor/golang.org/x/tools \
golang:xerrors:5ec99f83aff1:golang_xerrors/vendor/golang.org/x/xerrors \
google:go-querystring:v1.0.0:google_go_querystring/vendor/github.com/google/go-querystring \
google:uuid:v1.3.0:google_uuid/vendor/github.com/google/uuid \
gorilla:websocket:v1.4.2:gorilla_websocket/vendor/github.com/gorilla/websocket \
imkira:go-interpol:v1.1.0:imkira_go_interpol/vendor/github.com/imkira/go-interpol \
julienschmidt:httprouter:v1.3.0:julienschmidt_httprouter/vendor/github.com/julienschmidt/httprouter \
klauspost:compress:v1.13.4:klauspost_compress/vendor/github.com/klauspost/compress \
klauspost:cpuid:v2.0.9:klauspost_cpuid_v2/vendor/github.com/klauspost/cpuid/v2 \
lib:pq:v1.10.4:lib_pq/vendor/github.com/lib/pq \
libdns:libdns:v0.2.1:libdns_libdns/vendor/github.com/libdns/libdns \
mattn:go-colorable:v0.1.12:mattn_go_colorable/vendor/github.com/mattn/go-colorable \
mattn:go-sqlite3:v1.14.10:mattn_go_sqlite3/vendor/github.com/mattn/go-sqlite3 \
mholt:acmez:v1.0.1:mholt_acmez/vendor/github.com/mholt/acmez \
miekg:dns:v1.1.45:miekg_dns/vendor/github.com/miekg/dns \
moul:http2curl:v1.0.0:moul_http2curl/vendor/github.com/moul/http2curl \
pmezard:go-difflib:v1.0.0:pmezard_go_difflib/vendor/github.com/pmezard/go-difflib \
rs:cors:v1.8.2:rs_cors/vendor/github.com/rs/cors \
sergi:go-diff:v1.2.0:sergi_go_diff/vendor/github.com/sergi/go-diff \
sirupsen:logrus:v1.8.1:sirupsen_logrus/vendor/github.com/sirupsen/logrus \
stretchr:testify:v1.7.0:stretchr_testify/vendor/github.com/stretchr/testify \
uber-go:atomic:v1.9.0:uber_go_atomic/vendor/go.uber.org/atomic \
uber-go:multierr:v1.7.0:uber_go_multierr/vendor/go.uber.org/multierr \
uber-go:zap:v1.20.0:uber_go_zap/vendor/go.uber.org/zap \
valyala:bytebufferpool:v1.0.0:valyala_bytebufferpool/vendor/github.com/valyala/bytebufferpool \
valyala:fasthttp:v1.31.0:valyala_fasthttp/vendor/github.com/valyala/fasthttp \
xeipuuv:gojsonpointer:4e3ac2762d5f:xeipuuv_gojsonpointer/vendor/github.com/xeipuuv/gojsonpointer \
xeipuuv:gojsonreference:bd5ef7bd5415:xeipuuv_gojsonreference/vendor/github.com/xeipuuv/gojsonreference \
xeipuuv:gojsonschema:v1.2.0:xeipuuv_gojsonschema/vendor/github.com/xeipuuv/gojsonschema \
yalp:jsonpath:5cc68e5049a0:yalp_jsonpath/vendor/github.com/yalp/jsonpath \
yudai:gojsondiff:v1.0.0:yudai_gojsondiff/vendor/github.com/yudai/gojsondiff \
yudai:golcs:ecda9a501e82:yudai_golcs/vendor/github.com/yudai/golcs \
yudai:pp:v2.0.1:yudai_pp/vendor/github.com/yudai/pp
USE_RC_SUBR= acme-dns
post-patch:
@${REINPLACE_CMD} -e 's|etc\/acme-dns|usr\/local\/etc\/acme-dns|' ${WRKSRC}/main.go
@${REINPLACE_CMD} -e 's|etc\/tls|usr\/local\/etc\/tls|' ${WRKSRC}/config.cfg
@${REINPLACE_CMD} -e 's|var\/lib|var\/db|' ${WRKSRC}/config.cfg
post-install:
${MKDIR} ${STAGEDIR}/var/db/acme-dns
${MKDIR} ${STAGEDIR}/var/run/acme-dns
${MKDIR} ${STAGEDIR}${PREFIX}/etc/acme-dns
${CP} ${WRKSRC}/config.cfg ${STAGEDIR}${PREFIX}/etc/acme-dns/config.cfg.sample
${MV} ${STAGEDIR}${PREFIX}/bin/acme-dns ${STAGEDIR}${PREFIX}/libexec/acme-dns
.include <bsd.port.mk>

103
dns/acme-dns/distinfo Normal file
View File

@ -0,0 +1,103 @@
TIMESTAMP = 1643969203
SHA256 (joohoi-acme-dns-g20220126-a33c09a_GH0.tar.gz) = 9f899f5176d64378f8b0eb892435b142bc9de778f935133a0475af164fa13d94
SIZE (joohoi-acme-dns-g20220126-a33c09a_GH0.tar.gz) = 55628
SHA256 (BurntSushi-toml-v0.4.1_GH0.tar.gz) = 280ad65e56f4a23dec30da7ccfd696d9d939a449af8b8be349c8fc487a117a85
SIZE (BurntSushi-toml-v0.4.1_GH0.tar.gz) = 80986
SHA256 (DATA-DOG-go-sqlmock-v1.5.0_GH0.tar.gz) = b78616fddfcc76892aecb5344968d7f3843128b70eba6c4752f092dc992c3b98
SIZE (DATA-DOG-go-sqlmock-v1.5.0_GH0.tar.gz) = 35521
SHA256 (ajg-form-v1.5.1_GH0.tar.gz) = 085e8e98cf63d39241c6ba815b9a71d38808c3fadb6b522feb7fab6d123c44c7
SIZE (ajg-form-v1.5.1_GH0.tar.gz) = 14946
SHA256 (andybalholm-brotli-v1.0.2_GH0.tar.gz) = c649cade783a19e73a80ba24decf5b4ff67fcb7c68f810f71a17a745e15903d3
SIZE (andybalholm-brotli-v1.0.2_GH0.tar.gz) = 594347
SHA256 (caddyserver-certmagic-v0.15.2_GH0.tar.gz) = 88cf94403a571277f67e1f6dd73c9c64cea4294b1a1e03a848c0142911620dac
SIZE (caddyserver-certmagic-v0.15.2_GH0.tar.gz) = 105003
SHA256 (davecgh-go-spew-v1.1.1_GH0.tar.gz) = 7d82b9bb7291adbe7498fe946920ab3e7fc9e6cbfc3b2294693fad00bf0dd17e
SIZE (davecgh-go-spew-v1.1.1_GH0.tar.gz) = 42152
SHA256 (erikstmartin-go-testdb-8d10e4a1bae5_GH0.tar.gz) = 4d7183c03b91abc8fd423aa4b11f2859b078b8b7860bf72fb53e8b587e3ae854
SIZE (erikstmartin-go-testdb-8d10e4a1bae5_GH0.tar.gz) = 8099
SHA256 (fasthttp-contrib-websocket-1f3b11f56072_GH0.tar.gz) = 5c6954474a0f60668654fe799886b5b0c7d4540dae0a8988635bd4c1c64ad738
SIZE (fasthttp-contrib-websocket-1f3b11f56072_GH0.tar.gz) = 14028
SHA256 (fatih-structs-v1.1.0_GH0.tar.gz) = 7479adacd8172f74968da4e1e14f1cc47c0bc98c48f44c09c497416dc8c9dfe4
SIZE (fatih-structs-v1.1.0_GH0.tar.gz) = 14444
SHA256 (gavv-httpexpect-v2.0.0_GH0.tar.gz) = 415f16518531ba2950e3aab0d424da108281ccf764fe3f1ca4c6ec5db0ba585b
SIZE (gavv-httpexpect-v2.0.0_GH0.tar.gz) = 63889
SHA256 (go-acme-lego-v3.9.0_GH0.tar.gz) = b2839b9e1e4a1fb31c2a8bb761b364fb217a84d4cb1eb9853e632192d1e92c8c
SIZE (go-acme-lego-v3.9.0_GH0.tar.gz) = 411419
SHA256 (go-yaml-yaml-496545a6307b_GH0.tar.gz) = ed0e11dc14bbbd4127031d7e8b9e58dad885e2c44a16359d2f64b71d1d1f692a
SIZE (go-yaml-yaml-496545a6307b_GH0.tar.gz) = 90156
SHA256 (golang-crypto-e495a2d5b3d3_GH0.tar.gz) = c640d018652cccc231882d40cd53698af14b220f692d3f8e9b3f478e288ad244
SIZE (golang-crypto-e495a2d5b3d3_GH0.tar.gz) = 1734470
SHA256 (golang-mod-v0.5.1_GH0.tar.gz) = 0ceb1aa06f263416ac67b6844a1704cc8078749c7e8ea9c3900a5c06d00e6036
SIZE (golang-mod-v0.5.1_GH0.tar.gz) = 112665
SHA256 (golang-net-5cfca573fb4d_GH0.tar.gz) = 6e97359a4bf11e2d1a4fb0e6eea9346a5c2586796a9022f1ff4c024adb2daa9c
SIZE (golang-net-5cfca573fb4d_GH0.tar.gz) = 1228359
SHA256 (golang-sys-1d35b9e2eb4e_GH0.tar.gz) = cb599b1befb8f0b8550a528272ac5ebdba968676702bc4adbc8f5122243ede5f
SIZE (golang-sys-1d35b9e2eb4e_GH0.tar.gz) = 1255687
SHA256 (golang-text-v0.3.7_GH0.tar.gz) = 7cab2f6c3133ac1d422edd952b0dd2082fa55a73c2663fb2defd9bf83d649b26
SIZE (golang-text-v0.3.7_GH0.tar.gz) = 8354718
SHA256 (golang-tools-v0.1.8_GH0.tar.gz) = f4449b1bc8aea5864bffadf507f4b690edae12b707c07c2f7497d6d5ff8497ec
SIZE (golang-tools-v0.1.8_GH0.tar.gz) = 2929454
SHA256 (golang-xerrors-5ec99f83aff1_GH0.tar.gz) = 71975d658357e170fd6a41f92539cde8b39c9cd8bfe5931b6311bc5f5c0da0d7
SIZE (golang-xerrors-5ec99f83aff1_GH0.tar.gz) = 13664
SHA256 (google-go-querystring-v1.0.0_GH0.tar.gz) = 59fdfd4d740c85c60c35d3e09b587cfa2b435e78178ac4a23950afbece7118ed
SIZE (google-go-querystring-v1.0.0_GH0.tar.gz) = 7529
SHA256 (google-uuid-v1.3.0_GH0.tar.gz) = 7f7f37c47980e0afcc178a9ffc390bec29ed2371919b4c07658eb01791a7f921
SIZE (google-uuid-v1.3.0_GH0.tar.gz) = 16210
SHA256 (gorilla-websocket-v1.4.2_GH0.tar.gz) = 91937a36bc9e0da3c895c73d4cb74b2cdb1aff54ab21b0d0724000e7b5b85b84
SIZE (gorilla-websocket-v1.4.2_GH0.tar.gz) = 54101
SHA256 (imkira-go-interpol-v1.1.0_GH0.tar.gz) = 701ec611194672c1e7c91f9bf328ddb5d11ac562040ab6c2234cd09a3989dc27
SIZE (imkira-go-interpol-v1.1.0_GH0.tar.gz) = 6280
SHA256 (julienschmidt-httprouter-v1.3.0_GH0.tar.gz) = 2999dffc23f8ac3872ea37d108ddec0ba570d2780a42876300bdcdb0744908e2
SIZE (julienschmidt-httprouter-v1.3.0_GH0.tar.gz) = 23889
SHA256 (klauspost-compress-v1.13.4_GH0.tar.gz) = e25c9621fd3306e2e2939c8aaf79f74929a6c415e75a34e29536cac2d3ec57ab
SIZE (klauspost-compress-v1.13.4_GH0.tar.gz) = 15446158
SHA256 (klauspost-cpuid-v2.0.9_GH0.tar.gz) = 8cbbd8d7e4379eb95db956352e764b83b509c8fc88a3ab543ccaa6ade746d21a
SIZE (klauspost-cpuid-v2.0.9_GH0.tar.gz) = 342155
SHA256 (lib-pq-v1.10.4_GH0.tar.gz) = 3d56bb8c6b50d86b6d053053a7da831a07e9da39205ffa23dfbf1487234ab742
SIZE (lib-pq-v1.10.4_GH0.tar.gz) = 108132
SHA256 (libdns-libdns-v0.2.1_GH0.tar.gz) = 3d4d534d1a04ec0890803c99d7f3a9c540c10afb0215831c2d2f9944c3e2f892
SIZE (libdns-libdns-v0.2.1_GH0.tar.gz) = 5838
SHA256 (mattn-go-colorable-v0.1.12_GH0.tar.gz) = 32493594aee411896ffe13aaed14df4a23c3006866c46c1a908af79eacd102b2
SIZE (mattn-go-colorable-v0.1.12_GH0.tar.gz) = 9801
SHA256 (mattn-go-sqlite3-v1.14.10_GH0.tar.gz) = 57bbbd9acc6d7e7fed03068092f37b2f4546d3dabb2e31c866bdcf13c55d81bd
SIZE (mattn-go-sqlite3-v1.14.10_GH0.tar.gz) = 2424814
SHA256 (mholt-acmez-v1.0.1_GH0.tar.gz) = 7343f3bb8e0d78b5b4536ee330e5e30121221b14e8389a6969a1fe9ac65507e5
SIZE (mholt-acmez-v1.0.1_GH0.tar.gz) = 50757
SHA256 (miekg-dns-v1.1.45_GH0.tar.gz) = cdca43779afe34dc56de4dfcbb73a8be50a2d243e2a0b8ea8d373eab98ebd882
SIZE (miekg-dns-v1.1.45_GH0.tar.gz) = 203445
SHA256 (moul-http2curl-v1.0.0_GH0.tar.gz) = 3e2b23faaabe555759cf032bd573a2e42883afd33cdf34d8ee24345c1b1eabf3
SIZE (moul-http2curl-v1.0.0_GH0.tar.gz) = 100185
SHA256 (pmezard-go-difflib-v1.0.0_GH0.tar.gz) = 28f3dc1b5c0efd61203ab07233f774740d3bf08da4d8153fb5310db6cea0ebda
SIZE (pmezard-go-difflib-v1.0.0_GH0.tar.gz) = 11398
SHA256 (rs-cors-v1.8.2_GH0.tar.gz) = 21695af8974039137254c81c419a233f1ba3c02aab64e4ea5e0cb0f4cd6a5501
SIZE (rs-cors-v1.8.2_GH0.tar.gz) = 51842
SHA256 (sergi-go-diff-v1.2.0_GH0.tar.gz) = 39590cae996778b7ffdd8eb9e8fc791117f16562dbef37f9c41b2f3ebb8f518b
SIZE (sergi-go-diff-v1.2.0_GH0.tar.gz) = 1333585
SHA256 (sirupsen-logrus-v1.8.1_GH0.tar.gz) = e9492c08ac8f202b438ccfb992bf81b7860739cf8f2266958e0c574c7abfdd74
SIZE (sirupsen-logrus-v1.8.1_GH0.tar.gz) = 47161
SHA256 (stretchr-testify-v1.7.0_GH0.tar.gz) = 560c0984072cb436b17bbce5699b205d5aa2beb58ef7a94530d7724b5739a8d6
SIZE (stretchr-testify-v1.7.0_GH0.tar.gz) = 91073
SHA256 (uber-go-atomic-v1.9.0_GH0.tar.gz) = a6b11bb77c479298cdfdfdf2132975dbd975322b619451378cbdf731facd874a
SIZE (uber-go-atomic-v1.9.0_GH0.tar.gz) = 21331
SHA256 (uber-go-multierr-v1.7.0_GH0.tar.gz) = 7b9b6b812f64ad756ada9dd72db1a8be51cdbfa831defe9111cb4e0877138242
SIZE (uber-go-multierr-v1.7.0_GH0.tar.gz) = 15054
SHA256 (uber-go-zap-v1.20.0_GH0.tar.gz) = 13921dc099b5790bd4fcb06c18c2767c80f4ba4c7c0a29659d9126ba04dfc9e5
SIZE (uber-go-zap-v1.20.0_GH0.tar.gz) = 181418
SHA256 (valyala-bytebufferpool-v1.0.0_GH0.tar.gz) = 089013e3429ebe7fd2bc3527f003bf3f3f639891e5d8ba6a56010e3671465e1f
SIZE (valyala-bytebufferpool-v1.0.0_GH0.tar.gz) = 5025
SHA256 (valyala-fasthttp-v1.31.0_GH0.tar.gz) = 6a37505de34716ca2040236bf5589e6073c8825b1a23d50be27756b0459ed6a7
SIZE (valyala-fasthttp-v1.31.0_GH0.tar.gz) = 225082
SHA256 (xeipuuv-gojsonpointer-4e3ac2762d5f_GH0.tar.gz) = ad625b72ad9cbc347ca9d07af1e9dbe49feeb5688a70a015f2153a67e27328a0
SIZE (xeipuuv-gojsonpointer-4e3ac2762d5f_GH0.tar.gz) = 7724
SHA256 (xeipuuv-gojsonreference-bd5ef7bd5415_GH0.tar.gz) = f99765bc8692e620f8abc3f36e10df36a4161c5634505632599ce88abc2d8f55
SIZE (xeipuuv-gojsonreference-bd5ef7bd5415_GH0.tar.gz) = 6958
SHA256 (xeipuuv-gojsonschema-v1.2.0_GH0.tar.gz) = ad47429e26a7078df155bffe2d3ff2e967fb0d6be185b5ffe995d6731916bcf7
SIZE (xeipuuv-gojsonschema-v1.2.0_GH0.tar.gz) = 73602
SHA256 (yalp-jsonpath-5cc68e5049a0_GH0.tar.gz) = db0a46be858673fe827118d3225c15a6ca8dbfa450f781dd448d1125eb5490ce
SIZE (yalp-jsonpath-5cc68e5049a0_GH0.tar.gz) = 7321
SHA256 (yudai-gojsondiff-v1.0.0_GH0.tar.gz) = 0201cada9e0ed69da611ad169b4be2cc10154c2970d1166ff06ab617b981df7a
SIZE (yudai-gojsondiff-v1.0.0_GH0.tar.gz) = 578577
SHA256 (yudai-golcs-ecda9a501e82_GH0.tar.gz) = 080b0331f2d3e1f96446247afdc1c095d2ba2aca63a9b353fc4621e881d1dfa7
SIZE (yudai-golcs-ecda9a501e82_GH0.tar.gz) = 3700
SHA256 (yudai-pp-v2.0.1_GH0.tar.gz) = fd774bfe5dfc868e5918029160bbb6445df2ec6842dfbe004269c0e424a16136
SIZE (yudai-pp-v2.0.1_GH0.tar.gz) = 6365

View File

@ -0,0 +1,32 @@
#!/bin/sh
# $FreeBSD$
#
# PROVIDE: acme-dns
# REQUIRE: LOGIN cleanvar
# KEYWORD: shutdown
#
# Add the following lines to /etc/rc.conf[.local] to enable acme-dns:
# acme_dns_enable="YES"
#
. /etc/rc.subr
name="acme_dns"
rcvar=${name}_enable
load_rc_config $name
#defaults
: ${acme_dns_enable="NO"}
: ${acme_dns_cmd="%%PREFIX%%/libexec/acme-dns"}
: ${acme_dns_pidfile="/var/run/acme-dns/acme-dns.pid"}
: ${acme_dns_log="/var/log/acme-dns.log"}
: ${acme_dns_args=""}
pidfile=${acme_dns_pidfile}
command="/usr/sbin/daemon"
command_args="-P ${pidfile} -r -f -m 3 -o ${acme_dns_log} ${acme_dns_cmd} ${acme_dns_args}"
run_rc_command "$1"

4
dns/acme-dns/pkg-descr Normal file
View File

@ -0,0 +1,4 @@
Limited DNS server with RESTful HTTP API to handle ACME DNS challenges
easily and securely. FreeBSD port by https://github.com/freultwah
WWW: https://github.com/joohoi/acme-dns

4
dns/acme-dns/pkg-plist Normal file
View File

@ -0,0 +1,4 @@
libexec/acme-dns
@dir /var/db/acme-dns
@dir /var/run/acme-dns
@sample etc/acme-dns/config.cfg.sample

View File

@ -0,0 +1,11 @@
--- configure.ac.orig 2020-07-26 11:00:55 UTC
+++ configure.ac
@@ -41,7 +41,7 @@ AC_MSG_WARN([Please make sure pkg-config is installed
AC_TYPE_SIZE_T
AC_MSG_WARN([Please make sure pkg-config is installed and autoreconf run])
-PKG_CHECK_MODULES([BSD], [libbsd])
+#PKG_CHECK_MODULES([BSD], [libbsd])
PKG_CHECK_MODULES([CONFIG], [libconfig >= 1.3])
CFLAGS="$CFLAGS $CONFIG_CFLAGS"
LIBS="$LIBS $CONFIG_LIBS $BSD_LIBS"

View File

@ -0,0 +1,12 @@
--- src/cvecheck_common.h.orig 2020-07-26 11:00:55 UTC
+++ src/cvecheck_common.h
@@ -1,7 +1,9 @@
#include <stdio.h>
#include <libconfig.h>
#include <string.h>
+#if !defined(__FreeBSD__)
#include <bsd/string.h>
+#endif
#ifdef _USE_SQLITE3
#include <sqlite3.h>

View File

@ -0,0 +1,12 @@
--- src/output/stringscmd.h.orig 2020-07-26 11:00:55 UTC
+++ src/output/stringscmd.h
@@ -1,7 +1,9 @@
#include <regex.h>
#include <stdio.h>
#include <string.h>
+#if !defined(__FreeBSD__)
#include <bsd/string.h>
+#endif
#include "../cvecheck_common.h"
#include "../swstring.h"