diff options
author | Timothy Pearson <kb9vqf@pearsoncomputing.net> | 2011-11-06 15:56:40 -0600 |
---|---|---|
committer | Timothy Pearson <kb9vqf@pearsoncomputing.net> | 2011-11-06 15:56:40 -0600 |
commit | e16866e072f94410321d70daedbcb855ea878cac (patch) | |
tree | ee3f52eabde7da1a0e6ca845fb9c2813cf1558cf /kdesu/ssh.cpp | |
parent | a58c20c1a7593631a1b50213c805507ebc16adaf (diff) | |
download | tdelibs-e16866e072f94410321d70daedbcb855ea878cac.tar.gz tdelibs-e16866e072f94410321d70daedbcb855ea878cac.zip |
Actually move the kde files that were renamed in the last commit
Diffstat (limited to 'kdesu/ssh.cpp')
-rw-r--r-- | kdesu/ssh.cpp | 279 |
1 files changed, 0 insertions, 279 deletions
diff --git a/kdesu/ssh.cpp b/kdesu/ssh.cpp deleted file mode 100644 index f45b38e7e..000000000 --- a/kdesu/ssh.cpp +++ /dev/null @@ -1,279 +0,0 @@ -/* vi: ts=8 sts=4 sw=4 -* -* $Id$ -* -* This file is part of the KDE project, module tdesu. -* Copyright (C) 2000 Geert Jansen <jansen@kde.org> -* -* This is free software; you can use this library under the GNU Library -* General Public License, version 2. See the file "COPYING.LIB" for the -* exact licensing terms. -* -* ssh.cpp: Execute a program on a remote machine using ssh. -*/ - -#include <config.h> - -#include <stdio.h> -#include <stdlib.h> -#include <unistd.h> -#include <fcntl.h> -#include <signal.h> -#include <errno.h> -#include <string.h> -#include <ctype.h> -#include <signal.h> -#include <time.h> - -#include <sys/types.h> -#include <sys/stat.h> - -#include <tqglobal.h> -#include <tqcstring.h> - -#include <kdebug.h> -#include <klocale.h> -#include <kstandarddirs.h> - -#include "ssh.h" -#include "kcookie.h" - - -SshProcess::SshProcess(const TQCString &host, const TQCString &user, const TQCString &command) -{ - m_Host = host; - m_User = user; - m_Command = command; - m_Stub = "tdesu_stub"; - srand(time(0L)); -} - - -SshProcess::~SshProcess() -{ -} - - -void SshProcess::setStub(const TQCString &stub) -{ - m_Stub = stub; -} - - -int SshProcess::checkInstall(const char *password) -{ - return exec(password, 1); -} - - -int SshProcess::checkNeedPassword() -{ - return exec(0L, 2); -} - - -int SshProcess::exec(const char *password, int check) -{ - if (check) - setTerminal(true); - - QCStringList args; - args += "-l"; args += m_User; - args += "-o"; args += "StrictHostKeyChecking=no"; - args += m_Host; args += m_Stub; - - if (StubProcess::exec("ssh", args) < 0) - { - return check ? SshNotFound : -1; - } - - int ret = ConverseSsh(password, check); - if (ret < 0) - { - if (!check) - kdError(900) << k_lineinfo << "Conversation with ssh failed\n"; - return ret; - } - if (check == 2) - { - if (ret == 1) - { - kill(m_Pid, SIGTERM); - waitForChild(); - } - return ret; - } - - if (m_bErase && password) - { - char *ptr = const_cast<char *>(password); - const uint plen = strlen(password); - for (unsigned i=0; i < plen; i++) - ptr[i] = '\000'; - } - - ret = ConverseStub(check); - if (ret < 0) - { - if (!check) - kdError(900) << k_lineinfo << "Converstation with tdesu_stub failed\n"; - return ret; - } - else if (ret == 1) - { - kill(m_Pid, SIGTERM); - waitForChild(); - ret = SshIncorrectPassword; - } - - if (check == 1) - { - waitForChild(); - return 0; - } - - setExitString("Waiting for forwarded connections to terminate"); - ret = waitForChild(); - return ret; -} - -/* -* Create a port forwarding for DCOP. For the remote port, we take a pseudo -* random number between 10k and 50k. This is not ok, of course, but I see -* no other way. There is, afaik, no security issue involved here. If the port -* happens to be occupied, ssh will refuse to start. -* -* 14/SEP/2000: DCOP forwarding is not used anymore. -*/ - -TQCString SshProcess::dcopForward() -{ - TQCString result; - - setDcopTransport("tcp"); - - TQCString srv = StubProcess::dcopServer(); - if (srv.isEmpty()) - return result; - - int i = srv.find('/'); - if (i == -1) - return result; - if (srv.left(i) != "tcp") - return result; - int j = srv.find(':', ++i); - if (j == -1) - return result; - TQCString host = srv.mid(i, j-i); - bool ok; - int port = srv.mid(++j).toInt(&ok); - if (!ok) - return result; - - m_dcopPort = 10000 + (int) ((40000.0 * rand()) / (1.0 + RAND_MAX)); - result.sprintf("%d:%s:%d", m_dcopPort, host.data(), port); - return result; -} - - -/* -* Conversation with ssh. -* If check is 0, this waits for either a "Password: " prompt, -* or the header of the stub. If a prompt is received, the password is -* written back. Used for running a command. -* If check is 1, operation is the same as 0 except that if a stub header is -* received, the stub is stopped with the "stop" command. This is used for -* checking a password. -* If check is 2, operation is the same as 1, except that no password is -* written. The prompt is saved to m_Prompt. Used for checking the need for -* a password. -*/ - -int SshProcess::ConverseSsh(const char *password, int check) -{ - unsigned i, j, colon; - - TQCString line; - int state = 0; - - while (state < 2) - { - line = readLine(); - const uint len = line.length(); - if (line.isNull()) - return -1; - - switch (state) { - case 0: - // Check for "tdesu_stub" header. - if (line == "tdesu_stub") - { - unreadLine(line); - return 0; - } - - // Match "Password: " with the regex ^[^:]+:[\w]*$. - for (i=0,j=0,colon=0; i<len; i++) - { - if (line[i] == ':') - { - j = i; colon++; - continue; - } - if (!isspace(line[i])) - j++; - } - if ((colon == 1) && (line[j] == ':')) - { - if (check == 2) - { - m_Prompt = line; - return SshNeedsPassword; - } - WaitSlave(); - write(m_Fd, password, strlen(password)); - write(m_Fd, "\n", 1); - state++; - break; - } - - // Warning/error message. - m_Error += line; m_Error += "\n"; - if (m_bTerminal) - fprintf(stderr, "ssh: %s\n", line.data()); - break; - - case 1: - if (line.isEmpty()) - { - state++; - break; - } - return -1; - } - } - return 0; -} - - -// Display redirection is handled by ssh natively. -TQCString SshProcess::display() -{ - return "no"; -} - - -TQCString SshProcess::displayAuth() -{ - return "no"; -} - - -// Return the remote end of the forwarded connection. -TQCString SshProcess::dcopServer() -{ - return TQCString().sprintf("tcp/localhost:%d", m_dcopPort); -} - -void SshProcess::virtual_hook( int id, void* data ) -{ StubProcess::virtual_hook( id, data ); } |