int main(void) { int isRunning = 1; char buffer[MAX_LINE_LENGTH]; char command[MAX_LINE_LENGTH]; while(isRunning){ //int i; printf("> "); fgets(buffer, MAX_LINE_LENGTH, stdin); /*for( i = 0; i < MAX_LINE_LENGTH; i++ ){ buffer[i] = tolower(buffer[i]); }*/ sscanf(buffer, " %s ", (char*)&command); //Switch for commands if(strcmp(command, "BYE") == 0){ /*BYE*/ deleteAllEntry(entry_head); deleteAllSnapshot(snapshot_head); printf("bye"); isRunning = 0; }else if(strcmp(command, "HELP") == 0){ /*HELP*/ cmd_help(); }else if(strcmp(command, "LIST") == 0){ sscanf(buffer + strlen(command), "%s", (char*)&command); if(strcmp(command, "KEYS") == 0){ /*LIST KEYS*/ cmd_list_keys(); }else if(strcmp(command, "ENTRIES") == 0){ /*LIST ENTRIES*/ cmd_list_entries(); }else if(strcmp(command, "SNAPSHOTS") == 0){ /*LIST SNAPSHOTS*/ cmd_list_snapshots(); } }else if(strcmp(command, "GET") == 0){ /*GET*/ char key[MAX_KEY_LENGTH]; sscanf(buffer + strlen(command), "%s", (char*)&key); cmd_get(key); }else if(strcmp(command, "DEL") == 0){ /*DEL*/ char key[MAX_KEY_LENGTH]; sscanf(buffer + strlen(command), "%s", (char*)&key); cmd_del(key); }else if(strcmp(command, "PURGE") == 0){ /*PURGE*/ char key[MAX_KEY_LENGTH]; sscanf(buffer + strlen(command), "%s", (char*)&key); cmd_purge(key); }else if(strcmp(command, "SET") == 0){ /*SET*/ int i = 0; char key[MAX_KEY_LENGTH]; char *endptr; int *values = (int*)malloc(MAX_LINE_LENGTH/2*sizeof(int)); sscanf(buffer + strlen(command), "%s", (char*)&key); endptr = buffer + strlen(command) + strlen(key) + 2; while(1){ values[i] = strtol(endptr, &endptr, 10); if(*endptr == '\n'){ cmd_set(key, values, i+1); break; } i++; } free(values); }else if(strcmp(command, "PUSH") == 0){ /*PUSH*/ int i = 0; char key[MAX_KEY_LENGTH]; char *endptr; int *values = (int*)malloc(MAX_LINE_LENGTH/2*sizeof(int)); sscanf(buffer + strlen(command), "%s", (char*)&key); endptr = buffer + strlen(command) + strlen(key) + 2; while(1){ values[i] = strtol(endptr, &endptr, 10); if(*endptr == '\n'){ cmd_push(key, values, i+1); break; } i++; } free(values); }else if(strcmp(command, "APPEND") == 0){ /*APPEND*/ int i = 0; char key[MAX_KEY_LENGTH]; char *endptr; int *values = (int*)malloc(MAX_LINE_LENGTH/2*sizeof(int)); sscanf(buffer + strlen(command), "%s", (char*)&key); endptr = buffer + strlen(command) + strlen(key) + 2; while(1){ values[i] = strtol(endptr, &endptr, 10); if(*endptr == '\n'){ cmd_append(key, values, i+1); break; } i++; } free(values); }else if(strcmp(command, "PICK") == 0){ /*PICK*/ char key[MAX_KEY_LENGTH]; int index; sscanf(buffer + strlen(command)+1, "%s", (char*)&key); index = strtol(buffer + strlen(command) + strlen(key)+2, (char**)&command, 0); cmd_pick(key, index); }else if(strcmp(command, "PLUCK") == 0){ /*PLUCK*/ char key[MAX_KEY_LENGTH]; int index; sscanf(buffer + strlen(command)+1, "%s", (char*)&key); index = strtol(buffer + strlen(command) + strlen(key)+2, (char**)&command, 0); cmd_pluck(key, index); }else if(strcmp(command, "POP") == 0){ /*POP*/ char key[MAX_KEY_LENGTH]; sscanf(buffer + strlen(command), "%s", (char*)&key); cmd_pop(key); }else if(strcmp(command, "DROP") == 0){ /*DROP*/ int id = strtol(buffer + strlen(command) +1 , (char**)&command, 10); cmd_drop(id); }else if(strcmp(command, "ROLLBACK") == 0){ /*ROLLBACK*/ int id = strtol(buffer + strlen(command) +1 , (char**)&command, 10); cmd_rollback(id); }else if(strcmp(command, "CHECKOUT") == 0){ /*CHECKOUT*/ int id = strtol(buffer + strlen(command) +1 , (char**)&command, 10); cmd_checkout(id); }else if(strcmp(command, "SNAPSHOT") == 0){ /*SNAPSHOT*/ cmd_snapshot(); }else if(strcmp(command, "MIN") == 0){ /*MIN*/ char key[MAX_KEY_LENGTH]; sscanf(buffer + strlen(command), "%s", (char*)&key); cmd_min(key); }else if(strcmp(command, "MAX") == 0){ /*MAX*/ char key[MAX_KEY_LENGTH]; sscanf(buffer + strlen(command), "%s", (char*)&key); cmd_max(key); }else if(strcmp(command, "SUM") == 0){ /*SUM*/ char key[MAX_KEY_LENGTH]; sscanf(buffer + strlen(command), "%s", (char*)&key); cmd_sum(key); }else if(strcmp(command, "LEN") == 0){ /*LEN*/ char key[MAX_KEY_LENGTH]; sscanf(buffer + strlen(command), "%s", (char*)&key); cmd_len(key); }else if(strcmp(command, "REV") == 0){ /*REV*/ char key[MAX_KEY_LENGTH]; sscanf(buffer + strlen(command), "%s", (char*)&key); cmd_rev(key); }else if(strcmp(command, "UNIQ") == 0){ /*UNIQ*/ char key[MAX_KEY_LENGTH]; sscanf(buffer + strlen(command), "%s", (char*)&key); cmd_uniq(key); }else if(strcmp(command, "SORT") == 0){ /*SORT*/ char key[MAX_KEY_LENGTH]; sscanf(buffer + strlen(command), "%s", (char*)&key); cmd_sort(key); }else{ printf("\n"); } } return 0; }
int main (int argc, char *argv[]) { int result; char *config = NULL; int ch; progname = argv[0]; while ((ch = getopt(argc, argv, "c:vVh")) != -1) { switch (ch) { case 'c': config = strdup(optarg); break; case 'v': verbose++; break; case 'V': version(); exit(0); break; case 'h': usage(); exit(0); break; default: usage(); exit(1); } } argc -= optind; argv += optind; if (!argc) { usage(); exit(1); } if (!strcasecmp(argv[0], "logout")) { if (config) free(config); exit(cmd_logout()); } result = hsm_open(config, hsm_prompt_pin); if (result) { hsm_print_error(NULL); exit(-1); } openlog("hsmutil", LOG_PID, LOG_USER); if (!strcasecmp(argv[0], "login")) { argc --; argv ++; result = cmd_login(); } else if (!strcasecmp(argv[0], "list")) { argc --; argv ++; result = cmd_list(argc, argv); } else if (!strcasecmp(argv[0], "generate")) { argc --; argv ++; result = cmd_generate(argc, argv); } else if (!strcasecmp(argv[0], "remove")) { argc --; argv ++; result = cmd_remove(argc, argv); } else if (!strcasecmp(argv[0], "purge")) { argc --; argv ++; result = cmd_purge(argc, argv); } else if (!strcasecmp(argv[0], "dnskey")) { argc --; argv ++; result = cmd_dnskey(argc, argv); } else if (!strcasecmp(argv[0], "test")) { argc --; argv ++; result = cmd_test(argc, argv); } else if (!strcasecmp(argv[0], "info")) { argc --; argv ++; result = cmd_info(); } else if (!strcasecmp(argv[0], "debug")) { argc --; argv ++; result = cmd_debug(); } else { usage(); result = -1; } (void) hsm_close(); if (config) free(config); closelog(); exit(result); }