Re: [nfs-utils PATCH] conffile: add 'arg' argument to conf_remove_now()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





On 1/2/25 5:41 PM, Scott Mayhew wrote:
Commit 9350a97a added an optional 'arg' to section names, but the logic
to remove configurations wasn't updated to check the 'arg' argument.
This wasn't really a problem until commit 15e17993 updated
conf_parse_line() to call conf_set() with override=1, the end result
being that we'll only remember the last value seen for any given
section/tag combination.

Fixes: 9350a97a ("Added an conditional argument to the Section names")
Fixes: 15e17993 ("conffile: process config.d directory config files.")
Signed-off-by: Scott Mayhew <smayhew@xxxxxxxxxx>
Committed... (tag: nfs-utils-2-8-3-rc1)

steved.
---
  support/nfs/conffile.c | 8 +++++---
  1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/support/nfs/conffile.c b/support/nfs/conffile.c
index 1e9c22b5..137fac8d 100644
--- a/support/nfs/conffile.c
+++ b/support/nfs/conffile.c
@@ -169,13 +169,15 @@ static void free_conftrans(struct conf_trans *ct)
   * Insert a tag-value combination from LINE (the equal sign is at POS)
   */
  static int
-conf_remove_now(const char *section, const char *tag)
+conf_remove_now(const char *section, const char *arg, const char *tag)
  {
  	struct conf_binding *cb, *next;
cb = LIST_FIRST(&conf_bindings[conf_hash (section)]);
  	for (; cb; cb = next) {
  		next = LIST_NEXT(cb, link);
+		if (arg && (cb->arg == NULL || strcasecmp(arg, cb->arg) != 0))
+			continue;
  		if (strcasecmp(cb->section, section) == 0
  				&& strcasecmp(cb->tag, tag) == 0) {
  			LIST_REMOVE(cb, link);
@@ -217,7 +219,7 @@ conf_set_now(const char *section, const char *arg, const char *tag,
  	struct conf_binding *node = 0;
if (override)
-		conf_remove_now(section, tag);
+		conf_remove_now(section, arg, tag);
  	else if (conf_get_section(section, arg, tag)) {
  		if (!is_default) {
  			xlog(LOG_INFO, "conf_set: duplicate tag [%s]:%s, ignoring...",
@@ -1254,7 +1256,7 @@ conf_end(int transaction, int commit)
  						node->is_default);
  					break;
  				case CONF_REMOVE:
-					conf_remove_now(node->section, node->tag);
+					conf_remove_now(node->section, node->arg, node->tag);
  					break;
  				case CONF_REMOVE_SECTION:
  					conf_remove_section_now(node->section);





[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux