int main2(void) { // variable declaration and fixed memory allocation char data[MAXLEN]; memset(data,MAXLEN,0); char textinput[DATALEN]; memset(textinput,DATALEN,0); char radiobutton[DATALEN]; memset(radiobutton,DATALEN,0); char checkbox[DATALEN]; memset(checkbox,DATALEN,0); char textarea[DATALEN]; memset(textarea,DATALEN,0); char select[DATALEN]; memset(select,DATALEN,0); char fileupload[DATALEN]; memset(fileupload,DATALEN,0); // get data get_data(get_length(), &data[0]); // initialize cgi cgi_init(); start_html("ME4_Group2"); // print data to screen debug_to_screen(get_length(), &data[0]); // get value of each element get_element(&data[0],"textinput1", &textinput[0]); printf(" <br>textinput1=\"%s\"\n", textinput); get_element(&data[0],"radiobutton1", &radiobutton[0]); printf(" <br>radiobutton1=\"%s\"\n", radiobutton); get_element(&data[0],"checkbox1", &checkbox[0]); printf(" <br>checkbox1=\"%s\"\n", checkbox); get_element(&data[0],"textarea1", &textarea[0]); printf(" <br>textarea1=\"%s\"\n", textarea); get_element(&data[0],"select1", &select[0]); printf(" <br>select1=\"%s\"\n", select); int status = save_upload(&data[0],"fileupload1", &fileupload[0]); printf(" <br>fileupload1=\"%s\"\n", fileupload); if(status == 0) { printf(" <br>\"%s\" saved to cgi-bin\n", fileupload); } // end cgi end_html(); return 0; }
int main(int argc, char *argv[]) { char **params = NULL; int op = OP_UNKNOWN; int i, j; int indx = 0; bool dispfp = false; bool skshash = false; bool exact = false; bool ishex = false; bool isfp = false; bool mrhkp = false; uint64_t keyid = 0; struct openpgp_fingerprint fingerprint; char *search = NULL; char *end = NULL; struct openpgp_publickey *publickey = NULL; struct openpgp_packet_list *packets = NULL; struct openpgp_packet_list *list_end = NULL; int result; struct skshash hash; struct onak_dbctx *dbctx; params = getcgivars(argc, argv); for (i = 0; params != NULL && params[i] != NULL; i += 2) { if (!strcmp(params[i], "op")) { if (!strcmp(params[i+1], "get")) { op = OP_GET; } else if (!strcmp(params[i+1], "hget")) { op = OP_HGET; } else if (!strcmp(params[i+1], "index")) { op = OP_INDEX; } else if (!strcmp(params[i+1], "vindex")) { op = OP_VINDEX; } else if (!strcmp(params[i+1], "photo")) { op = OP_PHOTO; } } else if (!strcmp(params[i], "search")) { search = params[i+1]; params[i+1] = NULL; if (search != NULL && strlen(search) == 42 && search[0] == '0' && search[1] == 'x') { /* v4 fingerprint */ fingerprint.length = 20; for (j = 0; j < 20; j++) { fingerprint.fp[j] = (hex2bin( search[2 + j * 2]) << 4) + hex2bin(search[3 + j * 2]); } isfp = true; } else if (search != NULL && strlen(search) == 66 && search[0] == '0' && search[1] == 'x') { /* v5 fingerprint */ fingerprint.length = 32; for (j = 0; j < 32; j++) { fingerprint.fp[j] = (hex2bin( search[2 + j * 2]) << 4) + hex2bin(search[3 + j * 2]); } isfp = true; } else if (search != NULL) { keyid = strtoull(search, &end, 16); if (*search != 0 && end != NULL && *end == 0) { ishex = true; } } } else if (!strcmp(params[i], "idx")) { indx = atoi(params[i+1]); } else if (!strcmp(params[i], "fingerprint")) { if (!strcmp(params[i+1], "on")) { dispfp = true; } } else if (!strcmp(params[i], "hash")) { if (!strcmp(params[i+1], "on")) { skshash = true; } } else if (!strcmp(params[i], "exact")) { if (!strcmp(params[i+1], "on")) { exact = true; } } else if (!strcmp(params[i], "options")) { /* * TODO: We should be smarter about this; options may * have several entries. For now mr is the only valid * one though. */ if (!strcmp(params[i+1], "mr")) { mrhkp = true; } } free(params[i]); params[i] = NULL; if (params[i+1] != NULL) { free(params[i+1]); params[i+1] = NULL; } } if (params != NULL) { free(params); params = NULL; } if (mrhkp) { puts("Content-Type: text/plain\n"); } else if (op == OP_PHOTO) { puts("Content-Type: image/jpeg\n"); } else { start_html("Lookup of key"); } if (op == OP_UNKNOWN) { puts("Error: No operation supplied."); } else if (search == NULL) { puts("Error: No key to search for supplied."); } else { readconfig(NULL); initlogthing("lookup", config.logfile); catchsignals(); dbctx = config.dbinit(config.backend, false); switch (op) { case OP_GET: case OP_HGET: if (op == OP_HGET) { parse_skshash(search, &hash); result = dbctx->fetch_key_skshash(dbctx, &hash, &publickey); } else if (ishex) { result = dbctx->fetch_key_id(dbctx, keyid, &publickey, false); } else if (isfp) { result = dbctx->fetch_key_fp(dbctx, &fingerprint, &publickey, false); } else { result = dbctx->fetch_key_text(dbctx, search, &publickey); } if (result) { logthing(LOGTHING_NOTICE, "Found %d key(s) for search %s", result, search); puts("<pre>"); cleankeys(&publickey, config.clean_policies); flatten_publickey(publickey, &packets, &list_end); armor_openpgp_stream(stdout_putchar, NULL, packets); puts("</pre>"); } else { logthing(LOGTHING_NOTICE, "Failed to find key for search %s", search); puts("Key not found"); } break; case OP_INDEX: find_keys(dbctx, search, keyid, &fingerprint, ishex, isfp, dispfp, skshash, exact, false, mrhkp); break; case OP_VINDEX: find_keys(dbctx, search, keyid, &fingerprint, ishex, isfp, dispfp, skshash, exact, true, mrhkp); break; case OP_PHOTO: if (isfp) { dbctx->fetch_key_fp(dbctx, &fingerprint, &publickey, false); } else { dbctx->fetch_key_id(dbctx, keyid, &publickey, false); } if (publickey != NULL) { unsigned char *photo = NULL; size_t length = 0; if (getphoto(publickey, indx, &photo, &length) == ONAK_E_OK) { fwrite(photo, 1, length, stdout); } free_publickey(publickey); publickey = NULL; } break; default: puts("Unknown operation!"); } dbctx->cleanupdb(dbctx); cleanuplogthing(); cleanupconfig(); } if (!mrhkp) { puts("<hr>"); puts("Produced by onak " ONAK_VERSION ); end_html(); } if (search != NULL) { free(search); search = NULL; } return (EXIT_SUCCESS); }