]> andersk Git - moira.git/blob - server/mr_glue.c
Jerry's version.
[moira.git] / server / mr_glue.c
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$
12  *      Revision 1.3  1987-08-22 17:31:56  wesommer
13  *      Fix a "fall-through".
14  *
15  * Revision 1.2  87/07/29  16:03:58  wesommer
16  * Initialize krb_realm.
17  * 
18  * Revision 1.1  87/07/14  00:41:18  wesommer
19  * Initial revision
20  * 
21  */
22
23 #ifndef lint
24 static char *rcsid_sms_glue_c = "$Header$";
25 #endif lint
26
27 #include "sms_server.h"
28 #include <krb.h>                /* XXX for error codes */
29 #include <pwd.h>
30 static int already_connected = 0;
31
32 #define CHECK_CONNECTED { if (!already_connected) return SMS_NOT_CONNECTED; }
33
34 static client pseudo_client;
35 extern int krb_err_base;
36
37 sms_connect()
38 {
39     register int status;
40
41     if (already_connected) return SMS_ALREADY_CONNECTED;
42
43     init_sms_err_tbl();
44     init_krb_err_tbl();
45     bzero((char *)&pseudo_client, sizeof(pseudo_client)); /* XXX */
46
47     status =  sms_open_database();
48     if (!status) already_connected = 1;
49     return status;
50 }
51
52 sms_disconnect()
53 {
54     CHECK_CONNECTED;
55     sms_close_database();
56     already_connected = 0;
57     return 0;
58 }
59
60 sms_noop()
61 {
62     CHECK_CONNECTED;
63     return 0;
64 }
65 /*
66  * This routine is rather bogus, as it only fills in who you claim to be.
67  */
68 sms_auth()
69 {
70     struct passwd *pw;
71     extern char *krb_realm;
72
73     CHECK_CONNECTED;
74     pw = getpwuid(getuid());
75     if (!pw) return (KDC_PR_UNKNOWN + krb_err_base); /* XXX hack (we 
76                                                     * need an extended 
77                                                     * error code table)
78                                                     */
79     strcpy(pseudo_client.kname.name, pw->pw_name);
80     get_krbrlm(pseudo_client.kname.realm, 1);
81     krb_realm = pseudo_client.kname.realm;
82     return 0;
83 }
84
85 int sms_query(name, argc, argv, callproc, callarg)
86     char *name;         /* Query name */
87     int argc;           /* Arg count */
88     char **argv;                /* Args */
89     int (*callproc)();  /* Callback procedure */
90     char *callarg;              /* Callback argument */
91 {
92     return sms_process_query(&pseudo_client, name, argc, argv,
93                              callproc, callarg);
94 }
95
96 int sms_access(name, argc, argv)
97     char *name;                 /* Query name */
98     int argc;                   /* Arg count */
99     char **argv;                /* Args */
100 {
101     return sms_check_access(&pseudo_client, name, argc, argv);
102 }
103
104 int sms_query_internal(argc, argv, callproc, callarg)
105     int argc;
106     char **argv;
107     int (*callproc)();
108     char *callarg;
109 {
110     return sms_process_query(&pseudo_client, argv[0], argc-1, argv+1,
111                              callproc, callarg);
112 }
113
114 int sms_access_internal(argc, argv)
115     int argc;
116     char **argv;
117 {
118     return sms_check_access(&pseudo_client, argv[0], argc-1, argv+1);
119 }
120
121 sms_shutdown(why)
122     char *why;
123 {
124     fprintf(stderr, "Sorry, not implemented\n");
125 }
126
127 /*
128  * Local Variables:
129  * mode: c
130  * c-indent-level: 4
131  * c-continued-statement-offset: 4
132  * c-brace-offset: -4
133  * c-argdecl-indent: 4
134  * c-label-offset: -4
135  * End:
136  */
This page took 0.052499 seconds and 5 git commands to generate.