68user's page 掲示板

Prev< No. 1483〜1509> Next  [最新発言に戻る] [過去ログ一覧]
No. 1483 # rosegarden 2000/12/20 (水) 03:03:40
>>1480 参照
>今の所。4-stable は DES 入れると有無を言わさず DES みたいですね。
ちょっと調べて見たら、意外に以前のバージョンで変更されていますね。
知らなかった。

green 2000/08/21 19:15:54 PDT

    Modified files:
(略)
        usr.bin/passwd local_passwd.c
        usr.sbin/pw Makefile pw_user.c
    Log:
    Add working and easy crypt(3)-switching. Yes, we need a whole new API
    for crypt(3) by now. In any case:
    
    Add crypt_set_format(3) + documentation to -lcrypt.
    Add login_setcryptfmt(3) + documentation to -lutil.
    Support for switching crypt formats in passwd(8).
    Support for switching crypt formats in pw(8).
    
    The simple synopsis is:
    edit login.conf; add a passwd_format field set to "des" or "md5"; go nuts :)
    
    Reviewed by: peter

ちなみに RELENG_4 だと変更のタイムスタンプは 2000/09/20 04:19:56 PDT
見たいですね。ちょうど、4.1.1-RELEASE のでる前後ですね。

>>1482 68user さん
>4.2-BETA (make world しなきゃな〜) のソースを見た限りでは
>よくわからなかったのですが、切り替え用ライブラリ関数とは
>どれのことでしょうか?
答えは上の commitlog を御覧ください。crypt_set_format ですね。

No. 1484 # SabaCurry [E-mail] 2000/12/20 (水) 07:40:04
失礼しました。転送メールがうまくいってない(?除名された?
みたいなので

よければ、こちらの方にURLを教えていただけないでしょうか?

久々にセガの過去ログなど見て、懐かしさにひたってしまいました。

No. 1485 # ぷに辻 2000/12/20 (水) 10:34:25
>>1477 gixs
>>1478 68user
gixsさん、68userさんありがとうございました。
> md5 より crypt+md5 の方が、salt という仕組みがある分
> 強固ではないかと思います。推測にしか過ぎませんが。

なるほど。では全部のスクリプトcrypt+md5に変えようと思います。

# gixsさんのは難しすぎて僕には分かりませんでした(汗)

No. 1486 # gixs 2000/12/20 (水) 20:42:12
> # gixsさんのは難しすぎて僕には分かりませんでした(汗)
説明する側の落度です。精進します。

>> md5 より crypt+md5 の方が、salt という仕組みがある分
>> 強固ではないかと思います。推測にしか過ぎませんが。
正しいと思います。
下のぼくの(分かりにくい)説明は、crypt+des vs. crypt+md5の話です。
結論は、パスワード長が同じなら辞書アタックに対する強度に差はないだろう、ということです。
saltありなしに関する余談は・・・、また分からないと言われるのが恐いので止めます。

No. 1487 # 68user 2000/12/21 (木) 01:41:19
>>1483 rosegarden
> システム全体では、切替え用のライブラリ関数もあって
なるほど。crypt(3) の切り替えではなく、passwd(1)/pw(1) で
使用される crypt ライブラリのフレームワークが追加された
ということですね。

> perl が FreeBSD の切替えメカニズムに追従できていないようなんです。
> それともできるのかな?
perl も libutil 使えばいいのにってことでしょうか。
でも #ifdef __FreeBSD__ を埋めこむようなものなので
(埋めこまないけど、意味としては同じ)、仕組みとしては
美しくないですねぇ。

ここらへんのもどかしさが
    Yes, we need a whole new API for crypt(3) by now.
と言わせるのでしょうか。

> スクリプトレベルでの切替え法を教わりたいです。
安直ですが、MD5 っぽい salt を渡すのはどうでしょう。
    % perl -e 'print crypt("secret","salt")."\n"'
    saHW9GdxihkGQ (DES)
    % perl -e 'print crypt("secret","\$1\$salt\$")."\n"'
    $1$salt$ez2vlPGdaLYkJam5pWs/Y1 (MD5)

>>1484 SabaCurry
> よければ、こちらの方にURLを教えていただけないでしょうか?
はい、後ほど送ります。

No. 1488 # Qさいとう [E-mail] 2000/12/21 (木) 16:23:39
マルチプロセスがよく分かっていませんので お願いします ...
今fork関数を使い,二つのプロセス, 1)表示画面にイヴェントが発生したら処理するプロセスと 2)時間監視を行っているプロセス  を作成しました. 2)は,ある時間の条件でXtOpenDisplayでメッセージ画面が表示し,OKボタンが押させるか画面右上のXボタンが押されると,メッセージ画面が消えます.しかし,メッセージ画面が複数個,表示されるのに,一画面を消去するだけで,全てのメーッセージ画面が消去されてしまいます. その為,複数プロセスにしよう ー 3つのメッセージ画面が表示されたら,3つのプロセスが
動いている − フ゜ロク゛ラムを作成中なのですが,3つ出力されればいいのに6つ(3つx2回)出力されたり,.... 何か簡単に作成できる方法はないでしょうか? execl命令などを使わずに簡単にできませんでしょうか.

