User Tools

Site Tools


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.
This website uses cookies. By using the website, you agree with storing cookies on your computer. Also you acknowledge that you have read and understand our Privacy Policy. If you do not agree leave the website.More information about cookies
start/tips/sap/cpypwrd.txt · Last modified: by admin_wiki