1 /* Copyright 2013 NORDUnet A/S. All rights reserved.
2 See LICENSE for licensing information. */
4 #if defined HAVE_CONFIG_H
12 #include <radsec/radsec.h>
13 #include <radsec/radsec-impl.h>
16 /* This code triggers the memory-stomping-detector of electric fence */
21 print_to_buf (const struct rs_context *ctx,
22 char **buf_ptr, ssize_t *i_ptr, ssize_t *len_ptr,
27 ssize_t len = *len_ptr;
34 fprintf (stdout, "sprintf (%p + %ld, %ld, \"%s\") -->",
37 n = vsnprintf (buf + i, len - i, fmt, args);
38 fprintf (stdout, "%d\n", n);
44 int newlen = len + MEMCHUNK;
45 buf = rs_realloc (ctx, buf, newlen);
63 pp (char **out, size_t *len, const char *fmt, ...)
68 n = vsnprintf (*out, *len, fmt, args);
70 if (n == -1 || n >= *len)
78 rs_context_print_config (struct rs_context *ctx, char **buf_out)
80 char *buf = rs_malloc (ctx, 8192);
83 struct rs_config *cfg = ctx->config;
84 struct rs_realm *r = NULL;
85 struct rs_peer *p = NULL;
86 char *peer_type[] = {"<no type>", "client", "server"};
87 char *realm_type[] = {"<no type>", "UDP", "TCP", "TLS", "DTLS"};
88 char *cred_type[] = {"<no type>", "PSK", "DHE_PSK", "RSA_PSK"};
94 for (r = cfg->realms; r != NULL; r = r->next)
96 if (pp (&out, &len, "realm %s {\n", r->name)
101 "\tlisten_addr = \"%s\"\n"
102 "\tlisten_service = \"%s\"\n",
106 r->local_addr->hostname,
107 r->local_addr->service))
108 return -RSE_INTERNAL;
109 for (p = r->peers; p != NULL; p = p->next)
113 "\t\thostname = \"%s\"\n"
114 "\t\tservice = \"%s\"\n"
115 "\t\tsecret = \"%s\"\n",
120 return -RSE_INTERNAL;
122 if (pp (&out, &len, "\t\tcacertfile = \"%s\"\n", p->cacertfile))
123 return -RSE_INTERNAL;
125 if (pp (&out, &len, "\t\tcertfile = \"%s\"\n", p->certfile))
126 return -RSE_INTERNAL;
128 if (pp (&out, &len, "\t\tcertkeyfile = \"%s\"\n", p->certkeyfile))
129 return -RSE_INTERNAL;
130 if (p->transport_cred)
132 if (pp (&out, &len, "\t\tpskex = \"%s\"\n",
133 cred_type[p->transport_cred->type])
134 || pp (&out, &len, "\t\tpskid = \"%s\"\n",
135 p->transport_cred->identity)
137 "\t\t%s = \"%s\"\n", (p->transport_cred->secret_encoding
138 == RS_KEY_ENCODING_ASCII_HEX
139 ? "pskhexstr" : "pskstr"),
140 p->transport_cred->secret))
141 return -RSE_INTERNAL;
143 if (pp (&out, &len, "\t}\n"))
144 return -RSE_INTERNAL;
146 if (pp (&out, &len, "}\n"))
147 return -RSE_INTERNAL;