赤色の文字は 「Windows 機種依存文字」か、いわゆる「半角カナ」です。 この掲示板では自動変換されますが、今後は使用しないで下さい

No. 1489 # rosegarden 2000/12/21 (木) 17:43:28
>>1487 68user さん
>安直ですが、MD5 っぽい salt を渡すのはどうでしょう
なるほど、salt をかえればいいんですね。言われて見れば、
確かにそうですね。もっとも、言われるまでは気が付きませんでしたが。
どうもありがとうございました。

No. 1490 # 68user 2000/12/21 (木) 21:47:15
>>1488 Qさいとう
> 今fork関数を使い,二つのプロセス,
>  1)表示画面にイヴェントが発生したら処理するプロセスと
>  2) 時間監視を行っているプロセス
> を作成しました.
X サーバとの通信の実態は、ソケット経由でのデータのやりとりです。
大抵は (同一ホスト内なら) /tmp/.X11-unix/X0 経由です。
# つまり UNIX ドメインソケットを使う。

で、ソケットを作成したあと fork して、複数のプロセスが
ソケット共有するのは多分うまくいかないでしょう。
# そういう構成であるとは書いてありませんので推測ですが。

クライアント→サーバは OK かもしれませんが、サーバ→
クライアントのデータは親プロセスか子プロセスのどちらに
渡るかが決まっていないからです。

というわけで、そもそも構成がまずいと思います。1プロセスで
できませんか? Xt は知らないのですが、何かコールバック関数を
登録できる仕組みがあると思います。

仮に複数プロセスでやるとしても、X サーバと接続する前に
fork して、片方は X サーバとの通信、もう片方は監視などと
役割分担し、両プロセスの間はパイプやシグナルやソケット経由で
やりとりすべきでしょう。

>>1487 68user
>> よければ、こちらの方にURLを教えていただけないでしょうか?
> はい、後ほど送ります。
あ、まだ送ってなかったかもしれない。今日明日はちょっと
無理かもしれないので、すいませんが気長にお待ちくださいませ。

No. 1491 # 酒井 [E-mail] 2000/12/22 (金) 17:53:48
「UNIXの部屋」で

telnet リモートホストにログインする  という項目がありました。


ここで 自動的にログインし、自動的にコマンドを実行するには sleep の項のサンプルを参照。
                (コマンド sleep *)

とありますが、sleepの項では、下記のようになってます。


                sleep 指定秒数だけ動作を止める
                5分間 (300秒) 動作停止するには

                % sleep 300

                とする。sleep コマンドは、スクリプトの中で使うことが多い。

                % ( echo username ; sleep 1 ; echo password ; sleep 1 ; echo ls ; sleep 1 ) | telnet foo.bar.com

                なんてこともできたりする。

                (日本語マニュアル sleep)


実際に自動的にログインし、自動的にコマンドを実行したい場合はどうすれがいいのでしょうか


誠に勝手なお願いですが、ぜひ教えてください。

No. 1492 # 68user 2000/12/23 (土) 14:13:45
>>1491 酒井
> 実際に自動的にログインし、自動的にコマンドを実行したい場合は
> どうすれがいいのでしょうか
そこに書いてある
    % ( echo ... sleep 1 ) | telnet foo.bar.com
ではダメだったのでしょうか。

まぁ普通は ssh や rsh を使いますね。
    http://X68000.startshop.co.jp/~68user/unix/pickup?keyword=rsh&target=command#rsh
    http://www.jp.FreeBSD.org/QandA/HTML/1576.html

No. 1493 # 68user 2000/12/23 (土) 15:20:34
古い話ですが
>>1380 book
> gcc -c share_test.cc
> ar cr libtestshare.so share_test.o
> ranlib libtestshare.so
> CC test_gcc.cc -L. -ltestshare
gcc に -g オプションを付ければいける、と fj で読んだような
読んでないような。

