Page 1 of 1

REXX linkpgm under USS

PostPosted: Tue Jul 29, 2014 5:20 pm
by morakles
Hi,
I have problem with REXX runing under USS. The REXX is part:
Address linkpgm "EQQSTOR arg_value1parm"

and
Address linkpgm "EQQYCOM parm_list"

Under TSO everything is OK, but in USS I get an error:
IRX0250E System abend code 338, reason code 37289985.                         
IRX0255E Abend in host command EQQYCOM or address environment routine LINKPGM.
   186 *-*   Address linkpgm "EQQYCOM arg_value1parm"                               
       +++ RC(-824) +++                                                       

and:
IRX0250E System abend code A78, reason code 00000016.                         
IRX0255E Abend in host command EQQSTOR or address environment routine LINKPGM.
   140 *-*    Address linkpgm "EQQSTOR" arg_value1parm                       
       +++ RC(-2680) +++                                                     


Any necessary libraries i include in DD statements.

Re: REXX linkpgm under USS

PostPosted: Tue Jul 29, 2014 9:45 pm
by Pedro
Sorry, I do not know much USS, but you should use lookat: http://www-03.ibm.com/systems/z/os/zos/bkserv/lookat/
to search for the 338 abend. Knowing what the abend means may suggest a course of action.

Re: REXX linkpgm under USS

PostPosted: Wed Jul 30, 2014 9:35 am
by steve-myers
Pedro is correct. S338 ABENDs are most unusual, so I did the lookup for you.

Explanation: An unauthorized task attempted to use authorized options of the ENQ macro instruction during the processing of global resource serialization.

The message showed a decimal reason code, which didn't seem to make much sense. On a hunch I converted it to hexadecimal: 37289985 = 2390001. This seemed to make more sense. Going to the manual I found -

xxxx0001
An unauthorized requester attempted to ENQ an authorized resource.

This doesn't mean much to a beginner, so I will attempt to explain it.

Programmers use the ENQ Assembler macro to control a resource that can be modified by one task at a time. A resource is identified by two names: the "queue" name (or QNAME) and the "resource" name (or RNAME). For example, when you use a data set resource, say SYS1.COBLIB, you are implicitly using QNAME SYSDSN and RNAME SYS1.COBLIB. The system obtains this resource for you; your program does not have to do anything. A number of QNAMEs can only be used by authorized programs; your program appears to be one of them.

Now, I can't do any more since I don't know anything about your environment. Your program could have lost authorization for several reasons. You can figure this out and make sure your program really is authorized, or you can update your program so it does not attempt to use a restricted QNAME. I can't tell you any more.

Good luck.

Re: REXX linkpgm under USS

PostPosted: Wed Jul 30, 2014 9:28 pm
by Pedro
Under TSO everything is OK, but in USS I get an error:

Because it works in TSO and not in USS, I suspect that something in USS makes it a 'dirty' environment. The system considers it risky to call an authorized program from there, so it loses its authorization for that instance. Instead of using LINKPGM, I recommend that you use ATTCHPGM instead.

The program will be called differently. The use of ATTACH creates a separate TCB just for EQQYCOM, and this new TCB should be 'clean' and allow the APF authorization to be allowed.

I had to google for EQQYCOM... it is part of Tivoli Workload Scheduler. This cannot be the first time someone tried to call it from USS... how has it worked for others? Perhaps ask your question in a Tivoli forum.