fixup appending keys
Signed-off-by: Vasiliy Tolstov <v.tolstov@selfip.ru>
This commit is contained in:
parent
d7b5d86bdb
commit
e8f51fe59d
@ -15,11 +15,65 @@
|
|||||||
package system
|
package system
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bufio"
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func diffLines(src, dst []string) []string {
|
||||||
|
var tgt []string
|
||||||
|
|
||||||
|
mb := map[string]bool{}
|
||||||
|
|
||||||
|
for _, x := range src {
|
||||||
|
mb[x] = true
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, x := range dst {
|
||||||
|
if _, ok := mb[x]; !ok {
|
||||||
|
mb[x] = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for k, _ := range mb {
|
||||||
|
tgt = append(tgt, k)
|
||||||
|
}
|
||||||
|
|
||||||
|
return tgt
|
||||||
|
}
|
||||||
|
|
||||||
|
func readLines(path string) ([]string, error) {
|
||||||
|
var lines []string
|
||||||
|
|
||||||
|
file, err := os.Open(path)
|
||||||
|
if err != nil {
|
||||||
|
return lines, err
|
||||||
|
}
|
||||||
|
defer file.Close()
|
||||||
|
|
||||||
|
scanner := bufio.NewScanner(file)
|
||||||
|
for scanner.Scan() {
|
||||||
|
lines = append(lines, scanner.Text())
|
||||||
|
}
|
||||||
|
return lines, scanner.Err()
|
||||||
|
}
|
||||||
|
|
||||||
|
// writeLines writes the lines to the given file.
|
||||||
|
func writeLines(lines []string, path string) error {
|
||||||
|
file, err := os.Create(path)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer file.Close()
|
||||||
|
|
||||||
|
w := bufio.NewWriter(file)
|
||||||
|
for _, line := range lines {
|
||||||
|
fmt.Fprintln(w, line)
|
||||||
|
}
|
||||||
|
return w.Flush()
|
||||||
|
}
|
||||||
|
|
||||||
// Add the provide SSH public key to the core user's list of
|
// Add the provide SSH public key to the core user's list of
|
||||||
// authorized keys
|
// authorized keys
|
||||||
func AuthorizeSSHKeys(user string, keysName string, keys []string) error {
|
func AuthorizeSSHKeys(user string, keysName string, keys []string) error {
|
||||||
@ -29,7 +83,7 @@ func AuthorizeSSHKeys(user string, keysName string, keys []string) error {
|
|||||||
|
|
||||||
// join all keys with newlines, ensuring the resulting string
|
// join all keys with newlines, ensuring the resulting string
|
||||||
// also ends with a newline
|
// also ends with a newline
|
||||||
joined := fmt.Sprintf("%s\n", strings.Join(keys, "\n"))
|
// joined := fmt.Sprintf("%s\n", strings.Join(keys, "\n"))
|
||||||
|
|
||||||
home, err := UserHome(user)
|
home, err := UserHome(user)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -43,12 +97,12 @@ func AuthorizeSSHKeys(user string, keysName string, keys []string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
authorized_file := fmt.Sprintf("%s/.ssh/authorized_keys", home)
|
authorized_file := fmt.Sprintf("%s/.ssh/authorized_keys", home)
|
||||||
f, err := os.OpenFile(authorized_file, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644)
|
var newkeys []string
|
||||||
if err != nil {
|
for _, x := range keys {
|
||||||
return err
|
newkeys = append(newkeys, strings.Split(x, "\n")...)
|
||||||
}
|
}
|
||||||
defer f.Close()
|
oldkeys, _ := readLines(authorized_file)
|
||||||
_, err = f.WriteString(joined)
|
|
||||||
|
|
||||||
return err
|
diffkeys := diffLines(oldkeys, newkeys)
|
||||||
|
return writeLines(diffkeys, authorized_file)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user