|
|
1.1 root 1: /* lookup.c - password lookup service -- initiator */
2:
3: #ifndef lint
4: static char *rcsid = "$Header: /f/osi/others/lookup/RCS/lookup.c,v 7.1 90/07/01 21:04:26 mrose Exp $";
5: #endif
6:
7: /*
8: * $Header: /f/osi/others/lookup/RCS/lookup.c,v 7.1 90/07/01 21:04:26 mrose Exp $
9: *
10: *
11: * $Log: lookup.c,v $
12: * Revision 7.1 90/07/01 21:04:26 mrose
13: * pepsy
14: *
15: * Revision 7.0 89/11/23 22:56:36 mrose
16: * Release 6.0
17: *
18: */
19:
20: /*
21: * NOTICE
22: *
23: * Acquisition, use, and distribution of this module and related
24: * materials are subject to the restrictions of a license agreement.
25: * Consult the Preface in the User's Manual for the full terms of
26: * this agreement.
27: *
28: */
29:
30:
31: #include <stdio.h>
32: #include "PasswordLookup-types.h" /* type definitions */
33: #include "ryinitiator.h" /* for generic interctive initiators */
34: #include "PasswordLookup-ops.h" /* operation definitions */
35:
36: /* DATA */
37:
38: static char *myservice = "passwdstore";
39:
40: static char *mycontext = "isode passwd lookup demo";
41: static char *mypci = "isode passwd lookup demo pci";
42:
43:
44: /* ARGUMENTS */
45: int do_lookupUser (), do_lookupUID (), do_help (), do_quit ();
46:
47: /* RESULTS */
48: int lookup_result ();
49:
50: /* ERRORS */
51: int lookup_error ();
52:
53:
54: static struct dispatch dispatches[] = {
55: "lookupUser", operation_PasswordLookup_lookupUser,
56: do_lookupUser, &_ZPasswordLookup_mod, _ZUserNamePasswordLookup,
57: lookup_result, lookup_error,
58: "find user by name",
59:
60: "lookupUID", operation_PasswordLookup_lookupUID,
61: do_lookupUID, &_ZPasswordLookup_mod, _ZUserIDPasswordLookup,
62: lookup_result, lookup_error,
63: "find user by id",
64:
65: "help", 0,
66: do_help, (modtyp *) 0, 0,
67: NULLIFP, NULLIFP,
68: "print this information",
69:
70: "quit", 0,
71: do_quit, (modtyp *) 0, 0,
72: NULLIFP, NULLIFP,
73: "terminate the association and exit",
74:
75: NULL
76: };
77:
78: /* MAIN */
79:
80: /* ARGSUSED */
81:
82: main (argc, argv, envp)
83: int argc;
84: char **argv,
85: **envp;
86: {
87: (void) ryinitiator (argc, argv, myservice, mycontext, mypci,
88: table_PasswordLookup_Operations, dispatches, do_quit);
89:
90: exit (0); /* NOTREACHED */
91: }
92:
93: /* ARGUMENTS */
94:
95: /* ARGSUSED */
96:
97: static int do_lookupUser (sd, ds, args, arg)
98: int sd;
99: struct dispatch *ds;
100: char **args;
101: register struct type_PasswordLookup_UserName **arg;
102: {
103: char *cp;
104:
105: if ((cp = *args++) == NULL) {
106: advise (NULLCP, "usage: lookupUser username");
107: return NOTOK;
108: }
109:
110: if ((*arg = str2qb (cp, strlen (cp), 1)) == NULL)
111: adios (NULLCP, "out of memory");
112:
113: return OK;
114: }
115:
116: /* */
117:
118: /* ARGSUSED */
119:
120: static int do_lookupUID (sd, ds, args, arg)
121: int sd;
122: struct dispatch *ds;
123: char **args;
124: register struct type_PasswordLookup_UserID **arg;
125: {
126: char *cp;
127:
128: if ((cp = *args++) == NULL) {
129: advise (NULLCP, "usage: lookupUID userid");
130: return NOTOK;
131: }
132:
133: if ((*arg = (struct type_PasswordLookup_UserID *) calloc (1, sizeof **arg))
134: == NULL)
135: adios (NULLCP, "out of memory");
136:
137: (*arg) -> parm = atoi (cp);
138:
139: return OK;
140: }
141:
142: /* */
143:
144: /* ARGSUSED */
145:
146: static int do_help (sd, ds, args, dummy)
147: int sd;
148: register struct dispatch *ds;
149: char **args;
150: caddr_t *dummy;
151: {
152: printf ("\nCommands are:\n");
153: for (ds = dispatches; ds -> ds_name; ds++)
154: printf ("%s\t%s\n", ds -> ds_name, ds -> ds_help);
155:
156: return NOTOK;
157: }
158:
159: /* */
160:
161: /* ARGSUSED */
162:
163: static int do_quit (sd, ds, args, dummy)
164: int sd;
165: struct dispatch *ds;
166: char **args;
167: caddr_t *dummy;
168: {
169: struct AcSAPrelease acrs;
170: register struct AcSAPrelease *acr = &acrs;
171: struct AcSAPindication acis;
172: register struct AcSAPindication *aci = &acis;
173: register struct AcSAPabort *aca = &aci -> aci_abort;
174:
175: if (AcRelRequest (sd, ACF_NORMAL, NULLPEP, 0, NOTOK, acr, aci) == NOTOK)
176: acs_adios (aca, "A-RELEASE.REQUEST");
177:
178: if (!acr -> acr_affirmative) {
179: (void) AcUAbortRequest (sd, NULLPEP, 0, aci);
180: adios (NULLCP, "release rejected by peer: %d", acr -> acr_reason);
181: }
182:
183: ACRFREE (acr);
184:
185: exit (0);
186: }
187:
188: /* RESULTS */
189:
190: /* ARGSUSED */
191:
192: static int lookup_result (sd, id, dummy, result, roi)
193: int sd,
194: id,
195: dummy;
196: register struct type_PasswordLookup_Passwd *result;
197: struct RoSAPindication *roi;
198: {
199: print_qb (result -> name);
200: putchar (':');
201: print_qb (result -> passwd);
202: printf (":%d:%d:", result -> uid -> parm, result -> gid -> parm);
203: print_qb (result -> gecos);
204: putchar (':');
205: print_qb (result -> dir);
206: putchar (':');
207: print_qb (result -> shell);
208: putchar ('\n');
209:
210: return OK;
211: }
212:
213:
214: static print_qb (q)
215: register struct qbuf *q;
216: {
217: register struct qbuf *p;
218:
219: if (q == NULL)
220: return;
221:
222: for (p = q -> qb_forw; p != q; p = p -> qb_forw)
223: printf ("%*.*s", p -> qb_len, p -> qb_len, p -> qb_data);
224: }
225:
226: /* ERRORS */
227:
228: /* ARGSUSED */
229:
230: static int lookup_error (sd, id, error, parameter, roi)
231: int sd,
232: id,
233: error;
234: caddr_t parameter;
235: struct RoSAPindication *roi;
236: {
237: register struct RyError *rye;
238:
239: if (error == RY_REJECT) {
240: advise (NULLCP, "%s", RoErrString ((int) parameter));
241: return OK;
242: }
243:
244: if (rye = finderrbyerr (table_PasswordLookup_Errors, error))
245: advise (NULLCP, "%s", rye -> rye_name);
246: else
247: advise (NULLCP, "Error %d", error);
248:
249: return OK;
250: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.