aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--lib/libtinytac/lmemory.c73
1 files changed, 70 insertions, 3 deletions
diff --git a/lib/libtinytac/lmemory.c b/lib/libtinytac/lmemory.c
index ae35759..f5dc85b 100644
--- a/lib/libtinytac/lmemory.c
+++ b/lib/libtinytac/lmemory.c
@@ -186,6 +186,8 @@ tinytac_get_option(
186 int rc; 186 int rc;
187 const char * str; 187 const char * str;
188 unsigned * optsp; 188 unsigned * optsp;
189 void * ptr;
190 size_t pos;
189 191
190 TinyTacDebugTrace(); 192 TinyTacDebugTrace();
191 193
@@ -260,6 +262,55 @@ tinytac_get_option(
260 return(TTAC_ENOMEM); 262 return(TTAC_ENOMEM);
261 return(TTAC_SUCCESS); 263 return(TTAC_SUCCESS);
262 264
265 case TTAC_OPT_IPV4:
266 optsp = ((tt)) ? &tt->opts : &tinytac_dflt.opts;
267 TinyTacDebug(TTAC_DEBUG_ARGS, " == %s( %s, TTAC_OPT_IPV4, outvalue )", __func__, (((tt)) ? "tt" : "NULL"));
268 TinyTacDebug(TTAC_DEBUG_ARGS, " <= outvalue: %s", ((*optsp & TTAC_OPT_IPV4)) ? "TTAC_YES" : "TTAC_NO");
269 *((int *)outvalue) = ((*optsp & TTAC_OPT_IPV4)) ? TTAC_YES : TTAC_NO;
270 return(TTAC_SUCCESS);
271
272 case TTAC_OPT_IPV6:
273 optsp = ((tt)) ? &tt->opts : &tinytac_dflt.opts;
274 TinyTacDebug(TTAC_DEBUG_ARGS, " == %s( %s, TTAC_OPT_IPV6, outvalue )", __func__, (((tt)) ? "tt" : "NULL"));
275 TinyTacDebug(TTAC_DEBUG_ARGS, " <= outvalue: %s", ((*optsp & TTAC_OPT_IPV6)) ? "TTAC_YES" : "TTAC_NO");
276 *((int *)outvalue) = ((*optsp & TTAC_OPT_IPV6)) ? TTAC_YES : TTAC_NO;
277 return(TTAC_SUCCESS);
278
279 case TTAC_OPT_KEY:
280 tt = ((tt)) ? tt : &tinytac_dflt;
281 *((char **)outvalue) = NULL;
282 TinyTacDebug(TTAC_DEBUG_ARGS, " == %s( %s, TTAC_OPT_KEY, outvalue )", __func__, (((tt)) ? "tt" : "NULL"));
283 if (!(tt->keys))
284 return(TTAC_SUCCESS);
285 if (!(tt->keys[0]))
286 return(TTAC_SUCCESS);
287 TinyTacDebug(TTAC_DEBUG_ARGS, " <= outvalue: %s", tt->keys[0]);
288 if ((*((char **)outvalue) = tinytacb_strdup(tt->keys[0])) == NULL)
289 return(TTAC_ENOMEM);
290 return(TTAC_SUCCESS);
291
292 case TTAC_OPT_KEYS:
293 tt = ((tt)) ? tt : &tinytac_dflt;
294 *((char **)outvalue) = NULL;
295 TinyTacDebug(TTAC_DEBUG_ARGS, " == %s( %s, TTAC_OPT_KEY, outvalue )", __func__, (((tt)) ? "tt" : "NULL"));
296 if (!(tt->keys))
297 return(TTAC_SUCCESS);
298 for(pos = 0; ((tt->keys[pos])); pos++)
299 TinyTacDebug(TTAC_DEBUG_ARGS, " <= outvalue: %s", tt->keys[pos]);
300 if ((tinytacb_strsdup((char ***)outvalue, tt->keys)))
301 return(TTAC_ENOMEM);
302 return(TTAC_SUCCESS);
303
304 case TTAC_OPT_NETWORK_TIMEOUT:
305 tt = ((tt)) ? tt : &tinytac_dflt;
306 TinyTacDebug(TTAC_DEBUG_ARGS, " == %s( %s, TTAC_OPT_NETWORK_TIMEOUT, outvalue )", __func__, (((tt)) ? "tt" : "NULL"));
307 TinyTacDebug(TTAC_DEBUG_ARGS, " <= outvalue: %u sec %u usec", tt->net_timeout.tv_sec, tt->net_timeout.tv_usec);
308 if ((ptr = malloc(sizeof(struct timeval))) == NULL)
309 return(TTAC_ENOMEM);
310 memcpy(ptr, &tt->net_timeout, sizeof(struct timeval));
311 *((struct timeval **)outvalue) = ptr;
312 return(TTAC_SUCCESS);
313
263 case TTAC_OPT_RANDOM: 314 case TTAC_OPT_RANDOM:
264 optsp = ((tt)) ? &tt->opts : &tinytac_dflt.opts; 315 optsp = ((tt)) ? &tt->opts : &tinytac_dflt.opts;
265 TinyTacDebug(TTAC_DEBUG_ARGS, " == %s( %s, TTAC_OPT_RANDOM, outvalue )", __func__, (((tt)) ? "tt" : "NULL")); 316 TinyTacDebug(TTAC_DEBUG_ARGS, " == %s( %s, TTAC_OPT_RANDOM, outvalue )", __func__, (((tt)) ? "tt" : "NULL"));
@@ -273,6 +324,13 @@ tinytac_get_option(
273 *((int *)outvalue) = *optsp & TTAC_RND_METHODS; 324 *((int *)outvalue) = *optsp & TTAC_RND_METHODS;
274 return(TTAC_SUCCESS); 325 return(TTAC_SUCCESS);
275 326
327 case TTAC_OPT_TIMEOUT:
328 tt = ((tt)) ? tt : &tinytac_dflt;
329 TinyTacDebug(TTAC_DEBUG_ARGS, " == %s( %s, TTAC_OPT_TIMEOUT, outvalue )", __func__, (((tt)) ? "tt" : "NULL"));
330 TinyTacDebug(TTAC_DEBUG_ARGS, " <= outvalue: %i", tt->timeout);
331 *((int *)outvalue) = tt->timeout;
332 return(TTAC_SUCCESS);
333
276 default: 334 default:
277 break; 335 break;
278 }; 336 };
@@ -308,16 +366,25 @@ tinytac_initialize(
308 return(rc); 366 return(rc);
309 }; 367 };
310 368
311 // clear default options if overriden by user 369 // sets user flags and default flags
312 if ((opts & TTAC_IP_UNSPEC)) 370 if ((opts & TTAC_IP_UNSPEC))
313 tt->opts &= ~TTAC_IP_UNSPEC; 371 tt->opts &= ~TTAC_IP_UNSPEC;
314 if ((opts & TTAC_AUTHEN_TYPES)) 372 if ((opts & TTAC_AUTHEN_TYPES))
315 tt->opts &= ~TTAC_AUTHEN_TYPES; 373 tt->opts &= ~TTAC_AUTHEN_TYPES;
316 if ((opts & TTAC_RND_METHODS)) 374 if ((opts & TTAC_RND_METHODS))
317 tt->opts &= ~TTAC_RND_METHODS; 375 tt->opts &= ~TTAC_RND_METHODS;
376 tt->opts |= opts;
377 if (!(tt->opts & TTAC_IP_UNSPEC))
378 if (!(tt->opts |= TTAC_IP_UNSPEC & tinytac_dflt.opts))
379 tt->opts |= TTAC_DFLT_IP & ~tinytac_dflt.opts_neg;
380 if (!(tt->opts & TTAC_AUTHEN_TYPES))
381 if (!(tt->opts |= TTAC_AUTHEN_TYPES & tinytac_dflt.opts))
382 tt->opts |= TTAC_DFLT_AUTHEN & ~tinytac_dflt.opts_neg;
383 if (!(tt->opts & TTAC_RND_METHODS))
384 if (!(tt->opts |= TTAC_RND_METHODS & tinytac_dflt.opts))
385 tt->opts |= TTAC_DFLT_RANDOM;
318 386
319 // apply user options 387 // apply user options
320 tt->opts |= opts;
321 if ((rc = tinytac_set_option(tt, TTAC_OPT_HOSTS, hosts)) != TTAC_SUCCESS) 388 if ((rc = tinytac_set_option(tt, TTAC_OPT_HOSTS, hosts)) != TTAC_SUCCESS)
322 { 389 {
323 tinytac_tinytac_free(tt); 390 tinytac_tinytac_free(tt);
@@ -438,7 +505,7 @@ tinytac_set_option(
438 { case TTAC_RAND: TinyTacDebug(TTAC_DEBUG_ARGS, " <= invalue: %s", "TTAC_RAND"); break; 505 { case TTAC_RAND: TinyTacDebug(TTAC_DEBUG_ARGS, " <= invalue: %s", "TTAC_RAND"); break;
439 case TTAC_RANDOM: TinyTacDebug(TTAC_DEBUG_ARGS, " <= invalue: %s", "TTAC_RANDOM"); break; 506 case TTAC_RANDOM: TinyTacDebug(TTAC_DEBUG_ARGS, " <= invalue: %s", "TTAC_RANDOM"); break;
440 case TTAC_URANDOM: TinyTacDebug(TTAC_DEBUG_ARGS, " <= invalue: %s", "TTAC_URANDOM"); break; 507 case TTAC_URANDOM: TinyTacDebug(TTAC_DEBUG_ARGS, " <= invalue: %s", "TTAC_URANDOM"); break;
441 default: TinyTacDebug(TTAC_DEBUG_ARGS, " <= invalue: %i", *((const int *)invalue)); return(TTAC_EOPTVAL); 508 default: TinyTacDebug(TTAC_DEBUG_ARGS, " <= invalue: %i", ival); return(TTAC_EOPTVAL);
442 }; 509 };
443 tt = ((tt)) ? tt : &tinytac_dflt; 510 tt = ((tt)) ? tt : &tinytac_dflt;
444 tt->opts &= ~(TTAC_RND_METHODS); 511 tt->opts &= ~(TTAC_RND_METHODS);