Prueba este truco extraido de iSeriesNetwork

********** Club Tech iSeries Systems Management Newsletter *********
An iSeries Network Publication         http://www.iSeriesNetwork.com
Home of iSeries NEWS Magazine
Issue 65                                           December 11, 2002

Featured Tip:

LIMITING INTERACTIVE SESSIONS FOR A USER
Limiting interactive sessions was addressed in a previous Club Tech 
tip, which you can read online at 
http://www.iseriesnetwork.com/Article.cfm?ID=11927 . Essentially, you 
can control whether a user can have only one interactive session or an 
unlimited number of sessions. To limit the number of interactive 
sessions for a user to any given number, Herman Van der Staey posted 
CL program LMTACTUSR, which is run as the initial program for the user 
profile. You can obtain the source code by searching for "LMTACTUSR" 
at the iSeries Network CL Forum at 
http://www.iseriesnetwork.com/Forums/main.cfm?CFApp=55 .

********************************************************************

Date: December 09, 2002 06:51 AM
Author: Herman ([EMAIL PROTECTED])
Subject: How to restrict the number of interactive sessions for a user ?

How to restrict the number of interactive sessions for a user ?

System value QLMTDEVSSN controls whether a user can have more than one work
station
signon, but there is no limit to the number of sessions
when the value is '0'.

If you want to prevent that a user can have too many interactive
sessions, you can use the following program.

