|
>>2977 UMA > システムコールをhookして安全性を云々というのは、 はい、そういうものを念頭に置いていました (が、ユーザランドで できたらいいなと。無理なのかな)。 Systrace の存在は知りませんでしたが、これはとてもいいですねぇ。 素晴らしいです。 >>2978 UMA 68user's page で X68000 の疑問が解決したことは一度もなかったりします。 インタフェースって API ですか? (ではなさそうな気がしますが)。僕が記憶に 頼って書くと多分間違っているので、X68000 エミュレータ関係の掲示板で 聞くのが早いと思います。 >>2980 ふくし まーいろいろありますが、がんばってインストールしてください。 あと、libwww-perl あたりもいれなきゃいけないのが perl の XML モジュールのうざいところ。 |
|
>>2973 68user様 お返事ありがとうございます.kikiです. 丁寧なご説明ありがとうございました. おかげで理解できました.ありがとうございます. |
|
いつも忘れて調べなおすはめにおちいるのでここにメモメモ。 TeraTerm 経由の mule などで PageUp が効かない場合、 Windows\Program Files\TTERMPRO\KEYBOARD.CNF の Remove=329 を ; でコメントアウトし、その下に User1=329 を追加。さらにファイルの一番最後に User1=329,0,$1B[5~ を追加。 って、ちょっと検索してみたら、 http://phe.phyas.aichi-edu.ac.jp/~cyamauch/mule.html の対処と全然違ってますな。なんでアレで PageUp できるんだろう。 |
|
OS: Solaris 2.5.1 プロセスの通知にシグナルを使っています。 これまで、SIGUSR1とSIGUSR2で間に合っていたのですが、 今回もう一つパターンの追加(SIGUSR3?)を行いたいのです。 そこで、質問なのですが <signal.h>にシグナルを追加できるのでしょうか? また、出来るとしたら注意しないといけない点や 影響を及ぼす範囲を教えて下さい。 よろしくお願いします。 |
|
>>2984 SIGNAL シグナルの追加はカーネルを書き換えないと無理です。 シグナル以外の方法 (パイプ・共有メモリなど) で情報のやりとり をするのが正解でしょう。 と偉そうなことをいってますが、シグナルが足りず SIGXCPU を 使って逃げたことはあります。 |
|
親プロセスでforkした子プロセスの終了状態(終了コード)を、親プロセス が認識する方法があれば情報提供をお願いします。 ・親プロセスはwaitしません。 ・子プロセスは同じものが複数生成されます。(順次生成) ファイルへ子プロセスの結果を出力して親プロセスが参照したり、パイプ や共有メモリを使用してのプロセス間通信などの方法があるかと思いますが、子プロセスにはできる限り修正を加えない方法を探しています。 理想は子プロセスの終了時にイベントが発生し、waitのように変数に結果 が格納されるようなものです。 |
|
>>2986 koko > ファイルへ子プロセスの結果を出力して親プロセスが参照したり、パイプ > や共有メモリを使用してのプロセス間通信などの方法があるかと思いますが、 の方法を取らないのであれば、無理なんじゃないでしょうか。 |
|
>>2986 koko > ・親プロセスはwaitしません。 親でSIGCHLDを拾ってwaitpid()のオプションWNOHANGで チェックするのもダメですか? --- snip --- #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <signal.h> #include <time.h> #include <sys/wait.h> void handler(int sig) { int pid,status,code; while((pid=waitpid(-1,&status,WNOHANG))>0) { if(WIFEXITED(status)) { code = WEXITSTATUS(status); printf("child process:[%d] was exited with code:[%d]\n",pid,code); } } } int main(int argc,char *argv[]) { int i,pid,code; char buf[16]; struct sigaction sa; if(argc>1) { code = atoi(argv[1]); srand(code+time(0)); sleep(rand()%10); return code; } memset(&sa,0,sizeof(sa)); sa.sa_flags = SA_NOCLDSTOP; sa.sa_handler = handler; sigaction(SIGCHLD,&sa,0); for(i=0;i<10;i++) { if((pid=fork())<0) { perror("fork"); return -1; } if(pid) continue; sprintf(buf,"%d",i); if(execl("./a.out","./a.out",buf,0)<0) { perror("execl"); return -2; } } for(;;) sleep(1); return 0; /* never reaches */ } --- snip --- かなり適当ですが。 |
|
>>2988 hsj 他のHPを調査をしている中で「waitpidで子プロセスの終了コードが取得できれば解決できそうだ。」というのは私も感じました。 試してみたいと思います。 >>2987 68user 今回は、既存の子プロセス側のソースコードにできるだけ手を入れないという条件があるのですが、良い案がない場合にはやはりパイプを使用する事に なるかと思います。 ご回答頂き、ありがとうございました。 |
|
>>2986 koko > ・親プロセスはwaitしません。 ってのは親プロセスにも手を入れたくないという意味かと思った のですが、wait でブロックさせたくないという意図だったのですね。 読み違えておりました。 |
|
こんにちは 質問があってきました Perlを使っていると system関数やexec関数を使うようになりました 便利でとてもよいのですが Root権限でコマンドが実行されているような気がします くわしくはまだ確認していません。 また、CGIでファイルマネージャーを使っていますが これも同じようにパスワードファイルなどを開かれるという欠点があります 全ディレクトリやファイルのパーミッションを000にすることはもちろんできませんし 一部だけのパーミッション設定もだめです 例)/homeを000にするが/home/userが777だとアクセスされてしまう これらのことからセキュリティーホールとなっていてとても不安です これらについての対処法はなにかないでしょうか? |
|
>>2991 Japper > Root権限でコマンドが実行されているような気がします perl スクリプト中で print "$<\n"; print "$>\n"; の結果のいずれかが 0 なら root 権限を得ています (が、おそらくは 勘違いではないかと思います)。 > これも同じようにパスワードファイルなどを開かれるという欠点があります 書きかけですが、 http://x68000.startshop.co.jp/~68user/webcgi/cryptogram.html が参考になるかもしれません。 |
|
初めまして!YAHOO!オークションのログインをプログラムで実行したいのですが、上手くいきません。ブラウザでの通信のlogをとり、プログラムを組んでいたのですが、どうしてもPOSTした後の3種類のクッキーがとれ ないのです。上手くいけば下のような3種類のクッキー(個人情報なので***になっています)が返されるのですが、 ・・・・・・・・・・ブラウザのlog・・・・・・・・・ <ブラウザのPOST> POST /config/login?5934sjuoe8ci4 HTTP/1.0 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */* Referer: http://login.yahoo.co.jp/config/login?.lg=jp&.intl=jp&.src=auc&.last=http:%2f%2flogin.yahoo.co.jp%2fconfig%2fedit_auc&.done=http:%2f%2fuser.auctions.yahoo.co.jp/jp/show/mystatus&reason=notloggedin Accept-Language: ja Content-Type: application/x-www-form-urlencoded Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0) Host: login.yahoo.co.jp Content-Length: 259 Pragma: no-cache Cookie: B=cv85agsv02md9&b=2 Connection: keep-alive Browser reload detected... Posting 259 bytes... .tries=1 .src=auc .last=http%3A%2F%2Flogin.yahoo.co.jp%2Fconfig%2Fedit_auc promo= .intl=jp .bypass= .partner= .u=cq4ce2ov02mdi .v=0 .fUpdate=Y hasMsgr=0 .chkP=Y .done=http%3A%2F%2Fuser.auctions.yahoo.co.jp%2Fjp%2Fshow%2Fmystatus login=******** passwd=*********** <レスポンス> HTTP/1.1 302 Found Date: Thu, 19 Dec 2002 05:31:58 GMT P3P: policyref="http://privacy.yahoo.co.jp/w3c/p3p.xml", CP="CAO DSP COR CUR ADM DEV TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE GOV" Location: http://login.yahoo.co.jp/config/verify?.done=http%3a//user.auctions.yahoo.co.jp/jp/show/mystatus Connection: close Transfer-Encoding: chunked Content-Type: text/html; charset=euc-jp Set-Cookie:**** Set-Cookie:**** Set-Cookie:**** ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ このセッションがどうしても上手くいかず、3種のset-cookie が取得できないのです。大変お忙しい中恐縮ですが、もしよろしければ、アドバイスをよろしくお願いします。とても見せれるプログラムではありませ んが、下記に示します。 try{ URL u = new URL("http://login.yahoo.co.jp/config/login?5934sjuoe8ci4"); URLConnection uc = u.openConnection(); uc.setRequestProperty("Cookie:","B=cv85agsv02md9&b=2); uc.setDoOutput(true); uc.setDoInput(true); OutputStreamWriter out = new OutputStreamWriter(uc.getOutputStream(), "EUC_JP"); query.Encode3(".tries","1"); query.Encode1(".src","auc"); query.Encode1(".last","http://login.yahoo.co.jp/config/edit_auc"); query.Encode1("promo",""); *query.Encode()はクエリー文字列にするための関数です。 query.Encode1(".intl","jp"); query.Encode1(".bypass",""); query.Encode1(".partner",""); query.Encode1(".u",data2); query.Encode1(".v","0"); query.Encode1(".fUpdate","Y"); query.Encode1("hasMsgr","0"); query.Encode1(".chkP","Y"); query.Encode1(".done","http://user.auctions.yahoo.co.jp/jp/show/mystatus"); query.Encode1("login",ID); query.Encode1("passwd",PW); out.write(query.toString()); out.write("\r\n"); out.flush(); out.close(); /////////////(1)////////////////////////////// for (int j = 0; ; j++) { String header = uc.getHeaderField(j); if (header == null) break; System.out.println(uc.getHeaderFieldKey(j) + ": " + header); } } catch (Exception a) { System.err.println(a); } ちなみに(1)で出力されたヘッダ情報は null: HTTP/1.1 200 OK Date: Thu, 19 Dec 2002 07:16:58 GMT Refresh: 900; URL=http://www.yahoo.co.jp/ Cache-Control: private Pragma: no-cache Expires: Thu, 05 Jan 1995 22:00:00 GMT Connection: close Transfer-Encoding: chunked Content-Type: text/html; charset=euc-jp Set-Cookie: B=el2pemcv02sja&b=2; expires=Thu, 15 Apr 2010 20:00:00 GMT; path=/; domain=.yahoo.co.jp 上記のレスポンスを取得してしまい、クッキーが取得できずに先に進めないのです。長くなってしまい、大変ご迷惑をお掛けしますがよろしくお願い致します。 では、失礼します。 |
|
>>2993 ruku いったん/cofig/loginをGETしてCookieと/cofig/login?以降の文字列と .uの値を取得し、それらの値をセットしたうえでユーザIDとパスワードを POSTすれば行けるんじゃないでしょうか。 この手のwebアプリはログイン後の画面ではCookieだけでなく、 それ以外の手段でもユーザを一意に識別する何らかの値を持ちまわらせ、 Cookieの(そのものでなく大抵はセッションオブジェクトなりDBなりに 入れた)値とのクロスチェックでユーザを認証している場合があります。 YAHOO!オークションがどうなっているかは知りませんが、 その手の仕組みが組み込まれているんじゃないでしょうか。 |
|
>>2993 ruku うまくいかないときのアプローチとしては、まずはやっぱり telnet とか Socket で直接つなぐ方がいいんじゃないでしょうかね。 アクセスに成功する QUERY は知っているし、失敗する QUERY も 知っているわけで (よくわかってませんが、OutputStreamWriter に 細工をすればリクエストの生データが取れるんですよね? ) その 2つの内容をつきあわせて一つ一つチェックすると。ないとは 思いますが、もしかしたら USER_AGENT で制限かけてたりする かもしれませんし。 |
|
おひさしぶりです。kikiです。前回はお世話になりました。 今回もお聞きしたいことがあり、書き込ませていただきました。 今、私はbash(2.04)をいじって、以下のことが したいと思っているのです。それは 1.コマンドが実行された時間をそのコマンド履歴といっしょに 特定のファイルに出力する。(.bash_historyに タイムスタンプをつける感じです。 2.特定のファイルにコマンド履歴が追加されるタイミングを そのコマンドが打ち込まれた直後になるようにする。 このようなことはbashのソースを書き換えればできるのでしょうか? どうかご教授をよろしくお願い致します。 P.S. history -w の様なことを自動的にできればいいのですが、 historyコマンドは、シェル自身のコマンドなので無理でしょうし。 うーん。 |
|
>>2994 hsj 貴重なアドバイスありがとうございます。いちおう.uやcookieの値はお書きしたプログラムの前で取得しているので問題はないと思うのですが・・・。これがなかなか上手くいかないのです。 >>2995 68user ソケットで試してみます。貴重なアドバイスありがとうございました。 |