-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 | |||
@@ -431,269 +431,269 @@ void MultiauthConfig::writeConfig() | |||
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; |
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 | |||
@@ -31,317 +31,317 @@ | |||
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); |