aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--networking/httpd.c77
1 files changed, 38 insertions, 39 deletions
diff --git a/networking/httpd.c b/networking/httpd.c
index 9411117ea..df99f1c8b 100644
--- a/networking/httpd.c
+++ b/networking/httpd.c
@@ -320,19 +320,6 @@ static void free_config_lines(Htaccess **pprev)
*pprev = NULL;
}
-static void add_config_line(Htaccess **pprev, Htaccess *cur)
-{
- if(*pprev == NULL) {
- *pprev = cur;
- } else {
- Htaccess *prev;
-
- for(prev = *pprev; prev->next; prev = prev->next)
- ;
- prev->next = cur;
- }
-}
-
/* flag */
#define FIRST_PARSE 0
#define SUBDIR_PARSE 1
@@ -480,11 +467,30 @@ static void parse_conf(const char *path, int flag)
if(*cf == '/')
free(p0);
#endif
- if(*cf == 'A' || *cf == 'D')
- add_config_line(&config->ip_a_d, cur);
+ if(*cf == 'A' || *cf == 'D') {
+ if(*cf == 'D' && *c) {
+ /* Deny:form_IP move top */
+ cur->next = config->ip_a_d;
+ config->ip_a_d = cur;
+ } else {
+ /* add to bottom current IP config line */
+ Htaccess *prev_IP = config->ip_a_d;
+
+ if(prev_IP == NULL) {
+ config->ip_a_d = cur;
+ } else {
+ while(prev_IP->next)
+ prev_IP = prev_IP->next;
+ prev_IP->next = cur;
+ }
+ }
+ }
#ifdef CONFIG_FEATURE_HTTPD_CONFIG_WITH_MIME_TYPES
- else if(*cf == '.')
- add_config_line(&config->mime_a, cur);
+ else if(*cf == '.') {
+ /* config .mime line move top for overwrite previous */
+ cur->next = config->mime_a;
+ config->mime_a = cur;
+ }
#endif
#ifdef CONFIG_FEATURE_HTTPD_BASIC_AUTH
@@ -726,28 +732,21 @@ static void decodeBase64(char *Data)
while (*in) {
int t = *in++;
- switch(t) {
- case '+':
- t = 62;
- break;
- case '/':
- t = 63;
- break;
- case '=':
- t = 0;
- break;
- case 'A' ... 'Z':
- t = t - 'A';
- break;
- case 'a' ... 'z':
- t = t - 'a' + 26;
- break;
- case '0' ... '9':
- t = t - '0' + 52;
- break;
- default:
- continue;
- }
+ if(t >= '0' && t <= '9')
+ t = t - '0' + 52;
+ else if(t >= 'A' && t <= 'Z')
+ t = t - 'A';
+ else if(t >= 'a' && t <= 'z')
+ t = t - 'a' + 26;
+ else if(t == '+')
+ t = 62;
+ else if(t == '/')
+ t = 63;
+ else if(t == '=')
+ t = 0;
+ else
+ continue;
+
ch = (ch << 6) | t;
i++;
if (i == 4) {