ページの先頭行へ戻る
Interstage List Works V10.3.1 環境構築手引書
FUJITSU Software

3.4.2 出口ルーチンの準備 <ユーザ作成ライブラリによる認証の場合>

List Worksのユーザ認証に、ユーザ作成ライブラリによる認証を利用する場合は、ユーザ認証や保管フォルダのアクセス権の判断に出口ルーチンを利用して認証処理を行っています。そのため、ディレクトリサービスなどを利用する場合は、以下のユーザ作成ライブラリの出口ルーチンを作成しておく必要があります。

注意

  • 出口ルーチンは32ビットモードで作成してください。

  • 出口ルーチンおよび出口ルーチンからリンクしているライブラリがロードできるように、crleコマンドで設定してください。

  • 出口ルーチンはマルチスレッドで動作するように作成してください。

  • 出口ルーチンはEUCコードで記述してください。

  • カレントディレクトリが「/opt/FJSVlw-sv/classes」フォルダのため、設定ファイルなどを利用する場合は、classesフォルダ配下に設定ファイルなどを格納するか、絶対パス指定で参照してください。

  • 環境変数とカレントディレクトリを出口ルーチン内で変更しないでください。

出口ルーチン

関数名

概要

ログイン出口

LW_LDAP_LoginExit

リスト管理サーバへのログイン時に呼び出されます。ログインユーザIDとパスワードから、ログインを許可するかどうかを判定します。

検索画面情報取得出口

LW_LDAP_GetDisplayCondition

管理者ツールのアクセス権設定画面などでユーザ一覧/グループ一覧を取得する際の、「ユーザまたはグループの選択」画面構築時に呼び出されます。「検索する項目」に条件(属性項目名)が設定されます。

グループ情報検索出口

LW_LDAP_SearchGroup

管理者ツールでアクセス権設定時に、「ユーザまたはグループの選択」画面で、グループを指定して【検索】ボタンをクリックした際に呼び出されます。指定された条件で検索したグループの一覧を返却します。

ユーザ情報検索出口

LW_LDAP_SearchUser

管理者ツールでアクセス権設定時に、「ユーザまたはグループの選択」画面で、ユーザを指定して【検索】ボタンをクリックした際に呼び出されます。指定された条件で検索したユーザの一覧を返却します。


出口ルーチンのライブラリ名と格納場所は、以下のとおりです。

ライブライリ名

格納場所

lwlogin.so

crleコマンドで設定したディレクトリ


出口ルーチンの関数定義、出口ルーチンで使用する構造体の形式を格納したヘッダファイルの格納場所は、以下のとおりです。

ファイル名

格納場所

lwlogin.h

「/opt/FJSVlw-sv/include」ディレクトリ


各出口ルーチンのインタフェースを説明します。


(1) ログイン出口のインタフェース

LW_LDAP_LoginExit関数のインタフェースを以下に示します。


記述形式
int  LW_LDAP_LoginExit (LOGIN_INDATA      *lpIndata,
                        LOGIN_OUTDATA     *lpOutdata)

機能

ログイン出口(LW_LDAP_LoginExit関数)は、リスト管理サーバへのログイン時に呼び出されます。出口ルーチンでは、入力パラメタとして渡されたログインユーザIDとパスワードから、ログインを許可するかどうかを判定します。許可する場合は、ユーザIDなどのユーザ情報と、そのユーザが所属するグループ情報を出力パラメタに設定して復帰してください。


パラメタの説明
lpIndata

本関数呼び出し時に設定されるLOGIN_INDATAの構造体のアドレスが設定されています。

lpOutdata

本関数復帰時に指定するLOGIN_OUTDATAの構造体のアドレスが設定されています。


LOGIN_INDATA構造体

LOGIN_INDATA構造体の内容を以下に示します。

typedef  struct
{
    char     iUid[40];             /* ログインユーザID(有効文字数26バイト)     */
    char     iPasswd[16];          /* パスワード(有効文字数14バイト)           */
    int      iMaxReturnNo;         /* 返却可能最大グループ数                   */
    char     iPassword[256];       /* パスワード(有効文字数255バイト)          */
} LOGIN_INDATA ;

