<function>
<fname property="Applicative Order / LEVEL: - ">
GetUserInfo
</fname>
<prototype>
LISP形式

(GetUserInfo
	string-exp(group)
	string-exp(login mode)
	"user"または"passwd")

XML形式

<GetUserInfo>
	string-exp(group)
	string-exp(login mode)
	"user"または"passwd"
</GetUserInfo>
</prototype>
<prototype>
C関数宣言
</prototype>
<explanation>
サーバのSetAgentを呼び出すと、サーバはクライアントから求められているエージェントを駆動するのにどの様な認証が必要かを判定する。認証が必要と認められたときに、サーバは、クライアント側にGetUserInfoを使用してuser名と、パスワードを求める。 

必要な認証はSetAgentを受けたサーバに直接に接続をかけてきたサーバの認証ではなく、カスケードを介して、このサーバに接続をかけてきたおおもとのエージェントの認証である。そこでGetUserInfoを受け取ったエージェントのメインインタプリタの入力ストリームがソケットの場合は、このソケットへGetUserInfoをリレーする。この場合GetUserInfo はResultなどと同様にフロント・スレッドで処理され、これの定義を変更することは出来ない。一方、GetUserInfoを受け取ったエージェントのメインインタプリタの入力ストリームがソケット以外である場合、このエージェントはルート・エージェントであると見なされ、ここで、ユーザ定義のGetUserInfoが呼び出される。 

GetUserInfoには、user名、パスワードの指定ともに、group、 login mode の組が渡される。login mode はSetAgentに渡されたものである。一方、group はagent名と login modeからサーバのデータベースより検索された、ユーザ名、パスワードの有効範囲となるグループ名を表す。 

エージェントひとつひとつに、ユーザを定義するのではなく、あるまとまったエージェントのグループにユーザを定義し、認証するときに役に立つ。たとえば、nichibun.ac.jpと group を定義し、このドメイン内のエージェントには同じユーザを定義するという形で用いる。 
</explanation>
</function>
