added the version subcommand
added subjectAltNames to the embedded cert file
This commit is contained in:
parent
dcf3d852d2
commit
21997e6f74
17
Makefile
17
Makefile
@ -1,3 +1,6 @@
|
|||||||
|
NAME=hodu
|
||||||
|
VERSION=1.0.0
|
||||||
|
|
||||||
SRCS=\
|
SRCS=\
|
||||||
client.go \
|
client.go \
|
||||||
client-ctl.go \
|
client-ctl.go \
|
||||||
@ -20,14 +23,14 @@ CMD_SRCS=\
|
|||||||
cmd/config.go \
|
cmd/config.go \
|
||||||
cmd/main.go \
|
cmd/main.go \
|
||||||
|
|
||||||
all: hodu
|
all: $(NAME)
|
||||||
|
|
||||||
hodu: $(SRCS) $(CMD_DATA) $(CMD_SRCS)
|
$(NAME): $(SRCS) $(CMD_DATA) $(CMD_SRCS)
|
||||||
CGO_ENABLED=0 go build -x -o $@ $(CMD_SRCS)
|
CGO_ENABLED=0 go build -x -ldflags "-X 'main.HODU_NAME=$(NAME)' -X 'main.HODU_VERSION=$(VERSION)'" -o $@ $(CMD_SRCS)
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
go clean -x -i
|
go clean -x -i
|
||||||
rm -f hodu
|
rm -f $(NAME)
|
||||||
|
|
||||||
hodu.pb.go: hodu.proto
|
hodu.pb.go: hodu.proto
|
||||||
protoc --go_out=. --go_opt=paths=source_relative \
|
protoc --go_out=. --go_opt=paths=source_relative \
|
||||||
@ -40,9 +43,9 @@ hodu_grpc.pb.go: hodu.proto
|
|||||||
hodu.proto
|
hodu.proto
|
||||||
|
|
||||||
cmd/tls.crt:
|
cmd/tls.crt:
|
||||||
openssl req -x509 -newkey rsa:4096 -keyout cmd/tls.key -out cmd/tls.crt -sha256 -days 36500 -nodes -subj "/CN=hodu"
|
openssl req -x509 -newkey rsa:4096 -keyout cmd/tls.key -out cmd/tls.crt -sha256 -days 36500 -nodes -subj "/CN=$(NAME)" --addext "subjectAltName=DNS:$(NAME),IP:10.0.0.1,IP:::1"
|
||||||
|
|
||||||
cmd/tls.key:
|
cmd/tls.key:
|
||||||
openssl req -x509 -newkey rsa:4096 -keyout cmd/tls.key -out cmd/tls.crt -sha256 -days 36500 -nodes -subj "/CN=hodu"
|
openssl req -x509 -newkey rsa:4096 -keyout cmd/tls.key -out cmd/tls.crt -sha256 -days 36500 -nodes -subj "/CN=$(NAME)" --addext "subjectAltName=DNS:$(NAME),IP:10.0.0.1,IP:::1"
|
||||||
|
|
||||||
.PHONY: clean
|
.PHONY: clean certfiles
|
||||||
|
@ -731,7 +731,7 @@ start_over:
|
|||||||
|
|
||||||
// seed exchange is for furture expansion of the protocol
|
// seed exchange is for furture expansion of the protocol
|
||||||
// there is nothing to do much about it for now.
|
// there is nothing to do much about it for now.
|
||||||
c_seed.Version = HODU_VERSION
|
c_seed.Version = HODU_RPC_VERSION
|
||||||
c_seed.Flags = 0
|
c_seed.Flags = 0
|
||||||
s_seed, err = cts.hdc.GetSeed(cts.cli.ctx, &c_seed)
|
s_seed, err = cts.hdc.GetSeed(cts.cli.ctx, &c_seed)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
144
cmd/config.go
144
cmd/config.go
@ -1,7 +1,11 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
|
import "crypto/tls"
|
||||||
|
import "crypto/x509"
|
||||||
import "errors"
|
import "errors"
|
||||||
|
import "fmt"
|
||||||
import "io"
|
import "io"
|
||||||
|
import "io/ioutil"
|
||||||
import "os"
|
import "os"
|
||||||
|
|
||||||
import "gopkg.in/yaml.v3"
|
import "gopkg.in/yaml.v3"
|
||||||
@ -56,7 +60,7 @@ type ClientConfig struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
func LoadServerConfig(cfgfile string) (*ServerConfig, error) {
|
func load_server_config(cfgfile string) (*ServerConfig, error) {
|
||||||
var cfg ServerConfig
|
var cfg ServerConfig
|
||||||
var f *os.File
|
var f *os.File
|
||||||
var yd *yaml.Decoder
|
var yd *yaml.Decoder
|
||||||
@ -77,7 +81,7 @@ func LoadServerConfig(cfgfile string) (*ServerConfig, error) {
|
|||||||
return &cfg, nil
|
return &cfg, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func LoadClientConfig(cfgfile string) (*ClientConfig, error) {
|
func load_client_config(cfgfile string) (*ClientConfig, error) {
|
||||||
var cfg ClientConfig
|
var cfg ClientConfig
|
||||||
var f *os.File
|
var f *os.File
|
||||||
var yd *yaml.Decoder
|
var yd *yaml.Decoder
|
||||||
@ -97,3 +101,139 @@ func LoadClientConfig(cfgfile string) (*ClientConfig, error) {
|
|||||||
|
|
||||||
return &cfg, nil
|
return &cfg, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
func tls_string_to_client_auth_type(str string) tls.ClientAuthType {
|
||||||
|
switch str {
|
||||||
|
case tls.NoClientCert.String():
|
||||||
|
return tls.NoClientCert
|
||||||
|
case tls.RequestClientCert.String():
|
||||||
|
return tls.RequestClientCert
|
||||||
|
case tls.RequireAnyClientCert.String():
|
||||||
|
return tls.RequireAnyClientCert
|
||||||
|
case tls.VerifyClientCertIfGiven.String():
|
||||||
|
return tls.VerifyClientCertIfGiven
|
||||||
|
case tls.RequireAndVerifyClientCert.String():
|
||||||
|
return tls.RequireAndVerifyClientCert
|
||||||
|
default:
|
||||||
|
return tls.NoClientCert
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// --------------------------------------------------------------------
|
||||||
|
|
||||||
|
func make_tls_server_config(cfg *ServerTLSConfig) (*tls.Config, error) {
|
||||||
|
var tlscfg *tls.Config
|
||||||
|
|
||||||
|
if cfg.Enabled {
|
||||||
|
var cert tls.Certificate
|
||||||
|
var cert_pool *x509.CertPool
|
||||||
|
var err error
|
||||||
|
|
||||||
|
if cfg.CertText != "" && cfg.KeyText != "" {
|
||||||
|
cert, err = tls.X509KeyPair([]byte(cfg.CertText), []byte(cfg.KeyText))
|
||||||
|
} else if cfg.CertFile != "" && cfg.KeyFile != "" {
|
||||||
|
cert, err = tls.LoadX509KeyPair(cfg.CertFile, cfg.KeyFile)
|
||||||
|
} else {
|
||||||
|
// use the embedded certificate
|
||||||
|
cert, err = tls.X509KeyPair(hodu_tls_cert_text, hodul_tls_key_text)
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("failed to load key pair - %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if cfg.ClientCACertText != "" || cfg.ClientCACertFile != ""{
|
||||||
|
var ok bool
|
||||||
|
|
||||||
|
cert_pool = x509.NewCertPool()
|
||||||
|
|
||||||
|
if cfg.ClientCACertText != "" {
|
||||||
|
ok = cert_pool.AppendCertsFromPEM([]byte(cfg.ClientCACertText))
|
||||||
|
if !ok {
|
||||||
|
return nil, fmt.Errorf("failed to append certificate to pool")
|
||||||
|
}
|
||||||
|
} else if cfg.ClientCACertFile != "" {
|
||||||
|
var text []byte
|
||||||
|
text, err = ioutil.ReadFile(cfg.ClientCACertFile)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("failed to load ca certficate file %s - %s", cfg.ClientCACertFile, err.Error())
|
||||||
|
}
|
||||||
|
ok = cert_pool.AppendCertsFromPEM(text)
|
||||||
|
if !ok {
|
||||||
|
return nil, fmt.Errorf("failed to append certificate to pool")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tlscfg = &tls.Config{
|
||||||
|
Certificates: []tls.Certificate{cert},
|
||||||
|
// If multiple certificates are configured, we may have to implement GetCertificate
|
||||||
|
// GetCertificate: func (chi *tls.ClientHelloInfo) (*Certificate, error) { return cert, nil }
|
||||||
|
ClientAuth: tls_string_to_client_auth_type(cfg.ClientAuthType),
|
||||||
|
ClientCAs: cert_pool, // trusted CA certs for client certificate verification
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return tlscfg, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// --------------------------------------------------------------------
|
||||||
|
|
||||||
|
func make_tls_client_config(cfg *ClientTLSConfig) (*tls.Config, error) {
|
||||||
|
var tlscfg *tls.Config
|
||||||
|
|
||||||
|
if cfg.Enabled {
|
||||||
|
var cert tls.Certificate
|
||||||
|
var cert_pool *x509.CertPool
|
||||||
|
var ok bool
|
||||||
|
var err error
|
||||||
|
|
||||||
|
if cfg.CertText != "" && cfg.KeyText != "" {
|
||||||
|
cert, err = tls.X509KeyPair([]byte(cfg.CertText), []byte(cfg.KeyText))
|
||||||
|
} else if cfg.CertFile != "" && cfg.KeyFile != "" {
|
||||||
|
cert, err = tls.LoadX509KeyPair(cfg.CertFile, cfg.KeyFile)
|
||||||
|
} else {
|
||||||
|
// use the embedded certificate
|
||||||
|
cert, err = tls.X509KeyPair(hodu_tls_cert_text, hodul_tls_key_text)
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("failed to load key pair - %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
cert_pool = x509.NewCertPool()
|
||||||
|
|
||||||
|
if cfg.ServerCACertText != "" {
|
||||||
|
ok = cert_pool.AppendCertsFromPEM([]byte(cfg.ServerCACertText))
|
||||||
|
if !ok {
|
||||||
|
return nil, fmt.Errorf("failed to append certificate to pool")
|
||||||
|
}
|
||||||
|
} else if cfg.ServerCACertFile != "" {
|
||||||
|
var text []byte
|
||||||
|
text, err = ioutil.ReadFile(cfg.ServerCACertFile)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("failed to load ca certficate file %s - %s", cfg.ServerCACertFile, err.Error())
|
||||||
|
}
|
||||||
|
ok = cert_pool.AppendCertsFromPEM(text)
|
||||||
|
if !ok {
|
||||||
|
return nil, fmt.Errorf("failed to append certificate to pool")
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// trust the embedded certificate if not explicitly specified
|
||||||
|
ok = cert_pool.AppendCertsFromPEM(hodu_tls_cert_text)
|
||||||
|
if !ok {
|
||||||
|
return nil, fmt.Errorf("failed to append certificate to pool")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if cfg.ServerName == "" { cfg.ServerName = HODU_NAME }
|
||||||
|
tlscfg = &tls.Config{
|
||||||
|
//Certificates: []tls.Certificate{cert},
|
||||||
|
GetClientCertificate: func(cri *tls.CertificateRequestInfo) (*tls.Certificate, error) { return &cert, nil },
|
||||||
|
RootCAs: cert_pool,
|
||||||
|
InsecureSkipVerify: cfg.InsecureSkipVerify,
|
||||||
|
ServerName: cfg.ServerName,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return tlscfg, nil
|
||||||
|
}
|
||||||
|
146
cmd/main.go
146
cmd/main.go
@ -2,13 +2,11 @@ package main
|
|||||||
|
|
||||||
import "context"
|
import "context"
|
||||||
import "crypto/tls"
|
import "crypto/tls"
|
||||||
import "crypto/x509"
|
|
||||||
import _ "embed"
|
import _ "embed"
|
||||||
import "flag"
|
import "flag"
|
||||||
import "fmt"
|
import "fmt"
|
||||||
import "hodu"
|
import "hodu"
|
||||||
import "io"
|
import "io"
|
||||||
import "io/ioutil"
|
|
||||||
import "os"
|
import "os"
|
||||||
import "os/signal"
|
import "os/signal"
|
||||||
import "path/filepath"
|
import "path/filepath"
|
||||||
@ -18,6 +16,11 @@ import "sync"
|
|||||||
import "syscall"
|
import "syscall"
|
||||||
import "time"
|
import "time"
|
||||||
|
|
||||||
|
|
||||||
|
// Don't change these items to 'const' as they can be overridden with a linker option
|
||||||
|
var HODU_NAME string = "hodu"
|
||||||
|
var HODU_VERSION string = "0.0.0"
|
||||||
|
|
||||||
//go:embed tls.crt
|
//go:embed tls.crt
|
||||||
var hodu_tls_cert_text []byte
|
var hodu_tls_cert_text []byte
|
||||||
//go:embed tls.key
|
//go:embed tls.key
|
||||||
@ -136,138 +139,6 @@ func (sh *signal_handler) WriteLog(id string, level hodu.LogLevel, fmt string, a
|
|||||||
sh.svc.WriteLog(id, level, fmt, args...)
|
sh.svc.WriteLog(id, level, fmt, args...)
|
||||||
}
|
}
|
||||||
|
|
||||||
func tls_string_to_client_auth_type(str string) tls.ClientAuthType {
|
|
||||||
switch str {
|
|
||||||
case tls.NoClientCert.String():
|
|
||||||
return tls.NoClientCert
|
|
||||||
case tls.RequestClientCert.String():
|
|
||||||
return tls.RequestClientCert
|
|
||||||
case tls.RequireAnyClientCert.String():
|
|
||||||
return tls.RequireAnyClientCert
|
|
||||||
case tls.VerifyClientCertIfGiven.String():
|
|
||||||
return tls.VerifyClientCertIfGiven
|
|
||||||
case tls.RequireAndVerifyClientCert.String():
|
|
||||||
return tls.RequireAndVerifyClientCert
|
|
||||||
default:
|
|
||||||
return tls.NoClientCert
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// --------------------------------------------------------------------
|
|
||||||
|
|
||||||
func make_tls_server_config(cfg *ServerTLSConfig) (*tls.Config, error) {
|
|
||||||
var tlscfg *tls.Config
|
|
||||||
|
|
||||||
if cfg.Enabled {
|
|
||||||
var cert tls.Certificate
|
|
||||||
var cert_pool *x509.CertPool
|
|
||||||
var err error
|
|
||||||
|
|
||||||
if cfg.CertText != "" && cfg.KeyText != "" {
|
|
||||||
cert, err = tls.X509KeyPair([]byte(cfg.CertText), []byte(cfg.KeyText))
|
|
||||||
} else if cfg.CertFile != "" && cfg.KeyFile != "" {
|
|
||||||
cert, err = tls.LoadX509KeyPair(cfg.CertFile, cfg.KeyFile)
|
|
||||||
} else {
|
|
||||||
// use the embedded certificate
|
|
||||||
cert, err = tls.X509KeyPair(hodu_tls_cert_text, hodul_tls_key_text)
|
|
||||||
}
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("failed to load key pair - %s", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if cfg.ClientCACertText != "" || cfg.ClientCACertFile != ""{
|
|
||||||
var ok bool
|
|
||||||
|
|
||||||
cert_pool = x509.NewCertPool()
|
|
||||||
|
|
||||||
if cfg.ClientCACertText != "" {
|
|
||||||
ok = cert_pool.AppendCertsFromPEM([]byte(cfg.ClientCACertText))
|
|
||||||
if !ok {
|
|
||||||
return nil, fmt.Errorf("failed to append certificate to pool")
|
|
||||||
}
|
|
||||||
} else if cfg.ClientCACertFile != "" {
|
|
||||||
var text []byte
|
|
||||||
text, err = ioutil.ReadFile(cfg.ClientCACertFile)
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("failed to load ca certficate file %s - %s", cfg.ClientCACertFile, err.Error())
|
|
||||||
}
|
|
||||||
ok = cert_pool.AppendCertsFromPEM(text)
|
|
||||||
if !ok {
|
|
||||||
return nil, fmt.Errorf("failed to append certificate to pool")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
tlscfg = &tls.Config{
|
|
||||||
Certificates: []tls.Certificate{cert},
|
|
||||||
// If multiple certificates are configured, we may have to implement GetCertificate
|
|
||||||
// GetCertificate: func (chi *tls.ClientHelloInfo) (*Certificate, error) { return cert, nil }
|
|
||||||
ClientAuth: tls_string_to_client_auth_type(cfg.ClientAuthType),
|
|
||||||
ClientCAs: cert_pool, // trusted CA certs for client certificate verification
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return tlscfg, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// --------------------------------------------------------------------
|
|
||||||
|
|
||||||
func make_tls_client_config(cfg *ClientTLSConfig) (*tls.Config, error) {
|
|
||||||
var tlscfg *tls.Config
|
|
||||||
|
|
||||||
if cfg.Enabled {
|
|
||||||
var cert tls.Certificate
|
|
||||||
var cert_pool *x509.CertPool
|
|
||||||
var err error
|
|
||||||
|
|
||||||
|
|
||||||
if cfg.CertText != "" && cfg.KeyText != "" {
|
|
||||||
cert, err = tls.X509KeyPair([]byte(cfg.CertText), []byte(cfg.KeyText))
|
|
||||||
} else if cfg.CertFile != "" && cfg.KeyFile != "" {
|
|
||||||
cert, err = tls.LoadX509KeyPair(cfg.CertFile, cfg.KeyFile)
|
|
||||||
} else {
|
|
||||||
// use the embedded certificate
|
|
||||||
cert, err = tls.X509KeyPair(hodu_tls_cert_text, hodul_tls_key_text)
|
|
||||||
}
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("failed to load key pair - %s", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if cfg.ServerCACertText != "" || cfg.ServerCACertFile != ""{
|
|
||||||
var ok bool
|
|
||||||
|
|
||||||
cert_pool = x509.NewCertPool()
|
|
||||||
|
|
||||||
if cfg.ServerCACertText != "" {
|
|
||||||
ok = cert_pool.AppendCertsFromPEM([]byte(cfg.ServerCACertText))
|
|
||||||
if !ok {
|
|
||||||
return nil, fmt.Errorf("failed to append certificate to pool")
|
|
||||||
}
|
|
||||||
} else if cfg.ServerCACertFile != "" {
|
|
||||||
var text []byte
|
|
||||||
text, err = ioutil.ReadFile(cfg.ServerCACertFile)
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("failed to load ca certficate file %s - %s", cfg.ServerCACertFile, err.Error())
|
|
||||||
}
|
|
||||||
ok = cert_pool.AppendCertsFromPEM(text)
|
|
||||||
if !ok {
|
|
||||||
return nil, fmt.Errorf("failed to append certificate to pool")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
tlscfg = &tls.Config{
|
|
||||||
//Certificates: []tls.Certificate{cert},
|
|
||||||
GetClientCertificate: func(cri *tls.CertificateRequestInfo) (*tls.Certificate, error) { return &cert, nil },
|
|
||||||
RootCAs: cert_pool,
|
|
||||||
InsecureSkipVerify: cfg.InsecureSkipVerify,
|
|
||||||
ServerName: cfg.ServerName,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return tlscfg, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// --------------------------------------------------------------------
|
// --------------------------------------------------------------------
|
||||||
|
|
||||||
func server_main(ctl_addrs []string, svcaddrs []string, cfg *ServerConfig) error {
|
func server_main(ctl_addrs []string, svcaddrs []string, cfg *ServerConfig) error {
|
||||||
@ -385,7 +256,7 @@ func main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (cfgfile != "") {
|
if (cfgfile != "") {
|
||||||
cfg, err = LoadServerConfig(cfgfile)
|
cfg, err = load_server_config(cfgfile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf ("ERROR: failed to load configuration file %s - %s\n", cfgfile, err.Error())
|
fmt.Printf ("ERROR: failed to load configuration file %s - %s\n", cfgfile, err.Error())
|
||||||
goto oops
|
goto oops
|
||||||
@ -431,7 +302,7 @@ func main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (cfgfile != "") {
|
if (cfgfile != "") {
|
||||||
cfg, err = LoadClientConfig(cfgfile)
|
cfg, err = load_client_config(cfgfile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf ("ERROR: failed to load configuration file %s - %s\n", cfgfile, err.Error())
|
fmt.Printf ("ERROR: failed to load configuration file %s - %s\n", cfgfile, err.Error())
|
||||||
goto oops
|
goto oops
|
||||||
@ -443,6 +314,8 @@ func main() {
|
|||||||
fmt.Fprintf(os.Stderr, "ERROR: client error - %s\n", err.Error())
|
fmt.Fprintf(os.Stderr, "ERROR: client error - %s\n", err.Error())
|
||||||
goto oops
|
goto oops
|
||||||
}
|
}
|
||||||
|
} else if strings.EqualFold(os.Args[1], "version") {
|
||||||
|
fmt.Printf("%s %s\n", HODU_NAME, HODU_VERSION)
|
||||||
} else {
|
} else {
|
||||||
goto wrong_usage
|
goto wrong_usage
|
||||||
}
|
}
|
||||||
@ -452,6 +325,7 @@ func main() {
|
|||||||
wrong_usage:
|
wrong_usage:
|
||||||
fmt.Fprintf(os.Stderr, "USAGE: %s server --rpc-on=addr:port --ctl-on=addr:port\n", os.Args[0])
|
fmt.Fprintf(os.Stderr, "USAGE: %s server --rpc-on=addr:port --ctl-on=addr:port\n", os.Args[0])
|
||||||
fmt.Fprintf(os.Stderr, " %s client --rpc-server=addr:port --ctl-on=addr:port [peer-addr:peer-port ...]\n", os.Args[0])
|
fmt.Fprintf(os.Stderr, " %s client --rpc-server=addr:port --ctl-on=addr:port [peer-addr:peer-port ...]\n", os.Args[0])
|
||||||
|
fmt.Fprintf(os.Stderr, " %s version\n", os.Args[0])
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
|
|
||||||
oops:
|
oops:
|
||||||
|
55
cmd/tls.crt
55
cmd/tls.crt
@ -1,29 +1,30 @@
|
|||||||
-----BEGIN CERTIFICATE-----
|
-----BEGIN CERTIFICATE-----
|
||||||
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
|
||||||
-----END CERTIFICATE-----
|
-----END CERTIFICATE-----
|
||||||
|
100
cmd/tls.key
100
cmd/tls.key
@ -1,52 +1,52 @@
|
|||||||
-----BEGIN PRIVATE KEY-----
|
-----BEGIN PRIVATE KEY-----
|
||||||
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
|
||||||
cE9VuuHZqcE0fWokNG7bO3t6lqPg
|
x0bCQqNhRuHGFx7YtBAUIK+FZTd7
|
||||||
-----END PRIVATE KEY-----
|
-----END PRIVATE KEY-----
|
||||||
|
2
hodu.go
2
hodu.go
@ -2,7 +2,7 @@ package hodu
|
|||||||
|
|
||||||
import "sync"
|
import "sync"
|
||||||
|
|
||||||
const HODU_VERSION uint32 = 0x010000
|
const HODU_RPC_VERSION uint32 = 0x010000
|
||||||
|
|
||||||
type LogLevel int
|
type LogLevel int
|
||||||
|
|
||||||
|
@ -651,7 +651,7 @@ func (s *Server) GetSeed(ctx context.Context, c_seed *Seed) (*Seed, error) {
|
|||||||
// seed exchange is for furture expansion of the protocol
|
// seed exchange is for furture expansion of the protocol
|
||||||
// there is nothing to do much about it for now.
|
// there is nothing to do much about it for now.
|
||||||
|
|
||||||
s_seed.Version = HODU_VERSION
|
s_seed.Version = HODU_RPC_VERSION
|
||||||
s_seed.Flags = 0
|
s_seed.Flags = 0
|
||||||
|
|
||||||
// we create no ServerConn structure associated with the connection
|
// we create no ServerConn structure associated with the connection
|
||||||
|
Loading…
x
Reference in New Issue
Block a user