LOGIN_INDATA構造体の各メンバの詳細を以下に示します。

メンバ

名称

詳細

iUid

ログインユーザID

リストナビなどのログイン画面で指定したユーザIDが26バイト以内で設定されます。

iPasswd

パスワード

リストナビなどのログイン画面で指定したパスワードが14バイト以内で設定されます。List Works 8.0以前に作成したログイン出口の互換用です。

iMaxReturnNo

返却可能最大グループ数

返却可能最大グループ数が設定されます。初期値は20です。再度呼び出されたときは、LOGIN_OUTDATA構造体のoGroupNumで返却した値が設定されます。

iPassword

パスワード

パスワードが255バイト以内で設定されます。

注意

iPasswdはList Works 8.0以前に作成したログイン出口の互換用です。パスワードはiPasswdとiPasswordの両方に設定されますが、新規にログイン出口を作成する場合はiPasswordを参照してください。なお、パスワードが14バイトを超える場合はiPasswdには先頭の14バイトが設定されます。

LOGIN_OUTDATA構造体

LOGIN_OUTDATA構造体の内容を以下に示します。

typedef  struct
{
    LDAP_USER_INFO    oUserInfo;      /* ユーザ情報                                   */
    int               oGroupNum;      /* 返却するグループ数(値を格納した数を設定する) */
    LDAP_GROUP_INFO   *oGroupInfo;    /* ユーザが所属するグループ情報                 */
} LOGIN_OUTDATA ;

LOGIN_OUTDATA構造体の各メンバの詳細を以下に示します。

メンバ

名称

詳細

oUserInfo

ユーザ情報

ユーザ情報を設定します。

oGroupNum

返却するグループ数

返却するグループ数を1から255で設定します。

oGroupInfo

ユーザが所属するグループ情報

ユーザが所属するグループ情報を設定します。


LDAP_USER_INFO構造体

LDAP_USER_INFO構造体の内容を以下に示します。

typedef  struct
{
    char         oUid[40];            /* ユーザID(有効文字数26バイト)                 */
    char         oName[44];           /* ユーザ名(有効文字数40バイト)                 */
    int          oAdmin;              /* 管理者権限  0:権限なし  1:権限あり           */
    long         oAccessibility[4];   /* ユーザの業務権限                             */
} LDAP_USER_INFO ;

LDAP_USER_INFO構造体の各メンバの詳細を以下に示します。

メンバ

名称

詳細

oUid

ユーザID

LOGIN_INDATA構造体のiUidと同じ値を設定します。

oName

ユーザ名

リザーブです。NULLを設定してください。

oAdmin

管理者権限

管理者権限の有無を、「0」か「1」で設定します。

  0:権限なし
  1:権限あり

oAccessibility

ユーザの業務権限

ユーザの業務権限をビットの論理和で設定します。


LDAP_GROUP_INFO構造体

LDAP_GROUP_INFO構造体の内容を以下に示します。

typedef  struct
{
    char         oGid[28];            /* グループID(有効文字数26バイト)               */
    char         oName[44];           /* グループ名(有効文字数40バイト)               */
    long         oAccessibility[4];   /* グループの業務権限                           */
} LDAP_GROUP_INFO ;

LDAP_GROUP_INFO構造体の各メンバの詳細を以下に示します。

メンバ

名称

詳細

oGid

グループID

ユーザが所属するグループIDを26バイト以内で設定します。

oName

グループ名

リザーブです。NULLを設定してください。

oAccessibility

グループの業務権限

グループの業務権限をビットの論理和で設定します。


業務権限

ユーザ、グループの業務権限はそれぞれLDAP_USER_INFO構造体、LDAP_GROUP_INFO構造体のメンバであるlong型の配列oAccessibilityに、以下に示すビットの論理和で指定します。

例)すべての業務権限を指定する場合

oAccessibility[0]に「0xFFC7B7AB」、

oAccessibility[1]に「0x000281FF」、

oAccessibility[2]に「0x00000000」、

oAccessibility[3]に「0x00000000」、

を指定します。


