RDMLX Userid associated with host task- change

Please do not use to report errors- use your regional help desk.
Please mark posts as being for RPG or RDMLX (LANSA) developer.
To subscribe by email, display this forum, scroll to the end and select ‘Subscribe Forum’.
Post Reply
jimoreilly
Posts: 22
Joined: Sat Apr 20, 2013 6:17 am

RDMLX Userid associated with host task- change

Post by jimoreilly »

From the examples I understand that you can validate the Userid and Password of the current transaction by asking the user for those fields and calling the 3G program to check. But the component on the host still runs under the general userid associated with the partition, like a Lansa Web program. If we wish to run batch programs under specific userids, or use functions like SNDMSG it would be very helpful to be able to make the host task assume the validated userid/password. Is there any methods available to make this happen?
dhnaigles
Posts: 28
Joined: Tue May 08, 2012 12:13 am

Re: RDMLX Userid associated with host task- change

Post by dhnaigles »

Look at the RDML code of function UFU001 (VLF Web IIP for Logon). This should do what you want.
Regards,

David
MarkDuignan
Posts: 346
Joined: Wed Apr 18, 2012 10:33 am

Re: RDMLX Userid associated with host task- change

Post by MarkDuignan »

This CL program is shipped with LongRange for RPG - but it is equally usable in RDMLX.

It can validate a user profile and password and optionally change the current job to run as the user profile specified.

RDMLX code is stateless - so you probably need slight variation made in the this CL program.
When it is called to change the job to the user it should check what the current job user is and only change it if required.
In RDMLX his program needs to be called on every interaction - because RDMLX programs run in a stateless environment.

