+int set_krb_mapping(name, login, ok, kid, uid)
+char *name;
+char *login;
+int ok;
+int *kid;
+int *uid;
+##{
+## int u_id, k_id, rowcount;
+## char *krbname;
+
+ krbname = name;
+ *kid = 0;
+ *uid = 0;
+
+## repeat retrieve (u_id = krbmap.#users_id, k_id = krbmap.#string_id)
+## where krbmap.string_id = strings.string_id and strings.string = @krbname
+## inquire_equel (rowcount = "rowcount")
+ if (ingres_errno) return(mr_errcode);
+
+ if (rowcount == 1) {
+ *kid = -k_id;
+ *uid = u_id;
+ return(MR_SUCCESS);
+ }
+
+ if (name_to_id(name, "STRINGS", &k_id) == MR_SUCCESS)
+ *kid = -k_id;
+
+ if (!ok) {
+ *uid = *kid;
+ return(MR_SUCCESS);
+ }
+
+ if (name_to_id(login, "USERS", uid) != MR_SUCCESS)
+ *uid = 0;
+
+ if (*kid == 0)
+ *kid = *uid;
+ if (ingres_errno) return(mr_errcode);
+ return(MR_SUCCESS);
+##}
+
+
+/* For now this just checks the argc's. It should also see that there
+ * are no duplicate names.
+ */
+
+sanity_check_queries()
+{
+ register int i;
+ int maxv = 0, maxa = 0;
+#ifdef MULTIPROTOCOLS
+ extern int QueryCount1, QueryCount2;
+ extern struct query Queries1[], Queries2[];
+#else
+ extern int QueryCount2;
+ extern struct query Queries2[];
+#endif MULTIPROTOCOLS
+
+#define MAX(x,y) ((x) > (y) ? (x) : (y))
+
+#ifdef MULTIPROTOCOLS
+ for (i = 0; i < QueryCount1; i++) {
+ maxv = MAX(maxv, Queries1[i].vcnt);
+ maxa = MAX(maxa, Queries1[i].argc);
+ }
+#endif MULTIPROTOCOLS
+ for (i = 0; i < QueryCount2; i++) {
+ maxv = MAX(maxv, Queries2[i].vcnt);
+ maxa = MAX(maxa, Queries2[i].argc);
+ }
+ if (MAX(maxv, maxa) > QMAXARGS) {
+ com_err(whoami, 0, "A query has more args than QMAXARGS");
+ exit(1);
+ }
+}