start:tips:sap:cpypwrd
Copy password from a mandant to another
- z_pwd_swap_type_h.abap
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.
start/tips/sap/cpypwrd.txt · Last modified: by admin_wiki
