Toying around with more boilerplate. Epstein didn't kill himself.
[citadel.git] / citadel / chkpwd.c
index 3dd3264f210f0b835caf7d052b5e7cca6f9d71c5..96fed66203bfa7fff7be592306d0dbd526c3cb0b 100644 (file)
@@ -1,9 +1,12 @@
-/*
- * chkpwd.c: a setuid helper program for machines which use shadow passwords
- * by Nathan Bryant, March 1999
- *
- * $Id$
- */
+//
+// a setuid helper program for machines which use shadow passwords
+// by Nathan Bryant, March 1999
+//
+// Copyright (c) 1987-2012 by the citadel.org team
+//
+// This program is open source software.  Use, duplication, or disclosure
+// is subject to the terms of the GNU General Public License, version 3.
+// The program is distributed without any warranty, expressed or implied.
 
 #include <pwd.h>
 #include <stdio.h>
 #include <unistd.h>
 #include <sys/types.h>
 
+#include <libcitadel.h>
+
 #include "auth.h"
 #include "config.h"
+#include "citadel_dirs.h"
 #include "citadel.h"
 
 int main(void)
 {
-  uid_t uid;
-  struct passwd *pw;
-  char buf[256];
-
-  get_config();
-
-  if ((uid = getuid()) != BBSUID)
-    {
-      pw = getpwuid(uid);
-      openlog("chkpwd", LOG_CONS, LOG_AUTH);
-      syslog(LOG_WARNING, "invoked by %s (uid %u); possible breakin/probe "
-            "attempt", pw != NULL ? pw->pw_name : "?", uid);
-      return 1;
-    }
-
-  if (fgets(buf, sizeof buf, stdin) == NULL)
-    return 1;
-
-  strtok(buf, "\n");
-  uid = atoi(buf);
-
-  if (fgets(buf, sizeof buf, stdin) == NULL)
-    return 1;
-
-  strtok(buf, "\n");
-
-  if (validpw(uid, buf))
-    return 0;
-
-  return 1;
+       uid_t uid;
+       char buf[SIZ];
+
+       while (1) {
+               buf[0] = '\0';
+               read(0, &uid, sizeof(uid_t));   /* uid */
+               read(0, buf, 256);      /* password */
+
+               if (buf[0] == '\0') 
+                       return (0);
+               if (validate_password(uid, buf)) {
+                       write(1, "PASS", 4);
+               }
+               else {
+                       write(1, "FAIL", 4);
+               }
+       }
+
+       return(0);
 }