D-Busへのアクセスについて

73 views
Skip to first unread message

syuju

unread,
Jun 10, 2013, 11:47:35 PM6/10/13
to haske...@googlegroups.com
すみません、またアドバイスをお願いします。 m(_ _)m

FreeBSD上で動作するHaskellアプリでD-Busにアクセスしたいのですが、認証すら通らずに接続が切られてしまいます。
システムバスへ接続しようとしているのですが、Haskellアプリ側からnullとAUTHコマンドを送信した後、エラーも戻らずに切断されます。

D-FeetというD-Busのデバッグツールを使用すると、接続できるので、socatで通信内容を確認してみようとしたところ、socat経由ではD-Feetも接続できなくなりました。
ただし、認証時に送信されるデータは、Haskellアプリのものと全く一緒でした。
D-Busにはdbusパッケージを使ってアクセスしようとしていましたが、とりあえず原因究明の為に接続・認証部分のみ切り出して新しくプログラムを作り、いろいろと試行錯誤したのですが、原因がさっぱりわかりません。

どなたか、このような現象に心当たりはないでしょうか。
何かアドバイスをいただけますと助かります・・・。 m(_ _)m

参考までに、このようなプログラムで接続を確認していました。

import           Network.Socket hiding (recv,send)
import           Network.Socket.ByteString (send,sendAll, recv)
import qualified Data.ByteString.Char8 as Char8
import qualified Data.ByteString as C
import           System.IO hiding (hGetLine)

main = do
  -sock < socket AF_UNIX Stream defaultProtocol
  sock <- socket AF_UNIX Stream 0
  connect sock (SockAddrUnix "/var/run/dbus/system_bus_socket")
  {- socketを使った送受信
  sndsize <- send sock $ Char8.pack "\0"
  putStrLn $ show sndsize
 
  -msg < recv sock 32
  --sendAll sock $ Char8.pack "\0AUTH EXTERNAL 31303031\r\n"
  sndsize2 <- send sock $ Char8.pack "AUTH EXTERNAL 31303031\r\n"
  putStrLn $ show sndsize2
  sndsize3 <- send sock $ Char8.pack "BEGIN\r\n"
  putStrLn $ show sndsize3
--sendAll sock $ Char8.pack "AAAAA"
  msg <- recv sock 256
  putStrLn $ "len =" ++ (show $ C.length msg) ++ (Char8.unpack msg)
  sClose sock
  -}
 
  h <- socketToHandle sock ReadWriteMode
  hSetBuffering h NoBuffering

  hPutChar h '\0'
  hFlush h
  -- msg < Char8.hGet h 128
  C.hPut h $ Char8.pack "AUTH EXTERNAL 31303031\r\n"    -- uid=1001
  -- Char8.hPut h $ Char8.pack "AUTH\r\n"
 
  msg <- recvloop h []

  Char8.hPut h $ Char8.pack "BEGIN\r\n"
  putStrLn $ show msg
  hClose h
    where
      recvloop :: Handle -> String -> IO String
      recvloop hdl msg = do
        ch <- hGetChar hdl
        case ch of
          '\n' -> return msg
          c -> recvloop hdl $ msg ++ [c]
Reply all
Reply to author
Forward
0 new messages