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
86 // SoftEther リンク制御パケット
\r
89 UCHAR DestMacAddress[6]; // 宛先 MAC アドレス
\r
90 UCHAR SrcMacAddress[6]; // 送信元 MAC アドレス
\r
91 UCHAR SignatureS; // 'S'
\r
92 UCHAR SignatureE; // 'E'
\r
93 UCHAR Padding[2]; // パディング
\r
95 UCHAR HubSignature[16]; // HUB シグネチャ
\r
96 UINT TransactionId; // トランザクション ID
\r
98 UCHAR Dummy[20]; // ダミー
\r
99 UCHAR Checksum[SHA1_SIZE]; // チェックサム
\r
104 struct TEST_HISTORY
\r
114 UINT64 LastTestPacketSentTime; // 最後にテストパケットを送信した時刻
\r
115 UINT NextTestPacketSendInterval; // 次のテストパケット送信間隔
\r
116 bool CurrentTesting; // 現在テストパケットを送信してテスト中
\r
117 UINT TransactionId; // トランザクション ID
\r
118 LIST *TestHistory; // 受信履歴
\r
122 #define NO_ACCOUNT_DB(h) ((h)->FarmMember)
\r
124 // スタンドアロンまたはファームマスタ HUB の場合のデータベース
\r
127 LIST *UserList; // ユーザーリスト
\r
128 LIST *GroupList; // グループリスト
\r
129 LIST *RootCertList; // 信頼する証明書リスト
\r
130 LIST *CrlList; // CRL リスト
\r
134 struct TRAFFIC_LIMITER
\r
136 UINT64 LastTime; // 最後に測定した時刻
\r
137 UINT64 Value; // 現在の値
\r
140 // エンドポイントごとのブロードキャスト数記録
\r
143 UCHAR MacAddress[6]; // MAC アドレス
\r
144 UCHAR Padding[2]; // パディング
\r
145 IP SrcIp; // 送信元 IP アドレス
\r
146 IP DestIp; // 宛先 IP アドレス
\r
147 UINT64 CheckStartTick; // チェックを開始した時刻
\r
148 UINT CurrentBroadcastNum; // 現在のブロードキャスト個数
\r
149 UINT DiscardValue; // ブロードキャストパケットを破棄する割合
\r
152 // HUB 用パケットアダプタ情報構造体
\r
155 CANCEL *Cancel; // キャンセルオブジェクト
\r
156 QUEUE *PacketQueue; // パケットキュー
\r
157 bool MonitorPort; // モニタポート
\r
158 UINT64 Now; // 現在時刻
\r
159 TRAFFIC_LIMITER UploadLimiter; // アップロード帯域幅制限
\r
160 TRAFFIC_LIMITER DownloadLimiter; // ダウンロード帯域幅制限
\r
161 SESSION *Session; // セッション
\r
162 LIST *StormList; // ブロードキャスト嵐記録用リスト
\r
163 UINT UsernameHash; // ユーザー名ハッシュ
\r
164 UINT GroupnameHash; // グループ名ハッシュ
\r
171 UINT MaxSession; // 最大同時接続数
\r
172 bool NoEnum; // 列挙の対象外
\r
174 bool NoArpPolling; // ARP ポーリングしない
\r
175 bool NoIPv6AddrPolling; // IPv6 アドレスポーリングしない
\r
176 bool NoIpTable; // IP アドレステーブルを生成しない
\r
177 bool NoMacAddressLog; // MAC アドレスの登録ログを書き込まない
\r
178 bool ManageOnlyPrivateIP; // プライベート IP のみを管理対象にする
\r
179 bool ManageOnlyLocalUnicastIPv6; // ローカルユニキャスト IPv6 アドレスのみを管理対象にする
\r
180 bool DisableIPParsing; // IP 解釈を禁止する
\r
181 bool YieldAfterStorePacket; // パケットをストアした後イールドする
\r
182 bool NoSpinLockForPacketDelay; // スピンロックを使用しない
\r
183 UINT BroadcastStormDetectionThreshold; // ブロードキャスト数制限閾値
\r
184 bool FilterPPPoE; // PPPoE をフィルタリングする (0x8863, 0x8864)
\r
185 bool FilterOSPF; // OSPF をフィルタリングする (ip_proto=89)
\r
186 bool FilterIPv4; // IPv4 パケットをフィルタリングする
\r
187 bool FilterIPv6; // IPv6 パケットをフィルタリングする
\r
188 bool FilterNonIP; // 非 IP パケットをすべてフィルタリング
\r
189 bool FilterBPDU; // BPDU パケットをフィルタリングする
\r
190 UINT ClientMinimumRequiredBuild; // クライアントのビルド番号が一定以下であれば拒否
\r
191 bool NoIPv6DefaultRouterInRAWhenIPv6; // IPv6 ルータ広告からデフォルトルータ指定を削除 (IPv6 物理接続時のみ)
\r
192 bool NoIPv4PacketLog; // IPv4 パケットのパケットログを保存しない
\r
193 bool NoIPv6PacketLog; // IPv6 パケットのパケットログを保存しない
\r
194 bool NoLookBPDUBridgeId; // スイッチングのために BPDU ブリッジ ID を見ない
\r
195 bool NoManageVlanId; // VLAN ID を管理しない
\r
196 UINT VlanTypeId; // VLAN パケットの Type ID (通常は 0x8100)
\r
197 bool FixForDLinkBPDU; // D-Link の変な挙動をする BPDU のための fix を適用する
\r
198 UINT RequiredClientId; // クライアント ID
\r
202 struct MAC_TABLE_ENTRY
\r
204 UCHAR MacAddress[6]; // MAC アドレス
\r
206 UINT VlanId; // VLAN ID
\r
207 SESSION *Session; // セッション
\r
208 HUB_PA *HubPa; // HUB パケットアダプタ
\r
209 UINT64 CreatedTime; // 作成日時
\r
210 UINT64 UpdatedTime; // 更新日時
\r
214 struct IP_TABLE_ENTRY
\r
217 SESSION *Session; // セッション
\r
218 bool DhcpAllocated; // DHCP によって割り当て済み
\r
219 UINT64 CreatedTime; // 作成日時
\r
220 UINT64 UpdatedTime; // 更新日時
\r
221 UCHAR MacAddress[6]; // MAC アドレス
\r
236 wchar_t Note[MAX_ACCESSLIST_NOTE_LEN + 1]; // メモ
\r
237 bool Active; // 有効フラグ
\r
238 UINT Priority; // 優先順位
\r
239 bool Discard; // 破棄フラグ
\r
240 UINT SrcIpAddress; // 送信元 IP アドレス
\r
241 UINT SrcSubnetMask; // 送信元サブネットマスク
\r
242 UINT DestIpAddress; // 宛先 IP アドレス
\r
243 UINT DestSubnetMask; // 宛先サブネットマスク
\r
244 UINT Protocol; // プロトコル
\r
245 UINT SrcPortStart; // 送信元ポート番号開始点
\r
246 UINT SrcPortEnd; // 送信元ポート番号終了点
\r
247 UINT DestPortStart; // 宛先ポート番号開始点
\r
248 UINT DestPortEnd; // 宛先ポート番号終了点
\r
249 UINT SrcUsernameHash; // 送信元ユーザー名ハッシュ
\r
250 char SrcUsername[MAX_USERNAME_LEN + 1];
\r
251 UINT DestUsernameHash; // 宛先ユーザー名ハッシュ
\r
252 char DestUsername[MAX_USERNAME_LEN + 1];
\r
253 bool CheckSrcMac; // 送信元 MAC アドレスの設定の有無
\r
254 UCHAR SrcMacAddress[6]; // 送信元 MAC アドレス
\r
255 UCHAR SrcMacMask[6]; // 送信元 MAC アドレスマスク
\r
256 bool CheckDstMac; // 宛先 MAC アドレスの設定の有無
\r
257 UCHAR DstMacAddress[6]; // 宛先 MAC アドレス
\r
258 UCHAR DstMacMask[6]; // 宛先 MAC アドレスマスク
\r
259 bool CheckTcpState; // TCP コネクションの状態
\r
260 bool Established; // Establieshed(TCP)
\r
262 UINT Jitter; // ジッタ
\r
263 UINT Loss; // パケットロス
\r
266 bool IsIPv6; // IPv6 かどうか
\r
267 IPV6_ADDR SrcIpAddress6; // 送信元 IP アドレス (IPv6)
\r
268 IPV6_ADDR SrcSubnetMask6; // 送信元サブネットマスク (IPv6)
\r
269 IPV6_ADDR DestIpAddress6; // 宛先 IP アドレス (IPv6)
\r
270 IPV6_ADDR DestSubnetMask6; // 宛先サブネットマスク (IPv6)
\r
276 UINT64 CreatedTick; // 作成日時
\r
277 UCHAR Ticket[SHA1_SIZE]; // チケット
\r
278 char Username[MAX_USERNAME_LEN + 1]; // ユーザー名
\r
279 char UsernameReal[MAX_USERNAME_LEN + 1]; // 本当のユーザー名
\r
280 char GroupName[MAX_USERNAME_LEN + 1]; // グループ名
\r
281 char SessionName[MAX_SESSION_NAME_LEN + 1]; // セッション名
\r
282 POLICY Policy; // ポリシー
\r
286 struct TRAFFIC_DIFF
\r
289 TRAFFIC Traffic; // トラフィック
\r
290 char *HubName; // HUB 名
\r
295 struct ADMIN_OPTION
\r
297 char Name[MAX_ADMIN_OPTION_NAME_LEN + 1]; // 名前
\r
304 X_SERIAL *Serial; // シリアル番号
\r
305 NAME *Name; // 名前情報
\r
306 UCHAR DigestMD5[MD5_SIZE]; // MD5 ハッシュ
\r
307 UCHAR DigestSHA1[SHA1_SIZE]; // SHA-1 ハッシュ
\r
314 UINT Priority; // 優先順位
\r
315 bool Deny; // アクセスを拒否
\r
316 bool Masked; // マスクされているかどうか
\r
317 IP IpAddress; // IP アドレス
\r
318 IP SubnetMask; // サブネットマスク
\r
325 LOCK *lock_online; // オンライン用ロック
\r
326 REF *ref; // 参照カウンタ
\r
327 CEDAR *Cedar; // Cedar
\r
329 HUBDB *HubDb; // データベース
\r
330 char *Name; // HUB の名前
\r
331 LOCK *RadiusOptionLock; // Radius オプション用ロック
\r
332 char *RadiusServerName; // Radius サーバー名
\r
333 UINT RadiusServerPort; // Radius サーバーポート番号
\r
334 UINT RadiusRetryInterval; // Radius 再試行間隔
\r
335 BUF *RadiusSecret; // Radius 共有鍵
\r
336 volatile bool Halt; // 停止フラグ
\r
337 bool Offline; // オフライン
\r
338 bool BeingOffline; // オフライン化中
\r
339 LIST *SessionList; // セッションリスト
\r
340 COUNTER *SessionCounter; // セッション番号生成カウンタ
\r
341 TRAFFIC *Traffic; // トラフィック情報
\r
342 TRAFFIC *OldTraffic; // 古いトラフィック情報
\r
343 LOCK *TrafficLock; // トラフィックロック
\r
344 COUNTER *NumSessions; // 現在のセッション数
\r
345 COUNTER *NumSessionsClient; // 現在のセッション数 (クライアント)
\r
346 COUNTER *NumSessionsBridge; // 現在のセッション数 (ブリッジ)
\r
347 HUB_OPTION *Option; // HUB オプション
\r
348 LIST *MacTable; // MAC アドレステーブル
\r
349 LIST *IpTable; // IP アドレステーブル
\r
350 LIST *MonitorList; // モニタポートセッションリスト
\r
351 LIST *LinkList; // リンクリスト
\r
352 UCHAR HubSignature[16]; // HUB シグネチャ
\r
353 UCHAR HubMacAddr[6]; // HUB の MAC アドレス
\r
354 IP HubIp; // HUB の IP アドレス (IPv4)
\r
355 IPV6_ADDR HubIpV6; // HUB の IP アドレス (IPv6)
\r
356 UINT HubIP6Id; // HUB の IPv6 パケット ID
\r
357 UCHAR Padding[2]; // パディング
\r
358 LOCK *LoopListLock; // ループリスト用ロック
\r
359 UINT NumLoopList; // ループリスト数
\r
360 LOOP_LIST **LoopLists; // ループリスト
\r
361 LIST *AccessList; // アクセスリスト
\r
362 HUB_LOG LogSetting; // ログ設定
\r
363 LOG *PacketLogger; // パケットロガー
\r
364 LOG *SecurityLogger; // セキュリティロガー
\r
365 UCHAR HashedPassword[SHA1_SIZE]; // パスワード
\r
366 UCHAR SecurePassword[SHA1_SIZE]; // セキュアパスワード
\r
367 LIST *TicketList; // チケットリスト
\r
368 bool FarmMember; // ファームメンバー
\r
369 UINT64 LastIncrementTraffic; // トラフィック報告時刻
\r
370 UINT64 LastSendArpTick; // 最後の ARP 送信時刻
\r
371 SNAT *SecureNAT; // SecureNAT
\r
372 bool EnableSecureNAT; // SecureNAT 有効/無効フラグ
\r
373 VH_OPTION *SecureNATOption; // SecureNAT のオプション
\r
374 THREAD *WatchDogThread; // 番犬スレッド
\r
375 EVENT *WatchDogEvent; // 番犬イベント
\r
376 bool WatchDogStarted; // 番犬スレッドが使用されているかどうか
\r
377 volatile bool HaltWatchDog; // 番犬スレッドの停止
\r
378 LIST *AdminOptionList; // 管理オプションリスト
\r
379 UINT64 CreatedTime; // 作成日時
\r
380 UINT64 LastCommTime; // 最終通信日時
\r
381 UINT64 LastLoginTime; // 最終ログイン日時
\r
382 UINT NumLogin; // ログイン回数
\r
383 bool HubIsOnlineButHalting; // 仮想 HUB は本当はオンラインだが停止のためにオフライン化してある
\r
384 UINT FarmMember_MaxSessionClient; // クラスタメンバ用 最大クライアント接続セッション数
\r
385 UINT FarmMember_MaxSessionBridge; // クラスタメンバ用 最大ブリッジ接続セッション数
\r
386 bool FarmMember_MaxSessionClientBridgeApply; // FarmMember_MaxSession* を適用する
\r
387 UINT CurrentVersion; // 現在のバージョン
\r
388 UINT LastVersion; // 最後に更新通知を発行したときのバージョン
\r
389 wchar_t *Msg; // クライアントが接続してきたときに表示するメッセージ
\r
394 extern ADMIN_OPTION admin_options[];
\r
395 extern UINT num_admin_options;
\r
400 void DeleteHubDb(HUBDB *d);
\r
401 HUB *NewHub(CEDAR *cedar, char *HubName, HUB_OPTION *option);
\r
402 void SetHubMsg(HUB *h, wchar_t *msg);
\r
403 wchar_t *GetHubMsg(HUB *h);
\r
404 void GenHubMacAddress(UCHAR *mac, char *name);
\r
405 void GenHubIpAddress(IP *ip, char *name);
\r
406 bool IsHubIpAddress(IP *ip);
\r
407 bool IsHubIpAddress32(UINT ip32);
\r
408 bool IsHubIpAddress64(IPV6_ADDR *addr);
\r
409 bool IsHubMacAddress(UCHAR *mac);
\r
410 void ReleaseHub(HUB *h);
\r
411 void CleanupHub(HUB *h);
\r
412 int CompareHub(void *p1, void *p2);
\r
413 void LockHubList(CEDAR *cedar);
\r
414 void UnlockHubList(CEDAR *cedar);
\r
415 HUB *GetHub(CEDAR *cedar, char *name);
\r
416 bool IsHub(CEDAR *cedar, char *name);
\r
417 void StopHub(HUB *h);
\r
418 void AddSession(HUB *h, SESSION *s);
\r
419 void DelSession(HUB *h, SESSION *s);
\r
420 void StopAllSession(HUB *h);
\r
421 bool HubPaInit(SESSION *s);
\r
422 void HubPaFree(SESSION *s);
\r
423 CANCEL *HubPaGetCancel(SESSION *s);
\r
424 UINT HubPaGetNextPacket(SESSION *s, void **data);
\r
425 bool HubPaPutPacket(SESSION *s, void *data, UINT size);
\r
426 PACKET_ADAPTER *GetHubPacketAdapter();
\r
427 int CompareMacTable(void *p1, void *p2);
\r
428 void StorePacket(HUB *hub, SESSION *s, PKT *packet);
\r
429 bool StorePacketFilter(SESSION *s, PKT *packet);
\r
430 void StorePacketToHubPa(HUB_PA *dest, SESSION *src, void *data, UINT size, PKT *packet);
\r
431 void SetHubOnline(HUB *h);
\r
432 void SetHubOffline(HUB *h);
\r
433 SESSION *GetSessionByPtr(HUB *hub, void *ptr);
\r
434 SESSION *GetSessionByName(HUB *hub, char *name);
\r
435 int CompareIpTable(void *p1, void *p2);
\r
436 bool StorePacketFilterByPolicy(SESSION *s, PKT *p);
\r
437 bool DeleteIPv6DefaultRouterInRA(PKT *p);
\r
438 bool StorePacketFilterByTrafficLimiter(SESSION *s, PKT *p);
\r
439 void IntoTrafficLimiter(TRAFFIC_LIMITER *tr, PKT *p);
\r
440 bool IsMostHighestPriorityPacket(SESSION *s, PKT *p);
\r
441 bool IsPriorityPacketForQoS(PKT *p);
\r
442 int CompareStormList(void *p1, void *p2);
\r
443 STORM *SearchStormList(HUB_PA *pa, UCHAR *mac_address, IP *src_ip, IP *dest_ip);
\r
444 STORM *AddStormList(HUB_PA *pa, UCHAR *mac_address, IP *src_ip, IP *dest_ip);
\r
445 bool CheckBroadcastStorm(SESSION *s, PKT *p);
\r
446 void AddRootCert(HUB *hub, X *x);
\r
447 int CmpAccessList(void *p1, void *p2);
\r
448 void InitAccessList(HUB *hub);
\r
449 void FreeAccessList(HUB *hub);
\r
450 void AddAccessList(HUB *hub, ACCESS *a);
\r
451 UINT UsernameToInt(char *name);
\r
452 bool ApplyAccessListToStoredPacket(HUB *hub, SESSION *s, PKT *p);
\r
453 bool ApplyAccessListToForwardPacket(HUB *hub, SESSION *src_session, SESSION *dest_session, PKT *p);
\r
454 bool IsPacketMaskedByAccessList(SESSION *s, PKT *p, ACCESS *a, UINT dest_username, UINT dest_groupname);
\r
455 void GetAccessListStr(char *str, UINT size, ACCESS *a);
\r
456 void DeleteOldIpTableEntry(LIST *o);
\r
457 void SetRadiusServer(HUB *hub, char *name, UINT port, char *secret);
\r
458 void SetRadiusServerEx(HUB *hub, char *name, UINT port, char *secret, UINT interval);
\r
459 bool GetRadiusServer(HUB *hub, char *name, UINT size, UINT *port, char *secret, UINT secret_size);
\r
460 bool GetRadiusServerEx(HUB *hub, char *name, UINT size, UINT *port, char *secret, UINT secret_size, UINT *interval);
\r
461 int CompareCert(void *p1, void *p2);
\r
462 void GetHubLogSetting(HUB *h, HUB_LOG *setting);
\r
463 void SetHubLogSetting(HUB *h, HUB_LOG *setting);
\r
464 void SetHubLogSettingEx(HUB *h, HUB_LOG *setting, bool no_change_switch_type);
\r
465 void DeleteExpiredIpTableEntry(LIST *o);
\r
466 void DeleteExpiredMacTableEntry(LIST *o);
\r
467 void AddTrafficDiff(HUB *h, char *name, UINT type, TRAFFIC *traffic);
\r
468 void IncrementHubTraffic(HUB *h);
\r
469 void EnableSecureNAT(HUB *h, bool enable);
\r
470 void EnableSecureNATEx(HUB *h, bool enable, bool no_change);
\r
471 void StartHubWatchDog(HUB *h);
\r
472 void StopHubWatchDog(HUB *h);
\r
473 void HubWatchDogThread(THREAD *t, void *param);
\r
474 int CompareAdminOption(void *p1, void *p2);
\r
475 UINT GetHubAdminOptionEx(HUB *h, char *name, UINT default_value);
\r
476 UINT GetHubAdminOption(HUB *h, char *name);
\r
477 void DeleteAllHubAdminOption(HUB *h, bool lock);
\r
478 void AddHubAdminOptionsDefaults(HUB *h, bool lock);
\r
479 bool IsCertMatchCrl(X *x, CRL *crl);
\r
480 bool IsCertMatchCrlList(X *x, LIST *o);
\r
481 wchar_t *GenerateCrlStr(CRL *crl);
\r
482 bool IsValidCertInHub(HUB *h, X *x);
\r
483 void FreeCrl(CRL *crl);
\r
484 CRL *CopyCrl(CRL *crl);
\r
485 int CmpAc(void *p1, void *p2);
\r
487 void AddAc(LIST *o, AC *ac);
\r
488 bool DelAc(LIST *o, UINT id);
\r
489 AC *GetAc(LIST *o, UINT id);
\r
490 void SetAc(LIST *o, UINT id, AC *ac);
\r
491 void DelAllAc(LIST *o);
\r
492 void SetAcList(LIST *o, LIST *src);
\r
493 void NormalizeAcList(LIST *o);
\r
494 char *GenerateAcStr(AC *ac);
\r
495 void FreeAcList(LIST *o);
\r
496 LIST *CloneAcList(LIST *o);
\r
497 bool IsIPPrivate(IP *ip);
\r
498 bool IsIPManagementTargetForHUB(IP *ip, HUB *hub);
\r
499 wchar_t *GetHubAdminOptionHelpString(char *name);
\r
500 void HubOptionStructToData(RPC_ADMIN_OPTION *ao, HUB_OPTION *o, char *hub_name);
\r
501 ADMIN_OPTION *NewAdminOption(char *name, UINT value);
\r
502 void DataToHubOptionStruct(HUB_OPTION *o, RPC_ADMIN_OPTION *ao);
\r
503 UINT GetHubAdminOptionData(RPC_ADMIN_OPTION *ao, char *name);
\r
504 void GetHubAdminOptionDataAndSet(RPC_ADMIN_OPTION *ao, char *name, UINT *dest);
\r
505 bool IsURLMsg(wchar_t *str, char *url, UINT url_size);
\r