pwdrestrict_method 子例程
用途
定义可装入的密码限制方法。
库
语法
int pwdrestrict_method (UserName, NewPassword, OldPassword, Message)
char * UserName;
char * NewPassword;
char * OldPassword;
char ** Message;描述
pwdrestrict_method 子例程扩展了密码限制软件的功能,并允许管理员实施系统软件未提供的密码限制。
每当用户更改其密码时,系统软件都会扫描为该用户定义的 pwd支票 属性以了解特定于站点的限制。 由于此属性字段可以包含装入模块文件名 (例如,方法) ,因此管理员可以编写和安装强制实施特定于站点的密码限制的代码。
系统按从左到右的顺序对 pwd支票 属性的值字段进行求值。 对于系统迂到的每个方法,系统将装入并调用该方法。 系统使用 load 子例程来装入方法。 它使用 Flags 值 1 和 LibraryPath 值 /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 无效的网络连接之间工作。 请注意,必须在动态分配给调用程序的内存中返回消息。 调用程序将在使用内存完成后释放内存。
存在许多与可装入子例程模块一起使用的警告:
- NewPassword 和 OldPassword 的值是用户输入的实际明文密码。 如果将这些密码复制到内存的其他部分,请先清除这些内存位置,然后再返回到调用程序。 这有助于防止明文密码在核心转储中显示。 此外,请勿将这些密码复制到文件或其他程序可访问的任何位置。 清除文本密码不应存在于进程空间外部。
- 请勿修改进程的信号处理程序的当前设置。
- 不要调用任何将终止程序执行的函数 (例如, exit 子例程, exec 子例程)。 始终返回到调用程序。
- 代码必须是线程安全的。
- 实际装入模块必须保留在写保护环境中。 装入模块和目录只能由 root 用户写入。
最后一个注意事项,在调用任何特定于站点的方法之前执行所有标准密码限制。 因此,方法是系统要实施的最后一个限制。
参数
| 项 | 描述 |
|---|---|
| UserName | 指定 "本地" 用户名。 |
| NewPassword | 以明文 (未加密) 指定新密码。此值可以是 NULL 指针。 明文密码始终采用 7 位 ASCII。 |
| OldPassword | 以明文 (未加密) 指定当前密码。此值可以是 NULL 指针。 明文密码始终采用 7 位 ASCII。 |
| 消息 | 指定指向包含 NLS 错误消息的 malloc' ed 内存的指针的地址。 期望该方法提供 malloc的 ed 内存和消息。 |
返回值
该方法应返回以下值。 返回值按优先顺序列出。
| 项 | 描述 |
|---|---|
| -1 | 内部错误。 该方法无法执行其密码评估。 该方法必须设置 errno 变量。 除非无法为消息分配内存,否则该方法必须在 消息 中提供错误消息。 如果无法分配内存,那么必须在 消息中返回 NULL 指针。 |
| 第 1 年 | 软件错误。 密码更改未满足限制的要求。 正确评估了密码限制,但未接受密码更改。 该方法必须在 消息中提供错误消息。 忽略 errno 变量。 请注意,组合失败是累积的,因此,即使返回了故障条件,也会调用尾部组合方法。 |
| 重大安全事件数量 | 成功。 密码更改满足限制的要求。 如果需要,该方法可以在 消息中提供消息; 否则,返回 NULL 指针。 忽略 errno 变量。 |