-rw-r--r-- | core/settings/security/multiauthconfig.cpp | 16 | ||||
-rw-r--r-- | core/settings/security/security.cpp | 18 |
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 | ||
20 | using Opie::Security::MultiauthPluginInterface; | 20 | using Opie::Security::MultiauthPluginInterface; |
21 | using Opie::Security::MultiauthPluginObject; | 21 | using Opie::Security::MultiauthPluginObject; |
22 | using Opie::Security::MultiauthConfigWidget; | 22 | using Opie::Security::MultiauthConfigWidget; |
23 | /// keeps information about MultiauthPluginObject plugins | 23 | /// keeps information about MultiauthPluginObject plugins |
24 | struct MultiauthPlugin { | 24 | struct 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 |
41 | static QValueList<MultiauthPlugin> pluginList; | 41 | static 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) |
45 | class ToolButton : public QToolButton { | 45 | class 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 | ||
58 | MultiauthGeneralConfig::MultiauthGeneralConfig(QWidget * parent, const char * name = "general Opie-multiauthentication config widget") | 58 | MultiauthGeneralConfig::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 |
100 | MultiauthGeneralConfig::~MultiauthGeneralConfig() | 100 | MultiauthGeneralConfig::~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 |
104 | void MultiauthGeneralConfig::checkScreens() | 104 | void 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 |
111 | void MultiauthGeneralConfig::checkBypass() | 111 | void 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 |
128 | static void test_and_start() { | 128 | static 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 | ||
141 | MultiauthConfig::MultiauthConfig(QWidget* par, const char* w, WFlags f) | 141 | MultiauthConfig::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 |
231 | MultiauthConfig::~MultiauthConfig() | 231 | MultiauthConfig::~MultiauthConfig() |
232 | { | 232 | { |
233 | } | 233 | } |
234 | 234 | ||
235 | void MultiauthConfig::accept() { | 235 | void 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 | ||
246 | void MultiauthConfig::done( int r ) { | 246 | void 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 |
252 | void MultiauthConfig::moveSelectedUp() | 252 | void 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 |
261 | void MultiauthConfig::moveSelectedDown() | 261 | void 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 |
270 | void MultiauthConfig::readConfig() | 270 | void 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 | ||
351 | void MultiauthConfig::writeConfig() | 351 | void 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 |
450 | void MultiauthConfig::pluginsChanged() { | 450 | void 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 |
455 | void MultiauthConfig::loadPlugins() { | 455 | void 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 | ||
518 | void MultiauthConfig::deleteListEntry() | 518 | void 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 | ||
523 | void MultiauthConfig::restoreDefaults() | 523 | void 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 | ||
542 | void MultiauthConfig::insertDefaultRanges() | 542 | void 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 | ||
554 | void MultiauthConfig::updateGUI() | 554 | void 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 | ||
560 | void MultiauthConfig::selectNet(int auth_peer,int auth_peer_bits, bool update) | 560 | void 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 | ||
621 | void MultiauthConfig::parseNet(const QString& sn,int& auth_peer,int& auth_peer_bits) | 621 | void 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 | ||
642 | void MultiauthConfig::loadUsers() | 642 | void 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 | ||
665 | void MultiauthConfig::toggleAutoLogin(bool val) | 665 | void 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 | ||
677 | void MultiauthConfig::setSyncNet(const QString& sn) | 677 | void 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 | ||
684 | void MultiauthConfig::changeLoginName( int idx ) | 684 | void 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? |
691 | bool MultiauthConfig::telnetAvailable() const | 691 | bool 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? |
697 | bool MultiauthConfig::sshAvailable() const | 697 | bool 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 | ||
39 | using namespace Opie::Core; | 39 | using 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 | ||
114 | Security::~Security() | 114 | Security::~Security() |
115 | { | 115 | { |
116 | } | 116 | } |
117 | 117 | ||
118 | void Security::deleteListEntry() | 118 | void Security::deleteListEntry() |
119 | { | 119 | { |
120 | syncnet->removeItem(syncnet->currentItem()); | 120 | syncnet->removeItem(syncnet->currentItem()); |
121 | } | 121 | } |
122 | 122 | ||
123 | void Security::restoreDefaults() | 123 | void 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 | ||
142 | void Security::insertDefaultRanges() | 142 | void 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 | ||
154 | void Security::updateGUI() | 154 | void 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 | ||
168 | void Security::show() | 168 | void 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 | ||
194 | void Security::accept() | 194 | void 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 | ||
201 | void Security::done(int r) | 201 | void Security::done(int r) |
202 | { | 202 | { |
203 | QDialog::done(r); | 203 | QDialog::done(r); |
204 | close(); | 204 | close(); |
205 | } | 205 | } |
206 | 206 | ||
207 | void Security::selectNet(int auth_peer,int auth_peer_bits, bool update) | 207 | void 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 | ||
269 | void Security::parseNet(const QString& sn,int& auth_peer,int& auth_peer_bits) | 269 | void 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 | ||
290 | void Security::loadUsers ( void ) | 290 | void 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 | ||
314 | void Security::toggleAutoLogin(bool val) | 314 | void 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 | ||
325 | void Security::setSyncNet(const QString& sn) | 325 | void 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 | ||
332 | void Security::applySecurity() | 332 | void 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 | ||
400 | void Security::changeLoginName( int idx ) | 400 | void Security::changeLoginName( int idx ) |
401 | { | 401 | { |
402 | autoLoginName = userlist->text(idx);; | 402 | autoLoginName = userlist->text(idx);; |
403 | updateGUI(); | 403 | updateGUI(); |
404 | } | 404 | } |
405 | 405 | ||
406 | void Security::changePassCode() | 406 | void 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 | ||
424 | void Security::clearPassCode() | 424 | void Security::clearPassCode() |
425 | { | 425 | { |
426 | passcode = QString::null; | 426 | passcode = QString::null; |
427 | updateGUI(); | 427 | updateGUI(); |
428 | } | 428 | } |
429 | 429 | ||
430 | 430 | ||
431 | QString Security::enterPassCode(const QString& prompt) | 431 | QString Security::enterPassCode(const QString& prompt) |
432 | { | 432 | { |
433 | return Password::getPassword(prompt); | 433 | return Password::getPassword(prompt); |
434 | } | 434 | } |
435 | 435 | ||
436 | bool Security::telnetAvailable() const | 436 | bool Security::telnetAvailable() const |
437 | { | 437 | { |
438 | // ### not implemented | 438 | // ### not implemented |
439 | return FALSE; | 439 | return FALSE; |
440 | } | 440 | } |
441 | 441 | ||
442 | bool Security::sshAvailable() const | 442 | bool Security::sshAvailable() const |
443 | { | 443 | { |
444 | // ### not implemented | 444 | // ### not implemented |
445 | return FALSE; | 445 | return FALSE; |
446 | } | 446 | } |