aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/lib/libtinytac/lconf.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libtinytac/lconf.c')
-rw-r--r--lib/libtinytac/lconf.c140
1 files changed, 124 insertions, 16 deletions
diff --git a/lib/libtinytac/lconf.c b/lib/libtinytac/lconf.c
index de913e2..0957127 100644
--- a/lib/libtinytac/lconf.c
+++ b/lib/libtinytac/lconf.c
@@ -63,6 +63,14 @@
63# define SYSCONFDIR "/etc" 63# define SYSCONFDIR "/etc"
64#endif 64#endif
65 65
66#define TTAC_OTYPE_NONE 0
67#define TTAC_OTYPE_INT 1
68#define TTAC_OTYPE_STR 2
69#define TTAC_OTYPE_FLAG 3
70#define TTAC_OTYPE_TV 4
71#define TTAC_OTYPE_UINT 5
72#define TTAC_OTYPE_OTHER ~0
73
66 74
67////////////////// 75//////////////////
68// // 76// //
@@ -75,6 +83,7 @@ typedef struct _tinytac_opt
75{ 83{
76 const char * opt_name; 84 const char * opt_name;
77 uintptr_t opt_id; 85 uintptr_t opt_id;
86 uintptr_t opt_type;
78} tinytac_opt_t; 87} tinytac_opt_t;
79 88
80 89
@@ -92,22 +101,22 @@ static atomic_int tinytac_conf_init;
92#pragma mark tinytac_conf_options[] 101#pragma mark tinytac_conf_options[]
93static tinytac_opt_t tinytac_conf_options[] = 102static tinytac_opt_t tinytac_conf_options[] =
94{ 103{
95 { .opt_name = "AUTHEN_ASCII", .opt_id = TTAC_OPT_AUTHEN_ASCII }, 104 { .opt_name = "AUTHEN_ASCII", .opt_id = TTAC_OPT_AUTHEN_ASCII, .opt_type = TTAC_OTYPE_FLAG },
96 { .opt_name = "AUTHEN_CHAP", .opt_id = TTAC_OPT_AUTHEN_CHAP }, 105 { .opt_name = "AUTHEN_CHAP", .opt_id = TTAC_OPT_AUTHEN_CHAP, .opt_type = TTAC_OTYPE_FLAG },
97 { .opt_name = "AUTHEN_MSCHAP", .opt_id = TTAC_OPT_AUTHEN_MSCHAP }, 106 { .opt_name = "AUTHEN_MSCHAP", .opt_id = TTAC_OPT_AUTHEN_MSCHAP, .opt_type = TTAC_OTYPE_FLAG },
98 { .opt_name = "AUTHEN_MSCHAPV2", .opt_id = TTAC_OPT_AUTHEN_MSCHAPV2 }, 107 { .opt_name = "AUTHEN_MSCHAPV2", .opt_id = TTAC_OPT_AUTHEN_MSCHAPV2, .opt_type = TTAC_OTYPE_FLAG },
99 { .opt_name = "AUTHEN_PAP", .opt_id = TTAC_OPT_AUTHEN_PAP }, 108 { .opt_name = "AUTHEN_PAP", .opt_id = TTAC_OPT_AUTHEN_PAP, .opt_type = TTAC_OTYPE_FLAG },
100 { .opt_name = "DEBUG_LEVEL", .opt_id = TTAC_OPT_DEBUG_LEVEL }, 109 { .opt_name = "DEBUG_LEVEL", .opt_id = TTAC_OPT_DEBUG_LEVEL, .opt_type = TTAC_OTYPE_UINT },
101 { .opt_name = "DEBUG_SYSLOG", .opt_id = TTAC_OPT_DEBUG_SYSLOG }, 110 { .opt_name = "DEBUG_SYSLOG", .opt_id = TTAC_OPT_DEBUG_SYSLOG, .opt_type = TTAC_OTYPE_FLAG },
102 { .opt_name = "HOST", .opt_id = TTAC_OPT_HOSTS }, 111 { .opt_name = "HOST", .opt_id = TTAC_OPT_HOSTS, .opt_type = TTAC_OTYPE_STR },
103 { .opt_name = "IPV4", .opt_id = TTAC_OPT_IPV4 }, 112 { .opt_name = "IPV4", .opt_id = TTAC_OPT_IPV4, .opt_type = TTAC_OTYPE_FLAG },
104 { .opt_name = "IPV6", .opt_id = TTAC_OPT_IPV6 }, 113 { .opt_name = "IPV6", .opt_id = TTAC_OPT_IPV6, .opt_type = TTAC_OTYPE_FLAG },
105 { .opt_name = "KEY", .opt_id = TTAC_OPT_KEY }, 114 { .opt_name = "KEY", .opt_id = TTAC_OPT_KEY, .opt_type = TTAC_OTYPE_STR },
106 { .opt_name = "NETWORK_TIMEOUT", .opt_id = TTAC_OPT_NETWORK_TIMEOUT }, 115 { .opt_name = "NETWORK_TIMEOUT", .opt_id = TTAC_OPT_NETWORK_TIMEOUT, .opt_type = TTAC_OTYPE_TV },
107 { .opt_name = "RANDOM", .opt_id = TTAC_OPT_RANDOM }, 116 { .opt_name = "RANDOM", .opt_id = TTAC_OPT_RANDOM, .opt_type = TTAC_OTYPE_OTHER },
108 { .opt_name = "STOPINIT", .opt_id = TTAC_OPT_STOPINIT }, 117 { .opt_name = "STOPINIT", .opt_id = TTAC_OPT_STOPINIT, .opt_type = TTAC_OTYPE_NONE },
109 { .opt_name = "TIMEOUT", .opt_id = TTAC_OPT_TIMEOUT }, 118 { .opt_name = "TIMEOUT", .opt_id = TTAC_OPT_TIMEOUT, .opt_type = TTAC_OTYPE_INT },
110 { .opt_name = NULL, .opt_id = 0 } 119 { .opt_name = NULL, .opt_id = 0, .opt_type = 0 }
111}; 120};
112 121
113 122
@@ -152,6 +161,13 @@ tinytac_conf_opt_timeval(
152 const char * value ); 161 const char * value );
153 162
154 163
164static void
165tinytac_conf_print_line(
166 int comment,
167 const char * name,
168 const char * value );
169
170
155static tinytac_opt_t * 171static tinytac_opt_t *
156tinytac_opt_lookup_name( 172tinytac_opt_lookup_name(
157 const char * name ); 173 const char * name );
@@ -495,6 +511,98 @@ tinytac_conf_opt_timeval(
495} 511}
496 512
497 513
514void
515tinytac_conf_print(
516 TinyTac * tt )
517{
518 size_t pos;
519 tinytac_opt_t * opt;
520 int ival;
521 char * str;
522 struct timeval * tv;
523 char buff[1024];
524
525 printf("# TinyTac Library Configuration:\n");
526 for(pos = 0; ((tinytac_conf_options[pos].opt_name)); pos++)
527 {
528 opt = &tinytac_conf_options[pos];
529 switch(opt->opt_type)
530 {
531 case TTAC_OTYPE_FLAG:
532 if ((tinytac_get_option(tt, (int)opt->opt_id, &ival)) == TTAC_SUCCESS)
533 tinytac_conf_print_line(0, opt->opt_name, (((ival)) ? "yes" : "no"));
534 break;
535
536 case TTAC_OTYPE_INT:
537 if ((tinytac_get_option(tt, (int)opt->opt_id, &ival)) == TTAC_SUCCESS)
538 {
539 snprintf(buff, sizeof(buff), "%i", ival);
540 tinytac_conf_print_line(0, opt->opt_name, buff);
541 };
542 break;
543
544 case TTAC_OTYPE_NONE:
545 break;
546
547 case TTAC_OTYPE_STR:
548 if ((tinytac_get_option(tt, (int)opt->opt_id, &str)) == TTAC_SUCCESS)
549 {
550 snprintf(buff, sizeof(buff), "'%s'", str);
551 tinytac_conf_print_line(0, opt->opt_name, buff);
552 free(str);
553 };
554 break;
555
556 case TTAC_OTYPE_OTHER:
557 if (opt->opt_id == TTAC_OPT_RANDOM)
558 { if ((tinytac_get_option(tt, TTAC_OPT_RANDOM, &ival)) == TTAC_SUCCESS)
559 { switch(ival)
560 { case TTAC_RAND: tinytac_conf_print_line(0, "rand", "rand"); break;
561 case TTAC_RANDOM: tinytac_conf_print_line(0, "rand", "random"); break;
562 case TTAC_URANDOM: tinytac_conf_print_line(0, "rand", "urandom"); break;
563 default: tinytac_conf_print_line(1, "rand", "unknown option"); break;
564 };
565 };
566 };
567 break;
568
569 case TTAC_OTYPE_TV:
570 if ((tinytac_get_option(tt, (int)opt->opt_id, &tv)) == TTAC_SUCCESS)
571 {
572 snprintf(buff, sizeof(buff), "%u", (unsigned)tv->tv_sec);
573 tinytac_conf_print_line(0, opt->opt_name, buff);
574 free(tv);
575 };
576 break;
577
578 case TTAC_OTYPE_UINT:
579 if ((tinytac_get_option(tt, (int)opt->opt_id, &ival)) == TTAC_SUCCESS)
580 {
581 snprintf(buff, sizeof(buff), "%u", (unsigned)ival);
582 tinytac_conf_print_line(0, opt->opt_name, buff);
583 };
584 break;
585
586 default:
587 break;
588 };
589 };
590
591 return;
592}
593
594
595void
596tinytac_conf_print_line(
597 int comment,
598 const char * name,
599 const char * value )
600{
601 printf("%s%-20s %s\n", (((comment)) ? "#" : ""), name, value);
602 return;
603}
604
605
498tinytac_opt_t * 606tinytac_opt_t *
499tinytac_opt_lookup_name( 607tinytac_opt_lookup_name(
500 const char * name ) 608 const char * name )