source: src-qt4/warden-gui/dialogEditIP.cpp @ 1620346

9.1-release9.2-releasereleng/10.0releng/10.0.1releng/10.0.2releng/10.0.3releng/10.1
Last change on this file since 1620346 was 1620346, checked in by Kris Moore <kris@…>, 21 months ago

Initial import of PC-BSD /current/ SVN repo

  • Property mode set to 100644
File size: 13.5 KB
Line 
1/****************************************************************************
2** ui.h extension file, included from the uic-generated form implementation.
3**
4** If you want to add, delete, or rename functions or slots, use
5** Qt Designer to update this file, preserving your code.
6**
7** You should not define a constructor or destructor in this file.
8** Instead, write your code in functions called init() and destroy().
9** These will automatically be called by the form's constructor and
10** destructor.
11*****************************************************************************/
12// QT Includes
13#include <QInputDialog>
14#include <QProcess>
15#include <QString>
16#include <QFile>
17#include <QFileDialog>
18#include <QMessageBox>
19#include <QDebug>
20#include "pcbsd-utils.h"
21
22// Local Includes
23#include "dialogEditIP.h"
24
25void dialogEditIP::programInit(QString name)
26{
27  JailDir = pcbsd::Utils::getValFromPCConf("/usr/local/etc/warden.conf", "JDIR");
28  jailName = name;
29  QString tmp;
30
31  // Lets start loading IP addresses
32  QFile file( JailDir + "/." + jailName + ".meta/ipv4" );
33  if ( file.exists() && file.open( QIODevice::ReadOnly ) ) {
34     QTextStream stream( &file ); tmp=""; tmp = stream.readLine();
35     lineIP->setText(tmp);
36     if ( ! tmp.isEmpty() )
37        checkIPv4->setChecked(true);
38     file.close();
39  }
40
41  file.setFileName( JailDir + "/." + jailName + ".meta/bridge-ipv4" );
42  if ( file.exists() && file.open( QIODevice::ReadOnly ) ) {
43     QTextStream stream( &file ); tmp=""; tmp = stream.readLine();
44     lineIPBridge->setText(tmp);
45     if ( ! tmp.isEmpty() )
46        checkIPv4Bridge->setChecked(true);
47     file.close();
48  }
49
50  file.setFileName( JailDir + "/." + jailName + ".meta/defaultrouter-ipv4" );
51  if ( file.exists() && file.open( QIODevice::ReadOnly ) ) {
52     QTextStream stream( &file ); tmp=""; tmp = stream.readLine();
53     lineIPRouter->setText(tmp);
54     if ( ! tmp.isEmpty() )
55        checkIPv4Router->setChecked(true);
56     file.close();
57  }
58
59  file.setFileName( JailDir + "/." + jailName + ".meta/ipv6" );
60  if ( file.exists() && file.open( QIODevice::ReadOnly ) ) {
61     QTextStream stream( &file ); tmp=""; tmp = stream.readLine();
62     lineIP6->setText(tmp);
63     if ( ! tmp.isEmpty() )
64        checkIPv6->setChecked(true);
65     file.close();
66  }
67
68  file.setFileName( JailDir + "/." + jailName + ".meta/bridge-ipv6" );
69  if ( file.exists() && file.open( QIODevice::ReadOnly ) ) {
70     QTextStream stream( &file ); tmp=""; tmp = stream.readLine();
71     lineIP6Bridge->setText(tmp);
72     if ( ! tmp.isEmpty() )
73        checkIPv6Bridge->setChecked(true);
74     file.close();
75  }
76
77  file.setFileName( JailDir + "/." + jailName + ".meta/defaultrouter-ipv6" );
78  if ( file.exists() && file.open( QIODevice::ReadOnly ) ) {
79     QTextStream stream( &file ); tmp=""; tmp = stream.readLine();
80     lineIP6Router->setText(tmp);
81     if ( ! tmp.isEmpty() )
82        checkIPv6Router->setChecked(true);
83     file.close();
84  }
85
86  file.setFileName( JailDir + "/." + jailName + ".meta/alias-ipv4" );
87  if ( file.exists() && file.open( QIODevice::ReadOnly ) ) {
88     QTextStream stream( &file ); 
89     while ( ! file.atEnd() )
90       IPv4Alias << stream.readLine();
91     file.close();
92  }
93
94  file.setFileName( JailDir + "/." + jailName + ".meta/alias-bridge-ipv4" );
95  if ( file.exists() && file.open( QIODevice::ReadOnly ) ) {
96     QTextStream stream( &file ); 
97     while ( ! file.atEnd() )
98       IPv4AliasBridge << stream.readLine();
99     file.close();
100  }
101
102  file.setFileName( JailDir + "/." + jailName + ".meta/alias-ipv6" );
103  if ( file.exists() && file.open( QIODevice::ReadOnly ) ) {
104     QTextStream stream( &file ); 
105     while ( ! file.atEnd() )
106       IPv6Alias << stream.readLine();
107     file.close();
108  }
109
110  file.setFileName( JailDir + "/." + jailName + ".meta/alias-bridge-ipv6" );
111  if ( file.exists() && file.open( QIODevice::ReadOnly ) ) {
112     QTextStream stream( &file ); 
113     while ( ! file.atEnd() )
114       IPv6AliasBridge << stream.readLine();
115     file.close();
116  }
117
118  // Our buttons / slots
119  connect( checkIPv4, SIGNAL( clicked() ), this, SLOT( slotCheckChecks() ) );
120  connect( checkIPv4Bridge, SIGNAL( clicked() ), this, SLOT( slotCheckChecks() ) );
121  connect( checkIPv4Router, SIGNAL( clicked() ), this, SLOT( slotCheckChecks() ) );
122  connect( checkIPv6, SIGNAL( clicked() ), this, SLOT( slotCheckChecks() ) );
123  connect( checkIPv6Bridge, SIGNAL( clicked() ), this, SLOT( slotCheckChecks() ) );
124  connect( checkIPv6Router, SIGNAL( clicked() ), this, SLOT( slotCheckChecks() ) );
125
126  connect( comboIPType, SIGNAL( currentIndexChanged(int) ), this, SLOT( slotComboIPChanged() ) );
127
128  connect( pushSave, SIGNAL( clicked() ), this, SLOT( slotSaveClicked() ) );
129  connect( pushCancel, SIGNAL( clicked() ), this, SLOT( slotCancelClicked() ) );
130  connect( pushAdd, SIGNAL( clicked() ), this, SLOT( slotAddClicked() ) );
131  connect( pushRemove, SIGNAL( clicked() ), this, SLOT( slotRemClicked() ) );
132
133  slotCheckChecks();
134  slotComboIPChanged();
135}
136
137void dialogEditIP::slotComboIPChanged()
138{
139   QStringList curList;
140
141   // IPv4 Aliases
142   if ( comboIPType->currentIndex() == 0 )
143      curList = IPv4Alias;
144
145   // IPv4 Bridge Aliases
146   if ( comboIPType->currentIndex() == 1 )
147      curList = IPv4AliasBridge;
148
149   // IPv6 Aliases
150   if ( comboIPType->currentIndex() == 2 )
151      curList = IPv6Alias;
152
153   // IPv6 Bridge Aliases
154   if ( comboIPType->currentIndex() == 3 )
155      curList = IPv6AliasBridge;
156
157   listIP->clear();
158   for (int i = 0; i < curList.size(); ++i)
159          listIP->addItem(curList.at(i));
160
161}
162
163void dialogEditIP::slotCheckChecks()
164{
165  lineIP->setEnabled(checkIPv4->isChecked());
166  lineIPBridge->setEnabled(checkIPv4Bridge->isChecked());
167  lineIPRouter->setEnabled(checkIPv4Router->isChecked());
168  lineIP6->setEnabled(checkIPv6->isChecked());
169  lineIP6Bridge->setEnabled(checkIPv6Bridge->isChecked());
170  lineIP6Router->setEnabled(checkIPv6Router->isChecked());
171
172}
173
174void dialogEditIP::slotCancelClicked()
175{
176   close();
177}
178
179bool dialogEditIP::sanityCheckSettings()
180{
181  if ( checkIPv4->isChecked() && ! checkValidBlock(lineIP->text(), QString("IPv4")) ) {
182        QMessageBox::critical(this, tr("Warden"), tr("Invalid IPv4 address!"), QMessageBox::Ok, QMessageBox::Ok);
183        return false;
184  }
185  if ( checkIPv4Bridge->isChecked() && ! checkValidBlock(lineIPBridge->text(), QString("IPv4")) ) {
186        QMessageBox::critical(this, tr("Warden"), tr("Invalid IPv4 bridge address!"), QMessageBox::Ok, QMessageBox::Ok);
187        return false;
188  }
189  if ( checkIPv4Router->isChecked() && ! checkValidBlock(lineIPRouter->text(), QString("IPv4")) ) {
190        QMessageBox::critical(this, tr("Warden"), tr("Invalid IPv4 router address!"), QMessageBox::Ok, QMessageBox::Ok);
191        return false;
192  }
193  if ( checkIPv6->isChecked() && ! checkValidBlock(lineIP6->text(), QString("IPv6")) ) {
194        QMessageBox::critical(this, tr("Warden"), tr("Invalid IPv6 address!"), QMessageBox::Ok, QMessageBox::Ok);
195        return false;
196  }
197  if ( checkIPv6Bridge->isChecked() && ! checkValidBlock(lineIP6Bridge->text(), QString("IPv6")) ) {
198        QMessageBox::critical(this, tr("Warden"), tr("Invalid IPv6 bridge address!"), QMessageBox::Ok, QMessageBox::Ok);
199        return false;
200  }
201  if ( checkIPv6Router->isChecked() && ! checkValidBlock(lineIP6Router->text(), QString("IPv6")) ) {
202        QMessageBox::critical(this, tr("Warden"), tr("Invalid IPv6 router address!"), QMessageBox::Ok, QMessageBox::Ok);
203        return false;
204  }
205
206  return true;
207}
208
209void dialogEditIP::slotSaveClicked()
210{
211   if ( sanityCheckSettings() )
212   {
213     saveSettings();
214     emit saved();
215     close();
216   }
217}
218
219void dialogEditIP::saveSettings()
220{
221  QString tmp;
222  QFile file;
223
224  // Start saving settings
225  file.setFileName( JailDir + "/." + jailName + ".meta/alias-ipv4" );
226  if ( ! IPv4Alias.isEmpty() ) {
227    if ( file.open( QIODevice::WriteOnly ) ) {
228       QTextStream stream( &file );
229       for (int i = 0; i < IPv4Alias.size(); ++i)
230         stream << IPv4Alias.at(i);
231       file.close();
232    }
233  } else {
234    file.remove();
235  }
236
237  file.setFileName( JailDir + "/." + jailName + ".meta/alias-bridge-ipv4" );
238  if ( ! IPv4AliasBridge.isEmpty() ) {
239    if ( file.open( QIODevice::WriteOnly ) ) {
240       QTextStream stream( &file );
241       for (int i = 0; i < IPv4AliasBridge.size(); ++i)
242         stream << IPv4AliasBridge.at(i);
243       file.close();
244    }
245  } else {
246    file.remove();
247  }
248
249  file.setFileName( JailDir + "/." + jailName + ".meta/alias-ipv6" );
250  if ( ! IPv6Alias.isEmpty() ) {
251    if ( file.open( QIODevice::WriteOnly ) ) {
252       QTextStream stream( &file );
253       for (int i = 0; i < IPv6Alias.size(); ++i)
254         stream << IPv6Alias.at(i);
255       file.close();
256    }
257  } else {
258    file.remove();
259  }
260
261  file.setFileName( JailDir + "/." + jailName + ".meta/alias-bridge-ipv6" );
262  if ( ! IPv6AliasBridge.isEmpty() ) {
263    if ( file.open( QIODevice::WriteOnly ) ) {
264       QTextStream stream( &file );
265       for (int i = 0; i < IPv6AliasBridge.size(); ++i)
266         stream << IPv6AliasBridge.at(i);
267       file.close();
268    }
269  } else {
270    file.remove();
271  }
272
273  file.setFileName( JailDir + "/." + jailName + ".meta/ipv4" );
274  if ( checkIPv4->isChecked() ) {
275    if ( file.open( QIODevice::WriteOnly ) ) {
276       QTextStream stream( &file ); tmp = lineIP->text();
277       if (tmp.indexOf("/") == -1)
278         tmp = tmp + "/24"; 
279       stream << tmp;
280       file.close();
281    }
282  } else {
283    file.remove();
284  }
285
286  file.setFileName( JailDir + "/." + jailName + ".meta/bridge-ipv4" );
287  if ( checkIPv4Bridge->isChecked() ) {
288    if ( file.open( QIODevice::WriteOnly ) ) {
289       QTextStream stream( &file ); tmp = lineIPBridge->text();
290       if (tmp.indexOf("/") == -1)
291         tmp = tmp + "/24"; 
292       stream << tmp;
293       file.close();
294    }
295  } else {
296    file.remove();
297  }
298
299  file.setFileName( JailDir + "/." + jailName + ".meta/defaultrouter-ipv4" );
300  if ( checkIPv4Router->isChecked() ) {
301    if ( file.open( QIODevice::WriteOnly ) ) {
302       QTextStream stream( &file ); tmp = lineIPRouter->text();
303       if (tmp.indexOf("/") == -1)
304         tmp = tmp + "/24"; 
305       stream << tmp;
306       file.close();
307    }
308  } else {
309    file.remove();
310  }
311
312  file.setFileName( JailDir + "/." + jailName + ".meta/ipv6" );
313  if ( checkIPv6->isChecked() ) {
314    if ( file.open( QIODevice::WriteOnly ) ) {
315       QTextStream stream( &file ); tmp = lineIP6->text();
316       if (tmp.indexOf("/") == -1)
317         tmp = tmp + "/64"; 
318       stream << tmp;
319       file.close();
320    }
321  } else {
322    file.remove();
323  }
324
325  file.setFileName( JailDir + "/." + jailName + ".meta/bridge-ipv6" );
326  if ( checkIPv6Bridge->isChecked() ) {
327    if ( file.open( QIODevice::WriteOnly ) ) {
328       QTextStream stream( &file ); tmp = lineIP6Bridge->text();
329       if (tmp.indexOf("/") == -1)
330         tmp = tmp + "/64"; 
331       stream << tmp;
332       file.close();
333    }
334  } else {
335    file.remove();
336  }
337
338  file.setFileName( JailDir + "/." + jailName + ".meta/defaultrouter-ipv6" );
339  if ( checkIPv6Router->isChecked() ) {
340    if ( file.open( QIODevice::WriteOnly ) ) {
341       QTextStream stream( &file ); tmp = lineIP6Router->text();
342       if (tmp.indexOf("/") == -1)
343         tmp = tmp + "/64"; 
344       stream << tmp;
345       file.close();
346    }
347  } else {
348    file.remove();
349  }
350
351        /*
352        QStringList IPs;
353        for ( int i=0; i<listIP->count() ; i++)
354                IPs << listIP->item(i)->text();
355
356        qDebug() << "Updating IPs...";
357        QProcess ipcmd;
358        if ( IPs.count() == 0 )
359          ipcmd.start(QString("warden"), QStringList() << "set" << "ip" << wardenIP << "" );
360        else
361          ipcmd.start(QString("warden"), QStringList() << "set" << "ip" << wardenIP << IPs.join(",") );
362
363        setEnabled(false);
364        ipcmd.waitForFinished(1000);
365        while ( ipcmd.state() != QProcess::NotRunning ) {
366                ipcmd.waitForFinished(100);
367                QCoreApplication::processEvents();
368        }
369        */
370       
371}
372
373void dialogEditIP::slotAddClicked()
374{
375   bool ok;
376   QString address = QInputDialog::getText(this, tr("Add IP"),
377                        tr("IP Address:"), QLineEdit::Normal,
378                        QString(), &ok);
379   if ( ! ok )
380      return;
381
382   if ( ! checkValidBlock(address, "IPv4") || checkValidBlock(address, "IPv6") )
383      QMessageBox::critical(this, tr("Warden"), \
384                                tr("Please enter a valid IPV4 or IPV6 address!"), \
385                                QMessageBox::Ok, \
386                                QMessageBox::Ok);
387
388   // IPv4 Aliases
389   if ( comboIPType->currentIndex() == 0 ) {
390      if ( address.indexOf("/") == -1 ) 
391         address = address + "/24";
392      IPv4Alias << address;
393      listIP->addItem(address);
394   }
395
396   // IPv4 Bridge Aliases
397   if ( comboIPType->currentIndex() == 1 ) {
398      if ( address.indexOf("/") == -1 ) 
399         address = address + "/24";
400      IPv4AliasBridge << address;
401      listIP->addItem(address);
402   }
403
404   // IPv6 Aliases
405   if ( comboIPType->currentIndex() == 2 ) {
406      if ( address.indexOf("/") == -1 ) 
407         address = address + "/64";
408      IPv6Alias << address;
409      listIP->addItem(address);
410   }
411
412   // IPv6 Bridge Aliases
413   if ( comboIPType->currentIndex() == 3 ) {
414      if ( address.indexOf("/") == -1 ) 
415         address = address + "/64";
416      IPv6AliasBridge << address;
417      listIP->addItem(address);
418   }
419
420}
421
422bool dialogEditIP::checkValidBlock(QString block, QString type)
423{
424   QString url = block;
425
426   // Strip off the /24 part
427   if ( url.indexOf("/") != -1 )
428      url.truncate(url.indexOf("/"));
429
430   if ( type == "IPv4" ) {
431      if ( ! pcbsd::Utils::validateIPV4(url) )
432        return false;
433
434   } else {
435      if ( ! pcbsd::Utils::validateIPV6(url) )
436        return false;
437
438   }
439
440   return true;
441}
442
443void dialogEditIP::slotRemClicked()
444{
445        if ( ! listIP->currentItem() )
446                return;
447
448        delete listIP->currentItem();
449}
Note: See TracBrowser for help on using the repository browser.