diff options
Diffstat (limited to 'src/protocol/internal/fqterm_ssh_auth.h')
-rw-r--r-- | src/protocol/internal/fqterm_ssh_auth.h | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/src/protocol/internal/fqterm_ssh_auth.h b/src/protocol/internal/fqterm_ssh_auth.h new file mode 100644 index 0000000..6152a71 --- /dev/null +++ b/src/protocol/internal/fqterm_ssh_auth.h @@ -0,0 +1,112 @@ +/*************************************************************************** + * fqterm, a terminal emulator for both BBS and *nix. * + * Copyright (C) 2008 fqterm development group. * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * + ***************************************************************************/ + +#ifndef FQTERM_SSH_AUTH_H +#define FQTERM_SSH_AUTH_H + +#include <QObject> + +class QString; + +namespace FQTerm { + +class FQTermSSHPacketReceiver; +class FQTermSSHPacketSender; + +class FQTermSSHAuth: public QObject { + + Q_OBJECT; +protected: + QString user_name_; + FQTermSSHPacketReceiver *packet_receiver_; + FQTermSSHPacketSender *packet_sender_; + +public: + FQTermSSHAuth(const char *sshuser = NULL) + : user_name_(sshuser) { + } + + ~FQTermSSHAuth() {} + + virtual void initAuth(FQTermSSHPacketReceiver *packet, + FQTermSSHPacketSender *output) = 0; +public slots: + virtual void handlePacket(int type) = 0; + +signals: + void requestUserPwd(QString *user, QString *pwd, bool *isOK); + void authOK(); + void authError(QString); +}; + +class FQTermSSHPasswdAuth: public FQTermSSHAuth { + Q_OBJECT; +protected: + QString passwd_; + bool is_tried_; + + QString default_user_; + QString default_passwd_; + +public: + FQTermSSHPasswdAuth(const char *sshuser, const char *sshpasswd) + : FQTermSSHAuth(sshuser), + passwd_(sshpasswd), + default_user_(sshuser), + default_passwd_(sshpasswd) { + } +}; + +class FQTermSSH1PasswdAuth: public FQTermSSHPasswdAuth { + Q_OBJECT; +private: + enum FQTermSSH1PasswdAuthState { + BEFORE_AUTH, USER_SENT, PASS_SENT, AUTH_OK + } ssh_pw_auth_state_; + +public: + FQTermSSH1PasswdAuth(const char *sshuser, const char *sshpasswd); + +public slots: + void handlePacket(int type); + void initAuth(FQTermSSHPacketReceiver *packet, FQTermSSHPacketSender *output); +}; + +class FQTermSSH2PasswdAuth: public FQTermSSHPasswdAuth { + Q_OBJECT; +private: + enum FQTermSSH2PasswdAuthState { + SERVICE_ACCEPTED, USER_PASSWD_SENT, PASS_SENT, AUTH_OK + } ssh_pw_auth_state_; + + void sendUserPasswd(); + bool check(); + +public: + FQTermSSH2PasswdAuth(const char *sshuser, const char *sshpasswd); + +public slots: + void handlePacket(int type); + void initAuth(FQTermSSHPacketReceiver *packet, FQTermSSHPacketSender *output); +}; + +} // namespace FQTerm + +#endif // FQTERM_SSH_AUTH_H |