summaryrefslogtreecommitdiff
path: root/noncore/net/opie-smb/qsmb.cpp
Unidiff
Diffstat (limited to 'noncore/net/opie-smb/qsmb.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/opie-smb/qsmb.cpp151
1 files changed, 74 insertions, 77 deletions
diff --git a/noncore/net/opie-smb/qsmb.cpp b/noncore/net/opie-smb/qsmb.cpp
index c1ee9a9..fbe1c5c 100644
--- a/noncore/net/opie-smb/qsmb.cpp
+++ b/noncore/net/opie-smb/qsmb.cpp
@@ -86,25 +86,25 @@ void* runit(void* arg)
86 return(0); 86 return(0);
87} 87}
88 88
89void* runitm(void* arg) 89void* runitm(void* arg)
90{ 90{
91 Qsmb* caller = (Qsmb*)arg; 91 Qsmb* caller = (Qsmb*)arg;
92 caller->DoIt(); 92 caller->DoIt();
93 return(0); 93 return(0);
94} 94}
95 95
96void Qsmb::scan() 96void Qsmb::scan()
97{ 97{
98 int i; 98// int i;
99 99
100 if (scanning) return; 100 if (scanning) return;
101 scanning = true; 101 scanning = true;
102 102
103 QString match; 103 QString match;
104 QString cmd; 104 QString cmd;
105 LScan->setText("Scanning..."); 105 LScan->setText("Scanning...");
106 qApp->processEvents(); 106 qApp->processEvents();
107 107
108 sockaddr_in my_addr; 108 sockaddr_in my_addr;
109 get_myaddress( &my_addr); 109 get_myaddress( &my_addr);
110 110
@@ -114,25 +114,24 @@ void Qsmb::scan()
114 match = ip.left(5); 114 match = ip.left(5);
115 115
116 QStringList ccmd; 116 QStringList ccmd;
117 TextViewOutput->append("smbfind"); 117 TextViewOutput->append("smbfind");
118 118
119 QFile lmhosts("/etc/samba/lmhosts"); 119 QFile lmhosts("/etc/samba/lmhosts");
120 QTextStream lms(&lmhosts); 120 QTextStream lms(&lmhosts);
121 lmhosts.open(IO_WriteOnly); 121 lmhosts.open(IO_WriteOnly);
122 lms << "127.0.0.1 localhost\n"; 122 lms << "127.0.0.1 localhost\n";
123 123
124 /* parse output and display in ListViewScan */ 124 /* parse output and display in ListViewScan */
125 ccmd = "smbfind"; 125 ccmd = "smbfind";
126 owarn <<"cmd: " << ccmd << oendl;
127 runCommand(ccmd); 126 runCommand(ccmd);
128 127
129 QTextStream s(&out, IO_ReadOnly); 128 QTextStream s(&out, IO_ReadOnly);
130 129
131 while ( !s.atEnd() ) { 130 while ( !s.atEnd() ) {
132 QString ip_addr, host, output; 131 QString ip_addr, host, output;
133 QString tmp = s.readLine(); 132 QString tmp = s.readLine();
134 bool ok; 133 bool ok;
135 tmp.left(1).toInt( &ok, 10 ); 134 tmp.left(1).toInt( &ok, 10 );
136 if(ok) { 135 if(ok) {
137 QStringList token = QStringList::split(' ', tmp ); 136 QStringList token = QStringList::split(' ', tmp );
138 ip_addr = token[0]; 137 ip_addr = token[0];
@@ -142,106 +141,117 @@ void Qsmb::scan()
142 } 141 }
143 } 142 }
144 lmhosts.close(); 143 lmhosts.close();
145 144
146 TextViewOutput->append("\n\n============================================\n"); 145 TextViewOutput->append("\n\n============================================\n");
147 LScan->setText(""); 146 LScan->setText("");
148 scanning = false; 147 scanning = false;
149} 148}
150 149
151void Qsmb::hostSelected(int index) 150void Qsmb::hostSelected(int index)
152{ 151{
153 owarn << "hostSelected" << oendl; 152 owarn << "hostSelected" << oendl;
154 int i;
155
156 QListViewItem *element; 153 QListViewItem *element;
157 QListViewItem *parent; 154 QListViewItem *parent;
158 155
159 QString text = CBHost->currentText(); 156 QString text = CBHost->currentText();
160 157
161 if (scanning) return; 158 if (scanning) return;
162 scanning = true; 159 scanning = true;
163 160
164 QString cmd; 161 QString cmd;
165 char result[256]; 162 QStringList ccmd;
166
167 FILE *pipe;
168 163
169 LScan->setText("Scanning..."); 164 LScan->setText("Scanning...");
170 165
171 if(username->text().isEmpty()) 166 ccmd << "/usr/bin/smbclient";
172 cmd = "/usr/bin/smbclient -L //"+CBHost->currentText()+" -N 2>&1 |grep Disk"; 167 ccmd << "-L";
173 else 168 ccmd << CBHost->currentText();
174 cmd = "/usr/bin/smbclient -L //"+CBHost->currentText()+" -N -U "+username->text()+"\%"+password->text()+" 2>&1 |grep Disk"; 169 ccmd << "-N";
170
171 if(username->text().isEmpty()) {
172 } else {
173 ccmd << "-U";
174 ccmd << username->text()+"\%"+ password->text();
175 }
176 runCommand(ccmd);
177 QTextStream s(&out, IO_ReadOnly);
175 178
176// for(i = 0; i < 512; i++) { 179 while ( !s.atEnd() ) {
177// if(cmd[i]==':') { 180 QString share;
178// cmd[i]='%'; 181 QString comment;
179// break; 182 QString tmp = s.readLine();
180// } 183
181// if(cmd[i]=='\0') 184 if( tmp.find("$") == -1 && tmp.find("Disk") != -1) {
182// break; 185 QStringList token = QStringList::split(' ', tmp );
183// } 186 share = token[0];
187 comment = token[2];
188 element = new QListViewItem(ListViewScan,share, comment);
189 element->setOpen(true);
190// top_element = element;
191// parent = element;
192 }
184 193
185 owarn << "i="<< index << "cmd:" << cmd << oendl; 194 }
195// owarn << "i="<< index << "cmd:" << cmd << oendl;
186 196
187 TextViewOutput->append(cmd); 197 TextViewOutput->append(cmd);
188 198
189 /* run smbclient & read output */ 199 /* run smbclient & read output */
190 if ((pipe = popen(cmd.latin1(), "r")) == NULL) { 200// if ((pipe = popen(cmd.latin1(), "r")) == NULL) {
191 snprintf(result, 256, "Error: Can't run %s", cmd.latin1()); 201// snprintf(result, 256, "Error: Can't run %s", cmd.latin1());
192// cmd = "Error: Can't run "+cmd; 202// // cmd = "Error: Can't run "+cmd;
193 TextViewOutput->append(result); 203// TextViewOutput->append(result);
194 return; 204// return;
195 } 205// }
196 206
197 /* parse output and display in ListViewScan */ 207 /* parse output and display in ListViewScan */
198 while(fgets(result, 256, pipe) != NULL) { 208// while(fgets(result, 256, pipe) != NULL) {
199 /* put result into TextViewOutput */ 209// /* put result into TextViewOutput */
200 TextViewOutput->append(result); 210// TextViewOutput->append(result);
201 211
202 if( strchr(result, '$') == NULL ) { 212// if( strchr(result, '$') == NULL ) {
203 char share[256], *ptr1; 213// char share[256], *ptr1;
204 214
205 strcpy(share,result); 215// strcpy(share,result);
206 ptr1 = strchr(share,' '); 216// ptr1 = strchr(share,' ');
207 share[ptr1 - share]='\0'; 217// share[ptr1 - share]='\0';
208 218
209 owarn<< "add share: " << share << oendl; 219// owarn<< "add share: " << share << oendl;
210 220
211 if(top_element != NULL) { 221// if(top_element != NULL) {
212 bool found = false; 222// bool found = false;
213 element = top_element; 223// element = top_element;
214 224
215 while(element != NULL && !found) { 225// while(element != NULL && !found) {
216 if(strcmp( element->text(0).ascii(), share)==0) { 226// if(strcmp( element->text(0).ascii(), share)==0) {
217 parent = element; 227// parent = element;
218 found = true; 228// found = true;
219 } 229// }
220 element = element->nextSibling(); 230// element = element->nextSibling();
221 } 231// }
222 232
223 if(!found) { 233// if(!found) {
224 element = new QListViewItem(ListViewScan,share); 234// element = new QListViewItem(ListViewScan,share);
225 element->setOpen(true); 235// element->setOpen(true);
226 parent=element; 236// parent=element;
227 } 237// }
228 } else { 238// } else {
229 element = new QListViewItem(ListViewScan,share); 239// element = new QListViewItem(ListViewScan,share);
230 element->setOpen(true); 240// element->setOpen(true);
231 top_element = element; 241// top_element = element;
232 parent = element; 242// parent = element;
233 } 243// }
234 } 244// }
235 } 245// }
236 246
237 TextViewOutput->append("\n\n============================================\n"); 247 TextViewOutput->append("\n\n============================================\n");
238 LScan->setText(""); 248 LScan->setText("");
239 scanning = false; 249 scanning = false;
240} 250}
241 251
242void Qsmb::DoIt() 252void Qsmb::DoIt()
243{ 253{
244 QListViewItem *element; 254 QListViewItem *element;
245 element = ListViewScan->selectedItem(); 255 element = ListViewScan->selectedItem();
246 if(!element) { 256 if(!element) {
247 QMessageBox::warning(this, tr("Error!!"),tr("<p><b>No</b> share selected!!</p>")); 257 QMessageBox::warning(this, tr("Error!!"),tr("<p><b>No</b> share selected!!</p>"));
@@ -259,37 +269,24 @@ void Qsmb::DoIt()
259 QString cmd2; 269 QString cmd2;
260 char result[256]; 270 char result[256];
261// QString result; 271// QString result;
262 QString text = mountpt->currentText(); 272 QString text = mountpt->currentText();
263 273
264 FILE *pipe,*pipe2; 274 FILE *pipe,*pipe2;
265 275
266 LScan->setText("Mounting..."); 276 LScan->setText("Mounting...");
267 qApp->processEvents(); 277 qApp->processEvents();
268 278
269 279
270 if(! QFileInfo(text).exists()) { 280 if(! QFileInfo(text).exists()) {
271// /* make sure mount exists! */
272
273// cmd = "mkdir -p "+ text;
274// owarn<<"cmd: "<< cmd << oendl;
275// if ((pipe2 = popen(cmd.latin1(), "r")) == NULL) {
276// snprintf(result, 256, "Error: Can't run %s", cmd.latin1());
277// TextViewOutput->append(result);
278// return;
279// }
280// while(fgets(result, 256, pipe2) != NULL) {
281// /* put result into TextViewOutput */
282// TextViewOutput->append(result);
283// }
284 QStringList ccmd; 281 QStringList ccmd;
285 ccmd << "mkdir"; 282 ccmd << "mkdir";
286 ccmd << "-p"; 283 ccmd << "-p";
287 ccmd << text; 284 ccmd << text;
288 285
289 owarn<<"cmd: "<< ccmd << oendl; 286 owarn<<"cmd: "<< ccmd << oendl;
290 runCommand(ccmd); 287 runCommand(ccmd);
291 } 288 }
292 289
293 290
294 strcpy(share,(const char *)element->text(0)); 291 strcpy(share,(const char *)element->text(0));
295 292