itFix compilation with latest Redis library. - tordam - A library for peer discovery inside the Tor network Err parazyd.org 70 hgit clone https://git.parazyd.org/tordam URL:https://git.parazyd.org/tordam parazyd.org 70 1Log /git/tordam/log.gph parazyd.org 70 1Files /git/tordam/files.gph parazyd.org 70 1Refs /git/tordam/refs.gph parazyd.org 70 1README /git/tordam/file/README.md.gph parazyd.org 70 1LICENSE /git/tordam/file/LICENSE.gph parazyd.org 70 i--- Err parazyd.org 70 1commit 573769406a8be94de602fc1c7e38a8dc24991503 /git/tordam/commit/573769406a8be94de602fc1c7e38a8dc24991503.gph parazyd.org 70 1parent 31e003e1deb00e8611d652d77c12b763f8ba96a3 /git/tordam/commit/31e003e1deb00e8611d652d77c12b763f8ba96a3.gph parazyd.org 70 hAuthor: parazyd URL:mailto:parazyd@dyne.org parazyd.org 70 iDate: Mon, 5 Oct 2020 22:03:22 +0200 Err parazyd.org 70 i Err parazyd.org 70 iFix compilation with latest Redis library. Err parazyd.org 70 i Err parazyd.org 70 iDiffstat: Err parazyd.org 70 i M cmd/dam-client/main.go | 9 +++------ Err parazyd.org 70 i M cmd/dam-dir/main.go | 20 ++++++++++---------- Err parazyd.org 70 i M cmd/dam-gource/main.go | 4 ++-- Err parazyd.org 70 i M pkg/damlib/redis.go | 14 +++++++++----- Err parazyd.org 70 i M pkg/damlib/validate.go | 22 +++++++--------------- Err parazyd.org 70 i Err parazyd.org 70 i5 files changed, 31 insertions(+), 38 deletions(-) Err parazyd.org 70 i--- Err parazyd.org 70 1diff --git a/cmd/dam-client/main.go b/cmd/dam-client/main.go /git/tordam/file/cmd/dam-client/main.go.gph parazyd.org 70 it@@ -109,9 +109,9 @@ func fetchNodeList(epLists []string, remote bool) ([]string, error) { Err parazyd.org 70 i } Err parazyd.org 70 i Err parazyd.org 70 i // Local nodes known to Redis Err parazyd.org 70 i- nodes, _ := lib.RedisCli.Keys("*.onion").Result() Err parazyd.org 70 i+ nodes, _ := lib.RedisCli.Keys(lib.Rctx, "*.onion").Result() Err parazyd.org 70 i for _, i := range nodes { Err parazyd.org 70 i- valid, err := lib.RedisCli.HGet(i, "valid").Result() Err parazyd.org 70 i+ valid, err := lib.RedisCli.HGet(lib.Rctx, i, "valid").Result() Err parazyd.org 70 i if err != nil { Err parazyd.org 70 i // Possible RedisCli bug, possible Redis bug. To be investigated. Err parazyd.org 70 i // Sometimes it returns err, but it's nil and does not say what's Err parazyd.org 70 it@@ -215,11 +215,8 @@ func announce(node string, vals map[string]string, privkey ed25519.PrivateKey) ( Err parazyd.org 70 i } Err parazyd.org 70 i for k, v := range nodes { Err parazyd.org 70 i log.Printf("Adding %s to Redis.\n", k) Err parazyd.org 70 i- redRet, err := lib.RedisCli.HMSet(k, v).Result() Err parazyd.org 70 i+ _, err = lib.RedisCli.HMSet(lib.Rctx, k, v).Result() Err parazyd.org 70 i lib.CheckError(err) Err parazyd.org 70 i- if redRet != "OK" { Err parazyd.org 70 i- log.Println("Redis returned:", redRet) Err parazyd.org 70 i- } Err parazyd.org 70 i } Err parazyd.org 70 i return true, nil Err parazyd.org 70 i } Err parazyd.org 70 1diff --git a/cmd/dam-dir/main.go b/cmd/dam-dir/main.go /git/tordam/file/cmd/dam-dir/main.go.gph parazyd.org 70 it@@ -121,7 +121,7 @@ func handlePost(rw http.ResponseWriter, request *http.Request) { Err parazyd.org 70 i } Err parazyd.org 70 i log.Printf("%s: 1/2 handshake invalid: %s\n", n.Address, msg) Err parazyd.org 70 i // Delete it all from redis. Err parazyd.org 70 i- _, err := lib.RedisCli.Del(n.Address).Result() Err parazyd.org 70 i+ _, err := lib.RedisCli.Del(lib.Rctx, n.Address).Result() Err parazyd.org 70 i lib.CheckError(err) Err parazyd.org 70 i if err := postback(rw, ret, 400); err != nil { Err parazyd.org 70 i lib.CheckError(err) Err parazyd.org 70 it@@ -136,7 +136,7 @@ func handlePost(rw http.ResponseWriter, request *http.Request) { Err parazyd.org 70 i Err parazyd.org 70 i if valid { Err parazyd.org 70 i log.Printf("%s: 2/2 handshake valid.\n", n.Address) Err parazyd.org 70 i- hasConsensus, err := lib.RedisCli.HGet(n.Address, "valid").Result() Err parazyd.org 70 i+ hasConsensus, err := lib.RedisCli.HGet(lib.Rctx, n.Address, "valid").Result() Err parazyd.org 70 i lib.CheckError(err) Err parazyd.org 70 i Err parazyd.org 70 i us := request.Host // Assume our name is what was requested as the URL. Err parazyd.org 70 it@@ -146,13 +146,13 @@ func handlePost(rw http.ResponseWriter, request *http.Request) { Err parazyd.org 70 i // The node does have consensus, we'll teach it about the valid Err parazyd.org 70 i // nodes we know. Err parazyd.org 70 i log.Printf("%s has consensus. Propagating our nodes to it...\n", n.Address) Err parazyd.org 70 i- nodes, err := lib.RedisCli.Keys("*.onion").Result() Err parazyd.org 70 i+ nodes, err := lib.RedisCli.Keys(lib.Rctx, "*.onion").Result() Err parazyd.org 70 i lib.CheckError(err) Err parazyd.org 70 i for _, i := range nodes { Err parazyd.org 70 i if i == n.Address { Err parazyd.org 70 i continue Err parazyd.org 70 i } Err parazyd.org 70 i- nodedata, err := lib.RedisCli.HGetAll(i).Result() Err parazyd.org 70 i+ nodedata, err := lib.RedisCli.HGetAll(lib.Rctx, i).Result() Err parazyd.org 70 i lib.CheckError(err) Err parazyd.org 70 i if nodedata["valid"] == "1" { Err parazyd.org 70 i nodemap[i] = nodedata Err parazyd.org 70 it@@ -163,7 +163,7 @@ func handlePost(rw http.ResponseWriter, request *http.Request) { Err parazyd.org 70 i log.Printf("%s does not have consensus. Propagating ourself to it...\n", n.Address) Err parazyd.org 70 i // The node doesn't have consensus in the network. We will only Err parazyd.org 70 i // teach it about ourself. Err parazyd.org 70 i- nodedata, err := lib.RedisCli.HGetAll(us).Result() Err parazyd.org 70 i+ nodedata, err := lib.RedisCli.HGetAll(lib.Rctx, us).Result() Err parazyd.org 70 i lib.CheckError(err) Err parazyd.org 70 i nodemap[us] = nodedata Err parazyd.org 70 i delete(nodemap[us], "secret") Err parazyd.org 70 it@@ -187,7 +187,7 @@ func handlePost(rw http.ResponseWriter, request *http.Request) { Err parazyd.org 70 i log.Printf("%s: 2/2 handshake invalid.\n", n.Address) Err parazyd.org 70 i // Delete it all from redis. Err parazyd.org 70 i lib.PublishToRedis("d", n.Address) Err parazyd.org 70 i- _, err := lib.RedisCli.Del(n.Address).Result() Err parazyd.org 70 i+ _, err := lib.RedisCli.Del(lib.Rctx, n.Address).Result() Err parazyd.org 70 i lib.CheckError(err) Err parazyd.org 70 i if err := postback(rw, ret, 400); err != nil { Err parazyd.org 70 i lib.CheckError(err) Err parazyd.org 70 it@@ -199,12 +199,12 @@ func handlePost(rw http.ResponseWriter, request *http.Request) { Err parazyd.org 70 i func pollNodeTTL(interval int64) { Err parazyd.org 70 i for { Err parazyd.org 70 i log.Println("Polling redis for expired nodes") Err parazyd.org 70 i- nodes, err := lib.RedisCli.Keys("*.onion").Result() Err parazyd.org 70 i+ nodes, err := lib.RedisCli.Keys(lib.Rctx, "*.onion").Result() Err parazyd.org 70 i lib.CheckError(err) Err parazyd.org 70 i now := time.Now().Unix() Err parazyd.org 70 i Err parazyd.org 70 i for _, i := range nodes { Err parazyd.org 70 i- res, err := lib.RedisCli.HGet(i, "lastseen").Result() Err parazyd.org 70 i+ res, err := lib.RedisCli.HGet(lib.Rctx, i, "lastseen").Result() Err parazyd.org 70 i lib.CheckError(err) Err parazyd.org 70 i lastseen, err := strconv.Atoi(res) Err parazyd.org 70 i lib.CheckError(err) Err parazyd.org 70 it@@ -213,7 +213,7 @@ func pollNodeTTL(interval int64) { Err parazyd.org 70 i if diff > interval { Err parazyd.org 70 i log.Printf("Deleting %s from redis because of expiration\n", i) Err parazyd.org 70 i lib.PublishToRedis("d", i) Err parazyd.org 70 i- lib.RedisCli.Del(i) Err parazyd.org 70 i+ lib.RedisCli.Del(lib.Rctx, i) Err parazyd.org 70 i } Err parazyd.org 70 i } Err parazyd.org 70 i time.Sleep(time.Duration(interval) * time.Minute) Err parazyd.org 70 it@@ -240,7 +240,7 @@ func main() { Err parazyd.org 70 i err := os.Chdir(lib.Workdir) Err parazyd.org 70 i lib.CheckError(err) Err parazyd.org 70 i Err parazyd.org 70 i- if _, err := lib.RedisCli.Ping().Result(); err != nil { Err parazyd.org 70 i+ if _, err := lib.RedisCli.Ping(lib.Rctx).Result(); err != nil { Err parazyd.org 70 i // We assume redis is not running. Start it up. Err parazyd.org 70 i cmd, err := lib.StartRedis(*redconf) Err parazyd.org 70 i defer cmd.Process.Kill() Err parazyd.org 70 1diff --git a/cmd/dam-gource/main.go b/cmd/dam-gource/main.go /git/tordam/file/cmd/dam-gource/main.go.gph parazyd.org 70 it@@ -28,8 +28,8 @@ import ( Err parazyd.org 70 i ) Err parazyd.org 70 i Err parazyd.org 70 i func main() { Err parazyd.org 70 i- pubsub := lib.RedisCli.Subscribe(lib.PubSubChan) Err parazyd.org 70 i- _, err := pubsub.Receive() Err parazyd.org 70 i+ pubsub := lib.RedisCli.Subscribe(lib.Rctx, lib.PubSubChan) Err parazyd.org 70 i+ _, err := pubsub.Receive(lib.Rctx) Err parazyd.org 70 i lib.CheckError(err) Err parazyd.org 70 i fmt.Fprintf(os.Stderr, "Subscribed to %s channel in Redis\n", lib.PubSubChan) Err parazyd.org 70 i Err parazyd.org 70 1diff --git a/pkg/damlib/redis.go b/pkg/damlib/redis.go /git/tordam/file/pkg/damlib/redis.go.gph parazyd.org 70 it@@ -21,6 +21,7 @@ package damlib Err parazyd.org 70 i */ Err parazyd.org 70 i Err parazyd.org 70 i import ( Err parazyd.org 70 i+ "context" Err parazyd.org 70 i "fmt" Err parazyd.org 70 i "log" Err parazyd.org 70 i "os/exec" Err parazyd.org 70 it@@ -32,6 +33,9 @@ import ( Err parazyd.org 70 i // RedisAddress points us to our Redis instance. Err parazyd.org 70 i const RedisAddress = "127.0.0.1:6379" Err parazyd.org 70 i Err parazyd.org 70 i+// Rctx is the context for Redis Err parazyd.org 70 i+var Rctx = context.Background() Err parazyd.org 70 i+ Err parazyd.org 70 i // RedisCli is our global Redis client Err parazyd.org 70 i var RedisCli = redis.NewClient(&redis.Options{ Err parazyd.org 70 i Addr: RedisAddress, Err parazyd.org 70 it@@ -50,12 +54,12 @@ func StartRedis(conf string) (*exec.Cmd, error) { Err parazyd.org 70 i } Err parazyd.org 70 i Err parazyd.org 70 i time.Sleep(500 * time.Millisecond) Err parazyd.org 70 i- if _, err := RedisCli.Ping().Result(); err != nil { Err parazyd.org 70 i+ if _, err := RedisCli.Ping(Rctx).Result(); err != nil { Err parazyd.org 70 i return cmd, err Err parazyd.org 70 i } Err parazyd.org 70 i Err parazyd.org 70 i- PubSub := RedisCli.Subscribe(PubSubChan) Err parazyd.org 70 i- if _, err := PubSub.Receive(); err != nil { Err parazyd.org 70 i+ PubSub := RedisCli.Subscribe(Rctx, PubSubChan) Err parazyd.org 70 i+ if _, err := PubSub.Receive(Rctx); err != nil { Err parazyd.org 70 i return cmd, err Err parazyd.org 70 i } Err parazyd.org 70 i Err parazyd.org 70 it@@ -68,7 +72,7 @@ func StartRedis(conf string) (*exec.Cmd, error) { Err parazyd.org 70 i func PublishToRedis(mt, address string) { Err parazyd.org 70 i var timestamp, username, modtype, onion, pubstr string Err parazyd.org 70 i Err parazyd.org 70 i- nodedata, err := RedisCli.HGetAll(address).Result() Err parazyd.org 70 i+ nodedata, err := RedisCli.HGetAll(Rctx, address).Result() Err parazyd.org 70 i CheckError(err) Err parazyd.org 70 i Err parazyd.org 70 i timestamp = nodedata["lastseen"] Err parazyd.org 70 it@@ -84,5 +88,5 @@ func PublishToRedis(mt, address string) { Err parazyd.org 70 i Err parazyd.org 70 i pubstr = fmt.Sprintf("%s|%s|%s|%s", timestamp, username, modtype, onion) Err parazyd.org 70 i Err parazyd.org 70 i- RedisCli.Publish(PubSubChan, pubstr) Err parazyd.org 70 i+ RedisCli.Publish(Rctx, PubSubChan, pubstr) Err parazyd.org 70 i } Err parazyd.org 70 1diff --git a/pkg/damlib/validate.go b/pkg/damlib/validate.go /git/tordam/file/pkg/damlib/validate.go.gph parazyd.org 70 it@@ -79,12 +79,12 @@ func ValidateFirstHandshake(req map[string]string) (bool, string) { Err parazyd.org 70 i var pubstr string Err parazyd.org 70 i var pubkey ed25519.PublicKey Err parazyd.org 70 i // Check if we have seen this node already. Err parazyd.org 70 i- ex, err := RedisCli.Exists(req["address"]).Result() Err parazyd.org 70 i+ ex, err := RedisCli.Exists(Rctx, req["address"]).Result() Err parazyd.org 70 i CheckError(err) Err parazyd.org 70 i if ex == 1 { Err parazyd.org 70 i // We saw it so we should have the public key in redis. Err parazyd.org 70 i // If we do not, that is an internal error. Err parazyd.org 70 i- pubstr, err = RedisCli.HGet(req["address"], "pubkey").Result() Err parazyd.org 70 i+ pubstr, err = RedisCli.HGet(Rctx, req["address"], "pubkey").Result() Err parazyd.org 70 i CheckError(err) Err parazyd.org 70 i } else { Err parazyd.org 70 i // We take it from the announce. Err parazyd.org 70 it@@ -128,13 +128,9 @@ func ValidateFirstHandshake(req map[string]string) (bool, string) { Err parazyd.org 70 i } Err parazyd.org 70 i Err parazyd.org 70 i log.Printf("%s: writing to redis\n", req["address"]) Err parazyd.org 70 i- redRet, err := RedisCli.HMSet(req["address"], info).Result() Err parazyd.org 70 i+ _, err = RedisCli.HMSet(Rctx, req["address"], info).Result() Err parazyd.org 70 i CheckError(err) Err parazyd.org 70 i Err parazyd.org 70 i- if redRet != "OK" { Err parazyd.org 70 i- return false, "Internal server error" Err parazyd.org 70 i- } Err parazyd.org 70 i- Err parazyd.org 70 i return true, encodedSecret Err parazyd.org 70 i } Err parazyd.org 70 i Err parazyd.org 70 it@@ -160,19 +156,19 @@ func ValidateSecondHandshake(req map[string]string) (bool, string) { Err parazyd.org 70 i var pubstr string Err parazyd.org 70 i var pubkey ed25519.PublicKey Err parazyd.org 70 i // Check if we have seen this node already. Err parazyd.org 70 i- ex, err := RedisCli.Exists(req["address"]).Result() Err parazyd.org 70 i+ ex, err := RedisCli.Exists(Rctx, req["address"]).Result() Err parazyd.org 70 i CheckError(err) Err parazyd.org 70 i if ex == 1 { Err parazyd.org 70 i // We saw it so we should have the public key in redis. Err parazyd.org 70 i // If we do not, that is an internal error. Err parazyd.org 70 i- pubstr, err = RedisCli.HGet(req["address"], "pubkey").Result() Err parazyd.org 70 i+ pubstr, err = RedisCli.HGet(Rctx, req["address"], "pubkey").Result() Err parazyd.org 70 i CheckError(err) Err parazyd.org 70 i } else { Err parazyd.org 70 i log.Printf("%s tried to jump in 2/2 handshake before doing the first.\n", req["address"]) Err parazyd.org 70 i return false, "We have not seen you before. Please authenticate properly." Err parazyd.org 70 i } Err parazyd.org 70 i Err parazyd.org 70 i- localSec, err := RedisCli.HGet(req["address"], "secret").Result() Err parazyd.org 70 i+ localSec, err := RedisCli.HGet(Rctx, req["address"], "secret").Result() Err parazyd.org 70 i CheckError(err) Err parazyd.org 70 i Err parazyd.org 70 i if !(localSec == req["secret"] && localSec == req["message"]) { Err parazyd.org 70 it@@ -208,12 +204,8 @@ func ValidateSecondHandshake(req map[string]string) (bool, string) { Err parazyd.org 70 i } // Can not cast, need this for HMSet Err parazyd.org 70 i Err parazyd.org 70 i log.Printf("%s: writing to redis\n", req["address"]) Err parazyd.org 70 i- redRet, err := RedisCli.HMSet(req["address"], info).Result() Err parazyd.org 70 i+ _, err = RedisCli.HMSet(Rctx, req["address"], info).Result() Err parazyd.org 70 i CheckError(err) Err parazyd.org 70 i Err parazyd.org 70 i- if redRet != "OK" { Err parazyd.org 70 i- return false, "Internal server error" Err parazyd.org 70 i- } Err parazyd.org 70 i- Err parazyd.org 70 i return true, WelcomeMsg Err parazyd.org 70 i } Err parazyd.org 70 .