basic_nis_auth.cc
Go to the documentation of this file.
1 /*
2  * Copyright (C) 1996-2023 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"
16 #include "hash.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, nullptr);
45 
46  if (argc != 3) {
47  fprintf(stderr, "Usage: basic_nis_auth <domainname> <nis map for password>\n");
48  fprintf(stderr, "\n");
49  fprintf(stderr, "Example basic_nis_auth mydomain.com passwd.byname\n");
50  exit(EXIT_FAILURE);
51  }
52  nisdomain = argv[1];
53  nismap = argv[2];
54 
55  while (fgets(buf, 256, stdin) != nullptr) {
56  if ((p = strchr(buf, '\n')) != nullptr)
57  *p = '\0'; /* strip \n */
58 
59  if ((user = strtok(buf, " ")) == nullptr) {
60  printf("ERR\n");
61  continue;
62  }
63  if ((passwd = strtok(nullptr, "")) == nullptr) {
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  continue;
77  }
78 
79 #if HAVE_CRYPT
80  char *crypted = nullptr;
81  if ((crypted = crypt(passwd, nispasswd)) && strcmp(nispasswd, crypted) == 0) {
82  /* All ok !, thanks... */
83  printf("OK\n");
84  } else {
85  /* Password incorrect */
86  printf("ERR Wrong password\n");
87  }
88 #else
89  /* Password incorrect */
90  printf("BH message=\"Missing crypto capability\"\n");
91 #endif
92  }
93  return EXIT_SUCCESS;
94 }
95 
char * crypt(const char *wort, const char *salt)
Definition: encrypt.c:240
void rfc1738_unescape(char *url)
Definition: rfc1738.c:146
int main(int argc, char **argv)
char * get_nis_password(char *user, char *nisdomain, char *nismap)
Definition: nis_support.cc:43

 

Introduction

Documentation

Support

Miscellaneous

Web Site Translations

Mirrors