source: src-qt4/pc-dmconf/mainwindow.cpp @ fb7fe1b

9.2-releasereleng/10.0releng/10.0.1releng/10.0.2
Last change on this file since fb7fe1b was fb7fe1b, checked in by Kris Moore <kris@…>, 14 months ago

Add new pc-dmconf utility to the system and control panel,
it will allow configuring the login manager PCDM

  • Property mode set to 100644
File size: 7.1 KB
Line 
1/**************************************************************************
2*   Copyright (C) 2012 by Yuri Momotyuk                                   *
3*   yurkis@gmail.com                                                      *
4*   Copyright (C) 2013 by Kris Moore                                      *
5*   kris@pcbsd.org                                                        *
6*                                                                         *
7*   Permission is hereby granted, free of charge, to any person obtaining *
8*   a copy of this software and associated documentation files (the       *
9*   "Software"), to deal in the Software without restriction, including   *
10*   without limitation the rights to use, copy, modify, merge, publish,   *
11*   distribute, sublicense, and/or sell copies of the Software, and to    *
12*   permit persons to whom the Software is furnished to do so, subject to *
13*   the following conditions:                                             *
14*                                                                         *
15*   The above copyright notice and this permission notice shall be        *
16*   included in all copies or substantial portions of the Software.       *
17*                                                                         *
18*   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,       *
19*   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF    *
20*   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*
21*   IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR     *
22*   OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, *
23*   ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR *
24*   OTHER DEALINGS IN THE SOFTWARE.                                       *
25***************************************************************************/
26
27#include "mainwindow.h"
28#include "ui_mainwindow.h"
29#include "pcbsd-utils.h"
30
31#include <QInputDialog>
32#include <QMessageBox>
33#include <QTextStream>
34
35#define DM_CONFIG_FILE QString("/usr/local/etc/pcdm.conf")
36
37///////////////////////////////////////////////////////////////////////////////
38inline bool toBoolean(QString Str, bool Default=false)
39{
40    if (Str.trimmed().toLower() == "true")
41        return true;
42    if (Str.trimmed().toLower() == "false")
43        return false;
44    return Default;
45}
46
47///////////////////////////////////////////////////////////////////////////////
48inline QString fromBoolean(bool flag)
49{
50    return (flag)?QString("true"):QString("false");
51}
52
53///////////////////////////////////////////////////////////////////////////////
54MainWindow::MainWindow(QWidget *parent) :
55    QMainWindow(parent),
56    ui(new Ui::MainWindow)
57{
58    ui->setupUi(this);
59    initUI();
60}
61
62///////////////////////////////////////////////////////////////////////////////
63MainWindow::~MainWindow()
64{
65    delete ui;
66}
67
68///////////////////////////////////////////////////////////////////////////////
69void MainWindow::initUI()
70{
71    getUsers();
72    ui->UsersList->clear();
73    QString autoLogUser = pcbsd::Utils::getValFromSHFile(DM_CONFIG_FILE, "AUTO_LOGIN_USER");
74    for (int  i=0; i<mvUsers.size(); i++)
75    {
76        ui->UsersList->addItem(mvUsers[i]);
77        if ( autoLogUser == mvUsers[i] )
78          ui->UsersList->setCurrentIndex(i);
79    }
80
81    QString autoLog = pcbsd::Utils::getValFromSHFile(DM_CONFIG_FILE, "ENABLE_AUTO_LOGIN");
82    if ( autoLog == "TRUE" ) {
83      ui->AutoLoginEnabledCB->setChecked(true);
84      ui->UsersList->setEnabled(true);
85    } else {
86      ui->AutoLoginEnabledCB->setChecked(false);
87      ui->UsersList->setEnabled(false);
88    }
89
90    ui->EnableXDCMP->setChecked(false);
91    QString xdmcp = pcbsd::Utils::getValFromSHFile(DM_CONFIG_FILE, "ALLOW_REMOTE_LOGIN");
92    if ( xdmcp == "TRUE" )
93      ui->EnableXDCMP->setChecked(true);
94
95    ui->SaveButton->setEnabled(false);
96}
97
98///////////////////////////////////////////////////////////////////////////////
99void MainWindow::on_UsersList_currentIndexChanged(int item) {
100    Q_UNUSED(item);
101    ui->SaveButton->setEnabled(true);
102}
103
104///////////////////////////////////////////////////////////////////////////////
105void MainWindow::getUsers()
106{
107    /*
108        here is modifyed code from pc-usermanager
109    */
110    mvUsers.clear();
111    QFile userFile("/etc/passwd");
112    if ( userFile.open(QIODevice::ReadOnly) ) {
113        QTextStream stream(&userFile);
114        stream.setCodec("UTF-8");
115        QString line;
116
117        while ( !stream.atEnd() ) {
118            line = stream.readLine();
119
120            if ((line.trimmed().indexOf("#") != 0) && (! line.isEmpty())) { //Make sure it isn't a comment or blank
121                QString username = line.section(":",0,0);
122                QString homedir = line.section(":",5,5);
123
124                // Ignore PEFS encrypted users
125                if ( QFile::exists(homedir + "/.pefs.db") )
126                  continue;
127
128                int uid = line.section(":",2,2).toInt();
129                if ((uid>1000)&&(uid<65534))
130                    mvUsers.push_back(username);
131            }//if gout user
132        }//for all lines
133    }//if can open file
134}
135
136///////////////////////////////////////////////////////////////////////////////
137void MainWindow::on_SaveButton_clicked()
138{
139    system("touch " + DM_CONFIG_FILE.toLatin1());
140    if ( ui->AutoLoginEnabledCB->isChecked() ) {
141       // First ask for password
142       bool ok;
143       QString pw = QInputDialog::getText(this, tr("Password Request"),
144                        tr("Please enter the login password for this user"), 
145                        QLineEdit::Password, "", &ok);
146       if ( ! ok )
147          return;
148     
149       pcbsd::Utils::setConfFileValue(DM_CONFIG_FILE, "ENABLE_AUTO_LOGIN", "ENABLE_AUTO_LOGIN=TRUE", -1);
150       pcbsd::Utils::setConfFileValue(DM_CONFIG_FILE, "AUTO_LOGIN_USER", "AUTO_LOGIN_USER=" + ui->UsersList->currentText(), -1);
151       pcbsd::Utils::setConfFileValue(DM_CONFIG_FILE, "AUTO_LOGIN_PASSWORD", "AUTO_LOGIN_PASSWORD=" + pw, -1);
152    } else {
153       pcbsd::Utils::setConfFileValue(DM_CONFIG_FILE, "ENABLE_AUTO_LOGIN", "ENABLE_AUTO_LOGIN=FALSE", -1);
154       pcbsd::Utils::setConfFileValue(DM_CONFIG_FILE, "AUTO_LOGIN_USER", "", -1);
155       pcbsd::Utils::setConfFileValue(DM_CONFIG_FILE, "AUTO_LOGIN_PASSWORD", "", -1);
156    }
157
158    if ( ui->EnableXDCMP->isChecked() )
159       pcbsd::Utils::setConfFileValue(DM_CONFIG_FILE, "ALLOW_REMOTE_LOGIN", "ALLOW_REMOTE_LOGIN=TRUE", -1);
160    else
161       pcbsd::Utils::setConfFileValue(DM_CONFIG_FILE, "ALLOW_REMOTE_LOGIN", "ALLOW_REMOTE_LOGIN=FALSE", -1);
162
163    // Lastly make sure we set perms
164    system("chmod 600 " + DM_CONFIG_FILE.toLatin1());
165    ui->SaveButton->setEnabled(false);
166}
167
168///////////////////////////////////////////////////////////////////////////////
169void MainWindow::on_AutoLoginEnabledCB_clicked(bool checked)
170{
171    ui->UsersList->setEnabled(checked);
172    ui->SaveButton->setEnabled(true);
173}
174
175///////////////////////////////////////////////////////////////////////////////
176void MainWindow::on_EnableXDCMP_clicked(bool checked)
177{
178  Q_UNUSED(checked);
179  ui->SaveButton->setEnabled(true);
180}
181
182///////////////////////////////////////////////////////////////////////////////
183void MainWindow::slotSingleInstance()
184{
185   this->hide();
186   this->showNormal();
187   this->activateWindow();
188   this->raise();
189}
Note: See TracBrowser for help on using the repository browser.