📄 disczk.c
字号:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>
#include <fcntl.h>
#include <unistd.h>
#include <shadow.h>
#include "account.h"
#include "acc_file.h"
#include "acc_shm.h"
typedef struct account_pw {
char cid[10]; /* Card ID */
char passwd[16]; /* Card Password */
char type; /* Card type */
char status; /* Card Active Status */
long first_date; /* First login time */
long last_date; /* Last login time */
char account_id[12]; /* Bank account id */
long left_fee; /* Left available fee */
} ACCOUNT_PW;
main(int argc,char **argv)
{
ACCOUNT_PW user_czk;
stru_user user_xf;
FILE *fp_czk;
FILE *fp_xf;
int id,i;
FILE *fp;
char buf[1000];
int j;
char *ptr;
struct spwd sha;
struct spwd *shaptr;
long expire_date;
char *filename;
printf("显示指定储值卡[%s]用户信息\n\n",*(argv+1));
for(i=1;i<=8;i++)
{
if(i==1)
{
filename="account_1.pw";
if((fp_czk=fopen("/usr/radius/raddb/account_1.pw","rb"))==NULL)
{
printf("Cannot open account_1.pw\n");
exit(1);
}
}
if(i==2)
{
filename="account_2.pw";
if((fp_czk=fopen("/usr/radius/raddb/account_2.pw","rb"))==NULL)
{
printf("Cannot open account_2.pw\n");
exit(1);
}
}
if(i==3)
{
filename="account_3.pw";
if((fp_czk=fopen("/usr/radius/raddb/account_3.pw","rb"))==NULL)
{
printf("Cannot open account_3.pw\n");
exit(1);
}
}
if(i==4)
{
filename="account_4.pw";
if((fp_czk=fopen("/usr/radius/raddb/account_4.pw","rb"))==NULL)
{
printf("Cannot open account_4.pw\n");
exit(1);
}
}
if(i==5)
{
filename="account_5.pw";
if((fp_czk=fopen("/usr/radius/raddb/account_5.pw","rb"))==NULL)
{
printf("Cannot open account_5.pw\n");
exit(1);
}
}
if(i==6)
{
filename="account_6.pw";
if((fp_czk=fopen("/usr/radius/raddb/account_6.pw","rb"))==NULL)
{
printf("Cannot open account_6.pw\n");
exit(1);
}
}
if(i==7)
{
filename="account_8.pw";
if((fp_czk=fopen("/usr/radius/raddb/account_8.pw","rb"))==NULL)
{
printf("Cannot open account_8.pw\n");
exit(1);
}
}
if(i==8)
{
filename="account_9.pw";
if((fp_czk=fopen("/usr/radius/raddb/account_9.pw","rb"))==NULL)
{
printf("Cannot open account_9.pw\n");
exit(1);
}
}
while(!feof(fp_czk))
{
if(fread(&user_czk,sizeof(ACCOUNT_PW),1,fp_czk)!=1)
{
printf("在文件%s中没有找到指定帐号的信息!\n",filename);
break;
}
if(strcmp(user_czk.cid,*(argv+1))==0)
{
printf("\n\n在文件%s中找到该用户信息如下:\n",filename);
printf("Card ID is %s\n",user_czk.cid);
printf("Card Password is %s\n",user_czk.passwd);
printf("Card type is %c\n",user_czk.type);
printf("Card Active Status is %c\n",user_czk.status);
printf("First login time is %d\n",user_czk.first_date);
printf("Last login time is %d\n",user_czk.last_date);
printf("Bank account id is %s\n",user_czk.account_id);
printf("Left available fee is %ld\n",user_czk.left_fee);
printf("********************************************************\n");
break;
}
}
}
/* printf("转换原有UNIX用户\n");
if((fp=fopen("/etc/shadow","r"))==NULL)
{
printf("Cannot open shadow file.\n");
exit(1);
}
j=0;
while(!feof(fp))
{
if(fgets(buf,1000,fp)==NULL)
{
printf("Read shadow file error!\n");
break;
}
ptr=strchr(buf,':');
*ptr=0;
shaptr=getspnam(buf);
if(shaptr==NULL)
{
printf("没权限读SHADOW文件!!\n");
exit(-1);
}
printf("用户名:%s\n",shaptr->sp_namp);
printf("密码:%s\n",shaptr->sp_pwdp);
printf("过期日:%d\n",shaptr->sp_expire);
printf("***************\n");
j++;
if(shaptr->sp_expire==-1)
{
expire_date=time(NULL)+10*365*24*60*60;
}
else
{
expire_date=(shaptr->sp_expire)*24*60*60;
}
strcpy(user_xf.Uname,shaptr->sp_namp);
strcpy(user_xf.Passwd,shaptr->sp_pwdp);
user_xf.Uid=id;
user_xf.Gid=129;
user_xf.Ulevel=0;
user_xf.Cid=1;
user_xf.Status=0;
user_xf.Type=0;
user_xf.CostType=2;
strcpy(user_xf.Reserve,"unix_usr");
user_xf.PeriodTm=0xFFFFFFFF;
user_xf.Wday=0xFF;
user_xf.AccvalidTm=time(NULL);
user_xf.AccexpTm=expire_date;
user_xf.Last_time=time(NULL);
user_xf.CashAmt=(expire_date-time(NULL))*10;
user_xf.PointAmt=0;
user_xf.Credit=0;
user_xf.Auth=0;
user_xf.PerLimit=user_xf.CashAmt;
user_xf.DayLimit=user_xf.CashAmt;
user_xf.Amount=0;
user_xf.ListPtr=-1;
user_xf.UertPtr=-1;
if(fwrite(&user_xf,sizeof(stru_user),1,fp_xf)!=1)
{
printf("Write user.dat error!\n");
exit(-1);
}
id++;
}
fclose(fp_xf);
printf("转换了原有UNIX用户总数为:%d\n",j);
printf("总用户数(储值卡用户及原有UNIX用户):%d\n",id);
*/
printf("结束!\n");
exit(0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -