Gestion du LOGIN / SB.LOGIN selon le contexte de l'utilisateur.
is phantom ? | is PROC LOGIN executed ? Login from … | |||||
---|---|---|---|---|---|---|
login | logto0 | logto1 | phantom | |||
client .net, ole (SBXA) | uvcs ; is.phantom | Vrai | Faux | Vrai | Vrai | Vrai |
client telnet sur uvux | /dev/… | Faux | ||||
client telnet sur uvwin | telnet | Faux | Vrai | Vrai | Vrai | Vrai |
natif sur serveur win (from cmd.exe) | console | Faux | ||||
natif sur serveur uvux (from console) | console | Faux | ||||
start PHANTOM from a Uvsession | phantom | 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 |
run SB.LOGIN | login | logto0 | logto1 | |||
---|---|---|---|---|---|---|
client .net, ole (SBXA) | uvcs ; is.phantom | FAUX, SBXA fait le nécessaire ; la PROC LOGIN n'est pas exécutée | Vrai | Vrai | ||
client telnet sur uvux | /dev/… | Vrai | Vrai | Vrai | ||
client telnet sur uvwin | telnet | Vrai | Vrai | Vrai | ||
natif sur serveur win (from cmd.exe) | console | |||||
natif sur serveur uvux (from console) | console | |||||
start PHANTOM from a Uvsession | phantom | |||||
start PHANTOM MM from UvSession | phantom | Vrai | Vrai | Vrai | ||
start PHANTOM from a phantom/wi | phantom | |||||
start PHANTOM MM from a phantom/wi | phantom | Vrai | Vrai | Vrai | ||
start uv from crontab | ||||||
start uv from winTaskMngr |
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
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'
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 :
4648 INTEGRIX\zf 0x00001228 PHANTOM MM J:J.DT….
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
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'
pour les JSH SB55 sous uv11.3
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.
sur une plateforme uv 11.3+ et sb 6.5+,
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
*-----------------------------*----------------------------- * 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
* * 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