Post Reply 
 
Thread Rating:
  • 139 Votes - 2.58 Average
  • 1
  • 2
  • 3
  • 4
  • 5
他PCのディレクトリ指定時の認証について
03-17-2015, 11:05 AM
Post: #1
他PCのディレクトリ指定時の認証について
いつもお世話になっております。

エクスプローラーで他PC(共有サーバー等)のファイルを確認する場合ならばパスを指定して
認証があるならば、windows認証が出てきて、「ログイン名、パスワード」を入力・・・となりますが

Curlプログラム内で他PCのディレクトリを指定してするとFileExceptionが表示されてしまいます

エラー内容としては「ログインに失敗しました。ログイン名やパスワードが間違っている・・・」

エラーになってしまうのは、ログイン名とパスワードを指定していないので当たり前ですが、
どのように指定すればよろしいのでしょうか?

ご教授お願いします。
Find all posts by this user
Quote this message in a reply
03-24-2015, 09:43 AM
Post: #2
RE: 他PCのディレクトリ指定時の認証について
業務案件であれば、事前に、対象の「他PCのディレクトリ」をネットワークドライブ等に設定したり、
共有フォルダとして設定しておいてもらうのがよさそうな気がしますね。

それが不可能、ということであれば、
接続先とID・パスワードを組み合わせて net use コマンドの文字列を整形し、
run-host-process で実行して認証する、という方法もありかもしれません。
(実際に試したわけではないですが・・・)
また、その場合は、都度、/persistent:noで作成し、
終了時に /delete で作成した共有を削除したほうが安全かも。

Curl 単体で認証とアクセスを行う方法があるかどうかはワカリマセン。
Find all posts by this user
Quote this message in a reply
03-24-2015, 12:43 PM
Post: #3
RE: 他PCのディレクトリ指定時の認証について
>umemuraさん

>それが不可能、ということであれば、
>接続先とID・パスワードを組み合わせて net use コマンドの文字列を整形し、
>run-host-process で実行して認証する、という方法もありかもしれません。
>(実際に試したわけではないですが・・・)
>また、その場合は、都度、/persistent:noで作成し、
>終了時に /delete で作成した共有を削除したほうが安全かも。


net useを使用して接続する方法で動作しました!
しかし、Curl単体での認証は未だ出来ません。。。
Find all posts by this user
Quote this message in a reply
04-01-2015, 12:15 PM
Post: #4
RE: 他PCのディレクトリ指定時の認証について
(03-24-2015 12:43 PM)rom Wrote:  net useを使用して接続する方法で動作しました!
しかし、Curl単体での認証は未だ出来ません。。。
何を以て「Curl単体」と言うのかよくわかりませんが、net コマンドの代わりに、DLL Interface で
WNetUseConnection() を呼び出すことで同じことはできます。

Code:
{import * from CURL.LANGUAGE.DLL-INTERFACE}

{define-C-struct public NetResource
    {defaults string-rep = CStringUTF16}
  ||--
  field public dwScope:int32
  field public dwType:int32
  field public dwDisplayType:int32
  field public dwUsage:int32
  field public lpLocalName:#String
  field public lpRemoteName:#String
  field public lpComment:#String
  field public lpProvider:#String
}

{define-dll-class public Mpr-dll
    {defaults
        calling-convention = stdcall,
        string-rep = CStringUTF16
    }

    {constructor public {default}
        {construct-super {SharedLibrary "mpr.dll"}}
    }

    || WNetUseConnection()
    {dll-method public {wnet-use-connection ("WNetUseConnectionW")
                           hwndOwner:CPointer,
                           lpNetResource:#NetResource,
                           lpPassword:#String,
                           lpUserID:#String,
                           dwFlags:int32,
                           lpAccessName:#{CArray-of byte},
                           lpBufferSize:{Reference-to int32},
                           lpResult:{Reference-to int32}
                       }:int
    }
}

{define-proc public {connect-remote-resource
                        remote:String,
                        user:#String = null,
                        password:#String = null
                    }:bool
    def dll = {Mpr-dll}
    
    def res = {NetResource}
    set res.dwScope = 0
    set res.dwType = 1        || RESOURCETYPE_DISK
    set res.dwDisplayType = 0 || RESOURCEDISPLAYTYPE_GENERIC
    set res.dwUsage = 0
    set res.lpLocalName = null
    set res.lpRemoteName = remote
    
    def length = 1024
    
    def flags = 8 || CONNECT_INTERACTIVE
    def access-name = {{CArray-of byte} length * 2} || wchar
    def buffer-size = {{Reference-to int32} value = length}
    def result = {{Reference-to int32}}

    def ret = {dll.wnet-use-connection
                  0,
                  res,
                  password,
                  user,
                  flags,
                  access-name,
                  buffer-size,
                  result
              }
    {return ret == 0}
}

上記の定義がある場合に、以下のようにプロシージャを呼び出すと、現在のアカウントで \\server\share に
接続します。現在のアカウントで認証できない場合は、認証ダイアログが表示されます。

Code:
{connect-remote-resource |"\\server\share"|}
Find all posts by this user
Quote this message in a reply
Post Reply 

Forum Jump:


User(s) browsing this thread:
1 Guest(s)