1 | XMPSEC ;ISC-SF/GMB-PackMan Security ;04/17/2002 11:13
|
---|
2 | ;;8.0;MailMan;;Jun 28, 2002
|
---|
3 | ; Code rewritten. Originally (ISC-WASH/GM/CAP)
|
---|
4 | ; Includes the former ^XMASEC (ISC-WASH/GM)
|
---|
5 | N I,XMTVAL,XMSTR
|
---|
6 | W !,"This message has been secured!"
|
---|
7 | S XMPASS=1
|
---|
8 | I '$D(XMSECURE),'$$KEYOK^XMJMCODE(XMZ,$P(XMA0,U,10)) S XMPASS=0 Q
|
---|
9 | W !,"Checking the package's integrity... (This may take some time.)",!
|
---|
10 | S I=$O(^XMB(3.9,XMZ,2,.999))
|
---|
11 | I $P(^(I,0),U,3,9999)'=$$ENCSTR^XMJMCODE("$SEC^3") S XMPASS=0 D FAIL Q
|
---|
12 | S I=1,XMTVAL=0
|
---|
13 | P0 F S I=$O(^XMB(3.9,XMZ,2,I)) Q:'I D
|
---|
14 | . Q:'$D(^(I,0)) ; naked reference to line above
|
---|
15 | . S XMSTR=^(0) ; naked reference to line above
|
---|
16 | . I $E(XMSTR)="$" D CSCRAM(XMSTR) Q
|
---|
17 | . I 'XMB0 W:$X>75 ! W "." Q
|
---|
18 | . D VAL(XMSTR,.XMTVAL)
|
---|
19 | W !,"<<< DONE >>>",!
|
---|
20 | D:'XMPASS FAIL
|
---|
21 | Q
|
---|
22 | VAL(XMSTR,XMTVAL) ;
|
---|
23 | N XMLVAL,I
|
---|
24 | S XMLVAL=0
|
---|
25 | F I=1:1:$L(XMSTR) S XMLVAL=$A(XMSTR,I)*I+XMLVAL
|
---|
26 | S XMTVAL=XMTVAL+XMLVAL+$L(XMSTR)
|
---|
27 | Q
|
---|
28 | CSCRAM(XMSTR) ;
|
---|
29 | S XMB0=$S(XMSTR'["TXT":1,1:0)
|
---|
30 | I XMSTR["ROU",$P(XMSTR," ",2)?1"^".AN1"NTEG" D CNTEG Q
|
---|
31 | I XMSTR'["$END"!($E(XMSTR,1,8)="$END TXT"&'XMB0) S XMTVAL=0,XMA0=$P(XMSTR," ",2) Q
|
---|
32 | W "." I $P(XMSTR," ",2)="MESSAGE" Q
|
---|
33 | S XMA0=$S(XMSTR["$GLB":$P(XMSTR,U,2),XMSTR["$GLO":$P(XMSTR,U,2),1:$P($P(XMSTR,U)," ",3))
|
---|
34 | I XMSTR["ROU" W:$X>70 ! W $J($E(XMA0,1,9),10)
|
---|
35 | E W !,$P($E(XMSTR,5,99),U)
|
---|
36 | ;CHECK SUM EVALUTAION
|
---|
37 | Q:$P(XMSTR,U,2,999)=$$ENCSTR^XMJMCODE("$SEC"_U_(XMTVAL+XMPAKMAN("XMRW")))
|
---|
38 | W !!,"******** ",$J(XMA0,10)," has failed !!!!!!!!!!!",!!
|
---|
39 | S (XMTVAL,XMPASS)=0
|
---|
40 | Q
|
---|
41 | FAIL ;
|
---|
42 | N XMTEXT,XMTO,XMFROM
|
---|
43 | S:'$D(XMPASS) XMPASS=0
|
---|
44 | S XMTEXT(1,0)="A package with the subject: "_$P(^XMB(3.9,XMZ,0),U)
|
---|
45 | S XMTEXT(2,0)="failed the security check during installation"_$S($D(XMPASS):".",1:", but was installed anyway.")
|
---|
46 | S XMFROM=$P(^XMB(3.9,XMZ,0),U,2)
|
---|
47 | I $G(XMFROM)["<" S XMTO(P($P(XMFROM,"<",2),">"))=""
|
---|
48 | S XMTO(XMDUZ)=""
|
---|
49 | D SENDMSG^XMXSEND(XMDUZ,"Failed Security","XMTEXT",.XMTO)
|
---|
50 | Q
|
---|
51 | CHECK ;FROM XMP2
|
---|
52 | Q:XCF'=2
|
---|
53 | I "$DDD$RTN$DIE$DIB$DIP$ROU$GLB$GLO$OPT$HEL$BUL$KEY$PKG$FUN"[$E(X,1,4),X[U D Q
|
---|
54 | . D:'$D(XMPASS) FAIL
|
---|
55 | . S X=$P(X,U)_$P(X,U,2)
|
---|
56 | . S:$P(X," ",2)?.EU1"INIT"&($E(X,1,4)="$ROU") XMINIT=U_$P(X," ",2)
|
---|
57 | I $E(X,1,12)="$END MESSAGE",'$D(XMPASS) D FAIL
|
---|
58 | Q
|
---|
59 | CNTEG ; Skip processing XXXINTEG program
|
---|
60 | S XMINTEG=$P(X," ",2)
|
---|
61 | F S I=$O(^XMB(3.9,XMZ,2,I)) Q:'I Q:"$END"[$E(^(I,0),1,4)
|
---|
62 | Q
|
---|
63 | PSECURE(XMZ,XMABORT) ; Secure the PackMan message
|
---|
64 | N XMKEY,XMHINT,XMNO,XMSECURE
|
---|
65 | S XMABORT=0
|
---|
66 | D PQSEC(.XMNO,.XMABORT) Q:XMNO!XMABORT
|
---|
67 | D CRE8KEY^XMJMCODE(.XMKEY,.XMHINT,.XMABORT) Q:XMABORT
|
---|
68 | W !!,"Securing the message now. This may take a while.",!
|
---|
69 | D LOADCODE^XMJMCODE
|
---|
70 | D ADJUST^XMJMCODE(.XMKEY)
|
---|
71 | D PSTORE(XMZ,XMKEY,XMHINT)
|
---|
72 | D PSECIT(XMZ)
|
---|
73 | Q
|
---|
74 | PQSEC(XMOK,XMABORT) ;
|
---|
75 | N DIR,Y,X
|
---|
76 | S DIR(0)="Y"
|
---|
77 | S DIR("A")="Do you wish to secure this message"
|
---|
78 | S DIR("B")="NO"
|
---|
79 | S DIR("?",1)="If you answer yes, this message will be secured"
|
---|
80 | S DIR("?")="to ensure that what you send is what is actually received."
|
---|
81 | D ^DIR
|
---|
82 | I $D(DIRUT) S XMABORT=1
|
---|
83 | S XMNO='Y
|
---|
84 | Q
|
---|
85 | PSTORE(XMZ,XMKEY,XMHINT) ;
|
---|
86 | N XMFDA,XMIENS
|
---|
87 | S XMIENS=XMZ_","
|
---|
88 | S XMFDA(3.9,XMIENS,1.8)=$S($G(XMHINT)="":" ",1:XMHINT)
|
---|
89 | S XMFDA(3.9,XMIENS,1.85)="1"_$$ENCSTR^XMJMCODE(XMKEY)
|
---|
90 | D FILE^DIE("","XMFDA")
|
---|
91 | Q
|
---|
92 | PSECIT(XMZ) ;
|
---|
93 | N XMSTR,I,XMTVAL
|
---|
94 | S I=$O(^XMB(3.9,XMZ,2,.999))
|
---|
95 | S XMSTR=^XMB(3.9,XMZ,2,I,0)
|
---|
96 | S XMSTR=$P(XMSTR,"on")_"at "_$P(XMSTR," at ",3)_" on"_$P($P(XMSTR,"on",2)," at",1)
|
---|
97 | S ^XMB(3.9,XMZ,2,I,0)=XMSTR_U_$$ENCSTR^XMJMCODE("$SEC^3")
|
---|
98 | S I=0
|
---|
99 | F S I=$O(^XMB(3.9,XMZ,2,I)) Q:'I D
|
---|
100 | . Q:'$D(^(I,0)) ; naked reference to line above
|
---|
101 | . S XMSTR=^(0) ; naked reference to line above
|
---|
102 | . I $E(XMSTR)="$" D PSCRAM(XMZ,.I,XMSTR,.XMTVAL) Q
|
---|
103 | . D VAL(XMSTR,.XMTVAL)
|
---|
104 | S XMSTR(1)="$END MESSAGE"
|
---|
105 | D MOVEBODY^XMXSEND(XMZ,"XMSTR","A")
|
---|
106 | Q
|
---|
107 | PSCRAM(XMZ,I,XMSTR,XMTVAL) ;
|
---|
108 | I $E(XMSTR,1,4)="$END" S $P(^XMB(3.9,XMZ,2,I,0),U,2)=$$ENCSTR^XMJMCODE("$SEC"_U_(XMTVAL+XMPAKMAN("XMRW"))) Q
|
---|
109 | I $E(XMSTR,1,4)="$ROU" D I $P(XMSTR," ",2)?.AN1"NTEG" D PNTEG(XMZ,.I,XMSTR) Q
|
---|
110 | . W:$X>70 !
|
---|
111 | . W $J($P(XMSTR," ",2),10)
|
---|
112 | S XMTVAL=0
|
---|
113 | S $P(^XMB(3.9,XMZ,2,I,0)," ",2)=$S($E(XMSTR,1,4)'="$KID":U,1:"")_$P(XMSTR," ",2)
|
---|
114 | Q
|
---|
115 | PNTEG(XMZ,I,XMSTR) ;
|
---|
116 | S $P(^XMB(3.9,XMZ,2,I,0)," ",2)=U_$P(XMSTR," ",2)
|
---|
117 | F S I=$O(^XMB(3.9,XMZ,2,I)) Q:'I S XMSTR=^(I,0) Q:"$END"[$E(XMSTR_" ",1,4) D
|
---|
118 | . S:XMSTR?.UN1" ;;".N $P(^XMB(3.9,XMZ,2,I,0),";",3)=$$ENCSTR^XMJMCODE($P(XMSTR,";",3)+XMPAKMAN("XMRW"))
|
---|
119 | Q
|
---|