summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/settings/sshkeys/main.cpp23
-rw-r--r--noncore/settings/sshkeys/sshkeys.cpp20
-rw-r--r--noncore/settings/sshkeys/sshkeys.h20
3 files changed, 61 insertions, 2 deletions
diff --git a/noncore/settings/sshkeys/main.cpp b/noncore/settings/sshkeys/main.cpp
index a7b1d56..9f19d0f 100644
--- a/noncore/settings/sshkeys/main.cpp
+++ b/noncore/settings/sshkeys/main.cpp
@@ -1,30 +1,49 @@
1/*
2 * ssh-agent key manipulation utility
3 *
4 * (C) 2002 David Woodhouse <dwmw2@infradead.org>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 *
20 */
1 21
2#include <qpe/qpeapplication.h> 22#include <qpe/qpeapplication.h>
3#include "sshkeys.h" 23#include "sshkeys.h"
4#include <stdio.h> 24#include <stdio.h>
5#include <sys/types.h> 25#include <sys/types.h>
6#include <sys/stat.h> 26#include <sys/stat.h>
7#include <fcntl.h> 27#include <fcntl.h>
8#include <sys/ioctl.h> 28#include <sys/ioctl.h>
9#include <unistd.h> 29#include <unistd.h>
10 30
11
12int main(int argc, char *argv[]) 31int main(int argc, char *argv[])
13{ 32{
14 QPEApplication a(argc, argv); 33 QPEApplication a(argc, argv);
15 SSHKeysApp app; 34 SSHKeysApp app;
16 int fd; 35 int fd;
17 36
18 /* If we had a controlling TTY, detach from it. 37 /* If we had a controlling TTY, detach from it.
19 This is to ensure the SSH uses ssh-askpass */ 38 This is to ensure that SSH uses ssh-askpass */
20 fd = open("/dev/tty", O_RDONLY); 39 fd = open("/dev/tty", O_RDONLY);
21 if (fd != -1) { 40 if (fd != -1) {
22 ioctl(fd, TIOCNOTTY, NULL); 41 ioctl(fd, TIOCNOTTY, NULL);
23 close(fd); 42 close(fd);
24 } 43 }
25 44
26 a.showMainWidget(&app); 45 a.showMainWidget(&app);
27 46
28 return a.exec(); 47 return a.exec();
29} 48}
30 49
diff --git a/noncore/settings/sshkeys/sshkeys.cpp b/noncore/settings/sshkeys/sshkeys.cpp
index 3b4dce6..88acf94 100644
--- a/noncore/settings/sshkeys/sshkeys.cpp
+++ b/noncore/settings/sshkeys/sshkeys.cpp
@@ -1,128 +1,148 @@
1/*
2 * ssh-agent key manipulation utility
3 *
4 * (C) 2002 David Woodhouse <dwmw2@infradead.org>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 *
20 */
1#include "sshkeys.h" 21#include "sshkeys.h"
2 22
3#include <qpe/qpeapplication.h> 23#include <qpe/qpeapplication.h>
4#include <opie/oprocess.h> 24#include <opie/oprocess.h>
5#include <qmultilineedit.h> 25#include <qmultilineedit.h>
6#include <qpushbutton.h> 26#include <qpushbutton.h>
7#include <qlistview.h> 27#include <qlistview.h>
8#include <qcombobox.h> 28#include <qcombobox.h>
9 29
10#include <sys/types.h> 30#include <sys/types.h>
11#include <sys/stat.h> 31#include <sys/stat.h>
12#include <stdlib.h> 32#include <stdlib.h>
13#include <unistd.h> 33#include <unistd.h>
14#include <stdio.h> 34#include <stdio.h>
15#include <ctype.h> 35#include <ctype.h>
16 36
17static char *keynames[] = { "identity", "id_rsa", "id_dsa" }; 37static char *keynames[] = { "identity", "id_rsa", "id_dsa" };
18 38
19SSHKeysApp::SSHKeysApp( QWidget* parent, const char* name, WFlags fl ) 39SSHKeysApp::SSHKeysApp( QWidget* parent, const char* name, WFlags fl )
20 : SSHKeysBase( parent, name, fl ) 40 : SSHKeysBase( parent, name, fl )
21{ 41{
22 char *home = getenv("HOME"); 42 char *home = getenv("HOME");
23 unsigned i; 43 unsigned i;
24 44
25 connect(AddButton, SIGNAL(clicked()), this, SLOT(doAddButton())); 45 connect(AddButton, SIGNAL(clicked()), this, SLOT(doAddButton()));
26 connect(RefreshListButton, SIGNAL(clicked()), this, SLOT(doRefreshListButton())); 46 connect(RefreshListButton, SIGNAL(clicked()), this, SLOT(doRefreshListButton()));
27 connect(RemoveAllButton, SIGNAL(clicked()), this, SLOT(doRemoveAllButton())); 47 connect(RemoveAllButton, SIGNAL(clicked()), this, SLOT(doRemoveAllButton()));
28 48
29 connect(&addprocess, SIGNAL(receivedStdout(OProcess*,char*,int)), 49 connect(&addprocess, SIGNAL(receivedStdout(OProcess*,char*,int)),
30 this, SLOT(log_sshadd_output(OProcess*,char*,int))); 50 this, SLOT(log_sshadd_output(OProcess*,char*,int)));
31 connect(&addprocess, SIGNAL(processExited(OProcess*)), 51 connect(&addprocess, SIGNAL(processExited(OProcess*)),
32 this, SLOT(ssh_add_exited(OProcess*))); 52 this, SLOT(ssh_add_exited(OProcess*)));
33 53
34 connect(KeyFileName, SIGNAL(textChanged(const QString&)), 54 connect(KeyFileName, SIGNAL(textChanged(const QString&)),
35 this, SLOT(add_text_changed(const QString&))); 55 this, SLOT(add_text_changed(const QString&)));
36 56
37 if (home) { 57 if (home) {
38 for (i = 0; i < sizeof(keynames)/sizeof(keynames[0]); i++) { 58 for (i = 0; i < sizeof(keynames)/sizeof(keynames[0]); i++) {
39 char thiskeyname[32]; 59 char thiskeyname[32];
40 60
41 thiskeyname[31] = 0; 61 thiskeyname[31] = 0;
42 snprintf(thiskeyname, 31, "%s/.ssh/%s", home, keynames[i]); 62 snprintf(thiskeyname, 31, "%s/.ssh/%s", home, keynames[i]);
43 if (!access(thiskeyname, R_OK)) { 63 if (!access(thiskeyname, R_OK)) {
44 KeyFileName->insertItem(thiskeyname); 64 KeyFileName->insertItem(thiskeyname);
45 } 65 }
46 } 66 }
47 } 67 }
48 68
49 doRefreshListButton(); 69 doRefreshListButton();
50} 70}
51 71
52SSHKeysApp::~SSHKeysApp() 72SSHKeysApp::~SSHKeysApp()
53{ 73{
54} 74}
55 75
56void SSHKeysApp::doRefreshListButton() 76void SSHKeysApp::doRefreshListButton()
57{ 77{
58 OProcess sshadd_process; 78 OProcess sshadd_process;
59 QListViewItem *t = KeyList->firstChild(); 79 QListViewItem *t = KeyList->firstChild();
60 80
61 while(t) { 81 while(t) {
62 QListViewItem *next = t->nextSibling(); 82 QListViewItem *next = t->nextSibling();
63 KeyList->takeItem(t); 83 KeyList->takeItem(t);
64 delete(t); 84 delete(t);
65 t = next; 85 t = next;
66 } 86 }
67 87
68 connect(&sshadd_process, SIGNAL(receivedStdout(OProcess*,char*,int)), 88 connect(&sshadd_process, SIGNAL(receivedStdout(OProcess*,char*,int)),
69 this, SLOT(get_list_keys_output(OProcess*,char*,int))); 89 this, SLOT(get_list_keys_output(OProcess*,char*,int)));
70 90
71 keystate = KeySize; 91 keystate = KeySize;
72 incoming_keyname=""; 92 incoming_keyname="";
73 incoming_keysize=""; 93 incoming_keysize="";
74 incoming_keyfingerprint=""; 94 incoming_keyfingerprint="";
75 95
76 //log_text("Running ssh-add -l"); 96 //log_text("Running ssh-add -l");
77 sshadd_process << "ssh-add" << "-l"; 97 sshadd_process << "ssh-add" << "-l";
78 bool ret = sshadd_process.start(OProcess::Block, OProcess::AllOutput); 98 bool ret = sshadd_process.start(OProcess::Block, OProcess::AllOutput);
79 if (!ret) { 99 if (!ret) {
80 log_text(tr("Error running ssh-add")); 100 log_text(tr("Error running ssh-add"));
81 return; 101 return;
82 } 102 }
83 if (sshadd_process.exitStatus() == 2) { 103 if (sshadd_process.exitStatus() == 2) {
84 log_text(tr("Connection to ssh-agent failed")); 104 log_text(tr("Connection to ssh-agent failed"));
85 setEnabled(FALSE); 105 setEnabled(FALSE);
86 } 106 }
87} 107}
88 108
89void SSHKeysApp::get_list_keys_output(OProcess *proc, char *buffer, int buflen) 109void SSHKeysApp::get_list_keys_output(OProcess *proc, char *buffer, int buflen)
90{ 110{
91 int i; 111 int i;
92 (void) proc; 112 (void) proc;
93 113
94 for (i=0; i<buflen; i++) { 114 for (i=0; i<buflen; i++) {
95 switch(keystate) { 115 switch(keystate) {
96 case Noise: 116 case Noise:
97 noise: 117 noise:
98 if (buffer[i] == '\n') { 118 if (buffer[i] == '\n') {
99 log_text(incoming_noise.local8Bit()); 119 log_text(incoming_noise.local8Bit());
100 incoming_noise = ""; 120 incoming_noise = "";
101 keystate = KeySize; 121 keystate = KeySize;
102 } else { 122 } else {
103 incoming_noise += buffer[i]; 123 incoming_noise += buffer[i];
104 } 124 }
105 break; 125 break;
106 126
107 case KeySize: 127 case KeySize:
108 if (isdigit(buffer[i])) { 128 if (isdigit(buffer[i])) {
109 incoming_keysize += buffer[i]; 129 incoming_keysize += buffer[i];
110 } else if (buffer[i] == ' ') { 130 } else if (buffer[i] == ' ') {
111 keystate = KeyFingerprint; 131 keystate = KeyFingerprint;
112 } else { 132 } else {
113 incoming_keysize = ""; 133 incoming_keysize = "";
114 incoming_noise = ""; 134 incoming_noise = "";
115 keystate = Noise; 135 keystate = Noise;
116 goto noise; 136 goto noise;
117 } 137 }
118 break; 138 break;
119 139
120 case KeyFingerprint: 140 case KeyFingerprint:
121 if (isxdigit(buffer[i]) || buffer[i] == ':') { 141 if (isxdigit(buffer[i]) || buffer[i] == ':') {
122 incoming_keyfingerprint += buffer[i]; 142 incoming_keyfingerprint += buffer[i];
123 } else if (buffer[i] == ' ') { 143 } else if (buffer[i] == ' ') {
124 keystate = KeyName; 144 keystate = KeyName;
125 } else { 145 } else {
126 incoming_keysize = ""; 146 incoming_keysize = "";
127 incoming_keyfingerprint = ""; 147 incoming_keyfingerprint = "";
128 incoming_noise = ""; 148 incoming_noise = "";
diff --git a/noncore/settings/sshkeys/sshkeys.h b/noncore/settings/sshkeys/sshkeys.h
index 9a39a2c..5e306d1 100644
--- a/noncore/settings/sshkeys/sshkeys.h
+++ b/noncore/settings/sshkeys/sshkeys.h
@@ -1,35 +1,55 @@
1/*
2 * ssh-agent key manipulation utility
3 *
4 * (C) 2002 David Woodhouse <dwmw2@infradead.org>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 *
20 */
1 21
2#ifndef SSHKEYSAPP_H 22#ifndef SSHKEYSAPP_H
3#define SSHKEYSAPP_H 23#define SSHKEYSAPP_H
4 24
5#include "sshkeysbase.h" 25#include "sshkeysbase.h"
6#include <opie/oprocess.h> 26#include <opie/oprocess.h>
7 27
8class SSHKeysApp : public SSHKeysBase 28class SSHKeysApp : public SSHKeysBase
9{ 29{
10 Q_OBJECT 30 Q_OBJECT
11 31
12 public: 32 public:
13 SSHKeysApp( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 ); 33 SSHKeysApp( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
14 ~SSHKeysApp(); 34 ~SSHKeysApp();
15 35
16 private: 36 private:
17 void log_text(const char *text); 37 void log_text(const char *text);
18 enum { Noise, KeyName, KeySize, KeyFingerprint } keystate; 38 enum { Noise, KeyName, KeySize, KeyFingerprint } keystate;
19 QString incoming_keyname; 39 QString incoming_keyname;
20 QString incoming_keysize; 40 QString incoming_keysize;
21 QString incoming_keyfingerprint; 41 QString incoming_keyfingerprint;
22 QString incoming_noise; 42 QString incoming_noise;
23 OProcess addprocess; 43 OProcess addprocess;
24 44
25 private slots: 45 private slots:
26 void doAddButton(); 46 void doAddButton();
27 void doRefreshListButton(); 47 void doRefreshListButton();
28 void doRemoveAllButton(); 48 void doRemoveAllButton();
29 void get_list_keys_output(OProcess *proc, char *buffer, int buflen); 49 void get_list_keys_output(OProcess *proc, char *buffer, int buflen);
30 void log_sshadd_output(OProcess *proc, char *buffer, int buflen); 50 void log_sshadd_output(OProcess *proc, char *buffer, int buflen);
31 void ssh_add_exited(OProcess *proc); 51 void ssh_add_exited(OProcess *proc);
32 void add_text_changed(const QString &text); 52 void add_text_changed(const QString &text);
33}; 53};
34#endif 54#endif
35 55