100 lines
3.2 KiB
Plaintext
100 lines
3.2 KiB
Plaintext
---
|
|
configure.ac | 4 ++--
|
|
src/fuser.c | 16 ++++++++++------
|
|
2 files changed, 12 insertions(+), 8 deletions(-)
|
|
|
|
--- configure.ac
|
|
+++ configure.ac 2017-06-20 13:46:32.464296485 +0000
|
|
@@ -40,7 +40,7 @@ fi
|
|
if test "$enable_timeout_stat" = "static"; then
|
|
AC_DEFINE([WITH_TIMEOUT_STAT], [2], [Use timeout on stat calls])
|
|
fi
|
|
-AM_CONDITIONAL([WANT_TIMEOUT_STAT], [test "$enable_timeout_stat" = "static"])
|
|
+AM_CONDITIONAL([WANT_TIMEOUT_STAT], [test "$enable_timeout_stat" != "no"])
|
|
|
|
# Use string search for network based file systems but only if the system
|
|
# has /proc/self/mountinfo
|
|
@@ -121,7 +121,7 @@ AC_CHECK_MEMBERS([struct user_regs_struc
|
|
struct user_regs_struct.rdi,
|
|
struct user_regs_struct.rsi,
|
|
struct user_regs_struct.rdx], [],[],
|
|
- [#include <bits/types.h>
|
|
+ [#include <sys/types.h>
|
|
#include <sys/user.h>])
|
|
AC_CHECK_MEMBERS([struct pt_regs.orig_gpr3,
|
|
struct pt_regs.gpr], [],[], [#include <linux/ptrace.h>])
|
|
--- src/fuser.c
|
|
+++ src/fuser.c 2017-06-20 13:46:32.548294929 +0000
|
|
@@ -34,6 +34,7 @@
|
|
#include <errno.h>
|
|
#include <sys/param.h>
|
|
#include <sys/types.h>
|
|
+#include <sys/sysmacros.h>
|
|
#include <sys/stat.h>
|
|
#include <sys/socket.h>
|
|
#include <sys/wait.h>
|
|
@@ -901,6 +902,7 @@ int main(int argc, char *argv[])
|
|
struct option *optr;
|
|
char *nsptr;
|
|
int skip_argv;
|
|
+ int seen_file;
|
|
|
|
struct option options[] = {
|
|
{"all", 0, NULL, 'a'},
|
|
@@ -941,6 +943,7 @@ int main(int argc, char *argv[])
|
|
fill_unix_cache(&unixsockets);
|
|
#endif
|
|
|
|
+ seen_file = 0;
|
|
for (argc_cnt = 1; argc_cnt < argc; argc_cnt++) {
|
|
current_argv = argv[argc_cnt];
|
|
if (current_argv[0] == '-') { /* its an option */
|
|
@@ -1093,6 +1096,7 @@ int main(int argc, char *argv[])
|
|
}
|
|
}
|
|
this_name->matched_procs = NULL;
|
|
+ seen_file = 1;
|
|
if (opts & (OPT_MOUNTS | OPT_ISMOUNTPOINT)
|
|
&& this_name->name_space != NAMESPACE_FILE)
|
|
usage(_
|
|
@@ -1144,7 +1148,7 @@ int main(int argc, char *argv[])
|
|
names_tail->next = this_name;
|
|
names_tail = this_name;
|
|
} /* for across the argvs */
|
|
- if (names_head == NULL)
|
|
+ if (names_head == NULL && !seen_file)
|
|
usage(_("No process specification given"));
|
|
|
|
/* Check if -M flag was used and if so check mounts */
|
|
@@ -1394,17 +1398,17 @@ check_dir(const pid_t pid, const char *d
|
|
struct device_list *dev_tmp;
|
|
struct unixsocket_list *sock_tmp;
|
|
struct stat st, lst;
|
|
- char dirpath[MAX_PATHNAME];
|
|
- char filepath[MAX_PATHNAME];
|
|
+ char dirpath[PATH_MAX+1];
|
|
+ char filepath[PATH_MAX+1];
|
|
|
|
- snprintf(dirpath, MAX_PATHNAME, "/proc/%d/%s", pid, dirname);
|
|
+ snprintf(dirpath, PATH_MAX , "/proc/%d/%s", pid, dirname);
|
|
if ((dirp = opendir(dirpath)) == NULL)
|
|
return;
|
|
while ((direntry = readdir(dirp)) != NULL) {
|
|
if (direntry->d_name[0] < '0' || direntry->d_name[0] > '9')
|
|
continue;
|
|
|
|
- snprintf(filepath, MAX_PATHNAME, "/proc/%d/%s/%s",
|
|
+ snprintf(filepath, PATH_MAX, "/proc/%d/%s/%s",
|
|
pid, dirname, direntry->d_name);
|
|
|
|
if (timeout(thestat, filepath, &st, 5) != 0) {
|
|
@@ -1541,7 +1545,7 @@ void fill_unix_cache(struct unixsocket_l
|
|
while (fgets(line, BUFSIZ, fp) != NULL) {
|
|
char *path;
|
|
char *scanned_path = NULL;
|
|
- if (sscanf(line, "%*x: %*x %*x %*x %*x %*d %d %as",
|
|
+ if (sscanf(line, "%*x: %*x %*x %*x %*x %*d %d %ms",
|
|
&scanned_inode, &scanned_path) != 2) {
|
|
if (scanned_path)
|
|
free(scanned_path);
|