summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/settings/security/multiauthconfig.cpp16
-rw-r--r--core/settings/security/security.cpp18
2 files changed, 17 insertions, 17 deletions
diff --git a/core/settings/security/multiauthconfig.cpp b/core/settings/security/multiauthconfig.cpp
index 535352a..ff11e49 100644
--- a/core/settings/security/multiauthconfig.cpp
+++ b/core/settings/security/multiauthconfig.cpp
@@ -15,687 +15,687 @@
15#include <qdir.h> 15#include <qdir.h>
16#include <qpe/qlibrary.h> 16#include <qpe/qlibrary.h>
17#include <qpe/qpeapplication.h> 17#include <qpe/qpeapplication.h>
18 18
19 19
20using Opie::Security::MultiauthPluginInterface; 20using Opie::Security::MultiauthPluginInterface;
21using Opie::Security::MultiauthPluginObject; 21using Opie::Security::MultiauthPluginObject;
22using Opie::Security::MultiauthConfigWidget; 22using Opie::Security::MultiauthConfigWidget;
23/// keeps information about MultiauthPluginObject plugins 23/// keeps information about MultiauthPluginObject plugins
24struct MultiauthPlugin { 24struct MultiauthPlugin {
25 MultiauthPlugin() : library( 0 ), iface( 0 ), pluginObject( 0 ) {} 25 MultiauthPlugin() : library( 0 ), iface( 0 ), pluginObject( 0 ) {}
26 /// plugin file 26 /// plugin file
27 QLibrary *library; 27 QLibrary *library;
28 /// the plugin object interface 28 /// the plugin object interface
29 QInterfacePtr<MultiauthPluginInterface> iface; 29 QInterfacePtr<MultiauthPluginInterface> iface;
30 /// the plugin object itself 30 /// the plugin object itself
31 MultiauthPluginObject *pluginObject; 31 MultiauthPluginObject *pluginObject;
32 /// name of the plugin file 32 /// name of the plugin file
33 QString name; 33 QString name;
34 /// should the plugin be launched during authentication or not 34 /// should the plugin be launched during authentication or not
35 bool active; 35 bool active;
36 /// order of the plugin, in the pluginListWidget and during authentication 36 /// order of the plugin, in the pluginListWidget and during authentication
37 int pos; 37 int pos;
38}; 38};
39 39
40/// list of available MultiauthPlugin objects 40/// list of available MultiauthPlugin objects
41static QValueList<MultiauthPlugin> pluginList; 41static QValueList<MultiauthPlugin> pluginList;
42 42
43 43
44/// extension of QToolButton that adds signals, icons and stuff (taken from todayconfig.cpp) 44/// extension of QToolButton that adds signals, icons and stuff (taken from todayconfig.cpp)
45class ToolButton : public QToolButton { 45class ToolButton : public QToolButton {
46 46
47 public: 47 public:
48 ToolButton( QWidget *parent, const char *name, const QString& icon, QObject *handler, const QString& slot, bool t = FALSE ) 48 ToolButton( QWidget *parent, const char *name, const QString& icon, QObject *handler, const QString& slot, bool t = FALSE )
49 : QToolButton( parent, name ) { 49 : QToolButton( parent, name ) {
50 setPixmap( Resource::loadPixmap( icon ) ); 50 setPixmap( Resource::loadPixmap( icon ) );
51 setAutoRaise( TRUE ); 51 setAutoRaise( TRUE );
52 setFocusPolicy( QWidget::NoFocus ); 52 setFocusPolicy( QWidget::NoFocus );
53 setToggleButton( t ); 53 setToggleButton( t );
54 connect( this, t ? SIGNAL( toggled(bool) ) : SIGNAL( clicked() ), handler, slot ); 54 connect( this, t ? SIGNAL( toggled(bool) ) : SIGNAL( clicked() ), handler, slot );
55 } 55 }
56}; 56};
57 57
58MultiauthGeneralConfig::MultiauthGeneralConfig(QWidget * parent, const char * name = "general Opie-multiauthentication config widget") 58MultiauthGeneralConfig::MultiauthGeneralConfig(QWidget * parent, const char * name = "general Opie-multiauthentication config widget")
59 : QWidget(parent, name), onStart(0), onResume(0), nbSuccessMin(0) 59 : QWidget(parent, name), onStart(0), onResume(0), nbSuccessMin(0)
60{ 60{
61 QVBoxLayout *vb = new QVBoxLayout(this); 61 QVBoxLayout *vb = new QVBoxLayout(this);
62 vb->setSpacing(11); 62 vb->setSpacing(11);
63 vb->setMargin(11); 63 vb->setMargin(11);
64 vb->setAlignment( Qt::AlignTop ); 64 vb->setAlignment( Qt::AlignTop );
65 65
66 QGroupBox *lockBox = new QGroupBox(0, Qt::Vertical, tr("When to lock Opie"), this, "lock box"); 66 QGroupBox *lockBox = new QGroupBox(0, Qt::Vertical, tr("When to lock Opie"), this, "lock box");
67 vb->addWidget(lockBox); 67 vb->addWidget(lockBox);
68 QGridLayout *boxLayout = new QGridLayout( lockBox->layout() ); 68 QGridLayout *boxLayout = new QGridLayout( lockBox->layout() );
69 onStart = new QCheckBox( tr( "on Opie start" ), lockBox, "lock on opie start"); 69 onStart = new QCheckBox( tr( "on Opie start" ), lockBox, "lock on opie start");
70 onResume = new QCheckBox( tr( "on Opie resume" ), lockBox, "lock on opie resume"); 70 onResume = new QCheckBox( tr( "on Opie resume" ), lockBox, "lock on opie resume");
71 boxLayout->addWidget(onStart, 0, 0); 71 boxLayout->addWidget(onStart, 0, 0);
72 boxLayout->addWidget(onResume, 0, 1); 72 boxLayout->addWidget(onResume, 0, 1);
73 73
74 QGroupBox *nbBox = new QGroupBox(0, Qt::Vertical, tr("Multiple plugins authentication"), this, "nb box"); 74 QGroupBox *nbBox = new QGroupBox(0, Qt::Vertical, tr("Multiple plugins authentication"), this, "nb box");
75 vb->addWidget(nbBox); 75 vb->addWidget(nbBox);
76 QGridLayout *nbBoxLayout = new QGridLayout( nbBox->layout() ); 76 QGridLayout *nbBoxLayout = new QGridLayout( nbBox->layout() );
77 nbSuccessMin = new QSpinBox(nbBox); 77 nbSuccessMin = new QSpinBox(nbBox);
78 QLabel *lNbSuccessMin = new QLabel( tr( "Required successes" ), nbBox); 78 QLabel *lNbSuccessMin = new QLabel( tr( "Required successes" ), nbBox);
79 nbBoxLayout->addWidget(nbSuccessMin, 0, 0); 79 nbBoxLayout->addWidget(nbSuccessMin, 0, 0);
80 nbBoxLayout->addWidget(lNbSuccessMin, 0, 1); 80 nbBoxLayout->addWidget(lNbSuccessMin, 0, 1);
81 nbSuccessMin->setMinValue(1); // the max value is defined in MultiauthConfig constructor 81 nbSuccessMin->setMinValue(1); // the max value is defined in MultiauthConfig constructor
82 82
83 QGroupBox *devBox = new QGroupBox(0, Qt::Vertical, tr("Debug options"), this, "dev box"); 83 QGroupBox *devBox = new QGroupBox(0, Qt::Vertical, tr("Debug options"), this, "dev box");
84 vb->addWidget(devBox); 84 vb->addWidget(devBox);
85 QGridLayout *devBoxLayout = new QGridLayout( devBox->layout() ); 85 QGridLayout *devBoxLayout = new QGridLayout( devBox->layout() );
86 noProtectConfig = new QCheckBox( tr("Don't protect this config screen"), devBox, "don't protect config"); 86 noProtectConfig = new QCheckBox( tr("Don't protect this config screen"), devBox, "don't protect config");
87 explanScreens = new QCheckBox( tr("Show explanatory screens"), devBox, "Show explan. screens"); 87 explanScreens = new QCheckBox( tr("Show explanatory screens"), devBox, "Show explan. screens");
88 allowBypass = new QCheckBox( tr("Allow to bypass authentication"), devBox, "AllowBypass"); 88 allowBypass = new QCheckBox( tr("Allow to bypass authentication"), devBox, "AllowBypass");
89 QLabel *logicNote = new QLabel( "<p>" + tr("Note: the third option implies the second one") + "</p>", devBox ); 89 QLabel *logicNote = new QLabel( "<p>" + tr("Note: the third option implies the second one") + "</p>", devBox );
90 devBoxLayout->addWidget(noProtectConfig, 0, 0); 90 devBoxLayout->addWidget(noProtectConfig, 0, 0);
91 devBoxLayout->addWidget(explanScreens, 1, 0); 91 devBoxLayout->addWidget(explanScreens, 1, 0);
92 devBoxLayout->addWidget(allowBypass, 2, 0); 92 devBoxLayout->addWidget(allowBypass, 2, 0);
93 devBoxLayout->addMultiCellWidget(logicNote, 3, 3, 0, 1); 93 devBoxLayout->addMultiCellWidget(logicNote, 3, 3, 0, 1);
94 94
95 connect( explanScreens, SIGNAL(toggled(bool)), this, SLOT(checkBypass()) ); 95 connect( explanScreens, SIGNAL(toggled(bool)), this, SLOT(checkBypass()) );
96 connect( allowBypass, SIGNAL(toggled(bool)), this, SLOT(checkScreens()) ); 96 connect( allowBypass, SIGNAL(toggled(bool)), this, SLOT(checkScreens()) );
97} 97}
98 98
99/// nothing to do 99/// nothing to do
100MultiauthGeneralConfig::~MultiauthGeneralConfig() 100MultiauthGeneralConfig::~MultiauthGeneralConfig()
101{} 101{}
102 102
103/// Be sure that explanScreens is checked if allowBypass is 103/// Be sure that explanScreens is checked if allowBypass is
104void MultiauthGeneralConfig::checkScreens() 104void MultiauthGeneralConfig::checkScreens()
105{ 105{
106 if ( (allowBypass->isChecked() == true) && (explanScreens->isChecked() == false) ) 106 if ( (allowBypass->isChecked() == true) && (explanScreens->isChecked() == false) )
107 explanScreens->setChecked(true); 107 explanScreens->setChecked(true);
108} 108}
109 109
110/// Be sure that allowBypass is not checked if explanScreens is not 110/// Be sure that allowBypass is not checked if explanScreens is not
111void MultiauthGeneralConfig::checkBypass() 111void MultiauthGeneralConfig::checkBypass()
112{ 112{
113 if ( (allowBypass->isChecked() == true) && (explanScreens->isChecked() == false) ) 113 if ( (allowBypass->isChecked() == true) && (explanScreens->isChecked() == false) )
114 allowBypass->setChecked(false); 114 allowBypass->setChecked(false);
115} 115}
116 116
117 117
118 118
119 119
120 120
121 121
122 122
123 123
124 124
125 125
126 126
127/// Builds and displays the Opie multi-authentication configuration dialog 127/// Builds and displays the Opie multi-authentication configuration dialog
128static void test_and_start() { 128static void test_and_start() {
129 Config pcfg("Security"); 129 Config pcfg("Security");
130 pcfg.setGroup( "Misc" ); 130 pcfg.setGroup( "Misc" );
131 bool protectConfigDialog = ! pcfg.readBoolEntry("noProtectConfig", true); 131 bool protectConfigDialog = ! pcfg.readBoolEntry("noProtectConfig", true);
132 132
133 if (protectConfigDialog && Opie::Security::Internal::runPlugins() != 0) { 133 if (protectConfigDialog && Opie::Security::Internal::runPlugins() != 0) {
134 owarn << "authentication failed, not showing opie-security" << oendl; 134 owarn << "authentication failed, not showing opie-security" << oendl;
135 exit( -1 ); 135 exit( -1 );
136 } 136 }
137} 137}
138 138
139 139
140 140
141MultiauthConfig::MultiauthConfig(QWidget* par, const char* w, WFlags f) 141MultiauthConfig::MultiauthConfig(QWidget* par, const char* w, WFlags f)
142 : QDialog(par, w, TRUE, f), 142 : QDialog(par, w, TRUE, f),
143 m_mainTW(0), m_pluginListView(0), m_pluginListWidget(0), 143 m_mainTW(0), m_pluginListView(0), m_pluginListWidget(0),
144 m_generalConfig(0), m_loginWidget(0), m_syncWidget(0), 144 m_generalConfig(0), m_loginWidget(0), m_syncWidget(0),
145 m_nbSuccessReq(0), m_plugins_changed(false) 145 m_nbSuccessReq(0), m_plugins_changed(false)
146{ 146{
147 /* Initializes the global configuration window 147 /* Initializes the global configuration window
148 */ 148 */
149 test_and_start(); 149 test_and_start();
150 150
151 setCaption( tr( "Security configuration" ) ); 151 setCaption( tr( "Security configuration" ) );
152 QVBoxLayout *layout = new QVBoxLayout( this ); 152 QVBoxLayout *layout = new QVBoxLayout( this );
153 m_mainTW = new Opie::Ui::OTabWidget( this ); 153 m_mainTW = new Opie::Ui::OTabWidget( this );
154 layout->addWidget(m_mainTW); 154 layout->addWidget(m_mainTW);
155 m_pluginListWidget = new QWidget(m_mainTW, "plugin list widget"); 155 m_pluginListWidget = new QWidget(m_mainTW, "plugin list widget");
156 QVBoxLayout * pluginListLayout = new QVBoxLayout(m_pluginListWidget); 156 QVBoxLayout * pluginListLayout = new QVBoxLayout(m_pluginListWidget);
157 pluginListLayout->setSpacing(6); 157 pluginListLayout->setSpacing(6);
158 pluginListLayout->setMargin(11); 158 pluginListLayout->setMargin(11);
159 QLabel * pluginListTitle = new QLabel( tr( "Load which plugins in what order:" ), m_pluginListWidget ); 159 QLabel * pluginListTitle = new QLabel( tr( "Load which plugins in what order:" ), m_pluginListWidget );
160 pluginListLayout->addWidget(pluginListTitle); 160 pluginListLayout->addWidget(pluginListTitle);
161 QHBox * pluginListHB = new QHBox(m_pluginListWidget); 161 QHBox * pluginListHB = new QHBox(m_pluginListWidget);
162 pluginListLayout->addWidget(pluginListHB); 162 pluginListLayout->addWidget(pluginListHB);
163 163
164 m_pluginListView = new QListView(pluginListHB); 164 m_pluginListView = new QListView(pluginListHB);
165 m_pluginListView->addColumn("PluginList"); 165 m_pluginListView->addColumn("PluginList");
166 m_pluginListView->header()->hide(); 166 m_pluginListView->header()->hide();
167 m_pluginListView->setSorting(-1); 167 m_pluginListView->setSorting(-1);
168 QWhatsThis::add(m_pluginListView, tr( "Check a checkbox to activate/deactivate a plugin or use the arrow buttons on the right to change the order they will appear in" )); 168 QWhatsThis::add(m_pluginListView, tr( "Check a checkbox to activate/deactivate a plugin or use the arrow buttons on the right to change the order they will appear in" ));
169 169
170 QVBox * pluginListVB = new QVBox(pluginListHB); 170 QVBox * pluginListVB = new QVBox(pluginListHB);
171 new ToolButton( pluginListVB, tr( "Move Up" ), "up", this , SLOT( moveSelectedUp() ) ); 171 new ToolButton( pluginListVB, tr( "Move Up" ), "up", this , SLOT( moveSelectedUp() ) );
172 new ToolButton( pluginListVB, tr( "Move Down" ), "down", this , SLOT( moveSelectedDown() ) ); 172 new ToolButton( pluginListVB, tr( "Move Down" ), "down", this , SLOT( moveSelectedDown() ) );
173 m_mainTW->addTab( m_pluginListWidget, "pass", tr( "plugins" ) ); 173 m_mainTW->addTab( m_pluginListWidget, "pass", tr( "plugins" ) );
174 174
175 connect ( m_pluginListView , SIGNAL( clicked ( QListViewItem * ) ), this, SLOT( pluginsChanged ( ) ) ); 175 connect ( m_pluginListView , SIGNAL( clicked ( QListViewItem * ) ), this, SLOT( pluginsChanged ( ) ) );
176 176
177 // general Opie multi-authentication configuration tab 177 // general Opie multi-authentication configuration tab
178 m_generalConfig = new MultiauthGeneralConfig(m_mainTW); 178 m_generalConfig = new MultiauthGeneralConfig(m_mainTW);
179 m_mainTW->addTab(m_generalConfig, "SettingsIcon", tr( "Authentication") ); 179 m_mainTW->addTab(m_generalConfig, "SettingsIcon", tr( "Authentication") );
180 180
181 // login settings page 181 // login settings page
182 m_loginWidget = new LoginBase(m_mainTW, "login config widget"); 182 m_loginWidget = new LoginBase(m_mainTW, "login config widget");
183 m_mainTW->addTab(m_loginWidget, "security/users", tr( "Login") ); 183 m_mainTW->addTab(m_loginWidget, "security/users", tr( "Login") );
184 184
185 // sync settings page 185 // sync settings page
186 m_syncWidget = new SyncBase( m_mainTW, "sync config widget" ); 186 m_syncWidget = new SyncBase( m_mainTW, "sync config widget" );
187 m_mainTW->addTab(m_syncWidget, "security/sync", tr( "Sync") ); 187 m_mainTW->addTab(m_syncWidget, "security/sync", tr( "Sync") );
188 188
189 // read the "Security" Config file and update our UI 189 // read the "Security" Config file and update our UI
190 readConfig(); 190 readConfig();
191 191
192 /* loads plugins configuration widgets in mainTW tabs and in pluginListView 192 /* loads plugins configuration widgets in mainTW tabs and in pluginListView
193 */ 193 */
194 194
195 loadPlugins(); 195 loadPlugins();
196 196
197 for ( int i = pluginList.count() - 1; i >= 0; i-- ) { 197 for ( int i = pluginList.count() - 1; i >= 0; i-- ) {
198 MultiauthPlugin plugin = pluginList[i]; 198 MultiauthPlugin plugin = pluginList[i];
199 199
200 // load the config widgets in the tabs 200 // load the config widgets in the tabs
201 // (configWidget will return 0l if there is no configuration GUI) 201 // (configWidget will return 0l if there is no configuration GUI)
202 MultiauthConfigWidget* widget = plugin.pluginObject->configWidget(m_mainTW); 202 MultiauthConfigWidget* widget = plugin.pluginObject->configWidget(m_mainTW);
203 if ( widget != 0l ) { 203 if ( widget != 0l ) {
204 odebug << "plugin " << plugin.name << " has a configuration widget" << oendl; 204 odebug << "plugin " << plugin.name << " has a configuration widget" << oendl;
205 configWidgetList.append(widget); 205 configWidgetList.append(widget);
206 m_mainTW->addTab( widget, plugin.pluginObject->pixmapNameConfig(), 206 m_mainTW->addTab( widget, plugin.pluginObject->pixmapNameConfig(),
207 plugin.pluginObject->pluginName() ); 207 plugin.pluginObject->pluginName() );
208 } 208 }
209 // set the order/activate tab 209 // set the order/activate tab
210 QPixmap icon = Resource::loadPixmap( plugin.pluginObject->pixmapNameWidget() ); 210 QPixmap icon = Resource::loadPixmap( plugin.pluginObject->pixmapNameWidget() );
211 QCheckListItem * item = new QCheckListItem(m_pluginListView, plugin.pluginObject->pluginName(), QCheckListItem::CheckBox ); 211 QCheckListItem * item = new QCheckListItem(m_pluginListView, plugin.pluginObject->pluginName(), QCheckListItem::CheckBox );
212 if ( !icon.isNull() ) { 212 if ( !icon.isNull() ) {
213 item->setPixmap( 0, icon ); 213 item->setPixmap( 0, icon );
214 } 214 }
215 if ( m_excludePlugins.find( plugin.name ) == m_excludePlugins.end() ) { 215 if ( m_excludePlugins.find( plugin.name ) == m_excludePlugins.end() ) {
216 item->setOn( TRUE ); 216 item->setOn( TRUE );
217 } 217 }
218 m_plugins[plugin.name] = item; 218 m_plugins[plugin.name] = item;
219 } 219 }
220 220
221 // set the first tab as default. 221 // set the first tab as default.
222 m_mainTW->setCurrentTab(m_pluginListWidget); 222 m_mainTW->setCurrentTab(m_pluginListWidget);
223 223
224 // put the number of plugins as the max number of req. auth. 224 // put the number of plugins as the max number of req. auth.
225 m_generalConfig->nbSuccessMin->setMaxValue( pluginList.count() ); 225 m_generalConfig->nbSuccessMin->setMaxValue( pluginList.count() );
226 226
227 showMaximized(); 227 showMaximized();
228} 228}
229 229
230/// nothing to do 230/// nothing to do
231MultiauthConfig::~MultiauthConfig() 231MultiauthConfig::~MultiauthConfig()
232{ 232{
233} 233}
234 234
235void MultiauthConfig::accept() { 235void MultiauthConfig::accept() {
236 writeConfig(); 236 writeConfig();
237 237
238 MultiauthConfigWidget* confWidget = 0; 238 MultiauthConfigWidget* confWidget = 0;
239 for ( confWidget = configWidgetList.first(); confWidget != 0; 239 for ( confWidget = configWidgetList.first(); confWidget != 0;
240 confWidget = configWidgetList.next() ) 240 confWidget = configWidgetList.next() )
241 confWidget->writeConfig(); 241 confWidget->writeConfig();
242 242
243 QDialog::accept(); 243 QDialog::accept();
244} 244}
245 245
246void MultiauthConfig::done( int r ) { 246void MultiauthConfig::done( int r ) {
247 QDialog::done( r ); 247 QDialog::done( r );
248 close(); 248 close();
249} 249}
250 250
251/// moves up the selected plugin 251/// moves up the selected plugin
252void MultiauthConfig::moveSelectedUp() 252void MultiauthConfig::moveSelectedUp()
253{ 253{
254 QListViewItem *item = m_pluginListView->selectedItem(); 254 QListViewItem *item = m_pluginListView->selectedItem();
255 if ( item && item->itemAbove() ) { 255 if ( item && item->itemAbove() ) {
256 item->itemAbove()->moveItem( item ); 256 item->itemAbove()->moveItem( item );
257 } 257 }
258} 258}
259 259
260/// moves down the selected plugin 260/// moves down the selected plugin
261void MultiauthConfig::moveSelectedDown() 261void MultiauthConfig::moveSelectedDown()
262{ 262{
263 QListViewItem *item = m_pluginListView->selectedItem(); 263 QListViewItem *item = m_pluginListView->selectedItem();
264 if ( item && item->itemBelow() ) { 264 if ( item && item->itemBelow() ) {
265 item->moveItem( item->itemBelow() ); 265 item->moveItem( item->itemBelow() );
266 } 266 }
267} 267}
268 268
269/// reads the <code>Security.conf</code> Config file, and updates parts of the user interface 269/// reads the <code>Security.conf</code> Config file, and updates parts of the user interface
270void MultiauthConfig::readConfig() 270void MultiauthConfig::readConfig()
271{ 271{
272 // pointer, so we release this Config when we want 272 // pointer, so we release this Config when we want
273 Config* pcfg = new Config("Security"); 273 Config* pcfg = new Config("Security");
274 pcfg->setGroup( "Misc" ); 274 pcfg->setGroup( "Misc" );
275 m_generalConfig->onStart->setChecked( pcfg->readBoolEntry( "onStart", false ) ); 275 m_generalConfig->onStart->setChecked( pcfg->readBoolEntry( "onStart", false ) );
276 m_generalConfig->onResume->setChecked( pcfg->readBoolEntry( "onResume", false ) ); 276 m_generalConfig->onResume->setChecked( pcfg->readBoolEntry( "onResume", false ) );
277 m_generalConfig->nbSuccessMin->setValue( pcfg->readNumEntry( "nbSuccessMin", 1 ) ); 277 m_generalConfig->nbSuccessMin->setValue( pcfg->readNumEntry( "nbSuccessMin", 1 ) );
278 m_generalConfig->noProtectConfig->setChecked( pcfg->readBoolEntry( "noProtectConfig", true) ); 278 m_generalConfig->noProtectConfig->setChecked( pcfg->readBoolEntry( "noProtectConfig", true) );
279 m_generalConfig->explanScreens->setChecked( pcfg->readBoolEntry( "explanScreens", true ) ); 279 m_generalConfig->explanScreens->setChecked( pcfg->readBoolEntry( "explanScreens", true ) );
280 m_generalConfig->allowBypass->setChecked( pcfg->readBoolEntry( "allowBypass", false ) ); 280 m_generalConfig->allowBypass->setChecked( pcfg->readBoolEntry( "allowBypass", false ) );
281 281
282 pcfg->setGroup( "Plugins" ); 282 pcfg->setGroup( "Plugins" );
283 m_excludePlugins = pcfg->readListEntry( "ExcludePlugins", ',' ); 283 m_excludePlugins = pcfg->readListEntry( "ExcludePlugins", ',' );
284 m_allPlugins = pcfg->readListEntry( "AllPlugins", ',' ); 284 m_allPlugins = pcfg->readListEntry( "AllPlugins", ',' );
285 285
286 /* Login and Sync stuff */ 286 /* Login and Sync stuff */
287 pcfg->setGroup("Sync"); 287 pcfg->setGroup("Sync");
288 int auth_peer = pcfg->readNumEntry("auth_peer",0xc0a88100);//new default 192.168.129.0/24 288 int auth_peer = pcfg->readNumEntry("auth_peer",0xc0a88100);//new default 192.168.129.0/24
289 int auth_peer_bits = pcfg->readNumEntry("auth_peer_bits",24); 289 int auth_peer_bits = pcfg->readNumEntry("auth_peer_bits",24);
290 290
291 pcfg->setGroup("SyncMode"); 291 pcfg->setGroup("SyncMode");
292 int mode = pcfg->readNumEntry("Mode",2); // Default to Sharp 292 int mode = pcfg->readNumEntry("Mode",2); // Default to Sharp
293 switch( mode ) { 293 switch( mode ) {
294 case 0x01: 294 case 0x01:
295 m_syncWidget->syncModeCombo->setCurrentItem( 0 ); 295 m_syncWidget->syncModeCombo->setCurrentItem( 0 );
296 break; 296 break;
297 case 0x02: 297 case 0x02:
298 default: 298 default:
299 m_syncWidget->syncModeCombo->setCurrentItem( 1 ); 299 m_syncWidget->syncModeCombo->setCurrentItem( 1 );
300 break; 300 break;
301 case 0x04: 301 case 0x04:
302 m_syncWidget->syncModeCombo->setCurrentItem( 2 ); 302 m_syncWidget->syncModeCombo->setCurrentItem( 2 );
303 break; 303 break;
304 } 304 }
305 /* 305 /*
306 cfg.setGroup("Remote"); 306 cfg.setGroup("Remote");
307 if ( telnetAvailable() ) 307 if ( telnetAvailable() )
308 telnet->setChecked(cfg.readEntry("allow_telnet")); 308 telnet->setChecked(cfg.readEntry("allow_telnet"));
309 else 309 else
310 telnet->hide(); 310 telnet->hide();
311 311
312 if ( sshAvailable() ) 312 if ( sshAvailable() )
313 ssh->setChecked(cfg.readEntry("allow_ssh")); 313 ssh->setChecked(cfg.readEntry("allow_ssh"));
314 else 314 else
315 ssh->hide(); 315 ssh->hide();
316 */ 316 */
317 317
318 // release the Config handler 318 // release the Config handler
319 delete pcfg; 319 delete pcfg;
320 // indeed, selectNet will open the config file... 320 // indeed, selectNet will open the config file...
321 selectNet(auth_peer,auth_peer_bits,TRUE); 321 selectNet(auth_peer,auth_peer_bits,TRUE);
322 322
323 connect( m_syncWidget->syncnet, SIGNAL(textChanged(const QString&)), 323 connect( m_syncWidget->syncnet, SIGNAL(textChanged(const QString&)),
324 this, SLOT(setSyncNet(const QString&))); 324 this, SLOT(setSyncNet(const QString&)));
325 325
326 326
327 327
328 QString configFile = QPEApplication::qpeDir() + "/etc/opie-login.conf"; 328 QString configFile = QPEApplication::qpeDir() + "/etc/opie-login.conf";
329 Config loginCfg(configFile,Config::File); 329 Config loginCfg(configFile,Config::File);
330 330
331 loginCfg.setGroup("General"); 331 loginCfg.setGroup("General");
332 autoLoginName=loginCfg.readEntry("AutoLogin",""); 332 autoLoginName=loginCfg.readEntry("AutoLogin","");
333 333
334 if (autoLoginName.stripWhiteSpace().isEmpty()) { 334 if (autoLoginName.stripWhiteSpace().isEmpty()) {
335 autoLogin=false; 335 autoLogin=false;
336 } else { 336 } else {
337 autoLogin=true; 337 autoLogin=true;
338 } 338 }
339 339
340 340
341 connect(m_loginWidget->autologinToggle, SIGNAL(toggled(bool)), this, SLOT(toggleAutoLogin(bool))); 341 connect(m_loginWidget->autologinToggle, SIGNAL(toggled(bool)), this, SLOT(toggleAutoLogin(bool)));
342 connect(m_loginWidget->userlist, SIGNAL(activated(int)), this, SLOT(changeLoginName(int))); 342 connect(m_loginWidget->userlist, SIGNAL(activated(int)), this, SLOT(changeLoginName(int)));
343 connect(m_syncWidget->restoredefaults,SIGNAL(clicked()), this, SLOT(restoreDefaults())); 343 connect(m_syncWidget->restoredefaults,SIGNAL(clicked()), this, SLOT(restoreDefaults()));
344 connect(m_syncWidget->deleteentry,SIGNAL(clicked()), this, SLOT(deleteListEntry())); 344 connect(m_syncWidget->deleteentry,SIGNAL(clicked()), this, SLOT(deleteListEntry()));
345 345
346 loadUsers(); 346 loadUsers();
347 updateGUI(); 347 updateGUI();
348 348
349} 349}
350 350
351void MultiauthConfig::writeConfig() 351void MultiauthConfig::writeConfig()
352{ 352{
353 Config* pcfg = new Config("Security"); 353 Config* pcfg = new Config("Security");
354 pcfg->setGroup( "Plugins" ); 354 pcfg->setGroup( "Plugins" );
355 QStringList exclude; 355 QStringList exclude;
356 QStringList include; 356 QStringList include;
357 QStringList allPlugins; 357 QStringList allPlugins;
358 358
359 QListViewItemIterator list_it( m_pluginListView ); 359 QListViewItemIterator list_it( m_pluginListView );
360 360
361 // this makes sure the names get saved in the order selected 361 // this makes sure the names get saved in the order selected
362 for ( ; list_it.current(); ++list_it ) { 362 for ( ; list_it.current(); ++list_it ) {
363 QMap <QString, QCheckListItem *>::Iterator it; 363 QMap <QString, QCheckListItem *>::Iterator it;
364 for ( it = m_plugins.begin(); it != m_plugins. end (); ++it ) { 364 for ( it = m_plugins.begin(); it != m_plugins. end (); ++it ) {
365 if ( list_it.current() == (*it) && !(*it)-> isOn () ) { 365 if ( list_it.current() == (*it) && !(*it)-> isOn () ) {
366 exclude << it.key(); 366 exclude << it.key();
367 } else if ( list_it.current() == (*it) && (*it)-> isOn () ){ 367 } else if ( list_it.current() == (*it) && (*it)-> isOn () ){
368 include << it.key(); 368 include << it.key();
369 } 369 }
370 if ( list_it.current() == (*it) ) { 370 if ( list_it.current() == (*it) ) {
371 allPlugins << it.key(); 371 allPlugins << it.key();
372 } 372 }
373 } 373 }
374 } 374 }
375 pcfg->writeEntry( "ExcludePlugins", exclude, ',' ); 375 pcfg->writeEntry( "ExcludePlugins", exclude, ',' );
376 pcfg->writeEntry( "IncludePlugins", include, ',' ); 376 pcfg->writeEntry( "IncludePlugins", include, ',' );
377 pcfg->writeEntry( "AllPlugins", allPlugins, ',' ); 377 pcfg->writeEntry( "AllPlugins", allPlugins, ',' );
378 378
379 pcfg->setGroup( "Misc" ); 379 pcfg->setGroup( "Misc" );
380 pcfg->writeEntry( "onStart", m_generalConfig->onStart->isChecked() ); 380 pcfg->writeEntry( "onStart", m_generalConfig->onStart->isChecked() );
381 pcfg->writeEntry( "onResume", m_generalConfig->onResume->isChecked() ); 381 pcfg->writeEntry( "onResume", m_generalConfig->onResume->isChecked() );
382 pcfg->writeEntry( "nbSuccessMin", m_generalConfig->nbSuccessMin->text() ); 382 pcfg->writeEntry( "nbSuccessMin", m_generalConfig->nbSuccessMin->text() );
383 pcfg->writeEntry( "noProtectConfig", m_generalConfig->noProtectConfig->isChecked() ); 383 pcfg->writeEntry( "noProtectConfig", m_generalConfig->noProtectConfig->isChecked() );
384 pcfg->writeEntry( "explanScreens", m_generalConfig->explanScreens->isChecked() ); 384 pcfg->writeEntry( "explanScreens", m_generalConfig->explanScreens->isChecked() );
385 pcfg->writeEntry( "allowBypass", m_generalConfig->allowBypass->isChecked() ); 385 pcfg->writeEntry( "allowBypass", m_generalConfig->allowBypass->isChecked() );
386 386
387 /* Login and Sync stuff */ 387 /* Login and Sync stuff */
388 388
389 pcfg->setGroup("Sync"); 389 pcfg->setGroup("Sync");
390 int auth_peer=0; 390 int auth_peer=0;
391 int auth_peer_bits; 391 int auth_peer_bits;
392 QString sn = m_syncWidget->syncnet->currentText(); 392 QString sn = m_syncWidget->syncnet->currentText();
393 parseNet(sn,auth_peer,auth_peer_bits); 393 parseNet(sn,auth_peer,auth_peer_bits);
394 394
395 //this is the *selected* (active) net range 395 //this is the *selected* (active) net range
396 pcfg->writeEntry("auth_peer",auth_peer); 396 pcfg->writeEntry("auth_peer",auth_peer);
397 pcfg->writeEntry("auth_peer_bits",auth_peer_bits); 397 pcfg->writeEntry("auth_peer_bits",auth_peer_bits);
398 398
399 //write back all other net ranges in *cleartext* 399 //write back all other net ranges in *cleartext*
400 for (int i=0; i<10; i++) { 400 for (int i=0; i<10; i++) {
401 QString target; 401 QString target;
402 target.sprintf("net%d", i); 402 target.sprintf("net%d", i);
403 pcfg->writeEntry(target,m_syncWidget->syncnet->text(i)); 403 pcfg->writeEntry(target,m_syncWidget->syncnet->text(i));
404 } 404 }
405 405
406#ifdef ODP 406#ifdef ODP
407#error "Use 0,1,2 and use Launcher" 407#error "Use 0,1,2 and use Launcher"
408#endif 408#endif
409 /* keep the old code so we don't use currentItem directly */ 409 /* keep the old code so we don't use currentItem directly */
410 int value = 0x02; 410 int value = 0x02;
411 switch( m_syncWidget->syncModeCombo->currentItem() ) { 411 switch( m_syncWidget->syncModeCombo->currentItem() ) {
412 case 0: 412 case 0:
413 value = 0x01; 413 value = 0x01;
414 break; 414 break;
415 case 1: 415 case 1:
416 value = 0x02; 416 value = 0x02;
417 break; 417 break;
418 case 2: 418 case 2:
419 value = 0x04; 419 value = 0x04;
420 break; 420 break;
421 } 421 }
422 pcfg->setGroup("SyncMode"); 422 pcfg->setGroup("SyncMode");
423 pcfg->writeEntry( "Mode", value ); 423 pcfg->writeEntry( "Mode", value );
424 424
425 /* 425 /*
426 pcfg->setGroup("Remote"); 426 pcfg->setGroup("Remote");
427 if ( telnetAvailable() ) 427 if ( telnetAvailable() )
428 pcfg->writeEntry("allow_telnet",telnet->isChecked()); 428 pcfg->writeEntry("allow_telnet",telnet->isChecked());
429 if ( sshAvailable() ) 429 if ( sshAvailable() )
430 pcfg->writeEntry("allow_ssh",ssh->isChecked()); 430 pcfg->writeEntry("allow_ssh",ssh->isChecked());
431 // ### write ssh/telnet sys config files 431 // ### write ssh/telnet sys config files
432 */ 432 */
433 433
434 //release the Config handler 434 //release the Config handler
435 delete pcfg; 435 delete pcfg;
436 436
437 QString configFile = QPEApplication::qpeDir() + "/etc/opie-login.conf"; 437 QString configFile = QPEApplication::qpeDir() + "/etc/opie-login.conf";
438 Config loginCfg(configFile,Config::File); 438 Config loginCfg(configFile,Config::File);
439 loginCfg.setGroup("General"); 439 loginCfg.setGroup("General");
440 440
441 if (autoLogin) { 441 if (autoLogin) {
442 loginCfg.writeEntry("AutoLogin",autoLoginName); 442 loginCfg.writeEntry("AutoLogin",autoLoginName);
443 } else { 443 } else {
444 loginCfg.removeEntry("AutoLogin"); 444 loginCfg.removeEntry("AutoLogin");
445 } 445 }
446 446
447} 447}
448 448
449/// slot used to record the fact plugins order has been modified 449/// slot used to record the fact plugins order has been modified
450void MultiauthConfig::pluginsChanged() { 450void MultiauthConfig::pluginsChanged() {
451 m_plugins_changed = true; 451 m_plugins_changed = true;
452} 452}
453 453
454/// loads each multiauth plugin 454/// loads each multiauth plugin
455void MultiauthConfig::loadPlugins() { 455void MultiauthConfig::loadPlugins() {
456 456
457 QString path = QPEApplication::qpeDir() + "/plugins/security"; 457 QString path = QPEApplication::qpeDir() + "/plugins/security";
458 QDir dir( path, "lib*.so" ); 458 QDir dir( path, "lib*.so" );
459 459
460 QStringList list = dir.entryList(); 460 QStringList list = dir.entryList();
461 QStringList::Iterator it; 461 QStringList::Iterator it;
462 462
463 // temporary list used to sort plugins 463 // temporary list used to sort plugins
464 QMap<QString, MultiauthPlugin> sortList; 464 QMap<QString, MultiauthPlugin> sortList;
465 465
466 for ( it = list.begin(); it != list.end(); ++it ) { 466 for ( it = list.begin(); it != list.end(); ++it ) {
467 QInterfacePtr<MultiauthPluginInterface> iface; 467 QInterfacePtr<MultiauthPluginInterface> iface;
468 QLibrary *lib = new QLibrary( path + "/" + *it ); 468 QLibrary *lib = new QLibrary( path + "/" + *it );
469 QString libPath(path + "/" + *it); 469 QString libPath(path + "/" + *it);
470 470
471 if ( lib->queryInterface( IID_MultiauthPluginInterface, (QUnknownInterface**)&iface ) == QS_OK ) { 471 if ( lib->queryInterface( IID_MultiauthPluginInterface, (QUnknownInterface**)&iface ) == QS_OK ) {
472 MultiauthPlugin plugin; 472 MultiauthPlugin plugin;
473 plugin.library = lib; 473 plugin.library = lib;
474 plugin.iface = iface; 474 plugin.iface = iface;
475 plugin.name = QString(*it); 475 plugin.name = QString(*it);
476 476
477 // find out if plugins should be launched 477 // find out if plugins should be launched
478 if ( m_excludePlugins.grep( *it ).isEmpty() ) { 478 if ( m_excludePlugins.grep( *it ).isEmpty() ) {
479 plugin.active = true; 479 plugin.active = true;
480 } else { 480 } else {
481 plugin.active = false; 481 plugin.active = false;
482 } 482 }
483 483
484 plugin.pluginObject = plugin.iface->plugin(); 484 plugin.pluginObject = plugin.iface->plugin();
485 485
486 // "prebuffer" it in one more list, to get the sorting done 486 // "prebuffer" it in one more list, to get the sorting done
487 sortList.insert( plugin.name, plugin ); 487 sortList.insert( plugin.name, plugin );
488 488
489 // on first start the list is off course empty 489 // on first start the list is off course empty
490 if ( m_allPlugins.isEmpty() ) { 490 if ( m_allPlugins.isEmpty() ) {
491 pluginList.append( plugin ); 491 pluginList.append( plugin );
492 } 492 }
493 // if plugin is not yet in the list, add it to the layout too 493 // if plugin is not yet in the list, add it to the layout too
494 else if ( !m_allPlugins.contains( plugin.name ) ) { 494 else if ( !m_allPlugins.contains( plugin.name ) ) {
495 pluginList.append( plugin ); 495 pluginList.append( plugin );
496 } 496 }
497 497
498 } else { 498 } else {
499 delete lib; 499 delete lib;
500 } 500 }
501 501
502 } // end for 502 } // end for
503 503
504 // put m_allPlugins tempPlugin objects into pluginList 504 // put m_allPlugins tempPlugin objects into pluginList
505 if ( !m_allPlugins.isEmpty() ) { 505 if ( !m_allPlugins.isEmpty() ) {
506 MultiauthPlugin tempPlugin; 506 MultiauthPlugin tempPlugin;
507 QStringList::Iterator stringit; 507 QStringList::Iterator stringit;
508 for( stringit = m_allPlugins.begin(); stringit != m_allPlugins.end(); ++stringit ) { 508 for( stringit = m_allPlugins.begin(); stringit != m_allPlugins.end(); ++stringit ) {
509 tempPlugin = ( sortList.find( *stringit ) ).data(); 509 tempPlugin = ( sortList.find( *stringit ) ).data();
510 if ( !( (tempPlugin.name).isEmpty() ) ) { 510 if ( !( (tempPlugin.name).isEmpty() ) ) {
511 pluginList.append( tempPlugin ); 511 pluginList.append( tempPlugin );
512 } 512 }
513 } 513 }
514 } 514 }
515 515
516} 516}
517 517
518void MultiauthConfig::deleteListEntry() 518void MultiauthConfig::deleteListEntry()
519{ 519{
520 m_syncWidget->syncnet->removeItem(m_syncWidget->syncnet->currentItem()); 520 m_syncWidget->syncnet->removeItem(m_syncWidget->syncnet->currentItem());
521} 521}
522 522
523void MultiauthConfig::restoreDefaults() 523void MultiauthConfig::restoreDefaults()
524{ 524{
525 QMessageBox unrecbox( 525 QMessageBox unrecbox(
526 tr("Attention"), 526 tr("Attention"),
527 tr( "<p>All user-defined net ranges will be lost."), 527 "<p>" + tr("All user-defined net ranges will be lost.") + "</p>",
528 QMessageBox::Warning, 528 QMessageBox::Warning,
529 QMessageBox::Cancel, QMessageBox::Yes, QMessageBox::NoButton, 529 QMessageBox::Cancel, QMessageBox::Yes, QMessageBox::NoButton,
530 0, QString::null, TRUE, WStyle_StaysOnTop); 530 0, QString::null, TRUE, WStyle_StaysOnTop);
531 unrecbox.setButtonText(QMessageBox::Cancel, tr("Cancel")); 531 unrecbox.setButtonText(QMessageBox::Cancel, tr("Cancel"));
532 unrecbox.setButtonText(QMessageBox::Yes, tr("Ok")); 532 unrecbox.setButtonText(QMessageBox::Yes, tr("Ok"));
533 533
534 if ( unrecbox.exec() == QMessageBox::Yes) 534 if ( unrecbox.exec() == QMessageBox::Yes)
535 { 535 {
536 m_syncWidget->syncnet->clear(); 536 m_syncWidget->syncnet->clear();
537 insertDefaultRanges(); 537 insertDefaultRanges();
538 } 538 }
539 m_syncWidget->syncModeCombo->setCurrentItem( 2 ); 539 m_syncWidget->syncModeCombo->setCurrentItem( 2 );
540} 540}
541 541
542void MultiauthConfig::insertDefaultRanges() 542void MultiauthConfig::insertDefaultRanges()
543{ 543{
544 m_syncWidget->syncnet->insertItem( tr( "192.168.129.0/24" ) ); 544 m_syncWidget->syncnet->insertItem( "192.168.129.0/24" );
545 m_syncWidget->syncnet->insertItem( tr( "192.168.1.0/24" ) ); 545 m_syncWidget->syncnet->insertItem( "192.168.1.0/24" );
546 m_syncWidget->syncnet->insertItem( tr( "192.168.0.0/16" ) ); 546 m_syncWidget->syncnet->insertItem( "192.168.0.0/16" );
547 m_syncWidget->syncnet->insertItem( tr( "172.16.0.0/12" ) ); 547 m_syncWidget->syncnet->insertItem( "172.16.0.0/12" );
548 m_syncWidget->syncnet->insertItem( tr( "10.0.0.0/8" ) ); 548 m_syncWidget->syncnet->insertItem( "10.0.0.0/8" );
549 m_syncWidget->syncnet->insertItem( tr( "1.0.0.0/8" ) ); 549 m_syncWidget->syncnet->insertItem( "1.0.0.0/8" );
550 m_syncWidget->syncnet->insertItem( tr( "Any" ) ); 550 m_syncWidget->syncnet->insertItem( tr( "Any" ) );
551 m_syncWidget->syncnet->insertItem( tr( "None" ) ); 551 m_syncWidget->syncnet->insertItem( tr( "None" ) );
552} 552}
553 553
554void MultiauthConfig::updateGUI() 554void MultiauthConfig::updateGUI()
555{ 555{
556 m_loginWidget->autologinToggle->setChecked(autoLogin); 556 m_loginWidget->autologinToggle->setChecked(autoLogin);
557 m_loginWidget->userlist->setEnabled(autoLogin); 557 m_loginWidget->userlist->setEnabled(autoLogin);
558} 558}
559 559
560void MultiauthConfig::selectNet(int auth_peer,int auth_peer_bits, bool update) 560void MultiauthConfig::selectNet(int auth_peer,int auth_peer_bits, bool update)
561{ 561{
562 QString sn; 562 QString sn;
563 if ( auth_peer_bits == 0 && auth_peer == 0 ) { 563 if ( auth_peer_bits == 0 && auth_peer == 0 ) {
564 sn = tr("Any"); 564 sn = tr("Any");
565 } else if ( auth_peer_bits == 32 && auth_peer == 0 ) { 565 } else if ( auth_peer_bits == 32 && auth_peer == 0 ) {
566 sn = tr("None"); 566 sn = tr("None");
567 } else { 567 } else {
568 sn = 568 sn =
569 QString::number((auth_peer>>24)&0xff) + "." 569 QString::number((auth_peer>>24)&0xff) + "."
570 + QString::number((auth_peer>>16)&0xff) + "." 570 + QString::number((auth_peer>>16)&0xff) + "."
571 + QString::number((auth_peer>>8)&0xff) + "." 571 + QString::number((auth_peer>>8)&0xff) + "."
572 + QString::number((auth_peer>>0)&0xff) + "/" 572 + QString::number((auth_peer>>0)&0xff) + "/"
573 + QString::number(auth_peer_bits); 573 + QString::number(auth_peer_bits);
574 } 574 }
575 575
576 //insert user-defined list of netranges upon start 576 //insert user-defined list of netranges upon start
577 if (update) { 577 if (update) {
578 //User selected/active netrange first 578 //User selected/active netrange first
579 m_syncWidget->syncnet->insertItem( tr(sn) ); 579 m_syncWidget->syncnet->insertItem( tr(sn) );
580 Config cfg("Security"); 580 Config cfg("Security");
581 cfg.setGroup("Sync"); 581 cfg.setGroup("Sync");
582 582
583 //set up defaults if needed, if someone manually deletes net0 he'll get a suprise hehe 583 //set up defaults if needed, if someone manually deletes net0 he'll get a suprise hehe
584 QString test = cfg.readEntry("net0",""); 584 QString test = cfg.readEntry("net0","");
585 if (test.isEmpty()) { 585 if (test.isEmpty()) {
586 insertDefaultRanges(); 586 insertDefaultRanges();
587 } else { 587 } else {
588 // 10 ought to be enough for everybody... :) 588 // 10 ought to be enough for everybody... :)
589 // If you need more, don't forget to edit applySecurity() as well 589 // If you need more, don't forget to edit applySecurity() as well
590 bool already_there=FALSE; 590 bool already_there=FALSE;
591 for (int i=0; i<10; i++) { 591 for (int i=0; i<10; i++) {
592 QString target, netrange; 592 QString target, netrange;
593 target.sprintf("net%d", i); 593 target.sprintf("net%d", i);
594 netrange = cfg.readEntry(target,""); 594 netrange = cfg.readEntry(target,"");
595 if (! netrange.isEmpty()){ 595 if (! netrange.isEmpty()){
596 //make sure we have no "twin" entries 596 //make sure we have no "twin" entries
597 for (int i=0; i<m_syncWidget->syncnet->count(); i++) { 597 for (int i=0; i<m_syncWidget->syncnet->count(); i++) {
598 if ( m_syncWidget->syncnet->text(i) == netrange ) { 598 if ( m_syncWidget->syncnet->text(i) == netrange ) {
599 already_there=TRUE; 599 already_there=TRUE;
600 } 600 }
601 } 601 }
602 if (! already_there) { 602 if (! already_there) {
603 m_syncWidget->syncnet->insertItem( tr( netrange ) ); 603 m_syncWidget->syncnet->insertItem( netrange );
604 } else { 604 } else {
605 already_there=FALSE; 605 already_there=FALSE;
606 } 606 }
607 } 607 }
608 } 608 }
609 } 609 }
610 } 610 }
611 611
612 for (int i=0; i<m_syncWidget->syncnet->count(); i++) { 612 for (int i=0; i<m_syncWidget->syncnet->count(); i++) {
613 if ( m_syncWidget->syncnet->text(i).left(sn.length()) == sn ) { 613 if ( m_syncWidget->syncnet->text(i).left(sn.length()) == sn ) {
614 m_syncWidget->syncnet->setCurrentItem(i); 614 m_syncWidget->syncnet->setCurrentItem(i);
615 return; 615 return;
616 } 616 }
617 } 617 }
618 odebug << "No match for \"" << sn << "\"" << oendl; 618 odebug << "No match for \"" << sn << "\"" << oendl;
619} 619}
620 620
621void MultiauthConfig::parseNet(const QString& sn,int& auth_peer,int& auth_peer_bits) 621void MultiauthConfig::parseNet(const QString& sn,int& auth_peer,int& auth_peer_bits)
622{ 622{
623 auth_peer=0; 623 auth_peer=0;
624 if ( sn == tr("Any") ) { 624 if ( sn == tr("Any") ) {
625 auth_peer = 0; 625 auth_peer = 0;
626 auth_peer_bits = 0; 626 auth_peer_bits = 0;
627 } else if ( sn == tr("None") ) { 627 } else if ( sn == tr("None") ) {
628 auth_peer = 0; 628 auth_peer = 0;
629 auth_peer_bits = 32; 629 auth_peer_bits = 32;
630 } else { 630 } else {
631 int x=0; 631 int x=0;
632 for (int i=0; i<4; i++) { 632 for (int i=0; i<4; i++) {
633 int nx = sn.find(QChar(i==3 ? '/' : '.'),x); 633 int nx = sn.find(QChar(i==3 ? '/' : '.'),x);
634 auth_peer = (auth_peer<<8)|sn.mid(x,nx-x).toInt(); 634 auth_peer = (auth_peer<<8)|sn.mid(x,nx-x).toInt();
635 x = nx+1; 635 x = nx+1;
636 } 636 }
637 uint n = (uint)sn.find(' ',x)-x; 637 uint n = (uint)sn.find(' ',x)-x;
638 auth_peer_bits = sn.mid(x,n).toInt(); 638 auth_peer_bits = sn.mid(x,n).toInt();
639 } 639 }
640} 640}
641 641
642void MultiauthConfig::loadUsers() 642void MultiauthConfig::loadUsers()
643{ 643{
644 QFile passwd("/etc/passwd"); 644 QFile passwd("/etc/passwd");
645 if ( passwd.open(IO_ReadOnly) ) { 645 if ( passwd.open(IO_ReadOnly) ) {
646 QTextStream t( &passwd ); 646 QTextStream t( &passwd );
647 QString s; 647 QString s;
648 QStringList account; 648 QStringList account;
649 while ( !t.eof() ) { 649 while ( !t.eof() ) {
650 account = QStringList::split(':',t.readLine()); 650 account = QStringList::split(':',t.readLine());
651 // Hide disabled accounts and some special accounts 651 // Hide disabled accounts and some special accounts
652 if (*account.at(1)!="*" && *account.at(0)!="ppp" && *account.at(0)!="messagebus") { 652 if (*account.at(1)!="*" && *account.at(0)!="ppp" && *account.at(0)!="messagebus") {
653 653
654 m_loginWidget->userlist->insertItem(*account.at(0)); 654 m_loginWidget->userlist->insertItem(*account.at(0));
655 // Highlight this item if it is set to m_loginWidget->autologinToggle 655 // Highlight this item if it is set to m_loginWidget->autologinToggle
656 if ( *account.at(0) == autoLoginName) 656 if ( *account.at(0) == autoLoginName)
657 m_loginWidget->userlist->setCurrentItem(m_loginWidget->userlist->count()-1); 657 m_loginWidget->userlist->setCurrentItem(m_loginWidget->userlist->count()-1);
658 } 658 }
659 } 659 }
660 passwd.close(); 660 passwd.close();
661 } 661 }
662 662
663} 663}
664 664
665void MultiauthConfig::toggleAutoLogin(bool val) 665void MultiauthConfig::toggleAutoLogin(bool val)
666{ 666{
667 autoLogin=val; 667 autoLogin=val;
668 m_loginWidget->userlist->setEnabled(val); 668 m_loginWidget->userlist->setEnabled(val);
669 // if autoLogin is true, we will set by default the login currently visible in the userlist 669 // if autoLogin is true, we will set by default the login currently visible in the userlist
670 if (autoLogin) 670 if (autoLogin)
671 autoLoginName=m_loginWidget->userlist->currentText(); 671 autoLoginName=m_loginWidget->userlist->currentText();
672} 672}
673 673
674 674
675 675
676 676
677void MultiauthConfig::setSyncNet(const QString& sn) 677void MultiauthConfig::setSyncNet(const QString& sn)
678{ 678{
679 int auth_peer,auth_peer_bits; 679 int auth_peer,auth_peer_bits;
680 parseNet(sn,auth_peer,auth_peer_bits); 680 parseNet(sn,auth_peer,auth_peer_bits);
681 selectNet(auth_peer,auth_peer_bits,FALSE); 681 selectNet(auth_peer,auth_peer_bits,FALSE);
682} 682}
683 683
684void MultiauthConfig::changeLoginName( int idx ) 684void MultiauthConfig::changeLoginName( int idx )
685{ 685{
686 autoLoginName = m_loginWidget->userlist->text(idx);; 686 autoLoginName = m_loginWidget->userlist->text(idx);;
687 updateGUI(); 687 updateGUI();
688} 688}
689 689
690/// \todo do implement that? who? how? 690/// \todo do implement that? who? how?
691bool MultiauthConfig::telnetAvailable() const 691bool MultiauthConfig::telnetAvailable() const
692{ 692{
693 return FALSE; 693 return FALSE;
694} 694}
695 695
696/// \todo do implement that? who? how? 696/// \todo do implement that? who? how?
697bool MultiauthConfig::sshAvailable() const 697bool MultiauthConfig::sshAvailable() const
698{ 698{
699 return FALSE; 699 return FALSE;
700} 700}
701 701
diff --git a/core/settings/security/security.cpp b/core/settings/security/security.cpp
index b917aea..122dfae 100644
--- a/core/settings/security/security.cpp
+++ b/core/settings/security/security.cpp
@@ -1,446 +1,446 @@
1/********************************************************************** 1/**********************************************************************
2 ** Copyright (C) 2000 Trolltech AS. All rights reserved. 2 ** Copyright (C) 2000 Trolltech AS. All rights reserved.
3 ** 3 **
4 ** This file is part of Qtopia Environment. 4 ** This file is part of Qtopia Environment.
5 ** 5 **
6 ** This file may be distributed and/or modified under the terms of the 6 ** This file may be distributed and/or modified under the terms of the
7 ** GNU General Public License version 2 as published by the Free Software 7 ** GNU General Public License version 2 as published by the Free Software
8 ** Foundation and appearing in the file LICENSE.GPL included in the 8 ** Foundation and appearing in the file LICENSE.GPL included in the
9 ** packaging of this file. 9 ** packaging of this file.
10 ** 10 **
11 ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11 ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12 ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12 ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13 ** 13 **
14 ** See http://www.trolltech.com/gpl/ for GPL licensing information. 14 ** See http://www.trolltech.com/gpl/ for GPL licensing information.
15 ** 15 **
16 ** Contact info@trolltech.com if any conditions of this licensing are 16 ** Contact info@trolltech.com if any conditions of this licensing are
17 ** not clear to you. 17 ** not clear to you.
18 ** 18 **
19 **********************************************************************/ 19 **********************************************************************/
20#include "security.h" 20#include "security.h"
21 21
22/* OPIE */ 22/* OPIE */
23#include <qpe/qpeapplication.h> 23#include <qpe/qpeapplication.h>
24#include <qpe/config.h> 24#include <qpe/config.h>
25#include <qpe/password.h> 25#include <qpe/password.h>
26#include <qpe/qpedialog.h> 26#include <qpe/qpedialog.h>
27#include <qpe/qcopenvelope_qws.h> 27#include <qpe/qcopenvelope_qws.h>
28#include <opie2/odebug.h> 28#include <opie2/odebug.h>
29 29
30/* QT */ 30/* QT */
31#include <qcheckbox.h> 31#include <qcheckbox.h>
32#include <qpushbutton.h> 32#include <qpushbutton.h>
33#include <qcombobox.h> 33#include <qcombobox.h>
34#include <qmessagebox.h> 34#include <qmessagebox.h>
35#include <qfile.h> 35#include <qfile.h>
36#include <qtextstream.h> 36#include <qtextstream.h>
37 37
38 38
39using namespace Opie::Core; 39using namespace Opie::Core;
40 40
41 Security::Security( QWidget* parent, const char* name, WFlags fl ) 41 Security::Security( QWidget* parent, const char* name, WFlags fl )
42: SecurityBase( parent, name, TRUE, WStyle_ContextHelp ) 42: SecurityBase( parent, name, TRUE, WStyle_ContextHelp )
43{ 43{
44 valid=FALSE; 44 valid=FALSE;
45 Config cfg("Security"); 45 Config cfg("Security");
46 cfg.setGroup("Passcode"); 46 cfg.setGroup("Passcode");
47 passcode = cfg.readEntry("passcode"); 47 passcode = cfg.readEntry("passcode");
48 passcode_poweron->setChecked(cfg.readBoolEntry("passcode_poweron",FALSE)); 48 passcode_poweron->setChecked(cfg.readBoolEntry("passcode_poweron",FALSE));
49 cfg.setGroup("Sync"); 49 cfg.setGroup("Sync");
50 int auth_peer = cfg.readNumEntry("auth_peer",0xc0a88100);//new default 192.168.129.0/24 50 int auth_peer = cfg.readNumEntry("auth_peer",0xc0a88100);//new default 192.168.129.0/24
51 int auth_peer_bits = cfg.readNumEntry("auth_peer_bits",24); 51 int auth_peer_bits = cfg.readNumEntry("auth_peer_bits",24);
52 selectNet(auth_peer,auth_peer_bits,TRUE); 52 selectNet(auth_peer,auth_peer_bits,TRUE);
53 53
54 connect(syncnet, SIGNAL(textChanged(const QString&)), 54 connect(syncnet, SIGNAL(textChanged(const QString&)),
55 this, SLOT(setSyncNet(const QString&))); 55 this, SLOT(setSyncNet(const QString&)));
56 56
57 57
58 58
59 /* 59 /*
60 cfg.setGroup("Remote"); 60 cfg.setGroup("Remote");
61 if ( telnetAvailable() ) 61 if ( telnetAvailable() )
62 telnet->setChecked(cfg.readEntry("allow_telnet")); 62 telnet->setChecked(cfg.readEntry("allow_telnet"));
63 else 63 else
64 telnet->hide(); 64 telnet->hide();
65 65
66 if ( sshAvailable() ) 66 if ( sshAvailable() )
67 ssh->setChecked(cfg.readEntry("allow_ssh")); 67 ssh->setChecked(cfg.readEntry("allow_ssh"));
68 else 68 else
69 ssh->hide(); 69 ssh->hide();
70 */ 70 */
71 71
72 QString configFile = QPEApplication::qpeDir() + "/etc/opie-login.conf"; 72 QString configFile = QPEApplication::qpeDir() + "/etc/opie-login.conf";
73 Config loginCfg(configFile,Config::File); 73 Config loginCfg(configFile,Config::File);
74 74
75 loginCfg.setGroup("General"); 75 loginCfg.setGroup("General");
76 autoLoginName=loginCfg.readEntry("AutoLogin",""); 76 autoLoginName=loginCfg.readEntry("AutoLogin","");
77 77
78 if (autoLoginName.stripWhiteSpace().isEmpty()) { 78 if (autoLoginName.stripWhiteSpace().isEmpty()) {
79 autoLogin=false; 79 autoLogin=false;
80 } else { 80 } else {
81 autoLogin=true; 81 autoLogin=true;
82 } 82 }
83 83
84 cfg.setGroup("SyncMode"); 84 cfg.setGroup("SyncMode");
85 int mode = cfg.readNumEntry("Mode",2); // Default to Sharp 85 int mode = cfg.readNumEntry("Mode",2); // Default to Sharp
86 switch( mode ) { 86 switch( mode ) {
87 case 0x01: 87 case 0x01:
88 syncModeCombo->setCurrentItem( 0 ); 88 syncModeCombo->setCurrentItem( 0 );
89 break; 89 break;
90 case 0x02: 90 case 0x02:
91 default: 91 default:
92 syncModeCombo->setCurrentItem( 1 ); 92 syncModeCombo->setCurrentItem( 1 );
93 break; 93 break;
94 case 0x04: 94 case 0x04:
95 syncModeCombo->setCurrentItem( 2 ); 95 syncModeCombo->setCurrentItem( 2 );
96 break; 96 break;
97 } 97 }
98 98
99 99
100 connect(autologinToggle, SIGNAL(toggled(bool)), this, SLOT(toggleAutoLogin(bool))); 100 connect(autologinToggle, SIGNAL(toggled(bool)), this, SLOT(toggleAutoLogin(bool)));
101 connect(userlist, SIGNAL(activated(int)), this, SLOT(changeLoginName(int))); 101 connect(userlist, SIGNAL(activated(int)), this, SLOT(changeLoginName(int)));
102 connect(changepasscode,SIGNAL(clicked()), this, SLOT(changePassCode())); 102 connect(changepasscode,SIGNAL(clicked()), this, SLOT(changePassCode()));
103 connect(clearpasscode,SIGNAL(clicked()), this, SLOT(clearPassCode())); 103 connect(clearpasscode,SIGNAL(clicked()), this, SLOT(clearPassCode()));
104 connect(restoredefaults,SIGNAL(clicked()), this, SLOT(restoreDefaults())); 104 connect(restoredefaults,SIGNAL(clicked()), this, SLOT(restoreDefaults()));
105 connect(deleteentry,SIGNAL(clicked()), this, SLOT(deleteListEntry())); 105 connect(deleteentry,SIGNAL(clicked()), this, SLOT(deleteListEntry()));
106 106
107 loadUsers(); 107 loadUsers();
108 updateGUI(); 108 updateGUI();
109 109
110 dl = new QPEDialogListener(this); 110 dl = new QPEDialogListener(this);
111 QPEApplication::showDialog( this ); 111 QPEApplication::showDialog( this );
112} 112}
113 113
114Security::~Security() 114Security::~Security()
115{ 115{
116} 116}
117 117
118void Security::deleteListEntry() 118void Security::deleteListEntry()
119{ 119{
120 syncnet->removeItem(syncnet->currentItem()); 120 syncnet->removeItem(syncnet->currentItem());
121} 121}
122 122
123void Security::restoreDefaults() 123void Security::restoreDefaults()
124{ 124{
125 QMessageBox unrecbox( 125 QMessageBox unrecbox(
126 tr("Attention"), 126 tr("Attention"),
127 tr( "<p>All user-defined net ranges will be lost."), 127 "<p>" + tr("All user-defined net ranges will be lost.") + "</p>",
128 QMessageBox::Warning, 128 QMessageBox::Warning,
129 QMessageBox::Cancel, QMessageBox::Yes, QMessageBox::NoButton, 129 QMessageBox::Cancel, QMessageBox::Yes, QMessageBox::NoButton,
130 0, QString::null, TRUE, WStyle_StaysOnTop); 130 0, QString::null, TRUE, WStyle_StaysOnTop);
131 unrecbox.setButtonText(QMessageBox::Cancel, tr("Cancel")); 131 unrecbox.setButtonText(QMessageBox::Cancel, tr("Cancel"));
132 unrecbox.setButtonText(QMessageBox::Yes, tr("Ok")); 132 unrecbox.setButtonText(QMessageBox::Yes, tr("Ok"));
133 133
134 if ( unrecbox.exec() == QMessageBox::Yes) 134 if ( unrecbox.exec() == QMessageBox::Yes)
135 { 135 {
136 syncnet->clear(); 136 syncnet->clear();
137 insertDefaultRanges(); 137 insertDefaultRanges();
138 } 138 }
139 syncModeCombo->setCurrentItem( 2 ); 139 syncModeCombo->setCurrentItem( 2 );
140} 140}
141 141
142void Security::insertDefaultRanges() 142void Security::insertDefaultRanges()
143{ 143{
144 syncnet->insertItem( tr( "192.168.129.0/24" ) ); 144 syncnet->insertItem( "192.168.129.0/24" );
145 syncnet->insertItem( tr( "192.168.1.0/24" ) ); 145 syncnet->insertItem( "192.168.1.0/24" );
146 syncnet->insertItem( tr( "192.168.0.0/16" ) ); 146 syncnet->insertItem( "192.168.0.0/16" );
147 syncnet->insertItem( tr( "172.16.0.0/12" ) ); 147 syncnet->insertItem( "172.16.0.0/12" );
148 syncnet->insertItem( tr( "10.0.0.0/8" ) ); 148 syncnet->insertItem( "10.0.0.0/8" );
149 syncnet->insertItem( tr( "1.0.0.0/8" ) ); 149 syncnet->insertItem( "1.0.0.0/8" );
150 syncnet->insertItem( tr( "Any" ) ); 150 syncnet->insertItem( tr( "Any" ) );
151 syncnet->insertItem( tr( "None" ) ); 151 syncnet->insertItem( tr( "None" ) );
152} 152}
153 153
154void Security::updateGUI() 154void Security::updateGUI()
155{ 155{
156 bool empty = passcode.isEmpty(); 156 bool empty = passcode.isEmpty();
157 157
158 changepasscode->setText( empty ? tr("Set passcode" ) 158 changepasscode->setText( empty ? tr("Set passcode" )
159 : tr("Change passcode" ) ); 159 : tr("Change passcode" ) );
160 passcode_poweron->setEnabled( !empty ); 160 passcode_poweron->setEnabled( !empty );
161 clearpasscode->setEnabled( !empty ); 161 clearpasscode->setEnabled( !empty );
162 162
163 autologinToggle->setChecked(autoLogin); 163 autologinToggle->setChecked(autoLogin);
164 userlist->setEnabled(autoLogin); 164 userlist->setEnabled(autoLogin);
165} 165}
166 166
167 167
168void Security::show() 168void Security::show()
169{ 169{
170 //valid=FALSE; 170 //valid=FALSE;
171 setEnabled(FALSE); 171 setEnabled(FALSE);
172 SecurityBase::show(); 172 SecurityBase::show();
173 if ( passcode.isEmpty() ) { 173 if ( passcode.isEmpty() ) {
174 // could insist... 174 // could insist...
175 //changePassCode(); 175 //changePassCode();
176 //if ( passcode.isEmpty() ) 176 //if ( passcode.isEmpty() )
177 //reject(); 177 //reject();
178 } else { 178 } else {
179 if (!valid) // security passcode was not asked yet, so ask now 179 if (!valid) // security passcode was not asked yet, so ask now
180 { 180 {
181 QString pc = enterPassCode(tr("Enter passcode")); 181 QString pc = enterPassCode(tr("Enter passcode"));
182 if ( pc != passcode ) { 182 if ( pc != passcode ) {
183 QMessageBox::critical(this, tr("Passcode incorrect"), 183 QMessageBox::critical(this, tr("Passcode incorrect"),
184 tr("The passcode entered is incorrect.\nAccess denied")); 184 tr("The passcode entered is incorrect.\nAccess denied"));
185 reject(); 185 reject();
186 return; 186 return;
187 } 187 }
188 } 188 }
189 } 189 }
190 setEnabled(TRUE); 190 setEnabled(TRUE);
191 valid=TRUE; 191 valid=TRUE;
192} 192}
193 193
194void Security::accept() 194void Security::accept()
195{ 195{
196 applySecurity(); 196 applySecurity();
197 QDialog::accept(); 197 QDialog::accept();
198 QCopEnvelope env("QPE/System", "securityChanged()" ); 198 QCopEnvelope env("QPE/System", "securityChanged()" );
199} 199}
200 200
201void Security::done(int r) 201void Security::done(int r)
202{ 202{
203 QDialog::done(r); 203 QDialog::done(r);
204 close(); 204 close();
205} 205}
206 206
207void Security::selectNet(int auth_peer,int auth_peer_bits, bool update) 207void Security::selectNet(int auth_peer,int auth_peer_bits, bool update)
208{ 208{
209 QString sn; 209 QString sn;
210 if ( auth_peer_bits == 0 && auth_peer == 0 ) { 210 if ( auth_peer_bits == 0 && auth_peer == 0 ) {
211 sn = tr("Any"); 211 sn = tr("Any");
212 } else if ( auth_peer_bits == 32 && auth_peer == 0 ) { 212 } else if ( auth_peer_bits == 32 && auth_peer == 0 ) {
213 sn = tr("None"); 213 sn = tr("None");
214 } else { 214 } else {
215 sn = 215 sn =
216 QString::number((auth_peer>>24)&0xff) + "." 216 QString::number((auth_peer>>24)&0xff) + "."
217 + QString::number((auth_peer>>16)&0xff) + "." 217 + QString::number((auth_peer>>16)&0xff) + "."
218 + QString::number((auth_peer>>8)&0xff) + "." 218 + QString::number((auth_peer>>8)&0xff) + "."
219 + QString::number((auth_peer>>0)&0xff) + "/" 219 + QString::number((auth_peer>>0)&0xff) + "/"
220 + QString::number(auth_peer_bits); 220 + QString::number(auth_peer_bits);
221 } 221 }
222 222
223 //insert user-defined list of netranges upon start 223 //insert user-defined list of netranges upon start
224 if (update) { 224 if (update) {
225 //User selected/active netrange first 225 //User selected/active netrange first
226 syncnet->insertItem( tr( sn ) ); 226 syncnet->insertItem( sn );
227 227
228 Config cfg("Security"); 228 Config cfg("Security");
229 cfg.setGroup("Sync"); 229 cfg.setGroup("Sync");
230 230
231 //set up defaults if needed, if someone manually deletes net0 he'll get a suprise hehe 231 //set up defaults if needed, if someone manually deletes net0 he'll get a suprise hehe
232 QString test = cfg.readEntry("net0",""); 232 QString test = cfg.readEntry("net0","");
233 if (test.isEmpty()) { 233 if (test.isEmpty()) {
234 insertDefaultRanges(); 234 insertDefaultRanges();
235 } else { 235 } else {
236 // 10 ought to be enough for everybody... :) 236 // 10 ought to be enough for everybody... :)
237 // If you need more, don't forget to edit applySecurity() as well 237 // If you need more, don't forget to edit applySecurity() as well
238 bool already_there=FALSE; 238 bool already_there=FALSE;
239 for (int i=0; i<10; i++) { 239 for (int i=0; i<10; i++) {
240 QString target, netrange; 240 QString target, netrange;
241 target.sprintf("net%d", i); 241 target.sprintf("net%d", i);
242 netrange = cfg.readEntry(target,""); 242 netrange = cfg.readEntry(target,"");
243 if (! netrange.isEmpty()){ 243 if (! netrange.isEmpty()){
244 //make sure we have no "twin" entries 244 //make sure we have no "twin" entries
245 for (int i=0; i<syncnet->count(); i++) { 245 for (int i=0; i<syncnet->count(); i++) {
246 if ( syncnet->text(i) == netrange ) { 246 if ( syncnet->text(i) == netrange ) {
247 already_there=TRUE; 247 already_there=TRUE;
248 } 248 }
249 } 249 }
250 if (! already_there) { 250 if (! already_there) {
251 syncnet->insertItem( tr( netrange ) ); 251 syncnet->insertItem( netrange );
252 } else { 252 } else {
253 already_there=FALSE; 253 already_there=FALSE;
254 } 254 }
255 } 255 }
256 } 256 }
257 } 257 }
258 } 258 }
259 259
260 for (int i=0; i<syncnet->count(); i++) { 260 for (int i=0; i<syncnet->count(); i++) {
261 if ( syncnet->text(i).left(sn.length()) == sn ) { 261 if ( syncnet->text(i).left(sn.length()) == sn ) {
262 syncnet->setCurrentItem(i); 262 syncnet->setCurrentItem(i);
263 return; 263 return;
264 } 264 }
265 } 265 }
266 odebug << "No match for \"" << sn << "\"" << oendl; 266 odebug << "No match for \"" << sn << "\"" << oendl;
267} 267}
268 268
269void Security::parseNet(const QString& sn,int& auth_peer,int& auth_peer_bits) 269void Security::parseNet(const QString& sn,int& auth_peer,int& auth_peer_bits)
270{ 270{
271 auth_peer=0; 271 auth_peer=0;
272 if ( sn == tr("Any") ) { 272 if ( sn == tr("Any") ) {
273 auth_peer = 0; 273 auth_peer = 0;
274 auth_peer_bits = 0; 274 auth_peer_bits = 0;
275 } else if ( sn == tr("None") ) { 275 } else if ( sn == tr("None") ) {
276 auth_peer = 0; 276 auth_peer = 0;
277 auth_peer_bits = 32; 277 auth_peer_bits = 32;
278 } else { 278 } else {
279 int x=0; 279 int x=0;
280 for (int i=0; i<4; i++) { 280 for (int i=0; i<4; i++) {
281 int nx = sn.find(QChar(i==3 ? '/' : '.'),x); 281 int nx = sn.find(QChar(i==3 ? '/' : '.'),x);
282 auth_peer = (auth_peer<<8)|sn.mid(x,nx-x).toInt(); 282 auth_peer = (auth_peer<<8)|sn.mid(x,nx-x).toInt();
283 x = nx+1; 283 x = nx+1;
284 } 284 }
285 uint n = (uint)sn.find(' ',x)-x; 285 uint n = (uint)sn.find(' ',x)-x;
286 auth_peer_bits = sn.mid(x,n).toInt(); 286 auth_peer_bits = sn.mid(x,n).toInt();
287 } 287 }
288} 288}
289 289
290void Security::loadUsers ( void ) 290void Security::loadUsers ( void )
291{ 291{
292 QFile passwd("/etc/passwd"); 292 QFile passwd("/etc/passwd");
293 if ( passwd.open(IO_ReadOnly) ) { 293 if ( passwd.open(IO_ReadOnly) ) {
294 QTextStream t( &passwd ); 294 QTextStream t( &passwd );
295 QString s; 295 QString s;
296 QStringList account; 296 QStringList account;
297 while ( !t.eof() ) { 297 while ( !t.eof() ) {
298 account = QStringList::split(':',t.readLine()); 298 account = QStringList::split(':',t.readLine());
299 299
300 // Hide disabled accounts 300 // Hide disabled accounts
301 if (*account.at(1)!="*") { 301 if (*account.at(1)!="*") {
302 302
303 userlist->insertItem(*account.at(0)); 303 userlist->insertItem(*account.at(0));
304 // Highlight this item if it is set to autologinToggle 304 // Highlight this item if it is set to autologinToggle
305 if ( *account.at(0) == autoLoginName) 305 if ( *account.at(0) == autoLoginName)
306 userlist->setCurrentItem(userlist->count()-1); 306 userlist->setCurrentItem(userlist->count()-1);
307 } 307 }
308 } 308 }
309 passwd.close(); 309 passwd.close();
310 } 310 }
311 311
312} 312}
313 313
314void Security::toggleAutoLogin(bool val) 314void Security::toggleAutoLogin(bool val)
315{ 315{
316 autoLogin=val; 316 autoLogin=val;
317 userlist->setEnabled(val); 317 userlist->setEnabled(val);
318 if (!autoLogin) 318 if (!autoLogin)
319 autoLoginName=userlist->currentText(); 319 autoLoginName=userlist->currentText();
320} 320}
321 321
322 322
323 323
324 324
325void Security::setSyncNet(const QString& sn) 325void Security::setSyncNet(const QString& sn)
326{ 326{
327 int auth_peer,auth_peer_bits; 327 int auth_peer,auth_peer_bits;
328 parseNet(sn,auth_peer,auth_peer_bits); 328 parseNet(sn,auth_peer,auth_peer_bits);
329 selectNet(auth_peer,auth_peer_bits,FALSE); 329 selectNet(auth_peer,auth_peer_bits,FALSE);
330} 330}
331 331
332void Security::applySecurity() 332void Security::applySecurity()
333{ 333{
334 if ( valid ) { 334 if ( valid ) {
335 Config cfg("Security"); 335 Config cfg("Security");
336 cfg.setGroup("Passcode"); 336 cfg.setGroup("Passcode");
337 cfg.writeEntry("passcode",passcode); 337 cfg.writeEntry("passcode",passcode);
338 cfg.writeEntry("passcode_poweron",passcode_poweron->isChecked()); 338 cfg.writeEntry("passcode_poweron",passcode_poweron->isChecked());
339 cfg.setGroup("Sync"); 339 cfg.setGroup("Sync");
340 int auth_peer=0; 340 int auth_peer=0;
341 int auth_peer_bits; 341 int auth_peer_bits;
342 QString sn = syncnet->currentText(); 342 QString sn = syncnet->currentText();
343 parseNet(sn,auth_peer,auth_peer_bits); 343 parseNet(sn,auth_peer,auth_peer_bits);
344 344
345 //this is the *selected* (active) net range 345 //this is the *selected* (active) net range
346 cfg.writeEntry("auth_peer",auth_peer); 346 cfg.writeEntry("auth_peer",auth_peer);
347 cfg.writeEntry("auth_peer_bits",auth_peer_bits); 347 cfg.writeEntry("auth_peer_bits",auth_peer_bits);
348 348
349 //write back all other net ranges in *cleartext* 349 //write back all other net ranges in *cleartext*
350 for (int i=0; i<10; i++) { 350 for (int i=0; i<10; i++) {
351 QString target; 351 QString target;
352 target.sprintf("net%d", i); 352 target.sprintf("net%d", i);
353 cfg.writeEntry(target,syncnet->text(i)); 353 cfg.writeEntry(target,syncnet->text(i));
354 } 354 }
355 355
356#ifdef ODP 356#ifdef ODP
357 #error "Use 0,1,2 and use Launcher" 357 #error "Use 0,1,2 and use Launcher"
358#endif 358#endif
359 /* keep the old code so we don't use currentItem directly */ 359 /* keep the old code so we don't use currentItem directly */
360 int value = 0x02; 360 int value = 0x02;
361 switch( syncModeCombo->currentItem() ) { 361 switch( syncModeCombo->currentItem() ) {
362 case 0: 362 case 0:
363 value = 0x01; 363 value = 0x01;
364 break; 364 break;
365 case 1: 365 case 1:
366 value = 0x02; 366 value = 0x02;
367 break; 367 break;
368 case 2: 368 case 2:
369 value = 0x04; 369 value = 0x04;
370 break; 370 break;
371 } 371 }
372 cfg.setGroup("SyncMode"); 372 cfg.setGroup("SyncMode");
373 cfg.writeEntry( "Mode", value ); 373 cfg.writeEntry( "Mode", value );
374 374
375 /* 375 /*
376 cfg.setGroup("Remote"); 376 cfg.setGroup("Remote");
377 if ( telnetAvailable() ) 377 if ( telnetAvailable() )
378 cfg.writeEntry("allow_telnet",telnet->isChecked()); 378 cfg.writeEntry("allow_telnet",telnet->isChecked());
379 if ( sshAvailable() ) 379 if ( sshAvailable() )
380 cfg.writeEntry("allow_ssh",ssh->isChecked()); 380 cfg.writeEntry("allow_ssh",ssh->isChecked());
381 // ### write ssh/telnet sys config files 381 // ### write ssh/telnet sys config files
382 */ 382 */
383 383
384 QString configFile = QPEApplication::qpeDir() + "/etc/opie-login.conf"; 384 QString configFile = QPEApplication::qpeDir() + "/etc/opie-login.conf";
385 Config loginCfg(configFile,Config::File); 385 Config loginCfg(configFile,Config::File);
386 loginCfg.setGroup("General"); 386 loginCfg.setGroup("General");
387 387
388 if (autoLogin) { 388 if (autoLogin) {
389 loginCfg.writeEntry("AutoLogin",autoLoginName); 389 loginCfg.writeEntry("AutoLogin",autoLoginName);
390 } else { 390 } else {
391 loginCfg.removeEntry("AutoLogin"); 391 loginCfg.removeEntry("AutoLogin");
392 } 392 }
393 393
394 } 394 }
395} 395}
396 396
397 397
398 398
399 399
400void Security::changeLoginName( int idx ) 400void Security::changeLoginName( int idx )
401{ 401{
402 autoLoginName = userlist->text(idx);; 402 autoLoginName = userlist->text(idx);;
403 updateGUI(); 403 updateGUI();
404} 404}
405 405
406void Security::changePassCode() 406void Security::changePassCode()
407{ 407{
408 QString new1; 408 QString new1;
409 QString new2; 409 QString new2;
410 410
411 do { 411 do {
412 new1 = enterPassCode(tr("Enter new passcode")); 412 new1 = enterPassCode(tr("Enter new passcode"));
413 if ( new1.isNull() ) 413 if ( new1.isNull() )
414 return; 414 return;
415 new2 = enterPassCode(tr("Re-enter new passcode")); 415 new2 = enterPassCode(tr("Re-enter new passcode"));
416 if ( new2.isNull() ) 416 if ( new2.isNull() )
417 return; 417 return;
418 } while (new1 != new2); 418 } while (new1 != new2);
419 419
420 passcode = new1; 420 passcode = new1;
421 updateGUI(); 421 updateGUI();
422} 422}
423 423
424void Security::clearPassCode() 424void Security::clearPassCode()
425{ 425{
426 passcode = QString::null; 426 passcode = QString::null;
427 updateGUI(); 427 updateGUI();
428} 428}
429 429
430 430
431QString Security::enterPassCode(const QString& prompt) 431QString Security::enterPassCode(const QString& prompt)
432{ 432{
433 return Password::getPassword(prompt); 433 return Password::getPassword(prompt);
434} 434}
435 435
436bool Security::telnetAvailable() const 436bool Security::telnetAvailable() const
437{ 437{
438 // ### not implemented 438 // ### not implemented
439 return FALSE; 439 return FALSE;
440} 440}
441 441
442bool Security::sshAvailable() const 442bool Security::sshAvailable() const
443{ 443{
444 // ### not implemented 444 // ### not implemented
445 return FALSE; 445 return FALSE;
446} 446}