diff options
author | Doug Nazar <nazard@nazar.ca> | 2020-07-20 13:40:42 -0400 |
---|---|---|
committer | Steve Dickson <steved@redhat.com> | 2020-07-22 10:39:16 -0400 |
commit | 5d73b8fb23b4157c5b498180da941ca5801074ea (patch) | |
tree | f85fa053bee952180581c3adbe75cace21f9becf | |
parent | 640714ab63a465028bf31781349bfe045d0a1b97 (diff) | |
download | nfs-utils-5d73b8fb23b4157c5b498180da941ca5801074ea.tar.gz |
svcgssd: Cleanup global resources on exit
Signed-off-by: Doug Nazar <nazard@nazar.ca>
Signed-off-by: Steve Dickson <steved@redhat.com>
-rw-r--r-- | utils/gssd/gss_util.c | 6 | ||||
-rw-r--r-- | utils/gssd/gss_util.h | 1 | ||||
-rw-r--r-- | utils/gssd/svcgssd.c | 8 | ||||
-rw-r--r-- | utils/gssd/svcgssd_krb5.c | 21 | ||||
-rw-r--r-- | utils/gssd/svcgssd_krb5.h | 1 |
5 files changed, 30 insertions, 7 deletions
diff --git a/utils/gssd/gss_util.c b/utils/gssd/gss_util.c index 2e6d40f0..a4b27779 100644 --- a/utils/gssd/gss_util.c +++ b/utils/gssd/gss_util.c @@ -339,3 +339,9 @@ out: return retval; } +void +gssd_cleanup(void) +{ + u_int32_t min_stat; + gss_release_cred(&min_stat, &gssd_creds); +} diff --git a/utils/gssd/gss_util.h b/utils/gssd/gss_util.h index aa9f7780..4da64e38 100644 --- a/utils/gssd/gss_util.h +++ b/utils/gssd/gss_util.h @@ -41,6 +41,7 @@ int gssd_acquire_cred(char *server_name, const gss_OID oid); void pgsserr(char *msg, u_int32_t maj_stat, u_int32_t min_stat, const gss_OID mech); int gssd_check_mechs(void); +void gssd_cleanup(void); #ifndef HAVE_LIBGSSGLUE #include <gssapi/gssapi_krb5.h> diff --git a/utils/gssd/svcgssd.c b/utils/gssd/svcgssd.c index f538fd2a..3155a2f9 100644 --- a/utils/gssd/svcgssd.c +++ b/utils/gssd/svcgssd.c @@ -65,6 +65,7 @@ #include "err_util.h" #include "conffile.h" #include "misc.h" +#include "svcgssd_krb5.h" struct state_paths etab; static bool signal_received = false; @@ -148,6 +149,9 @@ main(int argc, char *argv[]) rpc_verbosity = conf_get_num("svcgssd", "RPC-Verbosity", rpc_verbosity); idmap_verbosity = conf_get_num("svcgssd", "IDMAP-Verbosity", idmap_verbosity); + /* We don't need the config anymore */ + conf_cleanup(); + while ((opt = getopt(argc, argv, "fivrnp:")) != -1) { switch (opt) { case 'f': @@ -276,5 +280,9 @@ main(int argc, char *argv[]) event_base_free(evbase); + nfs4_term_name_mapping(); + svcgssd_free_enctypes(); + gssd_cleanup(); + return EXIT_SUCCESS; } diff --git a/utils/gssd/svcgssd_krb5.c b/utils/gssd/svcgssd_krb5.c index 1d44d344..305d4751 100644 --- a/utils/gssd/svcgssd_krb5.c +++ b/utils/gssd/svcgssd_krb5.c @@ -74,13 +74,7 @@ parse_enctypes(char *enctypes) return 0; /* Free any existing cached_enctypes */ - free(cached_enctypes); - - if (parsed_enctypes != NULL) { - free(parsed_enctypes); - parsed_enctypes = NULL; - parsed_num_enctypes = 0; - } + svcgssd_free_enctypes(); /* count the number of commas */ for (curr = enctypes; curr && *curr != '\0'; curr = ++comma) { @@ -162,6 +156,19 @@ out_clean_parsed: /*=== External routines ===*/ /*==========================*/ +void +svcgssd_free_enctypes(void) +{ + free(cached_enctypes); + cached_enctypes = NULL; + + if (parsed_enctypes != NULL) { + free(parsed_enctypes); + parsed_enctypes = NULL; + parsed_num_enctypes = 0; + } +} + /* * Get encryption types supported by the kernel, and then * call gss_krb5_set_allowable_enctypes() to limit the diff --git a/utils/gssd/svcgssd_krb5.h b/utils/gssd/svcgssd_krb5.h index 07d5eb9b..78a90e9a 100644 --- a/utils/gssd/svcgssd_krb5.h +++ b/utils/gssd/svcgssd_krb5.h @@ -32,5 +32,6 @@ #define SVCGSSD_KRB5_H int svcgssd_limit_krb5_enctypes(void); +void svcgssd_free_enctypes(void); #endif /* SVCGSSD_KRB5_H */ |