diff options
| author | David M. Syzdek <david@syzdek.net> | 2022-06-01 21:14:47 -0800 |
|---|---|---|
| committer | David M. Syzdek <david@syzdek.net> | 2022-06-01 21:14:47 -0800 |
| commit | 846367c00f374f404178783bafd7d5bddd473293 (patch) | |
| tree | e20cc22ff092ec62f6cf9d612aed4c35753c8001 | |
| parent | d163e24d2e96c4ea1c966aa494a98191b0b2495f (diff) | |
| download | tinytac-846367c00f374f404178783bafd7d5bddd473293.tar.gz tinytac-846367c00f374f404178783bafd7d5bddd473293.tar.bz2 tinytac-846367c00f374f404178783bafd7d5bddd473293.tar.xz tinytac-846367c00f374f404178783bafd7d5bddd473293.zip | |
libtinytac: adding tinytac_conf_print()
| -rw-r--r-- | include/tinytac.h | 10 | ||||
| -rw-r--r-- | lib/libtinytac/lconf.c | 140 | ||||
| -rw-r--r-- | lib/libtinytac/libtinytac.sym | 3 |
3 files changed, 137 insertions, 16 deletions
diff --git a/include/tinytac.h b/include/tinytac.h index e870940..834308c 100644 --- a/include/tinytac.h +++ b/include/tinytac.h | |||
| @@ -299,6 +299,16 @@ struct _tinytac_account_reply | |||
| 299 | ////////////////// | 299 | ////////////////// |
| 300 | #pragma mark - Prototypes | 300 | #pragma mark - Prototypes |
| 301 | 301 | ||
| 302 | //-----------------// | ||
| 303 | // conf prototypes // | ||
| 304 | //-----------------// | ||
| 305 | #pragma mark conf prototypes | ||
| 306 | |||
| 307 | void | ||
| 308 | tinytac_conf_print( | ||
| 309 | TinyTac * tt ); | ||
| 310 | |||
| 311 | |||
| 302 | //------------------// | 312 | //------------------// |
| 303 | // error prototypes // | 313 | // error prototypes // |
| 304 | //------------------// | 314 | //------------------// |
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[] |
| 93 | static tinytac_opt_t tinytac_conf_options[] = | 102 | static 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 | ||
| 164 | static void | ||
| 165 | tinytac_conf_print_line( | ||
| 166 | int comment, | ||
| 167 | const char * name, | ||
| 168 | const char * value ); | ||
| 169 | |||
| 170 | |||
| 155 | static tinytac_opt_t * | 171 | static tinytac_opt_t * |
| 156 | tinytac_opt_lookup_name( | 172 | tinytac_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 | ||
| 514 | void | ||
| 515 | tinytac_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 | |||
| 595 | void | ||
| 596 | tinytac_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 | |||
| 498 | tinytac_opt_t * | 606 | tinytac_opt_t * |
| 499 | tinytac_opt_lookup_name( | 607 | tinytac_opt_lookup_name( |
| 500 | const char * name ) | 608 | const char * name ) |
diff --git a/lib/libtinytac/libtinytac.sym b/lib/libtinytac/libtinytac.sym index 262371f..d0087bd 100644 --- a/lib/libtinytac/libtinytac.sym +++ b/lib/libtinytac/libtinytac.sym | |||
| @@ -30,6 +30,9 @@ | |||
| 30 | # | 30 | # |
| 31 | # lib/libtinytac/libtinytac.sym - list of symbols to export | 31 | # lib/libtinytac/libtinytac.sym - list of symbols to export |
| 32 | # | 32 | # |
| 33 | # conf functions | ||
| 34 | tinytac_conf_print | ||
| 35 | # | ||
| 33 | # error functions | 36 | # error functions |
| 34 | tinytac_strerror | 37 | tinytac_strerror |
| 35 | tinytac_strerror_r | 38 | tinytac_strerror_r |
