rubyforen.de
http://forum.ruby-portal.de/

(Certainly) breaking Change in Ruby 1.9.2
http://forum.ruby-portal.de/viewtopic.php?f=22&t=10093
Seite 1 von 2

Autor:  Skade [ 28 Jul 2009, 15:04 ]
Betreff des Beitrags:  (Certainly) breaking Change in Ruby 1.9.2

Aufgrund der hohen Zahl der Leute die auf dieses Problem stoßen werden gönne ich diese Änderung einen eigenen Thread:

Ab Ruby 1.9.2 ist das Arbeitsverzeichnis (".") nicht mehr standardmässig in $LOAD_PATH enthalten, was dazu führt, dass require Dateien im Ausführungsverzeichnis nicht mehr findet.

Mehr dazu hier:

http://www.ruby-mine.de/2009/7/19/require-in-ruby-1-9-2

Gruß,
Skade

Autor:  murphy [ 31 Dez 2009, 05:57 ]
Betreff des Beitrags:  Re: (Certainly) breaking Change in Ruby 1.9.2

ruby19 -I. :)

Autor:  Skade [ 31 Dez 2009, 11:16 ]
Betreff des Beitrags:  Re: (Certainly) breaking Change in Ruby 1.9.2

Der Tipp steht doch schon in der Ruby-Mine? ;)

Autor:  murphy [ 31 Dez 2009, 13:23 ]
Betreff des Beitrags:  Re: (Certainly) breaking Change in Ruby 1.9.2

Vielleicht nochmal überdeutlich, falls jemand zu faul ist, auf den Link zu klicken.

Was für ein Sicherheitsproblem eigentlich? Ich fand das frühere Verhalten sehr komfortabel...

Übrigends steht in NEWS:
Zitat:
* $: no longer includes the current directory, use require_relative

Autor:  slowjack2k [ 08 Jun 2010, 07:03 ]
Betreff des Beitrags:  Re: (Certainly) breaking Change in Ruby 1.9.2

Ist zwar schon lange her, bin aber leider erst heute über diesen Thread gestolpert.

murphy hat geschrieben:
Was für ein Sicherheitsproblem eigentlich? Ich fand das frühere Verhalten sehr komfortabel...


Das Problem ist das Gleiche, wie mit dem "." in der Path Variable bei Linux.
Es wird das ausführbare Programm (oder in diesem Fall Package) gestartet,
das als erstes in einem der Pfade gefunden wird.

Nehmen wir mal an im Load-Path oder Path steht "." ganz vorne,
dann wird ein Package/Programm aus dem aktuellen Verzeichnis
1.) benutzt
2.) vor den System-Programmen sogar benutzt

Wenn jetzt z.B. root sich gerade in einem User-Verzeichnis befindet
und dort liegt ein manipulierte Ruby-Package oder Binary, dann
wird dieses benutzt statt dem gewünschten und es würde mit
root-Rechten ausgeführt werden.

Autor:  J-_-L [ 05 Jul 2010, 20:24 ]
Betreff des Beitrags:  Re: (Certainly) breaking Change in Ruby 1.9.2

Jetzt gibts für diesen Zwecke require_relative

Autor:  Skade [ 05 Jul 2010, 21:32 ]
Betreff des Beitrags:  Re: (Certainly) breaking Change in Ruby 1.9.2

require_relative required aber relativ zu File.dirname(__FILE__). Das ist schon noch was anderes.

Gruß,
Skade

Autor:  J-_-L [ 06 Jul 2010, 08:54 ]
Betreff des Beitrags:  Re: (Certainly) breaking Change in Ruby 1.9.2

Skade hat geschrieben:
require_relative required aber relativ zu File.dirname(__FILE__). Das ist schon noch was anderes.

Gruß,
Skade


jop, stimmt.

Autor:  Skade [ 06 Jul 2010, 09:43 ]
Betreff des Beitrags:  Re: (Certainly) breaking Change in Ruby 1.9.2

slowjack2k hat geschrieben:
Ist zwar schon lange her, bin aber leider erst heute über diesen Thread gestolpert.

murphy hat geschrieben:
Was für ein Sicherheitsproblem eigentlich? Ich fand das frühere Verhalten sehr komfortabel...


