diff --git a/glauth/.gitignore b/glauth/.gitignore new file mode 100644 index 000000000..adbb97d2d --- /dev/null +++ b/glauth/.gitignore @@ -0,0 +1 @@ +data/ \ No newline at end of file diff --git a/glauth/pkg/command/server.go b/glauth/pkg/command/server.go index 38efbcc6f..f59a54b4b 100644 --- a/glauth/pkg/command/server.go +++ b/glauth/pkg/command/server.go @@ -188,8 +188,7 @@ func Server(cfg *config.Config) *cli.Command { } if lscfg.Enabled { - // GenCert has side effects as it writes 2 files to the binary running location - if err := crypto.GenCert("ldap.crt", "ldap.key", logger); err != nil { + if err := crypto.GenCert(cfg.Ldaps.Cert, cfg.Ldaps.Key, logger); err != nil { logger.Fatal().Err(err).Msgf("Could not generate test-certificate") } } diff --git a/glauth/pkg/crypto/gencert.go b/glauth/pkg/crypto/gencert.go index 039fe540b..ceea464f8 100644 --- a/glauth/pkg/crypto/gencert.go +++ b/glauth/pkg/crypto/gencert.go @@ -10,6 +10,7 @@ import ( "math/big" "net" "os" + "path/filepath" "time" "github.com/owncloud/ocis/ocis-pkg/log" @@ -46,6 +47,14 @@ func GenCert(certName string, keyName string, l log.Logger) error { var priv interface{} var err error + _, certErr := os.Stat(certName) + _, keyErr := os.Stat(keyName) + + if certErr == nil || keyErr == nil { + l.Debug().Msg("LDAPS certificate or key already present, using these") + return nil + } + priv, err = rsa.GenerateKey(rand.Reader, 2048) if err != nil { @@ -92,6 +101,14 @@ func GenCert(certName string, keyName string, l log.Logger) error { l.Fatal().Err(err).Msg("Failed to create certificate") } + certPath := filepath.Dir(certName) + if _, err := os.Stat(certPath); os.IsNotExist(err) { + err = os.MkdirAll(certPath, 0700) + if err != nil { + l.Fatal().Err(err).Msg("Failed to create path " + certPath) + } + } + certOut, err := os.Create(certName) if err != nil { l.Fatal().Err(err).Msgf("Failed to open %v for writing", certName) @@ -106,6 +123,14 @@ func GenCert(certName string, keyName string, l log.Logger) error { } l.Info().Msg("Written server.crt") + keyPath := filepath.Dir(keyName) + if _, err := os.Stat(keyPath); os.IsNotExist(err) { + err = os.MkdirAll(keyPath, 0700) + if err != nil { + l.Fatal().Err(err).Msg("Failed to create path " + keyPath) + } + } + keyOut, err := os.OpenFile(keyName, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0600) if err != nil { l.Fatal().Err(err).Msgf("Failed to open %v for writing", keyName)