注意

  • 各機能に対する業務権限の有無は、以下のように決まります。

    • ユーザとユーザが所属するグループそれぞれに権限が与えられている場合に限り、その機能に対する権限が与えられます。

    • ユーザが複数のグループに所属している場合は、所属するグループの中で1つでも権限が与えられていて、かつユーザに権限が与えられている場合に限り、その機能に対する権限が与えられます。

  • 管理者権限を持つユーザは、業務権限の指定に関係なくすべての権限が与えられます。

  • 以下に示すビット以外の項目はすべて予約域となっています。


oAccessibility

業務権限名

説明

アクセス権

インデックス

ビットマスク

0

0x00000001

フォルダの作成

保管フォルダ配下にフォルダの作成を許可します。

保管フォルダ

0

0x00000002

フォルダの削除

フォルダの削除を許可します。

0

0x00000008

フォルダの表示

フォルダの表示を許可します。
アクセス権がないと、保管フォルダの一覧に保管フォルダが表示されません。

0

0x00000020

帳票の削除

帳票の削除を許可します。

保管フォルダ内の帳票

0

0x00000080

帳票情報の変更

帳票情報の変更を許可します。

0

0x00000100

帳票一覧への表示

帳票の帳票一覧への表示を許可します。

0

0x00000200

ファイリング

帳票のファイリングを許可します。
「帳票の表示」、「名前を付けて保存」の権限も必要です。
グループフォルダの作成時に「元の帳票を削除する」にチェックをしている場合は、「帳票の削除」の権限が必要です。

0

0x00000400

帳票の表示

帳票の表示を許可します。

0

0x00001000

メール送信

帳票のメール送信を許可します。
「帳票の表示」の権限も必要です。
帳票ファイルをメール送信する場合は、「名前を付けて保存」の権限も必要です。

0

0x00002000

データ変換

帳票のデータ変換(Text、CSV 形式に変換)を許可します。
「帳票の表示」の権限も必要です。

0

0x00008000

帳票への記入

帳票に対して、記入情報の記入を許可します。

0

0x00010000

上書き保存

記入情報の保存を許可します。

0

0x00020000

名前を付けて保存

帳票のマイ コンピュータへの保存を許可します。
「帳票の表示」の権限も必要です。

0

0x00040000

クリップボードへコピー

帳票のクリップボードへのコピーを許可します。

0

0x00400000

フォルダ配下のフォルダ一覧表示

保管フォルダ配下のフォルダの一覧表示を許可します。
アクセス権がないと、保管フォルダ配下のフォルダの一覧を表示することができません。
「フォルダの表示」の権限も必要です。

保管フォルダ

0

0x00800000

フォルダ配下の帳票一覧表示

保管フォルダ配下の帳票の一覧表示を許可します。
アクセス権がないと、保管フォルダ配下の帳票の一覧を表示することができません。

0

0x01000000

フォルダのプロパティ表示

フォルダのプロパティ表示を許可します。

0

0x02000000

フォルダのプロパティ更新

フォルダのプロパティ更新を許可します。
「フォルダのプロパティ表示」の権限も必要です。

0

0x04000000

フォルダの移動

フォルダの移動を許可します。
「フォルダの作成」、「フォルダの削除」の権限も必要です。

0

0x08000000

フォルダの複写

フォルダの複写を許可します。
「フォルダの作成」の権限も必要です。

0

0x10000000

フォルダ名の変更

フォルダ名の変更を許可します。

0

0x20000000

帳票のローカル印刷

帳票のローカル印刷を許可します。
リストビューアでは、印刷と印刷プレビューを許可します。
「帳票の表示」の権限も必要です。

保管フォルダ内の帳票

0

0x40000000

帳票のリモート印刷
(注)

帳票のリモート印刷を許可します。
「帳票の表示」、「印刷フォルダのプロパティ表示」の権限も必要です。

0

0x80000000

帳票の移動

帳票の移動を許可します。
「帳票の削除」の権限も必要です。

1

0x00000001

帳票の複写

帳票の複写を許可します。
「帳票の表示」の権限も必要です。
マイ コンピュータの保管フォルダに帳票を複写する場合は、「名前を付けて保存」の権限も必要です。

