59. EPMO Open Source Coordination Office Redaction File Detail Report

Produced by Araxis Merge on 10/18/2017 11:37:28 AM Eastern Daylight Time. See www.araxis.com for information about Merge. This report uses XHTML and CSS2, and is best viewed with a modern standards-compliant browser. For optimum results when printing this report, use landscape orientation and enable printing of background images and colours in your browser.

59.1 Files compared

# Location File Last Modified
1 OSCIF_CPRS v32 Phase 2 Build 2OR3.0405_August_2017.zip\OR_30_405V36_SRC.zip\XE8\Broker\Source CCOWRPCBroker.pas Wed Oct 11 20:08:07 2017 UTC
2 OSCIF_CPRS v32 Phase 2 Build 2OR3.0405_August_2017.zip\OR_30_405V36_SRC.zip\XE8\Broker\Source CCOWRPCBroker.pas Tue Oct 17 19:58:09 2017 UTC

59.2 Comparison summary

Description Between
Files 1 and 2
Text Blocks Lines
Unchanged 2 908
Changed 1 2
Inserted 0 0
Removed 0 0

59.3 Comparison options

Whitespace
Character case Differences in character case are significant
Line endings Differences in line endings (CR and LF characters) are ignored
CR/LF characters Not shown in the comparison detail

59.4 Active regular expressions

No regular expressions were active.

