Troubleshooting
Problem
To write a CL program to change the ownership of an object, follow the instructions in this document.
Resolving The Problem
A user profile can own a limited number of objects (approximately 10,000,000 at R540 and approximately 50,000,000 at R610 and above). When this limit is exhausted, no more objects can be owned by the user profile. An attempt to make the profile an owner of additional objects results in message MCH2804 - Tried to go larger than storage limit for object &1. If a user profile contains too many owned objects, there is no easy way to remove objects from the profile (particular when dealing with more than a million objects). The iSeries provides a mechanism using the following commands to change the owner of an object:
CHGOBJOWN
CHGOWN
WRKOBJOWN
These commands require manual intervention. However, a CL program can be created to change object ownership. Following is the source for the CL program. The source was taken from an OS/400 source file. This source can be pasted into an OS/400 source file using the WRKPDM command. Comments residing the source explains the setup for the program and requirements for running.
0001.00 /*********************************************************************/
0002.00 /* Q##CHGOWN IS A TEST PROGRAM THAT MAY BE USED TO CHANGE AN */
0003.00 /* OBJECT'S OWNERSHIP. THIS SOURCE CODE HAS NOT BEEN APPROVED BY IBM */
0004.00 /* FOR SOURCE CODE HAS NOT BEEN APPROVED BY IBM FOR GENERAL */
0005.00 /* DISTRIBUTION. */
0006.00 /* THE PROGRAM IS CALLED WITH THE FOLLOWING PARAMETERS: */
0007.00 /* */
0008.00 /* A.NAME OF THE USER PROFILE THAT CONTAINS OBJECT OWNERSHIP */
0009.00 /* B.NAME OF USER PROFILE THAT IS TO RECEIVE OBJECT OWNERSHIP. */
0010.00 /* C.NUMBER OF OBJECTS WHOSE AUTHORITY WILL BE CHANGED. */
0011.00 /* */
0012.00 /* CRTCLPGM REQUIREMENTS: */
0013.00 /* */
0014.00 /* THE SOURCE FOR THIS PROGRAM CONTAINS A DCLF COMMAND WHICH */
0015.00 /* REFERENCES FILE (QGPL/Q##CHGOWN). */
0016.00 /* */
0017.00 /* THIS OUTFILE MUST EXIST IN QGPL BEFORE THE PROGRAM WILL */
0018.00 /* COMPILE WITHOUT ERRORS. THE FILE MAY BE CREATED VIA THE */
0019.00 /* FOLLOWING: */
0020.00 /* */
0021.00 /* DSPUSRPRF USRPRF(QPGMR) TYPE(*OBJOWN) OUTPUT(*OUTFILE) */
0022.00 /* OUTFILE(QGPL/Q##CHGOWN) */
0023.00 /* */
0024.00 /*THIS PROGRAM DOES THE FOLLOWING: */
0025.00 /* */
0026.00 /* A.CREATES USER PROFILE NAMED Q##CHGOWN IF DOES NOT EXIST. */
0027.00 /* THIS PROFILE IS USED TO GENERATE OUTFILE REFERENCED IN STEP B. */
0028.00 /* */
0029.00 /* B.CREATES DATA BASE FILE Q##CHGOWN IF IT DOES NOT EXIST. THIS */
0030.00 /* FILE IS USED TO COLLECT A LIST OF ALL OBJECTS OWNED BY A */
0031.00 /* USER PROFILE. THIS IS DONE VIA THE FOLLOWING COMMAND: */
0032.00 /* */
0033.00 /* DSPUSRPRF USRPRF(Q##CHGOWN) TYPE(*OBJOWN) OUTPUT(*OUTFILE) + */
0034.00 /* OUTFILE(QGPL/Q##CHGOWN). */
0035.00 /* */
0036.00 /* C.SETS MAXIMUM NUMBER OF RECORDS FOR FILE Q##CHGOWN TO *NOMAX. */
0037.00 /* */
0038.00 /* D.CREATES MESSAGE FILE QGPL/Q##CHGOWN IF IT DOES NOT EXIST. */
0039.00 /* */
0040.00 /* E.DISPLAYS OBJECTS OWNED BY USER PROFILE TO AN OUTFILE */
0041.00 /* */
0042.00 /* DSPUSRPRF USRPRF(**********) TYPE(*OBJOWN) OUTPUT(*OUTFILE) + */
0043.00 /* OUTFILE(QTEMP/USRPRFOWN) */
0044.00 /* */
0045.00 /* F.CHANGES OBJECT OWNERSHIP FOR THE REQUESTED NUMBER OF OBJECTS. */
0046.00 /* THE PROGRAM AT THIS POINT DOES NOT PROVIDE A MEANS FOR */
0047.00 /* SELECTING WHICH OBJECTS TO CHANGE. SELECTION IS BASED ON */
0048.00 /* ORDINAL POSITION IN THE DATA BASE FILE. */
0049.00 /* */
0050.00 /* G.GENERATES MESSAGES INDICATING THE NUMBER OF OWNED OBJECTS AND */
0051.00 /* THE NUMBER OF OBJECTS WHOES OWNERSHIP IS TRANSFERRED. */
0052.00 /* */
0053.00 /* H.DELETES ALL OBJECTS CREATED BY THIS PROGRAM EXCEPT */
0054.00 /* MESSAGE FILE QGPL/Q##CHGOWN. */
0055.00 /* */
0056.00 /*PROGRAM ACTIVATION */
0057.00 /* */
0058.00 /* THIS PROGRAM MAY BE ACTIVATED VIA A CALL WITH THE FOLLOWING */
0059.00 /* PARAMETERS: */
0060.00 /* */
0061.00 /* CALL QGPL/Q##CHGOWN (FROM_PRF TO_PRF NUM_TO_CHG) */
0062.00 /* */
0063.00 /* "NOTE" NUM_TO_CHG MUST NOT BE INCLOSED IN QUOTES. IF */
0064.00 /* NUM_TO_CHG IS ZERO THE PROGRAM WILL PROVIDE THE NUMBER */
0065.00 /* OBJECTS OWNED BY THE FROM_PRF WITHOUT CHANGING OBJECT */
0066.00 /* OWNERSHIP. */
0067.00 /* */
0068.00 /* THE FOLLOWING ARE INSTRUCTION FOR OBTAINING OBJECT OWNERSHIP AND */
0069.00 /* AUTHORIZATION INFORMATION FROM A USER PROFILE USING STRSST. */
0070.00 /* */
0071.00 /* A.STRSST */
0072.00 /* B.OPTION 1 - START A SERVICE FUNCTION */
0073.00 /* C.OPTION 4 - DISPLAY/ALTER/DUMP */
0074.00 /* D.OPTION 1 - DISPLAY ALTER STORAGE */
0075.00 /* E.OPTION 1 - MACHINE INTERFACE (MI) OBJECT */
0076.00 /* F.OPTION 8 - USER PROFILE (08) */
0077.00 /* G.OPTION 1 - FIND BY OBJECT NAME */
0078.00 /* H.ENTER THE NAME OF THE USER PROFILE TO BE CHANGED. */
0079.00 /* I.PRESS ENTER. THEN PRESS AGAIN TO CONTINUE. */
0080.00 /* J.THE USER PROFILE IS DISPLAYED. PAGE DOWN TO CONTROL ADDRESS */
0081.00 /* 0130. RECORD THE CONTENTS ACCORDINGLY: */
0082.00 /* */
0083.00 /* 0130 XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX */
0084.00 /* */
0085.00 /* # OWNED # AUTHORIZED # OBJECTS # FREE */
0086.00 /* OBJECTS OBJECTS OWNED WHICH ENTRIES */
0087.00 /* OTHERS HAVE */
0088.00 /* BEEN AUTHORIZED */
0089.00 /* K.SAVE THIS INFO FOR LATER, EXIT SST */
0090.00 /* */
0091.00 /* */
0092.00 /*********************************************************************/
0093.00
0094.00 QSYS/PGM PARM(&FRMUSRPRF +
0095.00 &TOOWNUSRP +
0096.00 &RVKOWNNUM)
0097.00
0098.00 DCLF FILE(QGPL/Q##CHGOWN) /*GET VARIABLE FIELD */
0099.00 /* NAMES FOR */
0100.00 /*FILE CREATED BY DSPUSRPRF */
0101.00 /* TYPE(*OBJOWN) */
0102.00
0103.00 /* */
0104.00 /********************************************************************/
0105.00 /* */
0106.00 /* DECLARE PARAMETER VARIABLES. */
0107.00 /* */
0108.00 /********************************************************************/
0109.00 DCL &FRMUSRPRF TYPE(*CHAR) LEN(10) /* REQUESTED FUNCTION */
0110.00 DCL &TOOWNUSRP TYPE(*CHAR) LEN(10) /* PROGRAM CALLED BEFORE/AFTER*/
0111.00 DCL &RVKOWNNUM TYPE(*DEC) LEN(15 5) /*NUMBER OF OBJECTS WHOSE */
0112.00 /* OWNERSHIP WILL BE CHANGED*/
0113.00 /********************************************************************/
0114.00 /* */
0115.00 /* DECLARE LOCAL WORK VARIABLES */
0116.00 /* */
0117.00 /********************************************************************/
0118.00
0119.00 DCL &USRPRFCRT TYPE(*DEC) LEN(15 5) VALUE(0)
0120.00 DCL &DBFILECRT TYPE(*DEC) LEN(15 5) VALUE(0)
0121.00 DCL &OWN#TOCHG# TYPE(*DEC) LEN(15 5) VALUE(0)
0122.00 DCL &USRPRFOWN# TYPE(*DEC) LEN(15 5) VALUE(0)
0123.00 DCL &OWN#TOCHG TYPE(*DEC) LEN(15 5) VALUE(0)
0124.00 DCL &MSGDTAAREA TYPE(*CHAR) LEN(32)
0125.00
0126.00
0127.00
0128.00 /********************************************************************/
0129.00 /* */
0130.00 /* GET NUMBER OF OBJECTS WHOSE OWNERSHIP IS TO BE CHANGED */
0131.00 /* */
0132.00 /********************************************************************/
0133.00
0134.00 CHGVAR VAR(&OWN#TOCHG) VALUE(&RVKOWNNUM)
0135.00
0136.00 /********************************************************************/
0137.00 /* */
0138.00 /* CREATE A MESSAGE FILE AND MESSAGE DESCRIPTION IN QTEMP */
0139.00 /* */
0140.00 /********************************************************************/
0141.00
0142.00 CRTMSGF MSGF(QTEMP/Q##CHGOWN)
0143.00 MONMSG MSGID(CPF0000)
0144.00
0145.00 RMVMSGD MSGID(USR3410) MSGF(QTEMP/Q##CHGOWN)
0146.00 MONMSG MSGID(CPF0000)
0147.00
0148.00 RMVMSGD MSGID(USR3420) MSGF(QTEMP/Q##CHGOWN)
0149.00 MONMSG MSGID(CPF0000)
0150.00
0151.00 ADDMSGD MSGID(USR3410) MSGF(QTEMP/Q##CHGOWN) +
0152.00 MSG('User Profile &1 contained &2 +
0153.00 objects.') FMT((*CHAR 10) (*BIN 4))
0154.00 MONMSG MSGID(CPF0000)
0155.00
0156.00 ADDMSGD MSGID(USR3420) MSGF(QTEMP/Q##CHGOWN) +
0157.00 MSG('The ownership of &5 object/s were +
0158.00 transferred from user profile &1 to user +
0159.00 profile &2.') SECLVL('The total number of +
0160.00 objectw whose ownership was to be +
0161.00 transferred was &4. The number of owned +
0162.00 objects in user profile &1 was &3. The +
0163.00 total number of object ownerships +
0164.00 transferred from user profile &1 to user +
0165.00 profile &2 was &5.') FMT((*CHAR 10) +
0166.00 (*CHAR 10) (*BIN 4) (*BIN 4) (*BIN 4))
0167.00 MONMSG MSGID(CPF0000)
0168.00
0169.00 /********************************************************************/
0170.00 /* */
0171.00 /* CREATE USER PROFILE Q##CHGOWN IF IT DOES NOT EXIST */
0172.00 /* */
0173.00 /********************************************************************/
0174.00
0175.00 CRTUSRPRF USRPRF(Q##CHGOWN) TEXT('User Profile for +
0176.00 program Q##CHGOWN')
0177.00 MONMSG MSGID(CPF0000) EXEC(CHGVAR &USRPRFCRT VALUE(&USRPRFCRT + 1))
0178.00 /*SET USER PROFILE NOT CREATED FLAG */
0179.00
0180.00 /********************************************************************/
0181.00 /* */
0182.00 /* DETERMINE IF DATA BASE FILE QTEMP/Q##CHGOWN EXIST */
0183.00 /* */
0184.00 /********************************************************************/
0185.00
0186.00 CRTPF FILE(QGPL/Q##CHGOWN) SIZE(*NOMAX)
0187.00 MONMSG MSGID(CPF0000) EXEC(CHGVAR &DBFILECRT VALUE(&DBFILECRT + 1))
0188.00 /*SET FILE DOES NOT EXIST FLAG*/
0189.00
0190.00 /********************************************************************/
0191.00 /* */
0192.00 /* GENERATE OUTFILE FOR OWNED OBJECTS AND SET SIZE TO *NOMAX */
0193.00 /* */
0194.00 /********************************************************************/
0195.00
0196.00 DSPUSRPRF USRPRF(Q##CHGOWN) TYPE(*OBJOWN) OUTPUT(*OUTFILE) +
0197.00 OUTFILE(QGPL/Q##CHGOWN)
0198.00
0199.00 CHGPF FILE(QGPL/Q##CHGOWN) SIZE(*NOMAX)
0200.00
0201.00 /********************************************************************/
0202.00 /* */
0203.00 /* POPULATE OUTFILE WITH RECORDS FOR OBJECTS OWNED BY PROFILE */
0204.00 /* */
0205.00 /********************************************************************/
0206.00
0207.00 DSPUSRPRF USRPRF(&FRMUSRPRF) TYPE(*OBJOWN) OUTPUT(*OUTFILE) +
0208.00 OUTFILE(QGPL/Q##CHGOWN)
0209.00
0210.00 /********************************************************************/
0211.00 /* */
0212.00 /* PROCESS INPUT USER PROFILE */
0213.00 /* */
0214.00 /********************************************************************/
0215.00 READOWNREC:
0216.00 CHGVAR &USRPRFOWN# VALUE(&USRPRFOWN# + 1)
0217.00 RCVF /*READ A RECORD FROM THE FILE */
0218.00 /* QGPL/USRPRFOWN */
0219.00 MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(SENDMESSAG))
0220.00 GOTO CHGPRFOWN /* CHANGE OBJECT OWNER IF REQUIRED*/
0221.00
0222.00 READNXTREC:
0223.00
0224.00 GOTO READOWNREC /* GO READ NEXT RECORD */
0225.00
0226.00
0227.00 SENDMESSAG:
0228.00
0229.00 CHGVAR %SST(&MSGDTAAREA 1 10) VALUE(&FRMUSRPRF)
0230.00 CHGVAR %BIN(&MSGDTAAREA 11 4) VALUE(&USRPRFOWN#)
0231.00
0232.00
0233.00 QSYS/SNDPGMMSG MSGID(USR3410) MSGF(QTEMP/Q##CHGOWN) +
0234.00 MSGDTA(&MSGDTAAREA) +
0235.00 MSGTYPE(*COMP)
0236.00
0237.00 CHGVAR %SST(&MSGDTAAREA 11 10) VALUE(&TOOWNUSRP)
0238.00 CHGVAR %BIN(&MSGDTAAREA 21 4) VALUE(&USRPRFOWN#)
0239.00 CHGVAR %BIN(&MSGDTAAREA 25 4) VALUE(&RVKOWNNUM)
0240.00 CHGVAR %BIN(&MSGDTAAREA 29 4) VALUE(&OWN#TOCHG#)
0241.00
0242.00 QSYS/SNDPGMMSG MSGID(USR3420) MSGF(QTEMP/Q##CHGOWN) +
0243.00 MSGDTA(&MSGDTAAREA) +
0244.00 MSGTYPE(*COMP)
0245.00
0246.00 GOTO TERMINATE
0247.00
0248.00 CHGPRFOWN:
0249.00 /********************************************************************/
0250.00 /* */
0251.00 /* CHANGE OBJECT OWNERSHIP BASED ON THE NUMBER OF OBJECTS WHOSE */
0252.00 /* OWNERSHIP IS TO BE CHANGED. SEE VARIABLE &RVKOWNNUM. */
0253.00 /* */
0254.00 /********************************************************************/
0255.00
0256.00 QSYS/IF COND(&OWN#TOCHG > 0) +
0257.00 THEN(QSYS/DO)
0258.00 CHGOBJOWN OBJ(&OOLIB/&OOOBJ) OBJTYPE(&OOTYPE) +
0259.00 NEWOWN(&TOOWNUSRP)
0260.00 CHGVAR &OWN#TOCHG VALUE(&OWN#TOCHG - 1) /* DECREMENT COUNT */
0261.00 CHGVAR &OWN#TOCHG# VALUE(&OWN#TOCHG# + 1) /* INCREMENT COUNT */
0262.00 QSYS/ENDDO /* *RSTCODE COMPLETE - EXIT */
0263.00
0264.00 GOTO READNXTREC /* RETURN TO CALLER */
0265.00
0266.00 TERMINATE:
0267.00
0268.00 /********************************************************************/
0269.00 /* */
0270.00 /* THAT"S ALL FOLKS. CLEAN UP AND RETURN TO THE ONE WHO CALLED. */
0271.00 /* */
0272.00 /********************************************************************/
0273.00
0274.00 /*DELETE USER PROFILE Q##CHGOWN IF CREATED BY THIS PROGRAM */
0275.00
0276.00 QSYS/IF COND(&USRPRFCRT > 0) +
0277.00 THEN(QSYS/DO)
0278.00 DLTUSRPRF USRPRF(Q##CHGOWN) OWNOBJOPT(*DLT)
0279.00 QSYS/ENDDO /* */
0280.00
0281.00 /*DELETE DATA BASE FILE Q##CHGOWN IF CREATED BY THIS PROGRAM */
0282.00
0283.00 QSYS/IF COND(&DBFILECRT > 0) +
0284.00 THEN(QSYS/DO)
0285.00 DLTF FILE(QGPL/Q##CHGOWN)
0286.00 QSYS/ENDDO /* */
0287.00
0288.00 ENDPGM
CHGOBJOWN
CHGOWN
WRKOBJOWN
These commands require manual intervention. However, a CL program can be created to change object ownership. Following is the source for the CL program. The source was taken from an OS/400 source file. This source can be pasted into an OS/400 source file using the WRKPDM command. Comments residing the source explains the setup for the program and requirements for running.
Caution: This is a sample program and was created and tested "as-is." The IBM Rochester Support Center does not provide direct support on this program. |
0001.00 /*********************************************************************/
0002.00 /* Q##CHGOWN IS A TEST PROGRAM THAT MAY BE USED TO CHANGE AN */
0003.00 /* OBJECT'S OWNERSHIP. THIS SOURCE CODE HAS NOT BEEN APPROVED BY IBM */
0004.00 /* FOR SOURCE CODE HAS NOT BEEN APPROVED BY IBM FOR GENERAL */
0005.00 /* DISTRIBUTION. */
0006.00 /* THE PROGRAM IS CALLED WITH THE FOLLOWING PARAMETERS: */
0007.00 /* */
0008.00 /* A.NAME OF THE USER PROFILE THAT CONTAINS OBJECT OWNERSHIP */
0009.00 /* B.NAME OF USER PROFILE THAT IS TO RECEIVE OBJECT OWNERSHIP. */
0010.00 /* C.NUMBER OF OBJECTS WHOSE AUTHORITY WILL BE CHANGED. */
0011.00 /* */
0012.00 /* CRTCLPGM REQUIREMENTS: */
0013.00 /* */
0014.00 /* THE SOURCE FOR THIS PROGRAM CONTAINS A DCLF COMMAND WHICH */
0015.00 /* REFERENCES FILE (QGPL/Q##CHGOWN). */
0016.00 /* */
0017.00 /* THIS OUTFILE MUST EXIST IN QGPL BEFORE THE PROGRAM WILL */
0018.00 /* COMPILE WITHOUT ERRORS. THE FILE MAY BE CREATED VIA THE */
0019.00 /* FOLLOWING: */
0020.00 /* */
0021.00 /* DSPUSRPRF USRPRF(QPGMR) TYPE(*OBJOWN) OUTPUT(*OUTFILE) */
0022.00 /* OUTFILE(QGPL/Q##CHGOWN) */
0023.00 /* */
0024.00 /*THIS PROGRAM DOES THE FOLLOWING: */
0025.00 /* */
0026.00 /* A.CREATES USER PROFILE NAMED Q##CHGOWN IF DOES NOT EXIST. */
0027.00 /* THIS PROFILE IS USED TO GENERATE OUTFILE REFERENCED IN STEP B. */
0028.00 /* */
0029.00 /* B.CREATES DATA BASE FILE Q##CHGOWN IF IT DOES NOT EXIST. THIS */
0030.00 /* FILE IS USED TO COLLECT A LIST OF ALL OBJECTS OWNED BY A */
0031.00 /* USER PROFILE. THIS IS DONE VIA THE FOLLOWING COMMAND: */
0032.00 /* */
0033.00 /* DSPUSRPRF USRPRF(Q##CHGOWN) TYPE(*OBJOWN) OUTPUT(*OUTFILE) + */
0034.00 /* OUTFILE(QGPL/Q##CHGOWN). */
0035.00 /* */
0036.00 /* C.SETS MAXIMUM NUMBER OF RECORDS FOR FILE Q##CHGOWN TO *NOMAX. */
0037.00 /* */
0038.00 /* D.CREATES MESSAGE FILE QGPL/Q##CHGOWN IF IT DOES NOT EXIST. */
0039.00 /* */
0040.00 /* E.DISPLAYS OBJECTS OWNED BY USER PROFILE TO AN OUTFILE */
0041.00 /* */
0042.00 /* DSPUSRPRF USRPRF(**********) TYPE(*OBJOWN) OUTPUT(*OUTFILE) + */
0043.00 /* OUTFILE(QTEMP/USRPRFOWN) */
0044.00 /* */
0045.00 /* F.CHANGES OBJECT OWNERSHIP FOR THE REQUESTED NUMBER OF OBJECTS. */
0046.00 /* THE PROGRAM AT THIS POINT DOES NOT PROVIDE A MEANS FOR */
0047.00 /* SELECTING WHICH OBJECTS TO CHANGE. SELECTION IS BASED ON */
0048.00 /* ORDINAL POSITION IN THE DATA BASE FILE. */
0049.00 /* */
0050.00 /* G.GENERATES MESSAGES INDICATING THE NUMBER OF OWNED OBJECTS AND */
0051.00 /* THE NUMBER OF OBJECTS WHOES OWNERSHIP IS TRANSFERRED. */
0052.00 /* */
0053.00 /* H.DELETES ALL OBJECTS CREATED BY THIS PROGRAM EXCEPT */
0054.00 /* MESSAGE FILE QGPL/Q##CHGOWN. */
0055.00 /* */
0056.00 /*PROGRAM ACTIVATION */
0057.00 /* */
0058.00 /* THIS PROGRAM MAY BE ACTIVATED VIA A CALL WITH THE FOLLOWING */
0059.00 /* PARAMETERS: */
0060.00 /* */
0061.00 /* CALL QGPL/Q##CHGOWN (FROM_PRF TO_PRF NUM_TO_CHG) */
0062.00 /* */
0063.00 /* "NOTE" NUM_TO_CHG MUST NOT BE INCLOSED IN QUOTES. IF */
0064.00 /* NUM_TO_CHG IS ZERO THE PROGRAM WILL PROVIDE THE NUMBER */
0065.00 /* OBJECTS OWNED BY THE FROM_PRF WITHOUT CHANGING OBJECT */
0066.00 /* OWNERSHIP. */
0067.00 /* */
0068.00 /* THE FOLLOWING ARE INSTRUCTION FOR OBTAINING OBJECT OWNERSHIP AND */
0069.00 /* AUTHORIZATION INFORMATION FROM A USER PROFILE USING STRSST. */
0070.00 /* */
0071.00 /* A.STRSST */
0072.00 /* B.OPTION 1 - START A SERVICE FUNCTION */
0073.00 /* C.OPTION 4 - DISPLAY/ALTER/DUMP */
0074.00 /* D.OPTION 1 - DISPLAY ALTER STORAGE */
0075.00 /* E.OPTION 1 - MACHINE INTERFACE (MI) OBJECT */
0076.00 /* F.OPTION 8 - USER PROFILE (08) */
0077.00 /* G.OPTION 1 - FIND BY OBJECT NAME */
0078.00 /* H.ENTER THE NAME OF THE USER PROFILE TO BE CHANGED. */
0079.00 /* I.PRESS ENTER. THEN PRESS AGAIN TO CONTINUE. */
0080.00 /* J.THE USER PROFILE IS DISPLAYED. PAGE DOWN TO CONTROL ADDRESS */
0081.00 /* 0130. RECORD THE CONTENTS ACCORDINGLY: */
0082.00 /* */
0083.00 /* 0130 XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX */
0084.00 /* */
0085.00 /* # OWNED # AUTHORIZED # OBJECTS # FREE */
0086.00 /* OBJECTS OBJECTS OWNED WHICH ENTRIES */
0087.00 /* OTHERS HAVE */
0088.00 /* BEEN AUTHORIZED */
0089.00 /* K.SAVE THIS INFO FOR LATER, EXIT SST */
0090.00 /* */
0091.00 /* */
0092.00 /*********************************************************************/
0093.00
0094.00 QSYS/PGM PARM(&FRMUSRPRF +
0095.00 &TOOWNUSRP +
0096.00 &RVKOWNNUM)
0097.00
0098.00 DCLF FILE(QGPL/Q##CHGOWN) /*GET VARIABLE FIELD */
0099.00 /* NAMES FOR */
0100.00 /*FILE CREATED BY DSPUSRPRF */
0101.00 /* TYPE(*OBJOWN) */
0102.00
0103.00 /* */
0104.00 /********************************************************************/
0105.00 /* */
0106.00 /* DECLARE PARAMETER VARIABLES. */
0107.00 /* */
0108.00 /********************************************************************/
0109.00 DCL &FRMUSRPRF TYPE(*CHAR) LEN(10) /* REQUESTED FUNCTION */
0110.00 DCL &TOOWNUSRP TYPE(*CHAR) LEN(10) /* PROGRAM CALLED BEFORE/AFTER*/
0111.00 DCL &RVKOWNNUM TYPE(*DEC) LEN(15 5) /*NUMBER OF OBJECTS WHOSE */
0112.00 /* OWNERSHIP WILL BE CHANGED*/
0113.00 /********************************************************************/
0114.00 /* */
0115.00 /* DECLARE LOCAL WORK VARIABLES */
0116.00 /* */
0117.00 /********************************************************************/
0118.00
0119.00 DCL &USRPRFCRT TYPE(*DEC) LEN(15 5) VALUE(0)
0120.00 DCL &DBFILECRT TYPE(*DEC) LEN(15 5) VALUE(0)
0121.00 DCL &OWN#TOCHG# TYPE(*DEC) LEN(15 5) VALUE(0)
0122.00 DCL &USRPRFOWN# TYPE(*DEC) LEN(15 5) VALUE(0)
0123.00 DCL &OWN#TOCHG TYPE(*DEC) LEN(15 5) VALUE(0)
0124.00 DCL &MSGDTAAREA TYPE(*CHAR) LEN(32)
0125.00
0126.00
0127.00
0128.00 /********************************************************************/
0129.00 /* */
0130.00 /* GET NUMBER OF OBJECTS WHOSE OWNERSHIP IS TO BE CHANGED */
0131.00 /* */
0132.00 /********************************************************************/
0133.00
0134.00 CHGVAR VAR(&OWN#TOCHG) VALUE(&RVKOWNNUM)
0135.00
0136.00 /********************************************************************/
0137.00 /* */
0138.00 /* CREATE A MESSAGE FILE AND MESSAGE DESCRIPTION IN QTEMP */
0139.00 /* */
0140.00 /********************************************************************/
0141.00
0142.00 CRTMSGF MSGF(QTEMP/Q##CHGOWN)
0143.00 MONMSG MSGID(CPF0000)
0144.00
0145.00 RMVMSGD MSGID(USR3410) MSGF(QTEMP/Q##CHGOWN)
0146.00 MONMSG MSGID(CPF0000)
0147.00
0148.00 RMVMSGD MSGID(USR3420) MSGF(QTEMP/Q##CHGOWN)
0149.00 MONMSG MSGID(CPF0000)
0150.00
0151.00 ADDMSGD MSGID(USR3410) MSGF(QTEMP/Q##CHGOWN) +
0152.00 MSG('User Profile &1 contained &2 +
0153.00 objects.') FMT((*CHAR 10) (*BIN 4))
0154.00 MONMSG MSGID(CPF0000)
0155.00
0156.00 ADDMSGD MSGID(USR3420) MSGF(QTEMP/Q##CHGOWN) +
0157.00 MSG('The ownership of &5 object/s were +
0158.00 transferred from user profile &1 to user +
0159.00 profile &2.') SECLVL('The total number of +
0160.00 objectw whose ownership was to be +
0161.00 transferred was &4. The number of owned +
0162.00 objects in user profile &1 was &3. The +
0163.00 total number of object ownerships +
0164.00 transferred from user profile &1 to user +
0165.00 profile &2 was &5.') FMT((*CHAR 10) +
0166.00 (*CHAR 10) (*BIN 4) (*BIN 4) (*BIN 4))
0167.00 MONMSG MSGID(CPF0000)
0168.00
0169.00 /********************************************************************/
0170.00 /* */
0171.00 /* CREATE USER PROFILE Q##CHGOWN IF IT DOES NOT EXIST */
0172.00 /* */
0173.00 /********************************************************************/
0174.00
0175.00 CRTUSRPRF USRPRF(Q##CHGOWN) TEXT('User Profile for +
0176.00 program Q##CHGOWN')
0177.00 MONMSG MSGID(CPF0000) EXEC(CHGVAR &USRPRFCRT VALUE(&USRPRFCRT + 1))
0178.00 /*SET USER PROFILE NOT CREATED FLAG */
0179.00
0180.00 /********************************************************************/
0181.00 /* */
0182.00 /* DETERMINE IF DATA BASE FILE QTEMP/Q##CHGOWN EXIST */
0183.00 /* */
0184.00 /********************************************************************/
0185.00
0186.00 CRTPF FILE(QGPL/Q##CHGOWN) SIZE(*NOMAX)
0187.00 MONMSG MSGID(CPF0000) EXEC(CHGVAR &DBFILECRT VALUE(&DBFILECRT + 1))
0188.00 /*SET FILE DOES NOT EXIST FLAG*/
0189.00
0190.00 /********************************************************************/
0191.00 /* */
0192.00 /* GENERATE OUTFILE FOR OWNED OBJECTS AND SET SIZE TO *NOMAX */
0193.00 /* */
0194.00 /********************************************************************/
0195.00
0196.00 DSPUSRPRF USRPRF(Q##CHGOWN) TYPE(*OBJOWN) OUTPUT(*OUTFILE) +
0197.00 OUTFILE(QGPL/Q##CHGOWN)
0198.00
0199.00 CHGPF FILE(QGPL/Q##CHGOWN) SIZE(*NOMAX)
0200.00
0201.00 /********************************************************************/
0202.00 /* */
0203.00 /* POPULATE OUTFILE WITH RECORDS FOR OBJECTS OWNED BY PROFILE */
0204.00 /* */
0205.00 /********************************************************************/
0206.00
0207.00 DSPUSRPRF USRPRF(&FRMUSRPRF) TYPE(*OBJOWN) OUTPUT(*OUTFILE) +
0208.00 OUTFILE(QGPL/Q##CHGOWN)
0209.00
0210.00 /********************************************************************/
0211.00 /* */
0212.00 /* PROCESS INPUT USER PROFILE */
0213.00 /* */
0214.00 /********************************************************************/
0215.00 READOWNREC:
0216.00 CHGVAR &USRPRFOWN# VALUE(&USRPRFOWN# + 1)
0217.00 RCVF /*READ A RECORD FROM THE FILE */
0218.00 /* QGPL/USRPRFOWN */
0219.00 MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(SENDMESSAG))
0220.00 GOTO CHGPRFOWN /* CHANGE OBJECT OWNER IF REQUIRED*/
0221.00
0222.00 READNXTREC:
0223.00
0224.00 GOTO READOWNREC /* GO READ NEXT RECORD */
0225.00
0226.00
0227.00 SENDMESSAG:
0228.00
0229.00 CHGVAR %SST(&MSGDTAAREA 1 10) VALUE(&FRMUSRPRF)
0230.00 CHGVAR %BIN(&MSGDTAAREA 11 4) VALUE(&USRPRFOWN#)
0231.00
0232.00
0233.00 QSYS/SNDPGMMSG MSGID(USR3410) MSGF(QTEMP/Q##CHGOWN) +
0234.00 MSGDTA(&MSGDTAAREA) +
0235.00 MSGTYPE(*COMP)
0236.00
0237.00 CHGVAR %SST(&MSGDTAAREA 11 10) VALUE(&TOOWNUSRP)
0238.00 CHGVAR %BIN(&MSGDTAAREA 21 4) VALUE(&USRPRFOWN#)
0239.00 CHGVAR %BIN(&MSGDTAAREA 25 4) VALUE(&RVKOWNNUM)
0240.00 CHGVAR %BIN(&MSGDTAAREA 29 4) VALUE(&OWN#TOCHG#)
0241.00
0242.00 QSYS/SNDPGMMSG MSGID(USR3420) MSGF(QTEMP/Q##CHGOWN) +
0243.00 MSGDTA(&MSGDTAAREA) +
0244.00 MSGTYPE(*COMP)
0245.00
0246.00 GOTO TERMINATE
0247.00
0248.00 CHGPRFOWN:
0249.00 /********************************************************************/
0250.00 /* */
0251.00 /* CHANGE OBJECT OWNERSHIP BASED ON THE NUMBER OF OBJECTS WHOSE */
0252.00 /* OWNERSHIP IS TO BE CHANGED. SEE VARIABLE &RVKOWNNUM. */
0253.00 /* */
0254.00 /********************************************************************/
0255.00
0256.00 QSYS/IF COND(&OWN#TOCHG > 0) +
0257.00 THEN(QSYS/DO)
0258.00 CHGOBJOWN OBJ(&OOLIB/&OOOBJ) OBJTYPE(&OOTYPE) +
0259.00 NEWOWN(&TOOWNUSRP)
0260.00 CHGVAR &OWN#TOCHG VALUE(&OWN#TOCHG - 1) /* DECREMENT COUNT */
0261.00 CHGVAR &OWN#TOCHG# VALUE(&OWN#TOCHG# + 1) /* INCREMENT COUNT */
0262.00 QSYS/ENDDO /* *RSTCODE COMPLETE - EXIT */
0263.00
0264.00 GOTO READNXTREC /* RETURN TO CALLER */
0265.00
0266.00 TERMINATE:
0267.00
0268.00 /********************************************************************/
0269.00 /* */
0270.00 /* THAT"S ALL FOLKS. CLEAN UP AND RETURN TO THE ONE WHO CALLED. */
0271.00 /* */
0272.00 /********************************************************************/
0273.00
0274.00 /*DELETE USER PROFILE Q##CHGOWN IF CREATED BY THIS PROGRAM */
0275.00
0276.00 QSYS/IF COND(&USRPRFCRT > 0) +
0277.00 THEN(QSYS/DO)
0278.00 DLTUSRPRF USRPRF(Q##CHGOWN) OWNOBJOPT(*DLT)
0279.00 QSYS/ENDDO /* */
0280.00
0281.00 /*DELETE DATA BASE FILE Q##CHGOWN IF CREATED BY THIS PROGRAM */
0282.00
0283.00 QSYS/IF COND(&DBFILECRT > 0) +
0284.00 THEN(QSYS/DO)
0285.00 DLTF FILE(QGPL/Q##CHGOWN)
0286.00 QSYS/ENDDO /* */
0287.00
0288.00 ENDPGM
[{"Type":"MASTER","Line of Business":{"code":"LOB57","label":"Power"},"Business Unit":{"code":"BU058","label":"IBM Infrastructure w\/TPS"},"Product":{"code":"SWG60","label":"IBM i"},"Platform":[{"code":"PF012","label":"IBM i"}],"Version":"6.1.0"}]
Historical Number
15510711
Was this topic helpful?
Document Information
Modified date:
21 September 2020
UID
nas8N1018102