>>1484 SabaCurry
メールで送りました。

No. 1494 # CoreFighter 2000/12/30 (土) 23:28:20
BIOSの設定画面で、MPSってありますけど
Versionの1.1と1.4の違いってなんでしょうか?

No. 1495 # Abe [E-mail] 2000/12/31 (日) 04:58:45
ある日突然?起動音が出なくなり、サウンドはすべて聞えなくなりました。[リソースの競合に遭遇し、自己流で、[コントロールパネル]-[システム]-
デバイスマネージャー]より、「はてなマーク」のものを削除して、
[サウンド関連のデバイス]を手動設定変更し、競合を避けることができ、
デスクトップ右下にスピカーが表示され音が出るようになったのですが、
再起動するたびに、「PCI Universal Sirial Bus」の入手案内が表示され、キャンセルボタンを押してからでないと、正常に作動を開始しません。起動の度に案内画面が出ないようにするにはどうすればよいでしょうか?

No. 1496 # アイスクリーム [URL] 2001/01/03 (水) 08:34:43
    チャトって、どこですか???

No. 1497 # ふくし 2001/01/03 (水) 20:06:29
あけましておめでとうございます。本年もよろしくお願いします。
別のことをやっていて偶然発見したんですが、

------------------------------ foo
#! perl
use strict;

my $n = 17; # 普通の変数
print "---> $\$n\n"; # リファレンスしていきなりデリファレンス

------------------------------
% perl -w foo
Use of uninitialized value in concatenation (.) or string at foo line 5.
---> 17

結果は確かに出てるんだけど、なんかundefの変数を二重引用符に入れたときと同じ
警告メッセージが出ます。これはなぜでしょう?

No. 1498 # mm 2001/01/03 (水) 22:29:52
>結果は確かに出てるんだけど、
↓を試してみて下さい。
my $n = 17; # 普通の変数
$\ = '<OUTPUT RECODE SEPARATOR>';
print "---> $\$n\n"; # リファレンスしていきなりデリファレンス

↓こっちも
my $n = 17; # 普通の変数
print "---> ${\$n}\n"; # リファレンスしていきなりデリファレンス

No. 1499 # 68user 2001/01/04 (木) 16:53:48
>>1494 CoreFighter
> BIOSの設定画面で、MPSってありますけど
> Versionの1.1と1.4の違いってなんでしょうか
MultiProcessor Specification の略ですが、詳しいことはさっぱりです。
現状では ACPI に取って変わられたんじゃないかな。具体的なことは
intel のサイトあたりに仕様書が転がってるかもしれません。

