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

9.1-release9.2-releasereleng/10.0releng/10.0.1
Last change on this file since 8901c47 was 8901c47, checked in by Kris Moore <kris@…>, 12 months ago

Update edit IP dialog to understand many of the new options in warden
backend

  • Property mode set to 100644
File size: 9.6 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  // Our buttons / slots
87  connect( checkIPv4, SIGNAL( clicked() ), this, SLOT( slotCheckChecks() ) );
88  connect( checkIPv4Bridge, SIGNAL( clicked() ), this, SLOT( slotCheckChecks() ) );
89  connect( checkIPv4Router, SIGNAL( clicked() ), this, SLOT( slotCheckChecks() ) );
90  connect( checkIPv6, SIGNAL( clicked() ), this, SLOT( slotCheckChecks() ) );
91  connect( checkIPv6Bridge, SIGNAL( clicked() ), this, SLOT( slotCheckChecks() ) );
92  connect( checkIPv6Router, SIGNAL( clicked() ), this, SLOT( slotCheckChecks() ) );
93
94  connect( pushSave, SIGNAL( clicked() ), this, SLOT( slotSaveClicked() ) );
95  connect( pushCancel, SIGNAL( clicked() ), this, SLOT( slotCancelClicked() ) );
96  connect( pushAdd, SIGNAL( clicked() ), this, SLOT( slotAddClicked() ) );
97  connect( pushRemove, SIGNAL( clicked() ), this, SLOT( slotRemClicked() ) );
98
99  slotCheckChecks();
100}
101
102void dialogEditIP::slotCheckChecks()
103{
104  lineIP->setEnabled(checkIPv4->isChecked());
105  lineIPBridge->setEnabled(checkIPv4Bridge->isChecked());
106  lineIPRouter->setEnabled(checkIPv4Router->isChecked());
107  lineIP6->setEnabled(checkIPv6->isChecked());
108  lineIP6Bridge->setEnabled(checkIPv6Bridge->isChecked());
109  lineIP6Router->setEnabled(checkIPv6Router->isChecked());
110
111}
112
113void dialogEditIP::slotCancelClicked()
114{
115   close();
116}
117
118bool dialogEditIP::sanityCheckSettings()
119{
120  if ( checkIPv4->isChecked() && ! checkValidBlock(lineIP->text(), QString("IPv4")) ) {
121        QMessageBox::critical(this, tr("Warden"), tr("Invalid IPv4 address!"), QMessageBox::Ok, QMessageBox::Ok);
122        return false;
123  }
124  if ( checkIPv4Bridge->isChecked() && ! checkValidBlock(lineIPBridge->text(), QString("IPv4")) ) {
125        QMessageBox::critical(this, tr("Warden"), tr("Invalid IPv4 bridge address!"), QMessageBox::Ok, QMessageBox::Ok);
126        return false;
127  }
128  if ( checkIPv4Router->isChecked() && ! checkValidBlock(lineIPRouter->text(), QString("IPv4")) ) {
129        QMessageBox::critical(this, tr("Warden"), tr("Invalid IPv4 router address!"), QMessageBox::Ok, QMessageBox::Ok);
130        return false;
131  }
132  if ( checkIPv6->isChecked() && ! checkValidBlock(lineIP6->text(), QString("IPv6")) ) {
133        QMessageBox::critical(this, tr("Warden"), tr("Invalid IPv6 address!"), QMessageBox::Ok, QMessageBox::Ok);
134        return false;
135  }
136  if ( checkIPv6Bridge->isChecked() && ! checkValidBlock(lineIP6Bridge->text(), QString("IPv6")) ) {
137        QMessageBox::critical(this, tr("Warden"), tr("Invalid IPv6 bridge address!"), QMessageBox::Ok, QMessageBox::Ok);
138        return false;
139  }
140  if ( checkIPv6Router->isChecked() && ! checkValidBlock(lineIP6Router->text(), QString("IPv6")) ) {
141        QMessageBox::critical(this, tr("Warden"), tr("Invalid IPv6 router address!"), QMessageBox::Ok, QMessageBox::Ok);
142        return false;
143  }
144
145  return true;
146}
147
148void dialogEditIP::slotSaveClicked()
149{
150   if ( sanityCheckSettings() )
151   {
152     saveSettings();
153     emit saved();
154     close();
155   }
156}
157
158void dialogEditIP::saveSettings()
159{
160  QString tmp;
161  QFile file;
162
163  // Start saving settings
164  file.setFileName( JailDir + "/." + jailName + ".meta/ipv4" );
165  if ( checkIPv4->isChecked() ) {
166    if ( file.open( QIODevice::WriteOnly ) ) {
167       QTextStream stream( &file ); tmp = lineIP->text();
168       if (tmp.indexOf("/") == -1)
169         tmp = tmp + "/24"; 
170       stream << tmp;
171       file.close();
172    }
173  } else {
174    file.remove();
175  }
176
177  file.setFileName( JailDir + "/." + jailName + ".meta/bridge-ipv4" );
178  if ( checkIPv4Bridge->isChecked() ) {
179    if ( file.open( QIODevice::WriteOnly ) ) {
180       QTextStream stream( &file ); tmp = lineIPBridge->text();
181       if (tmp.indexOf("/") == -1)
182         tmp = tmp + "/24"; 
183       stream << tmp;
184       file.close();
185    }
186  } else {
187    file.remove();
188  }
189
190  file.setFileName( JailDir + "/." + jailName + ".meta/defaultrouter-ipv4" );
191  if ( checkIPv4Router->isChecked() ) {
192    if ( file.open( QIODevice::WriteOnly ) ) {
193       QTextStream stream( &file ); tmp = lineIPRouter->text();
194       if (tmp.indexOf("/") == -1)
195         tmp = tmp + "/24"; 
196       stream << tmp;
197       file.close();
198    }
199  } else {
200    file.remove();
201  }
202
203  file.setFileName( JailDir + "/." + jailName + ".meta/ipv6" );
204  if ( checkIPv6->isChecked() ) {
205    if ( file.open( QIODevice::WriteOnly ) ) {
206       QTextStream stream( &file ); tmp = lineIP6->text();
207       if (tmp.indexOf("/") == -1)
208         tmp = tmp + "/64"; 
209       stream << tmp;
210       file.close();
211    }
212  } else {
213    file.remove();
214  }
215
216  file.setFileName( JailDir + "/." + jailName + ".meta/bridge-ipv6" );
217  if ( checkIPv6Bridge->isChecked() ) {
218    if ( file.open( QIODevice::WriteOnly ) ) {
219       QTextStream stream( &file ); tmp = lineIP6Bridge->text();
220       if (tmp.indexOf("/") == -1)
221         tmp = tmp + "/64"; 
222       stream << tmp;
223       file.close();
224    }
225  } else {
226    file.remove();
227  }
228
229  file.setFileName( JailDir + "/." + jailName + ".meta/defaultrouter-ipv6" );
230  if ( checkIPv6Router->isChecked() ) {
231    if ( file.open( QIODevice::WriteOnly ) ) {
232       QTextStream stream( &file ); tmp = lineIP6Router->text();
233       if (tmp.indexOf("/") == -1)
234         tmp = tmp + "/64"; 
235       stream << tmp;
236       file.close();
237    }
238  } else {
239    file.remove();
240  }
241
242        /*
243        QStringList IPs;
244        for ( int i=0; i<listIP->count() ; i++)
245                IPs << listIP->item(i)->text();
246
247        qDebug() << "Updating IPs...";
248        QProcess ipcmd;
249        if ( IPs.count() == 0 )
250          ipcmd.start(QString("warden"), QStringList() << "set" << "ip" << wardenIP << "" );
251        else
252          ipcmd.start(QString("warden"), QStringList() << "set" << "ip" << wardenIP << IPs.join(",") );
253
254        setEnabled(false);
255        ipcmd.waitForFinished(1000);
256        while ( ipcmd.state() != QProcess::NotRunning ) {
257                ipcmd.waitForFinished(100);
258                QCoreApplication::processEvents();
259        }
260        */
261       
262}
263
264void dialogEditIP::slotAddClicked()
265{
266        bool ok;
267        QString url = QInputDialog::getText(this, tr("Add IP"),
268                                        tr("IP Address:"), QLineEdit::Normal,
269                                        QString(), &ok);
270        if ( ok ) {
271          if ( pcbsd::Utils::validateIPV4(url) || pcbsd::Utils::validateIPV6(url) )
272            listIP->addItem(url);
273          else
274            QMessageBox::critical(this, tr("Warden"), \
275                                tr("Please enter a valid IPV4 or IPV6 address!"), \
276                                QMessageBox::Ok, \
277                                QMessageBox::Ok);
278        }
279}
280
281bool dialogEditIP::checkValidBlock(QString block, QString type)
282{
283   QString url = block;
284
285   // Strip off the /24 part
286   if ( url.indexOf("/") != -1 )
287      url.truncate(url.indexOf("/"));
288
289   if ( type == "IPv4" ) {
290      if ( ! pcbsd::Utils::validateIPV4(url) )
291        return false;
292
293   } else {
294      if ( ! pcbsd::Utils::validateIPV6(url) )
295        return false;
296
297   }
298
299   return true;
300}
301
302void dialogEditIP::slotRemClicked()
303{
304        if ( ! listIP->currentItem() )
305                return;
306
307        delete listIP->currentItem();
308}
Note: See TracBrowser for help on using the repository browser.