Search code examples
ibm-midrange

IBM i User Space Security


Does anyone know how secure user spaces *USRSPC are in the event of a power outage?

I use user spaces to provide last number issued on a per-file basis. I use so-called machine-code API to prevent the same number being issue twice. I have found duplicates caused by the user space not being saved to disc prior to re-IPL.

It would not appear that user spaces are eligible for journaling. Or does anyone know of a way that I could journal each time the last number issued is incremented?

Regards, Frank Marshall


Solution

  • there is a force parameter on the quschgus API. Set that parameter to '2' to force user space changes to be immediately written to disk.

                 PGM
    
                 DCL        VAR(&USRSPC) TYPE(*CHAR) LEN(20)
                 dcl        &start *int
                 dcl        &len *int
                 dcl        &data *char 2000
                 dcl        &rtndata *char 2000
                 dcl        &force *char 1
                 dcl        &attr *char 10
                 dcl        &size *int
                 dcl        &init *char 1
                 dcl        &pubaut *char 10
                 dcl        &desc *char 50
    
                 chgvar     &usrspc 'STEVE     QGPL'
                 chgvar     &attr ' '
                 chgvar     &size 2000
                 chgvar     &init ' '
                 chgvar     &pubaut '*ALL'
                 chgvar     &desc 'user space demo'
                 call       pgm(quscrtus) parm(&usrspc &attr &size &init &pubaut &desc )
    
                 chgvar     &start 25
                 chgvar     &len 10
                 RTVJOBA    JOB(&DATA)
                 chgvar     &force '2'
                 call       quschgus parm(&usrspc &start &len &data &force )
    
                 chgvar     &usrspc 'STEVE     QGPL'
                 chgvar     &start 25
                 chgvar     &len 10
                 call       qusrtvus parm(&usrspc &start &len &rtndata)
                 sndpgmmsg  msg('data returned:' *cat &rtndata)
    
                 endpgm