diff options
Diffstat (limited to 'c/src/libnetworking/rtems_webserver/um.c')
-rw-r--r-- | c/src/libnetworking/rtems_webserver/um.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/c/src/libnetworking/rtems_webserver/um.c b/c/src/libnetworking/rtems_webserver/um.c index ce9e171c01..e960f02719 100644 --- a/c/src/libnetworking/rtems_webserver/um.c +++ b/c/src/libnetworking/rtems_webserver/um.c @@ -53,6 +53,13 @@ /******************************** Local Data **********************************/ +#ifdef qHierarchicalAccess +/* + * user-provided function to allow hierarchical access protection. See below. + * for details. + */ +extern bool_t dmfCanAccess(const char_t* usergroup, const char_t* group); +#endif #ifdef UEMF /* * User table definition @@ -1377,15 +1384,28 @@ bool_t umUserCanAccessURL(char_t *user, char_t *url) * member of that group */ if (group && *group) { +#ifdef qHierarchicalAccess + /* + * If we are compiling with the hierarchical access extensions, we + * instead call the user-provided function that checks to see whether + * the current user's access level is greater than or equal to the + * access level required for this URL. + */ + return dmfCanAccess(usergroup, group); + +#else if (usergroup && (gstrcmp(group, usergroup) != 0)) { return FALSE; + } +#endif } /* * Otherwise, user can access the URL */ return TRUE; + } /******************************************************************************/ |