I would also tend to not call it 'CheckUser' - so much as 'ConfigureJob' - as there may be other things you want it to do later (eg: set the user's output queue).

Code: Select all

/*<<DES>>=Building block CHECKUSER CL program                                         */       
     /*<<KEY>>=buildingblock build block skeletons templates                               */       
     /*<<KEY>>=user validation authority userprofiles passwords                            */       
     /*<<CRT>>=T                                                                           */       
     /*<<URL>>=6                                                                           */       
     /*<<END>>                                                                             */       
             PGM        PARM(&USERPROF &PASSWORD &CHANGEJOB &RETCODE &ERRORMSG)                     
                                                                                                    
   /********************************************************/                                       
   /* Check that the passed User Id and Password are valid */                                       
   /* Status Codes Returned :                              */                                       
   /* OK = USER OK                                         */                                       
   /* IU = INVALID USER ID                                 */                                       
   /* IP = INVALID PASSWORD                                */                                       
   /* EX = PASSWORD EXPIRED                                */                                       
   /* UD = USER PROFILE DISABLED                           */                                       
   /* ER = UNEXPECTED ERROR                                */                                       
   /********************************************************/                                       
                                                                                                    
   /* Received Parms */                                                                             
             DCL        VAR(&USERPROF) TYPE(*CHAR) LEN(10)                                          
             DCL        VAR(&PASSWORD) TYPE(*CHAR) LEN(128)                                         
             DCL        VAR(&CHANGEJOB) TYPE(*CHAR) LEN(1)                                          
                                                                                                    
   /* Returned Parms */                                                                             
             DCL        VAR(&RETCODE) TYPE(*CHAR) LEN(2)                                            
             DCL        VAR(&ERRORMSG) TYPE(*CHAR) LEN(132)                                         
             DCL        VAR(&HANDLE) TYPE(*CHAR) LEN(12)                                            
             DCL        VAR(&RTNVAR) TYPE(*CHAR) LEN(8) VALUE(X'0000000000000000')                  
                                                                                                    
   /* Check User and Password for OS/400 V5R3 onwards */                                            
             CALL       PGM(QSYGETPH) PARM(&USERPROF &PASSWORD &HANDLE &RTNVAR X'00000080' +        
                          X'00000000')                                                              
                                                                                                    
   /* Invalid User                                             */                                   
             MONMSG     MSGID(CPF2203 CPF2204) EXEC(DO)                                             
                CHGVAR     VAR(&RETCODE) VALUE('IU')                                                
                CHGVAR     VAR(&ERRORMSG) VALUE('Invalid or unknown user profile.')                 
                GOTO       CMDLBL(END)                                                              
             ENDDO                                                                                  
                                                                                                    
   /* Unable to check this user                               */                                    
             MONMSG     MSGID(CPF22E9 CPF2213 CPF2217 CPF4AB8) EXEC(DO)                             
                CHGVAR     VAR(&RETCODE) VALUE('UV')                                                
                CHGVAR     VAR(&ERRORMSG) VALUE('Unable to access user profile details.')           
                GOTO       CMDLBL(END)                                                              
             ENDDO                                                                                  
                                                                                                    
   /* Password is invalid */                                                                        
             MONMSG     MSGID(CPF22E2) EXEC(DO)                                                     
                CHGVAR     VAR(&RETCODE) VALUE('IP')                                                
                CHGVAR     VAR(&ERRORMSG) VALUE('Invalid password.')                                
                GOTO       CMDLBL(END)                                                              
             ENDDO                                                                                  
                                                                                                    
   /* This profile has no password */                                                               
             MONMSG     MSGID(CPF22E5) EXEC(DO)                                                     
                CHGVAR     VAR(&RETCODE) VALUE('NO')                                                
                CHGVAR     VAR(&ERRORMSG) VALUE('No Password exists for this user.')                
                GOTO       CMDLBL(END)                                                              
             ENDDO                                                                                  
                                                                                                    
   /* Profile is disabled */                                                                        
             MONMSG     MSGID(CPF22E3) EXEC(DO)                                                     
                CHGVAR     VAR(&RETCODE) VALUE('UD')                                                
                CHGVAR     VAR(&ERRORMSG) VALUE('User Profile is disabled.')                        
                GOTO       CMDLBL(END)                                                              
             ENDDO                                                                                  
                                                                                                    
   /* Password has expired */                                                                       
             MONMSG     MSGID(CPF22E4) EXEC(DO)                                                     
                CHGVAR     VAR(&RETCODE) VALUE('EX')                                                
                CHGVAR     VAR(&ERRORMSG) VALUE('The password has expired.')                        
                GOTO       CMDLBL(END)                                                              
             ENDDO                                                                                  
                                                                                                    
   /* Unspecified error */                                                                          
             MONMSG     MSGID(MCH0000 CPF0000) EXEC(DO)                                             
                CHGVAR     VAR(&RETCODE) VALUE('ER')                                                
                CHGVAR     VAR(&ERRORMSG) VALUE('No error message available')                       
                RCVMSG     MSG(&ERRORMSG)                                                           
                MONMSG     MSGID(MCH0000 CPF0000)                                                   
                GOTO       CMDLBL(END)                                                              
             ENDDO                                                                                  
                                                                                                    
                                                                                                    
   /*    No error so far so swap job to be that user      */                                        
   /*    noting that this user must follow the same       */                                        
   /*    'no interuptions' rule as other LongRange        */                                        
   /*    user profiles do - no break messages, no         */                                        
   /*    password change prompts - nothing that interupts */                                        
   /*    the expected 5250 stream                         */                                        
                                                                                                    
             IF         COND(&CHANGEJOB = 'Y') THEN(DO)                                             
                                                                                                    
                CHGVAR     VAR(&RTNVAR) VALUE(X'0000000000000000')                                  
                                                                                                    
                CALL       PGM(QWTSETP) PARM(&HANDLE &RTNVAR)                                       
                                                                                                    
                MONMSG     MSGID(MCH0000 CPF0000) EXEC(DO)                                          
                   CHGVAR     VAR(&RETCODE) VALUE('ER')                                             
                   CHGVAR     VAR(&ERRORMSG) VALUE('No error message available')                    
                   RCVMSG     MSG(&ERRORMSG)                                                        
                   MONMSG     MSGID(MCH0000 CPF0000)                                                
                   GOTO       CMDLBL(END)                                                           
                ENDDO                                                                               
                                                                                                    
             ENDDO                                                                                  
                                                                                                    
   /* No error at all if we reach this point in the code */                                         
                                                                                                    
             CHGVAR     VAR(&RETCODE)  VALUE('OK')                                                  
             CHGVAR     VAR(&ERRORMSG) VALUE(' ')                                                   
                                                                                                    
   /* End the program */                                                                            
                                                                                                    
END:         ENDPGM
Attachments
CheckUser.Txt
(11.62 KiB) Downloaded 239 times
Post Reply