İyinet'e Hoşgeldiniz!

Türkiye'nin En Eski Webmaster Forum'una Hemen Kayıt Olun!

Kayıt Ol!

exec() ile cvs checkout

Alexis

0
İyinet Üyesi
Katılım
24 Ekim 2005
Mesajlar
678
Reaction score
5
Amacım Source Forge deki CVS alanımdaki dosyaları alıp sonana tarih ekleyip sıkıştırmak. İlk önce resync denedim ama php dosyalarının başına ve sonunda bulunan ve CVS ye ait bazı bilgiler de vardı, onları tek tek ayıklamak uzun iş.

Daha sonra Source Forge'in bana verdiği alanı kullanarak cvs checkout ile yapmayı düşündüm. exec() fonksiyonuna izin vardı, yaptığım ufak denemeler sonuç veriyordu.

2 farklı komut buldum ancak çalıştıramadım, bu komutun çağırıldığı yere CVS yi indirmesi gerekiyordu ama kullanamadım sanırım:

PHP:
//$cvs_check = exec('cvs -z3 -d:pserver:[email protected]:/cvsroot/deneme co -P script');
$cvs_check = exec('cvs -z3 -d:pserver:[email protected]:/cvsroot/deneme -q -z9 checkout -P script');
sonra da aha bunu salladım:

PHP:
$cvs_check = exec('cvs -z3 -d:pserver:[email protected]:/cvsroot/deneme -q -z9 checkout -P script');

//echo $cvs_check;

$cvs_dir = 'cvs/';

$islem = fopen("$cvs_dir", "ab+");
fwrite($islem, $cvs_check);
fclose($islem);
fopen olmadı, dosya değil dedi, echo da çalışmadı.
 

Angelo

0
İyinet Üyesi
Katılım
13 Aralık 2004
Mesajlar
9,603
Reaction score
111
Konum
AZ
Fopen ile dizin değil, dosya veya URL açabilirsin. Gerçi echo çalışmadıysa dosya açsan da içine yazmayacaktır.
 

Alexis

0
İyinet Üyesi
Katılım
24 Ekim 2005
Mesajlar
678
Reaction score
5
checkout edemedim ki yazayım, cvs komutunu yanlış çağırıyopr olabilirim, edit paremetresi ni de echo ile yazamadım.

ama bu çalışıyor:

echo exec('pwd');

root/home/felan
 

Caesar

0
İyinet Üyesi
Katılım
5 Haziran 2006
Mesajlar
1,894
Reaction score
7
PHP:
print_r($cvs_check);

exec 1 ya da 0 sonucu verir print_r ederek cevab ne geliyor incele. Sanirsam yetki yetmiyor cvs için. Ya da sisteminize cvs kurulumu ona bakin. Yine olmadi exec yerine system() deneyin.
 

Angelo

0
İyinet Üyesi
Katılım
13 Aralık 2004
Mesajlar
9,603
Reaction score
111
Konum
AZ
PHP:
$cvs_check = exec('cvs -.......',$result)

foreach ($result as $rows) {
$output .= $rows;
}

echo $output;
 

Alexis

0
İyinet Üyesi
Katılım
24 Ekim 2005
Mesajlar
678
Reaction score
5
anonim kullanıcı olarak checkout yetkim var, CVS kurulu, çünkü SourceForge de aktif bir proje nin CVS alanı.

print_r + exec => boş sayfa
print_r + shell_exec => boş sayfa
print_r + system => boş sayfa


Angelo'nun verdiği kod da boş sayfa...


Bana verilen shell komutu aynen öyle oysa. Bu komut php de farklı yazılıyor, parametreler farklı yere geliyor olabilir, ya da koddan gelen veriyi basamıyorum.

Basması daha kolay olan bir cvs parametresi olan "editors" parametresi ile çalışmayı deniyorumdum ki, meğer anonim girişe izin yokmuş, checkout ile anonim olarak giriş yapılabilir, ancak bu komut dosyaları indiriyor ki asıl amacım bu.


Zorluk olmasın diye önce ekrana birkaç satırlık bilgiyi bastırmayı denemek için anonim erişimi olan bir komut bulunca geri geleceğim.

------------------------------
Şöyle basit birşey bile boş sayfa.

Kod:
$cvs_check = exec('cvs help',$result);


foreach ($result as $rows) 
{
	$output .= $rows;
}

echo $output;
 

Angelo

0
İyinet Üyesi
Katılım
13 Aralık 2004
Mesajlar
9,603
Reaction score
111
Konum
AZ
Komut olarak 'ls' çalıştır bakalım. Çalışırsa cvs'de, çalışmazsa exec'de problem vardır.
 

Alexis

0
İyinet Üyesi
Katılım
24 Ekim 2005
Mesajlar
678
Reaction score
5
ls, pwd çalıştırıp echo ile sonuçları yazabiliyorum...

local de cvs.exe ile şunu çalıştırdım:

PHP:
$cvs_at_php = "-d :pserver:[email protected]:/cvsroot/deneme";

set_time_limit(0);

$fp = popen("cvs " . $cvs_at_php . " checkout scriptim","r");


local de çalışan tüm komutlar sunucu da çalışmadı, mkdir, chmod, vb hiçbiri çalışmadı.

Kod:
Warning: mkdir(): SAFE MODE Restriction in effect. The script whose uid is 10006 is not allowed to access /var/www/vhosts/xxx owned by uid 48 in /var/www/vhosts/xxx/mkdir.php on line 17

cvs çalışmayınca file_get_contents ile almayı başardım, local de herşey harika, sunucuda hiçbirşey çalışmıyor.
 

Caesar

0
İyinet Üyesi
Katılım
5 Haziran 2006
Mesajlar
1,894
Reaction score
7
safe mod açık exec ile hiç bir işlem yapamazsın.

bunun anlamıda şudur.

/tmp türü dizinler 777 yetki ile şekillendirilir genellikle. Eğer sunucu üzerinden safe mod kapalı tutulup exec calışsa idi.

Az birşey bilen kişiler exec de wget ile tmp klasörüne istedikleri daemonu kurup configure edip çalıştırabilirlerdi, bunu herhangi bir hosttan yapabilirlerdi.

Sorun, güvenlik nedeni ile exec lerin kapalı olması.
 

Angelo

0
İyinet Üyesi
Katılım
13 Aralık 2004
Mesajlar
9,603
Reaction score
111
Konum
AZ
php.ini deki Safe Mode Exec Dir direktifi ile safe mode altında exec türü fonksiyonları kullanabileceğin bir dizini belirtebilirsin.
 

Türkiye’nin ilk webmaster forum sitesi iyinet.com'da forum üyeleri tarafından yapılan tüm paylaşımlardan; Türk Ceza Kanunu’nun 20. Maddesinin, 5651 Sayılı Kanununun 4. maddesinin 2. fıkrasına göre, paylaşım yapan üyeler sorumludur.

Backlink ve Tanıtım Yazısı için iletişime geçmek için Skype Adresimiz: .cid.1580508955483fe5

Üst