]> code.citadel.org Git - citadel.git/blobdiff - citadel/chkpwd.c
* Began (but did not finish) applying GPL3+ declarations to each source file. This...
[citadel.git] / citadel / chkpwd.c
index 76f6c9bb1e5426315417c467bda1e1574eed14a4..604ff9b857626890da360ac169cc370e35366bbc 100644 (file)
@@ -1,8 +1,25 @@
 /*
- * chkpwd.c: a setuid helper program for machines which use shadow passwords
+ * $Id$
+ *
+ * a setuid helper program for machines which use shadow passwords
  * by Nathan Bryant, March 1999
  *
- * $Id$
+ *
+ * Copyright (c) 1987-2009 by the citadel.org team
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
 #include <pwd.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();
-  uid = getuid();
-
-  if (uid != BBSUID && uid)
-    {
-      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);
 }