No. 1500 # ふくし 2001/01/04 (木) 17:39:57
>mmさん
あー、、、(^^;;;;; すいませんでした。
どうもありがとうございます!

No. 1501 # E田 2001/01/04 (木) 17:43:36
UNIXで、C言語で、TCP/IPを使って、クライアント/サーバ(マルチクライアントがアクセスする。非ブロッキングという)プログラムをしています。
selectを使用して、特定の、クライアントが接続しているソケットのタイムアウトを知りたいのですが、その方法が、良くわかりません。
こちらの方が詳しいということなので、ぜひ教えてください。
お願いします。本を読んでも、良くわかりませんでした。

No. 1502 # 68user 2001/01/04 (木) 17:54:58
>>1501 E田
現状はどこまでわかっているんですか?

何もわからないなら、まずは
    http://X68000.startshop.co.jp/~68user/net/c-echo-1.html
を読んでください。で、ソケットを使えるようになると。

で、perl ですが、select の使い方はこんな感じ。イメージをつかんで下さい。
    http://X68000.startshop.co.jp/~68user/net/echo-4.html

んで、C での select(2) の使い方。
    http://home.jp.FreeBSD.ORG/cgi-bin/showmail/FreeBSD-users-jp/54916
    http://home.jp.FreeBSD.ORG/cgi-bin/showmail/FreeBSD-users-jp/54917

わからなければ、作ってるソースから余計な部分をそぎ落としたソースを
公開して、再度質問してください。

No. 1503 # inpaku 2001/01/04 (木) 20:50:44
こんにちは。ネットワークプログラミングについて質問があるのですが…。
現在、Debian Linuxをもちいて、簡単なプログラミングから練習している
のですが、いき詰まりました。
PF_PACKETをつかってデータリンクに直接データを渡したいのですが、
ethhdrのh_dest や h_sourceにどうやってMACアドレスを入れて良いか
解らなくなりました。IPアドレスでは、inet_ptonとかあったんですが、
MACアドレスの場合もあるのですか??
宜しくお願いします。

No. 1504 # 68user 2001/01/04 (木) 23:22:14
>>1503 inpaku
> 簡単なプログラミングから練習しているのですが、いき詰まりました。
ははぁ、「簡単なプログラミングから練習」で、いきなりデータリンク層ですか。
僕にはちょっと荷が重いなぁ。

確認ですが、非 TCP/UDP かつ 非 IP のデータを送りたいのですよね?

UNIX Magazine 2000年7月号「BSD をハックする - 齊藤明紀」で、
    - 非 IP のプロトコルを使うにはどうすればよいか
    - 送信する Ethernet パケットに含まれる MAC アドレスを自由に
        設定することはできるか
について、NetBSD での解説が書かれています。

また、「UNIX ネットワークプログラミング第2版 Vol.1」
    http://X68000.startshop.co.jp/~68user/net/link-book.html#8
では、データリンクへのアクセス手法として、
    - BSD の BPF (BSD Packet Filter)
    - SVR4 の DLPI (SVR4 Data Link Provider Interface)
    - Linux の SOCK_PACKET
の3つがあげられています。どうやらここらへんは OS により
API がまちまちらしいですね。実際、手元の FreeBSD 4.2-BETA
では (PF|AF|SOCK)_PACKET という定数は定義されていません。

で、この本によると Linux の SOCK_PACKET を使うなら
    fd = socket(AF_INET, SOCK_PACKET, htons(ETH_P_ALL));
とすると、データリンクからすべてのフレームを受けとれる
らしいです。

あと、tcpdump が使用している libpcap というライブラリが
上記3種の方法に対応しているようなので、参考になるかも
しれません。
# libpcap は読み出ししかできませんが、送信に対応させるのは
# それほど面倒ではないとか。

> IPアドレスでは、inet_ptonとかあったんですが、
> MACアドレスの場合もあるのですか??
BSD には libc に ether_aton とか ether_hostton てのがあります。
Linux はどうですか?

くぅ、面白い話題だけど、調べるのに一杯一杯だ。

No. 1505 # inpaku 2001/01/05 (金) 00:07:02
68userさんへ
親切にお答え下さって、ありがとうございます。
ether_aton とか ether_hostton ですか、探してみます。
実は僕もUNIX ネットワークプログラミング第2版 Vol.1を
持ってますが、はっきりいって、C言語すらおぼつかない僕
には辛いです(笑)
たしかにLinuxではSOCK_PACKETを使うと本には書いてあり
ましたが、Kernel2.2以降?からはPF_PACKETを使えと、man
ページに書いてあったものですから、それを使ってます。
また、libpcapのソースも落としましたが、書き換えるのは
僕には不可能でした(苦笑)
ところで、僕は何をしたかったのかというと、自分で任意の
プロトコルをつくってそれで通信させてみようということだ
ったんです。無謀とお思いでしょうが、やらなきゃならんの
です。卒業のために…。とにかくがんばってみます。
ありがとうございました。

No. 1506 # E田 2001/01/05 (金) 11:52:25
早速、回答してくださいまして、ありがとうございます。
どこまでわかっているか、ということなので書きますが、
ソケットの生成とかは、できています。
サンプルとかを真似して、クライアント/サーバで動かしてみました。
fork()で、マルチクライアントにもできています。
でも、select()を組み合わせると、よくわかりません。
動作は、教えてもらったページとかで、なんとなくわかるのですが、
それをCでやろうとすると、わからなくなります。
select[1]とかと書いて、タイムアウトの時間を指定してやると、
それをすぎても読み出せない時にはタイムアウトしたっていうことで
検出できるんですか?
よろしくお願いします。

No. 1507 # E田 2001/01/05 (金) 11:54:12
追伸です。
ソースとかは、まだ、ほとんど、サンプルとかのechoサーバとかなので、
書きませんでした。

No. 1508 # E田 2001/01/05 (金) 12:14:52
すみません、もう一つ質問です。
送信するデータで、データの最初に全データの長さが入っていて、
その次に、データのIDが入っていて、その後にデータの本文が
入っているというものを受信する時の方法についてなんですが、
それを読む時、最初のデータの長さとIDを読んで、その後で
データの本文を読みたいのですが、構造体みたいなのを用意して、
そこに格納しようと思っています。
データの長さはu_longで4byteで、
IDは、0x00100101(u_longで4byte)とかという番号で、
データの本文は、u_shortで2byte+longで4byte+char[8]です。
socketでの送信用のchar型からキャストしてみようと
しているんですが、最初の00がうまく行きません。
(送信する時のキャストはうまく行っています。受信する時は、
ちゃんと全部、もとのままのデータを受け取っています。)
これは、socketの扱い方の方のhton()とかでやらないと
いけないのですか?
それから、もしかすると、Cの方の書き方が下手糞なせいなのかも
しれないのですが、構造体に格納するのがうまく行かないので、
たとえばで良いので、もしも良かったら、例を教えてくれませんか?
お願いします。

No. 1509 # 68user 2001/01/05 (金) 12:56:19
> 最初の00がうまく行きません。
うまく行かないプログラムを (余計な部分は削った上で)
公開してください。

はい、C+select の超手抜きサンプル。バグありまくりですが
一応動きます。細部は参考にせず、おおまかな流れを見て下さい。

------------------
#include <stdio.h>
#include <netdb.h>
#include <sys/types.h>
#include <sys/time.h>
#include <sys/socket.h>
#include <sys/uio.h>
#include <unistd.h>
#include <sys/param.h>
#include <netinet/in.h>
#include <arpa/inet.h>

#define BUF_LEN 256 /* バッファのサイズ */

int main( int argc , char *argv[]){
    int connected_socket[100];
    int listening_socket;
    struct sockaddr_in sin;
    int sock_optval = 1;
    int port = 5000;
    char buf[BUF_LEN];
    struct timeval waitval;
    fd_set fd;
    fd_set org_fd;
    int max_sock = 0;
                                                                /* リスニングソケットを作成 */
    listening_socket = socket(AF_INET,SOCK_STREAM,0);

                                                                /* ソケットオプション設定 */
    if ( setsockopt(listening_socket,SOL_SOCKET,SO_REUSEADDR,
                                    &sock_optval,sizeof(sock_optval)) == -1 ){
        perror("setsockopt");
        exit(1);
    }
                                                                /* アドレスファミリ・ポート番号・IPアドレス設定 */
    sin.sin_family = AF_INET;
    sin.sin_port = htons(port);
    sin.sin_addr.s_addr = htonl(INADDR_ANY);

    if ( bind(listening_socket,(struct sockaddr *)&sin,sizeof(sin)) < 0 ){
        perror("bind");
        exit(1);
    }

    if ( listen(listening_socket, SOMAXCONN) == -1 ){
        perror("listen");
        exit(1);
    }
    printf("ポート %d を見張ります。\n",port);

    waitval.tv_sec = 1;
    waitval.tv_usec = 0;

    FD_ZERO(&org_fd);
    FD_SET(listening_socket, &org_fd);
    max_sock = listening_socket;
        
    while (1){
        int i;
        struct hostent *peer_host;
        struct sockaddr_in peer_sin;

        memcpy(&fd, &org_fd, sizeof(org_fd));

        select(max_sock+1, &fd, NULL, NULL, &waitval);

        for ( i=0 ; i<=max_sock ; i++ ){
            if ( FD_ISSET(i, &fd) ){
                if ( i == listening_socket ){
                    int len;
                    len = sizeof sin;
                    max_sock++;
                    printf("connected_socket[%d]\n",max_sock);
                    connected_socket[max_sock] =
                        accept(listening_socket, (struct sockaddr *)&sin, &len);

                    if ( connected_socket[max_sock] == -1 ){
                        perror("accept failed.\n");
                    }
                        
                    len = sizeof(peer_sin);
                    getpeername(connected_socket[max_sock], (struct sockaddr *)&peer_sin,&len);
                        
                    peer_host = gethostbyaddr((char *)&peer_sin.sin_addr.s_addr,
                                                                        sizeof(peer_sin.sin_addr),AF_INET);
                        
                    printf("接続: %s [%s] ポート %d\n",
                                  peer_host->h_name,
                                  inet_ntoa(peer_sin.sin_addr),
                                  ntohs(peer_sin.sin_port)
                                  );
                    FD_SET(max_sock, &org_fd);

                } else {
                    int read_size;
                    read_size = read(connected_socket[i], buf, sizeof(buf)-1);
                    if ( read_size == 0 ){
                        printf("接続が切れました。引き続きポート %d を見張ります。\n",port);
                        close(connected_socket[i]);
                        FD_CLR(i, &org_fd);
                    } else {
                        printf("メッセージ: %s",buf);
                        write(connected_socket[i],buf,strlen(buf));
                    }
                }
            }
        }
    }
    close(listening_socket);
    return 0;
}

Prev< No. 1483〜1509> Next  [最新発言に戻る] [過去ログ一覧]