Composants & Tools
Nom du tools LOGIN / SB.LOGIN / IN.AUTO.LOGIN
Statut :W:

Rédacteur(s)

  • Manu Fernandes 03/07/2015 08:35 CREATE
  • Manu Fernandes 12/08/2015 09:32 update pour ajouter la notion de VOC 'SB.START.A.JSH' et le lanceur GP.JSH.START

Gestion du LOGIN / SB.LOGIN selon le contexte de l'utilisateur.

Details

Est-ce que la proc LOGIN est exécutée

is phantom ?is PROC LOGIN executed ? Login from …
loginlogto0logto1phantom
client .net, ole (SBXA)uvcs ; is.phantomVraiFauxVraiVraiVrai
client telnet sur uvux/dev/…Faux
client telnet sur uvwintelnetFauxVraiVraiVraiVrai
natif sur serveur win (from cmd.exe)consoleFaux
natif sur serveur uvux (from console)consoleFaux
start PHANTOM from a Uvsessionphantom Vrai
start PHANTOM MM from UvSession
start PHANTOM from a phantom/wi
start PHANTOM MM from a phantom/wi
start uv from crontab
start uv from winTaskMngr

Doit-on lancer SB.LOGIN

run SB.LOGINloginlogto0logto1
client .net, ole (SBXA)uvcs ; is.phantom FAUX, SBXA fait le nécessaire ; la PROC LOGIN n'est pas exécutéeVraiVrai
client telnet sur uvux/dev/… VraiVraiVrai
client telnet sur uvwintelnet VraiVraiVrai
natif sur serveur win (from cmd.exe)console
natif sur serveur uvux (from console)console
start PHANTOM from a Uvsessionphantom
start PHANTOM MM from UvSessionphantom VraiVraiVrai
start PHANTOM from a phantom/wiphantom
start PHANTOM MM from a phantom/wiphantom VraiVraiVrai
start uv from crontab
start uv from winTaskMngr

contexte

SBXA RichClient & LOGTO

on est un client SBXA ; qui effectue un LOGTO ; il faut lancer SB.LOGIN sans DATA du sbu,sbp car SB.OGIN va recevoir les credentials de la session initiatrice du phantom/PD.J.

la PROC LOGIN est (pas de ACNT proc ; ni de @LOGNAME proc en VOC)

 0001 PQ
 0002 C SB.LOGIN
 0003 HIN.AUTO.LOGIN 
 0004 P

tel que

  • @TTY = uvcs
  • ASSIGNED(SB.CONT) = @TRUE
INCLUDE DKSKELCODE COMMON 
SBSWITCH = 0 
OPEN 'DMCONT' TO F.DMCONT THEN
    READ SBSWITCH FROM F.DMCONT,'$ACC.SWITCH':@USERNO ELSE SBSWITCH = 0
END 
IF ASSIGNED(SB.CONT) AND SBSWITCH THEN CHAIN 'SB.LOGIN' 

IS.PHANTOM from SB PD.J/JSH

on est un tty phantom lancé depuis un pd.j/jsh

rien dans la mémoire ne permet de déterminer que l'on est un phantom lancé par un processus de type SB/JSH.

Dès lors, il faut trouver une astuce :

  1. on teste la valeur de PORT.STATUS (le lanceur et dans l'état : 4648 INTEGRIX\zf 0x00001228 PHANTOM MM J:J.DT….
  2. soit plus radicalement, le lanceur a utilisé GP.JSH.START qui a placé volontairement un record VOC SB.START.A.JSH ; que le “lancé” va s'empresser d'effacer pour éviter les erreurs d'interprétation par un autre phantom.

dès lors, IN.AUTO.LOGIN peut tester tel que :

  IF @TTY = "phantom" THEN
    ' existe il une ligne qui a lancer PHANTOM comme commande active ?
    ' lancée via GP.JSH.START
    READ IS.SB.START.A.JSH FROM F.VOC,'SB.START.A.JSH' THEN 
       CHAIN 'SB.LOGIN'
    END ELSE   
       ' lancée via J:... OU PD.J 
       EXECUTE 'PORT.STATUS INTERNAL' CAPTURING PORTSTATUS
       IF INDEX(PORTSTATUS,'PHANTOM MM J:',1) THEN CHAIN 'SB.LOGIN'
    END
  END

Lancement d'un JSH

GP.JSH.START
WRITE @PORT ON 'MD','SB.START.A.JSH'
IF IS.D3 THEN                                                              
  EXEC "J:":JOB.KEY:",":OCONV(@DATE,'D4/'):",":OCONV(@TIME+60,'MTS'):",Y"  
END ELSE                                                                   
  EXEC "J:":JOB.KEY:",,,Y"                                                 
END                                                                        
DELETE 'MD','SB.START.A.JSH'

JSH uv11.3 et sb55

pour les JSH SB55 sous uv11.3

  • en version 11.3- le @USERNO d'une session phantom est le PID en négatif
  • en version 11.3… uv charge @USERNO avec la position du pid dans la table LCT et ce aussi pour les phantoms; en valeur négative !

:!: C.F. uv11.3 readme UNV-17658 :!:

Hors, SB+ 55 dans sa séquence de lancement d'un job PHANTOM, reçoit le pid dans l'echo de la commande PHANTOM

Phantom process started with process ID 8244. et le lanceur attend que ce 'pid' se manifeste via la DMSECURITY $PASS-8244

:!: SB+ utilise OCONV(0,'U50BB') pour déterminer la valeur de sb@PORT

or compte tenu de la modif ci-dessus, il reçoit non pas le pid mais le @USERNO ($PASS-12 par exemple)

→ adapter la subr 50BB pour qu'elle renvoie le (-)PID si @userno est négatif.

  • Intégré au standard avec la subr INBASIC.UV IN.50BB.SBOK
  • à cataloguer via CATALOGI INBASIC.UV $50BB IN.50BB.SBOK (accepter le overwriting)

JSH uv11.3+ et sb6.5+

sur une plateforme uv 11.3+ et sb 6.5+,

  • la session parente reçoit le PID au lancement du phantom
  • la session fantôme reçoit le USERNO
  • l'une résoud le numéro de l'autre et cela fonctionne.

LOGIN SBXA

Stack login SBXA ; qui ne passe pas par la PROC LOGIN

     4644  INTEGRIX\zf      0x00001224       SELECT INPPP WITH @ID = "ACTION.]" 
[ SB.SROC.MAIN @ 0x28E8 ]                                                       
                                                                                
Layer type.......  Program name....................  Address...                 
BASIC run machine  SB.SROC.MAIN                      0x000028E8                 
BASIC run machine  SB.ROC                            0x0000009E                 
BASIC run machine  SB.MENU.GUI                       0x00000B52                 
BASIC run machine  SB.MENU.S                         0x00001986                 
BASIC run machine  SB.MENU.SELECT                    0x000014E8                 
BASIC run machine  MM                                0x00000B80                 
Verb                                                                            
Command Language                                                                

in.auto.login

       *-----------------------------*-----------------------------
       * Procedure de login automatique pour UV/UD/D3
       *
       * ??/??/??   - ?? : Creation
       * 22/04/2011 - CM : Ajout flag IS.PHANTOM
       * 12/02/2013 - CM : Fusion des versions + ajout GET.ENV
       * 28/04/2014 - EFV : cas des sBr5 pas de Windows.Id ; tente de lire SBU en UV.LOGINS<5> "NOM SBU=xxxx" : efv 28/04/2014
       * 03/07/2015 - EFV : cas du login en tant que tty=uvcs et venant d'un logto sb+ .... il faut sb.login
       * 03/07/2015 - EFV : cas du login en tant que tty=phantom lancé par un sb j:jsh .... il faut sb.login
       * 12/08/2015 - EFV : by pass le PORT.STATUS trop lent selon le contexte runtime uv ; passe par un VOC 'SB.START.A.JSH'
       *-----------------------------*-----------------------------
       
       INCLUDE DMSKELCODE COMMON
       
       $OPTIONS PICK
       
       * semble pas un compte "normal"
       OPEN 'VOC' TO F.VOC ELSE STOP
       OPEN 'F.TRACE' TO F.TRACE ELSE STOP
       K.TRACE = @USERNO:':':@DATE:':':@TIME
       BUG = 0
       
       *-----------------------------*-----------------------------
       * On pourrait tester @TTY, mais trop specifique UV
       
       IF SYSTEM(1001) # "0" THEN
       * UV, C'est en 25
          IS.PHANTOM = (SYSTEM(25) = 1)
       END ELSE
          IF SYSTEM(513) # 0 THEN
       * UNIDATA
             IS.PHANTOM = (SYSTEM(48) # "")
          END ELSE
       * D3 en 24
             IS.PHANTOM = (SYSTEM(24) = 1)
          END
       END
       
       *-----------------------------*-----------------------------
       * TEST SB.REMOTE
       *
       CAPT = ''
       CALL IN.OS.GET.ENV("SBREMOTE",CAPT)
       IF TRIM(CAPT<1>) # '' THEN
          CAPT = CHANGE(TRIM(CAPT<1>),';',@AM)
          CALL SB.REMOTE.PROCESS(CAPT)
          CHAIN 'OFF'
       END
       *-----------------------------*-----------------------------
       * EFV 20150603 : problème du logto sous sbxa / sbphantom / WI / UVCS
       * IF SBXA ... TTY=uvcs AND SB.CONT is assigned ; ... on vient d'un LOGTO from SBaccount
       IF @TTY = "uvcs" AND ASSIGNED(SB.CONT) THEN CHAIN 'SB.LOGIN'
       * si tty est phantom et il y a une ligne qui lance un jsh ... alors lance sb sans data
       IF @TTY = "phantom" THEN
         * existe il une ligne qui a lancer PHANTOM comme commande active ?
         * VIA GP.JSH.START ?
          READ IS.SB.START.A.JSH FROM F.VOC,'SB.START.A.JSH' THEN
             DELETE F.VOC,'SB.START.A.JSH'
             CHAIN 'SB.LOGIN'
          END ELSE
             * VIA J:... OU PD.J
             EXECUTE 'PORT.STATUS INTERNAL' CAPTURING PORTSTATUS
             IF INDEX(PORTSTATUS,'PHANTOM MM J:',1) THEN CHAIN 'SB.LOGIN'
          END
       END
       
       *----------------------------------------------------------
       IF IS.PHANTOM OR @TTY = "phantom" OR @TTY = "console" THEN
       
          STOP
       END
       *-----------------------------*-----------------------------
       CAPT = ''
       ERR = ''
       CALL IN.OS.GET.ENV('NOSBLOGIN',CAPT)
       
       IF OCONV(TRIM(CAPT<1>),"MCL") = "true" THEN
       *
       * Rien faire si pas demande de login sb
       *
       
       END ELSE
          LOG = @LOGNAME
          IF DCOUNT(LOG,"\") > 1 THEN
             LOG = FIELD(LOG,"\",2)
          END
       
          OPEN 'DMSECURITY' TO F.DMSECURITY ELSE STOPM 'DMSECURITY NOT OPENED'
          USR.CODE = ""
          READV USR.CODE FROM F.DMSECURITY,'~':UPCASE(LOG),13 ELSE
       *
       * WINDOWS.ID connu uniquement sur SB > 6.0 pour identification SBXA
       *
             EXECUTE 'SELECT DMSECURITY WITH TYPE = "U" AND WITH WINDOWS.ID = "':LOG:'"' CAPTURING RIEN RTNLIST SUSR
             READNEXT SBUSR FROM SUSR THEN
                LOG = SBUSR[2,9999]
                READV USR.CODE FROM F.DMSECURITY,'~':UPCASE(LOG),13 ELSE USR.CODE = ''
             END
       * tente de lire en UV.LOGINS<5> "NOM SBU=xxxx" : efv 28/04/2014
             IF USR.CODE = '' THEN
                OK =1
       * ouvrir UVLOGINS
                OPEN 'UV.LOGINS' TO F.UV.LOGINS ELSE
                   EXECUTE 'SET.FILE UV UV.LOGINS UV.LOGINS' CAPTURING RIEN
                   OPEN 'UV.LOGINS' TO F.UV.LOGINS ELSE OK = 0
                END
                IF OK THEN
                   READV UVLG FROM F.UV.LOGINS,LOG,5 THEN
                      XSBU = INDEX(UVLG,'SBU=',1)
                      IF XSBU THEN
                         LOG = FIELD( FIELD( UVLG[XSBU,999] ,'=',2) ,' ',1)
                         READV USR.CODE FROM F.DMSECURITY,'~':UPCASE(LOG),13 ELSE USR.CODE = ''
                      END
                   END
                END
             END
          END
       *
       
          IF USR.CODE #'' THEN
             DATA UPCASE(LOG)
             DATA USR.CODE
          END ELSE
             CRT 'NO Auto Login OSUser=':@LOGNAME,'SBUser=':LOG
          END
          CHAIN 'SB.LOGIN'
       END
       *-----------------------------*-----------------------------
       STOP
       *----------
WRITE.BUG: 
       WRITEV TIMEDATE():' ':@LOGNAME:' ':@WHO:'>':N.BUG:'>':L.BUG ON F.TRACE,K.TRACE,-1
       N.BUG = ''; L.BUG = ''
       RETURN
       END

wi.sb.log

*
* Remplacent du login SB pour gestion des phantoms dans le compte
*
* CM - 22/04/2011 : Supprimer plusieurs test pour brancher sur IN.AUTO.LOGIN
*                   c'est lui qui gere tous les autres cas.
*
INCLUDE WIINCLUDE WI.COM.COR

* On pourrait tester @TTY, mais trop specifique UV
IF SYSTEM(1001) # "0" THEN
   * UV, C'est en 25
   IS.PHANTOM = (SYSTEM(25) = 1)
END ELSE
   IF SYSTEM(513) # 0 THEN
      * UNIDATA
      IS.PHANTOM = (SYSTEM(48) # "")
   END ELSE
      * D3 en 24
      IS.PHANTOM = (SYSTEM(24) = 1)
   END
END

CALL IN.INI.IF.NOT(WI.HDL.ID,"")

IF WI.HDL.ID # "" AND WI.HDL.ID > 0  THEN
   CRT "On dirai bien que tu es une ligne WEB id=":WI.HDL.ID:" , pas de login SB+"
END ELSE
  WI.HDL.ID = ""

!------------------------------------------------------------------------------------------  
! efv 03/07/2015 : on passe la main au tool IN.AUTO.LOGIN qui fait le boulot convenablement !
! efv 03/07/2015 : vers IN.AUTO.LOGIN 20150603
! INCLUDE DKSKELCODE COMMON 
! IF @TTY = 'uvcs' AND ASSIGNED(SB.CONT) ... on vient d'un LOGTO sous SBXA ; il faut lancer SB.LOGIN sans DATA
! IF @TTY = 'phantom' .... 
! * 
! * On fait la meme chose que le tool, mais il est pas souvent a jour
! * donc vaut mieux le faire soi meme
! *
! IF NOT(IS.PHANTOM) THEN
!    *
!    * Peut etre on est un handler lanc depuis le shell
!    *
!    IF OCONV(@TTY,"MCL") = "console" THEN
!       CRT "Ligne console -> pas de login SB+"
!    END ELSE
!       CHAIN "IN.AUTO.LOGIN"
!    END
! END ELSE
!    CRT "Les phantoms n'ont pas le droit de login SB+"
! END
!--------------------------------------------------------------------------------------
    CHAIN "IN.AUTO.LOGIN"

END

END

Troubleshooting

devtools/sb/sbplus/dev/gestion_du_login.txt · Dernière modification: 25/11/2024 12:20 par Manu Fernandes
 
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki