summaryrefslogtreecommitdiffstats
path: root/mbbsd/passwd.c
diff options
context:
space:
mode:
authorpiaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2009-06-06 22:24:50 +0800
committerpiaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2009-06-06 22:24:50 +0800
commit2cf681116231eb085a985917ae19188f06dc041e (patch)
tree43a55cb156587c9451d27ea3aaaa1a0ad9e51a5c /mbbsd/passwd.c
parent9c4e5e52c6b9de0ff0873fd76a3d187a19fb45da (diff)
downloadpttbbs-2cf681116231eb085a985917ae19188f06dc041e.tar
pttbbs-2cf681116231eb085a985917ae19188f06dc041e.tar.gz
pttbbs-2cf681116231eb085a985917ae19188f06dc041e.tar.bz2
pttbbs-2cf681116231eb085a985917ae19188f06dc041e.tar.lz
pttbbs-2cf681116231eb085a985917ae19188f06dc041e.tar.xz
pttbbs-2cf681116231eb085a985917ae19188f06dc041e.tar.zst
pttbbs-2cf681116231eb085a985917ae19188f06dc041e.zip
- refine and prepare for login daemon:
* change str_guest and str_new to macro definition names * make passwd utilites (check, verify, ...) available in util_passwd * make logattemtp() use assigned time and host. git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@4498 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
Diffstat (limited to 'mbbsd/passwd.c')
-rw-r--r--mbbsd/passwd.c70
1 files changed, 70 insertions, 0 deletions
diff --git a/mbbsd/passwd.c b/mbbsd/passwd.c
index ac349654..86a347ba 100644
--- a/mbbsd/passwd.c
+++ b/mbbsd/passwd.c
@@ -188,3 +188,73 @@ passwd_unlock(void)
exit(1);
}
}
+
+// XXX NOTE: string in plain will be destroyed.
+int
+checkpasswd(const char *passwd, char *plain)
+{
+ int ok;
+ char *pw;
+
+ ok = 0;
+ pw = fcrypt(plain, passwd);
+ if(pw && strcmp(pw, passwd)==0)
+ ok = 1;
+ memset(plain, 0, strlen(plain));
+
+ return ok;
+}
+
+char *
+genpasswd(char *pw)
+{
+ if (pw[0]) {
+ char saltc[2], c;
+ int i;
+
+ i = 9 * getpid();
+ saltc[0] = i & 077;
+ saltc[1] = (i >> 6) & 077;
+
+ for (i = 0; i < 2; i++) {
+ c = saltc[i] + '.';
+ if (c > '9')
+ c += 7;
+ if (c > 'Z')
+ c += 6;
+ saltc[i] = c;
+ }
+ return fcrypt(pw, saltc);
+ }
+ return "";
+}
+
+
+void
+logattempt(const char *uid, char type, time4_t now, const char *loghost)
+{
+ char fname[PATHLEN];
+ int fd, len;
+ char genbuf[200];
+
+ snprintf(genbuf, sizeof(genbuf), "%c%-12s[%s] ?@%s\n", type, uid,
+ Cdate(&now), loghost);
+ len = strlen(genbuf);
+ // log to public (BBSHOME)
+ if ((fd = open(FN_BADLOGIN, O_WRONLY | O_CREAT | O_APPEND, 0644)) > 0) {
+ write(fd, genbuf, len);
+ close(fd);
+ }
+ // log to user private log
+ if (type == '-') {
+ snprintf(genbuf, sizeof(genbuf),
+ "[%s] %s\n", Cdate(&now), loghost);
+ len = strlen(genbuf);
+ sethomefile(fname, uid, FN_BADLOGIN);
+ if ((fd = open(fname, O_WRONLY | O_CREAT | O_APPEND, 0644)) > 0) {
+ write(fd, genbuf, len);
+ close(fd);
+ }
+ }
+}
+