- com_err(whoami, 0, "Authenticated to %s using %s, id %d",
- cl->clname, cl->entity, cl->users_id);
- if (cl->users_id == 0)
- cl->reply.sms_status = SMS_USER_AUTH;
+ com_err(whoami, 0, "Auth to %s using %s, uid %d cid %d",
+ cl->clname, cl->entity, cl->users_id, cl->client_id);
+ if (status != MR_SUCCESS)
+ cl->reply.mr_status = status;
+ else if (cl->users_id == 0)
+ cl->reply.mr_status = MR_USER_AUTH;
+}
+
+
+/* Turn a principal, instance, realm triple into a single non-ambiguous
+ * string. This is the inverse of kname_parse(). It returns a pointer
+ * to a static buffer, or NULL on error.
+ */
+
+char *kname_unparse(p, i, r)
+char *p;
+char *i;
+char *r;
+{
+ static char name[MAX_K_NAME_SZ];
+ char *s;
+
+ s = name;
+ if (!p || strlen(p) > ANAME_SZ)
+ return(NULL);
+ while (*p) {
+ switch (*p) {
+ case '@':
+ *s++ = '\\';
+ *s++ = '@';
+ break;
+ case '.':
+ *s++ = '\\';
+ *s++ = '.';
+ break;
+ case '\\':
+ *s++ = '\\';
+ *s++ = '\\';
+ break;
+ default:
+ *s++ = *p;
+ }
+ p++;
+ }
+ if (i && *i) {
+ if (strlen(i) > INST_SZ)
+ return(NULL);
+ *s++ = '.';
+ while (*i) {
+ switch (*i) {
+ case '@':
+ *s++ = '\\';
+ *s++ = '@';
+ break;
+ case '.':
+ *s++ = '\\';
+ *s++ = '.';
+ break;
+ case '\\':
+ *s++ = '\\';
+ *s++ = '\\';
+ break;
+ default:
+ *s++ = *i;
+ }
+ i++;
+ }
+ }
+ *s++ = '@';
+ if (!r || strlen(r) > REALM_SZ)
+ return(NULL);
+ while (*r) {
+ switch (*r) {
+ case '@':
+ *s++ = '\\';
+ *s++ = '@';
+ break;
+ case '\\':
+ *s++ = '\\';
+ *s++ = '\\';
+ break;
+ default:
+ *s++ = *r;
+ }
+ r++;
+ }
+ *s = '\0';
+ return(&name[0]);