From: J. Bruce Fields Date: Fri, 27 Nov 2009 20:54:11 +0000 (-0500) Subject: mountd: auth_authenticate_internal further cleanup X-Git-Tag: nfs-utils-1-2-2-rc6~7 X-Git-Url: https://git.decadent.org.uk/gitweb/?p=nfs-utils.git;a=commitdiff_plain;h=250c232f53bce01ffd0696f7a55b1e2b0feca51a mountd: auth_authenticate_internal further cleanup Move newcache case into its own function. Signed-off-by: J. Bruce Fields --- diff --git a/utils/mountd/auth.c b/utils/mountd/auth.c index 6fbf72b..0aac273 100644 --- a/utils/mountd/auth.c +++ b/utils/mountd/auth.c @@ -126,42 +126,56 @@ static char *get_client_hostname(struct sockaddr_in *caller, struct hostent *hp, return strdup("DEFAULT"); } +/* return static nfs_export with details filled in */ +static nfs_export * +auth_authenticate_newcache(char *what, struct sockaddr_in *caller, + char *path, struct hostent *hp, + enum auth_error *error) +{ + nfs_export *exp; + int i; + + free(my_client.m_hostname); + + my_client.m_hostname = get_client_hostname(caller, hp, error); + if (my_client.m_hostname == NULL) + return NULL; + + my_client.m_naddr = 1; + my_client.m_addrlist[0] = caller->sin_addr; + my_exp.m_client = &my_client; + + exp = NULL; + for (i = 0; !exp && i < MCL_MAXTYPES; i++) + for (exp = exportlist[i].p_head; exp; exp = exp->m_next) { + if (strcmp(path, exp->m_export.e_path)) + continue; + if (!use_ipaddr && !client_member(my_client.m_hostname, exp->m_client->m_hostname)) + continue; + if (use_ipaddr && !client_check(exp->m_client, hp)) + continue; + break; + } + *error = not_exported; + if (!exp) + return NULL; + + my_exp.m_export = exp->m_export; + exp = &my_exp; + return exp; +} + static nfs_export * auth_authenticate_internal(char *what, struct sockaddr_in *caller, char *path, struct hostent *hp, enum auth_error *error) { - nfs_export *exp; + nfs_export *exp; if (new_cache) { - int i; - /* return static nfs_export with details filled in */ - free(my_client.m_hostname); - my_client.m_hostname = get_client_hostname(caller, hp, error); - if (my_client.m_hostname == NULL) - return NULL; - my_client.m_naddr = 1; - my_client.m_addrlist[0] = caller->sin_addr; - my_exp.m_client = &my_client; - - exp = NULL; - for (i = 0; !exp && i < MCL_MAXTYPES; i++) - for (exp = exportlist[i].p_head; exp; exp = exp->m_next) { - if (strcmp(path, exp->m_export.e_path)) - continue; - if (!use_ipaddr && !client_member(my_client.m_hostname, exp->m_client->m_hostname)) - continue; - if (use_ipaddr && !client_check(exp->m_client, hp)) - continue; - break; - } - *error = not_exported; + exp = auth_authenticate_newcache(what, caller, path, hp, error); if (!exp) - return exp; - - my_exp.m_export = exp->m_export; - exp = &my_exp; - + return NULL; } else { if (!(exp = export_find(hp, path))) { *error = no_entry;