1

0x00000002

PDF表示/保存

帳票のPDF 形式での表示/保存を許可します。
「帳票の表示」、「名前を付けて保存」の権限も必要です。

1

0x00000004

PDF変換

帳票のPDF 形式への変換を許可します。
「帳票の表示」、「名前を付けて保存」の権限も必要です。

1

0x00000008

帳票項目の保存

帳票に対して、帳票項目の保存を許可します。

1

0x00000010

抜き出し検索範囲の設定

帳票に対して、抜き出し検索範囲の設定を許可します。

1

0x00000020

オーバレイ位置の設定

帳票に対して、オーバレイ位置の設定を許可します。

1

0x00000040

印刷フォルダの表示

印刷フォルダの表示を許可します。

印刷フォルダ

1

0x00000080

印刷フォルダ配下の帳票一覧表示

印刷フォルダ内配下の帳票一覧表示を許可します。

1

0x00000100

印刷フォルダのプロパティ表示

印刷フォルダのプロパティ表示を許可します。

1

0x00008000

印刷フォルダ内の帳票の移動

印刷フォルダ内の帳票の移動を許可します。
「印刷フォルダ内の帳票の削除」の権限も必要です。

印刷フォルダ内の帳票

1

0x00020000

印刷フォルダ内の帳票の削除

印刷フォルダ内の帳票の削除を許可します。

注:Solaris 11上では、リモート印刷はできません。このため、Solaris 11上では意味をもちません。


復帰値

0:正常終了(ログインを許可する)

-1:異常終了

1:指定されたユーザIDは存在しない。

2:指定されたユーザIDのパスワードの有効期限が切れている。

3:指定されたユーザIDが複数登録されている。

4:パスワードに誤りがある。

5:所属グループ数がiMaxReturnNoを超えている。


補足説明

ユーザの所属グループが「返却可能最大グループ数(構造体LOGIN_INDATAのメンバiMaxReturnNo)」を超えるときは、復帰値に「5(所属グループ数がiMaxReturnNoを超えている)」を設定し、「返却するグループ数(構造体LOGIN_OUTDATAのメンバoGroupNum)」に所属グループ数を設定して復帰してください。この場合は、設定された所属グループ数分の返却領域を獲得しなおして、再度、本ログイン出口モジュールを呼び出します(ただし、現在のユーザ出口認証の仕様として、ユーザの所属できるグループ数の最大値は256グループまでとしています)。


(2) 検索画面情報取得出口のインタフェース

LW_LDAP_GetDisplayCondition関数のインタフェースを以下に示します。


記述形式
int  LW_LDAP_GetDisplayCondition(LDAP_DISPLAY_OUTDATA *lpOutdata)

機能

検索画面情報取得出口(LW_LDAP_GetDisplayCondition関数)は、管理者ツールのアクセス権設定画面などでユーザ一覧/グループ一覧を取得する際の、「ユーザまたはグループの選択」画面構築時に呼び出されます。

「ユーザまたはグループの選択」画面の「検索する項目」に表示する条件(属性項目名)を、出口ルーチンにより設定することができます。

出口ルーチンでは、ユーザ情報検索、およびグループ情報検索で指定可能な属性項目名を出力パラメタに設定して復帰してください。


パラメタの説明
lpOutdata

本関数復帰時に指定するLDAP_DISPLAY_OUTDATAの構造体のアドレスが設定されています。


LDAP_DISPLAY_OUTDATA構造体

LDAP_DISPLAY_OUTDATA構造体の内容を以下に示します。

typedef  struct
{
 int                    oGroupAttrNum;          /* グループ検索用属性名の個数(最大10個まで)   */
 LDAP_SEARCH_ATTR_NAME  groupAttr[10];          /* グループ検索用属性名の配列(最大10個まで)   */
 int                    oUserAttrNum;           /* ユーザ検索用属性名の個数 (最大10個まで)    */
 LDAP_SEARCH_ATTR_NAME  userAttr [10];          /* ユーザ検索用属性名の配列(最大10個まで)     */
}  LDAP_DISPLAY_OUTDATA;

