Mercurial > hg > rlgwebd
comparison sqlickrypt.c @ 119:b1480488ce9d
sqlickrypt: add setpw command.
Allow changing a user's password.
| author | John "Elwin" Edwards <elwin@sdf.org> |
|---|---|
| date | Sat, 28 Jul 2012 07:49:33 -0700 |
| parents | c08717cb7793 |
| children | 0a3ff1267c24 |
comparison
equal
deleted
inserted
replaced
| 118:56a756695740 | 119:b1480488ce9d |
|---|---|
| 4 #include <ctype.h> | 4 #include <ctype.h> |
| 5 #include <sqlite3.h> | 5 #include <sqlite3.h> |
| 6 #include <unistd.h> | 6 #include <unistd.h> |
| 7 #include <crypt.h> | 7 #include <crypt.h> |
| 8 | 8 |
| 9 #define DATABASE "/dgldir/dgamelaunch.db" | 9 #define DATABASE "/dgldir/dgamelaunch-X.db" |
| 10 #define IBUFSIZE 200 | 10 #define IBUFSIZE 200 |
| 11 | 11 |
| 12 /* General idea for return status: | 12 /* General idea for return status: |
| 13 * 0: success | 13 * 0: success |
| 14 * 1: password check failed | 14 * 1: password check failed |
| 143 opendb(&db, &qstmt, setquery); | 143 opendb(&db, &qstmt, setquery); |
| 144 status = sqlite3_bind_text(qstmt, 2, uname, -1, SQLITE_TRANSIENT); | 144 status = sqlite3_bind_text(qstmt, 2, uname, -1, SQLITE_TRANSIENT); |
| 145 if (status) | 145 if (status) |
| 146 cleanup(db, qstmt, 3); | 146 cleanup(db, qstmt, 3); |
| 147 status = sqlite3_bind_text(qstmt, 1, newmail, -1, SQLITE_TRANSIENT); | 147 status = sqlite3_bind_text(qstmt, 1, newmail, -1, SQLITE_TRANSIENT); |
| 148 if (status) | |
| 149 cleanup(db, qstmt, 3); | |
| 150 status = sqlite3_step(qstmt); | |
| 151 if (status != SQLITE_DONE) | |
| 152 cleanup(db, qstmt, 3); | |
| 153 cleanup(db, qstmt, 0); | |
| 154 return 0; | |
| 155 } | |
| 156 | |
| 157 int setpw(char *uname, char *newpw) { | |
| 158 char *setquery = "UPDATE dglusers SET password = ? WHERE username = ?;"; | |
| 159 sqlite3 *db; | |
| 160 sqlite3_stmt *qstmt; | |
| 161 int status; | |
| 162 char *hash; | |
| 163 | |
| 164 /* This is not a smart use of crypt, but it needs to be compatible with | |
| 165 * dgamelaunch. */ | |
| 166 hash = crypt(newpw, newpw); | |
| 167 opendb(&db, &qstmt, setquery); | |
| 168 status = sqlite3_bind_text(qstmt, 2, uname, -1, SQLITE_TRANSIENT); | |
| 169 if (status) | |
| 170 cleanup(db, qstmt, 3); | |
| 171 status = sqlite3_bind_text(qstmt, 1, hash, -1, SQLITE_TRANSIENT); | |
| 148 if (status) | 172 if (status) |
| 149 cleanup(db, qstmt, 3); | 173 cleanup(db, qstmt, 3); |
| 150 status = sqlite3_step(qstmt); | 174 status = sqlite3_step(qstmt); |
| 151 if (status != SQLITE_DONE) | 175 if (status != SQLITE_DONE) |
| 152 cleanup(db, qstmt, 3); | 176 cleanup(db, qstmt, 3); |
| 210 status = getmail(uname); | 234 status = getmail(uname); |
| 211 } | 235 } |
| 212 else if (!strcmp(argv[1], "setmail")) { | 236 else if (!strcmp(argv[1], "setmail")) { |
| 213 status = setmail(uname, line1); | 237 status = setmail(uname, line1); |
| 214 } | 238 } |
| 239 else if (!strcmp(argv[1], "setpw")) { | |
| 240 status = setpw(uname, line1); | |
| 241 } | |
| 215 else | 242 else |
| 216 status = 127; | 243 status = 127; |
| 217 return status; | 244 return status; |
| 218 } | 245 } |
