mirror of https://github.com/FreeRDP/FreeRDP
parse certstore file and print
This commit is contained in:
parent
fe2e8f5132
commit
c9c80f2ec9
|
@ -21,6 +21,7 @@ struct rdp_certstore
|
||||||
char* path;
|
char* path;
|
||||||
char* file;
|
char* file;
|
||||||
char* home;
|
char* home;
|
||||||
|
int match;
|
||||||
struct rdp_certdata* certdata;
|
struct rdp_certdata* certdata;
|
||||||
};
|
};
|
||||||
void certstore_create(rdpCertstore* certstore);
|
void certstore_create(rdpCertstore* certstore);
|
||||||
|
|
|
@ -76,6 +76,7 @@ void certstore_init(rdpCertstore* certstore)
|
||||||
char* home_path;
|
char* home_path;
|
||||||
struct stat stat_info;
|
struct stat stat_info;
|
||||||
|
|
||||||
|
certstore->match=1;
|
||||||
home_path = getenv("HOME");
|
home_path = getenv("HOME");
|
||||||
|
|
||||||
if (home_path == NULL)
|
if (home_path == NULL)
|
||||||
|
@ -134,3 +135,51 @@ void cerstore_free(rdpCertsore* certstore)
|
||||||
xfree(certstore);
|
xfree(certstore);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int match_certdata(rdpCertdata* certdata)
|
||||||
|
{
|
||||||
|
char *host;
|
||||||
|
char *p;
|
||||||
|
char *thumb_print;
|
||||||
|
int length;
|
||||||
|
unsigned char c;
|
||||||
|
FILE* cfp;
|
||||||
|
rdpCertstore* certstore=certstore_new(certdata);
|
||||||
|
cfp=certstore->fp;
|
||||||
|
length=strlen(certdata->thumbprint);
|
||||||
|
for(;;)
|
||||||
|
{
|
||||||
|
if((int)fread(host,sizeof(char),strlen(certdata->hostname),cfp) < strlen(certdata->hostname))
|
||||||
|
break;
|
||||||
|
if((!strcmp(host,certdata->hostname)) && ((c=fgetc(cfp))==' ' || c=='\t') )
|
||||||
|
{
|
||||||
|
ungetc(c,cfp);
|
||||||
|
while((c=fgetc(cfp))==' ' || c=='\t');
|
||||||
|
if(c==EOF)
|
||||||
|
break;
|
||||||
|
ungetc(c,cfp);
|
||||||
|
thumb_print=xzalloc(length+1);
|
||||||
|
p=thumb_print;
|
||||||
|
while((p-thumb_print < length) && (*p=fgetc(cfp))!=EOF && *p!='\n' && *p==certdata->thumbprint+p-thumb_print)
|
||||||
|
p++;
|
||||||
|
if(p-thumb_print==length)
|
||||||
|
certdata->match=0;
|
||||||
|
else
|
||||||
|
certdata->match=-1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
while(c!='\n'||c!=EOF)
|
||||||
|
c=fgetc(cfp);
|
||||||
|
if(c==EOF)
|
||||||
|
break;
|
||||||
|
else
|
||||||
|
ungetc(c,cfp);
|
||||||
|
}
|
||||||
|
return certdata->match;
|
||||||
|
}
|
||||||
|
void print_certdata(rdpCertstore* certstore)
|
||||||
|
{
|
||||||
|
lseek(certstore->fp,0,SEEK_END);
|
||||||
|
fprintf(certstore->fp,"%s %s\n",certstore->certdata->hostname,certstore->certdata->thumbprint);
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue