#include
#include
#include
#include
#include
#include

#define max 8192
#define umax 128

int slip(char *,char *,char*);
int char2int(char *);

int main()
{
    int fp;
    FILE* stream;
    uid_t cuser;
    char temp[umax][max];
    char fname;
    int i=0;
    char cname[20];
    char userid[10];
    cuser=geteuid();

    if((stream=fopen("/etc/passwd","r"))==NULL)exit(1);
    while((fname=fgetc(stream)) != (char)EOF) {
        temp[i][0]=fname;
        if(fgets(&temp[i++][1],max,stream)==NULL)exit(1);
    }
    for(i=0;i        if(slip(temp[i],cname,userid)==0)exit(1);
        if(cuser==char2int(userid))break;
    }
    printf("the users name is %s\n",cname);
}

int slip(char* str,char* name,char* userid)
{
    int i=0,j=0,k;
    char* cp;
    char retvalu[10]={};
    for(k=0;k<20;k++)
    name[k]=0;
    cp=str;
    while((*cp)!=':') {
        name[i++]=*cp;
        cp++;
    }
    cp++;
    while((*cp)!=':') cp++;
    cp++;
    while((*cp)!=':') {
        retvalu[j++]=*cp;
        cp++;
    }
    k=0;
    while(k<10) {
        userid[k]=retvalu[k];
        k++;
    }
    if(name==NULL)return 0;
    return 1;
}

int char2int(char* ca)
{
    char* p;
    int ret;
    p=ca;
    if(p[4]) {
        return ret=((int)p[0]-48)*10000+((int)p[1]-48)*1000+((int)p[2]-48)*100+((int)p[3]-48)*10+((int)p[4]-48);
    }
    else if(p[3]) {
        return ret=((int)p[0]-48)*1000+((int)p[1]-48)*100+((int)p[2]-48)*10+((int)p[3]-48);
    }
    else if(p[2]) {
        return ret=((int)p[0]-48)*100+((int)p[1]-48)*10+((int)p[2]-48);
    }
    else if(p[1]) {
        return ret=((int)p[0]-48)*10+((int)p[1]-48);
    }
    else if(p[0]) {
        return ret=((int)p[0]-48);
    }
    else {
        return 0;
    }
}

出處:http://www.jtzjsc.com.cn/24581.html

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()