Warning: Undefined array key "REMOTE_USER" in /home/clients/1b5563e54ec9ebb7c62f82bb22e088b4/web/wiki/lib/plugins/googleanalytics/action.php on line 55
REPORT z_pwd_swap_type_h.
DATA: ls_usr02_source TYPE usr02,
ls_usr02_target TYPE usr02,
ls_usr02_temp TYPE usr02,
lv_pwdhash_temp TYPE usr02-pwdsaltedhash.
PARAMETERS: p_user TYPE usr02-bname OBLIGATORY,
p_clnt1 TYPE sy-mandt OBLIGATORY,
p_clnt2 TYPE sy-mandt OBLIGATORY,
p_execu TYPE c LENGTH 1 DEFAULT space.
START-OF-SELECTION.
" Contrôle des autorisations
AUTHORITY-CHECK OBJECT 'S_USER_GRP'
ID 'CLASS' FIELD '*'
ID 'ACTVT' FIELD '02'.
IF sy-subrc NE 0.
MESSAGE 'Autorisation insuffisante pour modification utilisateur' TYPE 'E'.
EXIT.
ENDIF.
" Lecture des données utilisateur avec type H uniquement
SELECT SINGLE * FROM usr02 CLIENT SPECIFIED
INTO ls_usr02_source
WHERE bname = p_user AND mandt = p_clnt1.
SELECT SINGLE * FROM usr02 CLIENT SPECIFIED
INTO ls_usr02_target
WHERE bname = p_user AND mandt = p_clnt2.
" Vérification existence et type de hachage
IF ls_usr02_source IS INITIAL.
WRITE: / 'Utilisateur', p_user, 'non trouvé dans mandant', p_clnt1.
EXIT.
ENDIF.
IF ls_usr02_target IS INITIAL.
WRITE: / 'Utilisateur', p_user, 'non trouvé dans mandant', p_clnt2.
EXIT.
ENDIF.
" Vérification type de hachage H (iSSHA-1)
IF ls_usr02_source-codvn NE 'H'.
WRITE: / 'ERREUR: Utilisateur mandant', p_clnt1, 'ne possède pas de mot de passe type H (iSSHA-1)'.
WRITE: / 'Type actuel:', ls_usr02_source-codvn.
EXIT.
ENDIF.
IF ls_usr02_target-codvn NE 'H'.
WRITE: / 'ERREUR: Utilisateur mandant', p_clnt2, 'ne possède pas de mot de passe type H (iSSHA-1)'.
WRITE: / 'Type actuel:', ls_usr02_target-codvn.
EXIT.
ENDIF.
" Vérification présence PWDSALTEDHASH
IF ls_usr02_source-pwdsaltedhash IS INITIAL.
WRITE: / 'ERREUR: PWDSALTEDHASH vide pour mandant', p_clnt1.
EXIT.
ENDIF.
IF ls_usr02_target-pwdsaltedhash IS INITIAL.
WRITE: / 'ERREUR: PWDSALTEDHASH vide pour mandant', p_clnt2.
EXIT.
ENDIF.
" Exécution de l'échange
IF p_execu = 'X'.
" Sauvegarde mot de passe type H mandant 1
lv_pwdhash_temp = ls_usr02_source-pwdsaltedhash.
" Échange mandant 1 <- mandant 2 (type H)
ls_usr02_temp = ls_usr02_source.
ls_usr02_temp-pwdsaltedhash = ls_usr02_target-pwdsaltedhash.
ls_usr02_temp-codvn = 'H'.
ls_usr02_temp-uflag = '0'.
MODIFY usr02 CLIENT SPECIFIED FROM ls_usr02_temp.
WRITE: / 'Transfert mot de passe type H', p_clnt2, '->', p_clnt1, ':', sy-subrc.
" Échange mandant 2 <- mandant 1 (sauvegarde type H)
ls_usr02_temp = ls_usr02_target.
ls_usr02_temp-pwdsaltedhash = lv_pwdhash_temp.
ls_usr02_temp-codvn = 'H'.
ls_usr02_temp-uflag = '0'.
MODIFY usr02 CLIENT SPECIFIED FROM ls_usr02_temp.
" WRITE: / 'Transfert mot de passe type H', p_clnt1, '->', p_clnt2, ':', sy-subrc."
COMMIT WORK.
WRITE: / 'Échange des mots de passe type H (iSSHA-1) terminé avec succès'.
ELSE.
WRITE: / 'Mode simulation activé - Aucune modification effectuée'.
WRITE: / 'Utilisateur', p_user, 'trouvé avec type H dans les deux mandants'.
WRITE: / 'Mandant source:', p_clnt1, '- Type:', ls_usr02_source-codvn, '- Hash:', ls_usr02_source-pwdsaltedhash(20), '...'.
WRITE: / 'Mandant cible:', p_clnt2, '- Type:', ls_usr02_target-codvn, '- Hash:', ls_usr02_target-pwdsaltedhash(20), '...'.
ENDIF.