Session variablen an Shellscript übergeben
Peter Pan
- php
Hallo @all
Ich schreibe gerade eine Userverwaltung die htaccess nutzt.
Um die Sicherheit der htpasswd sicherzustellen würde ich gerne ein shellscript (php) einsetzten um über sudo die rechte zuzuweisen.
Mein shellscript läuft auch schon nur trägt es den benutzter namen und das kennwort nicht ein.
(es wird immer ein leerer name und ein leeres "" password verschlüßelt in die htpasswd eingetragen.)
Den fehler habe ich schongefunden die variablen sind leer.
jetzt meine frage: wie bekomme ich es hin das das shellscript auf die sessionwerte zugreifen kann oder ich die benötigten werte mit übergeben kann?
das shellscript wird über
$meldung=shell_exec("/var/www/sbin/useradd.php 2>&1");
aufgerufen.
in $meldung sind die rückgabe werte.
über jede hilfe dankbar
Peter Pan
Holladiewaldfee,
das shellscript wird über
$meldung=shell_exec("/var/www/sbin/useradd.php 2>&1");
aufgerufen.
Du kannst z.B. den Aufruf abändern:
shell_exec("/var/www/sbin/useradd.php session=".serialize($_SESSION)." 2>&1");
Kann sein, daß Du den serialisierten Wert noch irgendwie codieren mußt, um die Shell nicht zu verwirren.
In Deinem Script frägst Du die Parameter mit $argc und dem Array $argv ab. In diesem Fall müsstest Du mit
$_SESSION = unserialize($argv[1]);
die Session-Variablen wieder herbekommen. Wenn Du den Kram codiert hast mußt Du ihn natürlich vor dem unserialize wieder dekodieren.
Ciao,
Harry
Hallo Harry und erst einmal danke für die schnelle hilfe.
das shellscript wird über
$meldung=shell_exec("/var/www/sbin/useradd.php 2>&1");
aufgerufen.Du kannst z.B. den Aufruf abändern:
shell_exec("/var/www/sbin/useradd.php session=".serialize($_SESSION)." 2>&1");
ok was serialize macht ist klar und was unserialize macht auch.
string serialize ( mixed value)
bei dir ja session=serialize($_SESSION)
Kann sein, daß Du den serialisierten Wert noch irgendwie codieren mußt, um die Shell nicht zu verwirren.
In Deinem Script frägst Du die Parameter mit $argc und dem Array $argv ab. In diesem Fall müsstest Du mit
$_SESSION = unserialize($argv[1]);
wenn ich das mache erhalte ich keine ausgabe mehr von meinem script.
und es wird auch nichts mehr in die htpasswd geschrieben.
die variablen $argc und das array $argv sind leer.
die Session-Variablen wieder herbekommen. Wenn Du den Kram codiert hast mußt Du ihn natürlich vor dem unserialize wieder dekodieren.
»»
nein die daten sind nicht codiert.
wenn du noch eine idee haben solltest würde ich mich freuen sonst muß ich das wohl oder übel in perl schreiben,
oder eine andere txt datei wo der name und password gespeichert sind,
und von dem script gelesen verarbeitet und gelöscht wird.
Ciao,
Harry
Peter Pan
Holladiewaldfee,
wenn ich das mache erhalte ich keine ausgabe mehr von meinem script.
Mäh?
Gibt's auch'n Grund dafür?
und es wird auch nichts mehr in die htpasswd geschrieben.
die variablen $argc und das array $argv sind leer.
Schonmal in die php.ini geschaut, ob da register_argv_argc (oder so ähnlich) aktiviert ist?
die Session-Variablen wieder herbekommen. Wenn Du den Kram codiert hast mußt Du ihn natürlich vor dem unserialize wieder dekodieren.
»»
nein die daten sind nicht codiert.
Ich meinte, es kann sein, daß Du die Daten codieren mußt, weil im serialisierten String evtl. Zeichen drin sind, die die Shell beim Aufruf Deines Skriptes etwas durcheinander bringen können.
Also etwas in der Art
shell_exec('blubb.php session='.codier_mich(serialize($_SESSION)).' 2>&1');
Und dann
$_SESSION = unserialize(decodiert_mich($argv[1]));
Weißt scho ;)
Es kann gut sein, daß Dein Script deswegen rumspinnt.
Ciao,
Harry
Hallo again
wenn ich das mache erhalte ich keine ausgabe mehr von meinem script.
Mäh?
Gibt's auch'n Grund dafür?
Das weiß ich leider nicht.
Schonmal in die php.ini geschaut, ob da register_argv_argc (oder so ähnlich) aktiviert ist?
Ja ist aktiviert
Es kann gut sein, daß Dein Script deswegen rumspinnt.
denke ich nicht habe aber jetzt einen hilfreichen tip bekommen mit dem es geht.
$meldung=shell_exec("/var/www/sbin/useradd.php ($_SESSION[var1]) ($_SESSION[var2]) 2>&1");
somit bekomme ich die werte übergeben.
$_SERVER[argv] liefert dann auch die werte zurück.
Danke für deine hilfe
pETER