EXEEXT=@EXEEXT@
CLIENT_TARGETS=citadel$(EXEEXT) whobbs$(EXEEXT) stress$(EXEEXT)
-SERVER_TARGETS=citserver chkpwd
+SERVER_TARGETS=citserver chkpwd chkpw
SERV_MODULES=serv_chat.o \
serv_upgrade.o \
serv_smtp.o \
VPATH=$(srcdir)
-SOURCES=aidepost.c auth.c base64.c chkpwd.c citadel.c citadel_ipc.c \
+SOURCES=aidepost.c auth.c base64.c chkpwd.c chkpw.c citadel.c citadel_ipc.c \
citmail.c citserver.c client_chat.c client_passwords.c \
clientsocket.c commands.c config.c control.c $(DATABASE) \
domain.c serv_extensions.c file_ops.c genstamp.c getutline.c \
chkpwd: chkpwd.o auth.o
$(CC) chkpwd.o auth.o $(LDFLAGS) -o chkpwd $(chkpwd_LIBS)
+chkpw: chkpw.o auth.o citadel_dirs.o
+ $(CC) chkpw.o auth.o citadel_dirs.o $(LDFLAGS) -o chkpw $(chkpwd_LIBS)
+
whobbs$(EXEEXT): whobbs.o ipc_c_tcp.o tools.o citadel_ipc.o citadel_dirs.o $(LIBOBJS)
$(CC) whobbs.o ipc_c_tcp.o tools.o citadel_ipc.o citadel_dirs.o $(LIBOBJS) $(LDFLAGS) -o whobbs $(LIBS)
#include <ctype.h>
#include <sys/types.h>
#include <sys/wait.h>
+#include <sys/stat.h>
+#include <unistd.h>
#include <string.h>
#include <limits.h>
+#include <dirent.h>
+
+#include "citadel.h"
+#include "sysdep.h"
+#include "citadel_dirs.h"
/* These pipes are used to talk to the chkpwd daemon, which is forked during startup */
int chkpwd_write_pipe[2];
int chkpwd_read_pipe[2];
*/
void start_chkpwd_daemon(void) {
pid_t chkpwd_pid;
+ struct stat filestats;
int i;
printf("Starting chkpwd daemon for host authentication mode\n");
+ if ((stat(file_chkpwd, &filestats)==-1) ||
+ (filestats.st_size==0)){
+ printf("didn't find chkpwd daemon in %s: %s\n", file_chkpwd, strerror(errno));
+ abort();
+ }
if (pipe(chkpwd_write_pipe) != 0) {
printf("Unable to create pipe for chkpwd daemon: %s\n", strerror(errno));
abort();
dup2(chkpwd_write_pipe[0], 0);
dup2(chkpwd_read_pipe[1], 1);
for (i=2; i<256; ++i) close(i);
- execl("./chkpwd", "chkpwd", NULL);
+ execl(file_chkpwd, file_chkpwd, NULL);
printf("Unable to exec chkpwd daemon: %s\n", strerror(errno));
abort();
exit(errno);
char buf[256];
struct passwd *p;
int uid;
+ char ctdldir[PATH_MAX]=CTDLDIR;
+
+ calc_dirs_n_files(0,0,"", ctdldir);
printf("\n\n ** host auth mode test utility **\n\n");
start_chkpwd_daemon();
+ if (getuid() != 0){
+ printf("\n\nERROR: you need to be root to run this!\n\n");
+ return(1);
+ }
while(1) {
printf("\n\nUsername: ");
gets(buf);
*/
void start_chkpwd_daemon(void) {
pid_t chkpwd_pid;
+ struct stat filestats;
int i;
lprintf(CTDL_DEBUG, "Starting chkpwd daemon for host authentication mode\n");
+ if ((stat(file_chkpwd, &filestats)==-1) ||
+ (filestats.st_size==0)){
+ printf("didn't find chkpwd daemon in %s: %s\n", file_chkpwd, strerror(errno));
+ abort();
+ }
if (pipe(chkpwd_write_pipe) != 0) {
lprintf(CTDL_EMERG, "Unable to create pipe for chkpwd daemon: %s\n", strerror(errno));
abort();