int retrieve_key(PGconn *conn, char *fingerprint, unsigned int full,struct cks_config *config) { struct openPGP_keyring *keyring = NULL; struct openPGP_pubkey *key_result = NULL; int rslt = 0; key_result = (struct openPGP_pubkey *)retrieve_pubkey(conn,fingerprint,D_SOURCE_ADD_CGI); if(key_result == NULL) { fprintf(stderr,_("Failed to retrieve key: %s\n"),fingerprint); do_error_page(_("Failed to retrieve key from database.\n")); return -1; } rslt = parse_pubkey(&key_result,D_SOURCE_SEARCH_CGI); if(rslt == -1) { fprintf(stderr,_("Failed to parse retrieved pubkey: %s\n"),fingerprint); return -1; } rslt = parse_packets(&key_result,D_SOURCE_SEARCH_CGI); if(rslt == -1) { fprintf(stderr,_("Failed to parse retrieved pubkey's packets: %s\n"),fingerprint); return -1; } if(full) { echo_key_info(conn,key_result); echo_radix_key(key_result,config); } else { printf("<pre>\n"); printf("<hr size=\"1\" width=\"100%%\">\n"); fflush(0); echo_abrev_key_info(conn,key_result); } if(key_result != NULL) { free_pubkey(&key_result); } return rslt; }
int main(int argc,char *argv[]) { struct cks_config *config = NULL; PGconn *conn = NULL; FILE *kr = NULL; PGresult *result = NULL; struct openPGP_pubkey *key_result = NULL; int rslt = 0; int rslt_2 = 0; unsigned long to_export = 0; unsigned long exported = 0; unsigned char fp[41]; unsigned long i = 0; unsigned long j = 0; /* 50000 pubkeys per file. */ unsigned long max_keys = 50000; unsigned int file_num = 0; unsigned char file_name[20]; unsigned int arg = 0; unsigned int verbose = 0; config = (struct cks_config *)malloc(sizeof(struct cks_config)); if(config == NULL) { fprintf(stderr,_("cks_export: Fatal Error: Malloc Call Failed: Out of memroy.\n")); return -1; } rslt = init_config(&config); if(rslt == -1) { fprintf(stderr,_("cks_export: Non-Fatal Error: Failed to read config.\n")); fprintf(stderr,_("cks_export: Using default configuration information.\n")); } if(argc > 0) { for(arg=1;arg<argc;arg++) { if(argv[arg][0] == '-') { if(argv[arg][1] == '-') { if(strstr(argv[arg],"help") != NULL) { printf("Usage: cks_export\n"); printf(" -v Verbose Mode\n"); printf(" -h This Help Text\n"); printf(" --help This Help Text\n"); printf(" --version Display Version Information\n"); printf("\n"); return 0; } else if(strstr(argv[arg],"version") != NULL) { printf("CKS Version 0.2.2\n"); return 0; } } else if(argv[arg][1] == 'v') { verbose = 1; } else { printf("Usage: cks_export\n"); printf(" -v Verbose Mode\n"); printf(" -h This Help Text\n"); printf(" --help This Help Text\n"); printf(" --version Display Version Information\n"); printf("\n"); return 0; } } } } /* open the export file */ if((kr = fopen("cks_ring-000.pgp","wb")) == NULL) { fprintf(stderr,_("cks_export: Failed to open file export_ring.pgp\n")); free(config); return -1; } /* Make the DB Connection. */ conn = db_connect(config); if(conn == NULL) { fprintf(stderr,_("cks_export: Failed to connect to postgres database")); fprintf(stderr,_("cks_export: Connection to database failed.\n")); fprintf(stderr,"cks_export: %s", PQerrorMessage(conn)); if(config != NULL) { free(config); } return -1; } result = PQexec(conn,"select fp from cks_fp_key_table\n"); if(PQresultStatus(result) != PGRES_TUPLES_OK) { fprintf(stderr,_("cks_export: Failed to return tuples.\n")); fprintf(stderr,_("cks_export: Offending Query: select fp from cks_fp_key_table\n")); PQclear(result); db_disconnect(conn); if(config != NULL) { free(config); } return -1; } to_export = PQntuples(result); if(to_export == 0) { fprintf(stderr, _("cks_export: No Records Found.\n")); fprintf(stderr,_("cks_export: Offending Query: select fp from cks_fp_key_table\n")); PQclear(result); db_disconnect(conn); if(config != NULL) { free(config); } return -1; } printf(_("cks_export: exporting %lu keys.\n"),to_export); printf(_("0 of %lu keys exported.\n"),to_export); for(i=0;i<to_export;i++) { key_result = retrieve_pubkey(conn,PQgetvalue(result,i,0),0); rslt_2 = parse_pubkey(&key_result,0); if(rslt_2 != 0) { free_pubkey(&key_result); continue; } rslt_2 = parse_packets(&key_result,0); if(rslt_2 != 0) { /* Thank you. Drive Through. */ free_pubkey(&key_result); continue; } /* Write the key to the out file. */ rslt_2 = decode_radix(key_result); if(rslt_2 != 0) { free_pubkey(&key_result); continue; } /* TODO: Speed this up with fwrite, it's fine for now though. */ for(j=0;j<key_result->buffer_idx;j++) { /* TODO: Check for success here. */ fputc(key_result->buffer[j],kr); } exported++; if((exported % 5000) == 0) { printf(_("%lu of %lu keys exported.\n"),exported,to_export); } /* If i is divisable by max_keys (default: 50,000), open a new file */ if((exported % max_keys) == 0) { fclose(kr); file_num++; snprintf(file_name,19,"cks_ring-%03d.pgp",file_num); if((kr = fopen(file_name,"wb")) == NULL) { fprintf(stderr,_("cks_export: Failed to open file %s\n"),file_name); PQclear(result); db_disconnect(conn); if(config != NULL) { free(config); } return -1; } } free_pubkey(&key_result); } /* Finish. Clean up memory and exit. */ PQclear(result); db_disconnect(conn); fclose(kr); if(config != NULL) { free(config); } return 0; }
static HRESULT parse_display_name(IAssemblyNameImpl *name, LPCWSTR szAssemblyName) { LPWSTR str, save, ptr, ptr2, value; HRESULT hr = S_OK; BOOL done = FALSE; if (!szAssemblyName) return S_OK; name->displayname = strdupW(szAssemblyName); if (!name->displayname) return E_OUTOFMEMORY; str = strdupW(szAssemblyName); save = str; if (!str) { hr = E_OUTOFMEMORY; goto done; } ptr = strchrW(str, ','); if (ptr) *ptr = '\0'; /* no ',' but ' ' only */ if( !ptr && strchrW(str, ' ') ) { hr = FUSION_E_INVALID_NAME; goto done; } name->name = strdupW(str); if (!name->name) { hr = E_OUTOFMEMORY; goto done; } if (!ptr) goto done; str = ptr + 1; while (!done) { ptr = strchrW(str, '='); if (!ptr) { hr = FUSION_E_INVALID_NAME; goto done; } *(ptr++) = '\0'; if (!*ptr) { hr = FUSION_E_INVALID_NAME; goto done; } if (!(ptr2 = strchrW(ptr, ','))) { if (!(ptr2 = strchrW(ptr, '\0'))) { hr = FUSION_E_INVALID_NAME; goto done; } done = TRUE; } *ptr2 = '\0'; if (!(value = parse_value( ptr, ptr2 - ptr ))) { hr = FUSION_E_INVALID_NAME; goto done; } while (*str == ' ') str++; if (!lstrcmpiW(str, version)) hr = parse_version( name, value ); else if (!lstrcmpiW(str, culture)) hr = parse_culture( name, value ); else if (!lstrcmpiW(str, pubkey)) hr = parse_pubkey( name, value ); else if (!lstrcmpiW(str, procarch)) { name->procarch = value; value = NULL; hr = parse_procarch( name, name->procarch ); } HeapFree( GetProcessHeap(), 0, value ); if (FAILED(hr)) goto done; str = ptr2 + 1; } done: HeapFree(GetProcessHeap(), 0, save); if (FAILED(hr)) { HeapFree(GetProcessHeap(), 0, name->displayname); HeapFree(GetProcessHeap(), 0, name->name); HeapFree(GetProcessHeap(), 0, name->culture); HeapFree(GetProcessHeap(), 0, name->procarch); } return hr; }
int retrieve_key_and_display(PGconn *conn, char *fingerprint, unsigned int full,struct cks_config *config) { unsigned long i = 0; FILE *test = NULL; struct openPGP_packet *walk_packet = NULL; int rslt = 0; key_result = (struct openPGP_pubkey *)retrieve_pubkey(conn,fingerprint,D_SOURCE_ADD_CGI); if(key_result == NULL) { fprintf(stderr,_("Failed to retrieve key: %s\n"),fingerprint); do_error_page(_("Failed to retrieve key from database.\n")); return -1; } rslt = parse_pubkey(&key_result,D_SOURCE_SEARCH_CGI); if(rslt == -1) { fprintf(stderr,_("cks: cks_keyimg.c: Failed to parse retrieved pubkey: %s\n"),fingerprint); return -1; } rslt = parse_packets(&key_result,D_SOURCE_SEARCH_CGI); if(rslt == -1) { fprintf(stderr,_("Failed to parse retrieved pubkey's packets: %s\n"),fingerprint); return -1; } // dump_pubkey_packet_info_stderr(key_result); if(NULL == (test = fopen("/tmp/test.jpg","w"))) { fprintf(stderr,"Failed to open out put file.\n"); return -1; } fprintf(stderr,"image_len = %lu\n",key_result->image_len); fputc(0xd8,test); fputc(0xff,test); fputc(0xe0,test); fputc(0xff,test); fputc(0x10,test); fputc(0x00,test); fputc(0x46,test); fputc(0x4a,test); fputc(0x46,test); fputc(0x49,test); fputc(0x01,test); fputc(0x00,test); for(i=0;i<key_result->image_len;i++) { fputc(key_result->img_data[i],test); } fclose(test); printf("Content-type: image/jpg\n\n"); printf("%c%c%c%c%c%c%c%c%c%c\n", 0xd8, 0xff, 0xe0, 0xff, 0x10, 0x00, 0x46, 0x4a, 0x46, 0x49, 0x01, 0x00); for(i=0;i<key_result->image_len;i++) { printf("%c",key_result->img_data[i]); } free_pubkey(&key_result); return rslt; }