|
@@ -29,13 +29,13 @@ import (
|
|
|
)
|
|
|
|
|
|
const (
|
|
|
- logSender = "sftpdTesting"
|
|
|
- sftpServerAddr = "127.0.0.1:2022"
|
|
|
- defaultUsername = "test_user_sftp"
|
|
|
- defaultPassword = "test_password"
|
|
|
- testPubKey = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC03jj0D+djk7pxIf/0OhrxrchJTRZklofJ1NoIu4752Sq02mdXmarMVsqJ1cAjV5LBVy3D1F5U6XW4rppkXeVtd04Pxb09ehtH0pRRPaoHHlALiJt8CoMpbKYMA8b3KXPPriGxgGomvtU2T2RMURSwOZbMtpsugfjYSWenyYX+VORYhylWnSXL961LTyC21ehd6d6QnW9G7E5hYMITMY9TuQZz3bROYzXiTsgN0+g6Hn7exFQp50p45StUMfV/SftCMdCxlxuyGny2CrN/vfjO7xxOo2uv7q1qm10Q46KPWJQv+pgZ/OfL+EDjy07n5QVSKHlbx+2nT4Q0EgOSQaCTYwn3YjtABfIxWwgAFdyj6YlPulCL22qU4MYhDcA6PSBwDdf8hvxBfvsiHdM+JcSHvv8/VeJhk6CmnZxGY0fxBupov27z3yEO8nAg8k+6PaUiW1MSUfuGMF/ktB8LOstXsEPXSszuyXiOv4DaryOXUiSn7bmRqKcEFlJusO6aZP0= nicola@p1"
|
|
|
- testInvalidPublicKey = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCd60+/j+y8f0tLftihWV1YN9RSahMI9btQMDIMqts/jeNbD8jgoogM3nhF7KxfcaMKURuD47KC4Ey6iAJUJ0sWkSNNxOcIYuvA+5MlspfZDsa8Ag76Fe1vyz72WeHMHMeh/hwFo2TeIeIXg480T1VI6mzfDrVp2GzUx0SS0dMsQBjftXkuVR8YOiOwMCAH2a//M1OrvV7d/NBk6kBN0WnuIBb2jKm15PAA7+jQQG7tzwk2HedNH3jeL5GH31xkSRwlBczRK0xsCQXehAlx6cT/e/s44iJcJTHfpPKoSk6UAhPJYe7Z1QnuoawY9P9jQaxpyeImBZxxUEowhjpj2avBxKdRGBVK8R7EL8tSOeLbhdyWe5Mwc1+foEbq9Zz5j5Kd+hn3Wm1UnsGCrXUUUoZp1jnlNl0NakCto+5KmqnT9cHxaY+ix2RLUWAZyVFlRq71OYux1UHJnEJPiEI1/tr4jFBSL46qhQZv/TfpkfVW8FLz0lErfqu0gQEZnNHr3Fc= nicola@p1"
|
|
|
- testPrivateKey = `-----BEGIN OPENSSH PRIVATE KEY-----
|
|
|
+ logSender = "sftpdTesting"
|
|
|
+ sftpServerAddr = "127.0.0.1:2022"
|
|
|
+ defaultUsername = "test_user_sftp"
|
|
|
+ defaultPassword = "test_password"
|
|
|
+ testPubKey = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC03jj0D+djk7pxIf/0OhrxrchJTRZklofJ1NoIu4752Sq02mdXmarMVsqJ1cAjV5LBVy3D1F5U6XW4rppkXeVtd04Pxb09ehtH0pRRPaoHHlALiJt8CoMpbKYMA8b3KXPPriGxgGomvtU2T2RMURSwOZbMtpsugfjYSWenyYX+VORYhylWnSXL961LTyC21ehd6d6QnW9G7E5hYMITMY9TuQZz3bROYzXiTsgN0+g6Hn7exFQp50p45StUMfV/SftCMdCxlxuyGny2CrN/vfjO7xxOo2uv7q1qm10Q46KPWJQv+pgZ/OfL+EDjy07n5QVSKHlbx+2nT4Q0EgOSQaCTYwn3YjtABfIxWwgAFdyj6YlPulCL22qU4MYhDcA6PSBwDdf8hvxBfvsiHdM+JcSHvv8/VeJhk6CmnZxGY0fxBupov27z3yEO8nAg8k+6PaUiW1MSUfuGMF/ktB8LOstXsEPXSszuyXiOv4DaryOXUiSn7bmRqKcEFlJusO6aZP0= nicola@p1"
|
|
|
+ testPubKey1 = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCd60+/j+y8f0tLftihWV1YN9RSahMI9btQMDIMqts/jeNbD8jgoogM3nhF7KxfcaMKURuD47KC4Ey6iAJUJ0sWkSNNxOcIYuvA+5MlspfZDsa8Ag76Fe1vyz72WeHMHMeh/hwFo2TeIeIXg480T1VI6mzfDrVp2GzUx0SS0dMsQBjftXkuVR8YOiOwMCAH2a//M1OrvV7d/NBk6kBN0WnuIBb2jKm15PAA7+jQQG7tzwk2HedNH3jeL5GH31xkSRwlBczRK0xsCQXehAlx6cT/e/s44iJcJTHfpPKoSk6UAhPJYe7Z1QnuoawY9P9jQaxpyeImBZxxUEowhjpj2avBxKdRGBVK8R7EL8tSOeLbhdyWe5Mwc1+foEbq9Zz5j5Kd+hn3Wm1UnsGCrXUUUoZp1jnlNl0NakCto+5KmqnT9cHxaY+ix2RLUWAZyVFlRq71OYux1UHJnEJPiEI1/tr4jFBSL46qhQZv/TfpkfVW8FLz0lErfqu0gQEZnNHr3Fc= nicola@p1"
|
|
|
+ testPrivateKey = `-----BEGIN OPENSSH PRIVATE KEY-----
|
|
|
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn
|
|
|
NhAAAAAwEAAQAAAYEAtN449A/nY5O6cSH/9Doa8a3ISU0WZJaHydTaCLuO+dkqtNpnV5mq
|
|
|
zFbKidXAI1eSwVctw9ReVOl1uK6aZF3lbXdOD8W9PXobR9KUUT2qBx5QC4ibfAqDKWymDA
|
|
@@ -494,7 +494,8 @@ func TestLogin(t *testing.T) {
|
|
|
t.Errorf("login with invalid password must fail")
|
|
|
defer client.Close()
|
|
|
}
|
|
|
- user.PublicKey = testInvalidPublicKey
|
|
|
+ // testPubKey1 is not authorized
|
|
|
+ user.PublicKey = testPubKey1
|
|
|
user.Password = ""
|
|
|
_, err = api.UpdateUser(user, http.StatusOK)
|
|
|
if err != nil {
|
|
@@ -505,6 +506,23 @@ func TestLogin(t *testing.T) {
|
|
|
t.Errorf("login with invalid public key must fail")
|
|
|
defer client.Close()
|
|
|
}
|
|
|
+ // login a user with multiple public keys, only the second one is valid
|
|
|
+ user.PublicKey = testPubKey1 + "\n" + testPubKey
|
|
|
+ user.Password = ""
|
|
|
+ _, err = api.UpdateUser(user, http.StatusOK)
|
|
|
+ if err != nil {
|
|
|
+ t.Errorf("unable to update user: %v", err)
|
|
|
+ }
|
|
|
+ client, err = getSftpClient(user, true)
|
|
|
+ if err != nil {
|
|
|
+ t.Errorf("unable to create sftp client: %v", err)
|
|
|
+ } else {
|
|
|
+ defer client.Close()
|
|
|
+ _, err := client.Getwd()
|
|
|
+ if err != nil {
|
|
|
+ t.Errorf("sftp client with multiple public key must work if at least one public key is valid")
|
|
|
+ }
|
|
|
+ }
|
|
|
err = api.RemoveUser(user, http.StatusOK)
|
|
|
if err != nil {
|
|
|
t.Errorf("unable to remove user: %v", err)
|
|
@@ -1192,17 +1210,6 @@ func doSSH(user dataprovider.User, usePubKey bool) error {
|
|
|
return err
|
|
|
}
|
|
|
|
|
|
-func modifyConf(sftpdConf sftpd.Configuration) {
|
|
|
- if runtime.GOOS == "windows" {
|
|
|
- homeBasePath = "C:\\"
|
|
|
- } else {
|
|
|
- homeBasePath = "/tmp"
|
|
|
- sftpdConf.Actions.ExecuteOn = []string{"download", "upload", "rename"}
|
|
|
- sftpdConf.Actions.Command = "/bin/true"
|
|
|
- sftpdConf.Actions.HTTPNotificationURL = "http://127.0.0.1:8080/"
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
func getSftpClient(user dataprovider.User, usePubKey bool) (*sftp.Client, error) {
|
|
|
var sftpClient *sftp.Client
|
|
|
config := &ssh.ClientConfig{
|