summaryrefslogtreecommitdiff
path: root/src/tools/irm/irm_name_create.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/irm/irm_name_create.c')
-rw-r--r--src/tools/irm/irm_name_create.c124
1 files changed, 112 insertions, 12 deletions
diff --git a/src/tools/irm/irm_name_create.c b/src/tools/irm/irm_name_create.c
index a0079cad..04d7f95f 100644
--- a/src/tools/irm/irm_name_create.c
+++ b/src/tools/irm/irm_name_create.c
@@ -36,31 +36,50 @@
* OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+#define _POSIX_C_SOURCE 200809L
+#define _XOPEN_SOURCE 500
+
+#include <ouroboros/errno.h>
#include <ouroboros/irm.h>
#include <stdio.h>
#include <string.h>
+#include <stdlib.h>
#include "irm_ops.h"
#include "irm_utils.h"
#define RR "round-robin"
#define SPILL "spillover"
+#define SCRT "<security_dir>/server/<name>/crt.pem"
+#define SKEY "<security_dir>/server/<name>/key.pem"
+#define CCRT "<security_dir>/client/<name>/crt.pem"
+#define CKEY "<security_dir>/client/<name>/key.pem"
static void usage(void)
{
printf("Usage: irm name create\n"
- " <name>\n"
- " lb [LB_POLICY], default: %s\n\n"
- "where LB_POLICY in {" RR " " SPILL "}\n", RR);
+ " <name>. max %d chars.\n"
+ " [lb LB_POLICY], default: %s\n"
+ " [scrtpath <path>, default: " SCRT "]\n"
+ " [skeypath <path>, default: " SKEY "]\n"
+ " [ccrtpath <path>, default: " CCRT "]\n"
+ " [ckeypath <path>, default: " CKEY "]\n"
+ "\n"
+ "where LB_POLICY in {" RR " " SPILL "}\n",
+ NAME_SIZE, RR);
}
int do_create_name(int argc,
char ** argv)
{
- char * name = NULL;
- char * lb_pol = RR;
- enum pol_balance pol_lb = LB_RR;
+ struct name_info info = {};
+ char * name = NULL;
+ char * scrtpath = NULL;
+ char * skeypath = NULL;
+ char * ccrtpath = NULL;
+ char * ckeypath = NULL;
+ char * lb_pol = RR;
name = *(argv++);
--argc;
@@ -68,6 +87,14 @@ int do_create_name(int argc,
while (argc > 0) {
if (matches(*argv, "lb") == 0) {
lb_pol = *(argv + 1);
+ } else if (matches(*argv, "scrtpath") == 0) {
+ scrtpath = *(argv + 1);
+ } else if (matches(*argv, "skeypath") == 0) {
+ skeypath = *(argv + 1);
+ } else if (matches(*argv, "ccrtpath") == 0) {
+ ccrtpath = *(argv + 1);
+ } else if (matches(*argv, "ckeypath") == 0) {
+ ckeypath = *(argv + 1);
} else {
printf("\"%s\" is unknown, try \"irm "
"name create\".\n", *argv);
@@ -78,19 +105,92 @@ int do_create_name(int argc,
argv += 2;
}
- if (name == NULL) {
- usage();
- return -1;
+ if (name == NULL)
+ goto fail;
+
+ if (strlen(name) > NAME_SIZE) {
+ printf("Name too long.\n");
+ goto fail;
+ }
+
+ strcpy(info.name, name);
+
+ if (scrtpath != NULL) {
+ scrtpath = realpath(scrtpath, NULL);
+ if (scrtpath == NULL) {
+ printf("Failed to resolve server crt path: %s.\n",
+ strerror(errno));
+ goto fail;
+ }
+ if (strlen(scrtpath) > NAME_PATH_SIZE) {
+ printf("Server crt path > %d chars.", NAME_PATH_SIZE);
+ free(scrtpath);
+ goto fail;
+ }
+ strcpy(info.s.crt, scrtpath);
+ free(scrtpath);
+ }
+
+ if (skeypath != NULL) {
+ skeypath = realpath(skeypath, NULL);
+ if (skeypath == NULL) {
+ printf("Failed to resolve server key path: %s.\n",
+ strerror(errno));
+ goto fail;
+ }
+ if (strlen(skeypath) > NAME_PATH_SIZE) {
+ printf("Server key path > %d chars.", NAME_PATH_SIZE);
+ free(skeypath);
+ goto fail;
+ }
+ strcpy(info.s.key, skeypath);
+ free(skeypath);
+ }
+
+ if (ccrtpath != NULL) {
+ ccrtpath = realpath(ccrtpath, NULL);
+ if (ccrtpath == NULL) {
+ printf("Failed to resolve client crt path: %s.\n",
+ strerror(errno));
+ goto fail;
+ }
+ if (strlen(ccrtpath) > NAME_PATH_SIZE) {
+ printf("Client crt path > %d chars.", NAME_PATH_SIZE);
+ free(ccrtpath);
+ goto fail;
+ }
+ strcpy(info.c.crt, ccrtpath);
+ free(ccrtpath);
+ }
+
+ if (ckeypath != NULL) {
+ ckeypath = realpath(ckeypath, NULL);
+ if (ckeypath == NULL) {
+ printf("Failed to resolve client key path: %s.\n",
+ strerror(errno));
+ goto fail;
+ }
+
+ if (strlen(ckeypath) > NAME_PATH_SIZE) {
+ printf("Client key path > %d chars.", NAME_PATH_SIZE);
+ free(ckeypath);
+ goto fail;
+ }
+ strcpy(info.c.key, ckeypath);
+ free(ckeypath);
}
if (strcmp(lb_pol, RR) == 0)
- pol_lb = LB_RR;
+ info.pol_lb = LB_RR;
else if (strcmp(lb_pol, SPILL) == 0)
- pol_lb = LB_SPILL;
+ info.pol_lb = LB_SPILL;
else {
usage();
return -1;
}
- return irm_create_name(name, pol_lb);
+ return irm_create_name(&info);
+ fail:
+ usage();
+ return -1;
}