调试绕过权限检查
官方代码
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 |
*&---------------------------------------------------------------------* *& Report RS_REPAIR_SOURCE *&---------------------------------------------------------------------* *& USE IT VERY, VERY, VERY CAREFULLY !!!!!! *&---------------------------------------------------------------------* REPORT rs_repair_source. PARAMETERS include TYPE program OBLIGATORY. PARAMETERS version TYPE r3state DEFAULT 'A' . PARAMETERS display TYPE flag AS CHECKBOX DEFAULT 'X'. SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-b01. PARAMETERS debugger RADIOBUTTON GROUP ui. PARAMETERS txt_cntl RADIOBUTTON GROUP ui. PARAMETERS edt_call RADIOBUTTON GROUP ui DEFAULT 'X'. SELECTION-SCREEN END OF BLOCK b1. ********************************************************************** START-OF-SELECTION. TYPES ty_source_line TYPE c LENGTH 255. DATA source_tab TYPE STANDARD TABLE OF ty_source_line. DATA gui_textedit TYPE REF TO object. DATA subrc TYPE sy-subrc. DATA readonly_mode TYPE i. PERFORM authority_check. * call editor READ REPORT include INTO source_tab STATE version. IF debugger = 'X'. BREAK-POINT. "#EC NOBREAK PERFORM save_include. ELSEIF edt_call = 'X'. CALL FUNCTION 'EDITOR_TABLE' EXPORTING display = display text_type = 'ABAP' line_size = 255 IMPORTING subrc = subrc TABLES content = source_tab. IF subrc = 0. PERFORM save_include. ENDIF. ELSEIF txt_cntl = 'X'. IF display = 'X'. readonly_mode = 1. ENDIF. CREATE OBJECT gui_textedit TYPE ('CL_GUI_TEXTEDIT') EXPORTING parent = cl_gui_container=>screen0. CALL METHOD gui_textedit->('SET_HIGHLIGHT_COMMENTS_MODE'). CALL METHOD gui_textedit->('SET_FONT_FIXED'). CALL METHOD gui_textedit->('SET_COMMENTS_STRING'). CALL METHOD gui_textedit->('SET_WORDWRAP_BEHAVIOR') EXPORTING wordwrap_mode = 2 wordwrap_position = 255. CALL METHOD gui_textedit->('SET_TEXT_AS_R3TABLE') EXPORTING table = source_tab. CALL METHOD gui_textedit->('SET_READONLY_MODE') EXPORTING readonly_mode = readonly_mode. CALL SCREEN 100. ENDIF. ********************************************************************** FORM authority_check. DATA l_systemedit TYPE tadir-edtflag. DATA l_sys_cliinddep_edit TYPE t000-ccnocliind. AUTHORITY-CHECK OBJECT 'S_TCODE' ID 'TCD' FIELD 'SE38'. IF sy-subrc <> 0. MESSAGE e059(eu) WITH 'SE38'. ENDIF. IF display = 'X'. AUTHORITY-CHECK OBJECT 'S_DEVELOP' ID 'DEVCLASS' FIELD '*' ID 'OBJTYPE' FIELD '*' ID 'OBJNAME' FIELD '*' ID 'P_GROUP' DUMMY ID 'ACTVT' FIELD '03'. IF sy-subrc <> 0. MESSAGE e516(eu) WITH '03' 'S_DEVELOP'. ENDIF. ELSE. AUTHORITY-CHECK OBJECT 'S_DEVELOP' ID 'DEVCLASS' FIELD '*' ID 'OBJTYPE' FIELD '*' ID 'OBJNAME' FIELD '*' ID 'P_GROUP' DUMMY ID 'ACTVT' FIELD '02'. IF sy-subrc <> 0. MESSAGE e516(eu) WITH '02' 'S_DEVELOP'. ENDIF. * Get system and client properties by calling TR_SYS_PARAMS CALL FUNCTION 'TR_SYS_PARAMS' IMPORTING systemedit = l_systemedit sys_cliinddep_edit = l_sys_cliinddep_edit EXCEPTIONS OTHERS = 1. IF sy-subrc <> 0. MESSAGE e000(eu). ENDIF. * sytem is set as not changeable IF l_systemedit = 'N'. MESSAGE e102(tk). ENDIF. * client doesn't allow changes on repository obj. IF l_sys_cliinddep_edit CA '23'. MESSAGE e729(tk). ENDIF. CALL FUNCTION 'DEVELOPER_CHECK' EXCEPTIONS access_denied = 1 display_only = 2 OTHERS = 3. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE 'E' NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. ENDIF. ENDFORM. FORM save_include. DATA l_suffix TYPE c LENGTH 2. IF display <> 'X'. IF strlen( include ) > 30. "special includes IF include+30(1) = 'E' "enhancement include OR include+30(1) = 'B' "???? OR include+30(1) = 'D'. "definition include l_suffix = include+30(1). ELSE. l_suffix = include+30(2). ENDIF. INSERT REPORT include FROM source_tab EXTENSION TYPE l_suffix STATE version. ELSE. INSERT REPORT include FROM source_tab STATE version. ENDIF. IF sy-subrc = 0. MESSAGE s024(oo) WITH 'INCLUDE' include. ELSE. MESSAGE s025(oo) WITH 'INCLUDE' include DISPLAY LIKE 'E'. ENDIF. ENDIF. ENDFORM. ********************************************************************** MODULE status_0100 OUTPUT. SET PF-STATUS 'REPAIR'. SET TITLEBAR 'REPAIR' WITH include. ENDMODULE. MODULE user_command_0100 INPUT. CASE sy-ucomm. WHEN 'SAVE'. CALL METHOD gui_textedit->('GET_TEXT_AS_R3TABLE') IMPORTING table = source_tab. PERFORM save_include. WHEN 'EXIT'. LEAVE PROGRAM. WHEN OTHERS. LEAVE TO SCREEN 0. ENDCASE. ENDMODULE. |


