|
如何处理用户登录及权限设置? struct passwd *pw; // used for /etc/passwd struct spwd *spw; // used for /etc/shadow char *username = "Pacific"; //用户名 char *input_passwd = "123456"; // 输入的密码 char *passwd; char tmp[13];
if (getuid() != 0) { /* 只有root有权作此操作 */
}; /* 取得/etc/passwd中间对应于本用户的数据结构 */ if ((pw = getpwnam(username)) == NULL) {
}; /* 取得/etc/shadow中被隐藏的密码 */ spw = getspnam(username); if (spw == NULL || (passwd = spw->sp_pwdp) == NULL) {
};
/* 取得passwd的前12个字节作为种子 */ strncpy(tmp, passwd, 12); /* 判断输入的密码加密后是否与原密码相同 */ if (strcmp(passwd, crypt(input_passwd, tmp)) != 0) {
}; /* 密码正确,改变程序权限 */ setuid(pw->pw_uid);
/* 获得并进入用户根目录 */ if (pw->pw_dir) strncpy(path, pw->pw_dir, PATH_MAX);
chdir(path);
|