sqlickrypt: add setpw command.

Allow changing a user's password.
This commit is contained in:
John "Elwin" Edwards 2012-07-28 07:49:33 -07:00
parent f1c5196829
commit 85708c5810

View file

@ -6,7 +6,7 @@
#include <unistd.h> #include <unistd.h>
#include <crypt.h> #include <crypt.h>
#define DATABASE "/dgldir/dgamelaunch.db" #define DATABASE "/dgldir/dgamelaunch-X.db"
#define IBUFSIZE 200 #define IBUFSIZE 200
/* General idea for return status: /* General idea for return status:
@ -154,6 +154,30 @@ int setmail(char *uname, char *newmail) {
return 0; return 0;
} }
int setpw(char *uname, char *newpw) {
char *setquery = "UPDATE dglusers SET password = ? WHERE username = ?;";
sqlite3 *db;
sqlite3_stmt *qstmt;
int status;
char *hash;
/* This is not a smart use of crypt, but it needs to be compatible with
* dgamelaunch. */
hash = crypt(newpw, newpw);
opendb(&db, &qstmt, setquery);
status = sqlite3_bind_text(qstmt, 2, uname, -1, SQLITE_TRANSIENT);
if (status)
cleanup(db, qstmt, 3);
status = sqlite3_bind_text(qstmt, 1, hash, -1, SQLITE_TRANSIENT);
if (status)
cleanup(db, qstmt, 3);
status = sqlite3_step(qstmt);
if (status != SQLITE_DONE)
cleanup(db, qstmt, 3);
cleanup(db, qstmt, 0);
return 0;
}
int main(int argc, char *argv[]) { int main(int argc, char *argv[]) {
char ibuf[IBUFSIZE], *uname, *line1, *line2; char ibuf[IBUFSIZE], *uname, *line1, *line2;
char *cptr; // Utility pointer char *cptr; // Utility pointer
@ -212,6 +236,9 @@ int main(int argc, char *argv[]) {
else if (!strcmp(argv[1], "setmail")) { else if (!strcmp(argv[1], "setmail")) {
status = setmail(uname, line1); status = setmail(uname, line1);
} }
else if (!strcmp(argv[1], "setpw")) {
status = setpw(uname, line1);
}
else else
status = 127; status = 127;
return status; return status;