diff options
| -rw-r--r-- | doc/mans/tinyrad_options.3.in | 6 | ||||
| -rw-r--r-- | include/tinyrad.h | 1 | ||||
| -rw-r--r-- | lib/libtinyrad/libtinyrad.h | 2 | ||||
| -rw-r--r-- | lib/libtinyrad/lmemory.c | 20 |
4 files changed, 22 insertions, 7 deletions
diff --git a/doc/mans/tinyrad_options.3.in b/doc/mans/tinyrad_options.3.in index 701d89e..a5b83f5 100644 --- a/doc/mans/tinyrad_options.3.in +++ b/doc/mans/tinyrad_options.3.in | |||
| @@ -111,6 +111,12 @@ Sets/gets timeout for socket/network operations. \fIinvalue\fR must be a | |||
| 111 | \fBstruct timeval *\fR. | 111 | \fBstruct timeval *\fR. |
| 112 | 112 | ||
| 113 | .TP | 113 | .TP |
| 114 | .B TRAD_OPT_SCHEME | ||
| 115 | Retrieves the configured scheme of the client library. \fIoutvalue\fR must be | ||
| 116 | a \fBint *\fR. Valid schemes are \fBTRAD_RADIUS\fR, \fBTRAD_RADIUS_ACCT\fR, | ||
| 117 | \fBTRAD_RADIUS_DYNAUTH\fR, and \fBTRAD_RADSEC\fR. This is a read-only option. | ||
| 118 | |||
| 119 | .TP | ||
| 114 | .B TRAD_OPT_SOCKET_BIND_ADDRESSES | 120 | .B TRAD_OPT_SOCKET_BIND_ADDRESSES |
| 115 | Sets/gets a space-separated list of IP Addresses used to bind the local socket | 121 | Sets/gets a space-separated list of IP Addresses used to bind the local socket |
| 116 | when connecting to a remote server. Only one valid IPv4 address and/or one | 122 | when connecting to a remote server. Only one valid IPv4 address and/or one |
diff --git a/include/tinyrad.h b/include/tinyrad.h index bc17b3e..3afb9cb 100644 --- a/include/tinyrad.h +++ b/include/tinyrad.h | |||
| @@ -143,6 +143,7 @@ | |||
| 143 | #define TRAD_OPT_TIMEOUT 9 | 143 | #define TRAD_OPT_TIMEOUT 9 |
| 144 | #define TRAD_OPT_DEBUG_IDENT 10 | 144 | #define TRAD_OPT_DEBUG_IDENT 10 |
| 145 | #define TRAD_OPT_DEBUG_SYSLOG 11 | 145 | #define TRAD_OPT_DEBUG_SYSLOG 11 |
| 146 | #define TRAD_OPT_SCHEME 12 | ||
| 146 | 147 | ||
| 147 | // library debug levels | 148 | // library debug levels |
| 148 | #define TRAD_DEBUG_NONE 0 | 149 | #define TRAD_DEBUG_NONE 0 |
diff --git a/lib/libtinyrad/libtinyrad.h b/lib/libtinyrad/libtinyrad.h index bfb4a92..301efb8 100644 --- a/lib/libtinyrad/libtinyrad.h +++ b/lib/libtinyrad/libtinyrad.h | |||
| @@ -94,6 +94,8 @@ struct _tinyrad | |||
| 94 | struct sockaddr_in6 * bind_sa6; | 94 | struct sockaddr_in6 * bind_sa6; |
| 95 | struct timeval * net_timeout; | 95 | struct timeval * net_timeout; |
| 96 | uint32_t authenticator; | 96 | uint32_t authenticator; |
| 97 | uint32_t pad32; | ||
| 98 | unsigned scheme; | ||
| 97 | unsigned opts; | 99 | unsigned opts; |
| 98 | int s; | 100 | int s; |
| 99 | int timeout; | 101 | int timeout; |
diff --git a/lib/libtinyrad/lmemory.c b/lib/libtinyrad/lmemory.c index b7d08ca..ec37044 100644 --- a/lib/libtinyrad/lmemory.c +++ b/lib/libtinyrad/lmemory.c | |||
| @@ -206,6 +206,12 @@ tinyrad_get_option( | |||
| 206 | ((struct timeval *)outvalue)->tv_usec = tr->net_timeout->tv_usec; | 206 | ((struct timeval *)outvalue)->tv_usec = tr->net_timeout->tv_usec; |
| 207 | break; | 207 | break; |
| 208 | 208 | ||
| 209 | case TRAD_OPT_SCHEME: | ||
| 210 | TinyRadDebug(TRAD_DEBUG_ARGS, " == %s( tr, TRAD_OPT_SCHEME, outvalue )", __FUNCTION__); | ||
| 211 | TinyRadDebug(TRAD_DEBUG_ARGS, " <= outvalue: %i", tr->scheme); | ||
| 212 | *((int *)outvalue) = tr->scheme; | ||
| 213 | break; | ||
| 214 | |||
| 209 | case TRAD_OPT_SOCKET_BIND_ADDRESSES: | 215 | case TRAD_OPT_SOCKET_BIND_ADDRESSES: |
| 210 | TinyRadDebug(TRAD_DEBUG_ARGS, " == %s( tr, TRAD_OPT_SOCKET_BIND_ADDRESSES, outvalue )", __FUNCTION__); | 216 | TinyRadDebug(TRAD_DEBUG_ARGS, " == %s( tr, TRAD_OPT_SOCKET_BIND_ADDRESSES, outvalue )", __FUNCTION__); |
| 211 | inet_ntop(AF_INET, &tr->bind_sa->sin_addr, bind_buff, sizeof(struct sockaddr_in)); | 217 | inet_ntop(AF_INET, &tr->bind_sa->sin_addr, bind_buff, sizeof(struct sockaddr_in)); |
| @@ -324,12 +330,7 @@ tinyrad_initialize( | |||
| 324 | tr->authenticator = u32; | 330 | tr->authenticator = u32; |
| 325 | 331 | ||
| 326 | // parses URL | 332 | // parses URL |
| 327 | if ((rc = tinyrad_urldesc_parse(url, &tr->trud)) != TRAD_SUCCESS) | 333 | if ((rc = tinyrad_set_option(tr, TRAD_OPT_URI, url)) != TRAD_SUCCESS) |
| 328 | { | ||
| 329 | tinyrad_destroy(tr); | ||
| 330 | return(rc); | ||
| 331 | }; | ||
| 332 | if ((rc = tinyrad_urldesc_resolve(tr->trud, (uint32_t)opts)) != TRAD_SUCCESS) | ||
| 333 | { | 334 | { |
| 334 | tinyrad_destroy(tr); | 335 | tinyrad_destroy(tr); |
| 335 | return(rc); | 336 | return(rc); |
| @@ -432,6 +433,10 @@ tinyrad_set_option( | |||
| 432 | memcpy(tr->net_timeout, ((const struct timeval *)invalue), sizeof(struct timeval)); | 433 | memcpy(tr->net_timeout, ((const struct timeval *)invalue), sizeof(struct timeval)); |
| 433 | break; | 434 | break; |
| 434 | 435 | ||
| 436 | case TRAD_OPT_SCHEME: | ||
| 437 | TinyRadDebug(TRAD_DEBUG_ARGS, " == %s( tr, TRAD_OPT_SCHEME, invalue )", __FUNCTION__); | ||
| 438 | return(TRAD_EOPTERR); | ||
| 439 | |||
| 435 | case TRAD_OPT_SOCKET_BIND_ADDRESSES: | 440 | case TRAD_OPT_SOCKET_BIND_ADDRESSES: |
| 436 | TinyRadDebug(TRAD_DEBUG_ARGS, " == %s( tr, TRAD_OPT_SOCKET_BIND_ADDRESSES, invalue )", __FUNCTION__); | 441 | TinyRadDebug(TRAD_DEBUG_ARGS, " == %s( tr, TRAD_OPT_SOCKET_BIND_ADDRESSES, invalue )", __FUNCTION__); |
| 437 | if (tr->s != -1) | 442 | if (tr->s != -1) |
| @@ -455,7 +460,8 @@ tinyrad_set_option( | |||
| 455 | return(rc); | 460 | return(rc); |
| 456 | }; | 461 | }; |
| 457 | tinyrad_urldesc_free(tr->trud); | 462 | tinyrad_urldesc_free(tr->trud); |
| 458 | tr->trud = trud; | 463 | tr->scheme = tinyrad_urldesc_scheme(trud); |
| 464 | tr->trud = trud; | ||
| 459 | break; | 465 | break; |
| 460 | 466 | ||
| 461 | default: | 467 | default: |
