/*************************************************************************** * Copyright (C) 2004 by Christoph Thielecke * * crissi99@gmx.de * * * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #ifndef __UTILS_H____ #define __UTILS_H____ #include #include #include #include "kvpncconfig.h" #include "kvpnc.h" #include "toolinfo.h" #include #include /** Provides various help functions. @author Christoph Thielecke */ class Utils : public QObject { Q_OBJECT public: Utils(KVpncConfig* config,QObject *parent = 0, const char *name = 0); ~Utils(); bool isValidIPv4Address(QString Address); bool isValidIPv4NetworkAddress(QString Address); bool isValidIPv4BroadcastAddress(QString Address); bool isValidIPv4Netmask(QString Netmask); bool tunDevExists(); bool createTunDev(); bool loadKernelModule(QString Name,QApplication *app); bool unloadKernelModule(QString Name,QApplication *app, bool force=true); bool doChmod(QString file, QString mode); bool resolvConfAvailable(); QStringList getOpenvpnCiphers(); QStringList getOpenvpnDigests(); QPtrList* getToolList(); ToolInfo* getToolInfo( QString name); QString resolveName(QString Name); QString removeSpecialCharsForFilename(QString filename); QString getNameAndPidOfProgramListen(int port); QString getEmailAddressOfCert(QString cert); QString getHostname(); QStringList getSmartcardSlots(QString ProviderLib); QStringList getSmartcardCertsFromSlot(QString slot,QString IdType,QString ProviderLib); QStringList getOpenvpnPkcs11Ids(QString ProviderLib); bool getNeedsPassphrase(QString key); QStringList getCertsFromCiscoCertStore(QString type="user"); QString dec2bin(int n); int dottedIpv4Netmask2NetmaskBytes(QString dottedIpv4Netmask); QString IpsecAlgoCurrent; struct IpsecAlgos { QStringList IpsecIkeEncryptionAlgorithms; QStringList IpsecIkeHashAlgorithms; QStringList IpsecIkeDhGroups; QStringList IpsecEspEncryptionAlgorithms; QStringList IpsecEspAuthenticationAlgorithms; QStringList IpsecCompressionAlgorithms; }; struct PppdCapabilities { bool pppdHasMppeRequiredSupport; bool pppdHasRequireMppeSupport; bool pppdHasReplacedefaultrouteSupport; /* options for pppd depending on pppd version */ // MPPE QString RequireMppeOption; QString Require128BitMppeOption; QString RefuseMppeOption; QString Refuse40BitMppeOption; QString Refuse128BitMppeOption; QString RequireStatelessOption; QString RequireStatefulOption; bool MppeOptionsInALine; // older pppd need all in one line // AUTH QString RequireAuthChapOption; QString RequireAuthMschapOption; QString RequireAuthMschapv2Option; QString RequireAuthPapOption; bool pppdHasMppeSupport; //< true if pppd has mppe support bool oldPppdStyle; //< true if old style was found ('mppe require') bool pppdOk; // if pppd could started }; struct IpsecAlgos getKernelCrypto(); struct IpsecAlgos getIpsecAlgos(); struct PppdCapabilities checkPppdCapabilities(); public slots: void readStdOutCreateTunDev(); void readStdErrCreateTunDev(); void readStdOutLoadKernelModule(); void readStdErrLoadKernelModule(); void readStdOutToolsTest(); void readStdErrToolsTest(); void readStdOutRetriveOpenvpnCiphers(); void readStdErrRetriveOpenvpnCiphers(); void readStdOutRetriveIpsecAlgos(); void readStdErrRetriveIpsecAlgos(); void readStdOutRetriveOpenvpnDigests(); void readStdErrRetriveOpenvpnDigests(); void readStdOutGetNameAndPidOfProgramListen(); void readStdErrGetNameAndPidOfProgramListen(); void readOutGetEmailAddressOfCert(); void readOutGetSmartcardSlots(KProcess * proc, char * buffer, int buflen); void readOutGetSmartcardCertsFromSlot(); void readOutGetOpenvpnPkcs11Ids(); void readOutNeedsPassphrase(); void readOutGetCertsFromCiscoCertStoreSlot(); void readPppdtestProcessOutput(); void readStdOutGetHostname(); void readStdErrGetHostname(); private: bool modprobeSuccess; bool toolsTestSuccess; bool retrieveOpenvpnCiphers; bool retrieveOpenvpnDigests; bool retrieveIpsecAlgos; bool retrieveNameAndPidOfProgramListen; bool retrieveHotsname; bool needsPassphrase; bool testPppdReplacedefaultroute; bool testPppdRequireMppe128; bool testPppdMppeRequiredSupport; bool testPppdNomppeStatefulSupport; bool testPppdStatelessSupport; bool testOldPppdStyle; bool testPppdRequireMppe; bool testPppdMppeRequired; QString tooltest_logfile; QProcess *ModprobeProcess; QProcess *createProcess; QProcess *NetworkDeviceTestProcess; QProcess *toolsTestProcess; QProcess *OpenvpnCiphersProcess; QProcess *OpenvpnDigestProcess; QProcess *NameAndPidOfProgramListenProcess; QProcess *GetEmailAddressOfCertProcess; KProcess *GetSmartcardSlotsProcess; QProcess *GetSmartcardCertsFromSlotProcess; QProcess *OpenvpnPkcs11IdsProcess; QProcess *GetCertsFromCiscoCertStoreProcess; QProcess *NeedsPassphraseProcess; QProcess *IpsecAlgosProcess; QProcess *TestPppdProcess; QProcess *GetHostnameProcess; QString resolvedIP; bool resolveFinished; QValueList list; QStringList *env; KVpncConfig *config; KTempFile *tmpfile; bool retrieveValidNetworkdevice; bool Pkcs11CertFound; QStringList OpenvpnCiphers; QStringList OpenvpnDigests; QStringList KernelCrypto; QString NameAndPidOfProgramListen; QString EmailAddressOfCert; QString OpenvpnDigestString; QString IdType; QString Hostname; QStringList SmartcardSlots; QStringList SmartcardCertsFromSlot; QStringList CertsFromCiscoCertStore; QStringList OpenvpnPkcs11Ids; int CertsFromCiscoCertPos; int ListenPort; int OpenvpnDigestCount; PppdCapabilities pppdcap; }; #endif