Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
*Backtrace*(2004-02-11)
[go: Go Back, main page]

書いてる人: 高橋カヲル | [mixi] | [PGP] | [RSS]

トップ «前の日記(2004-02-10) 最新 次の日記(2004-02-12)» 編集

*Backtrace*

1999|12|
2000|01|02|03|04|05|06|07|08|09|10|11|12|
2001|01|02|03|04|05|06|07|08|09|10|11|12|
2002|01|02|03|04|05|06|07|08|09|10|11|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|

2004-02-11

_ オレのおなかは24時間準備OK

Muesli と Contrex ばかりの生活は丈夫なハラを作ると思うのだがどうよ。

_ svn+ssh で公開鍵

  • committer が ssh するためのアカウントは一個だけ。ssh svn@svn.example.org としてコネクションは張ってもらう。
  • でも SSH 公開鍵によって committer を区別する。authorized_keys の command なり environment なり使って。

というのはめんどくさい、というハナシ。基本的にアカウントを作りたくない場合は非トンネルモード、アカウントがすでにある場合はトンネルモードってのを想定してるのにムチャをやろうってんだから面倒なのは当たり前だな。

* svnserve/serve.c (auth)

-t オプションをつけて kick した時点で、通常の認証とは別の扱いになる。

  if (get_access(b, AUTHENTICATED) >= required
      && b->tunnel && strcmp(mech, "EXTERNAL") == 0)
    {
      apr_uid_t uid;
      apr_gid_t gid;
      if (!mecharg)  /* Must be present */
        return svn_ra_svn_write_tuple(conn, pool, "w(c)", "failure",
                                      "Mechanism argument must be present");
      if (apr_uid_current(&uid;, &gid;, pool) != APR_SUCCESS
          || apr_uid_name_get((char **) &b-;>user, uid, pool) != APR_SUCCESS)
        return svn_ra_svn_write_tuple(conn, pool, "w(c)", "failure",
                                      "Can't determine username");
      if (*mecharg && strcmp(mecharg, b->user) != 0)
        return svn_ra_svn_write_tuple(conn, pool, "w(c)", "failure",
                                      "Requested username does not match");
      SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "w()", "success"));
      *success = TRUE;
      return SVN_NO_ERROR;
    }

apr_uid_current(&uid;, &gid;, pool) は単に getuid(), getgid() しているだけ、apr_uid_name_get((char **) &b-;>user, uid, pool) は getpwuid_r() か getpwuid() が呼ばれる。 strcmp(mecharg, b->user) して確認まで取られる。同じ uid に複数の login name を割り振っても不幸になるだけ。

* 逃げ

  • svnserve をハックしてコマンドラインから username を渡せるようにする。 かつてに svnserve -u をゾンビのようによみがえらせる。
  • svnserve をハックして、環境変数から username を渡せるようにする。
  • committer の数だけ uid を割りふって /etc/passwd にエントリを用意する。 うまいこと svnserve のラッパを用意する。setuidgid でもなんでも使って。
  • そもそも svn+ssh なんか使わない。svn:// でやれと。
  • むしろ SSL なクライアント証明書でがんばれ。

さて、どうしてくれりゃいいんだか。

お名前:
E-mail:
コメント:

トップ «前の日記(2004-02-10) 最新 次の日記(2004-02-12)» 編集

謎 queue & status

Powered by 早起き生活
[Powered by OpenBSD] [Powered by たん清] [やる気のないサイト] Valid HTML 4.01 Strict Page Rank Checker [VALID RSS!] RSS feed meter for http://triaez.kaisei.org/~kaoru/diary/