Moodleに関連する研究を行っている大和と言います。
Moodleが標準で持っているmnetの機能を利用して、外部からXML-RPCによりMoodleを操作しようと考えています。
$CFG->mnet_dispatcher_mode = 'dangerous';
として、XML-RPCを利用したところ、エラーが出てしまいました。
そこでMoodleのソースコードを確認してみたところ、バグらしき点を見つけました。
確認したのは1.9.2+ (Build: 20081002)です。
mnet/xmlrpc/server.php の 504行目ですが
$includefile = $CFG->dirroot.'/'.$filename;
となっているところがありますが、正しくは
$includefile = '/'.$filename;
こうだと思われます。
この$includefileが使われているところをたどっていくと
506行目のmnet_server_invoke_methodに入り、
691行目のmnet_permit_rpc_callに入ります。
これは/mnet/lib.php にある関数です。
lib.phpの 414行目で、わたってきた$includefileがあるかどうかを確認します。
そのときに、file_existsの中で$CFG->dirrootが付け加えられて調べられます。
バグの箇所で一度付け加えられた上に、もう一度ここでつけられて
/home/.../moodle/home/.../moodle/filename
のようなパスを探そうとして、RPC_NOSUCHFILEのエラーになってしまっています。
どなたか、この問題をご存知の方、いらっしゃいませんか?