Das Problem ist das Gleiche, wie mit dem "." in der Path Variable bei Linux.
Es wird das ausführbare Programm (oder in diesem Fall Package) gestartet,
das als erstes in einem der Pfade gefunden wird.

Nehmen wir mal an im Load-Path oder Path steht "." ganz vorne,
dann wird ein Package/Programm aus dem aktuellen Verzeichnis
1.) benutzt
2.) vor den System-Programmen sogar benutzt

Wenn jetzt z.B. root sich gerade in einem User-Verzeichnis befindet
und dort liegt ein manipulierte Ruby-Package oder Binary, dann
wird dieses benutzt statt dem gewünschten und es würde mit
root-Rechten ausgeführt werden.


Um das ganze noch etwas gefährlicher zu machen: man nehme ein Skript, das mit erhöhten Rechten läuft (z.B.... ein Webserver). Dann kann der User selbst das laden dieser Datei veranlassen.

Nun reicht das noch nicht ganz für einen Angriff: "." steht meist am Ende des $LOAD_PATH, womit ich sicher sein kann, das Dateien erst aus allen anderen Verzeichnissen geladen werden. Der User kann also nicht einfach eine Datei in seinem Verzeichnis anlegen und damit eine andere "überschreiben".

Allerdings unterstützten inzwischen viele Ruby-Bibliotheken Autoloading von undefinierten Konstanten. Wenn der User also dafür sorgen kann, dass eine Konstante geladen wird, die nirgendswo sonst im $LOAD_PATH eine Entsprechung hat, wird die Datei von seinem Userverzeichnis geladen. Auch das ist noch mittelmässig unwahrscheinlich (aber zu beachten).

Problematisch wird die Sache, wenn man weiss, dass Encoding-Definitionen unter Umständen vom Interpreter selbst lazy nachgeladen werden. Insofern braucht man "nur" dafür zu sorgen, dass der Interpreter ein Encoding läd, das nirgendwo definiert ist, ausser im Userverzeichnis.

Es ist ziemlich durch die Brust ins Auge, aber ein Vektor über den man Schindluder treiben kann. Allerdings wirklich nur in Umgebungen, in denen man erhöhte Rechte hat und das Encoding selbst angeben kann. (übrigens noch ein Grund, $RUBY_OPTS auf "kU" zu stellen, dann geht das nämlich nur, wenn man sowas vorgesehen hat)

Gruß,
Skade

Autor:  thodt [ 20 Aug 2011, 03:37 ]
Betreff des Beitrags:  Re: (Certainly) breaking Change in Ruby 1.9.2

Sorry für die dumme Frage aber ich versuche schon die halbe Nacht herauszufinden, was den nun der beste Weg ist. Hab schon im englischen Forum gelesen und es scheint ja viele verschiedene Möglichkeiten zu geben.

ruby -I.
$LOAD_PATH << "."
require_relative

Funktioniert alles. Was nimmt man den am besten? (sollte natürlich auch funktionieren, wen man das Programm am Ende als Gem baut)

Autor:  Quintus [ 20 Aug 2011, 12:10 ]
Betreff des Beitrags:  Re: (Certainly) breaking Change in Ruby 1.9.2

thodt hat geschrieben:
ruby -I.
$LOAD_PATH << "."
require_relative
Die ersten beiden Möglichkeiten sind identisch, sie fügen das aktuelle Arbeitsverzeichnis an die Liste der Verzeichnisse an, in denen Ruby bei einem Aufruf von #require nach Dateien sucht. Das geht solange gut, wie du deine Skripte aus demselben Verzeichnis startest, in dem das Skript liegt, aber sobald das nicht mehr der Fall ist (etwa, weil das Programm über die Umgebungsvariable PATH gefunden wird), läufst du damit auf.
Um wirklich relativ zur aktuellen Datei zu requiren, ist in 1.9 #require_relative entworfen worden. Für 1.8 musst du auf dieses Idiom zurückgreifen:


require File.join(File.expand_path(File.dirname(__FILE__)), "datei")
Da ich keinen Wert auf 1.8-Kompatibilität lege, verwende ich eigentlich immer #require_relative.

Vale,
Quintus

Autor:  sig [ 14 Okt 2011, 14:26 ]
Betreff des Beitrags:  Re: (Certainly) breaking Change in Ruby 1.9.2

Schön, Skade ... :)

