add fallback user for working dir
This commit is contained in:
parent
ff020f14ff
commit
2086ca4652
3 changed files with 28 additions and 2 deletions
|
|
@ -5,5 +5,6 @@ var (
|
|||
WorkingDir string `long:"workingdir" default:"/var/sshpiper" description:"Path to workingdir" env:"SSHPIPERD_WORKINGDIR" ini-name:"workingdir"`
|
||||
AllowBadUsername bool `long:"workingdir-allowbadusername" description:"Disable username check while search the working dir" env:"SSHPIPERD_WORKINGDIR_ALLOWBADUSERNAME" ini-name:"workingdir-allowbadusername"`
|
||||
NoCheckPerm bool `long:"workingdir-nocheckperm" description:"Disable 0400 checking when using files in the working dir" env:"SSHPIPERD_WORKINGDIR_NOCHECKPERM" ini-name:"workingdir-nocheckperm"`
|
||||
FallbackUSername string `long:"workingdir-fallbackusername" description:"Fallback to a user when user does not exists in directory" env:"SSHPIPERD_WORKINGDIR_FALLBACKUSERNAME" ini-name:"workingdir-fallbackusername"`
|
||||
}{}
|
||||
)
|
||||
|
|
|
|||
|
|
@ -130,7 +130,11 @@ func findUpstreamFromUserfile(conn ssh.ConnMetadata) (net.Conn, *ssh.AuthPipe, e
|
|||
}
|
||||
|
||||
err := userUpstreamFile.checkPerm(user)
|
||||
if err != nil {
|
||||
|
||||
if os.IsNotExist(err) && len(config.FallbackUSername) > 0 {
|
||||
err = nil
|
||||
user = config.FallbackUSername
|
||||
} else if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
|
||||
|
|
@ -184,7 +188,11 @@ func mapPublicKeyFromUserfile(conn ssh.ConnMetadata, key ssh.PublicKey) (signer
|
|||
}()
|
||||
|
||||
err = userAuthorizedKeysFile.checkPerm(user)
|
||||
if err != nil {
|
||||
|
||||
if os.IsNotExist(err) && len(config.FallbackUSername) > 0 {
|
||||
err = nil
|
||||
user = config.FallbackUSername
|
||||
} else if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -243,10 +243,19 @@ func TestFindUpstreamFromUserfile(t *testing.T) {
|
|||
}
|
||||
|
||||
t.Logf("testing user not found")
|
||||
config.FallbackUSername = ""
|
||||
_, _, err = findUpstreamFromUserfile(stubConnMetadata{"nosuchuser"})
|
||||
if err == nil {
|
||||
t.Fatalf("should return err when finding nosuchuser")
|
||||
}
|
||||
|
||||
t.Logf("testing user not found fallback")
|
||||
config.FallbackUSername = user
|
||||
_, _, err = findUpstreamFromUserfile(stubConnMetadata{"nosuchuser"})
|
||||
|
||||
if err != nil {
|
||||
t.Fatalf("should return fallbackuser")
|
||||
}
|
||||
}
|
||||
|
||||
func TestMapPublicKeyFromUserfile(t *testing.T) {
|
||||
|
|
@ -296,11 +305,19 @@ func TestMapPublicKeyFromUserfile(t *testing.T) {
|
|||
}
|
||||
|
||||
t.Logf("testing user not found")
|
||||
config.FallbackUSername = ""
|
||||
_, err = mapPublicKeyFromUserfile(stubConnMetadata{"nosuchuser"}, publicKey)
|
||||
if err == nil {
|
||||
t.Fatalf("should return err when mapping from nosuchuser")
|
||||
}
|
||||
|
||||
t.Logf("testing user not found fallback")
|
||||
config.FallbackUSername = user
|
||||
_, err = mapPublicKeyFromUserfile(stubConnMetadata{"nosuchuser"}, publicKey)
|
||||
if err != nil {
|
||||
t.Fatalf("should return fallbackuser")
|
||||
}
|
||||
|
||||
t.Logf("testing mapping signer")
|
||||
signer, err := mapPublicKeyFromUserfile(stubConnMetadata{user}, privateKey.PublicKey())
|
||||
if err != nil {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue