logind: Support logind.conf.d directories in the usual search paths

This makes it possible to drop in logind configuration snippets from a
package or other configuration management mechanism.

Add documentation to the header of /etc/logind.conf pointing the user at
/etc/logind.conf.d/*.conf.

Introduce a new helper, conf_parse_many, to parse configuration files in
a search path.
This commit is contained in:
Josh Triplett
2014-11-26 19:11:37 -05:00
committed by Zbigniew Jędrzejewski-Szmek
parent 7f0a55d432
commit e846102353
5 changed files with 73 additions and 6 deletions
+32
View File
@@ -27,6 +27,7 @@
#include <netinet/ether.h>
#include "conf-parser.h"
#include "conf-files.h"
#include "util.h"
#include "macro.h"
#include "strv.h"
@@ -430,6 +431,37 @@ int config_parse(const char *unit,
return 0;
}
/* Parse each config file in the specified directories. */
int config_parse_many(const char *conf_file,
const char *conf_file_dirs,
const char *sections,
ConfigItemLookup lookup,
const void *table,
bool relaxed,
void *userdata) {
_cleanup_strv_free_ char **files = NULL;
char **fn;
int r;
r = conf_files_list_nulstr(&files, ".conf", NULL, conf_file_dirs);
if (r < 0)
return r;
if (conf_file) {
r = config_parse(NULL, conf_file, NULL, sections, lookup, table, relaxed, false, true, userdata);
if (r < 0)
return r;
}
STRV_FOREACH(fn, files) {
r = config_parse(NULL, *fn, NULL, sections, lookup, table, relaxed, false, true, userdata);
if (r < 0)
return r;
}
return 0;
}
#define DEFINE_PARSER(type, vartype, conv_func) \
int config_parse_##type(const char *unit, \
const char *filename, \