分享
 
 
 

如何使用PAM静态认证账号。

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

最近在网上找了不少关于pam的资料,虽然很多,但是都只是动态交互进行验证。因为工作需要,需要进行静态的验证,于是写了如下代码。以下在Mac os X上验证通过。如果把#include <pam/pam_appl.h>,#include <pam/pam_misc.h>,改成#include <security/pam_appl.h>,#include <security/pam_misc.h>应该直接可以在Linux,和Unix等支持Posix标准的环境下运行。

#include <sys/param.h>

#include <sys/time.h>

#include <sys/resource.h>

#include <sys/wait.h>

#include <err.h>

#include <errno.h>

#include <grp.h>

#include <paths.h>

#include <pwd.h>

#include <signal.h>

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <syslog.h>

#include <unistd.h>

#include <pam/pam_appl.h>

#include <pam/pam_misc.h>

//#include <pam/pam_misc.h>

int su_conv(int num_msg, const struct pam_message **msgm, //回调函数,非常重要!!!!

struct pam_response **response,void *appdata_ptr);

//static struct pam_conv conv = {misc_conv,NULL};

int main (int argc, const char * argv[])

{

// insert code here...

pam_handle_t *pamh;

const char* mytty,*p;

char *password = "718412";

char *user = "root";

struct pam_conv conv = {su_conv, password};

//其中password就是直接传递给su_conv回调函数void *appdata_ptr 指针

int retval = 100;

printf("uid: %d\n", getuid());

retval = pam_start("su","root",&conv,&pamh);

if(retval = PAM_SUCCESS)

//pam_get_item(pamh,PAM_USER,(const void **)&p);

pam_set_item(pamh,PAM_CONV, getlogin());

mytty = ttyname(STDERR_FILENO);

if (!mytty)

mytty = "tty";

pam_set_item(pamh,PAM_TTY, mytty);

retval = pam_authenticate(pamh,PAM_SILENT);

printf("return code: %d\n", retval);

if(retval != PAM_SUCCESS)

{

printf("invalid password\n");

return -1;

}

retval = pam_end(pamh,PAM_SUCCESS);

printf("uid: %d\n", getuid());

setuid(0);

printf("uid: %d\n", getuid());

printf("the retval is now %d",retval);

return 0;

}

int su_conv(int num_msg, const struct pam_message **msgm,

struct pam_response **response, void *appdata_ptr)

{

char *rec;

struct pam_message *m = (struct pam_message *)*msgm;

struct pam_response *r;

while(num_msg--)

{

switch(m->msg_style)

{

case PAM_PROMPT_ECHO_OFF:

// r->resp = strdup(getpass(m->msg));

r = (struct pam_response *)malloc(sizeof(struct pam_response));

r->resp = (char *)malloc(100);

r->resp_retcode = 0;

strcpy(r->resp, appdata_ptr);

*response = r;

break;

case PAM_PROMPT_ECHO_ON:

//r->resp = (char *)getpass(m->msg);

//fprintf(stdout,"%s",m->msg);

r->resp = malloc(PAM_MAX_RESP_SIZE);

fgets(r->resp,PAM_MAX_RESP_SIZE,stdin);

//gets(rec);

break;

case PAM_ERROR_MSG:

(void)fputs(m->msg,stdout);

break;

case PAM_TEXT_INFO:

fprintf(stdout,"%s\n",m->msg);

break;

default:

break;

}

}

return PAM_SUCCESS;

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有