was würde das für Windows bedeuten? Hab nämlich grade Ruby 1.9 auf win 7 eingerichtet und wollte unter easyeclipse testen - findet auch 'require' nicht... Dann liegt das wohl an Ver. 1.9, hm?
Schade, Skade. :D
Wir müssen umdenken ... (Helge-Film: Texas ...) :P

Suag, sig.

Skade hat geschrieben:
Aufgrund der hohen Zahl der Leute die auf dieses Problem stoßen werden gönne ich diese Änderung einen eigenen Thread:

Ab Ruby 1.9.2 ist das Arbeitsverzeichnis (".") nicht mehr standardmässig in $LOAD_PATH enthalten, was dazu führt, dass require Dateien im Ausführungsverzeichnis nicht mehr findet.

Mehr dazu hier:

http://www.ruby-mine.de/2009/7/19/require-in-ruby-1-9-2

Gruß,
Skade

Autor:  Quintus [ 14 Okt 2011, 15:08 ]
Betreff des Beitrags:  Re: (Certainly) breaking Change in Ruby 1.9.2

sig hat geschrieben:
was würde das für Windows bedeuten? Hab nämlich grade Ruby 1.9 auf win 7 eingerichtet und wollte unter easyeclipse testen - findet auch 'require' nicht...
Es bedeutet für Windows genau dasselbe wie für jedes andere System auch. Relativ zu deinem Verzeichnis musst du entweder mit #require_relative arbeiten oder "." deinem $: hinzufügen.

sig hat geschrieben:
Dann liegt das wohl an Ver. 1.9, hm?
Ein für alle mal: Ruby 1.8 ist am Ende! Das ist sogar von offizieller Seite endgültig bestätigt: http://www.ruby-lang.org/de/news/2011/10/11/plne-fr-1-8-7/

Vale,
Quintus

Autor:  sig [ 18 Okt 2011, 02:57 ]
Betreff des Beitrags:  Re: (Certainly) breaking Change in Ruby 1.9.2

Ave Quintus, :)

viel Spaß auf der Studienfahrt - einen McIntyre auf dein Wohl! :D Hoffe, es gibt genügend "gesunde Weibchen im gebärfähigen Alter..." :P (Zitat aus Terminator 3)
Ehm, wie genau müsste ich das dingsbums - äh - #require_relative einbinden bzw. den . ?
Dann könnte ich evtl. den 1.8er - Kurs auch mit dem 1.9er fortsetzen...
Wenn ich mal Zeit hab, werd ich auch mal Arch testen - das neue Ubuntu läuft etwas lahm - zumindest auf der Virtualbox ... kein gnome mehr - muss man evtl. auf kde ausweichen... oder linux mint - ... od. nur für ruby arch einrichten - auch ne gute Idee. Hast mein Interesse geweckt. :wink:
- Ahja, euer rpg-maker braucht ja sicherlich auch eine Startmelodie o.ä. ... habt ihr schon was? Ich bin Musiker... also damit könnt ich sogar als Nuby aushelfen. Evtl. wie Terminator: parra-pamm-paramm ... :lol:
Soundbearbeitung in ruby muss ich allerdings erst lernen...
Aber irgendwann ...

OK, salut,
sig. 8)




Quintus hat geschrieben:
sig hat geschrieben:
was würde das für Windows bedeuten? Hab nämlich grade Ruby 1.9 auf win 7 eingerichtet und wollte unter easyeclipse testen - findet auch 'require' nicht...
Es bedeutet für Windows genau dasselbe wie für jedes andere System auch. Relativ zu deinem Verzeichnis musst du entweder mit #require_relative arbeiten oder "." deinem $: hinzufügen.

sig hat geschrieben:
Dann liegt das wohl an Ver. 1.9, hm?
Ein für alle mal: Ruby 1.8 ist am Ende! Das ist sogar von offizieller Seite endgültig bestätigt: http://www.ruby-lang.org/de/news/2011/10/11/plne-fr-1-8-7/

Vale,
Quintus

Autor:  Quintus [ 22 Okt 2011, 12:27 ]
Betreff des Beitrags:  Re: (Certainly) breaking Change in Ruby 1.9.2

sig hat geschrieben:
Ehm, wie genau müsste ich das dingsbums - äh - #require_relative einbinden bzw. den . ?
Vale,
Quintus

Seite 1 von 2 Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/