1 | XMXADDR3 ;ISC-SF/GMB-XMXADDR (cont.) ;04/15/2003 13:16
|
---|
2 | ;;8.0;MailMan;**18**;Jun 28, 2002
|
---|
3 | SERVER(XMADDR,XMSTRIKE,XMPREFIX,XMLATER,XMFULL) ;
|
---|
4 | N XMG
|
---|
5 | S XMADDR=$P(XMADDR,".",2,99)
|
---|
6 | I $G(XMIA) D
|
---|
7 | . N DIC,X
|
---|
8 | . S X=XMADDR
|
---|
9 | . S DIC="^DIC(19,"
|
---|
10 | . S DIC(0)="FEZ"_$S($D(XMGCIRCL):"O",1:"")
|
---|
11 | . D ^DIC
|
---|
12 | . I Y<0 D SETERR^XMXADDR4(1,"!",39060) Q ;Invalid server name
|
---|
13 | . S XMG=+Y
|
---|
14 | E D
|
---|
15 | . S XMG=$$FIND1^DIC(19,"","O",XMADDR) I 'XMG D SETERR^XMXADDR4(0,"",$S($D(DIERR):39061,1:39062)) ; Server ambiguous / Server not found.
|
---|
16 | Q:$D(XMERROR)
|
---|
17 | S XMFULL="S."_$P(^DIC(19,XMG,0),U,1)
|
---|
18 | D SETEXP^XMXADDR(XMFULL,XMG,XMSTRIKE,XMPREFIX,XMLATER)
|
---|
19 | Q
|
---|
20 | DEVICE(XMADDR,XMSTRIKE,XMPREFIX,XMLATER,XMFULL) ;
|
---|
21 | N XMG
|
---|
22 | S XMADDR1=$$UP^XLFSTR($E(XMADDR,1))
|
---|
23 | S XMADDR=$P(XMADDR,".",2,99)
|
---|
24 | I $G(XMIA) D
|
---|
25 | . N DIC,X
|
---|
26 | . S X=XMADDR
|
---|
27 | . S DIC="^%ZIS(1," ; file 3.5
|
---|
28 | . S DIC(0)="EF"_$S($D(XMGCIRCL):"O",1:"")
|
---|
29 | . D ^DIC
|
---|
30 | . I Y<0 D SETERR^XMXADDR4(1,"!",39063) Q ;Invalid device name
|
---|
31 | . S XMG=+Y
|
---|
32 | . S XMADDR=$P(Y,U,2)
|
---|
33 | E D
|
---|
34 | . S XMG=$$FIND1^DIC(3.5,"","O",XMADDR) I 'XMG D SETERR^XMXADDR4(0,"",$S($D(DIERR):39064,1:39065)) Q ; Device ambiguous. / Device not found.
|
---|
35 | . S XMADDR=$P(^%ZIS(1,XMG,0),U,1)
|
---|
36 | Q:$D(XMERROR)
|
---|
37 | I XMADDR["P-MESSAGE" D Q ;You may not use P-MESSAGE in an address.
|
---|
38 | . D SETERR^XMXADDR4($G(XMIA),"!",39066)
|
---|
39 | S XMFULL=XMADDR1_"."_XMADDR
|
---|
40 | D SETEXP^XMXADDR(XMFULL,XMG,XMSTRIKE,XMPREFIX,XMLATER)
|
---|
41 | Q
|
---|
42 | REMOTE(XMDUZ,XMADDR,XMSTRIKE,XMPREFIX,XMLATER,XMFULL) ;
|
---|
43 | ; XMVIA IEN of domain in ^DIC(4.2 via which the msg will be sent
|
---|
44 | ; XMVIAN Name of domain via which the msg will be sent
|
---|
45 | ; XMDOMAIN Domain of the addressee
|
---|
46 | ; XMNAME Name of the addressee
|
---|
47 | N XMVIA,XMVIAN,XMDOMAIN,XMNAME
|
---|
48 | S:XMADDR["<"!(XMADDR[" ") XMADDR=$$REMADDR(XMADDR)
|
---|
49 | S XMNAME=$P(XMADDR,"@",1)
|
---|
50 | I XMNAME="" D Q
|
---|
51 | . D SETERR^XMXADDR4($G(XMIA),"!",39010) ;Null addressee
|
---|
52 | S XMDOMAIN=$P(XMADDR,"@",2,99)
|
---|
53 | I XMDOMAIN="" D Q
|
---|
54 | . ; You must specify a reachable uunet host / Null domain
|
---|
55 | . D SETERR^XMXADDR4($G(XMIA),"!",$S(XMNAME["!":39067,1:39068))
|
---|
56 | ; find out the full domain name, and
|
---|
57 | ; whether the domain is valid, and if so, via which entry in DIC(4.2
|
---|
58 | D DNS^XMXADDRD(XMDUZ,.XMDOMAIN,.XMVIA,.XMVIAN) Q:$D(XMERROR)
|
---|
59 | I XMDOMAIN=^XMB("NETNAME") D ; the full domain name = the local domain
|
---|
60 | . N XMQUOTED
|
---|
61 | . I XMNAME?1""""1.E1"""" S XMNAME=$E(XMNAME,2,$L(XMNAME)-1),XMQUOTED=1
|
---|
62 | . I $E(XMNAME,1)=" "!($E(XMNAME,$L(XMNAME))=" ") S XMNAME=$$STRIP^XMXUTIL1(XMNAME)
|
---|
63 | . D LOCAL^XMXADDR(XMDUZ,XMNAME,XMSTRIKE,XMPREFIX,.XMLATER,.XMFULL)
|
---|
64 | . Q:'$D(XMERROR)
|
---|
65 | . Q:$G(XMQUOTED)
|
---|
66 | . N XMSAVE
|
---|
67 | . S XMSAVE=XMNAME
|
---|
68 | . I ".G.g.D.d.H.h.S.s."[("."_$E(XMNAME,1,2)) S XMNAME=$E(XMNAME,1,2)_$TR($E(XMNAME,3,99),"._+",", .")
|
---|
69 | . E S XMNAME=$TR(XMNAME,"._+",", .")
|
---|
70 | . I XMSAVE'=XMNAME D Q:'$D(XMERROR)
|
---|
71 | . . K XMERROR
|
---|
72 | . . I $G(XMIA) D EN^DDIOL($$EZBLD^DIALOG(39069,XMNAME)) ;Checking: |1|
|
---|
73 | . . D LOCAL^XMXADDR(XMDUZ,XMNAME,XMSTRIKE,XMPREFIX,.XMLATER,.XMFULL)
|
---|
74 | . Q:'$G(XMRESTR("NET RECEIVE"))
|
---|
75 | . Q:"^39062^39065^39132^"'[(U_XMERROR_U)
|
---|
76 | . ; Server, Device, or Group not found. Try lower case.
|
---|
77 | . ; (We do not need to try local user again.)
|
---|
78 | . S XMSAVE=XMNAME,XMNAME=$$LOW^XLFSTR(XMNAME) Q:XMSAVE=XMNAME
|
---|
79 | . K XMERROR
|
---|
80 | . D LOCAL^XMXADDR(XMDUZ,XMNAME,XMSTRIKE,XMPREFIX,.XMLATER,.XMFULL)
|
---|
81 | E D
|
---|
82 | . I $D(XMRESTR("NONET")) D Q
|
---|
83 | . . ;Messages longer than |1| lines may not be sent across the network.
|
---|
84 | . . D SETERR^XMXADDR4($G(XMIA),"!",39001,XMRESTR("NONET"))
|
---|
85 | . I $D(XMFWDADD),+$G(^XMB(1,1,3)) D Q:$D(XMERROR)
|
---|
86 | . . ; This is an auto-forward address, and we are limiting it.
|
---|
87 | . . Q:$$FWDOK(3.1,XMDOMAIN) ; Approved auto-forward site?
|
---|
88 | . . I '$D(^XUSEC("XM AUTO-FORWARD WAIVER",+XMFWDADD)) D Q
|
---|
89 | . . . ;You can't have your mail forwarded to a non-VA site. Waivers can
|
---|
90 | . . . ;be requested through your site Information Security Officer (ISO)
|
---|
91 | . . . D SETERR^XMXADDR4($G(XMIA),"P",38130.1)
|
---|
92 | . . Q:$$FWDOK(3.2,XMDOMAIN) ; Waiver auto-forward site?
|
---|
93 | . . ;You have been granted a waiver to have your mail forwarded to a
|
---|
94 | . . ;non-VA site, but this site is not one of the sites for which a
|
---|
95 | . . ;waiver has been granted. Please contact your site Information
|
---|
96 | . . ;Security Officer (ISO) for further information.
|
---|
97 | . . D SETERR^XMXADDR4($G(XMIA),"P",38130.2)
|
---|
98 | . ; I XMDOMAIN?.E1".VA.GOV" D
|
---|
99 | . ;. ; Check the address before the @ to find any obvious errors
|
---|
100 | . ; Now transform spaces, commas, and periods in XMNAME
|
---|
101 | . S XMFULL=XMNAME_"@"_XMDOMAIN
|
---|
102 | . I XMSTRIKE D REMINUS(.XMFULL,XMNAME,XMDOMAIN) Q:$D(XMERROR)
|
---|
103 | . I XMLATER="?" D QLATER^XMXADDR(XMFULL,.XMLATER) Q:$D(XMERROR)
|
---|
104 | . D SETEXP^XMXADDR(XMFULL,XMVIA,XMSTRIKE,XMPREFIX,XMLATER)
|
---|
105 | Q
|
---|
106 | FWDOK(XMNODE,XMDOMAIN) ; Is the auto-forward domain OK?
|
---|
107 | N I,XMOK
|
---|
108 | S I="",XMOK=0
|
---|
109 | F S I=$O(^XMB(1,1,XMNODE,"B",I)) Q:I=""!(I=$E(XMDOMAIN,$L(XMDOMAIN)-$L(I)+1,99))
|
---|
110 | Q I'=""
|
---|
111 | REMINUS(XMFULL,XMNAME,XMDOMAIN) ;
|
---|
112 | Q:$D(^TMP("XMY",$J,XMFULL))
|
---|
113 | I $O(^TMP("XMY",$J,":"))="" Q:'$G(XMIA) D Q
|
---|
114 | . D SETERR^XMXADDR4($G(XMIA),"!",39015.1) ;Not a current recipient.
|
---|
115 | N XMTRY,XMTO
|
---|
116 | S XMTRY=$$LOW^XLFSTR(XMNAME)_"@"_XMDOMAIN
|
---|
117 | I $D(^TMP("XMY",$J,XMTRY)) S XMFULL=XMTRY Q
|
---|
118 | S XMTRY=$$UP^XLFSTR(XMNAME)_"@"_XMDOMAIN
|
---|
119 | I $D(^TMP("XMY",$J,XMTRY)) S XMFULL=XMTRY Q
|
---|
120 | S XMTO=":"
|
---|
121 | F S XMTO=$O(^TMP("XMY",$J,XMTO)) Q:XMTO="" Q:$$UP^XLFSTR(XMTO)=XMTRY
|
---|
122 | I XMTO="" Q:'$G(XMIA) D SETERR^XMXADDR4($G(XMIA),"!",39015.1) Q ;Not a current recipient.
|
---|
123 | S XMFULL=XMTO
|
---|
124 | Q
|
---|
125 | REMADDR(XMADDR) ;
|
---|
126 | I XMADDR["<" Q $TR($P($P(XMADDR,">",1),"<",2,99),"<") ; handles <addr> and <<addr>>
|
---|
127 | Q:XMADDR'[" " XMADDR
|
---|
128 | I $E(XMADDR,1)=" "!($E(XMADDR,$L(XMADDR))=" ") S XMADDR=$$STRIP^XMXUTIL1(XMADDR)
|
---|
129 | I XMADDR'["""",XMADDR'["(" Q XMADDR
|
---|
130 | I XMADDR["""@" D Q XMADDR
|
---|
131 | . ; "first last"@domain
|
---|
132 | . N I,J,XMDOM
|
---|
133 | . S I=$F(XMADDR,"""@")
|
---|
134 | . S XMDOM=$E(XMADDR,I,999)
|
---|
135 | . S XMDOM=$P(XMDOM," ",1)
|
---|
136 | . S J=$F(XMADDR,"""")
|
---|
137 | . S XMADDR=$E(XMADDR,J-1,I-J)_"@"_XMDOM
|
---|
138 | ; last.first@domain (first last)
|
---|
139 | N I
|
---|
140 | F I=1:1:$L(XMADDR," ") Q:$P(XMADDR," ",I)["@"
|
---|
141 | S XMADDR=$P(XMADDR," ",1,I)
|
---|
142 | Q XMADDR
|
---|