]> andersk Git - moira.git/blame - server/mr_glue.c
deal with protocol version numbers; replace per-query retrieval argv with
[moira.git] / server / mr_glue.c
CommitLineData
083d87de 1/*
2 * $Source$
3 * $Author$
4 * $Header$
5 *
6 * Copyright (C) 1987 by the Massachusetts Institute of Technology
7 *
8 * Glue routines to allow the database stuff to be linked in to
9 * a program expecting a library level interface.
10 *
11 * $Log$
0ed584c8 12 * Revision 1.4 1987-09-21 15:17:09 wesommer
13 * Also need to initialize pseudo_client.clname.
083d87de 14 *
0ed584c8 15 * Revision 1.3 87/08/22 17:31:56 wesommer
16 * Fix a "fall-through".
17 *
28d7ad92 18 * Revision 1.2 87/07/29 16:03:58 wesommer
19 * Initialize krb_realm.
20 *
fe8a06f8 21 * Revision 1.1 87/07/14 00:41:18 wesommer
22 * Initial revision
23 *
083d87de 24 */
25
26#ifndef lint
27static char *rcsid_sms_glue_c = "$Header$";
28#endif lint
29
30#include "sms_server.h"
31#include <krb.h> /* XXX for error codes */
32#include <pwd.h>
33static int already_connected = 0;
34
35#define CHECK_CONNECTED { if (!already_connected) return SMS_NOT_CONNECTED; }
36
37static client pseudo_client;
38extern int krb_err_base;
0ed584c8 39extern char *malloc();
083d87de 40
41sms_connect()
42{
43 register int status;
44
45 if (already_connected) return SMS_ALREADY_CONNECTED;
46
47 init_sms_err_tbl();
48 init_krb_err_tbl();
49 bzero((char *)&pseudo_client, sizeof(pseudo_client)); /* XXX */
50
51 status = sms_open_database();
52 if (!status) already_connected = 1;
53 return status;
54}
55
56sms_disconnect()
57{
58 CHECK_CONNECTED;
59 sms_close_database();
60 already_connected = 0;
61 return 0;
62}
63
64sms_noop()
65{
66 CHECK_CONNECTED;
67 return 0;
68}
69/*
70 * This routine is rather bogus, as it only fills in who you claim to be.
71 */
72sms_auth()
73{
74 struct passwd *pw;
fe8a06f8 75 extern char *krb_realm;
0ed584c8 76 char buf[1024];
77
083d87de 78 CHECK_CONNECTED;
79 pw = getpwuid(getuid());
80 if (!pw) return (KDC_PR_UNKNOWN + krb_err_base); /* XXX hack (we
81 * need an extended
82 * error code table)
83 */
84 strcpy(pseudo_client.kname.name, pw->pw_name);
85 get_krbrlm(pseudo_client.kname.realm, 1);
fe8a06f8 86 krb_realm = pseudo_client.kname.realm;
0ed584c8 87
88 strcpy(buf, pw->pw_name);
89 strcat(buf, "@");
90 strcat(buf, pseudo_client.kname.realm);
91 pseudo_client.clname = malloc(strlen(buf)+1);
92 strcpy(pseudo_client.clname, buf);
28d7ad92 93 return 0;
083d87de 94}
95
96int sms_query(name, argc, argv, callproc, callarg)
97 char *name; /* Query name */
98 int argc; /* Arg count */
99 char **argv; /* Args */
100 int (*callproc)(); /* Callback procedure */
101 char *callarg; /* Callback argument */
102{
103 return sms_process_query(&pseudo_client, name, argc, argv,
104 callproc, callarg);
105}
106
107int sms_access(name, argc, argv)
108 char *name; /* Query name */
109 int argc; /* Arg count */
110 char **argv; /* Args */
111{
112 return sms_check_access(&pseudo_client, name, argc, argv);
113}
114
115int sms_query_internal(argc, argv, callproc, callarg)
116 int argc;
117 char **argv;
118 int (*callproc)();
119 char *callarg;
120{
121 return sms_process_query(&pseudo_client, argv[0], argc-1, argv+1,
122 callproc, callarg);
123}
124
125int sms_access_internal(argc, argv)
126 int argc;
127 char **argv;
128{
129 return sms_check_access(&pseudo_client, argv[0], argc-1, argv+1);
130}
131
132sms_shutdown(why)
133 char *why;
134{
135 fprintf(stderr, "Sorry, not implemented\n");
136}
137
138/*
139 * Local Variables:
140 * mode: c
141 * c-indent-level: 4
142 * c-continued-statement-offset: 4
143 * c-brace-offset: -4
144 * c-argdecl-indent: 4
145 * c-label-offset: -4
146 * End:
147 */
This page took 0.073017 seconds and 5 git commands to generate.