]> git.ipfire.org Git - thirdparty/squid.git/blob - helpers/basic_auth/NIS/nis_support.cc
SourceFormat Enforcement
[thirdparty/squid.git] / helpers / basic_auth / NIS / nis_support.cc
1 /*
2 * Copyright (C) 1996-2015 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 * Written By Rabellino Sergio (rabellino@di.unito.it) For Solaris 2.x
11 */
12 #include "squid.h"
13
14 #include <cstdlib>
15 #include <cstring>
16 #if HAVE_SYSLOG_H
17 #include <syslog.h>
18 #endif
19 #if HAVE_SYS_TYPES_H
20 #include <sys/types.h>
21 #endif
22 #if HAVE_RPC_RPC_H
23 #include <rpc/rpc.h>
24 #endif
25
26 #if _SQUID_FREEBSD_ && !defined(BOOL_DEFINED)
27 // BUG: FreeBSD rpcsvc/yp_* headers try to redefine bool unless we match their non-standard hack.
28 #define BOOL_DEFINED
29 #endif
30
31 #if HAVE_RPCSVC_YPCLNT_H
32 #include <rpcsvc/ypclnt.h>
33 #endif
34 #if HAVE_RPCSVC_YP_PROT_H
35 #include <rpcsvc/yp_prot.h>
36 #endif
37
38 #include "nis_support.h"
39
40 #define NO_YPERR 0 /* There is no error */
41
42 char *
43 get_nis_password(char *user, char *nisdomain, char *nismap)
44 {
45 static char *val = NULL;
46 char *password = NULL;
47 int vallen, res;
48
49 #ifdef DEBUG
50 printf("Domain is set to %s\n", nisdomain);
51 printf("YP Map is set to %s\n", nismap);
52 #endif
53
54 /* Free last entry */
55 if (val) {
56 free(val);
57 val = NULL;
58 }
59
60 /* Get NIS entry */
61 res = yp_match(nisdomain, nismap, user, strlen(user), &val, &vallen);
62
63 switch (res) {
64 case NO_YPERR:
65 /* username = */
66 (void) strtok(val, ":");
67 password = strtok(NULL, ",:");
68 return password;
69 case YPERR_YPBIND:
70 syslog(LOG_ERR, "Squid Authentication through ypbind failure: can't communicate with ypbind");
71 return NULL;
72 case YPERR_KEY: /* No such key in map */
73 return NULL;
74 default:
75 return NULL;
76 }
77 }
78