Pirmo reizi es uzrakstÄ«ju Å”o rakstu manÄ
StrÄdÄjot pie idejas par paroles atiestatÄ«Å”anas pakalpojumu SAP R/3 sistÄmÄs, radÄs jautÄjums - kÄ palaist SAP GUI ar nepiecieÅ”amajiem parametriem no pÄrlÅ«kprogrammas? TÄ kÄ Å”Ä« ideja paredzÄja tÄ«mekļa pakalpojuma izmantoÅ”anu, vispirms jÄatbild uz SOAP pieprasÄ«jumu no SAP GUI un jÄnosÅ«ta vÄstule ar saiti uz tÄ«mekļa lapu ar skriptu sÄkotnÄjÄs paroles atiestatÄ«Å”anai un pÄc tam parÄdÄ«ta lietotÄjam. ziÅojumu par veiksmÄ«gu paroles atiestatÄ«Å”anu un Ŕīs paÅ”as sÄkotnÄjÄs paroles parÄdÄ«Å”anu , tad es vÄlÄtos, lai Å”ajÄ lapÄ bÅ«tu arÄ« saite uz SAP GUI palaiÅ”anu. TurklÄt Å”ai saitei vajadzÄtu atvÄrt vajadzÄ«go sistÄmu un, vÄlams, uzreiz aizpildÄ«t pieteikÅ”anÄs un paroles laukus: lietotÄjam produktÄ«vÄ parole bÅ«tu jÄievada tikai divas reizes.
SAP Logon palaiÅ”ana mÅ«su mÄrÄ·im nebija interesanta, un, palaižot sapgui.exe, nebija iespÄjams norÄdÄ«t klientu un lietotÄjvÄrdu, taÄu bija iespÄjams palaist sistÄmu, kas nebija definÄta SAP Logon. No otras puses, SAP GUI palaiÅ”ana ar patvaļīgiem servera parametriem nebija Ä«paÅ”i aktuÄla: ja mÄs risinÄm lietotÄja paroles atiestatÄ«Å”anas problÄmu, tad visticamÄk viÅam jau ir vajadzÄ«gÄ rinda SAP Logon ar nepiecieÅ”amajiem iestatÄ«jumiem un tur nav jÄjaucas ar savÄjo. Bet norÄdÄ«tajÄm prasÄ«bÄm atbilda SAP GUI Shortcut tehnoloÄ£ija un pati programma sapshcut.exe, kas ļÄva palaist SAP GUI, izmantojot Ä«paÅ”u āsaÄ«sniā.
ProblÄmas risinÄÅ”ana: sapshcut.exe palaiÅ”ana tieÅ”i no pÄrlÅ«kprogrammas, izmantojot ActiveX objektu:
function openSAPGui(sid, client, user, password) {
var shell = new ActiveXObject("WScript.Shell");
shell.run('sapshcut.exe -system="'+sid+'" -client='+client+' -user="'+user+'" -pw="'+password+'" -language=RU');
}
RisinÄjums ir slikts: pirmkÄrt, tas darbojas tikai pÄrlÅ«kprogrammÄ Internet Explorer, otrkÄrt, ir nepiecieÅ”ami atbilstoÅ”i droŔības iestatÄ«jumi pÄrlÅ«kprogrammÄ, kas organizÄcijÄ var bÅ«t aizliegti domÄna lÄ«menÄ«, un pat tad, ja tas ir atļauts, pÄrlÅ«kprogramma parÄda logu ar biedÄjoÅ”u brÄ«dinÄjums lietotÄjam:
InternetÄ atradu risinÄjumu #2:
Å is protokols sÄkas sapgui.exe ar parametru /ÄŖSCEÄ»A, kas ir tieÅ”i tas, kas mums vajadzÄ«gs:
Nu, vai arÄ« mÄs vÄlamies izveidot pilnÄ«gi patvaļīgu protokolu (piemÄram, sapshcut), varat to reÄ£istrÄt, izmantojot Å”Ädu reg failu:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOTsapshcut]
@="sapshcut Handler"
"URL Protocol"=""
[HKEY_CLASSES_ROOTsapshcutDefaultIcon]
@="sapshcut.exe"
[HKEY_CLASSES_ROOTsapshcutshell]
[HKEY_CLASSES_ROOTsapshcutshellopen]
[HKEY_CLASSES_ROOTsapshcutshellopencommand]
@="sapshcut.exe "%1""
Tagad, ja mÄs izveidojam saiti tÄ«mekļa lapÄ, kas norÄda protokolu Sapgui.ÄŖsceļŔ.Fails LÄ«dzÄ«gÄ veidÄ:
<a href='Sapgui.Shortcut.File: -system=SID -client=200'>SID200</a>
Mums vajadzÄtu redzÄt Å”Ädu logu:
Un viss Ŕķiet lieliski, bet, noklikŔķinot uz pogas āAtļautā, mÄs redzam:
Hmm, pÄrlÅ«kprogramma pÄrvÄrta atstarpes taustiÅu par %20. Citas rakstzÄ«mes arÄ« tiks iekodÄtas savÄ ciparu kodÄ ar procentu simbolu. Un visnepatÄ«kamÄkais ir tas, ka Å”eit neko nevar izdarÄ«t pÄrlÅ«kprogrammas lÄ«menÄ« (Å”eit viss tiek darÄ«ts pÄc standarta) - pÄrlÅ«kprogrammai nepatÄ«k Å”Ädas rakstzÄ«mes, un Windows komandu tulks nedarbojas ar Å”ÄdÄm kodÄtÄm vÄrtÄ«bÄm. Un vÄl viens mÄ«nuss - visa virkne tiek nodota kÄ parametrs, ieskaitot protokola nosaukumu un pat kolu (sapgui.shortcut.file:). TurklÄt, lai gan tas pats sapshcut.exe var izmest visu, kas tam nav parametrs (sÄkas ar simbolu ā-ā, pÄc tam nosaukumu, ā=ā un vÄrtÄ«bu), t.i. tÄda rinda kÄ "sapgui.shortcut.file: -system=SID"tas joprojÄm darbosies, tad bez atstarpes"sapgui.shortcut.file:-system=SID"vairs nedarbojas.
IzrÄdÄs, ka principÄ ir divas URI protokola izmantoÅ”anas iespÄjas:
- Izmantojot bez parametriem: mÄs izveidojam veselu virkni protokolu visÄm mÅ«su Å”Äda veida sistÄmÄm SIDMANDS, tips AAA200, BBB200 un tÄ tÄlÄk. Ja jums vienkÄrÅ”i jÄstartÄ vÄlamÄ sistÄma, opcija ir diezgan funkcionÄla, taÄu mÅ«su gadÄ«jumÄ tÄ nav piemÄrota, jo jÅ«s vismaz vÄlaties pÄrsÅ«tÄ«t lietotÄja pieteikÅ”anos, taÄu to nevar izdarÄ«t Å”ÄdÄ veidÄ.
- Izmantojot iesaiÅojuma programmu, lai izsauktu sapshcut.exe vai sapgui.exe. Å Ä«s programmas bÅ«tÄ«ba ir vienkÄrÅ”a ā tai ir jÄÅem virkne, ko pÄrlÅ«kprogramma tai pÄrsÅ«ta caur tÄ«mekļa protokolu, un jÄpÄrvÄrÅ” tÄ par Windows saÅemto atveidojumu, t.i. pÄrvÄrÅ” visus rakstzÄ«mju kodus atpakaļ rakstzÄ«mÄs (varbÅ«t pat parsÄ virkni pÄc parametriem) un jau izsauc SAP GUI ar garantÄti pareizu komandu. MÅ«su gadÄ«jumÄ tas arÄ« nav lÄ«dz galam piemÄrots (tÄpÄc es to pat nerakstÄ«ju), jo mums nepietiek ar protokolu pievienot visiem lietotÄju datoriem (domÄna ietvaros tas joprojÄm ir labi, lai gan labÄk ir izvairieties no Å”Ädas prakses), taÄu Å”eit mums bÅ«s vairÄk jÄievieto programma datorÄ, kÄ arÄ« pastÄvÄ«gi jÄnodroÅ”ina, lai tÄ nepazustu, kad programmatÅ«ra tiek atkÄrtoti instalÄta datorÄ.
Tie. MÄs arÄ« atmetam Å”o iespÄju kÄ mums nepiemÄrotu.
Å ajÄ brÄ«dÄ« jau sÄku domÄt, ka bÅ«s jÄatvadÄs no domas palaist SAP GUI ar nepiecieÅ”amajiem parametriem no pÄrlÅ«kprogrammas, bet tad man ienÄca prÄtÄ doma, ka var izveidot saÄ«sni SAP Logon un kopÄjiet to uz darbvirsmu. Es vienu reizi izmantoju Å”o metodi, bet pirms tam es Ä«paÅ”i neskatÄ«jos uz saÄ«snes failu. Un izrÄdÄ«jÄs, ka Ŕī saÄ«sne ir parasts teksta fails ar paplaÅ”inÄjumu .sap. Un, ja to palaižat operÄtÄjsistÄmÄ Windows, SAP GUI tiks palaists ar Å”ajÄ failÄ norÄdÄ«tajiem parametriem. "Bingo!"
Å Ä« faila formÄts ir aptuveni Å”Äds (var bÅ«t arÄ« kÄds darÄ«jums, kas tika palaists startÄÅ”anas laikÄ, bet es to izlaidu):
[System]
Name=SID
Client=200
[User]
Name=
Language=RU
Password=
[Function]
Title=
[Configuration]
GuiSize=Maximized
[Options]
Reuse=0
Å Ä·iet, ka viss nepiecieÅ”amais: sistÄmas identifikators, klients, lietotÄjvÄrds un pat parole. Un pat papildu parametri: Uzruna - loga nosaukums, GuiSize ā darbojas loga lielums (pilnekrÄna režīmÄ vai ne) un AtkÄrtota izmantoÅ”ana ā vai ir jÄatver jauns logs vai jÄizmanto jau atvÄrts logs ar to paÅ”u sistÄmu. TaÄu uzreiz parÄdÄ«jÄs nianse - izrÄdÄ«jÄs, ka SAP Logon paroli nevarÄja iestatÄ«t, lÄ«nija bija bloÄ·Äta. IzrÄdÄ«jÄs, ka tas tika darÄ«ts droŔības apsvÄrumu dÄļ: tas saglabÄ visus SAP Logon izveidotos saÄ«snes failÄ sapshortcut.ini (NetÄlu saplogon.ini Windows lietotÄja profilÄ) un tur, lai gan tie ir Å”ifrÄti, tie nav pÄrÄk stingri Å”ifrÄti un, ja vÄlaties, tos var atÅ”ifrÄt. TaÄu to var atrisinÄt, mainot viena parametra vÄrtÄ«bu reÄ£istrÄ (noklusÄjuma vÄrtÄ«ba ir 0):
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USERSoftwareSAPSAPShortcutSecurity]
"EnablePassword"="1"
TÄdÄjÄdi tiek atbloÄ·Äts paroles lauks ievadÄ«Å”anai saÄ«snes izveides veidlapÄ SAP pieteikÅ”anÄs programmÄ:
Un, ievadot paroli Å”ajÄ laukÄ, tÄ tiks ievietota attiecÄ«gajÄ rindÄ
sapshortcut.ini, bet, velkot saÄ«sni uz darbvirsmu, tas tur neparÄdÄs, taÄu varat to pievienot manuÄli. Parole ir Å”ifrÄta, numuram 111111 tÄ bÅ«s Å”Äda: PW_49B02219D1F6, 222222 - PW_4AB3211AD2F5. Bet mÅ«s vairÄk interesÄ tas, ka Ŕī parole tiek Å”ifrÄta vienÄ veidÄ, neatkarÄ«gi no konkrÄtÄ datora, un, ja mÄs atiestatÄm paroli uz sÄkotnÄjo, tad Å”ajÄ laukÄ varam izmantot vienu iepriekÅ” zinÄmu vÄrtÄ«bu. Nu, ja mÄs vÄlamies izmantot nejauÅ”i izveidotu paroli, mums bÅ«s jÄsaprot Ŕī Å”ifra algoritms. Bet, spriežot pÄc sniegtajiem piemÄriem, to izdarÄ«t nebÅ«s grÅ«ti. Starp citu, SAP GUI 7.40 Å”is lauks pilnÄ«bÄ pazuda no veidlapas, taÄu tas pareizi pieÅem failu ar aizpildÄ«tu paroli.
Tas ir, izrÄdÄs, ka pÄrlÅ«kprogrammÄ jums vienkÄrÅ”i jÄnoklikŔķina uz saites uz failu ar paplaÅ”inÄjumu .sap un vÄlamo formÄtu - un tas piedÄvÄs to atvÄrt kÄ failu, piemÄram, SAP GUI Shortcut (proti, datorÄ ar instalÄtu SAP GUI) un tiks atvÄrts SAP GUI logs ar norÄdÄ«tajiem parametriem (ja SID un klienta pÄris ir Ŕī datora SAP pieteikÅ”anÄs sarakstÄ).
Bet ir skaidrs, ka neviens vienkÄrÅ”i neizveidos failus iepriekÅ” un neuzglabÄs tos vietnÄ - tie ir jÄÄ£enerÄ, pamatojoties uz nepiecieÅ”amajiem parametriem. PiemÄram, varat izveidot PHP skriptu, lai Ä£enerÄtu saÄ«snes (sapshcut.php):
<?php
$queries = array();
parse_str($_SERVER['QUERY_STRING'], $queries);
$Title = $queries['Title'];
$Size = $queries['Size'];
$SID = $queries['SID'];
$Client = $queries['Client'];
if($Client == '') { $Client=200; };
$Lang = $queries['Language'];
if($Lang=='') { $Lang = 'RU'; };
$User = $queries['Username'];
if($User<>'') { $Password = $queries['Password']; };
$filename = $SID.$Client.'.sap';
header('Content-disposition: attachment; filename='.$filename);
header('Content-type: application/sap');
echo "[System]rn";
echo "Name=".$SID."rn";
echo "Client=".$Client."rn";
echo "[User]rn";
echo "Name=".$Username."rn";
echo "Language=".$Lang."rn";
if($Password<>'') echo "Password=".$Password."rn";
echo "[Function]rn";
if($Title<>'') {echo "Title=".$Title."rn";} else {echo "Title=ŠŃ
Š¾Š“ Š² ŃŠøŃŃŠµŠ¼Ńrn";};
echo "[Configuration]rn";
if($Size=='max') { echo "GuiSize=Maximizedrn"; };
echo "[Options]rn";
echo "Reuse=0rn";
?>
Ja nenorÄdÄ«siet lietotÄjvÄrdu un paroli, tiks parÄdÄ«ts Å”Äds logs, kurÄ tiks prasÄ«ts ievadÄ«t pieteikumvÄrdu un paroli:
Ja nododat tikai pieteikÅ”anos, pieteikÅ”anÄs lauks tiks aizpildÄ«ts un paroles lauks bÅ«s tukÅ”s. Ja lietotÄjam pieŔķiram gan pieteikumvÄrdu, gan paroli, bet lietotÄjam datorÄ reÄ£istra sadaÄ¼Ä [HKEY_CURRENT_USERSoftwareSAPSAPShortcutSecurity] ir iestatÄ«ta atslÄga EnablePassword uz 0, mÄs iegÅ«stam to paÅ”u. Un tikai tad, ja Ŕī atslÄga ir iestatÄ«ta uz 1 un mÄs nododam gan vÄrdu, gan sÄkotnÄjo paroli, sistÄma nekavÄjoties liks jums divreiz ievadÄ«t jaunu pastÄvÄ«go paroli. Tas ir tas, ko mums vajadzÄja iegÅ«t.
TÄ rezultÄtÄ mums ir Å”Äda apsvÄrto iespÄju kopa, kas ilustrÄ visu iepriekÅ” minÄto:
<html>
<head>
<script>
function openSAPGui(sid, client, user, password) {
var shell = new ActiveXObject("WScript.Shell");
shell.run('sapshcut.exe -system="'+sid+'" -client='+client+' -user="'+user+'" -pw="'+password+'" -language=RU');
}
</script>
</head>
<body>
<a href='' onclick="javascript:openSAPGui('SID', '200', 'test', '');"/>Example 1: Execute sapshcut.exe (ActiveX)<br>
<a href='Sapgui.Shortcut.File: -system=SID -client=200'>Example 2: Open sapshcut.exe (URI)</a><br>
<a href='sapshcut.php?SID=SID&Client=200&User=test'>Example 3: Open file .sap (SAP GUI Shortcut)</a><br>
</body>
</html>
PÄdÄjais variants man derÄja. TaÄu SAP Ä«sceļu Ä£enerÄÅ”anas vietÄ varat izmantot arÄ«, piemÄram, CMD failu Ä£enerÄÅ”anu, kurus atverot no pÄrlÅ«kprogrammas, jums tiks atvÄrts arÄ« SAP GUI logs. ZemÄk ir piemÄrs (sapguicmd.php) tieÅ”i palaidiet SAP GUI ar pilnu savienojuma virkni, bez nepiecieÅ”amÄ«bas konfigurÄt SAP pieteikÅ”anos:
<?php
$queries = array();
parse_str($_SERVER['QUERY_STRING'], $queries);
$Title = $queries['Title'];
$ROUTER = $queries['ROUTER'];
$ROUTERPORT = $queries['ROUTERPORT'];
$HOST = $queries['HOST'];
$PORT = $queries['PORT'];
$MESS = $queries['MESS'];
$LG = $queries['LG'];
$filename = 'SAPGUI_';
if($MESS<>'') $filename = $filename.$MESS;
if($HOST<>'') $filename = $filename.$HOST;
if($PORT<>'') $filename = $filename.'_'.$PORT;
$filename = $filename.'.cmd';
header('Content-disposition: attachment; filename='.$filename);
header('Content-type: application/cmd');
echo "@echo offrn";
echo "chcp 1251rn";
echo "echo ŠŃ
Š¾Š“ Š² ".$Title."rn";
echo "set SAP_CODEPAGE=1504rn";
echo 'if exist "%ProgramFiles(x86)%SAPFrontEndSapGuisapgui.exe" set gui=%ProgramFiles(x86)%SAPFrontEndSapGuisapgui.exe'."rn";
echo 'if exist "%ProgramFiles%SAPFrontEndSapGuisapgui.exe" set gui=%ProgramFiles%SAPFrontEndSapGuisapgui.exe'."rn";
echo "set logon=";
if($ROUTER<>'') echo "/H/".$ROUTER;
if($ROUTERPORT<>'') echo "/S/".$ROUTERPORT;
if($MESS<>'') echo "/M/".$MESS;
if($HOST<>'') echo "/H/".$HOST;
if($PORT<>'') echo "/S/".$PORT;
if($LG<>'') echo "/G/".$LG;
echo "rn";
echo '"%gui%" %logon%'."rn";
?>
Avots: www.habr.com