Call this program from the initial program in the userprofile.
If the userprofile is 5 times active, a message is sent and
the user is forced to signoff.


  /*  Program : LMTACTUSR                                           */
  /*  System  : iSeries                                             */
  /*  Author :  Herman Van der Staey                                */
  /*                                                                */
  /*  Limit a user to 5 active interactive sessions                 */
  /*  and send a message to the user before forcing SIGN OFF.       */
  /*  Call this program in the initial program of the userprofile.  */

 CHKACTUSR5: PGM

             DCL        VAR(&CUR_USER) TYPE(*CHAR) LEN(10) /* +
                          current user     */

             DCL        VAR(&TOTAL) TYPE(*DEC) LEN(5 0) VALUE(0)

  /* API data from format  JOBL0100    */

             DCL        VAR(&JOBNAME) TYPE(*CHAR) LEN(10)
             DCL        VAR(&USER   ) TYPE(*CHAR) LEN(10)
             DCL        VAR(&JOBNBR ) TYPE(*CHAR) LEN(6)
             DCL        VAR(&STATUS)  TYPE(*CHAR) LEN(10)
             DCL        VAR(&JOBTYPE) TYPE(*CHAR) LEN(1)
             DCL        VAR(&SUBTYPE) TYPE(*CHAR) LEN(1)

  /*  Parameters for the QUSCRTUS  API    */


             DCL        VAR(&USP_NAME) TYPE(*CHAR) LEN(10) /* user +
                          space name */
             DCL        VAR(&USP_LIB) TYPE(*CHAR) LEN(10) /* user +
                          space library */
             DCL        VAR(&USP_QUAL) TYPE(*CHAR) LEN(20) /* user +
                          space qualified name */
             DCL        VAR(&USP_TYPE) TYPE(*CHAR) LEN(10) /* user +
                          space type */
             DCL        VAR(&USP_SIZE) TYPE(*CHAR) LEN(4) /* user +
                          space size */
             DCL        VAR(&USP_FILL) TYPE(*CHAR) LEN(1) /* user +
                          space fill character */
             DCL        VAR(&USP_AUT) TYPE(*CHAR) LEN(10) /* user +
                          space authority */
             DCL        VAR(&USP_TEXT) TYPE(*CHAR) LEN(50) /* user +
                          space text */

  /*  Parameters for the QUSRTVUS  API    */

             DCL        VAR(&STARTPOS) TYPE(*CHAR) LEN(4)
             DCL        VAR(&DATALEN ) TYPE(*CHAR) LEN(4)
             DCL        VAR(&HEADER) TYPE(*CHAR) LEN(150)


  /*  Parameters for the QUSLJOB   API    */

             DCL        VAR(&API_USQUAL) TYPE(*CHAR) LEN(20) /* +
                          Qualified User Space name  */
             DCL        VAR(&API_JBQUAL) TYPE(*CHAR) LEN(26) /* +
                          qualified jobname */
             DCL        VAR(&API_JBNAM) TYPE(*CHAR) LEN(10) /* +
                          jobname */
             DCL        VAR(&API_USER) TYPE(*CHAR) LEN(10) /* user */
             DCL        VAR(&API_JOBNR) TYPE(*CHAR) LEN(6) /* job +
                          number */
             DCL        VAR(&API_ERROR) TYPE(*CHAR) LEN(4) /* API +
                          error */
             DCL        VAR(&API_STATUS) TYPE(*CHAR) LEN(10) /* +
                          Status  */


  /*  List Data Section                   */

             DCL        VAR(&LST_OFFSET) TYPE(*DEC) LEN(5 0) /* +
                          offset of first data */
             DCL        VAR(&LST_SIZE) TYPE(*DEC) LEN(5 0) /* size +
                          of data */
             DCL        VAR(&LST_DATA) TYPE(*CHAR) LEN(4096)

             DCL        VAR(&LST_NBR) TYPE(*DEC) LEN(5 0) /* number +
                          of entries in list data section */
             DCL        VAR(&LST_LEN) TYPE(*DEC) LEN(5 0) /* entry +
                          length in dec */
             DCL        VAR(&LST_LENBIN) TYPE(*CHAR) LEN(4) /* entry +
                          length in binary */
             DCL        VAR(&LST_POSBIN) TYPE(*CHAR) LEN(4) /* +
                          position of list entry in binary */
             DCL        VAR(&LST_COUNT) TYPE(*DEC) LEN(5) VALUE(0) /* +
                          counter */

             RTVJOBA    USER(&CUR_USER)

 /*  Create user space        */

             CHGVAR     VAR(&USP_NAME) VALUE('LMTACTUSR') /* set +
                          user space name */
             CHGVAR     VAR(&USP_LIB) VALUE('QTEMP') /* set user +
                          space library */
             CHGVAR     VAR(&USP_QUAL) VALUE(&USP_NAME *CAT +
                          &USP_LIB) /* set user space qualified name */
             CHGVAR     VAR(&USP_TYPE) VALUE('MYTYPE') /* set user +
                          space type */
             CHGVAR     VAR(%BIN(&USP_SIZE)) VALUE(64000) /* set +
                          user space size */
             CHGVAR     VAR(&USP_FILL) VALUE(' ') /* set user space +
                          fill character */
             CHGVAR     VAR(&USP_AUT) VALUE('*USE') /* set user +
                          space authority */
             CHGVAR     VAR(&USP_TEXT) VALUE('my user space') +
                          /* set user space text */

             CALL       PGM(QUSCRTUS) PARM(&USP_QUAL &USP_TYPE +
                          &USP_SIZE &USP_FILL &USP_AUT &USP_TEXT)


 /*  Execute  API      */

             CHGVAR     VAR(&API_USQUAL) VALUE(&USP_QUAL) /* User +
                          Space name */
             CHGVAR     VAR(&API_JBNAM) VALUE('*ALL') /* jobname */
             CHGVAR     VAR(&API_USER) VALUE(&CUR_USER) /* user */
             CHGVAR     VAR(&API_JOBNR) VALUE('*ALL') /* job number */
             CHGVAR     VAR(&API_STATUS) VALUE('*ACTIVE') /* Status +
                          of the job */
             CHGVAR     VAR(&API_JBQUAL) VALUE(&API_JBNAM *CAT +
                          &API_USER *CAT &API_JOBNR) /* qualified +
                          job name */
             CHGVAR     VAR(%BIN(&API_ERROR)) VALUE(0)


             CALL       PGM(QUSLJOB) PARM(&API_USQUAL 'JOBL0100' +
                          &API_JBQUAL &API_STATUS &API_ERROR)


 /*  Retrieve  Header Description information   */

             CHGVAR     VAR(%BIN(&STARTPOS)) VALUE(1) /* set start +
                          position */
             CHGVAR     VAR(%BIN(&DATALEN)) VALUE(140) /* set data +
                          length    */

             CALL       PGM(QUSRTVUS) PARM(&API_USQUAL &STARTPOS +
                          &DATALEN &HEADER)

 /* Retrieve data in list section               */

             CHGVAR     VAR(&LST_OFFSET) VALUE(%BIN(&HEADER 125 4))
             CHGVAR     VAR(&LST_SIZE) VALUE(%BIN(&HEADER 129 4))
             CHGVAR     VAR(&LST_NBR) VALUE(%BIN(&HEADER 133 4))
             CHGVAR     VAR(&LST_LEN) VALUE(%BIN(&HEADER 137 4))

             CHGVAR     VAR(%BIN(&LST_POSBIN)) VALUE(&LST_OFFSET + 1)
             CHGVAR     VAR(&LST_LENBIN) VALUE(%SST(&HEADER 137 4))


  /*  Retrieve List Data entries       */

             CHGVAR     VAR(&LST_COUNT) VALUE(0) /* initialize +
                          number of list entries counter */

 LST_LOOP:   IF         COND(&LST_COUNT *EQ &LST_NBR) THEN(GOTO +
                          CMDLBL(LST_END))

             CALL       PGM(QUSRTVUS) PARM(&API_USQUAL &LST_POSBIN +
                          &LST_LENBIN &LST_DATA)

             CHGVAR     VAR(&JOBNAME)  VALUE(%SST(&LST_DATA 1 10))
             CHGVAR     VAR(&USER)     VALUE(%SST(&LST_DATA 11 10))
             CHGVAR     VAR(&JOBNBR)   VALUE(%SST(&LST_DATA 21 6))
             CHGVAR     VAR(&STATUS)   VALUE(%SST(&LST_DATA 43 10))
             CHGVAR     VAR(&JOBTYPE)  VALUE(%SST(&LST_DATA 53 1))
             CHGVAR     VAR(&SUBTYPE)  VALUE(%SST(&LST_DATA 54 1))

   /*  Treatment of 1 list entry      */

             IF         COND((&USER *EQ &CUR_USER) *AND (&STATUS *EQ +
                          *ACTIVE *AND &JOBTYPE *EQ 'I')) THEN(DO)

             CHGVAR     VAR(&TOTAL) VALUE(&TOTAL + 1)
             ENDDO

   /*   End treatment of 1 list entry     */

             CHGVAR     VAR(&LST_COUNT) VALUE(&LST_COUNT + 1)
             CHGVAR     VAR(%BIN(&LST_POSBIN)) +
                          VALUE(%BIN(&LST_POSBIN) + &LST_LEN)
             GOTO       CMDLBL(LST_LOOP)

 LST_END:    DLTUSRSPC  USRSPC(&USP_LIB/&USP_NAME)


 /*  Enter here the commands you want to execute when a user   */
 /*  has already 5 active interactive sessions :               */

             IF         COND(&TOTAL *GT 5) THEN(DO)

             SNDUSRMSG  MSG('You are already 5 times active') +
                          MSGTYPE(*INFO)
             /*  PERFORM SIGNOFF  */
             SIGNOFF

             ENDDO

 END:        ENDPGM

        Un saludo,

Javier Mora Garc�a      mailto:[EMAIL PROTECTED]
Dialsur S.A.            http://www.dialsur.es
Departamento de Inform�tica



> -----Mensaje original-----
> De:   Manolo Folch [SMTP:[EMAIL PROTECTED]]
> Enviado el:   mi�rcoles, 19 de febrero de 2003 16:54
> Para: [EMAIL PROTECTED]
> Asunto:       Sesiones Client Access.
> 
> 
> Hola a todos. �Alguien sabe si se pueden limitar las sesiones de client
> access en un equipo?. Tengo que estar controlando a los usuarios para que
> no
> se abran m�s de dos sesiones. Hay quien se abre tres y cuatro sesiones.
> 
> Gracias.
> 
> ---------------------------------------------------------
> Manuel Folch
> [EMAIL PROTECTED]
> Permarin S.A.
> Tel. 961 36 80 03 ext. 216
> 
> 
> _____________________________________________________
> Forum.HELP400 es un servicio m�s de NEWS/400.
> � Publicaciones Help400, S.L. - Todos los derechos reservados
> http://www.help400.es
> _____________________________________________________
> 
> Para darte de baja, env�a el mensaje resultante de pulsar
> mailto:[EMAIL PROTECTED]?body=LEAVE

_____________________________________________________
Forum.HELP400 es un servicio m�s de NEWS/400.
� Publicaciones Help400, S.L. - Todos los derechos reservados
http://www.help400.es
_____________________________________________________

Para darte de baja, env�a el mensaje resultante de pulsar
mailto:[EMAIL PROTECTED]?body=LEAVE

Responder a