]> git.ipfire.org Git - thirdparty/squid.git/blob - helpers/basic_auth/NIS/basic_nis_auth.cc
SourceFormat Enforcement
[thirdparty/squid.git] / helpers / basic_auth / NIS / basic_nis_auth.cc
1 /*
2 * Copyright (C) 1996-2014 The Squid Software Foundation and contributors
3 *
4 * Squid software is distributed under GPLv2+ license and includes
5 * contributions from numerous individuals and organizations.
6 * Please see the COPYING and CONTRIBUTORS files for details.
7 */
8
9 /*
10 * Adapted By Rabellino Sergio (rabellino@di.unito.it) For Solaris 2.x
11 * From NCSA Authentication module
12 */
13
14 #include "squid.h"
15 #include "hash.h"
16 #include "nis_support.h"
17 #include "rfc1738.h"
18 #include "util.h"
19
20 #include <cstdlib>
21 #include <cstring>
22 #if HAVE_UNISTD_H
23 #include <unistd.h>
24 #endif
25 #if HAVE_SYS_TYPES_H
26 #include <sys/types.h>
27 #endif
28 #if HAVE_SYS_STAT_H
29 #include <sys/stat.h>
30 #endif
31 #if HAVE_CRYPT_H
32 #include <crypt.h>
33 #endif
34
35 int
36 main(int argc, char **argv)
37 {
38 char buf[256];
39 char *nisdomain;
40 char *nismap;
41 char *user, *passwd, *p;
42 char *nispasswd;
43
44 setbuf(stdout, NULL);
45
46 if (argc != 3) {
47 fprintf(stderr, "Usage: basic_yp_auth <domainname> <nis map for password>\n");
48 fprintf(stderr, "\n");
49 fprintf(stderr, "Example basic_yp_auth mydomain.com passwd.byname\n");
50 exit(1);
51 }
52 nisdomain = argv[1];
53 nismap = argv[2];
54
55 while (fgets(buf, 256, stdin) != NULL) {
56 if ((p = strchr(buf, '\n')) != NULL)
57 *p = '\0'; /* strip \n */
58
59 if ((user = strtok(buf, " ")) == NULL) {
60 printf("ERR\n");
61 continue;
62 }
63 if ((passwd = strtok(NULL, "")) == NULL) {
64 printf("ERR\n");
65 continue;
66 }
67
68 rfc1738_unescape(user);
69 rfc1738_unescape(passwd);
70
71 nispasswd = get_nis_password(user, nisdomain, nismap);
72
73 if (!nispasswd) {
74 /* User does not exist */
75 printf("ERR No such user\n");
76 #if HAVE_CRYPT
77 } else if (strcmp(nispasswd, (char *) crypt(passwd, nispasswd)) == 0) {
78 /* All ok !, thanks... */
79 printf("OK\n");
80 } else {
81 /* Password incorrect */
82 printf("ERR Wrong password\n");
83 #else
84 }
85 else {
86 /* Password incorrect */
87 printf("BH message=\"Missing crypto capability\"\n");
88 #endif
89 }
90 }
91 exit(0);
92 }
93