BUG/MINOR: cfgparse: Fix transition between 2 sections with the same name

When a section's parser is registered, it can also define a post section
callback, called at the end of the section parsing. But when 2 sections with the
same name followed each other, the transition between them was missed. This
induced 2 bugs. First, the call to the post section callback was skipped. Then,
the parsing of the second section was mixed with the first one.

This patch must be backported in 1.8.
diff --git a/src/cfgparse.c b/src/cfgparse.c
index 5df53d3..a28d24c 100644
--- a/src/cfgparse.c
+++ b/src/cfgparse.c
@@ -1880,32 +1880,31 @@
 		list_for_each_entry(ics, &sections, list) {
 			if (strcmp(args[0], ics->section_name) == 0) {
 				cursection = ics->section_name;
+				pcs = cs;
 				cs = ics;
 				break;
 			}
 		}
 
+		if (pcs && pcs->post_section_parser) {
+			err_code |= pcs->post_section_parser();
+			if (err_code & ERR_ABORT)
+				goto err;
+			pcs = NULL;
+		}
+
 		if (!cs) {
 			ha_alert("parsing [%s:%d]: unknown keyword '%s' out of section.\n", file, linenum, args[0]);
 			err_code |= ERR_ALERT | ERR_FATAL;
 		} else {
-			/* else it's a section keyword */
-
-			if (pcs != cs && pcs && pcs->post_section_parser) {
-				err_code |= pcs->post_section_parser();
-				if (err_code & ERR_ABORT)
-					goto err;
-			}
-
 			err_code |= cs->section_parser(file, linenum, args, kwm);
 			if (err_code & ERR_ABORT)
 				goto err;
 		}
-		pcs = cs;
 	}
 
-	if (pcs == cs && pcs && pcs->post_section_parser)
-		err_code |= pcs->post_section_parser();
+	if (cs && pcs->post_section_parser)
+		err_code |= cs->post_section_parser();
 
 err:
 	free(cfg_scope);