aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorDavid M. Syzdek <david@syzdek.net>2022-03-17 16:00:57 -0800
committerDavid M. Syzdek <david@syzdek.net>2022-03-17 16:00:57 -0800
commite61a0b72348d18330482b8da2ac6f01b07087aac (patch)
tree9d3cbe06343f04ec9500692338e73f8b59844f64
parent25d7f9c7463c45e5500dc4d784e59c4befac68ca (diff)
downloadtinyrad-e61a0b72348d18330482b8da2ac6f01b07087aac.tar.gz
tinyrad-e61a0b72348d18330482b8da2ac6f01b07087aac.tar.bz2
tinyrad-e61a0b72348d18330482b8da2ac6f01b07087aac.tar.xz
tinyrad-e61a0b72348d18330482b8da2ac6f01b07087aac.zip
libtinyrad: adding tinyrad_dict_defaults()
-rw-r--r--lib/libtinyrad/ldict.c70
-rw-r--r--lib/libtinyrad/ldict.h7
-rw-r--r--lib/libtinyrad/lmemory.c17
3 files changed, 55 insertions, 39 deletions
diff --git a/lib/libtinyrad/ldict.c b/lib/libtinyrad/ldict.c
index c2b9f34..6a12fbe 100644
--- a/lib/libtinyrad/ldict.c
+++ b/lib/libtinyrad/ldict.c
@@ -694,6 +694,47 @@ tinyrad_dict_add_vendor(
694} 694}
695 695
696 696
697int
698tinyrad_dict_defaults(
699 TinyRadDict * dict,
700 char *** msgsp,
701 int opts )
702{
703 int rc;
704
705 if (!(dict))
706 return(TRAD_SUCCESS);
707
708 // adjust options
709 opts &= ~(dict->opts_neg);
710 opts |= dict->opts;
711
712 // load built-in dictionary
713 if ((opts & TRAD_BUILTIN_DICT))
714 if ((rc = tinyrad_dict_builtin(dict, msgsp)) != TRAD_SUCCESS)
715 return(rc);
716
717 // load default dictionary file
718 if ((dict->default_dictfile))
719 {
720 switch(rc = tinyrad_dict_parse(dict, dict->default_dictfile, NULL, 0))
721 {
722 case TRAD_SUCCESS:
723 break;
724
725 case TRAD_ENOMEM:
726 case TRAD_EUNKNOWN:
727 return(rc);
728
729 default:
730 break;
731 };
732 };
733
734 return(TRAD_SUCCESS);
735}
736
737
697/// Initialize dicitionary file buffer 738/// Initialize dicitionary file buffer
698/// 739///
699/// @param[in] dict dictionary reference 740/// @param[in] dict dictionary reference
@@ -847,32 +888,11 @@ tinyrad_dict_initialize(
847 return(rc); 888 return(rc);
848 }; 889 };
849 890
850 // load builtin dictionary 891 // load builtin dictionary and default dictionary file
851 if ((dict->opts & TRAD_BUILTIN_DICT) == TRAD_BUILTIN_DICT) 892 if ((rc = tinyrad_dict_defaults(dict, NULL, opts)) != TRAD_SUCCESS)
852 { 893 {
853 if ((rc = tinyrad_dict_builtin(dict, NULL)) != TRAD_SUCCESS) 894 tinyrad_dict_free(dict);
854 { 895 return(rc);
855 tinyrad_dict_free(dict);
856 return(rc);
857 };
858 };
859
860 // load default dictionary file
861 if ((dict->default_dictfile))
862 {
863 switch(rc = tinyrad_dict_parse(dict, dict->default_dictfile, NULL, 0))
864 {
865 case TRAD_SUCCESS:
866 break;
867
868 case TRAD_ENOMEM:
869 case TRAD_EUNKNOWN:
870 tinyrad_dict_free(dict);
871 return(rc);
872
873 default:
874 break;
875 };
876 }; 896 };
877 897
878 *dictp = tinyrad_obj_retain(&dict->obj); 898 *dictp = tinyrad_obj_retain(&dict->obj);
diff --git a/lib/libtinyrad/ldict.h b/lib/libtinyrad/ldict.h
index 3fd5da4..3bd6c1b 100644
--- a/lib/libtinyrad/ldict.h
+++ b/lib/libtinyrad/ldict.h
@@ -147,6 +147,13 @@ tinyrad_dict_attr_oidname(
147 const TinyRadOID * oid ); 147 const TinyRadOID * oid );
148 148
149 149
150int
151tinyrad_dict_defaults(
152 TinyRadDict * dict,
153 char *** msgsp,
154 int opts );
155
156
150TinyRadDictValue * 157TinyRadDictValue *
151tinyrad_dict_value_lookup( 158tinyrad_dict_value_lookup(
152 TinyRadDict * dict, 159 TinyRadDict * dict,
diff --git a/lib/libtinyrad/lmemory.c b/lib/libtinyrad/lmemory.c
index 421f01c..d160e91 100644
--- a/lib/libtinyrad/lmemory.c
+++ b/lib/libtinyrad/lmemory.c
@@ -331,21 +331,10 @@ tinyrad_initialize(
331 // load default dictionary file and make read-only 331 // load default dictionary file and make read-only
332 if (!(dict)) 332 if (!(dict))
333 { 333 {
334 if ((tr->dict->default_dictfile)) 334 if ((rc = tinyrad_dict_defaults(tr->dict, NULL, (TRAD_BUILTIN_DICT|opts))) != TRAD_SUCCESS)
335 { 335 {
336 switch(rc = tinyrad_dict_parse(tr->dict, tr->dict->default_dictfile, NULL, 0)) 336 tinyrad_tiyrad_free(tr);
337 { 337 return(rc);
338 case TRAD_SUCCESS:
339 break;
340
341 case TRAD_ENOMEM:
342 case TRAD_EUNKNOWN:
343 tinyrad_tiyrad_free(tr);
344 return(rc);
345
346 default:
347 break;
348 };
349 }; 338 };
350 opt = TRAD_YES; 339 opt = TRAD_YES;
351 tinyrad_dict_set_option(tr->dict, TRAD_DICT_OPT_READONLY, &opt); 340 tinyrad_dict_set_option(tr->dict, TRAD_DICT_OPT_READONLY, &opt);