(LOGO.JPG) Python for OpenVMS

(go to: table of contents, index, list of vms_sys, prev: SETPRN, next: SETSWM)


SETPRV - Set Privilege


Enables or disables specified privileges for the calling process.

Format:

    prvprv = vms_sys.setprv ([enbflg] [,prvadr] [,prmflg])
Returns:
prvprv
Previous privilege mask - 64-bit bitmask - a Python long integer. Privilege bitmask values are stored in module vms_prvdef. Usage of the privilege bitmasks is explained in GENMAN 'programming, processes, privileges'.
Arguments:
enbflg
Enable (1) oder disable (0) privileges specified in the mask of the 'prvadr' argument. Default (if None specified) is disable.
prvadr
Privileges to be enabled or disabled - 64-bit bitmask - a Python long integer. Privilege bitmask values are stored in module vms_prvdef. Usage of the privilege bitmasks is explained in GENMAN 'programming, processes, privileges'.
prmflg
Indicator specifying whether the privileges are to be affected permanently (1) or temporarily (0). Temporarily means that the setting stays until the next image rundown. Default (if None specified) is temporarily.
Examples:
$ SHOW PROCESS /PRIVILEGES

27-NOV-1998 20:48:21.80  User: ZESSIN  Process ID:   00000156
                         Node: HERE    Process name: "ZESSIN_FTA14"

Authorized privileges:
 NETMBX    OPER      SETPRV    SYSPRV    TMPMBX

Process privileges:
 NETMBX               may create network device
 OPER                 may perform operator functions
 SETPRV               may set any privilege bit
 SYSPRV               may access objects via system protection
 TMPMBX               may create temporary mailbox

Process rights:
 INTERACTIVE
 LOCAL
 NEWS_MANAGER

System rights:
 SYS$NODE_HERE
$

$ python
>>> import vms_lib
>>> import vms_prvdef
>>> import vms_sys

>>> vms_lib.getjpi ('JPI$_CURPRIV', 0)
(342, 269795328L)

>>> q_newprv = vms_prvdef.PRV_M_BYPASS
>>> q_oldprv = vms_sys.setprv (1,q_newprv)
>>> q_oldprv
(1, 269795328L)
>>> hex (q_oldprv[1])
'0x1014C000L'
>>>
>>> vms_lib.getjpi ('JPI$_CURPRIV', 0)
(342, 806666240L)
>>>

>>> # the READALL privilege bit is in the second longword
>>> q_newprv = vms_prvdef.PRV_M_READALL
>>> print hex (q_newprv)
0x800000000L
>>> q_oldprv = vms_sys.setprv (1,q_newprv,1)
>>> q_oldprv , hex (q_oldprv[1]) # prmflg ^ specified
((1, 269795328L), '0x1014C000L')
>>>

$! from another process
$ SHOW PROCESS /PRIVILEGES /IDENTIFICATION=00000156

27-NOV-1998 20:53:13.99  User: ZESSIN  Process ID:   00000156
                         Node: HERE    Process name: "ZESSIN_FTA14"

Authorized privileges:
 NETMBX    OPER      SETPRV    SYSPRV    TMPMBX

Process privileges:
 NETMBX               may create network device
 OPER                 may perform operator functions
 READALL              may read anything as the owner
 SETPRV               may set any privilege bit
 SYSPRV               may access objects via system protection
 TMPMBX               may create temporary mailbox
[...]
$


>>> q_newprv = vms_prvdef.PRV_M_SYSLCK
>>> q_oldprv = vms_sys.setprv (0,q_newprv,1)
>>> q_oldprv , hex (q_oldprv[1])
((1, 34629533696L), '0x81014C000L')
>>>

>>> vms_lib.do_command ('show process/privileges')

27-NOV-1998 20:55:27.46  User: ZESSIN  Process ID:   00000156
                         Node: HERE    Process name: "ZESSIN_FTA14"

Authorized privileges:
 NETMBX    OPER      SETPRV    SYSPRV    TMPMBX

Process privileges:
 NETMBX               may create network device
 OPER                 may perform operator functions
 READALL              may read anything as the owner
 SETPRV               may set any privilege bit
 SYSPRV               may access objects via system protection
 TMPMBX               may create temporary mailbox
[...]
$

- READALL privilege is still enabled after Python has ended

--------------------

$ SHOW PROCESS /PRIVILEGES

28-NOV-1998 19:07:59.78  User: NOPRIV  Process ID:   0000015B
                         Node: HERE    Process name: "NOPRIV"

Authorized privileges:
 NETMBX    READALL   TMPMBX

Process privileges:
 READALL              may read anything as the owner
 TMPMBX               may create temporary mailbox
[...]
$


$ python

>>> import vms_lib
>>> import vms_prvdef
>>> import vms_sys

>>> pid, q_priv = vms_lib.getjpi ('JPI$_CURPRIV', 0)
>>> q_priv, hex(q_priv)
(34359771136L, '0x800008000L')
>>>

>>> q_newprv = vms_prvdef.PRV_M_NETMBX
>>> status, q_oldprv = vms_sys.setprv (1,q_newprv)
>>> status, q_oldprv
(1, 34359771136L)
>>> 
>>> pid, q_priv = vms_lib.getjpi ('JPI$_CURPRIV', 0)
>>> q_priv, hex(q_priv)
(34360819712L, '0x800108000L')
>>>

>>> # BYPASS is not an authorized privilege
>>> q_newprv = vms_prvdef.PRV_M_BYPASS
>>> status, q_oldprv = vms_sys.setprv (1,q_newprv)
>>> status, q_oldprv
>>> vms_sys.getmsg (status)
('%SYSTEM-S-NOTALLPRIV, not all requested privileges authorized',\
 (0, 0, 0, 0))
>>>

--------------------

>>> vms_sys.setprv ('X')
Traceback (innermost last):
  File "<stdin>", line 1, in ?
TypeError: argument 1: enbflg - must be integer or None
>>>

>>> vms_sys.setprv (1,'X')
Traceback (innermost last):
  File "<stdin>", line 1, in ?
TypeError: argument 2: prvadr - must be long integer or None
>>>

>>> vms_sys.setprv (1,0L,'X')
Traceback (innermost last):
  File "<stdin>", line 1, in ?
TypeError: argument 3: prmflg - must be integer or None
>>>

(go to: table of contents, index, list of vms_sys, prev: SETPRN, next: SETSWM)

14-FEB-1999 ZE.