|
Ian Kent |
e232a5 |
autofs-5.0.6 - remove empty command line arguments
|
|
Ian Kent |
e232a5 |
|
|
Ian Kent |
e232a5 |
From: Ian Kent <raven@themaw.net>
|
|
Ian Kent |
e232a5 |
|
|
Ian Kent |
e232a5 |
When invoking the automount daemon from a systemd unit file a macro
|
|
Ian Kent |
e232a5 |
that evaluates to the empty string is passed as an empty argument
|
|
Ian Kent |
e232a5 |
unlike the shell environment within which unquoted arguments are
|
|
Ian Kent |
e232a5 |
seen as white space and are not passed at all.
|
|
Ian Kent |
e232a5 |
|
|
Ian Kent |
e232a5 |
These empty arguments confuse getopt(3) and cause the program
|
|
Ian Kent |
e232a5 |
parameters to be misread so we need to remove them before calling
|
|
Ian Kent |
e232a5 |
getopt(3).
|
|
Ian Kent |
e232a5 |
---
|
|
Ian Kent |
e232a5 |
|
|
Ian Kent |
e232a5 |
CHANGELOG | 1 +
|
|
Ian Kent |
e232a5 |
daemon/automount.c | 39 +++++++++++++++++++++++++++++++++++----
|
|
Ian Kent |
e232a5 |
2 files changed, 36 insertions(+), 4 deletions(-)
|
|
Ian Kent |
e232a5 |
|
|
Ian Kent |
e232a5 |
|
|
Ian Kent |
5ec16e |
--- autofs-5.0.6.orig/CHANGELOG
|
|
Ian Kent |
5ec16e |
+++ autofs-5.0.6/CHANGELOG
|
|
Ian Kent |
5ec16e |
@@ -18,6 +18,7 @@
|
|
Ian Kent |
e232a5 |
- fix ipv6 configure check.
|
|
Ian Kent |
e232a5 |
- add piddir to configure.
|
|
Ian Kent |
e232a5 |
- add systemd unit support.
|
|
Ian Kent |
e232a5 |
+- remove empty command line arguments (passed by systemd).
|
|
Ian Kent |
e232a5 |
|
|
Ian Kent |
e232a5 |
28/06/2011 autofs-5.0.6
|
|
Ian Kent |
e232a5 |
-----------------------
|
|
Ian Kent |
5ec16e |
--- autofs-5.0.6.orig/daemon/automount.c
|
|
Ian Kent |
5ec16e |
+++ autofs-5.0.6/daemon/automount.c
|
|
Ian Kent |
5ec16e |
@@ -1865,6 +1865,34 @@ static int convert_log_priority(char *pr
|
|
Ian Kent |
e232a5 |
return -1;
|
|
Ian Kent |
e232a5 |
}
|
|
Ian Kent |
e232a5 |
|
|
Ian Kent |
e232a5 |
+static void remove_empty_args(char **argv, int *argc)
|
|
Ian Kent |
e232a5 |
+{
|
|
Ian Kent |
e232a5 |
+ int next_to_last = *argc - 1;
|
|
Ian Kent |
e232a5 |
+ int i, j;
|
|
Ian Kent |
e232a5 |
+
|
|
Ian Kent |
e232a5 |
+ for (i = j = 1; i < *argc; i++) {
|
|
Ian Kent |
e232a5 |
+ if (*argv[i]) {
|
|
Ian Kent |
e232a5 |
+ j++;
|
|
Ian Kent |
e232a5 |
+ continue;
|
|
Ian Kent |
e232a5 |
+ }
|
|
Ian Kent |
e232a5 |
+
|
|
Ian Kent |
e232a5 |
+ while (i < *argc && argv[i] && !*argv[i]) i++;
|
|
Ian Kent |
e232a5 |
+
|
|
Ian Kent |
e232a5 |
+ if (i == *argc)
|
|
Ian Kent |
e232a5 |
+ break;
|
|
Ian Kent |
e232a5 |
+
|
|
Ian Kent |
e232a5 |
+ if (i == next_to_last) {
|
|
Ian Kent |
e232a5 |
+ if (*argv[i])
|
|
Ian Kent |
e232a5 |
+ argv[j++] = argv[i];
|
|
Ian Kent |
e232a5 |
+ break;
|
|
Ian Kent |
e232a5 |
+ } else {
|
|
Ian Kent |
e232a5 |
+ argv[j++] = argv[i];
|
|
Ian Kent |
e232a5 |
+ argv[i--] = "";
|
|
Ian Kent |
e232a5 |
+ }
|
|
Ian Kent |
e232a5 |
+ }
|
|
Ian Kent |
e232a5 |
+ *argc = j;
|
|
Ian Kent |
e232a5 |
+}
|
|
Ian Kent |
e232a5 |
+
|
|
Ian Kent |
e232a5 |
int main(int argc, char *argv[])
|
|
Ian Kent |
e232a5 |
{
|
|
Ian Kent |
e232a5 |
int res, opt, status;
|
|
Ian Kent |
e232a5 |
@@ -1874,6 +1902,7 @@ int main(int argc, char *argv[])
|
|
Ian Kent |
e232a5 |
time_t timeout;
|
|
Ian Kent |
e232a5 |
time_t age = time(NULL);
|
|
Ian Kent |
e232a5 |
struct rlimit rlim;
|
|
Ian Kent |
e232a5 |
+ const char *options = "+hp:t:vmdD:fVrO:l:n:CF";
|
|
Ian Kent |
e232a5 |
static const struct option long_options[] = {
|
|
Ian Kent |
e232a5 |
{"help", 0, 0, 'h'},
|
|
Ian Kent |
e232a5 |
{"pid-file", 1, 0, 'p'},
|
|
Ian Kent |
e232a5 |
@@ -1918,8 +1947,10 @@ int main(int argc, char *argv[])
|
|
Ian Kent |
e232a5 |
dumpmaps = 0;
|
|
Ian Kent |
e232a5 |
daemon_check = 1;
|
|
Ian Kent |
e232a5 |
|
|
Ian Kent |
e232a5 |
+ remove_empty_args(argv, &argc);
|
|
Ian Kent |
e232a5 |
+
|
|
Ian Kent |
e232a5 |
opterr = 0;
|
|
Ian Kent |
e232a5 |
- while ((opt = getopt_long(argc, argv, "+hp:t:vmdD:fVrO:l:n:CF", long_options, NULL)) != EOF) {
|
|
Ian Kent |
e232a5 |
+ while ((opt = getopt_long(argc, argv, options, long_options, NULL)) != EOF) {
|
|
Ian Kent |
e232a5 |
switch (opt) {
|
|
Ian Kent |
e232a5 |
case 'h':
|
|
Ian Kent |
e232a5 |
usage();
|
|
Ian Kent |
e232a5 |
@@ -2066,7 +2097,7 @@ int main(int argc, char *argv[])
|
|
Ian Kent |
e232a5 |
res = setrlimit(RLIMIT_NOFILE, &rlim);
|
|
Ian Kent |
e232a5 |
if (res)
|
|
Ian Kent |
e232a5 |
printf("%s: can't increase open file limit - continuing",
|
|
Ian Kent |
e232a5 |
- argv[0]);
|
|
Ian Kent |
e232a5 |
+ program);
|
|
Ian Kent |
e232a5 |
|
|
Ian Kent |
e232a5 |
#if ENABLE_CORES
|
|
Ian Kent |
e232a5 |
rlim.rlim_cur = RLIM_INFINITY;
|
|
Ian Kent |
e232a5 |
@@ -2074,7 +2105,7 @@ int main(int argc, char *argv[])
|
|
Ian Kent |
e232a5 |
res = setrlimit(RLIMIT_CORE, &rlim);
|
|
Ian Kent |
e232a5 |
if (res)
|
|
Ian Kent |
e232a5 |
printf("%s: can't increase core file limit - continuing",
|
|
Ian Kent |
e232a5 |
- argv[0]);
|
|
Ian Kent |
e232a5 |
+ program);
|
|
Ian Kent |
e232a5 |
#endif
|
|
Ian Kent |
e232a5 |
|
|
Ian Kent |
e232a5 |
if (argc == 0)
|
|
Ian Kent |
e232a5 |
@@ -2097,7 +2128,7 @@ int main(int argc, char *argv[])
|
|
Ian Kent |
e232a5 |
nc = cache_init_null_cache(master_list);
|
|
Ian Kent |
e232a5 |
if (!nc) {
|
|
Ian Kent |
e232a5 |
printf("%s: failed to init null map cache for %s",
|
|
Ian Kent |
e232a5 |
- master_list->name, argv[0]);
|
|
Ian Kent |
e232a5 |
+ program, master_list->name);
|
|
Ian Kent |
e232a5 |
exit(1);
|
|
Ian Kent |
e232a5 |
}
|
|
Ian Kent |
e232a5 |
master_list->nc = nc;
|