source: lab.git/Dev/utvpn/utvpn-unix-v101-7101-public/src/Cedar/Account.h @ 86521dd

trunk
Last change on this file since 86521dd was a1bae3e, checked in by mitty <mitty@…>, 12 years ago
  • copy vendor drop to trunk

git-svn-id: https://lab.mitty.jp/svn/lab/trunk@147 7d2118f6-f56c-43e7-95a2-4bb3031d96e7

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