LDAP_DISPLAY_OUTDATA構造体の各メンバの詳細を以下に示します。

メンバ

名称

詳細

oGroupAttrNum

グループ検索用属性名の個数

グループ検索用属性名の個数を1から10で設定します。

groupAttr

グループ検索用属性名の配列

グループ検索用属性名の配列を1から10で設定します。使用しない要素には、NULLを設定します。

oUserAttrNum

ユーザ検索用属性名の個数

ユーザ検索用属性名の個数を1から10で設定します。

userAttr

ユーザ検索用属性名の配列

ユーザ検索用属性名の配列を1から10で設定します。使用しない要素には、NULLを設定します。


LDAP_SEARCH_ATTR_NAME構造体

LDAP_SEARCH_ATTR_NAME構造体の内容を以下に示します。

typedef  struct  {
    char     fieldName[44];                     /* 検索用属性名(有効文字列40バイト)           */
} LDAP_SEARCH_ATTR_NAME;

LDAP_SEARCH_ATTR_NAME構造体の各メンバの詳細を以下に示します。

メンバ

名称

詳細

fieldName

検索用属性名

「ユーザまたはグループの選択」画面の「検索する項目」に表示する内容を40バイト以内で設定します。


復帰値

0:正常終了

-1:異常終了


補足説明

本関数で設定された文字列が検索画面の左側のコンボボックスに表示されます。


(3) グループ情報検索出口のインタフェース

LW_LDAP_SearchGroup関数のインタフェースを以下に示します。


記述形式
int  LW_LDAP_SearchGroup(LDAP_SEARCH_INDATA   *lpIndata,
                         LDAP_SEARCH_OUTDATA  *lpOutdata)

機能

グループ情報検索出口(LW_LDAP_SearchGroup関数)は、管理者ツールでアクセス権設定時に、「ユーザまたはグループの選択」画面でグループを指定して検索した際に呼び出されます。出口ルーチンでは、入力パラメタとして渡された検索条件に該当するグループを検索し、検索でヒットしたグループのグループ情報を出力パラメタに設定して復帰してください。


パラメタの説明
lpIndata

本関数呼び出し時に設定されるLDAP_SEARCH_INDATAの構造体のアドレスが設定されています。

lpOutdata

本関数復帰時に指定するLDAP_SEARCH_OUTDATAの構造体のアドレスが設定されています。


LDAP_SEARCH_INDATA構造体

LDAP_SEARCH_INDATA構造体の内容を以下に示します。

typedef  struct
{
    int                    iEquationCount;   /* 検索条件数(最大3個まで)                     */
    int                    iConjunction;     /* 検索条件の接続子(1:AND 2:OR)                */
    LDAP_SEARCH_CONDITION  iConditions[3];   /* 検索条件                                    */
    int                    iMaxReturnNo;     /* 返却可能最大数                              */
} LDAP_SEARCH_INDATA;

LDAP_SEARCH_INDATA構造体の各メンバの詳細を以下に示します。

メンバ

名称

詳細

iEquationCount

検索条件数

検索条件数が1から3で設定されます。

iConjunction

検索条件の接続子

検索条件が複数ある場合に、接続子(AND/OR)が設定されます。

「ユーザまたはグループの選択」画面の「項目間の条件」で設定されます。

  1:AND (かつ)
  2:OR  (または)

iConditions

検索条件

検索条件が設定されます。

iMaxReturnNo

返却可能最大数

グループ情報、ユーザ情報の返却可能最大数が設定されます。

「ユーザまたはグループの選択」画面の「最大件数」で設定されます。


LDAP_SEARCH_CONDITION構造体

LDAP_SEARCH_CONDITION構造体の内容を以下に示します。

typedef  struct
{
    LDAP_SEARCH_ATTR_NAME  iField;           /* 検索する属性名                              */
    char                   iValue[44];       /* 検索する値(有効文字数40文字)                */
    int                    iOperator;        /* 検索演算子(0:含む 1:先頭にある 2:含まない)  */
} LDAP_SEARCH_CONDITION;

LDAP_SEARCH_CONDITION構造体の各メンバの詳細を以下に示します。

メンバ

名称

詳細

iField

