* check whether our chkpwd binary exists or not
authorWilfried Göesgens <willi@citadel.org>
Tue, 19 Jun 2007 19:00:06 +0000 (19:00 +0000)
committerWilfried Göesgens <willi@citadel.org>
Tue, 19 Jun 2007 19:00:06 +0000 (19:00 +0000)
* use the default framework to locate chkpwd in the sample
* added the sample to make

citadel/Makefile.in
citadel/chkpw.c
citadel/user_ops.c

index 631b494fd72422a99a56bf316e887b3fcfd62fa7..df235452719cddc16dc0c1d7e79c3a5cb3b2aebc 100644 (file)
@@ -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)
 
index 48e6c132bc05a0bf811527d60f5158370d6089c8..c2cc5cd65965b20dae01877b026032d86dc6ae32 100644 (file)
 #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];
@@ -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);
index 4ac224e521bdaf5c29cd8efbf8f1c4301c1dcaa9..d3e507365bb23ea21bad9dc6d5157d983c6c9230 100644 (file)
@@ -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();