file-magic: improve libmagic handling on *nix systems

pull/1842/head
Andreas Herz 10 years ago committed by Victor Julien
parent 368d7e913a
commit 15c98c6085

@ -215,7 +215,8 @@
fi fi
echo -n "installation for $host OS... " echo -n "installation for $host OS... "
e_magic_file="/usr/share/file/magic" e_magic_file=""
e_magic_file_comment="#"
case "$host" in case "$host" in
*-*-*freebsd*) *-*-*freebsd*)
LUA_PC_NAME="lua-5.1" LUA_PC_NAME="lua-5.1"
@ -223,14 +224,12 @@
CFLAGS="${CFLAGS} -DOS_FREEBSD" CFLAGS="${CFLAGS} -DOS_FREEBSD"
CPPFLAGS="${CPPFLAGS} -I/usr/local/include -I/usr/local/include/libnet11" CPPFLAGS="${CPPFLAGS} -I/usr/local/include -I/usr/local/include/libnet11"
LDFLAGS="${LDFLAGS} -L/usr/local/lib -L/usr/local/lib/libnet11" LDFLAGS="${LDFLAGS} -L/usr/local/lib -L/usr/local/lib/libnet11"
e_magic_file="/usr/share/misc/magic"
;; ;;
*-*-openbsd*) *-*-openbsd*)
LUA_PC_NAME="lua51" LUA_PC_NAME="lua51"
CFLAGS="${CFLAGS} -D__OpenBSD__" CFLAGS="${CFLAGS} -D__OpenBSD__"
CPPFLAGS="${CPPFLAGS} -I/usr/local/include -I/usr/local/include/libnet-1.1" CPPFLAGS="${CPPFLAGS} -I/usr/local/include -I/usr/local/include/libnet-1.1"
LDFLAGS="${LDFLAGS} -L/usr/local/lib -I/usr/local/lib/libnet-1.1" LDFLAGS="${LDFLAGS} -L/usr/local/lib -I/usr/local/lib/libnet-1.1"
e_magic_file="/usr/local/share/misc/magic.mgc"
;; ;;
*darwin*|*Darwin*) *darwin*|*Darwin*)
LUA_PC_NAME="lua-5.1" LUA_PC_NAME="lua-5.1"
@ -1810,6 +1809,7 @@ if test "$WINDOWS_PATH" = "yes"; then
e_sysconfdir="$e_winbase\\\\" e_sysconfdir="$e_winbase\\\\"
e_sysconfrulesdir="$e_winbase\\\\rules\\\\" e_sysconfrulesdir="$e_winbase\\\\rules\\\\"
e_magic_file="$e_winbase\\\\magic.mgc" e_magic_file="$e_winbase\\\\magic.mgc"
e_magic_file_comment=""
e_logdir="$e_winbase\\\\log" e_logdir="$e_winbase\\\\log"
e_logfilesdir="$e_logdir\\\\files" e_logfilesdir="$e_logdir\\\\files"
e_logcertsdir="$e_logdir\\\\certs" e_logcertsdir="$e_logdir\\\\certs"
@ -1831,6 +1831,7 @@ AC_SUBST(e_sysconfrulesdir)
AC_SUBST(e_localstatedir) AC_SUBST(e_localstatedir)
AC_DEFINE_UNQUOTED([CONFIG_DIR],["$e_sysconfdir"],[Our CONFIG_DIR]) AC_DEFINE_UNQUOTED([CONFIG_DIR],["$e_sysconfdir"],[Our CONFIG_DIR])
AC_SUBST(e_magic_file) AC_SUBST(e_magic_file)
AC_SUBST(e_magic_file_comment)
EXPAND_VARIABLE(prefix, CONFIGURE_PREFIX) EXPAND_VARIABLE(prefix, CONFIGURE_PREFIX)
EXPAND_VARIABLE(sysconfdir, CONFIGURE_SYSCONDIR) EXPAND_VARIABLE(sysconfdir, CONFIGURE_SYSCONDIR)

@ -322,6 +322,12 @@ static void *DetectFilemagicThreadInit(void *data)
(void)ConfGet("magic-file", &filename); (void)ConfGet("magic-file", &filename);
if (filename != NULL) { if (filename != NULL) {
if (strlen(filename) == 0) {
/* set filename to NULL on *nix systems so magic_load uses system default path (see man libmagic) */
SCLogInfo("using system default magic-file");
filename = NULL;
}
else {
SCLogInfo("using magic-file %s", filename); SCLogInfo("using magic-file %s", filename);
if ( (fd = fopen(filename, "r")) == NULL) { if ( (fd = fopen(filename, "r")) == NULL) {
@ -330,6 +336,7 @@ static void *DetectFilemagicThreadInit(void *data)
} }
fclose(fd); fclose(fd);
} }
}
if (magic_load(t->ctx, filename) != 0) { if (magic_load(t->ctx, filename) != 0) {
SCLogError(SC_ERR_MAGIC_LOAD, "magic_load failed: %s", magic_error(t->ctx)); SCLogError(SC_ERR_MAGIC_LOAD, "magic_load failed: %s", magic_error(t->ctx));

@ -58,7 +58,15 @@ int MagicInit(void)
} }
(void)ConfGet("magic-file", &filename); (void)ConfGet("magic-file", &filename);
if (filename != NULL) { if (filename != NULL) {
if (strlen(filename) == 0) {
/* set filename to NULL on *nix systems so magic_load uses system default path (see man libmagic) */
SCLogInfo("using system default magic-file");
filename = NULL;
}
else {
SCLogInfo("using magic-file %s", filename); SCLogInfo("using magic-file %s", filename);
if ( (fd = fopen(filename, "r")) == NULL) { if ( (fd = fopen(filename, "r")) == NULL) {
@ -67,6 +75,7 @@ int MagicInit(void)
} }
fclose(fd); fclose(fd);
} }
}
if (magic_load(g_magic_ctx, filename) != 0) { if (magic_load(g_magic_ctx, filename) != 0) {
SCLogError(SC_ERR_MAGIC_LOAD, "magic_load failed: %s", magic_error(g_magic_ctx)); SCLogError(SC_ERR_MAGIC_LOAD, "magic_load failed: %s", magic_error(g_magic_ctx));

@ -395,7 +395,7 @@ outputs:
# Magic file. The extension .mgc is added to the value here. # Magic file. The extension .mgc is added to the value here.
#magic-file: /usr/share/file/magic #magic-file: /usr/share/file/magic
magic-file: @e_magic_file@ @e_magic_file_comment@magic-file: @e_magic_file@
# When running in NFQ inline mode, it is possible to use a simulated # When running in NFQ inline mode, it is possible to use a simulated
# non-terminal NFQUEUE verdict. # non-terminal NFQUEUE verdict.

Loading…
Cancel
Save