検索する属性名

検索する属性名が設定されます。

「ユーザまたはグループの選択」画面の「検索する項目」で設定されます。

iValue

検索する値

検索に使用する文字列が40バイト以内で設定されます。

「ユーザまたはグループの選択」画面の「検索する値」で設定されます。

iOperator

検索演算子

検索する値の比較条件が設定されます。

「ユーザまたはグループの選択」画面の「比較条件」で設定されます。

  0:検索する値を含む
  1:検索する値から始まる
  2:検索する値を含まない

LDAP_SEARCH_OUTDATA構造体

LDAP_SEARCH_OUTDATA構造体の内容を以下に示します。

typedef  struct
{
    int                        oReturnCount;  /* 返却数(値を格納した数を設定する)            */
    union {
             LDAP_GROUP_INFO     *groups;      /* グループ情報返却領域                         */
                                                   /*   (呼び出し元でiMaxReturnNoサイズを確保)     */
             LDAP_USER_INFO      *users;       /* ユーザ情報返却領域                           */
                                                   /*   (呼び出し元でiMaxReturnNoサイズを確保)     */
    } result;
} LDAP_SEARCH_OUTDATA;

LDAP_SEARCH_OUTDATA構造体の各メンバの詳細を以下に示します。

メンバ

名称

詳細

oReturnCount

返却数

グループ情報、または、ユーザ情報の返却数を設定します。

LDAP_SEARCH_INDATA構造体のiMaxReturnNo以下の値を設定します。

groups

グループ情報返却領域

検索したグループ情報を設定します。

users

ユーザ情報返却領域

検索したユーザ情報を設定します。


復帰値

0:正常終了

1:検索結果が多すぎる。

-1:その他のエラー(LDAP関数のエラー)


補足説明

検索したグループ情報は、グループ情報返却領域(構造体LDAP_SEARCH_OUTDATAのメンバresult.groups)に設定してください。

なお、グループ情報返却領域は、本関数の呼び出し時に返却可能最大数分の領域が獲得されています。返却可能最大数は、構造体LDAP_SEARCH_INDATAのメンバiMaxReturnNoに格納されていますので、検索結果が返却可能最大数を超える場合は、復帰値に「1(検索結果が多すぎる)」を設定して復帰してください。


(4) ユーザ情報検索出口のインタフェース

LW_LDAP_SearchUser関数のインタフェースを以下に示します。


記述形式
int  LW_LDAP_SearchUser(LDAP_SEARCH_INDATA   *lpIndata,
                        LDAP_SEARCH_OUTDATA  *lpOutdata)

機能

ユーザ情報検索出口(LW_LDAP_SearchUser関数)は、管理者ツールでアクセス権設定時に、「ユーザまたはグループの選択」画面でユーザを指定して検索した際に呼び出されます。出口ルーチンでは、入力パラメタとして渡された検索条件に該当するユーザを検索し、検索でヒットしたユーザのユーザ情報を出力パラメタに設定して復帰してください。


パラメタの説明
lpIndata

本関数呼び出し時に設定されるLDAP_SEARCH_INDATAの構造体のアドレスが設定されています。

LDAP_SEARCH_INDATAの構造体は、“(3) グループ情報検索出口のインタフェース”で説明しています。

lpOutdata

本関数復帰時に指定するLDAP_SEARCH_OUTDATAの構造体のアドレスが設定されています。

LDAP_SEARCH_OUTDATAの構造体は、“(3) グループ情報検索出口のインタフェース”で説明しています。


復帰値

0:正常終了

1:検索結果が多すぎる。

-1:その他のエラー(LDAP関数のエラー)


補足説明

検索したユーザ情報は、ユーザ情報返却領域(構造体LDAP_SEARCH_OUTDATAのメンバresult.users)に設定してください。

なお、ユーザ情報返却領域は、本関数の呼び出し時に返却可能最大数分の領域が獲得されています。返却可能最大数は、構造体LDAP_SEARCH_INDATAのメンバiMaxReturnNoに格納されていますので、検索結果が返却可能最大数を超える場合は、復帰値に「1(検索結果が多すぎる)」を設定して復帰してください。