Skip to content

Commit 2f84687

Browse files
committed
upgrade to go 1.20
1 parent d2bfe52 commit 2f84687

17 files changed

+69
-58
lines changed

.gitignore

-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
pdhcp
2-
debian/pdhcp
32
debian/*debhelper*
43
debian/*substvars*
54
debian/files

LICENSE

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
MIT License
22

3-
Copyright (c) 2015-2020 Pierre-Yves Kerembellec
3+
Copyright (c) 2015-2023 Pierre-Yves Kerembellec
44

55
Permission is hereby granted, free of charge, to any person obtaining a copy
66
of this software and associated documentation files (the "Software"), to deal

Makefile

+8-4
Original file line numberDiff line numberDiff line change
@@ -3,28 +3,32 @@
33
# build targets
44
.PHONY: support
55
all: pdhcp support
6-
pdhcp: src/*.go
7-
@export GOPATH=/tmp/go; export CGO_ENABLED=0; cd src && go build -trimpath -o ../pdhcp && cd .. && strip pdhcp
6+
pdhcp: *.go
7+
@env GOPATH=/tmp/go go get -d && env GOPATH=/tmp/go CGO_ENABLED=0 go build -trimpath -o pdhcp
8+
@-strip pdhcp 2>/dev/null || true
9+
@-upx -9 pdhcp 2>/dev/null || true
810
support:
911
@make -C support
1012
clean:
1113
@make -C support clean
1214
distclean:
1315
@make -C support distclean
14-
@rm -f pdhcp
16+
@rm -f pdhcp *.upx
1517
deb:
1618
@debuild -e GOROOT -e GOPATH -e PATH -i -us -uc -b
1719
debclean:
1820
@debuild -- clean
1921
@rm -f ../pdhcp_*
2022

2123
# run targets
24+
run: pdhcp
25+
@./pdhcp -i eth0
2226
client: pdhcp
2327
@./pdhcp -i veth0i
2428
local-backend: pdhcp
2529
@./pdhcp -i br0 -b support/local-backend.py -w 4
2630
remote-backend: pdhcp
27-
@./pdhcp -i eth0 -b http://install.dm.gg/dev.php
31+
@./pdhcp -i eth0 -b http://remote.server.com/dhcp
2832
relay: pdhcp
2933
@./pdhcp -i br0 -r localhost:6767
3034
remote-server: pdhcp

src/bsd.go bsd.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// +build freebsd openbsd netbsd darwin
1+
//go:build freebsd || openbsd || netbsd || darwin
22

33
package main
44

debian/changelog

+6
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
pdhcp (2.0.6) stable; urgency=medium
2+
3+
* update to go 1.20
4+
5+
-- Pierre-Yves Kerembellec <[email protected]> Sat, 04 Feb 2023 14:50:44 +0100
6+
17
pdhcp (2.0.5) stable; urgency=medium
28

39
* more fixes to service autostart madness

debian/compat

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
9
1+
10

debian/control

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ Source: pdhcp
22
Section: net
33
Priority: optional
44
Maintainer: Pierre-Yves Kerembellec <[email protected]>
5-
Build-Depends: debhelper (>= 5), golang-1.15
5+
Build-Depends: debhelper (>= 5), golang-1.20
66
Standards-Version: 3.7.2
77

88
Package: pdhcp

src/dhcp.go dhcp.go

File renamed without changes.

src/dhcpv4.go dhcpv4.go

File renamed without changes.

src/dhcpv6.go dhcpv6.go

File renamed without changes.

go.mod

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
module pdhcp
22

3-
go 1.15
3+
go 1.20
44

55
require (
6-
github.com/pyke369/golang-support v0.0.0-20200321184731-cd1ed731523d
7-
golang.org/x/sys v0.0.0-20200909081042-eff7692f9009
6+
github.com/pyke369/golang-support v0.0.0-20230108182845-9fe2fa61d8f6
7+
golang.org/x/sys v0.4.0
88
)

go.sum

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
github.com/pyke369/golang-support v0.0.0-20200321184731-cd1ed731523d h1:bssjYWDUaYbjtBc7gZ6BI3YBerIg5EAn+kAM5hMQf2s=
2-
github.com/pyke369/golang-support v0.0.0-20200321184731-cd1ed731523d/go.mod h1:0XGrzgrEp0fa/+JSV8XZePUwyjnU6C3bMc7Xz2bHHKI=
3-
golang.org/x/sys v0.0.0-20200909081042-eff7692f9009 h1:W0lCpv29Hv0UaM1LXb9QlBHLNP8UFfcKjblhVCWftOM=
4-
golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
1+
github.com/pyke369/golang-support v0.0.0-20230108182845-9fe2fa61d8f6 h1:F76ajQ+Rq3bLrUZnBYdAJ20MjQRQk0HLMjHtvgJJu/U=
2+
github.com/pyke369/golang-support v0.0.0-20230108182845-9fe2fa61d8f6/go.mod h1:86DUae4wbzSq5Zaoh8ufyM0br8ZEm8o5QrmEiOqg7eM=
3+
golang.org/x/sys v0.4.0 h1:Zr2JFtRQNX3BCZ8YtxRE9hNJYC8J6I1MVbMg6owUp18=
4+
golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=

src/linux.go linux.go

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// +build linux
1+
//go:build linux
22

33
package main
44

@@ -169,7 +169,6 @@ func (rc *RawConn) ReadFrom(data []byte) (read int, from *RawAddr, err error) {
169169
}
170170
return
171171
}
172-
return
173172
}
174173

175174
func (rc *RawConn) WriteTo(from, to *RawAddr, data []byte) (written int, err error) {

src/main.go main.go

+36-36
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ import (
2626
"golang.org/x/sys/unix"
2727
)
2828

29-
const progname = "pdhcp"
30-
const version = "2.0.5"
29+
const PROGNAME = "pdhcp"
30+
const VERSION = "2.0.6"
3131

3232
type SOURCE struct {
3333
mode string
@@ -48,7 +48,7 @@ type CONTEXT struct {
4848
}
4949

5050
var (
51-
log *ulog.ULog
51+
logger *ulog.ULog
5252
sources = map[string]*SOURCE{}
5353
contexts = map[string]*CONTEXT{}
5454
lock sync.RWMutex
@@ -68,8 +68,7 @@ func main() {
6868
arguments = flag.FlagSet{Usage: func() {
6969
fmt.Fprintf(os.Stderr, "usage: %s [OPTIONS...]\n\noptions are:\n", filepath.Base(os.Args[0]))
7070
arguments.PrintDefaults()
71-
},
72-
}
71+
}}
7372
help := arguments.Bool("h", false, "show this help screen")
7473
sversion := arguments.Bool("v", false, "show the program version")
7574
list1 := arguments.Bool("l", false, "list all available DHCP options (human format)")
@@ -110,7 +109,7 @@ func main() {
110109

111110
// show program version
112111
if *sversion {
113-
fmt.Printf("%s/v%s\n", progname, version)
112+
fmt.Printf("%s/v%s\n", PROGNAME, VERSION)
114113
os.Exit(0)
115114
}
116115

@@ -124,9 +123,9 @@ func main() {
124123
if *format == "" {
125124
*format = "console(output=stderr,time=msdatetime) syslog(facility=local0)"
126125
}
127-
log = ulog.New(*format)
126+
logger = ulog.New(*format)
128127
if mode != "client" {
129-
log.Info(map[string]interface{}{"mode": mode, "event": "start", "version": version, "pid": os.Getpid()})
128+
logger.Info(map[string]interface{}{"mode": mode, "event": "start", "version": VERSION, "pid": os.Getpid()})
130129
}
131130

132131
// start and keep backend workers alive
@@ -143,8 +142,8 @@ func main() {
143142
if request, err := http.NewRequest(http.MethodPost, *backend, bytes.NewBuffer(payload)); err == nil {
144143
request.Header.Set("Content-Length", fmt.Sprintf("%d", len(payload)))
145144
request.Header.Set("Content-Type", "application/json")
146-
request.Header.Set("User-Agent", fmt.Sprintf("%s/%s", progname, version))
147-
log.Info(map[string]interface{}{"event": "http-send", "message": fmt.Sprintf("dhcp-%v", frame["dhcp-message-type"]),
145+
request.Header.Set("User-Agent", fmt.Sprintf("%s/%s", PROGNAME, VERSION))
146+
logger.Info(map[string]interface{}{"event": "http-send", "message": fmt.Sprintf("dhcp-%v", frame["dhcp-message-type"]),
148147
"txid": fmt.Sprintf("%v/%v", frame["client-hardware-address"], frame["bootp-transaction-id"]), "target": *backend})
149148
client := &http.Client{Timeout: 7 * time.Second}
150149
if response, err := client.Do(request); err == nil {
@@ -156,7 +155,7 @@ func main() {
156155
lock.RLock()
157156
if contexts[v4key(frame)] != nil {
158157
if packet, err := v4build(frame); err == nil {
159-
log.Info(map[string]interface{}{"event": "http-receive", "message": fmt.Sprintf("dhcp-%v", frame["dhcp-message-type"]),
158+
logger.Info(map[string]interface{}{"event": "http-receive", "message": fmt.Sprintf("dhcp-%v", frame["dhcp-message-type"]),
160159
"txid": fmt.Sprintf("%v/%v", frame["client-hardware-address"], frame["bootp-transaction-id"]), "target": *backend})
161160
pmux <- PACKET{source: "http", client: *backend, data: packet}
162161
}
@@ -175,25 +174,26 @@ func main() {
175174
for *workers > 0 {
176175
go func() {
177176
for {
178-
command, pid := &exec.Cmd{Path: *backend}, 0
177+
command, pid := &exec.Cmd{Path: *backend, Stderr: os.Stderr}, 0
179178
if stdin, err := command.StdinPipe(); err == nil {
180179
if stdout, err := command.StdoutPipe(); err == nil {
181180
if err := command.Start(); err == nil {
182181
pid = command.Process.Pid
183-
log.Info(map[string]interface{}{"event": "worker-start", "backend": *backend, "worker": pid})
184-
backend := make(chan FRAME)
182+
logger.Info(map[string]interface{}{"event": "worker-start", "backend": *backend, "worker": pid})
183+
queue := make(chan FRAME)
185184
go func() {
186185
reader := bufio.NewReader(stdout)
187186
for {
188187
if line, err := reader.ReadString('\n'); err != nil {
189-
backend <- nil
188+
queue <- nil
190189
break
191190
} else {
192191
var frame FRAME
192+
193193
if err := json.Unmarshal([]byte(line), &frame); err == nil {
194194
lock.RLock()
195195
if contexts[v4key(frame)] != nil {
196-
backend <- frame
196+
queue <- frame
197197
}
198198
lock.RUnlock()
199199
} else {
@@ -209,17 +209,17 @@ func main() {
209209
if payload, err := json.Marshal(frame); err == nil {
210210
payload = append(payload, '\n')
211211
if _, err := stdin.Write(payload); err == nil {
212-
log.Info(map[string]interface{}{"event": "worker-send", "message": fmt.Sprintf("dhcp-%v", frame["dhcp-message-type"]),
212+
logger.Info(map[string]interface{}{"event": "worker-send", "message": fmt.Sprintf("dhcp-%v", frame["dhcp-message-type"]),
213213
"txid": fmt.Sprintf("%v/%v", frame["client-hardware-address"], frame["bootp-transaction-id"]), "worker": pid})
214214
}
215215
}
216216

217-
case frame := <-backend:
217+
case frame := <-queue:
218218
if frame == nil {
219219
break loop
220220
}
221221
if packet, err := v4build(frame); err == nil {
222-
log.Info(map[string]interface{}{"event": "worker-receive", "message": fmt.Sprintf("dhcp-%v", frame["dhcp-message-type"]),
222+
logger.Info(map[string]interface{}{"event": "worker-receive", "message": fmt.Sprintf("dhcp-%v", frame["dhcp-message-type"]),
223223
"txid": fmt.Sprintf("%v/%v", frame["client-hardware-address"], frame["bootp-transaction-id"]), "worker": pid})
224224
pmux <- PACKET{source: "worker", client: fmt.Sprintf("%d", pid), data: packet}
225225
}
@@ -228,7 +228,7 @@ func main() {
228228
}
229229
}
230230
}
231-
log.Warn(map[string]interface{}{"event": "worker-stop", "backend": *backend, "worker": pid, "status": fmt.Sprintf("%v", command.Wait())})
231+
logger.Warn(map[string]interface{}{"event": "worker-stop", "backend": *backend, "worker": pid, "status": fmt.Sprintf("%v", command.Wait())})
232232
time.Sleep(5 * time.Second)
233233
}
234234
}()
@@ -323,11 +323,11 @@ func main() {
323323
if name != "" {
324324
if handle, err := NewRawConn(&RawAddr{Port: *port, Device: name}); err == nil {
325325
if handle.Local.Addr == nil {
326-
log.Warn(map[string]interface{}{"event": "error", "error": fmt.Sprintf("skipping interface %s: no ip address", name)})
326+
logger.Warn(map[string]interface{}{"event": "error", "error": fmt.Sprintf("skipping interface %s: no ip address", name)})
327327
return
328328
}
329329
source.rhandle = handle
330-
log.Info(map[string]interface{}{"event": "listen", "listen": fmt.Sprintf("%s@%s:%d", name, *address, *port),
330+
logger.Info(map[string]interface{}{"event": "listen", "listen": fmt.Sprintf("%s@%s:%d", name, *address, *port),
331331
"source": fmt.Sprintf("%s@%s", handle.Local.HardwareAddr, handle.Local.Addr)})
332332
} else if mode == "relay" {
333333
config := net.ListenConfig{
@@ -341,13 +341,13 @@ func main() {
341341
}}
342342
if handle, err := config.ListenPacket(context.Background(), "udp", fmt.Sprintf("%s:%d", *address, *port)); err == nil {
343343
source.handle = handle
344-
log.Info(map[string]interface{}{"event": "listen", "listen": fmt.Sprintf("%s@%s:%d", name, *address, *port)})
344+
logger.Info(map[string]interface{}{"event": "listen", "listen": fmt.Sprintf("%s@%s:%d", name, *address, *port)})
345345
} else {
346-
log.Warn(map[string]interface{}{"event": "error", "error": fmt.Sprintf("skipping interface %s: %v", name, err)})
346+
logger.Warn(map[string]interface{}{"event": "error", "error": fmt.Sprintf("skipping interface %s: %v", name, err)})
347347
return
348348
}
349349
} else {
350-
log.Warn(map[string]interface{}{"event": "error", "error": fmt.Sprintf("skipping interface %s: %v", name, err)})
350+
logger.Warn(map[string]interface{}{"event": "error", "error": fmt.Sprintf("skipping interface %s: %v", name, err)})
351351
return
352352
}
353353
} else {
@@ -362,9 +362,9 @@ func main() {
362362
}}
363363
if handle, err := config.ListenPacket(context.Background(), "udp", fmt.Sprintf("%s:%d", *address, *port)); err == nil {
364364
source.handle = handle
365-
log.Info(map[string]interface{}{"event": "listen", "listen": fmt.Sprintf("%s@%s:%d", name, *address, *port)})
365+
logger.Info(map[string]interface{}{"event": "listen", "listen": fmt.Sprintf("%s@%s:%d", name, *address, *port)})
366366
} else {
367-
log.Warn(map[string]interface{}{"event": "error", "error": fmt.Sprintf("%v", err)})
367+
logger.Warn(map[string]interface{}{"event": "error", "error": fmt.Sprintf("%v", err)})
368368
return
369369
}
370370
}
@@ -406,7 +406,7 @@ func main() {
406406
select {
407407
case packet := <-pmux:
408408
if frame, err := v4parse(packet.data); err != nil {
409-
log.Warn(map[string]interface{}{"event": "error", "error": fmt.Sprintf("%v", err), "source": packet.source, "client": packet.client})
409+
logger.Warn(map[string]interface{}{"event": "error", "error": fmt.Sprintf("%v", err), "source": packet.source, "client": packet.client})
410410
} else {
411411
key := v4key(frame)
412412
if frame["bootp-opcode"] == "request" {
@@ -443,7 +443,7 @@ func main() {
443443
if value, ok := frame["hostname"].(string); ok {
444444
hostname = value
445445
}
446-
log.Info(map[string]interface{}{"event": "request", "message": fmt.Sprintf("dhcp-%v", frame["dhcp-message-type"]),
446+
logger.Info(map[string]interface{}{"event": "request", "message": fmt.Sprintf("dhcp-%v", frame["dhcp-message-type"]),
447447
"txid": fmt.Sprintf("%v/%v", frame["client-hardware-address"], frame["bootp-transaction-id"]),
448448
"source": packet.source, "client": packet.client, "requested-ip-address": address, "hostname": hostname,
449449
})
@@ -463,7 +463,7 @@ func main() {
463463
if rpacket, err := v4build(rframe); err == nil {
464464
if raddress, err := net.ResolveUDPAddr("udp", *relay); err == nil {
465465
if _, err := sources["-"].handle.WriteTo(rpacket, raddress); err == nil {
466-
log.Info(map[string]interface{}{"event": "relay-send", "message": fmt.Sprintf("dhcp-%v", rframe["dhcp-message-type"]),
466+
logger.Info(map[string]interface{}{"event": "relay-send", "message": fmt.Sprintf("dhcp-%v", rframe["dhcp-message-type"]),
467467
"txid": fmt.Sprintf("%v/%v", rframe["client-hardware-address"], rframe["bootp-transaction-id"]), "relay": relay})
468468
}
469469
}
@@ -500,7 +500,7 @@ func main() {
500500
break
501501
}
502502
if mode == "relay" {
503-
log.Info(map[string]interface{}{"event": "relay-receive", "message": fmt.Sprintf("dhcp-%v", frame["dhcp-message-type"]),
503+
logger.Info(map[string]interface{}{"event": "relay-receive", "message": fmt.Sprintf("dhcp-%v", frame["dhcp-message-type"]),
504504
"txid": fmt.Sprintf("%s/%s", frame["client-hardware-address"], frame["bootp-transaction-id"]), "relay": relay})
505505
}
506506
if sources[context.source].rhandle != nil && sources[context.source].rhandle.Local.Addr != nil {
@@ -515,21 +515,21 @@ func main() {
515515
to.HardwareAddr, _ = net.ParseMAC(frame["client-hardware-address"].(string))
516516
}
517517
if _, err := sources[context.source].rhandle.WriteTo(nil, to, packet); err != nil {
518-
log.Warn(map[string]interface{}{"event": "error", "error": fmt.Sprintf("%v", err)})
518+
logger.Warn(map[string]interface{}{"event": "error", "error": fmt.Sprintf("%v", err)})
519519
break
520520
}
521521
} else {
522-
log.Warn(map[string]interface{}{"event": "error", "error": fmt.Sprintf("%v", err)})
522+
logger.Warn(map[string]interface{}{"event": "error", "error": fmt.Sprintf("%v", err)})
523523
break
524524
}
525525
} else {
526526
if address, err := net.ResolveUDPAddr("udp", client); err == nil {
527527
if _, err := sources[context.source].handle.WriteTo(packet, address); err != nil {
528-
log.Warn(map[string]interface{}{"event": "error", "error": fmt.Sprintf("%v", err)})
528+
logger.Warn(map[string]interface{}{"event": "error", "error": fmt.Sprintf("%v", err)})
529529
break
530530
}
531531
} else {
532-
log.Warn(map[string]interface{}{"event": "error", "error": fmt.Sprintf("%v", err)})
532+
logger.Warn(map[string]interface{}{"event": "error", "error": fmt.Sprintf("%v", err)})
533533
break
534534
}
535535
}
@@ -543,7 +543,7 @@ func main() {
543543
hostname += "." + value
544544
}
545545
}
546-
log.Info(map[string]interface{}{"event": "reply", "message": fmt.Sprintf("dhcp-%v", frame["dhcp-message-type"]),
546+
logger.Info(map[string]interface{}{"event": "reply", "message": fmt.Sprintf("dhcp-%v", frame["dhcp-message-type"]),
547547
"txid": fmt.Sprintf("%s/%s", frame["client-hardware-address"], frame["bootp-transaction-id"]),
548548
"source": context.source, "client": client, "bootp-assigned-address": address, "hostname": hostname,
549549
"duration": fmt.Sprintf("%.2fms", float64(time.Now().Sub(context.created))/float64(time.Millisecond))})

src/other.go other.go

File renamed without changes.

support/Makefile

+4-2
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@
22

33
# build targets
44
http-backend: http-backend.go
5-
@export GOPATH=/tmp/go; export CGO_ENABLED=0; go build -trimpath -o http-backend http-backend.go && strip http-backend
5+
@env GOPATH=/tmp/go go get -d && env GOPATH=/tmp/go CGO_ENABLED=0 go build -trimpath -o http-backend
6+
@-strip http-backend 2>/dev/null || true
7+
@-upx -9 http-backend 2>/dev/null || true
68
clean:
79
distclean:
8-
@rm -f http-backend
10+
@rm -f http-backend *.upx
911

1012
# run targets
1113
primary: http-backend

support/http-backend.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -320,13 +320,14 @@ func main() {
320320
for _, path := range config.GetPaths("backend.listen") {
321321
if parts := strings.Split(config.GetStringMatch(path, "_", "^.*?(:\\d+)?((,[^,]+){2})?$"), ","); parts[0] != "_" {
322322
if len(parts) > 1 {
323-
loader := &dynacert.DYNACERT{Public: parts[1], Key: parts[2]}
323+
certificates := &dynacert.DYNACERT{}
324+
certificates.Add("*", parts[1], parts[2])
324325
server := &http.Server{
325326
Addr: strings.TrimLeft(parts[0], "*"),
326327
ReadTimeout: uconfig.Duration(config.GetDurationBounds("backend.read_timeout", 10, 5, 30)),
327328
IdleTimeout: uconfig.Duration(config.GetDurationBounds("backend.idle_timeout", 30, 5, 30)),
328329
WriteTimeout: uconfig.Duration(config.GetDurationBounds("backend.write_timeout", 15, 5, 30)),
329-
TLSConfig: dynacert.IntermediateTLSConfig(loader.GetCertificate),
330+
TLSConfig: dynacert.IntermediateTLSConfig(certificates.GetCertificate),
330331
TLSNextProto: map[string]func(*http.Server, *tls.Conn, http.Handler){},
331332
}
332333
go func(server *http.Server, parts []string) {

0 commit comments

Comments
 (0)