mirror of
https://github.com/upa/mscp.git
synced 2026-02-04 03:24:58 +08:00
cache auth_bit_mask after the first none auth attempt
This fixes #36, password auth does not occur.
This commit is contained in:
22
src/ssh.c
22
src/ssh.c
@@ -114,15 +114,25 @@ static int ssh_set_opts(ssh_session ssh, struct mscp_ssh_opts *opts)
|
|||||||
|
|
||||||
static int ssh_authenticate(ssh_session ssh, struct mscp_ssh_opts *opts)
|
static int ssh_authenticate(ssh_session ssh, struct mscp_ssh_opts *opts)
|
||||||
{
|
{
|
||||||
int auth_bit_mask;
|
static int auth_bit_mask;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
/* try publickey auth first */
|
if (auth_bit_mask == 0) {
|
||||||
char *p = opts->passphrase ? opts->passphrase : NULL;
|
/* the first authentication attempt. try none auth to
|
||||||
if (ssh_userauth_publickey_auto(ssh, NULL, p) == SSH_AUTH_SUCCESS)
|
* get available auth methods. */
|
||||||
return 0;
|
if (ssh_userauth_none(ssh, NULL) == SSH_AUTH_SUCCESS)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
/* save auth_bit_mask for further authentications */
|
||||||
|
auth_bit_mask = ssh_userauth_list(ssh, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (auth_bit_mask & SSH_AUTH_METHOD_PUBLICKEY) {
|
||||||
|
char *p = opts->passphrase ? opts->passphrase : NULL;
|
||||||
|
if (ssh_userauth_publickey_auto(ssh, NULL, p) == SSH_AUTH_SUCCESS)
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
auth_bit_mask = ssh_userauth_list(ssh, NULL);
|
|
||||||
if (auth_bit_mask & SSH_AUTH_METHOD_PASSWORD) {
|
if (auth_bit_mask & SSH_AUTH_METHOD_PASSWORD) {
|
||||||
if (!opts->password) {
|
if (!opts->password) {
|
||||||
char buf[128] = {};
|
char buf[128] = {};
|
||||||
|
|||||||
@@ -49,6 +49,8 @@ def cleanup_files():
|
|||||||
"{}/src".format(os.environ["HOME"]),
|
"{}/src".format(os.environ["HOME"]),
|
||||||
"{}/dst".format(os.environ["HOME"]),
|
"{}/dst".format(os.environ["HOME"]),
|
||||||
"/tmp/mscp_test_ssh_config",
|
"/tmp/mscp_test_ssh_config",
|
||||||
|
"/home/test/dst",
|
||||||
|
"/home/test/src",
|
||||||
"checkpoint",
|
"checkpoint",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -657,11 +659,14 @@ def move_pubkey_temporally():
|
|||||||
def test_passwordauth_without_pubkey(move_pubkey_temporally,
|
def test_passwordauth_without_pubkey(move_pubkey_temporally,
|
||||||
mscp, src_prefix, dst_prefix):
|
mscp, src_prefix, dst_prefix):
|
||||||
"""
|
"""
|
||||||
make sure password auth works (by removing publick keys)
|
make sure password auth works (by removing public keys)
|
||||||
"""
|
"""
|
||||||
src = File("src", size = 10 * 1024 * 1024).make()
|
src = File(os.getcwd() + "/src", size = 1024).make()
|
||||||
dst = File("dst")
|
dst = File("/home/test/dst")
|
||||||
run2ok([mscp, "-vvv", src_prefix + src.path, dst_prefix + dst.path])
|
env = os.environ
|
||||||
|
env["MSCP_SSH_AUTH_PASSWORD"] = "userpassword"
|
||||||
|
run2ok([mscp, "-vvv", "-l", "test",
|
||||||
|
src.path, "localhost:" + dst.path], env = env)
|
||||||
assert check_same_md5sum(src, dst)
|
assert check_same_md5sum(src, dst)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user