From f1cd029146b6abafb185a9cd5fc42846f5290cc0 Mon Sep 17 00:00:00 2001 From: Michael Hohn Date: Tue, 30 Jun 2020 10:48:52 -0700 Subject: [PATCH] Create add-user.svg from add-user.c --- add-user.svg | 997 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 997 insertions(+) create mode 100644 add-user.svg diff --git a/add-user.svg b/add-user.svg new file mode 100644 index 0000000..3e67568 --- /dev/null +++ b/add-user.svg @@ -0,0 +1,997 @@ + + + + + + image/svg+xml + + + + + + + #include <stdio.h> + #include <stdlib.h> + #include <unistd.h> + #include <ctype.h> + #include <sqlite3.h> + #include <time.h> + + void write_log(const char* fmt, ...) { +     time_t t; +     char tstr[26]; +     va_list args; + +     va_start(args, fmt); +     t = time(NULL); +     ctime_r(&t, tstr); +     tstr[24= 0/* no \n */ +     fprintf(stderr, "[%s] ", tstr); +     vfprintf(stderr, fmt, args); +     va_end(args); +     fflush(stderr); + } + + void abort_on_error(int rc, sqlite3 *db) { +     if( rc ) { +         fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db)); +         sqlite3_close(db); +         fflush(stderr); +         abort(); +     } + } + + void abort_on_exec_error(int rc, sqlite3 *db, char* zErrMsg) { +     if( rc!=SQLITE_OK ){ +         fprintf(stderr, "SQL error: %s\n", zErrMsg); +         sqlite3_free(zErrMsg); +         sqlite3_close(db); +         fflush(stderr); +         abort(); +     } + } +      + char* get_user_info() { + #define BUFSIZE 1024 +     char* buf = (char*) malloc(BUFSIZE * sizeof(char)); +     int count; +     // Disable buffering to avoid need for fflush +     // after printf(). +     setbuf( stdout, NULL ); +     printf("*** Welcome to sql injection ***\n"); +     printf("Please enter name: "); +     count = read(STDIN_FILENO, buf, BUFSIZE); +     if (count <= 0) abort(); +     /* strip trailing whitespace */ +     while (count && isspace(buf[count-1])) { +         buf[count-1= 0--count; +     } +     return buf; + } + + int get_new_id() { +     int id = getpid(); +     return id; + } + + void write_info(int id, char* info) { +     sqlite3 *db; +     int rc; +     int bufsize = 1024; +     char *zErrMsg = 0; +     char query[bufsize]; +      +     /* open db */ +     rc = sqlite3_open("users.sqlite"&db); +     abort_on_error(rc, db); + +     /* Format query */ +     snprintf(query, bufsize, "INSERT INTO users VALUES (%d, '%s')", id, info); +     write_log("query: %s\n", query); + +     /* Write info */ +     rc = sqlite3_exec(db, query, NULL0&zErrMsg); +     abort_on_exec_error(rc, db, zErrMsg); + +     sqlite3_close(db); + } + + int main(int argc, char* argv[]) { +     char* info; +     int id; +     info = get_user_info(); +     id = get_new_id(); +     write_info(id, info); +     /* +      * show_info(id); +      */ + } + +