|
@@ -19,6 +19,8 @@ import (
|
|
|
"time"
|
|
|
|
|
|
"github.com/Unknwon/com"
|
|
|
+
|
|
|
+ "github.com/gogits/gogs/modules/log"
|
|
|
)
|
|
|
|
|
|
const (
|
|
@@ -99,8 +101,8 @@ func AddPublicKey(key *PublicKey) (err error) {
|
|
|
}
|
|
|
|
|
|
// Calculate fingerprint.
|
|
|
- tmpPath := filepath.Join(os.TempDir(), fmt.Sprintf("%d", time.Now().Nanosecond()),
|
|
|
- "id_rsa.pub")
|
|
|
+ tmpPath := strings.Replace(filepath.Join(os.TempDir(), fmt.Sprintf("%d", time.Now().Nanosecond()),
|
|
|
+ "id_rsa.pub"), "\\", "/", -1)
|
|
|
os.MkdirAll(path.Dir(tmpPath), os.ModePerm)
|
|
|
if err = ioutil.WriteFile(tmpPath, []byte(key.Content), os.ModePerm); err != nil {
|
|
|
return err
|
|
@@ -127,25 +129,11 @@ func AddPublicKey(key *PublicKey) (err error) {
|
|
|
return nil
|
|
|
}
|
|
|
|
|
|
-// DeletePublicKey deletes SSH key information both in database and authorized_keys file.
|
|
|
-func DeletePublicKey(key *PublicKey) (err error) {
|
|
|
- // Delete SSH key in database.
|
|
|
- has, err := orm.Id(key.Id).Get(key)
|
|
|
- if err != nil {
|
|
|
- return err
|
|
|
- } else if !has {
|
|
|
- return errors.New("Public key does not exist")
|
|
|
- }
|
|
|
- if _, err = orm.Delete(key); err != nil {
|
|
|
- return err
|
|
|
- }
|
|
|
-
|
|
|
+func rewriteAuthorizedKeys(key *PublicKey, p, tmpP string) error {
|
|
|
// Delete SSH key in SSH key file.
|
|
|
sshOpLocker.Lock()
|
|
|
defer sshOpLocker.Unlock()
|
|
|
|
|
|
- p := filepath.Join(sshPath, "authorized_keys")
|
|
|
- tmpP := filepath.Join(sshPath, "authorized_keys.tmp")
|
|
|
fr, err := os.Open(p)
|
|
|
if err != nil {
|
|
|
return err
|
|
@@ -188,8 +176,29 @@ func DeletePublicKey(key *PublicKey) (err error) {
|
|
|
break
|
|
|
}
|
|
|
}
|
|
|
+ return nil
|
|
|
+}
|
|
|
|
|
|
- if err = os.Remove(p); err != nil {
|
|
|
+// DeletePublicKey deletes SSH key information both in database and authorized_keys file.
|
|
|
+func DeletePublicKey(key *PublicKey) (err error) {
|
|
|
+ // Delete SSH key in database.
|
|
|
+ has, err := orm.Id(key.Id).Get(key)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ } else if !has {
|
|
|
+ return errors.New("Public key does not exist")
|
|
|
+ }
|
|
|
+ if _, err = orm.Delete(key); err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+
|
|
|
+ p := filepath.Join(sshPath, "authorized_keys")
|
|
|
+ tmpP := filepath.Join(sshPath, "authorized_keys.tmp")
|
|
|
+ log.Trace("ssh.DeletePublicKey(authorized_keys): %s", p)
|
|
|
+
|
|
|
+ if err = rewriteAuthorizedKeys(key, p, tmpP); err != nil {
|
|
|
+ return err
|
|
|
+ } else if err = os.Remove(p); err != nil {
|
|
|
return err
|
|
|
}
|
|
|
return os.Rename(tmpP, p)
|