]> andersk Git - moira.git/commitdiff
Initial revision
authormar <mar>
Mon, 24 May 1993 11:52:58 +0000 (11:52 +0000)
committermar <mar>
Mon, 24 May 1993 11:52:58 +0000 (11:52 +0000)
lib/kname_unparse.c [new file with mode: 0644]

diff --git a/lib/kname_unparse.c b/lib/kname_unparse.c
new file mode 100644 (file)
index 0000000..920ace2
--- /dev/null
@@ -0,0 +1,90 @@
+/* $Header$
+ *
+ * Don't know why this function is not in libkrb.a.  It's the inverse
+ * of kname_parse() which is there.
+ */
+
+#include <stdio.h>
+#include <des.h>
+#include <krb.h>
+
+/* 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]);
+}
This page took 2.537147 seconds and 5 git commands to generate.