make oidentd config world readable by default
authorDaniel Albers <daniel@lbe.rs>
Wed, 8 Feb 2012 22:22:23 +0000 (23:22 +0100)
committerManuel Nickschas <sputnick@quassel-irc.org>
Mon, 13 Feb 2012 19:35:38 +0000 (20:35 +0100)
and add some documentation

src/core/oidentdconfiggenerator.cpp
src/core/oidentdconfiggenerator.h

index df3f8c4..0f65349 100644 (file)
@@ -71,14 +71,17 @@ bool OidentdConfigGenerator::addSocket(const CoreIdentity *identity, const QHost
   return ret;
 }
 
   return ret;
 }
 
-// not yet implemented
+//! not yet implemented
 bool OidentdConfigGenerator::removeSocket(const CoreIdentity *identity, const QHostAddress &localAddress, quint16 localPort, const QHostAddress &peerAddress, quint16 peerPort) {
   Q_UNUSED(identity) Q_UNUSED(localAddress) Q_UNUSED(localPort) Q_UNUSED(peerAddress) Q_UNUSED(peerPort)
   return true;
 }
 
 bool OidentdConfigGenerator::parseConfig(bool readQuasselStanzas) {
 bool OidentdConfigGenerator::removeSocket(const CoreIdentity *identity, const QHostAddress &localAddress, quint16 localPort, const QHostAddress &peerAddress, quint16 peerPort) {
   Q_UNUSED(identity) Q_UNUSED(localAddress) Q_UNUSED(localPort) Q_UNUSED(peerAddress) Q_UNUSED(peerPort)
   return true;
 }
 
 bool OidentdConfigGenerator::parseConfig(bool readQuasselStanzas) {
-  if (!_configFile->isOpen() && !_configFile->open(QIODevice::ReadWrite))
+  if (!_configFile->exists())
+    return true;
+
+  if (!_configFile->isOpen() && !_configFile->open(QIODevice::ReadOnly))
     return false;
   _mutex.lock();
 
     return false;
   _mutex.lock();
 
@@ -99,8 +102,13 @@ bool OidentdConfigGenerator::parseConfig(bool readQuasselStanzas) {
 }
 
 bool OidentdConfigGenerator::writeConfig() {
 }
 
 bool OidentdConfigGenerator::writeConfig() {
-  if (!_configFile->isOpen() && !_configFile->open(QIODevice::ReadWrite | QIODevice::Text))
+  mode_t prev_umask = umask(S_IXUSR | S_IWGRP | S_IXGRP | S_IWOTH | S_IXOTH); // == 0133, rw-r--r--
+  bool not_open = (!_configFile->isOpen() && !_configFile->open(QIODevice::ReadWrite | QIODevice::Text));
+  umask(prev_umask);
+
+  if (not_open)
     return false;
     return false;
+
   _mutex.lock();
 
   _configFile->seek(0);
   _mutex.lock();
 
   _configFile->seek(0);
index 81ee21c..666242d 100644 (file)
 #include <QHostAddress>
 #include <QMutex>
 
 #include <QHostAddress>
 #include <QMutex>
 
+#ifndef Q_OS_WIN32
+#  include <sys/types.h>
+#  include <sys/stat.h>
+#endif /* Q_OS_WIN32 */
+
 #include "quassel.h"
 #include "coreidentity.h"
 
 #include "quassel.h"
 #include "coreidentity.h"
 
+//!  Produces oidentd configuration files
+/*!
+  Upon IRC connect this class puts the clients' ident data into an oidentd configuration file.
+
+  The default path is <~/.oidentd.conf>.
+
+  For oidentd to incorporate this file, the global oidentd.conf has to state something like this:
+
+  user "quassel" {
+    default {
+      allow spoof
+      allow spoof_all
+    }
+  }
+
+*/
+
 class OidentdConfigGenerator : public QObject
 {
     Q_OBJECT
 class OidentdConfigGenerator : public QObject
 {
     Q_OBJECT
@@ -38,8 +60,6 @@ public:
   explicit OidentdConfigGenerator(QObject *parent = 0);
   ~OidentdConfigGenerator();
 
   explicit OidentdConfigGenerator(QObject *parent = 0);
   ~OidentdConfigGenerator();
 
-signals:
-    
 public slots:
   bool addSocket(const CoreIdentity *identity, const QHostAddress &localAddress, quint16 localPort, const QHostAddress &peerAddress, quint16 peerPort);
   bool removeSocket(const CoreIdentity *identity, const QHostAddress &localAddress, quint16 localPort, const QHostAddress &peerAddress, quint16 peerPort);
 public slots:
   bool addSocket(const CoreIdentity *identity, const QHostAddress &localAddress, quint16 localPort, const QHostAddress &peerAddress, quint16 peerPort);
   bool removeSocket(const CoreIdentity *identity, const QHostAddress &localAddress, quint16 localPort, const QHostAddress &peerAddress, quint16 peerPort);