原标题:Linux身份鉴别机制实现分析(6)
2.4.2.5内部函数
1. parse_args()
函数原型:
static int parse_args(pam_handle_t *pamh, struct login_info *loginfo,int argc, const char **argv)
函数功能:是用于解析配置文件中的信息
函数参数:pam_handle_t结构体表示整个PAM过程信息,loginfo表示用户信息,argc是配置文件中命令行参数个数,argv表示配置文件中命令行参数数组。
返回值:正确则返回0。
2. isipaddr()
函数原型:static int isipaddr (const char *string, int *addr_type,struct sockaddr_storage *addr)
函数功能:判断传递的字符string是否为ip信息
函数参数:string表示传递的表示IP的字符串,addr_type表示IP地址类型,addr表示用于存储的socket中地址类型。
返回值:整型的is_ip,是IP则返回0,不是则返回1.
3. are_addresses_equal()
函数原型:static int are_addresses_equal (const char *ipaddr0, const char *ipaddr1,const char *netmask)
函数功能:函数是将得到的IP地址与真实的IP相比较,查看是否一致。
函数参数:获得的ipaddr0和ipaddr1都是IP地址,netmask也表示IP地址。
返回值:相同则返回0。
4. login_access()
函数原型:static int login_access (pam_handle_t *pamh, struct login_info *item)
函数功能:通过读取配置文件中的信息验证用户是否具有权限
函数参数:pamh为整个PAM的过程参数,item是login_info的结构体表示传递的用户信息。
返回值:成功则返回0。
5. list_match()
函数原型:static int list_match (pam_handle_t *, char *, char *, struct login_info *,match_func *);
函数功能:查看配置文件中该行是否符合编写要求
函数参数:pam_handle_t为整个PAM过程,login_info表示用户信息。
返回值:成功则返回0。
7. user_match()
函数原型:static int user_match (pam_handle_t *, char *, struct login_info *);
函数功能:查看用户名是否相符。
函数参数:pam_handle_t为整个PAM过程,login_info表示用户信息。
返回值:若相符合则返回0。
8. group_match()
函数原型:static int group_match (pam_handle_t *, const char *, const char *, int);
函数功能:查看组名是否相符合。
函数参数:pam_handle_t为整个PAM过程,login_info表示用户信息。
返回值:若相符合则返回0。
9. from_match()
函数原型:static int from_match (pam_handle_t *, char *, struct login_info *);
函数功能:查看远程登录名是否符合。
函数参数:pam_handle_t为整个PAM过程,login_info表示用户信息。
返回值:若相符合则返回0。
10. string_match()
函数原型:static int string_match (pam_handle_t *, const char *, const char *, int);
函数功能:查看字符串是否相符合。
函数参数:pam_handle_t为整个PAM过程,login_info表示用户信息
返回值:若相符合则返回0。
11. network_netmask_match()
函数原型:static char *number_to_netmask (long netmask, int addr_type,
char *ipaddr_buf, size_t ipaddr_buf_len)
函数功能:查看网络掩码是否相符合。
函数参数:netmask表示网络掩码,addr_type表示传递的网络掩码类型,ipaddr_buf表示网络地址,ipaddr_bud_len表示地址长度。
返回值:若符合则返回0。
这里对login_access()函数进行更具体的分析,其流程图如下:
图2-8 pam_sm_authenticate函数流程图
(1)打开相应配置文件,开始逐行读取配置文件信息;
(2)如果行开头为“#”,则忽略此行,读取下一行命令;
(3)如果有空白行,则跳过空白行,读取下一行命令;
(4)获得配置文件中关于用户权限、用户名、以及登录来源的信息,并查看格式是正确;
(5)根据得到的用户名及登录来源通过list_match查看是否为正确的用户名及登录来源;
(6)如果都符合且权限行为“+”,则赋予权限。
2.4.2.6 核心代码注释
责任编辑: