Return to BSD News archive
Path: euryale.cc.adfa.oz.au!newshost.anu.edu.au!harbinger.cc.monash.edu.au!simtel!chi-news.cic.net!usc!news.cerf.net!news.titan.com!usenet From: ss@tisc.com (Steve Schossow) Newsgroups: comp.unix.bsd.freebsd.misc Subject: Re: Password server for Eudora Date: Mon, 13 Nov 1995 02:04:41 GMT Organization: Nearer piles are newer Lines: 126 Message-ID: <48698s$497@taxis.corp.titan.com> References: <andrew-1111952224200001@dslip3.cc.utas.edu.au> NNTP-Posting-Host: ss.ras.tisc.titan.com andrew@hobart.tased.edu.au (Andrew) wrote: >Hi, >I'm new to this but I've been trying to get poppassd-4 from >ftp.qualcomm.com to work, so people using Eudora can change their >passwords. The original downloaded file appeared to be a shell script. I >ran it and it created a directory called poppassd containing: <stuff deleted for brevity> I took a stab at this a month ago. You need to teach it what to expect from the passwd command and the FreeBSD path to the executable along with fixing the code's expectation of a return value from syslog(). Context diff appended below. -------cut-here--------- hobbes# diff -c poppassd.c.orig poppassd.c *** poppassd.c.orig Sun Nov 12 17:55:20 1995 --- poppassd.c Thu Oct 12 14:05:40 1995 *************** *** 145,150 **** --- 145,151 ---- static char *P1[] = {"Old password:", "Changing password for *.\nOld password:", + "Changing local password for *.\nOld password:", "Changing password for * on *.\nOld password:", "Changing NIS password for * on *.\nOld password:", "Changing password for *\n*'s Old password:", *************** *** 166,171 **** --- 167,173 ---- static char *P4[] = {"\n", "NIS entry changed on *\n", + "\npasswd: rebuilding the database...\npasswd: done\n", ""}; *************** *** 186,196 **** --- 188,202 ---- *user = *oldpass = *newpass = 0; + #ifdef __FreeBSD__ + openlog ("poppassd", LOG_PID, LOG_LOCAL2); + #else if (openlog ("poppassd", LOG_PID, LOG_LOCAL2) < 0) { WriteToClient ("500 Can't open syslog."); exit (1); } + #endif WriteToClient ("200 poppassd v%s hello, who are you?", VERSION); ReadFromClient (line); *************** *** 264,291 **** --- 270,313 ---- if ((wpid = waitpid (pid, &wstat, 0)) < 0) { + #ifdef __FreeBSD__ + syslog (LOG_ERR, "wait for /usr/bin/passwd child failed: %m"); + #else syslog (LOG_ERR, "wait for /bin/passwd child failed: %m"); + #endif WriteToClient ("500 Server error (wait failed), get help!"); exit (1); } if (pid != wpid) { + #ifdef __FreeBSD__ + syslog (LOG_ERR, "wrong child (/usr/bin/passwd waited for!"); + #else syslog (LOG_ERR, "wrong child (/bin/passwd waited for!"); + #endif WriteToClient ("500 Server error (wrong child), get help!"); exit (1); } if (WIFEXITED (wstat) == 0) { + #ifdef __FreeBSD__ + syslog (LOG_ERR, "child (/usr/bin/passwd) killed?"); + #else syslog (LOG_ERR, "child (/bin/passwd) killed?"); + #endif WriteToClient ("500 Server error (funny wstat), get help!"); exit (1); } if (WEXITSTATUS (wstat) != 0) { + #ifdef __FreeBSD__ + syslog (LOG_ERR, "child (/usr/bin/passwd) exited abnormally"); + #else syslog (LOG_ERR, "child (/bin/passwd) exited abnormally"); + #endif WriteToClient ("500 Server error (abnormal exit), get help!"); exit (1); } *************** *** 389,396 **** --- 411,423 ---- /* Fork /bin/passwd. */ + #ifdef __FreeBSD__ + if (execl("/usr/bin/passwd", "passwd", user, (char*)0) < 0) { + syslog(LOG_ERR, "can't exec /usr/bin/passwd: %m"); + #else if (execl("/bin/passwd", "passwd", user, (char*)0) < 0) { syslog(LOG_ERR, "can't exec /bin/passwd: %m"); + #endif return(0); } } hobbes# -- Steve Schossow <ss@tisc.com>