composer: seed the random number generator

I thought rand in Go is auto-seeded but I was wrong, see [1].
This commit adds seed initialization.

[1]: https://golang.org/pkg/math/rand/#Seed

Signed-off-by: Ondřej Budai <ondrej@budai.cz>
This commit is contained in:
Ondřej Budai 2020-12-15 17:00:00 +01:00 committed by Ondřej Budai
parent 973639d372
commit 1dd4eb7e38
3 changed files with 27 additions and 6 deletions

View file

@ -3,9 +3,11 @@
package cloudapi
import (
"crypto/rand"
"encoding/json"
"fmt"
"math/rand"
"math"
"math/big"
"net/http"
"github.com/go-chi/chi"
@ -83,7 +85,11 @@ func (server *Server) Compose(w http.ResponseWriter, r *http.Request) {
var targets []*target.Target
// use the same seed for all images so we get the same IDs
manifestSeed := rand.Int63()
bigSeed, err := rand.Int(rand.Reader, big.NewInt(math.MaxInt64))
if err != nil {
panic("cannot generate a manifest seed: " + err.Error())
}
manifestSeed := bigSeed.Int64()
for i, ir := range request.ImageRequests {
arch, err := distribution.GetArch(ir.Architecture)

View file

@ -2,10 +2,12 @@
package kojiapi
import (
"crypto/rand"
"encoding/json"
"fmt"
"log"
"math/rand"
"math"
"math/big"
"net/http"
"strings"
"time"
@ -89,7 +91,11 @@ func (h *apiHandlers) PostCompose(ctx echo.Context) error {
kojiDirectory := "osbuild-composer-koji-" + uuid.New().String()
// use the same seed for all images so we get the same IDs
manifestSeed := rand.Int63()
bigSeed, err := rand.Int(rand.Reader, big.NewInt(math.MaxInt64))
if err != nil {
panic("cannot generate a manifest seed: " + err.Error())
}
manifestSeed := bigSeed.Int64()
for i, ir := range request.ImageRequests {
arch, err := d.GetArch(ir.Architecture)

View file

@ -3,12 +3,14 @@ package weldr
import (
"archive/tar"
"bytes"
"crypto/rand"
"encoding/json"
errors_package "errors"
"fmt"
"io"
"log"
"math/rand"
"math"
"math/big"
"net"
"net/http"
"net/url"
@ -1837,6 +1839,13 @@ func (api *API) composeHandler(writer http.ResponseWriter, request *http.Request
}
size := imageType.Size(cr.Size)
bigSeed, err := rand.Int(rand.Reader, big.NewInt(math.MaxInt64))
if err != nil {
panic("cannot generate a manifest seed: " + err.Error())
}
seed := bigSeed.Int64()
manifest, err := imageType.Manifest(bp.Customizations,
distro.ImageOptions{
Size: size,
@ -1848,7 +1857,7 @@ func (api *API) composeHandler(writer http.ResponseWriter, request *http.Request
api.allRepositories(),
packages,
buildPackages,
rand.Int63())
seed)
if err != nil {
errors := responseError{
ID: "ManifestCreationFailed",