Diffstat (limited to 'noncore/net/opie-smb/qsmb.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | noncore/net/opie-smb/qsmb.cpp | 151 |
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 | ||
89 | void* runitm(void* arg) | 89 | void* 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 | ||
96 | void Qsmb::scan() | 96 | void 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 | ||
151 | void Qsmb::hostSelected(int index) | 150 | void 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 | ||
242 | void Qsmb::DoIt() | 252 | void 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 | ||