summaryrefslogtreecommitdiffstats
path: root/src/utils.h
blob: 8cd124df0f8a4454688b7bc223bbbf16efb6ac92 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
/***************************************************************************
 *   Copyright (C) 2004 by Christoph Thielecke                             *
 *   [email protected]                                                       *
 *                                                                         *
 *   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 <tqobject.h>
#include <tqprocess.h>
#include <tqvaluelist.h>
#include "kvpncconfig.h"
#include "kvpnc.h"
#include "toolinfo.h"
#include <tqstringlist.h>
#include <ktempfile.h>

/**
Provides various help functions.
 
@author Christoph Thielecke
*/
class Utils : public TQObject
{
	Q_OBJECT
  
public:
	Utils(KVpncConfig* config,TQObject *parent = 0, const char *name = 0);

	~Utils();

	bool isValidIPv4Address(TQString Address);
	bool isValidIPv4NetworkAddress(TQString Address);
	bool isValidIPv4BroadcastAddress(TQString Address);
	bool isValidIPv4Netmask(TQString Netmask);
	bool tunDevExists();
	bool createTunDev();
	bool loadKernelModule(TQString Name,TQApplication *app);
	bool unloadKernelModule(TQString Name,TQApplication *app, bool force=true);
	bool doChmod(TQString file, TQString mode);
	bool resolvConfAvailable();
	TQStringList getOpenvpnCiphers();
	TQStringList getOpenvpnDigests();
	TQPtrList<ToolInfo>* getToolList();
	ToolInfo* getToolInfo( TQString name);
	TQString resolveName(TQString Name);
	TQString removeSpecialCharsForFilename(TQString filename);
	TQString getNameAndPidOfProgramListen(int port);
	TQString getEmailAddressOfCert(TQString cert);
	TQString getHostname();
	TQStringList getSmartcardSlots(TQString ProviderLib);
	TQStringList getSmartcardCertsFromSlot(TQString slot,TQString IdType,TQString ProviderLib);
	TQStringList getOpenvpnPkcs11Ids(TQString ProviderLib);
	bool getNeedsPassphrase(TQString key);
	TQStringList getCertsFromCiscoCertStore(TQString type="user");
	TQString dec2bin(int n);
	int dottedIpv4Netmask2NetmaskBytes(TQString dottedIpv4Netmask);
	TQString IpsecAlgoCurrent;
	struct IpsecAlgos {
		TQStringList IpsecIkeEncryptionAlgorithms;
		TQStringList IpsecIkeHashAlgorithms;
		TQStringList IpsecIkeDhGroups;
		TQStringList IpsecEspEncryptionAlgorithms;
		TQStringList IpsecEspAuthenticationAlgorithms;
		TQStringList IpsecCompressionAlgorithms;
	};

	struct PppdCapabilities {
		bool pppdHasMppeRequiredSupport;
		bool pppdHasRequireMppeSupport;
		bool pppdHasReplacedefaultrouteSupport;

		/* options for pppd depending on pppd version */

		// MPPE
		TQString RequireMppeOption;
		TQString Require128BitMppeOption;
		TQString RefuseMppeOption;
		TQString Refuse40BitMppeOption;
		TQString Refuse128BitMppeOption;
		TQString RequireStatelessOption;
		TQString RequireStatefulOption;
		bool MppeOptionsInALine; // older pppd need all in one line

		// AUTH
		TQString RequireAuthChapOption;
		TQString RequireAuthMschapOption;
		TQString RequireAuthMschapv2Option;
		TQString 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;
	
	TQString tooltest_logfile;
	TQProcess *ModprobeProcess;
	TQProcess *createProcess;
	TQProcess *NetworkDeviceTestProcess;
	TQProcess *toolsTestProcess;
	TQProcess *OpenvpnCiphersProcess;
	TQProcess *OpenvpnDigestProcess;
	TQProcess *NameAndPidOfProgramListenProcess;
	TQProcess *GetEmailAddressOfCertProcess;
	KProcess *GetSmartcardSlotsProcess;
	TQProcess *GetSmartcardCertsFromSlotProcess;
	TQProcess *OpenvpnPkcs11IdsProcess;
	TQProcess *GetCertsFromCiscoCertStoreProcess;
	TQProcess *NeedsPassphraseProcess;
	TQProcess *IpsecAlgosProcess;
	TQProcess *TestPppdProcess;
	TQProcess *GetHostnameProcess;
	
	TQString resolvedIP;
	bool resolveFinished;
	TQValueList<TQHostAddress> list;
	TQStringList *env;
	KVpncConfig *config;
	KTempFile *tmpfile;
	bool retrieveValidNetworkdevice;
	bool Pkcs11CertFound;
	TQStringList OpenvpnCiphers;
	TQStringList OpenvpnDigests;
	TQStringList KernelCrypto;
	TQString NameAndPidOfProgramListen;
	TQString EmailAddressOfCert;
	TQString OpenvpnDigestString;
	TQString IdType;
	TQString Hostname;
	TQStringList SmartcardSlots;
	TQStringList SmartcardCertsFromSlot;
	TQStringList CertsFromCiscoCertStore;
	TQStringList OpenvpnPkcs11Ids;

	int CertsFromCiscoCertPos;
	int ListenPort;
	int OpenvpnDigestCount;
	PppdCapabilities pppdcap;
};

#endif