diff options
author | piaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2009-06-06 22:24:50 +0800 |
---|---|---|
committer | piaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2009-06-06 22:24:50 +0800 |
commit | 2cf681116231eb085a985917ae19188f06dc041e (patch) | |
tree | 43a55cb156587c9451d27ea3aaaa1a0ad9e51a5c /mbbsd/passwd.c | |
parent | 9c4e5e52c6b9de0ff0873fd76a3d187a19fb45da (diff) | |
download | pttbbs-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.c | 70 |
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); + } + } +} + |