1 // SoftEther UT-VPN SourceCode
\r
3 // Copyright (C) 2004-2010 SoftEther Corporation.
\r
4 // Copyright (C) 2004-2010 University of Tsukuba, Japan.
\r
5 // Copyright (C) 2003-2010 Daiyuu Nobori.
\r
6 // All Rights Reserved.
\r
8 // http://utvpn.tsukuba.ac.jp/
\r
10 // This program is free software; you can redistribute it and/or
\r
11 // modify it under the terms of the GNU General Public License
\r
12 // version 2 as published by the Free Software Foundation.
\r
14 // This program is distributed in the hope that it will be useful,
\r
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
\r
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
\r
17 // GNU General Public License for more details.
\r
19 // You should have received a copy of the GNU General Public License version 2
\r
20 // along with this program; if not, write to the Free Software
\r
21 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
\r
23 // このファイルは GPL バージョン 2 ライセンスで公開されています。
\r
24 // 誰でもこのファイルの内容を複製、改変したり、改変したバージョンを再配布
\r
25 // することができます。ただし、原著作物を改変した場合は、原著作物の著作権表示
\r
26 // を除去することはできません。改変した著作物を配布する場合は、改変実施者の
\r
27 // 著作権表示を原著作物の著作権表示に付随して記載するようにしてください。
\r
29 // この SoftEther UT-VPN オープンソース・プロジェクトは、日本国の
\r
30 // ソフトイーサ株式会社 (SoftEther Corporation, http://www.softether.co.jp/ )
\r
31 // および筑波大学 (University of Tsukuba, http://www.tsukuba.ac.jp/ ) によって
\r
33 // 本プログラムの配布者は、本プログラムを、業としての利用以外のため、
\r
34 // および、試験または研究のために利用が行われることを想定して配布
\r
36 // SoftEther UT-VPN プロジェクトの Web サイトは http://utvpn.tsukuba.ac.jp/ に
\r
38 // 本ソフトウェアの不具合の修正、機能改良、セキュリティホールの修復などのコード
\r
39 // の改変を行った場合で、その成果物を SoftEther UT-VPN プロジェクトに提出して
\r
40 // いただける場合は、 http://utvpn.tsukuba.ac.jp/ までソースコードを送付して
\r
41 // ください。SoftEther UT-VPN プロジェクトの本体リリースまたはブランチリリース
\r
44 // GPL に基づいて原著作物が提供される本ソフトウェアの改良版を配布、販売する
\r
45 // 場合は、そのソースコードを GPL に基づいて誰にでも開示する義務が生じます。
\r
47 // 本ソフトウェアに関連する著作権、特許権、商標権はソフトイーサ株式会社
\r
48 // (SoftEther Corporation) およびその他の著作権保持者が保有しています。
\r
49 // ソフトイーサ株式会社等はこれらの権利を放棄していません。本ソフトウェアの
\r
50 // 二次著作物を配布、販売する場合は、これらの権利を侵害しないようにご注意
\r
53 // お願い: どのような通信ソフトウェアにも通常は必ず未発見の
\r
54 // セキュリティホールが潜んでいます。本ソースコードをご覧いただいた結果、
\r
55 // UT-VPN にセキュリティホールを発見された場合は、当該セキュリティホールの
\r
56 // 情報を不特定多数に開示される前に、必ず、ソフトイーサ株式会社
\r
57 // および脆弱性情報の届出を受け付ける公的機関まで通報いただき、
\r
58 // 公益保護にご協力いただきますようお願い申し上げます。
\r
60 // ソフトイーサ株式会社は、当該セキュリティホールについて迅速に対処を
\r
61 // 行い、UT-VPN および UT-VPN に関連するソフトウェアのユーザー・顧客
\r
64 // ソフトイーサへの届出先: http://www.softether.co.jp/jp/contact/
\r
65 // 日本国内の脆弱性情報届出受付公的機関:
\r
67 // http://www.ipa.go.jp/security/vuln/report/
\r
69 // 上記各事項について不明な点は、ソフトイーサ株式会社までご連絡ください。
\r
70 // 連絡先: http://www.softether.co.jp/jp/contact/
\r
72 // -----------------------------------------------
\r
75 // 新規リリース by SoftEther
\r
76 // -----------------------------------------------
\r
100 bool Access; // アクセスを許可
\r
101 bool DHCPFilter; // DHCP パケットをフィルタリング (IPv4)
\r
102 bool DHCPNoServer; // DHCP サーバーの動作を禁止 (IPv4)
\r
103 bool DHCPForce; // DHCP が割り当てた IP アドレスを強制 (IPv4)
\r
104 bool NoBridge; // ブリッジを禁止
\r
105 bool NoRouting; // ルータ動作を禁止 (IPv4)
\r
106 bool CheckMac; // MAC アドレスの重複を禁止
\r
107 bool CheckIP; // IP アドレスの重複を禁止 (IPv4)
\r
108 bool ArpDhcpOnly; // ARP・DHCP・ICMPv6 以外のブロードキャストを禁止
\r
109 bool PrivacyFilter; // プライバシーフィルタモード
\r
110 bool NoServer; // TCP/IP サーバーとしての動作を禁止 (IPv4)
\r
111 bool NoBroadcastLimiter; // ブロードキャスト数を制限しない
\r
112 bool MonitorPort; // モニタリングモードを許可
\r
113 UINT MaxConnection; // TCP コネクション数の最大値
\r
114 UINT TimeOut; // 通信タイムアウト時間
\r
115 UINT MaxMac; // MAC アドレスの上限数
\r
116 UINT MaxIP; // IP アドレスの上限数 (IPv4)
\r
117 UINT MaxUpload; // アップロード帯域幅
\r
118 UINT MaxDownload; // ダウンロード帯域幅
\r
119 bool FixPassword; // ユーザーはパスワードを変更できない
\r
120 UINT MultiLogins; // 多重ログイン制限数
\r
121 bool NoQoS; // VoIP / QoS 対応機能の使用を禁止
\r
124 bool RSandRAFilter; // ルータ要請/広告パケットをフィルタリング (IPv6)
\r
125 bool RAFilter; // ルータ広告パケットをフィルタリング (IPv6)
\r
126 bool DHCPv6Filter; // DHCP パケットをフィルタリング (IPv6)
\r
127 bool DHCPv6NoServer; // DHCP サーバーの動作を禁止 (IPv6)
\r
128 bool NoRoutingV6; // ルータ動作を禁止 (IPv6)
\r
129 bool CheckIPv6; // IP アドレスの重複を禁止 (IPv6)
\r
130 bool NoServerV6; // TCP/IP サーバーとしての動作を禁止 (IPv6)
\r
131 UINT MaxIPv6; // IP アドレスの上限数 (IPv6)
\r
132 bool NoSavePassword; // VPN Client でパスワードの保存を禁止
\r
133 UINT AutoDisconnect; // VPN Client を一定時間で自動切断
\r
134 bool FilterIPv4; // IPv4 パケットをすべてフィルタリング
\r
135 bool FilterIPv6; // IPv6 パケットをすべてフィルタリング
\r
136 bool FilterNonIP; // 非 IP パケットをすべてフィルタリング
\r
137 bool NoIPv6DefaultRouterInRA; // IPv6 ルータ広告からデフォルトルータ指定を削除
\r
138 bool NoIPv6DefaultRouterInRAWhenIPv6; // IPv6 ルータ広告からデフォルトルータ指定を削除 (IPv6 接続時有効化)
\r
139 UINT VLanId; // VLAN ID を指定
\r
141 bool Ver3; // ポリシーのバージョンが 3.0 以降かどうか
\r
148 REF *ref; // 参照カウンタ
\r
149 char *Name; // グループ名
\r
150 wchar_t *RealName; // 表示名
\r
151 wchar_t *Note; // メモ
\r
152 POLICY *Policy; // ポリシー
\r
153 TRAFFIC *Traffic; // トラフィックデータ
\r
160 REF *ref; // 参照カウンタ
\r
161 char *Name; // ユーザー名
\r
162 wchar_t *RealName; // 本名
\r
163 wchar_t *Note; // メモ
\r
164 char *GroupName; // グループ名
\r
165 USERGROUP *Group; // グループ
\r
166 UINT AuthType; // 認証の種類
\r
167 void *AuthData; // 認証データ
\r
168 UINT64 CreatedTime; // 作成日時
\r
169 UINT64 UpdatedTime; // 更新日時
\r
170 UINT64 ExpireTime; // 有効期限
\r
171 UINT64 LastLoginTime; // 最終ログイン時刻
\r
172 UINT NumLogin; // ログイン回数の合計
\r
173 POLICY *Policy; // ポリシー
\r
174 TRAFFIC *Traffic; // トラフィックデータ
\r
178 struct AUTHPASSWORD
\r
180 UCHAR HashedKey[SHA1_SIZE]; // ハッシュされたパスワード
\r
184 struct AUTHUSERCERT
\r
186 X *UserX; // ユーザーの X509 証明書
\r
190 struct AUTHROOTCERT
\r
192 X_SERIAL *Serial; // シリアル番号
\r
193 wchar_t *CommonName; // CommonName
\r
199 wchar_t *RadiusUsername; // Radius 上でのユーザー名
\r
202 // Windows NT 認証データ
\r
205 wchar_t *NtUsername; // NT 上でのユーザー名
\r
211 #define POLICY_CURRENT_VERSION 3
\r
212 #define NUM_POLICY_ITEM ((sizeof(POLICY) / sizeof(UINT)) - 1)
\r
213 #define NUM_POLICY_ITEM_FOR_VER2 22
\r
214 #define NUM_POLICY_ITEM_FOR_VER3 38
\r
216 #define IS_POLICY_FOR_VER2(index) (((index) >= 0) && ((index) < NUM_POLICY_ITEM_FOR_VER2))
\r
217 #define IS_POLICY_FOR_VER3(index) (((index) >= 0) && ((index) < NUM_POLICY_ITEM_FOR_VER3))
\r
219 #define IS_POLICY_FOR_CURRENT_VER(index, ver) ((ver) >= 3 ? IS_POLICY_FOR_VER3(index) : IS_POLICY_FOR_VER2(index))
\r
221 #define POLICY_BOOL(p, i) (((bool *)(p))[(i)])
\r
222 #define POLICY_INT(p, i) (((UINT *)(p))[(i)])
\r
224 extern POLICY_ITEM policy_item[];
\r
230 int CompareUserName(void *p1, void *p2);
\r
231 int CompareGroupName(void *p1, void *p2);
\r
232 void AcLock(HUB *h);
\r
233 void AcUnlock(HUB *h);
\r
234 USERGROUP *NewGroup(char *name, wchar_t *realname, wchar_t *note);
\r
235 void ReleaseGroup(USERGROUP *g);
\r
236 void CleanupGroup(USERGROUP *g);
\r
237 USER *NewUser(char *name, wchar_t *realname, wchar_t *note, UINT authtype, void *authdata);
\r
238 void ReleaseUser(USER *u);
\r
239 void CleanupUser(USER *u);
\r
240 void FreeAuthData(UINT authtype, void *authdata);
\r
241 bool AcAddUser(HUB *h, USER *u);
\r
242 bool AcAddGroup(HUB *h, USERGROUP *g);
\r
243 USER *AcGetUser(HUB *h, char *name);
\r
244 USERGROUP *AcGetGroup(HUB *h, char *name);
\r
245 bool AcIsUser(HUB *h, char *name);
\r
246 bool AcIsGroup(HUB *h, char *name);
\r
247 bool AcDeleteUser(HUB *h, char *name);
\r
248 bool AcDeleteGroup(HUB *h, char *name);
\r
249 void JoinUserToGroup(USER *u, USERGROUP *g);
\r
250 void SetUserTraffic(USER *u, TRAFFIC *t);
\r
251 void SetGroupTraffic(USERGROUP *g, TRAFFIC *t);
\r
252 void AddUserTraffic(USER *u, TRAFFIC *diff);
\r
253 void AddGroupTraffic(USERGROUP *g, TRAFFIC *diff);
\r
254 void SetUserAuthData(USER *u, UINT authtype, void *authdata);
\r
255 void *NewPasswordAuthData(char *username, char *password);
\r
256 void *NewPasswordAuthDataRaw(UCHAR *hashed_password);
\r
257 void *NewUserCertAuthData(X *x);
\r
258 void *NewRootCertAuthData(X_SERIAL *serial, wchar_t *common_name);
\r
259 void *NewRadiusAuthData(wchar_t *username);
\r
260 void *NewNTAuthData(wchar_t *username);
\r
261 void HashPassword(void *dst, char *username, char *password);
\r
262 POLICY *GetDefaultPolicy();
\r
263 POLICY *ClonePolicy(POLICY *policy);
\r
264 void SetUserPolicy(USER *u, POLICY *policy);
\r
265 void OverwritePolicy(POLICY **target, POLICY *p);
\r
266 POLICY *GetUserPolicy(USER *u);
\r
267 void SetGroupPolicy(USERGROUP *g, POLICY *policy);
\r
268 POLICY *GetGroupPolicy(USERGROUP *g);
\r
269 wchar_t *GetPolicyTitle(UINT id);
\r
270 wchar_t *GetPolicyDescription(UINT id);
\r
271 bool IsUserName(char *name);
\r
272 void *CopyAuthData(void *authdata, UINT authtype);
\r
274 bool PolicyIsSupportedForCascade(UINT i);
\r
275 UINT PolicyStrToId(char *name);
\r
276 char *PolicyIdToStr(UINT i);
\r
277 POLICY_ITEM *GetPolicyItem(UINT id);
\r
278 void GetPolicyValueRangeStr(wchar_t *str, UINT size, UINT id);
\r
279 void FormatPolicyValue(wchar_t *str, UINT size, UINT id, UINT value);
\r
280 char *NormalizePolicyName(char *name);
\r
283 #endif // ACCOUNT_H
\r