comparison sqlickrypt.c @ 24:9d5da43c0e83

sqlickrypt.c: begin converting to parametrized queries. Switch the check() function to use parametrized SQL queries instead of contructing statements with strcat(), for obvious reasons.
author John "Elwin" Edwards <elwin@sdf.org>
date Sun, 03 Jun 2012 17:08:40 -0700
parents 59ea628abb81
children f275d816e857
comparison
equal deleted inserted replaced
23:21de24c08aed 24:9d5da43c0e83
28 *((int *) targ) = 1; 28 *((int *) targ) = 1;
29 return 0; 29 return 0;
30 } 30 }
31 31
32 int check(char *uname, char *pw) { 32 int check(char *uname, char *pw) {
33 char finduser_sql[160]; 33 char *pwhash, *comphash;
34 char *pwhash = NULL, *comphash; 34 char *query = "SELECT password FROM dglusers WHERE username=?;";
35 int status; 35 int status;
36 sqlite3 *db; 36 sqlite3 *db;
37 37 sqlite3_stmt *qstmt;
38 strcpy(finduser_sql, "SELECT * FROM dglusers WHERE username='");
39 strncat(finduser_sql, uname, 40);
40 strcat(finduser_sql, "';");
41 38
42 status = sqlite3_open(DATABASE, &db); 39 status = sqlite3_open(DATABASE, &db);
43 if (status) { 40 if (status) {
44 sqlite3_close(db); 41 sqlite3_close(db);
45 return 1; 42 return 3;
46 } 43 }
47 sqlite3_exec(db, finduser_sql, xcallback, (void *) &pwhash, NULL); 44 sqlite3_prepare_v2(db, query, -1, &qstmt, NULL);
45 if (qstmt == NULL) {
46 sqlite3_close(db);
47 return 3;
48 }
49 status = sqlite3_bind_text(qstmt, 1, uname, -1, SQLITE_TRANSIENT);
50 if (status) {
51 sqlite3_finalize(qstmt);
52 sqlite3_close(db);
53 return 3;
54 }
55 status = sqlite3_step(qstmt);
56 if (status != SQLITE_ROW) {
57 sqlite3_finalize(qstmt);
58 sqlite3_close(db);
59 if (status == SQLITE_DONE)
60 return 2; /* User not found */
61 return 3;
62 }
63 pwhash = strdup((char *) sqlite3_column_text(qstmt, 0));
64 /* Clean up */
65 sqlite3_finalize(qstmt);
66 sqlite3_close(db);
48 67
49 sqlite3_close(db); 68 /* Check the password */
50 /* Now check the password. */
51 if (pwhash == NULL) {
52 return 2;
53 }
54 comphash = crypt(pw, pwhash); 69 comphash = crypt(pw, pwhash);
55 if (!strcmp(pwhash, comphash)) 70 if (!strcmp(pwhash, comphash))
56 return 0; 71 status = 0;
57 return 1; 72 else
73 status = 1;
74 free(pwhash);
75 return status;
58 } 76 }
59 77
60 int insertuser(char *uname, char *pw, char *email) { 78 int insertuser(char *uname, char *pw, char *email) {
61 char finduser_sql[160]; 79 char finduser_sql[160];
62 int status; 80 int status;