글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
(연관된 글이 2개 있습니다.)
Internet_Zone 하위에 새로운 코드 그룹을 추가하는 예제
특히나 스마트 클라이언트 프로그램을 해보신 분들이 한번쯤 도전해 보셨을 것 같은데요. 아래의 그림을 보시면 기본적으로 "Internet_Zone" 이 있고, 그 하위에 여러분들의 스마트 클라이언트 DLL/EXE 가 존재하는 코드 그룹을 생성하려고 해보셨을 것입니다.

대개의 경우, 다음과 같은 식으로 코딩을 하지요.
01: IMembershipCondition memberShipCondition = new UrlMembershipCondition("http://127.0.0.1/webapp/*");
02:
03: UnionCodeGroup smartClientGroup = new UnionCodeGroup( new AllMembershipCondition(), null );
04: smartClientGroup.MembershipCondition = memberShipCondition;
05: smartClientGroup.Name = "InternetSmartClient_Zone";
06: smartClientGroup.Description = "InternetSmartClient_Zone Codegroup";
07:
08: PolicyStatement policyStatement = new PolicyStatement(permSet, PolicyStatementAttribute.Nothing);
09: smartClientGroup.PolicyStatement = policyStatement;
10:
11: object internetZone = null;
12: foreach (CodeGroup cg in machinePolicyLevel.RootCodeGroup.Children)
13: {
14: if (cg.Name == "Internet_Zone")
15: {
16: internetZone = cg;
17: break;
18: }
19: }
20:
21: if (internetZone != null)
22: {
23: ((CodeGroup)internetZone).AddChild(smartClientGroup);
24: SecurityManager.SavePolicy();
25: }
물론, 위와 같이 코딩을 하시면 100% 장담하건데... 변경 사항이 저장되지 않습니다. 저도 예전에 이 단계에서 그냥 포기하고 Internet_Zone 과 동일한 레벨에서 새로운 코드 그룹을 생성하는 것으로 마무리를 지었었는데요.
추석 연휴이다 보니 ^^ 여유도 있고 해서 한번 이 문제를 도전해봤습니다. 일단 위의 방법외에 뭔가 추가적인 방법이 있을 것 같은데, Google 신 조차도 저에게 아무런 메시지를 내려주지 않아서 애가 타더군요. 그러다가 문득, caspol.exe 에서는 정상적으로 동작하던 기억이 나서,... 통째로 역어셈블을 한 다음에 분석하기 시작했습니다.
결론은, ... SavePolicy 하기 전에 코드 그룹을 재구성해야 한다는 것을 찾아냈고 그 부분의 소스 코드만을 분리해 내어 간단한 예제로 제작해 보았습니다. 그것이 바로 첨부한 "AddCodeGroup.zip" 파일입니다. 아울러, "caspol.zip" 파일을 같이 첨부를 했는데요. 그것은 .NET 2.0 에 포함된 caspol.exe 를 .NET Reflector 로 역어셈블하여 VS.NET 2005 로 컴파일/디버그 가능한 프로젝트로 실어 놓은 것입니다. [2006.10.09 내용 추가 : caspol 소스는 SSCLI20 에도 포함되어져 있습니다. 경로: /clr/src/toolbox/caspol
따라서, 위의 소스는 다음과 같이 바뀌게 됩니다.
21: if (internetZone != null)
22: {
23: ((CodeGroup)internetZone).AddChild(smartClientGroup);
24: ReplaceLabel("Internet_Zone", (CodeGroup)internetZone);
25: SecurityManager.SavePolicy();
26: }
// 이하 ReplaceLabel 의 소스는 첨부된 AddCodeGroup.zip 에 실려 있습니다.
첨부된 AddCodeGroup.zip 프로젝트로 컴파일된 소스를 실행하고 나면 다음과 같은 보안 설정이 이뤄지게 됩니다. 새로운 코드 그룹이 Internet_Zone 하위에 추가되고, 해당 코드 그룹이 사용하는 전용 보안 집합이 생성된 것을 볼 수 있습니다.

[이 토픽에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]
[연관 글]
... 16 17 18 19 20 21 [22] 23 24 25 26 27 28 29 30 ...
... 16 17 18 19 20 21 [22] 23 24 25 26 27 28 29 30 ...