|
|
1.1 root 1: /* callin.c
2: Check a login name and password against the UUCP password file.
3:
4: Copyright (C) 1992 Ian Lance Taylor
5:
6: This file is part of the Taylor UUCP uuconf library.
7:
8: This library is free software; you can redistribute it and/or
9: modify it under the terms of the GNU Library General Public License
10: as published by the Free Software Foundation; either version 2 of
11: the License, or (at your option) any later version.
12:
13: This library is distributed in the hope that it will be useful, but
14: WITHOUT ANY WARRANTY; without even the implied warranty of
15: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16: Library General Public License for more details.
17:
18: You should have received a copy of the GNU Library General Public
19: License along with this library; if not, write to the Free Software
20: Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21:
22: The author of the program may be contacted at [email protected] or
23: c/o Infinity Development Systems, P.O. Box 520, Waltham, MA 02254.
24: */
25:
26: #include "uucnfi.h"
27:
28: #if USE_RCS_ID
29: const char _uuconf_callin_rcsid[] = "$Id: callin.c,v 1.1 93/07/30 08:07:02 bin Exp Locker: bin $";
30: #endif
31:
32: #include <errno.h>
33:
34: static int iplogin P((pointer pglobal, int argc, char **argv,
35: pointer pvar, pointer pinfo));
36:
37: /* Check a login name and password against the UUCP password file.
38: This looks at the Taylor UUCP password file, but will work even if
39: uuconf_taylor_init was not called. */
40:
41: int
42: uuconf_callin (pglobal, zlogin, zpassword)
43: pointer pglobal;
44: const char *zlogin;
45: const char *zpassword;
46: {
47: struct sglobal *qglobal = (struct sglobal *) pglobal;
48: int iret;
49: char **pz;
50: struct uuconf_cmdtab as[2];
51: char *zfilepass;
52:
53: /* If we have no password file names, fill in the default name. */
54: if (qglobal->qprocess->pzpwdfiles == NULL)
55: {
56: char ab[sizeof NEWCONFIGLIB + sizeof PASSWDFILE - 1];
57:
58: memcpy ((pointer) ab, (pointer) NEWCONFIGLIB,
59: sizeof NEWCONFIGLIB - 1);
60: memcpy ((pointer) (ab + sizeof NEWCONFIGLIB - 1), (pointer) PASSWDFILE,
61: sizeof PASSWDFILE);
62: iret = _uuconf_iadd_string (qglobal, ab, TRUE, FALSE,
63: &qglobal->qprocess->pzpwdfiles,
64: qglobal->pblock);
65: if (iret != UUCONF_SUCCESS)
66: return iret;
67: }
68:
69: as[0].uuconf_zcmd = zlogin;
70: as[0].uuconf_itype = UUCONF_CMDTABTYPE_FN | 2;
71: as[0].uuconf_pvar = (pointer) &zfilepass;
72: as[0].uuconf_pifn = iplogin;
73:
74: as[1].uuconf_zcmd = NULL;
75:
76: zfilepass = NULL;
77:
78: iret = UUCONF_SUCCESS;
79:
80: for (pz = qglobal->qprocess->pzpwdfiles; *pz != NULL; pz++)
81: {
82: FILE *e;
83:
84: e = fopen (*pz, "r");
85: if (e == NULL)
86: {
87: if (FNO_SUCH_FILE ())
88: continue;
89: qglobal->ierrno = errno;
90: iret = UUCONF_FOPEN_FAILED | UUCONF_ERROR_ERRNO;
91: break;
92: }
93:
94: iret = uuconf_cmd_file (pglobal, e, as, (pointer) NULL,
95: (uuconf_cmdtabfn) NULL,
96: UUCONF_CMDTABFLAG_CASE, (pointer) NULL);
97: (void) fclose (e);
98:
99: if (iret != UUCONF_SUCCESS || zfilepass != NULL)
100: break;
101: }
102:
103: if (iret != UUCONF_SUCCESS)
104: {
105: qglobal->zfilename = *pz;
106: iret |= UUCONF_ERROR_FILENAME;
107: }
108: else if (zfilepass == NULL
109: || strcmp (zfilepass, zpassword) != 0)
110: iret = UUCONF_NOT_FOUND;
111:
112: if (zfilepass != NULL)
113: free ((pointer) zfilepass);
114:
115: return iret;
116: }
117:
118: /* This is called if it is the name we are looking for. The pvar
119: argument points to zfilepass, and we set it to the password. */
120:
121: static int
122: iplogin (pglobal, argc, argv, pvar, pinfo)
123: pointer pglobal;
124: int argc;
125: char **argv;
126: pointer pvar;
127: pointer pinfo;
128: {
129: struct sglobal *qglobal = (struct sglobal *) pglobal;
130: char **pzpass = (char **) pvar;
131:
132: *pzpass = strdup (argv[1]);
133: if (*pzpass == NULL)
134: {
135: qglobal->ierrno = errno;
136: return (UUCONF_MALLOC_FAILED
137: | UUCONF_ERROR_ERRNO
138: | UUCONF_CMDTABRET_EXIT);
139: }
140:
141: return UUCONF_CMDTABRET_EXIT;
142: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.