pwdrestrict_method 子例程

用途

定义可装入的密码限制方法。

语法

int pwdrestrict_method (UserName, NewPassword, OldPassword, Message)
char * UserName;
char * NewPassword;
char * OldPassword;
char ** Message;

描述

pwdrestrict_method 子例程扩展了密码限制软件的功能,并允许管理员实施系统软件未提供的密码限制。

每当用户更改其密码时,系统软件都会扫描为该用户定义的 pwd支票 属性以了解特定于站点的限制。 由于此属性字段可以包含装入模块文件名 (例如,方法) ,因此管理员可以编写和安装强制实施特定于站点的密码限制的代码。

系统按从左到右的顺序对 pwd支票 属性的值字段进行求值。 对于系统迂到的每个方法,系统将装入并调用该方法。 系统使用 load 子例程来装入方法。 它使用 Flags1LibraryPath/usr/lib调用 load 子例程。 装入该方法后,系统将调用该方法。

要创建可装入模块,请使用 ld 命令的 -e 标志。 请注意,语法中给出的名称 pwdrestrict_method 是通用名称。 实际子例程名称可以是除 main以外的任何内容 (在编译器的名称空间内)。 重要的是,对于您选择的任何名称,必须通知 ld 命令该名称,以便 load 子例程使用该名称作为进入模块的入口点。 在以下示例中, C 编译器编译 pwdrestrict.c 文件,并将 -e pwdrestrict_method 传递到 ld 命令以创建名为 pwdrestrict的方法:

cc -e pwdrestrict_method -o pwdrestrict pwdrestrict.c

所有密码限制方法的约定是将消息传递回调用子例程。 请勿将消息打印到 stdout 或 stderr。 此功能允许密码限制软件在 stdout 和 stderr 无效的网络连接之间工作。 请注意,必须在动态分配给调用程序的内存中返回消息。 调用程序将在使用内存完成后释放内存。

存在许多与可装入子例程模块一起使用的警告:

  1. NewPasswordOldPassword 的值是用户输入的实际明文密码。 如果将这些密码复制到内存的其他部分,请先清除这些内存位置,然后再返回到调用程序。 这有助于防止明文密码在核心转储中显示。 此外,请勿将这些密码复制到文件或其他程序可访问的任何位置。 清除文本密码不应存在于进程空间外部。
  2. 请勿修改进程的信号处理程序的当前设置。
  3. 不要调用任何将终止程序执行的函数 (例如, exit 子例程, exec 子例程)。 始终返回到调用程序。
  4. 代码必须是线程安全的。
  5. 实际装入模块必须保留在写保护环境中。 装入模块和目录只能由 root 用户写入。

最后一个注意事项,在调用任何特定于站点的方法之前执行所有标准密码限制。 因此,方法是系统要实施的最后一个限制。

参数

描述
UserName 指定 "本地" 用户名。
NewPassword 以明文 (未加密) 指定新密码。此值可以是 NULL 指针。 明文密码始终采用 7 位 ASCII。
OldPassword 以明文 (未加密) 指定当前密码。此值可以是 NULL 指针。 明文密码始终采用 7 位 ASCII。
消息 指定指向包含 NLS 错误消息的 malloc' ed 内存的指针的地址。 期望该方法提供 malloc的 ed 内存和消息。

返回值

该方法应返回以下值。 返回值按优先顺序列出。

描述
-1 内部错误。 该方法无法执行其密码评估。 该方法必须设置 errno 变量。 除非无法为消息分配内存,否则该方法必须在 消息 中提供错误消息。 如果无法分配内存,那么必须在 消息中返回 NULL 指针。
第 1 年 软件错误。 密码更改未满足限制的要求。 正确评估了密码限制,但未接受密码更改。 该方法必须在 消息中提供错误消息。 忽略 errno 变量。 请注意,组合失败是累积的,因此,即使返回了故障条件,也会调用尾部组合方法。
重大安全事件数量 成功。 密码更改满足限制的要求。 如果需要,该方法可以在 消息中提供消息; 否则,返回 NULL 指针。 忽略 errno 变量。