Return to BSD News archive
Xref: sserve comp.infosystems.www.servers.unix:1484 comp.unix.bsd.freebsd.misc:2567 Path: sserve!newshost.anu.edu.au!harbinger.cc.monash.edu.au!simtel!news.sprintlink.net!cam.news.pipex.net!pipex!edi.news.pipex.net!pipex!sunic!sunic.sunet.se!news.funet.fi!news.eunet.fi!news.spb.su!hq.pu.ru!dux.ru!newsserv From: ptitz@myframe.dux.ru Newsgroups: comp.infosystems.www.servers.unix,comp.unix.bsd.freebsd.misc Subject: Re: Desperate for CERN Passwd prog Date: 25 Jun 1995 22:39:35 GMT Organization: DUX Lines: 116 Message-ID: <3skoj7$eod@hq.pu.ru> NNTP-Posting-Host: ns.dux.ru Keywords: cern htadm freebsd In comp.infosystems.www.servers.unix,comp.unix.bsd.freebsd.misc article <3scfq6$n3k@sun.sirius.com> Timothy Kingwell writes: >Hi. I have CERN 3.0 and FreeBSD 2.0. Is there anyone out there with the >same setup who has been able to compile a working copy of htadm? It seems >to compile just fine (I compiled all the necessary files separately), but >when I run it, it can't verify the passwd files it creates. If anyone has >been able to get this to work properly, I'd be really, really grateful for >some email with the necessary mods to the source. Or the FreeBSD htadm >binary for that matter :) *** Daemon/I/HTPasswd.c Sun Sep 25 16:52:56 1994 --- Daemon/Implementation/HTPasswd.c Sat Jun 17 23:55:41 1995 *************** *** 27,35 **** extern char *crypt(); PRIVATE char salt_chars [65] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789./"; ! /* PRIVATE next_rec() ** GO TO THE BEGINNING OF THE NEXT RECORD --- 27,51 ---- extern char *crypt(); + #ifndef __FreeBSD__ PRIVATE char salt_chars [65] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789./"; ! #else ! PRIVATE unsigned char itoa64[] = /* 0 ... 63 => ascii - 64 */ ! "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; ! ! void ! to64(s, v, n) ! char *s; ! long v; ! int n; ! { ! while (--n >= 0) { ! *s++ = itoa64[v&0x3f]; ! v >>= 6; ! } ! } ! #endif /* PRIVATE next_rec() ** GO TO THE BEGINNING OF THE NEXT RECORD *************** *** 80,86 **** --- 96,106 ---- */ PUBLIC char *HTAA_encryptPasswd ARGS1(CONST char *, password) { + #ifndef __FreeBSD__ char salt[3]; + #else + char salt[9]; + #endif char chunk[9]; char *result; char *tmp; *************** *** 89,94 **** --- 109,115 ---- extern time_t theTime; int random = (int)theTime; /* This is random enough */ + #ifndef __FreeBSD__ if (!(result = (char*)malloc(13*(((int)strlen(password)+7)/8) + 1))) outofmem(__FILE__, "HTAA_encryptPasswd"); *************** *** 107,114 **** cur += 8; len -= 8; } /* while */ - return result; } --- 128,140 ---- cur += 8; len -= 8; } /* while */ return result; + #else + salt[0] = '_'; + to64(&salt[1], (long) (29 * 25), 4); + to64(&salt[5], random, 4); + return strdup(crypt(password, salt)); + #endif } *************** *** 273,279 **** --- 299,309 ---- /* User's record found */ if (*pw) { /* So password is required for this user */ if (!password || + #ifdef __FreeBSD__ + strcmp(crypt(password, pw), pw)) + #else !HTAA_passwdMatch(password,pw)) /* Check the pw */ + #endif status = EOF; /* If wrong, indicate it with EOF */ } break; /* exit loop */ -- D.