Текущее время: Вт, июл 22 2025, 13:59

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ! Прежде чем задавать вопрос, ознакомьтесь со ссылками ниже:

Вопросы по отличиям версий SAP, Add-On, EHP - сюда
Вопросы по SAP Front End (SAPlogon, SAPgui, guiXT и т.д.) - сюда
Вопросы по LSMW - сюда
Вопросы по архивации в SAP - сюда
Вопросы по SAP GRC - сюда
Вопросы по SAP Business Workplace (почте SAP) и SAP Office - сюда
Вопросы по miniSAP (SAP mini basis) - сюда
Вопросы по SAP HANA - сюда
Вопросы по лицензированию продуктов SAP - сюда



Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: Solution Manager Key Generation
СообщениеДобавлено: Чт, июн 21 2007, 16:00 
Специалист
Специалист

Зарегистрирован:
Вт, авг 17 2004, 08:47
Сообщения: 222
Пол: Мужской
Привет всем!

Была необходимость поставить сап систему. Но при установке инсталятор попросил ключик, который генериться в СМ. Пришлось поэтому поводу ставить СМ, генерить ключик и потом сносить эту систему.

Из СМ я выдрал код по генерации ключиков и написал абап программу, которая их генерит. Так что если кому-нибудь не охота будет ставить для этих целей СМ, то может воспользоваться данной программой ;)

Code:
*&---------------------------------------------------------------------*
*& Report  ZBC_SOLMAN_KEY
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
report zbc_solman_key.

selection-screen begin of block sele1 with frame.
parameters:
  sid(3),
  sysno(2),
  server(15).
selection-screen end of block sele1.

selection-screen begin of block sele2 with frame.
parameters:
  key(10).
selection-screen end of block sele2.

at selection-screen.

  if sid    is not initial and
     sysno  is not initial and
     server is not initial.
    perform get_sp_value using sid sysno server changing key.
  else.
    clear key.
  endif.

*&---------------------------------------------------------------------*
*&      Form  get_sp_value
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_PF_SID  text
*      -->P_PF_SYSNO  text
*      -->P_PF_SERVER  text
*      <--P_PF_VALUE  text
*----------------------------------------------------------------------*
form get_sp_value using    p_pf_sid
                           p_pf_sysno
                           p_pf_server
                  changing p_pf_value.

  constants:
    lc_part_len          type i value 5,
    lc_pw_len            type i value 10,
    lc_allowed_chars(38) type c value '-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_'.


  data: lf_string(20)        type c,
        lf_key               type i,
        lf_part(lc_part_len) type c,
        lf_finalf(lc_pw_len) type c,
        lf_finalx            type xstring,
        lf_xbuffer           type xstring,
        lf_opf(10)           type c,
        lf_langu             like sy-langu,
        lf_subrc             like sy-subrc,
        lf_len               type i,
        lo_conv_to_x         type ref to cl_abap_conv_out_ce.

  clear: lf_string, lf_finalx, lf_opf.

  concatenate p_pf_sid p_pf_sysno p_pf_server into lf_string.

* Large letters only
  translate lf_string to upper case.

  lf_langu = sy-langu.
  set locale language 'E'.
  lo_conv_to_x = cl_abap_conv_out_ce=>create( encoding = '1100' ).
  lf_len = strlen( lf_string ).

  if lf_string(lf_len) cn lc_allowed_chars.

  else.

* Fold the input string to a lc_part_len long string
    while lf_len > 0.
      lf_part = lf_string(lc_part_len).
      shift lf_string by lc_part_len places.
      lf_len = strlen( lf_string ).
      call method lo_conv_to_x->reset.
      call method lo_conv_to_x->write( data = lf_part n = -1 ).
      lf_xbuffer = lo_conv_to_x->get_buffer( ).
      lf_finalx = lf_finalx bit-xor lf_xbuffer.
    endwhile.

    lf_key = 12.

    perform scramble using    lf_finalx
                              lf_key
                              lc_part_len
                     changing lf_finalf
                              lf_subrc.

    if not lf_finalf is initial.
      p_pf_value = lf_finalf.
    else.
      clear p_pf_value.
    endif.

  endif.
endform.                    " get_sp_value
*&---------------------------------------------------------------------*
*&      Form  scramble
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_LF_FINALX  text
*      -->P_LF_KEY  text
*      -->P_LC_PART_LEN  text
*      <--P_LF_finalf  text
*      <--P_LF_SUBRC  text
*----------------------------------------------------------------------*
form scramble using    iv_xstring type xstring
                       iv_key type i
                       iv_src_len type i
              changing lf_finalf
                       lf_subrc like sy-subrc.

  constants: lc_max_len    type i value 20,
             lc_mask(4)    type x value '0000003F',
             lc_random(64) type x value
                      'F0ED53B83244F1F876C67959FD4F13A2' &
                      'C15195EC5483C234774943A27DE26596' &
                      '5E5398789A17A33CD383A8B829FBDCA5' &
                      '55D702778413ACDDF9B83116610E6DFA'.

  data: lv_key_index(4)  type x,
        lv_rand_index(4) type x,
        lv_xkey(4)       type x,
        lv_xkey_shl_1(4) type x,
        lv_xkey_shr_5(4) type x,
        lv_scramble_byte type x,
        lv_dest(lc_max_len) type x,
        lv_index         type i,
        lv_len           type i.

  clear lf_subrc.

  if iv_src_len eq 0. exit. endif.
  lv_len = xstrlen( iv_xstring ).
  if iv_src_len gt lc_max_len or
     iv_src_len gt lv_len.
    lf_subrc = 2.
    exit.
  endif.

  lv_xkey       = iv_key.
  lv_xkey_shl_1 = iv_key * 2.
  lv_xkey_shr_5 = iv_key div 32.
  lv_rand_index = lv_xkey bit-xor lv_xkey_shr_5 bit-xor lv_xkey_shl_1.
  lv_rand_index = lv_rand_index bit-and lc_mask.

  lv_index = 0.
  do iv_src_len times.
    catch system-exceptions compute_int_times_overflow = 1.
      lv_key_index = ( iv_key * lv_index * lv_index ) - lv_index.
    endcatch.
    if sy-subrc <> 0.
      lf_subrc = 1.
      exit.
    endif.
    lv_scramble_byte = lc_random+lv_rand_index(1) bit-xor
                       lv_key_index+3(1).
    lv_dest+lv_index(1) = iv_xstring+lv_index(1) bit-xor
                          lv_scramble_byte.
    lv_index = lv_index + 1.
    lv_rand_index = lv_rand_index + 1.
    lv_rand_index = lv_rand_index bit-and lc_mask.
  enddo.
  if lf_subrc <> 0.
    exit.
  endif.

  write lv_dest(iv_src_len) to lf_finalf.

endform.                    " scramble


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 21 2007, 17:26 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Вт, сен 21 2004, 16:30
Сообщения: 609
Пол: Мужской
Я поступал проще, инсталлил как будто Netveawer центральную инстанцию а инстанцию БД ставил как принято для ABAP сервера.
Правда это был инсталлятор для ERP2004. Вначале я тоже "трахался" с установкой солмана чтобы ключ сгенерить


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, июн 22 2007, 08:40 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, сен 16 2004, 17:10
Сообщения: 2229
Откуда: Moscow, кажется...
Пол: Мужской
Вообще-то (и где-то здесь это уже писАлось) на этапе установки системы функция проверки валидности ключа SM лежит открытым текстом в control.xml. Искать по ключу solmankey. Достаточно в точке возврата написать "True", чтобы был воспринят любой ключ правильной длины;)

_________________
Я бы хотел поглядеть на эффективную армию, состоящую из эффективных менеджеров.
BRGDS,
Aleks Изображение


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, июн 22 2007, 09:50 
Ассистент
Ассистент

Зарегистрирован:
Чт, окт 28 2004, 13:32
Сообщения: 40
Откуда: Москва
Да где-то писалось, просто искать лень:

control.xml

Было:
var retval = eval(installer.invokeModuleCall(call));
Trace("Installer", "Installer.checkSolManKey() done: ", retval);
return retval;

Стало:
return "true";


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, июн 22 2007, 15:55 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Сб, мар 17 2007, 16:48
Сообщения: 60
Откуда: Санкт-Петербург
Очень кстати, спасибо огромное!!!

_________________
Старый глюк, лучше новых двух.


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB