Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1298748
  • 博文数量: 287
  • 博客积分: 11000
  • 博客等级: 上将
  • 技术积分: 3833
  • 用 户 组: 普通用户
  • 注册时间: 2007-08-16 08:43
文章分类
文章存档

2013年(15)

2012年(17)

2011年(17)

2010年(135)

2009年(85)

2008年(18)

分类: 系统运维

2010-06-04 16:13:10

List users authorized to object ** ** Program . . : CBX5031 ** Description : Check private authority ** Author . . : Carsten Flensburg ** Published . : Club Tech iSeries Programming Tips Newsletter ** Date . . . : April 15, 2004 ** ** ** Program summary ** --------------- ** ** Parameters: ** INPUT PxObjNam Object name, the object for which to ** check the specified authorization level. ** ** INPUT PxObjLib Object library. ** ** INPUT PxObjTyp Object type. ** ** INPUT PxAut Authorization level to check for. ** ** Valid values: ** *ALL ** *CHANGE ** *USE ** *EXCLUDE ** *AUTLMGT ** ** INPUT PxUsrPrf Name of user profile having it's ** authority checked. ** ** Special values: ** *CURRENT The user currently running ** the job. ** ** *PUBLIC The public authority for ** the specified object is ** checked. ** ** OUTPUT PxRtnCod A boolean value indicating the result ** of the requested action. ** ** Valid return codes: ** 0 = Authority level not found ** 1 = Authority level found ** ** Security API: ** QSYLUSRA List users authorized Creates a list of users having a ** to object private authority to the object ** specified. The list is put into ** a user space. ** ** Object - User space APIs: ** QUSCRTUS Create user space Creates a user space in either ** user domain or system domain. ** Only user domain user spaces are ** accessible by the user space APIs. ** ** QUSDLTUS Delete user space Deletes the user space specified. ** ** QUSPTRUS Retrieve pointer to The address of the first byte ** user space of the storage allocated by the ** user space requested is returned. ** ** ** Programmer's notes: ** This program checks if a user holds a private authorization of ** the specified level to an object. No other authorization sources ** are taken into account during the authorization check. ** ** ** Compile options: ** ** CrtRpgMod Module( CBX5031 ) DbgView( *LIST ) ** ** CrtPgm Pgm( CBX5031 ) ** Module( CBX5031 ) ** ** ** **-- Header specifications: --------------------------------------------** H Option( *SrcStmt ) **-- System information: -----------------------------------------------** D PgmSts SDs D PsJobUsr 10a Overlay( PgmSts: 254 ) D PsCurUsr 10a Overlay( PgmSts: 358 ) **-- Global variables: -------------------------------------------------** D Idx s 10i 0 **-- API error data structure: -----------------------------------------** D ApiError Ds D AeBytPro 10i 0 Inz( %Size( ApiError )) D AeBytAvl 10i 0 Inz **-- Create User Space Parameter: --------------------------------------** D CuUsrSpcQ Ds D CuUsrSpcNam 10 Inz( 'AUTLST ' ) D CuUsrSpcLib 10 Inz( 'QTEMP ' ) **-- Entry format USRA0100: --------------------------------------------** D USRA0100 Ds Based( pLstEnt ) D U1UsrPrf 10a D U1AutVal 10a D U1AutLstMgt 1a D U1ObjOpr 1a D U1ObjMgt 1a D U1ObjExs 1a D U1DtaRead 1a D U1DtaAdd 1a D U1DtaUpd 1a D U1DtaDlt 1a D U1DtaExe 1a D 10a D U1ObjAlt 1a D U1ObjRef 1a **-- API format USRA0100: Header information: --------------------------** D HdrInf Ds Based( pHdrInf ) D HiObjNam 10a D HiLibNam 10a D HiObjTyp 10a D HiOwnNam 10a D HiAutL 10a D HiPriGrp 10a D HiFldAut 1a D HiAspDevLib 10a D HiAspDevObj 10a **-- User Space Generic Header: ---------- -----------------------------** D UsrSpc Ds Based( pUsrSpc ) D UsOfsHdr 10i 0 Overlay( UsrSpc: 117 ) D UsOfsLst 10i 0 Overlay( UsrSpc: 125 ) D UsNumLstEnt 10i 0 Overlay( UsrSpc: 133 ) D UsSizLstEnt 10i 0 Overlay( UsrSpc: 137 ) **-- Pointers: ---------------------------------------------------------** D pUsrSpc s * Inz( *Null ) D pHdrInf s * Inz( *Null ) D pLstEnt s * Inz( *Null ) **-- List authorized users: --------------------------------------------** D LstAutUsr Pr ExtPgm( 'QSYLUSRA' ) D LaSpcNamQ 20a Const D LaFmtNam 8a Const D LaObjNamQ 20a Const D LaObjTyp 10a Const D LaError 32767a Options( *VarSize ) D LaAspDev 10a Options( *NoPass ) **-- Create user space: -------------------------------------------------** D CrtUsrSpc Pr ExtPgm( 'QUSCRTUS' ) D CsSpcNamQ 20a Const D C***tAtr 10a Const D CsInzSiz 10i 0 Const D CsInzVal 1a Const D CsPubAut 10a Const D CsText 50a Const ** D CsReplace 10a Const Options( *NoPass ) D CsError 32767a Options( *NoPass: *VarSize ) ** D CsDomain 10a Const Options( *NoPass ) ** D CsTfrSizRqs 10i 0 Const Options( *NoPass ) D CsOptSpcAlg 1a Const Options( *NoPass ) **-- Retrieve pointer to user space: ------------------------------------** D RtvPtrSpc Pr ExtPgm( 'QUSPTRUS' ) D RpSpcNamQ 20a Const D RpPointer * D RpError 32767a Options( *NoPass: *VarSize ) **-- Delete user space: -------------------------------------------------** D DltUsrSpc Pr ExtPgm( 'QUSDLTUS' ) D DsSpcNamQ 20a Const D DsError 32767a Options( *VarSize ) **-- Parameters: -------------------------------------------------------** D PxObjNam s 10a D PxObjLib s 10a D PxObjTyp s 10a D PxUsrPrf s 10a D PxAut s 10a D PxRtnCod s n ** C *Entry Plist C Parm PxObjNam C Parm PxObjLib C Parm PxObjTyp C Parm PxUsrPrf C Parm PxAut C Parm PxRtnCod ** **-- Mainline: ---------------------------------------------------------** ** C Eval PxRtnCod = *Off ** C If PxUsrPrf = '*CURRENT' C Eval PxUsrPrf = PsCurUsr C EndIf ** C CallP CrtUsrSpc( CuUsrSpcQ C : *Blanks C : 65535 C : x'00' C : '*CHANGE' C : *Blanks C : '*YES' C : ApiError C ) ** C CallP LstAutUsr( CuUsrSpcQ C : 'USRA0100' C : PxObjNam + PxObjLib C : PxObjTyp C : ApiError C ) ** C If AeBytAvl = *Zero ** C CallP RtvPtrSpc( CuUsrSpcQ C : pUsrSpc C ) ** C ExSr ChkUsrAut C EndIf ** C CallP DltUsrSpc( CuUsrSpcQ C : ApiError C ) ** C Return ** **-- Check user authority: ---------------------------------------------** C ChkUsrAut BegSr ** C Eval pHdrInf = pUsrSpc + UsOfsHdr C Eval pLstEnt = pUsrSpc + UsOfsLst ** C For Idx = 1 to UsNumLstEnt ** C If U1UsrPrf = PxUsrPrf C ExSr ChkAutVal ** C Leave C EndIf ** C If Idx < UsNumLstEnt C Eval pLstEnt = pLstEnt + UsSizLstEnt C EndIf C EndFor ** C EndSr **-- Check authority value: --------------------------------------------** C ChkAutVal BegSr ** C Select C When PxAut = '*ALL ' And C U1AutVal = '*ALL ' ** C Eval PxRtnCod = *On ** C When PxAut = '*CHANGE ' And C U1ObjOpr = 'Y' And C U1DtaRead = 'Y' And C U1DtaAdd = 'Y' And C U1DtaUpd = 'Y' And C U1DtaDlt = 'Y' And C U1DtaExe = 'Y' ** C Eval PxRtnCod = *On ** C When PxAut = '*USE ' And C U1ObjOpr = 'Y' And C U1DtaRead = 'Y' And C U1DtaExe = 'Y' ** C Eval PxRtnCod = *On ** C When PxAut = '*AUTLMGT ' And C U1AutLstMgt = 'Y' ** C Eval PxRtnCod = *On ** C When PxAut = '*EXCLUDE ' And C U1AutVal = '*EXCLUDE ' ** C Eval PxRtnCod = *On C EndSl ** C EndSr

The calling program **-- Program parameters: -----------------------------------------------** D PxObjNam s 10a D PxObjLib s 10a D PxObjTyp s 10a D PxUsrPrf s 10a D PxAut s 10a D PxRtnCod s n ** **-- Check private authority: ** C Call 'CBX5031' C Parm 'QPWFSERVER' PxObjNam C Parm 'QSYS' PxObjLib C Parm '*AUTL' PxObjTyp C Parm 'QSYS' PxUsrPrf C Parm '*ALL' PxAut C Parm PxRtnCod ** C If PxRtnCod = '1' C Else C EndIf Thanks to Carsten Flensburg

阅读(812) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~