[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debian-users:18537] Re: gnome-same-gnome とかの日本語表示



佐野@浜松です。

In article <19991023214333Q.nagai@xxxxxxxxxxxx>
 Toyohiko Nagai <nagai@xxxxxxxxxxxx> さん writes:

>   実は関係あるのかないのかわからないんですが、気になる記述を
> ld.so の man の中に見つけました。
> 
> ---ここから
>    プログラムで必要とされる共有ライブラリは以下の順序で検索される。
> 
>    o      環 境 変 数  LD_LIBRARY_PATH  (a.out プログラムでは
>           LD_AOUT_LIBRARY_PATH) を用いる。ただし実行ファイ ル
>           が  setuid/setgid  バイナリの場合は、これは無視される。
>           
>    o      キャッシュファイル /etc/ld.so.cache を探す。 この
>           ファイルは、 (ld.so.conf で追加指定されたものも含めた) 
>           ライブラリ検索パスから見つかったライブラリファイルの
>           情報を集めたものである。
> 
>    o      デフォルトパスである /usr/lib、次いで /lib。
> ---ここまで
> 
>   私の環境では LD_LIBRARY_PATH は設定されてないんですが、
> 「setuid/setgid」って記述が引っ掛かります。直接的な根拠ではないんですが、
> ld.so の動きに少なからず影響を与えているように見えます。

これは LD_LIBRARY_PATH に関係する部分なので、この環境変数を利用して
いないのなら、これ自体は関係無いと思います。sgid によって動作が違う
原因は何か他にあるんじゃないかな。

 glibc-2.1.2/build/i386-linux/glibc-2.1.2/elf/rtld.c には以下のように
記載されていました。

  /* We have two ways to specify objects to preload: via environment
     variable and via the file /etc/ld.so.preload.  The later can also
     be used when security is enabled.  */
  preloads = NULL;
  npreloads = 0;

  if (preloadlist)
    {
      /* The LD_PRELOAD environment variable gives list of libraries
         separated by white space or colons that are loaded before the
         executable's dependencies and prepended to the global scope
         list.  If the binary is running setuid all elements
         containing a '/' are ignored since it is insecure.  */
      char *list = strdupa (preloadlist);
      char *p;

      HP_TIMING_NOW (start);

      while ((p = strsep (&list, " :")) != NULL)
        if (p[0] != '\0'
            && (! __libc_enable_secure || strchr (p, '/') == NULL))
          {
            struct link_map *new_map = _dl_map_object (_dl_loaded, p, 1,
                                                       lt_library, 0);
            if (new_map->l_opencount == 1)
              /* It is no duplicate.  */
              ++npreloads;
          }

>   でも本来、/usr/lib/gconv って /etc/ld.so.conf に記述されている
> 必要ってないんですよね?

   $ strings /Sub/lib/libc-2.1.2.so |grep gconv|grep lib
   __gconv_find_shlib
   __gconv_release_shlib
   /usr/lib/gconv

となっているところを見ると、libc の中には PATH 名が
ハードコードされているみたいですが、

   $ ldd /lib/libc-2.1.2.so 
   /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x80000000)

となるところを見ると libc の中で /usr/lib/gconv 以下のライブラリを
必要としてる、っていうことは無いみたい。

   $ strings /lib/ld-2.1.2.so |grep gconv

では何もでてこないところを見ると ld.so には gconv 関係の PATH は
入ってないですね。

 grep '/' で調べると /lib/ と /usr/lib/ だけは持っているみたい。

# ld.so ってテスト用にコマンドラインからも起動できるように
# 作られてるんですね。

たぶん、/usr/lib/tkstep や /usr/lib/libc5-compat などと同様に
 /usr/lib/gconv を /etc/ld.so.conf に追加してもらうように
 gconv-modules に BTS report しておけばいいんじゃないのかな。

# 詳しくはわからないので識者のコメントを待ちます ^^;;

-- 
     # 11/13 に何かが起きる? > "http://www.szlug.factory.to";
     # (わたしのおうちは浜松市、「夜のお菓子」で有名さ。)
    <xlj06203@xxxxxxxxxxx> : Taketoshi Sano (佐野 武俊)