59.5 Comparison detail

  1   { ******** ********** ********** ********** ********** ********** ****
  2           Pa ckage: XWB  - Kernel  RPCBroker
  3           Da te Created : Sept 18,  1997 (Ver sion 1.1)
  4           Si te Name: O akland, OI  Field Off ice, Dept  of Veteran  Affairs
  5           De velopers:  PII, PII,  PII, PII
  6           De scription:  Contains  TRPCBroker  and relat ed compone nts.
  7     Unit: CC OWRPCBroke r Authenti cates user  using CCO W
  8           Cu rrent Rele ase: Versi on 1.1 Pat ch 65
  9   ********** ********** ********** ********** ********** ********** *** }
  10  
  11   { ******** ********** ********** ********** ********** **
  12     Changes  in v1.1.65  (HGW 07/1 9/2016) XW B*1.1*65
  13     1. Updat ed RPC Ver sion to ve rsion 65.
  14     2. Note  that the u se of CCOW  RPC Broke r to authe nticate th e user doe s NOT
  15        use 2 -factor au thenticati on and doe s not comp ly with th e anticipa ted
  16        futur e security  policy of  the VA. T his code m ay be depr ecated in  a
  17        futur e release.
  18  
  19     Changes  in v1.1.60  (HGW 12/1 8/2013) XW B*1.1*60
  20     1. Updat ed RPC Ver sion to ve rsion 60
  21     2. Refor mated inde ntations a nd comment s to make  code more  readable
  22  
  23     Changes  in v1.1.31  (DCM ) XW B*1.1*31
  24     1. Added  new read  only prope rty Broker Version to  TRPCBroke r which
  25        shoul d contain  the versio n number f or the RPC Broker
  26        (or S haredRPCBr oker) in u se.
  27  
  28     Changes  in v1.1.13  (JLI  5/2 4/2001) XW B*1.1*13
  29     1. More  silent log in code; d eleted obs olete line s (DCM 9/1 0/99)
  30  
  31     Changes  in v1.1.8  (REM 7/13/ 1999) XWB* 1.1*8
  32     1. Check  for Multi -Division  users.
  33  
  34     Changes  in v1.1.6  (DPC 4/199 9) XWB*1.1 *6
  35     1. Polli ng to supp ort termin ating orph aned serve r jobs.
  36   ********** ********** ********** ********** **********  }
  37   unit CCOWR PCBroker;
  38  
  39   interface
  40  
  41   {$I IISBas e.inc}
  42  
  43   uses
  44     {System}
  45     Classes,  SysUtils,  ComObj,
  46     {Vcl}
  47     Controls , Dialogs,  Forms, Gr aphics, ex tctrls, Ol eCtrls,
  48     {VA}
  49     XWBut1,  MFunStr, X WBHash, Tr pcb, VERGE NCECONTEXT ORLib_TLB,
  50     {WinApi}
  51     Messages , WinProcs , WinTypes , Windows,  ActiveX;
  52  
  53   const
  54     NoMore:  boolean =  False;
  55     MIN_RPCT IMELIMIT:  integer =  30;
  56     CURRENT_ RPC_VERSIO N: String  = 'XWB*1.1 *65';
  57  
  58   type
  59     TCCOWRPC Broker = c lass(TRPCB roker)
  60     private
  61     { Privat e declarat ions }
  62     protecte d
  63       FCCOWL ogonIDName : String;
  64       FCCOWL ogonIDValu e: String;
  65       FCCOWL ogonName:  String;
  66       FCCOWL ogonNameVa lue: Strin g;
  67       FConte xtor: TCon textorCont rol;  //CC OW
  68       FCCOWt oken: stri ng;              //CC OW
  69       FVista Domain: St ring;
  70       FCCOWL ogonVpid:  String;
  71       FCCOWL ogonVpidVa lue: Strin g;
  72       FWasUs erDefined:  Boolean;
  73       functi on  GetCCO WHandle(Co nnectedBro ker: TCCOW RPCBroker) : string;
  74       functi on  GetCCO Wduz( Cont extor: TCo ntextorCon trol): str ing;
  75       proced ure CCOWse tUser(Unam e, token,  Domain, Vp id: string ; Contexto r: TContex torControl );
  76     public
  77     { Public  declarati ons }
  78       functi on GetCCOW token(Cont extor: TCo ntextorCon trol): str ing;
  79       functi on IsUserC leared: Bo olean;
  80       functi on WasUser Defined: B oolean;
  81       functi on IsUserC ontextPend ing(aConte xtItemColl ection: IC ontextItem Collection ):Boolean;
  82       proper ty Context or: TConte xtorContro l read Fco ntextor wr ite FConte xtor;  //C COW
  83       proper ty CCOWLog onIDName:  String rea d FCCOWLog onIDName;
  84       proper ty CCOWLog onIDValue:  String re ad FCCOWLo gonIDValue ;
  85       proper ty CCOWLog onName: St ring read  FCCOWLogon Name;
  86       proper ty CCOWLog onNameValu e: String  read FCCOW LogonNameV alue;
  87       proper ty CCOWLog onVpid: St ring read  FCCOWLogon Vpid;
  88       proper ty CCOWLog onVpidValu e: String  read FCCOW LogonVpidV alue;
  89     publishe d
  90       proper ty    Conn ected: boo lean read  FConnected  write Set Connected;
  91   end;
  92  
  93   procedure  Authentica teUser(Con nectingBro ker: TCCOW RPCBroker) ;
  94  
  95   implementa tion
  96  
  97   uses
  98     {VA}
  99     Loginfrm , RpcbErr,  WSockc, S elDiv, Rpc SLogin, fR PCBErrMsg,  CCOW_cons t;
  100   var
  101     CCOWToke n: String;
  102     Domain:  String;
  103     PassCode 1: String;
  104     PassCode 2: String;
  105  
  106  
  107   function T CCOWRPCBro ker.WasUse rDefined:  Boolean;
  108   begin
  109     Result : = FWasUser Defined;
  110   end; //fun ction TCCO WRPCBroker .WasUserDe fined
  111  
  112  
  113   function T CCOWRPCBro ker.IsUser Cleared: B oolean;
  114   var
  115     CCOWcont extItem: I ContextIte mCollectio n;      // CCOW
  116     CCOWdata Item1: ICo ntextItem;                    // CCOW
  117     Name: St ring;
  118   begin
  119     Result : = False;
  120     Name :=  CCOW_LOGON _ID;
  121     if (Cont extor <> n il) then
  122       try
  123         //Se e if conte xt contain s the ID i tem
  124         CCOW contextIte m := Conte xtor.Curre ntContext;
  125         CCOW DataItem1  := CCowCon textItem.P resent(Nam e);
  126         if ( CCOWdataIt em1 <> nil ) then
  127         begi n
  128           if  CCOWdataI tem1.Value  = '' then
  129              Result :=  True
  130           el se
  131              FWasUserDe fined := T rue;
  132         end  //if
  133         else
  134           Re sult := Tr ue;
  135       finall y
  136       end; / /try
  137   end; //fun ction TCCO WRPCBroker .IsUserCle ared
  138  
  139  
  140   {--------- ---------- ----- Auth enticateUs er ------- ---------- -------
  141   ---------- ---------- ---------- ---------- ---------- ---------- ------}
  142   procedure  Authentica teUser(Con nectingBro ker: TCCOW RPCBroker) ;
  143   var
  144     SaveClea rParmeters , SaveClea rResults:  boolean;
  145     SavePara m: TParams ;
  146     SaveRemo teProcedur e, SaveRpc Version: s tring;
  147     SaveResu lts: TStri ngs;
  148     blnSigne dOn: boole an;
  149     SaveKern elLogin: b oolean;
  150     SaveVist aLogin: TV istaLogin;
  151     OldExcep tionHandle r: TExcept ionEvent;
  152     OldHandl e: THandle ;
  153   begin
  154     with Con nectingBro ker do
  155     begin
  156       SavePa ram := TPa rams.Creat e(nil);
  157       SavePa ram.Assign (Param);                    //sa ve off set tings
  158       SaveRe moteProced ure := Rem oteProcedu re;
  159       SaveRp cVersion : = RpcVersi on;
  160       SaveRe sults := R esults;
  161       SaveCl earParmete rs := Clea rParameter s;
  162       SaveCl earResults  := ClearR esults;
  163       ClearP arameters  := True;                    //se t'em as I  need'em
  164       ClearR esults :=  True;
  165       SaveKe rnelLogin  := KernelL ogin;      //  p13
  166       SaveVi staLogin : = Login;              //  p13
  167     end; //w ith
  168     blnSigne dOn := Fal se;                         //in itialize t o bad sign -on
  169     if Conne ctingBroke r.AccessVe rifyCodes  <> '' then    // p13  handle as  AVCode sin gle signon
  170     begin
  171       Connec tingBroker .Login.Acc essCode :=  Piece(Con nectingBro ker.Access VerifyCode s, ';', 1) ;
  172       Connec tingBroker .Login.Ver ifyCode :=  Piece(Con nectingBro ker.Access VerifyCode s, ';', 2) ;
  173       Connec tingBroker .Login.Mod e := lmAVC odes;
  174       Connec tingBroker .KernelLog In := Fals e;
  175     end; //i f
  176     //CCOW s tart
  177     if Conne ctingBroke r.KernelLo gIn and (n ot (Connec tingBroker .Contextor  = nil)) t hen
  178     begin
  179       CCOWto ken := Con nectingBro ker.GetCCO Wtoken(Con nectingBro ker.Contex tor);
  180       if len gth(CCOWto ken)>0 the n
  181       begin
  182         Conn ectingBrok er.FKernel LogIn := f alse;
  183         Conn ectingBrok er.Login.M ode := lmA ppHandle;
  184         Conn ectingBrok er.Login.L ogInHandle  := CCOWto ken;
  185       end; / /if
  186     end; //i f
  187     if not C onnectingB roker.FKer nelLogIn t hen
  188       if Con nectingBro ker.FLogin  <> nil th en     //t he user.   vistalogin  contains  login info
  189       begin
  190         blns ignedon :=  SilentLog in(Connect ingBroker) ;    // Rp cSLogin un it
  191         if n ot blnSign edOn then
  192         begi n     //Sw itch back  to Kernel  Login
  193           Co nnectingBr oker.FKern elLogIn :=  true;
  194           Co nnectingBr oker.Login .Mode := l mAVCodes;
  195         end;  //if
  196       end; / /if
  197      //CCOW  end
  198      if Conn ectingBrok er.FKernel LogIn then
  199      begin    //p13
  200        CCOWT oken := '' ;  //if ca n't sign o n with Tok en clear i t so can g et new one
  201        if As signed(App lication.O nException ) then
  202          Old ExceptionH andler :=  Applicatio n.OnExcept ion
  203        else
  204          Old ExceptionH andler :=  nil;
  205        Appli cation.OnE xception : = TfrmErrM sg.RPCBSho wException ;
  206        frmSi gnon := Tf rmSignon.C reate(Appl ication);
  207        try
  208          //     ShowApp licationAn dFocusOK(A pplication );
  209          Old Handle :=  GetForegro undWindow;
  210          Set Foreground Window(frm Signon.Han dle);
  211          Pre pareSignon Form(Conne ctingBroke r);
  212          if  SetUpSignO n then                         / /SetUpSign On in logi nfrm unit.
  213          beg in                                        / /True if s ignon need ed
  214            i f frmSignO n.lblServe r.Caption  <> '' then
  215            b egin
  216               frmSignOn .ShowModal ;                      //do inte ractive lo gon   // p 13
  217               if frmSig nOn.Tag =  1 then                 //Tag=1 f or good lo gon
  218                 blnSign edOn := Tr ue;                     //Succes sfull logo n
  219               end //if
  220          end  //if
  221          els e                                         / /False whe n no logon  needed
  222            b lnSignedOn  := NoSign OnNeeded;           / /Returns T rue always  (for now! )
  223          if  blnSignedO n then                         / /P6 If log ged on, re trieve use r info.
  224          beg in
  225            G etBrokerIn fo(Connect ingBroker) ;
  226            i f not Choo seDiv('',C onnectingB roker) the n
  227            b egin
  228               blnSigned On := Fals e;//P8
  229               {Select d ivision if  multi-div ision user .  First p arameter i s 'userid'
  230               (DUZ or u sername) f or future  use. (P8)}
  231               Connectin gBroker.Lo gin.ErrorT ext := 'Fa iled to se lect Divis ion';  //  p13 set so me text in dicating p roblem
  232            e nd; //if
  233          end ; //if
  234          Set Foreground Window(Old Handle);
  235        final ly
  236          frm Signon.Fre e;
  237          Sho wApplicati onAndFocus OK(Applica tion);
  238        end;  //try
  239        if As signed(Old ExceptionH andler) th en
  240          App lication.O nException  := OldExc eptionHand ler;
  241      end; // if Connect ingBroker. FKernelLog In
  242      // p13   following  section f or silent  signon
  243      if (not  Connectin gBroker.Ke rnelLogIn)  and (not  blnsignedo n) then      // was d oing the s ignon twic e if alrea dy true
  244        if Co nnectingBr oker.Login  <> nil th en     //t he user.   vistalogin  contains  login info
  245          bln signedon : = SilentLo gin(Connec tingBroker );    // R pcSLogin u nit
  246      if not  blnsignedo n then
  247      begin
  248        TXWBW insock(Con nectingBro ker.XWBWin sock).Netw orkDisconn ect(Connec tingBroker .Socket);
  249      end //i f
  250      else
  251        GetBr okerInfo(C onnectingB roker);
  252        //res et the Bro ker
  253      with Co nnectingBr oker do
  254      begin
  255        Clear Parameters  := SaveCl earParmete rs;
  256        Clear Results :=  SaveClear Results;
  257        Param .Assign(Sa veParam);                    //r estore set tings
  258        SaveP aram.Free;
  259        Remot eProcedure  := SaveRe moteProced ure;
  260        RpcVe rsion := S aveRpcVers ion;
  261        Resul ts := Save Results;
  262        FKern elLogin :=  SaveKerne lLogin;          // p 13
  263        FLogi n := SaveV istaLogin;                  // p 13
  264      end; // with
  265      if not  blnSignedO n then                       //F lag for un successful  signon.
  266        TXWBW insock(Con nectingBro ker.XWBWin sock).NetE rror('',XW B_BadSignO n);    //W ill raise  error.
  267   end; //pro cedure Aut henticateU ser
  268  
  269  
  270   {--------- ---------- ---- GetCC OWHandle - ---------- ---------- -----
  271   Private fu nction to  return a s pecial CCO W Handle f rom the se rver
  272   which is s et into th e CCOW con text.
  273   The Broker  of a new  applicatio n can get  the CCOWHa ndle from  the contex t
  274   and use it  to do a I mAPPHandle  Sign-on.
  275   ---------- ---------- ---------- ---------- ---------- ---------- ----}
  276   function T CCOWRPCBro ker.GetCCO WHandle(Co nnectedBro ker : TCCO WRPCBroker ): String;    // p13
  277   begin
  278     Result : = '';
  279     with Con nectedBrok er do
  280       try             / / to permi t it to wo rk correct ly if CCOW  is not in stalled on  the serve r.
  281         begi n
  282           Re moteProced ure := 'XU S GET CCOW  TOKEN';
  283           Ca ll;
  284           Re sult := Re sults[0];
  285           Do main := Re sults[1];
  286           Re moteProced ure := 'XU S CCOW VAU LT PARAM';
  287           Ca ll;
  288           Pa ssCode1 :=  Results[0 ];
  289           Pa ssCode2 :=  Results[1 ];
  290         end;
  291       except
  292         Resu lt := '';
  293       end; / /try
  294   end; //fun ction TCCO WRPCBroker .GetCCOWHa ndle
  295  
  296  
  297   {--------- ---------- ---- CCOWs etUser --- ---------- ---------- ---
  298   CCOW Start
  299   ---------- ---------- ---------- ---------- ---------- ---------- ----}
  300   procedure  TCCOWRPCBr oker.CCOWs etUser(Una me, token,  Domain, V pid: strin g; Context or: TConte xtorContro l);
  301   var
  302     CCOWdata : IContext ItemCollec tion;              // CCOW
  303     CCOWdata Item1,CCOW dataItem2, CCOWdataIt em3: ICont extItem;
  304     CCOWdata Item4,CCOW dataItem5:  IContextI tem;    // CCOW
  305     Cname: s tring;
  306   begin
  307     if Conte xtor <> ni l then
  308     begin
  309       try
  310         //Pa rt 1
  311         Cont extor.Star tContextCh ange;
  312         //Pa rt 2 Set t he new pro posed cont ext data
  313         CCOW data := Co ContextIte mCollectio n.Create;
  314         CCOW dataItem1  := CoConte xtItem.Cre ate;
  315         Cnam e := CCOW_ LOGON_ID;
  316         CCOW dataItem1. Name := Cn ame;
  317         CCOW dataItem1. Value := d omain;
  318         CCOW Data.Add(C COWdataIte m1);
  319         CCOW dataItem2  := CoConte xtItem.Cre ate;
  320         Cnam e := CCOW_ LOGON_TOKE N;
  321         CCOW dataItem2. Name := Cn ame;
  322         CCOW dataItem2. Value := t oken;
  323         CCOW data.Add(C COWdataIte m2);
  324         CCOW dataItem3  := CoConte xtItem.Cre ate;
  325         Cnam e := CCOW_ LOGON_NAME ;
  326         CCOW dataItem3. Name := Cn ame;
  327         CCOW dataItem3. Value := U name;
  328         CCOW data.Add(C COWdataIte m3);
  329         //
  330         CCOW dataItem4  := CoConte xtItem.Cre ate;
  331         Cnam e := CCOW_ LOGON_VPID ;
  332         CCOW dataItem4. Name := Cn ame;
  333         CCOW dataItem4. Value := V pid;
  334         CCOW data.Add(C COWdataIte m4);
  335         //
  336         CCOW dataItem5  := CoConte xtItem.Cre ate;
  337         Cnam e := CCOW_ USER_NAME;
  338         CCOW dataItem5. Name := Cn ame;
  339         CCOW dataItem5. Value := U name;
  340         CCOW data.Add(C COWdataIte m5);
  341         //Pa rt 3 Make  change
  342         Cont extor.EndC ontextChan ge(true, C COWdata);
  343         //We  don't nee d to check  CCOWrespo nce
  344       finall y
  345       end;   //try
  346     end; //i f
  347   end; //pro cedure TCC OWRPCBroke r.CCOWsetU ser
  348  
  349  
  350   {--------- ---------- ---- GetCC OWtoken -- ---------- ---------- ----
  351   Get Token  from CCOW  context
  352   ---------- ---------- ---------- ---------- ---------- ---------- ----}
  353   function T CCOWRPCBro ker.GetCCO Wtoken(Con textor: TC ontextorCo ntrol): st ring;
  354   var
  355     CCOWdata Item1: ICo ntextItem;                   //C COW
  356     CCOWcont extItem: I ContextIte mCollectio n;      // CCOW
  357     name: st ring;
  358   begin
  359     result : = '';
  360     name :=  CCOW_LOGON _TOKEN;
  361     if (Cont extor <> n il) then
  362       try
  363         CCOW contextIte m := Conte xtor.Curre ntContext;
  364         //Se e if conte xt contain s the ID i tem
  365         CCOW dataItem1  := CCOWcon textItem.P resent(nam e);
  366         if ( CCOWdataIt em1 <> nil ) then     //1
  367         begi n
  368           re sult := CC OWdataItem 1.Value;
  369           if  not (resu lt = '') t hen
  370              FWasUserDe fined := T rue;
  371         end;  //if
  372         FCCO WLogonIDNa me := CCOW _LOGON_ID;
  373         FCCO WLogonName  := CCOW_L OGON_NAME;
  374         FCCO WLogonVpid  := CCOW_L OGON_VPID;
  375         CCOW dataItem1  := CCOWcon textItem.P resent(CCO W_LOGON_ID );
  376         if C COWdataIte m1 <> nil  then
  377           FC COWLogonId Value := C COWdataIte m1.Value;
  378         CCOW dataItem1  := CCOWcon textItem.P resent(CCO W_LOGON_NA ME);
  379         if C COWdataIte m1 <> nil  then
  380           FC COWLogonNa meValue :=  CCOWdataI tem1.Value ;
  381         CCOW dataItem1  := CCOWcon textItem.P resent(CCO W_LOGON_VP ID);
  382         if C COWdataIte m1 <> nil  then
  383           FC COWLogonVp idValue :=  CCOWdataI tem1.Value ;
  384       finall y
  385       end; / /try
  386   end; //fun ction TCCO WRPCBroker .GetCCOWto ken
  387  
  388  
  389   {--------- ---------- ---- GetCC OWduz ---- ---------- ---------- --
  390   Get Name f rom CCOW c ontext
  391   ---------- ---------- ---------- ---------- ---------- ---------- ----}
  392   function T CCOWRPCBro ker.GetCCO Wduz(Conte xtor: TCon textorCont rol): stri ng;
  393   var
  394     CCOWdata Item1: ICo ntextItem;                    // CCOW
  395     CCOWcont extItem: I ContextIte mCollectio n;      // CCOW
  396     name: st ring;
  397   begin
  398     result : = '';
  399     name :=  CCOW_LOGON _ID;
  400     if (Cont extor <> n il) then
  401       try
  402         CCOW contextIte m := Conte xtor.Curre ntContext;
  403         //Se e if conte xt contain s the ID i tem
  404         CCOW dataItem1  := CCOWcon textItem.P resent(nam e);
  405         if ( CCOWdataIt em1 <> nil ) then     //1
  406         begi n
  407           re sult := CC OWdataItem 1.Value;
  408           if  result <>  '' then
  409              FWasUserDe fined := T rue;
  410         end;  //if
  411       finall y
  412       end; / /try
  413   end; //fun ction TCCO WRPCBroker .GetCCOWdu z
  414  
  415  
  416   {--------- ---------- ---- IsUse rContextPe nding ---- ---------- ---------- --
  417   ---------- ---------- ---------- ---------- ---------- ---------- ----}
  418   function T CCOWRPCBro ker.IsUser ContextPen ding(aCont extItemCol lection: I ContextIte mCollectio n): Boolea n;
  419   var
  420     CCOWdata Item1: ICo ntextItem;                    // CCOW
  421     Val1: St ring;
  422   begin
  423     result : = false;
  424     if WasUs erDefined( ) then //  indicates  data was d efined
  425     begin
  426       Val1 : = '';  //  look for a ny USER Co ntext item s defined
  427       result  := True;
  428       //
  429       CCOWda taItem1 :=  aContextI temCollect ion.Presen t(CCOW_LOG ON_ID);
  430       if CCO WdataItem1  <> nil th en
  431         if n ot (CCOWda taItem1.Va lue = FCCO WLogonIDVa lue) then
  432           Va l1 := '^'  + CCOWdata Item1.Valu e;
  433       //
  434       CCOWda taItem1 :=  aContextI temCollect ion.Presen t(CCOW_LOG ON_NAME);
  435       if CCO WdataItem1  <> nil th en
  436         if n ot (CCOWda taItem1.Va lue = FCCO WLogonName Value) the n
  437           Va l1 := Val1  + '^' + C COWdataIte m1.Value;
  438       //
  439       CCOWda taItem1 :=  aContextI temCollect ion.Presen t(CCOW_LOG ON_VPID);
  440       if CCO WdataItem1  <> nil th en
  441         if n ot (CCOWda taItem1.Va lue = FCCO WLogonVpid Value) the n
  442           Va l1 := Val1  + '^' + C COWdataIte m1.Value;
  443       //
  444       CCOWda taItem1 :=  aContextI temCollect ion.Presen t(CCOW_USE R_NAME);
  445       if CCO WdataItem1  <> nil th en
  446         if n ot (CCOWda taItem1.Va lue = user .Name) the n
  447           Va l1 := Val1  + '^' + C COWdataIte m1.Value;
  448       //
  449       if Val 1 = '' the n    // no thing defi ned or all  matches,  so not use r context  change
  450         resu lt := Fals e;
  451     end; //i f
  452   end; //fun ction TCCO WRPCBroker .IsUserCon textPendin g
  453  
  454   end.
  455