]> andersk Git - moira.git/blame - lib/kname_unparse.c
added GDSS stuff
[moira.git] / lib / kname_unparse.c
CommitLineData
d80d8d5a 1/* $Header$
2 *
3 * Don't know why this function is not in libkrb.a. It's the inverse
4 * of kname_parse() which is there.
5 */
6
7#include <stdio.h>
8#include <des.h>
9#include <krb.h>
10
11/* Turn a principal, instance, realm triple into a single non-ambiguous
12 * string. This is the inverse of kname_parse(). It returns a pointer
13 * to a static buffer, or NULL on error.
14 */
15
16char *kname_unparse(p, i, r)
17char *p;
18char *i;
19char *r;
20{
21 static char name[MAX_K_NAME_SZ];
22 char *s;
23
24 s = name;
25 if (!p || strlen(p) > ANAME_SZ)
26 return(NULL);
27 while (*p) {
28 switch (*p) {
29 case '@':
30 *s++ = '\\';
31 *s++ = '@';
32 break;
33 case '.':
34 *s++ = '\\';
35 *s++ = '.';
36 break;
37 case '\\':
38 *s++ = '\\';
39 *s++ = '\\';
40 break;
41 default:
42 *s++ = *p;
43 }
44 p++;
45 }
46 if (i && *i) {
47 if (strlen(i) > INST_SZ)
48 return(NULL);
49 *s++ = '.';
50 while (*i) {
51 switch (*i) {
52 case '@':
53 *s++ = '\\';
54 *s++ = '@';
55 break;
56 case '.':
57 *s++ = '\\';
58 *s++ = '.';
59 break;
60 case '\\':
61 *s++ = '\\';
62 *s++ = '\\';
63 break;
64 default:
65 *s++ = *i;
66 }
67 i++;
68 }
69 }
70 *s++ = '@';
71 if (!r || strlen(r) > REALM_SZ)
72 return(NULL);
73 while (*r) {
74 switch (*r) {
75 case '@':
76 *s++ = '\\';
77 *s++ = '@';
78 break;
79 case '\\':
80 *s++ = '\\';
81 *s++ = '\\';
82 break;
83 default:
84 *s++ = *r;
85 }
86 r++;
87 }
88 *s = '\0';
89 return(&name[0]);
90}
This page took 2.728502 seconds and 5 git commands to generate.