#include <sys/mount.h>
#include <linux/fs.h>
#include <sys/stat.h>
+#include <sys/time.h>
+#include <sys/resource.h>
#include "unit.h"
#include "strv.h"
assert(rvalue);
assert(data);
- if ((x = log_facility_from_string(rvalue)) < 0) {
+ if ((x = log_facility_unshifted_from_string(rvalue)) < 0) {
log_error("[%s:%u] Failed to parse log facility, ignoring: %s", filename, line, rvalue);
return 0;
}
- *o = LOG_MAKEPRI(x, LOG_PRI(*o));
+ *o = (x << 3) | LOG_PRI(*o);
return 0;
}
return 0;
}
- *o = LOG_MAKEPRI(LOG_FAC(*o), x);
+ *o = (*o & LOG_FACMASK) | x;
return 0;
}
assert(rvalue);
assert(data);
- if (safe_atollu(rvalue, &u) < 0) {
+ if (streq(rvalue, "infinity"))
+ u = (unsigned long long) RLIM_INFINITY;
+ else if (safe_atollu(rvalue, &u) < 0) {
log_error("[%s:%u] Failed to parse resource value, ignoring: %s", filename, line, rvalue);
return 0;
}
return 0;
}
-static int config_parse_condition_kernel(
- const char *filename,
- unsigned line,
- const char *section,
- const char *lvalue,
- int ltype,
- const char *rvalue,
- void *data,
- void *userdata) {
-
- Unit *u = data;
- bool trigger, negate;
- Condition *c;
-
- assert(filename);
- assert(lvalue);
- assert(rvalue);
- assert(data);
-
- if ((trigger = rvalue[0] == '|'))
- rvalue++;
-
- if ((negate = rvalue[0] == '!'))
- rvalue++;
-
- if (!(c = condition_new(CONDITION_KERNEL_COMMAND_LINE, rvalue, trigger, negate)))
- return -ENOMEM;
-
- LIST_PREPEND(Condition, conditions, u->meta.conditions, c);
- return 0;
-}
-
-static int config_parse_condition_virt(
+static int config_parse_condition_string(
const char *filename,
unsigned line,
const char *section,
void *data,
void *userdata) {
+ ConditionType cond = ltype;
Unit *u = data;
bool trigger, negate;
Condition *c;
if ((negate = rvalue[0] == '!'))
rvalue++;
- if (!(c = condition_new(CONDITION_VIRTUALIZATION, rvalue, trigger, negate)))
+ if (!(c = condition_new(cond, rvalue, trigger, negate)))
return -ENOMEM;
LIST_PREPEND(Condition, conditions, u->meta.conditions, c);
{ config_parse_notify_access, "ACCESS" },
{ config_parse_ip_tos, "TOS" },
{ config_parse_condition_path, "CONDITION" },
- { config_parse_condition_kernel, "CONDITION" },
+ { config_parse_condition_string, "CONDITION" },
{ config_parse_condition_null, "CONDITION" },
- { config_parse_condition_virt, "CONDITION" },
};
assert(f);
{ "ConditionPathExists", config_parse_condition_path, CONDITION_PATH_EXISTS, u, "Unit" },
{ "ConditionPathIsDirectory", config_parse_condition_path, CONDITION_PATH_IS_DIRECTORY, u, "Unit" },
{ "ConditionDirectoryNotEmpty", config_parse_condition_path, CONDITION_DIRECTORY_NOT_EMPTY, u, "Unit" },
- { "ConditionKernelCommandLine", config_parse_condition_kernel, 0, u, "Unit" },
- { "ConditionVirtualization",config_parse_condition_virt, 0, u, "Unit" },
+ { "ConditionKernelCommandLine", config_parse_condition_string, CONDITION_KERNEL_COMMAND_LINE, u, "Unit" },
+ { "ConditionVirtualization", config_parse_condition_string, CONDITION_VIRTUALIZATION, u, "Unit" },
+ { "ConditionSecurity", config_parse_condition_string, CONDITION_SECURITY, u, "Unit" },
{ "ConditionNull", config_parse_condition_null, 0, u, "Unit" },
{ "PIDFile", config_parse_path, 0, &u->service.pid_file, "Service" },