summaryrefslogtreecommitdiffstats
path: root/kcontrol/samba/kcmsambalog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kcontrol/samba/kcmsambalog.cpp')
-rw-r--r--kcontrol/samba/kcmsambalog.cpp253
1 files changed, 253 insertions, 0 deletions
diff --git a/kcontrol/samba/kcmsambalog.cpp b/kcontrol/samba/kcmsambalog.cpp
new file mode 100644
index 000000000..c4f01b464
--- /dev/null
+++ b/kcontrol/samba/kcmsambalog.cpp
@@ -0,0 +1,253 @@
+/*
+ * kcmsambalog.cpp
+ *
+ * Copyright (c) 2000 Alexander Neundorf <neundorf@kde.org>
+ *
+ * Requires the Qt widget libraries, available at no cost at
+ * http://www.troll.no/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#include <qfile.h>
+#include <qlayout.h>
+#include <qwhatsthis.h>
+
+#include <kmessagebox.h>
+#include <kdialog.h>
+#include <klocale.h>
+
+#include "kcmsambalog.h"
+#include "kcmsambalog.moc"
+
+#define LOG_SCREEN_XY_OFFSET 10
+
+LogView::LogView(QWidget *parent,KConfig *config, const char *name)
+: QWidget (parent, name)
+,configFile(config)
+,filesCount(0)
+,connectionsCount(0)
+,logFileName("/var/log/samba.log",this)
+,label(&logFileName,i18n("Samba log file: "),this)
+,viewHistory(this)
+,showConnOpen(i18n("Show opened connections"),this)
+,showConnClose(i18n("Show closed connections"),this)
+,showFileOpen(i18n("Show opened files"),this)
+,showFileClose(i18n("Show closed files"),this)
+,updateButton(i18n("&Update"),this)
+{
+ QVBoxLayout *mainLayout=new QVBoxLayout(this, KDialog::marginHint(),
+ KDialog::spacingHint());
+ QHBoxLayout *leLayout=new QHBoxLayout(mainLayout);
+ leLayout->addWidget(&label);
+ leLayout->addWidget(&logFileName,1);
+ mainLayout->addWidget(&viewHistory,1);
+ QGridLayout *subLayout=new QGridLayout(mainLayout,2,2);
+ subLayout->addWidget(&showConnOpen,0,0);
+ subLayout->addWidget(&showConnClose,1,0);
+ subLayout->addWidget(&showFileOpen,0,1);
+ subLayout->addWidget(&showFileClose,1,1);
+ mainLayout->addWidget(&updateButton,0,Qt::AlignLeft);
+
+ QWhatsThis::add( &logFileName, i18n("This page presents the contents of"
+ " your samba log file in a friendly layout. Check that the correct log"
+ " file for your computer is listed here. If you need to, correct the name"
+ " or location of the log file, and then click the \"Update\" button.") );
+
+ QWhatsThis::add( &showConnOpen, i18n("Check this option if you want to"
+ " view the details for connections opened to your computer.") );
+
+ QWhatsThis::add( &showConnClose, i18n("Check this option if you want to"
+ " view the events when connections to your computer were closed.") );
+
+ QWhatsThis::add( &showFileOpen, i18n("Check this option if you want to"
+ " see the files which were opened on your computer by remote users."
+ " Note that file open/close events are not logged unless the samba"
+ " log level is set to at least 2 (you cannot set the log level"
+ " using this module).") );
+
+ QWhatsThis::add( &showFileClose, i18n("Check this option if you want to"
+ " see the events when files opened by remote users were closed."
+ " Note that file open/close events are not logged unless the samba"
+ " log level is set to at least 2 (you cannot set the log level"
+ " using this module).") );
+
+ QWhatsThis::add( &updateButton, i18n("Click here to refresh the information"
+ " on this page. The log file (shown above) will be read to obtain the"
+ " events logged by samba.") );
+
+ logFileName.setURL("/var/log/samba.log");
+
+ viewHistory.setAllColumnsShowFocus(TRUE);
+ viewHistory.setFocusPolicy(QWidget::ClickFocus);
+ viewHistory.setShowSortIndicator(true);
+
+ viewHistory.addColumn(i18n("Date & Time"),130);
+ viewHistory.addColumn(i18n("Event"),150);
+ viewHistory.addColumn(i18n("Service/File"),210);
+ viewHistory.addColumn(i18n("Host/User"),150);
+
+ QWhatsThis::add( &viewHistory, i18n("This list shows details of the events"
+ " logged by samba. Note that events at the file level are not logged"
+ " unless you have configured the log level for samba to 2 or greater.<p>"
+ " As with many other lists in KDE, you can click on a column heading"
+ " to sort on that column. Click again to change the sorting direction"
+ " from ascending to descending or vice versa.<p>"
+ " If the list is empty, try clicking the \"Update\" button. The samba"
+ " log file will be read and the list refreshed.") );
+
+ showConnOpen.setChecked(TRUE);
+ showConnClose.setChecked(TRUE);
+ showFileOpen.setChecked(FALSE);
+ showFileClose.setChecked(FALSE);
+
+ connect(&updateButton,SIGNAL(clicked()),this,SLOT(updateList()));
+ emit contentsChanged(&viewHistory,0,0);
+
+ label.setMinimumSize(label.sizeHint());
+ logFileName.setMinimumSize(250,logFileName.sizeHint().height());
+ viewHistory.setMinimumSize(425,200);
+ showConnOpen.setMinimumSize(showConnOpen.sizeHint());
+ showConnClose.setMinimumSize(showConnClose.sizeHint());
+ showFileOpen.setMinimumSize(showFileOpen.sizeHint());
+ showFileClose.setMinimumSize(showFileClose.sizeHint());
+ updateButton.setFixedSize(updateButton.sizeHint());
+}
+
+void LogView::loadSettings()
+{
+ if (configFile==0) return;
+ configFile->setGroup(LOGGROUPNAME);
+ logFileName.setURL(configFile->readPathEntry( "SambaLogFile", "/var/log/samba.log"));
+
+ showConnOpen.setChecked(configFile->readBoolEntry( "ShowConnectionOpen", TRUE));
+ showConnClose.setChecked(configFile->readBoolEntry( "ShowConnectionClose", FALSE));
+ showFileOpen.setChecked(configFile->readBoolEntry( "ShowFileOpen", TRUE));
+ showFileClose.setChecked(configFile->readBoolEntry( "ShowFileClose", FALSE));
+}
+
+void LogView::saveSettings()
+{
+ if (configFile==0) return;
+ configFile->setGroup(LOGGROUPNAME);
+ configFile->writePathEntry( "SambaLogFile", logFileName.url());
+
+ configFile->writeEntry( "ShowConnectionOpen", showConnOpen.isChecked());
+ configFile->writeEntry( "ShowConnectionClose", showConnClose.isChecked());
+ configFile->writeEntry( "ShowFileOpen", showFileOpen.isChecked());
+ configFile->writeEntry( "ShowFileClose", showFileClose.isChecked());
+}
+
+#define CONN_OPEN " connect to service "
+#define CONN_CLOSE " closed connection to service "
+#define FILE_OPEN " opened file "
+#define FILE_CLOSE " closed file "
+
+//caution ! high optimized code :-)
+void LogView::updateList()
+{
+ QFile logFile(logFileName.url());
+ if (logFile.open(IO_ReadOnly))
+ {
+ QApplication::setOverrideCursor(waitCursor);
+ viewHistory.clear();
+ filesCount=0;
+ connectionsCount=0;
+
+ int connOpenLen(strlen(CONN_OPEN));
+ int connCloseLen(strlen(CONN_CLOSE));
+ int fileOpenLen(strlen(FILE_OPEN));
+ int fileCloseLen(strlen(FILE_CLOSE));
+
+ char buf[400];
+ char *c1, *c2, *c3, *c4, *c, time[25];
+ int timeRead(0);
+
+ while (!logFile.atEnd())
+ {
+ logFile.readLine(buf,sizeof(buf));
+ timeRead=0;
+ if (buf[0]=='[')
+ {
+ if (strlen(buf)>11)
+ if (buf[5]=='/')
+ {
+ buf[20]='\0';
+ strncpy(time,buf+1, sizeof(time));
+ time[sizeof(time)-1] = '\0';
+ timeRead=1;
+ };
+ };
+ if (timeRead==0)
+ {
+ c1=0;
+ c2=0;
+ c3=0;
+ c4=0;
+ if (showConnOpen.isChecked()) c1=strstr(buf,CONN_OPEN);
+ if (c1==0)
+ {
+ if (showConnClose.isChecked()) c2=strstr(buf,CONN_CLOSE);
+ if (c2==0)
+ {
+ if (showFileOpen.isChecked()) c3=strstr(buf,FILE_OPEN);
+ if (c3==0)
+ {
+ if (showFileClose.isChecked()) c4=strstr(buf,FILE_CLOSE);
+ if (c4==0) continue;
+ };
+ };
+ };
+ if (c1!=0)
+ {
+ c=strstr(buf," as user");
+ *c='\0';
+ *c1='\0';
+ new QListViewItemX(&viewHistory,time,I18N_NOOP("CONNECTION OPENED"),c1+connOpenLen,buf+2);
+ connectionsCount++;
+ }
+ else if (c2!=0)
+ {
+ *c2='\0';
+ new QListViewItemX(&viewHistory,time,I18N_NOOP("CONNECTION CLOSED"),c2+connCloseLen,buf+2);
+ }
+ else if (c3!=0)
+ {
+ c=strstr(buf," read=");
+ *c='\0';
+ *c3='\0';
+ new QListViewItemX(&viewHistory,time,I18N_NOOP(" FILE OPENED"),c3+fileOpenLen,buf+2);
+ filesCount++;
+ }
+ else if (c4!=0)
+ {
+ c=strstr(buf," (numopen=");
+ *c='\0';
+ *c4='\0';
+ new QListViewItemX(&viewHistory,time,I18N_NOOP(" FILE CLOSED"),c4+fileCloseLen,buf+2);
+ };
+ };
+ };
+ logFile.close();
+ emit contentsChanged(&viewHistory, filesCount, connectionsCount);
+ QApplication::restoreOverrideCursor();
+ }
+ else
+ {
+ QString tmp = i18n("Could not open file %1").arg(logFileName.url());
+ KMessageBox::error(this,tmp);
+ };
+}
+