From: Wilfried Göesgens Date: Tue, 19 Jun 2007 19:00:06 +0000 (+0000) Subject: * check whether our chkpwd binary exists or not X-Git-Tag: v7.86~3295 X-Git-Url: https://code.citadel.org/?a=commitdiff_plain;h=58d74c5e0683f6bfe2270c7228051fde6a39fdb4;p=citadel.git * check whether our chkpwd binary exists or not * use the default framework to locate chkpwd in the sample * added the sample to make --- diff --git a/citadel/Makefile.in b/citadel/Makefile.in index 631b494fd..df2354527 100644 --- a/citadel/Makefile.in +++ b/citadel/Makefile.in @@ -27,7 +27,7 @@ all: $(TARGETS) 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 \ @@ -99,7 +99,7 @@ YACC=@YACC@ 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 \ @@ -173,6 +173,9 @@ setup: setup.o tools.o citadel_dirs.o 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) diff --git a/citadel/chkpw.c b/citadel/chkpw.c index 48e6c132b..c2cc5cd65 100644 --- a/citadel/chkpw.c +++ b/citadel/chkpw.c @@ -12,9 +12,16 @@ #include #include #include +#include +#include #include #include +#include + +#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]; @@ -44,10 +51,16 @@ static int validpw(uid_t uid, const char *pass) */ 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(); @@ -66,7 +79,7 @@ void start_chkpwd_daemon(void) { 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); @@ -79,10 +92,17 @@ int main(int argc, char **argv) { 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); diff --git a/citadel/user_ops.c b/citadel/user_ops.c index 4ac224e52..d3e507365 100644 --- a/citadel/user_ops.c +++ b/citadel/user_ops.c @@ -611,10 +611,16 @@ static int validpw(uid_t uid, const char *pass) */ 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();