summaryrefslogtreecommitdiff
authorllornkcor <llornkcor>2005-08-15 09:58:06 (UTC)
committer llornkcor <llornkcor>2005-08-15 09:58:06 (UTC)
commite7c0016a970ab1bdf5870a648a7bf07b857fbb11 (patch) (unidiff)
tree3180a13bf982fbb3d908a6a0c5d824bb63a22936
parent75eb12d42636cbd837d49f9c1347387e96e4174b (diff)
downloadopie-e7c0016a970ab1bdf5870a648a7bf07b857fbb11.zip
opie-e7c0016a970ab1bdf5870a648a7bf07b857fbb11.tar.gz
opie-e7c0016a970ab1bdf5870a648a7bf07b857fbb11.tar.bz2
scan better
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/opie-smb/qsmb.cpp80
1 files changed, 25 insertions, 55 deletions
diff --git a/noncore/net/opie-smb/qsmb.cpp b/noncore/net/opie-smb/qsmb.cpp
index d6d1b23..c1ee9a9 100644
--- a/noncore/net/opie-smb/qsmb.cpp
+++ b/noncore/net/opie-smb/qsmb.cpp
@@ -1,42 +1,43 @@
1#include "qsmb.h" 1#include "qsmb.h"
2#include <qpushbutton.h> 2#include <qpushbutton.h>
3#include <qpe/qpeapplication.h> 3#include <qpe/qpeapplication.h>
4 4
5#include <string.h> 5#include <string.h>
6#include <qstring.h> 6#include <qstring.h>
7#include <qstringlist.h> 7#include <qstringlist.h>
8#include <qdir.h> 8#include <qdir.h>
9#include <qfileinfo.h> 9#include <qfileinfo.h>
10 10
11#include <qpe/process.h> 11#include <qpe/process.h>
12#include <qlabel.h> 12#include <qlabel.h>
13#include <qlineedit.h> 13#include <qlineedit.h>
14#include <qcombobox.h> 14#include <qcombobox.h>
15#include <qstringlist.h> 15#include <qstringlist.h>
16#include <qcheckbox.h> 16#include <qcheckbox.h>
17#include <qtextview.h> 17#include <qtextview.h>
18#include <qmessagebox.h> 18#include <qmessagebox.h>
19#include <qtextstream.h>
19 20
20 21
21#include <pthread.h> 22#include <pthread.h>
22#include <signal.h> 23#include <signal.h>
23#include <ctype.h> 24#include <ctype.h>
24 25
25 26
26#include <netinet/in.h> 27#include <netinet/in.h>
27#include <arpa/inet.h> 28#include <arpa/inet.h>
28 29
29#include <rpc/clnt.h> 30#include <rpc/clnt.h>
30 31
31 32
32#include <opie2/odebug.h> 33#include <opie2/odebug.h>
33using namespace Opie::Core; 34using namespace Opie::Core;
34 35
35 36
36Qsmb::Qsmb( QWidget* parent, const char* name, WFlags fl ) 37Qsmb::Qsmb( QWidget* parent, const char* name, WFlags fl )
37 : FormQPESMBBase( parent, name, fl ) 38 : FormQPESMBBase( parent, name, fl )
38{ 39{
39 connect(CBHost, SIGNAL(activated(int)), this, SLOT(hostSelected(int))); 40 connect(CBHost, SIGNAL(activated(int)), this, SLOT(hostSelected(int)));
40 connect(DoItBtn, SIGNAL(clicked()), this, SLOT(DoItClicked())); 41 connect(DoItBtn, SIGNAL(clicked()), this, SLOT(DoItClicked()));
41 connect(BtnScan, SIGNAL(clicked()), this, SLOT(scanClicked())); 42 connect(BtnScan, SIGNAL(clicked()), this, SLOT(scanClicked()));
42 connect(BtnClear, SIGNAL(clicked()), this, SLOT(clear())); 43 connect(BtnClear, SIGNAL(clicked()), this, SLOT(clear()));
@@ -79,120 +80,89 @@ void Qsmb::DoItClicked()
79} 80}
80 81
81void* runit(void* arg) 82void* runit(void* arg)
82{ 83{
83 Qsmb* caller = (Qsmb*)arg; 84 Qsmb* caller = (Qsmb*)arg;
84 caller->scan(); 85 caller->scan();
85 return(0); 86 return(0);
86} 87}
87 88
88void* runitm(void* arg) 89void* runitm(void* arg)
89{ 90{
90 Qsmb* caller = (Qsmb*)arg; 91 Qsmb* caller = (Qsmb*)arg;
91 caller->DoIt(); 92 caller->DoIt();
92 return(0); 93 return(0);
93} 94}
94 95
95void Qsmb::scan() 96void Qsmb::scan()
96{ 97{
97 int i; 98 int i;
98 99
99 if (scanning) return; 100 if (scanning) return;
100 scanning = true; 101 scanning = true;
101 102
102 QString match; 103 QString match;
103 char lmhosts[512];
104 QString cmd; 104 QString cmd;
105 char result[256];
106
107 FILE *pipe, *pipe2;
108
109 LScan->setText("Scanning..."); 105 LScan->setText("Scanning...");
110 qApp->processEvents(); 106 qApp->processEvents();
111 107
112 sockaddr_in my_addr; 108 sockaddr_in my_addr;
113 get_myaddress( &my_addr); 109 get_myaddress( &my_addr);
114 110
115 QString ip = inet_ntoa( my_addr.sin_addr); 111 QString ip = inet_ntoa( my_addr.sin_addr);
116 owarn << "IP Address : " << ip<< oendl; 112 owarn << "IP Address : " << ip<< oendl;
117 113
118 match = ip.left(5); 114 match = ip.left(5);
119 115
120 cmd = "smbfind"; 116 QStringList ccmd;
121 owarn <<"cmd: " << cmd << oendl; 117 TextViewOutput->append("smbfind");
122
123 TextViewOutput->append(cmd);
124
125 snprintf(lmhosts, 512, "echo '127.0.0.1 localhost'>/etc/samba/lmhosts");
126
127 if ((pipe2 = popen(lmhosts, "r")) == NULL) {
128 snprintf(result, 256, "Error: Can't run %s", lmhosts);
129 //TextViewOutput->append(result);
130 return;
131 }
132
133 /* run command & read output */
134 if ((pipe = popen(cmd.latin1(), "r")) == NULL) {
135 snprintf(result, 256, "Error: Can't run %s", cmd.latin1());
136 TextViewOutput->append(result);
137 return;
138 }
139 118
119 QFile lmhosts("/etc/samba/lmhosts");
120 QTextStream lms(&lmhosts);
121 lmhosts.open(IO_WriteOnly);
122 lms << "127.0.0.1 localhost\n";
123
140 /* parse output and display in ListViewScan */ 124 /* parse output and display in ListViewScan */
141 while(fgets(result, 256, pipe) != NULL) { 125 ccmd = "smbfind";
142 /* put result into TextViewOutput */ 126 owarn <<"cmd: " << ccmd << oendl;
143 TextViewOutput->append(result); 127 runCommand(ccmd);
144 128
145 if( strstr(result, match.latin1()) != NULL ) { 129 QTextStream s(&out, IO_ReadOnly);
146 char ip_addr[256], host[256], *ptr1; 130
147 131 while ( !s.atEnd() ) {
148 strcpy( ip_addr, result); 132 QString ip_addr, host, output;
149 ptr1 = strchr(ip_addr,' '); 133 QString tmp = s.readLine();
150 strcpy( host, ptr1); 134 bool ok;
151 ip_addr[ptr1 - ip_addr]='\0'; 135 tmp.left(1).toInt( &ok, 10 );
152 136 if(ok) {
153 for(i = 0; i < 256; i++) { 137 QStringList token = QStringList::split(' ', tmp );
154 if(host[i]!=' ') { 138 ip_addr = token[0];
155 strcpy( host, host + i); 139 host = token[1];
156 break;
157 }
158 }
159 ptr1 = strchr(host,' ');
160 host[ptr1 - host] = '\0';
161
162 owarn << "add host: " << host << oendl;
163
164 CBHost->insertItem( host, -1); 140 CBHost->insertItem( host, -1);
165 snprintf( lmhosts, 512, "echo '%s %s'>>/etc/samba/lmhosts", ip_addr,host); 141 lms << ip_addr+" "+host+"\n";
166
167 owarn << "lmhosts: " << lmhosts << oendl;
168
169 if ((pipe2 = popen(lmhosts, "r")) == NULL) {
170 snprintf(result, 256, "Error: Can't run %s", lmhosts);
171 return;
172 }
173 } 142 }
174 } 143 }
144 lmhosts.close();
175 145
176 TextViewOutput->append("\n\n============================================\n"); 146 TextViewOutput->append("\n\n============================================\n");
177 LScan->setText(""); 147 LScan->setText("");
178 scanning = false; 148 scanning = false;
179} 149}
180 150
181void Qsmb::hostSelected(int index) 151void Qsmb::hostSelected(int index)
182{ 152{
183 owarn << "hostSelected" << oendl; 153 owarn << "hostSelected" << oendl;
184 int i; 154 int i;
185 155
186 QListViewItem *element; 156 QListViewItem *element;
187 QListViewItem *parent; 157 QListViewItem *parent;
188 158
189 QString text = CBHost->currentText(); 159 QString text = CBHost->currentText();
190 160
191 if (scanning) return; 161 if (scanning) return;
192 scanning = true; 162 scanning = true;
193 163
194 QString cmd; 164 QString cmd;
195 char result[256]; 165 char result[256];
196 166
197 FILE *pipe; 167 FILE *pipe;
198 168