summaryrefslogtreecommitdiff
path: root/dryad
diff options
context:
space:
mode:
authorMaciej Wereski <m.wereski@partner.samsung.com>2018-08-07 16:04:09 +0200
committerMaciej Wereski <m.wereski@partner.samsung.com>2018-08-09 11:28:39 +0200
commite50de051fc526e2d68698fd3abd39725a72bd7f8 (patch)
treed44a1324ae367749529525825d066f6b064877a6 /dryad
parent2a8a63489b6435f0e4970176472a509170719f9c (diff)
downloadboruta-e50de051fc526e2d68698fd3abd39725a72bd7f8.tar.gz
boruta-e50de051fc526e2d68698fd3abd39725a72bd7f8.tar.bz2
boruta-e50de051fc526e2d68698fd3abd39725a72bd7f8.zip
Change rsa.PublicKey to ssh.PublicKey in Dryad Prepare
Users will use SSH keys rather than plain RSA keys, so Dryad interface should accept SSH public key instead of generating it from RSA public key. Change-Id: I6e757199a7e8a0d3258c1c17ac0eee8412f2b415 Signed-off-by: Maciej Wereski <m.wereski@partner.samsung.com>
Diffstat (limited to 'dryad')
-rw-r--r--dryad/key.go8
-rw-r--r--dryad/rusalka.go8
-rw-r--r--dryad/rusalka_test.go8
-rw-r--r--dryad/user.go4
4 files changed, 17 insertions, 11 deletions
diff --git a/dryad/key.go b/dryad/key.go
index 3881709..9a41b74 100644
--- a/dryad/key.go
+++ b/dryad/key.go
@@ -17,6 +17,7 @@
package dryad
import (
+ "errors"
"os"
"path"
"strconv"
@@ -25,7 +26,10 @@ import (
)
// installPublicKey marshals and stores key in a proper location to be read by ssh daemon.
-func installPublicKey(key ssh.PublicKey, homedir, uid, gid string) error {
+func installPublicKey(key *ssh.PublicKey, homedir, uid, gid string) error {
+ if key == nil {
+ return errors.New("empty public key")
+ }
sshDir := path.Join(homedir, ".ssh")
err := os.MkdirAll(sshDir, 0755)
if err != nil {
@@ -41,7 +45,7 @@ func installPublicKey(key ssh.PublicKey, homedir, uid, gid string) error {
if err != nil {
return err
}
- _, err = f.Write(ssh.MarshalAuthorizedKey(key))
+ _, err = f.Write(ssh.MarshalAuthorizedKey(*key))
return err
}
diff --git a/dryad/rusalka.go b/dryad/rusalka.go
index 7549308..e4af51c 100644
--- a/dryad/rusalka.go
+++ b/dryad/rusalka.go
@@ -21,7 +21,6 @@ package dryad
import (
"context"
- "crypto/rsa"
"fmt"
. "git.tizen.org/tools/boruta"
@@ -62,7 +61,7 @@ func (r *Rusalka) PutInMaintenance(msg string) error {
}
// Prepare is part of implementation of Dryad interface. Call to Prepare stops LED blinking.
-func (r *Rusalka) Prepare(key *rsa.PublicKey) (err error) {
+func (r *Rusalka) Prepare(key *ssh.PublicKey) (err error) {
// Stop maintenance.
if r.cancelMaintenance != nil {
r.cancelMaintenance()
@@ -82,10 +81,7 @@ func (r *Rusalka) Prepare(key *rsa.PublicKey) (err error) {
if err != nil {
return fmt.Errorf("user information update failed: %s", err)
}
- // Prepare SSH access (it can't fail as key is of type rsa.PublicKey).
- sshPubKey, _ := ssh.NewPublicKey(key)
- // TODO: use ssh.PublicKey instead.
- return r.dryadUser.generateAndInstallKey(sshPubKey)
+ return r.dryadUser.installKey(key)
}
// Healthcheck is part of implementation of Dryad interface.
diff --git a/dryad/rusalka_test.go b/dryad/rusalka_test.go
index f3799af..69136ed 100644
--- a/dryad/rusalka_test.go
+++ b/dryad/rusalka_test.go
@@ -23,6 +23,7 @@ import (
"crypto/rsa"
"crypto/x509"
"encoding/pem"
+ "errors"
"os"
"os/user"
"time"
@@ -32,6 +33,7 @@ import (
gomock "github.com/golang/mock/gomock"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
+ "golang.org/x/crypto/ssh"
)
var _ = Describe("Rusalka", func() {
@@ -84,9 +86,13 @@ var _ = Describe("Rusalka", func() {
Skip("must be run as root")
}
+ err = d.Prepare(nil)
+ Expect(err).To(Equal(errors.New("empty public key")))
key, err := rsa.GenerateKey(rand.Reader, 1024)
Expect(err).ToNot(HaveOccurred())
- err = d.Prepare(&key.PublicKey)
+ pubKey, err := ssh.NewPublicKey(&key.PublicKey)
+ Expect(err).ToNot(HaveOccurred())
+ err = d.Prepare(&pubKey)
Expect(err).ToNot(HaveOccurred())
Expect(sshDir).To(BeADirectory())
Expect(authorizedKeysFile).To(BeARegularFile())
diff --git a/dryad/user.go b/dryad/user.go
index ef80812..76cef73 100644
--- a/dryad/user.go
+++ b/dryad/user.go
@@ -137,8 +137,8 @@ func (bu *borutaUser) update() (err error) {
return
}
-// generateAndInstallKey calls generateAndInstallKey with parameters retrieved from the user field
+// installKey calls installPublicKey with parameters retrieved from the user field
// of borutaUser structure. This filed must be set before call to this function by update() method.
-func (bu *borutaUser) generateAndInstallKey(key ssh.PublicKey) error {
+func (bu *borutaUser) installKey(key *ssh.PublicKey) error {
return installPublicKey(key, bu.user.HomeDir, bu.user.Uid, bu.user.Gid)
}