2 uname_S := $(shell sh -c 'uname -s 2>/dev/null || echo not')
4 EXTERNAL_JSON=external/cJSON/
5 EXTERNAL_LUA=external/lua-5.2.3/
6 EXTERNAL_ZLIB=external/zlib-1.2.11/
7 EXTERNAL_PCRE2=external/pcre2-10.32/
14 # XXX Becareful NO EXTRA Spaces here
17 MY_CONFIG?=mysql_config
18 PRELUDE_CONFIG?=libprelude-config
21 OSSEC_USER_MAIL?=ossecm
22 OSSEC_USER_REM?=ossecr
24 INSTALL_CMD?=install -m $(1) -o $(2) -g $(3)
25 INSTALL_LOCALTIME?=yes
26 INSTALL_RESOLVCONF?=yes
34 ifneq (${TARGET},winagent)
43 export MYLDFLAGS= "${LDFLAGS}"
44 export MYCFLAGS= "${CFLAGS}"
46 DEFINES=-DMAX_AGENTS=${MAXAGENTS} -DOSSECHIDS
47 DEFINES+=-DDEFAULTDIR=\"${PREFIX}\"
48 DEFINES+=-DUSER=\"${OSSEC_USER}\"
49 DEFINES+=-DREMUSER=\"${OSSEC_USER_REM}\"
50 DEFINES+=-DGROUPGLOBAL=\"${OSSEC_GROUP}\"
51 DEFINES+=-DMAILUSER=\"${OSSEC_USER_MAIL}\"
54 # Uncomment the DEFINES statement below if you are
55 # running Linux and want to use AF_UNSPEC instead of
56 # AF_INET6 to fully support IPv4 addresses.
59 ifneq (,$(filter ${REUSE_ID},yes y Y 1))
63 OSSEC_LDFLAGS=${LDFLAGS} -lm
65 ifneq (${TARGET},winagent)
66 ifeq (${uname_S},Linux)
67 DEFINES+=-DINOTIFY_ENABLED
68 # DEFINES+=-DUSE_MAGIC
69 OSSEC_LDFLAGS+=-lpthread
70 # OSSEC_LDFLAGS+=-lmagic
75 PATH:=${PATH}:/usr/vac/bin
77 ifeq (${uname_S},SunOS)
80 OSSEC_LDFLAGS+=-lsocket -lnsl -lresolv
82 PATH:=${PATH}:/usr/ccs/bin:/usr/xpg4/bin:/opt/csw/gcc3/bin:/opt/csw/bin:/usr/sfw/bin
85 ifeq (${uname_S},Darwin)
91 ifeq (${uname_S},FreeBSD)
93 OSSEC_LDFLAGS+=-pthread
95 CFLAGS+=-I/usr/local/include
96 OSSEC_LDFLAGS+=-L/usr/local/lib
98 ifeq (${uname_S},NetBSD)
100 OSSEC_LDFLAGS+=-pthread
102 CFLAGS+=-I/usr/local/include
103 OSSEC_LDFLAGS+=-L/usr/local/lib
105 ifeq (${uname_S},OpenBSD)
109 CFLAGS+=-I/usr/local/include
110 OSSEC_LDFLAGS+=-L/usr/local/lib
112 ifeq (${uname_S},HP-UX)
114 DEFINES+=-D_XOPEN_SOURCE_EXTENDED
116 DEFINES+=-D_REENTRANT
118 $(warning Unknown platform)
133 OSSEC_CFLAGS=${CFLAGS}
134 #ANALYSISD_FLAGS="-lsqlite3"
140 ifneq (,$(filter ${CLEANFULL},yes y Y 1))
144 ifneq (,$(filter ${ONEWAY},yes y Y 1))
145 DEFINES+=-DONEWAY_ENABLED
148 ifneq (${ZLIB_SYSTEM},no)
149 DEFINES+=-DZLIB_SYSTEM
152 ifeq (${PCRE2_SYSTEM},no)
153 PCRE2_INCLUDE=-I./${EXTERNAL_PCRE2}/install/include/
154 DEFINES+=${PCRE2_INCLUDE}
155 DEFINES+=-DPCRE2_STATIC
157 PCRE2_LOCATION?=$(shell pcre2-config --prefix)/lib
158 OSSEC_LDFLAGS+=-lpcre2-8
162 OSSEC_CFLAGS+=${DEFINES}
163 OSSEC_CFLAGS+=-Wall -Wextra
164 OSSEC_CFLAGS+=-I./ -I./headers/
167 LINKCOLOR="\033[34;1m"
169 BINCOLOR="\033[37;1m"
170 MAKECOLOR="\033[32;1m"
174 ifeq (${TARGET}, winagent)
178 ifneq (,$(shell which amd64-mingw32msvc-gcc))
179 MING_BASE:=amd64-mingw32msvc-
181 ifneq (,$(shell which i686-pc-mingw32-gcc))
182 MING_BASE:=i686-pc-mingw32-
184 ifneq (,$(shell which i686-w64-mingw32-gcc))
185 MING_BASE:=i686-w64-mingw32-
187 $(error No windows cross-compiler found!) #MING_BASE:=unknown-
194 OSSEC_CC =${QUIET_CC}${MING_BASE}${CC}
195 OSSEC_CCBIN =${QUIET_CCBIN}${MING_BASE}${CC}
196 OSSEC_LINK =${QUIET_LINK}${MING_BASE}ar -crs
197 OSSEC_RANLIB =${QUIET_RANLIB}${MING_BASE}ranlib
198 OSSEC_WINDRES =${QUIET_CCBIN}${MING_BASE}windres
201 ifneq (,$(filter ${USE_PCRE2_JIT},yes y Y 1))
202 DEFINES+=-DUSE_PCRE2_JIT
203 PCRE2_CONFIGURE_JIT=--enable-jit
205 PCRE2_CONFIGURE_JIT=--disable-jit
208 ifneq (,$(filter ${USE_INOTIFY},auto yes y Y 1))
209 DEFINES+=-DINOTIFY_ENABLED
210 ifeq (${uname_S},FreeBSD)
211 OSSEC_LDFLAGS+=-linotify -L/usr/local/lib -I/usr/local/include
212 OSSEC_CFLAGS+=-I/usr/local/include
216 ifneq (,$(filter ${USE_PRELUDE},auto yes y Y 1))
217 DEFINES+=-DPRELUDE_OUTPUT_ENABLED
218 OSSEC_LDFLAGS+=-lprelude
219 OSSEC_LDFLAGS+=$(shell sh -c '${PRELUDE_CONFIG} --pthread-cflags')
220 OSSEC_LDFLAGS+=$(shell sh -c '${PRELUDE_CONFIG} --libs')
223 ifneq (,$(filter ${USE_ZEROMQ},auto yes y Y 1))
224 DEFINES+=-DZEROMQ_OUTPUT_ENABLED
225 #LDFLAGS+=-L/usr/local/lib -I/usr/local/include -lzmq -lczmq
226 OSSEC_LDFLAGS+=-lzmq -lczmq -lm
229 ifneq (,$(filter ${USE_GEOIP},auto yes y Y 1))
230 DEFINES+=-DLIBGEOIP_ENABLED
231 OSSEC_LDFLAGS+=-lGeoIP
234 ifneq (,$(filter ${USE_SQLITE},auto yes y Y 1))
235 DEFINES+=-DSQLITE_ENABLED
236 ANALYSISD_FLAGS="-lsqlite3"
243 ifeq (${DATABASE},mysql)
244 DEFINES+=-DMYSQL_DATABASE_ENABLED
249 MI := $(shell sh -c '${MY_CONFIG} --include 2>/dev/null || echo ')
251 ifeq (${MI},) # BEGIN MI manual detection
252 ifneq (,$(wildcard /usr/include/mysql/mysql.h))
253 MI="-I/usr/include/mysql/"
255 ifneq (,$(wildcard /usr/local/include/mysql/mysql.h))
256 MI="-I/usr/local/include/mysql/"
266 ML := $(shell sh -c '${MY_CONFIG} --libs 2>/dev/null || echo ')
269 ifneq (,$(wildcard /usr/lib/mysql/*))
270 ML="-L/usr/lib/mysql -lmysqlclient"
272 ifneq (,$(wildcard /usr/lib64/mysql/*))
273 ML="-L/usr/lib64/mysql -lmysqlclient"
275 ifneq (,$(wildcard /usr/local/lib/mysql/*))
276 ML="-L/usr/local/lib/mysql -lmysqlclient"
278 ifneq (,$(wildcard /usr/local/lib64/mysql/*))
279 ML="-L/usr/local/lib64/mysql -lmysqlclient"
291 ifeq (${DATABASE}, pgsql)
292 DEFINES+=-DPGSQL_DATABASE_ENABLED
294 ifneq (${PGSQL_LIBS},)
297 PL:=$(shell sh -c '(${PG_CONFIG} --libdir --pkglibdir 2>/dev/null | sed "s/^/-L/g" | xargs ) || echo ')
300 ifneq (${PGSQL_CFLAGS},)
303 PI:=$(shell sh -c '(${PG_CONFIG} --includedir --pkgincludedir 2>/dev/null | sed "s/^/-I/g" | xargs ) || echo ')
306 # XXX need some basic autodetech stuff here.
316 # openssl ###########
317 ifeq (${USE_OPENSSL},auto)
318 ifneq (,$(wildcard /usr/include/openssl/ssl.h))
319 DEFINES+=-DLIBOPENSSL_ENABLED
320 OSSEC_LDFLAGS+=-lssl -lcrypto
322 ifneq (,$(wildcard /usr/local/include/openssl/ssl.h))
323 DEFINES+=-DLIBOPENSSL_ENABLED
324 OSSEC_LDFLAGS+=-lssl -lcrypto
329 ifneq (,$(filter ${USE_OPENSSL},yes y Y 1))
330 DEFINES+=-DLIBOPENSSL_ENABLED
331 ifeq (${OPENSSL_LIBS},)
332 OSSEC_LDFLAGS+=-lssl -lcrypto
334 OSSEC_LDFLAGS+=${OPENSSL_LIBS}
337 ifneq (${OPENSSL_CFLAGS},)
338 OSSEC_CFLAGS+=${OPENSSL_CFLAGS}
346 OSSEC_CONTROL_SRC=./init/ossec-server.sh
347 OSSEC_CONF_SRC=../etc/ossec-server.conf
353 ifeq (${TARGET},agent)
355 OSSEC_CONTROL_SRC=./init/ossec-client.sh
356 OSSEC_CONF_SRC=../etc/ossec-agent.conf
359 ifeq (${TARGET},local)
361 OSSEC_CONTROL_SRC=./init/ossec-local.sh
362 OSSEC_CONF_SRC=../etc/ossec-local.conf
368 ifneq (${TARGET},failtarget)
372 @echo "Done building ${TARGET}"
378 .PHONY: install install-agent install-server install-local install-hybrid
379 install: install-${TARGET}
381 install-agent: install-common
382 $(call INSTALL_CMD,0550,root,0) ossec-agentd ${PREFIX}/bin
383 $(call INSTALL_CMD,0550,root,0) agent-auth ${PREFIX}/bin
385 $(call INSTALL_CMD,0750,${OSSEC_USER},${OSSEC_GROUP}) -d ${PREFIX}/queue/rids
387 install-local: install-server-generic
389 install-hybrid: install-server-generic
391 install-server: install-server-generic
393 install-common: build
394 ./init/adduser.sh ${OSSEC_USER} ${OSSEC_USER_MAIL} ${OSSEC_USER_REM} ${OSSEC_GROUP} ${PREFIX}
395 $(call INSTALL_CMD,0550,root,${OSSEC_GROUP}) -d ${PREFIX}/
396 $(call INSTALL_CMD,0750,${OSSEC_USER},${OSSEC_GROUP}) -d ${PREFIX}/logs
397 $(call INSTALL_CMD,0660,${OSSEC_USER},${OSSEC_GROUP}) /dev/null ${PREFIX}/logs/ossec.log
399 $(call INSTALL_CMD,0550,root,0) -d ${PREFIX}/bin
400 $(call INSTALL_CMD,0550,root,0) ossec-logcollector ${PREFIX}/bin
401 $(call INSTALL_CMD,0550,root,0) ossec-syscheckd ${PREFIX}/bin
402 $(call INSTALL_CMD,0550,root,0) ossec-execd ${PREFIX}/bin
403 $(call INSTALL_CMD,0550,root,0) manage_agents ${PREFIX}/bin
404 $(call INSTALL_CMD,0550,root,0) ../contrib/util.sh ${PREFIX}/bin/
405 $(call INSTALL_CMD,0550,root,0) ${OSSEC_CONTROL_SRC} ${PREFIX}/bin/ossec-control
407 ifeq (${LUA_ENABLE},yes)
408 $(call INSTALL_CMD,0550,root,0) -d ${PREFIX}/lua
409 $(call INSTALL_CMD,0550,root,0) -d ${PREFIX}/lua/native
410 $(call INSTALL_CMD,0550,root,0) -d ${PREFIX}/lua/compiled
411 $(call INSTALL_CMD,0550,root,0) ${EXTERNAL_LUA}src/ossec-lua ${PREFIX}/bin/
412 $(call INSTALL_CMD,0550,root,0) ${EXTERNAL_LUA}src/ossec-luac ${PREFIX}/bin/
415 $(call INSTALL_CMD,0550,root,${OSSEC_GROUP}) -d ${PREFIX}/queue
416 $(call INSTALL_CMD,0770,${OSSEC_USER},${OSSEC_GROUP}) -d ${PREFIX}/queue/alerts
417 $(call INSTALL_CMD,0750,${OSSEC_USER},${OSSEC_GROUP}) -d ${PREFIX}/queue/ossec
418 $(call INSTALL_CMD,0750,${OSSEC_USER},${OSSEC_GROUP}) -d ${PREFIX}/queue/syscheck
419 $(call INSTALL_CMD,0750,${OSSEC_USER},${OSSEC_GROUP}) -d ${PREFIX}/queue/diff
421 $(call INSTALL_CMD,0550,root,${OSSEC_GROUP}) -d ${PREFIX}/etc
422 ifeq (${INSTALL_LOCALTIME},yes)
423 $(call INSTALL_CMD,0440,root,${OSSEC_GROUP}) /etc/localtime ${PREFIX}/etc
425 ifeq (${INSTALL_RESOLVCONF},yes)
426 $(call INSTALL_CMD,0440,root,${OSSEC_GROUP}) /etc/resolv.conf ${PREFIX}/etc
429 $(call INSTALL_CMD,1550,root,${OSSEC_GROUP}) -d ${PREFIX}/tmp
431 ifneq (,$(wildcard /etc/TIMEZONE))
432 $(call INSTALL_CMD,440,root,${OSSEC_GROUP}) /etc/TIMEZONE ${PREFIX}/etc/
434 # Solaris Needs some extra files
435 ifeq (${uname_S},SunOS)
436 $(call INSTALL_CMD,0550,root,${OSSEC_GROUP}) -d ${PREFIX}/usr/share/lib/zoneinfo/
437 cp -r /usr/share/lib/zoneinfo/* ${PREFIX}/usr/share/lib/zoneinfo/
439 $(call INSTALL_CMD,0640,root,${OSSEC_GROUP}) -b ../etc/internal_options.conf ${PREFIX}/etc/
440 ifeq (,$(wildcard ${PREFIX}/etc/local_internal_options.conf))
441 $(call INSTALL_CMD,0640,root,${OSSEC_GROUP}) ../etc/local_internal_options.conf ${PREFIX}/etc/local_internal_options.conf
443 ifeq (,$(wildcard ${PREFIX}/etc/client.keys))
444 $(call INSTALL_CMD,0640,root,${OSSEC_GROUP}) /dev/null ${PREFIX}/etc/client.keys
446 ifeq (,$(wildcard ${PREFIX}/etc/ossec.conf))
447 ifneq (,$(wildcard ../etc/ossec.mc))
448 $(call INSTALL_CMD,0640,root,${OSSEC_GROUP}) ../etc/ossec.mc ${PREFIX}/etc/ossec.conf
450 $(call INSTALL_CMD,0640,root,${OSSEC_GROUP}) ${OSSEC_CONF_SRC} ${PREFIX}/etc/ossec.conf
454 $(call INSTALL_CMD,0770,root,${OSSEC_GROUP}) -d ${PREFIX}/etc/shared
455 $(call INSTALL_CMD,0640,${OSSEC_USER},${OSSEC_GROUP}) rootcheck/db/*.txt ${PREFIX}/etc/shared/
457 $(call INSTALL_CMD,0550,root,${OSSEC_GROUP}) -d ${PREFIX}/active-response
458 $(call INSTALL_CMD,0550,root,${OSSEC_GROUP}) -d ${PREFIX}/active-response/bin
459 $(call INSTALL_CMD,0550,root,${OSSEC_GROUP}) -d ${PREFIX}/agentless
460 $(call INSTALL_CMD,0550,root,${OSSEC_GROUP}) agentlessd/scripts/* ${PREFIX}/agentless/
462 $(call INSTALL_CMD,0700,root,${OSSEC_GROUP}) -d ${PREFIX}/.ssh
464 $(call INSTALL_CMD,0550,root,${OSSEC_GROUP}) ../active-response/*.sh ${PREFIX}/active-response/bin/
465 $(call INSTALL_CMD,0550,root,${OSSEC_GROUP}) ../active-response/firewalls/*.sh ${PREFIX}/active-response/bin/
467 $(call INSTALL_CMD,0550,root,${OSSEC_GROUP}) -d ${PREFIX}/var
468 $(call INSTALL_CMD,0770,root,${OSSEC_GROUP}) -d ${PREFIX}/var/run
470 ./init/fw-check.sh execute
474 install-server-generic: install-common
475 $(call INSTALL_CMD,0660,${OSSEC_USER},${OSSEC_GROUP}) /dev/null ${PREFIX}/logs/active-responses.log
476 $(call INSTALL_CMD,0750,${OSSEC_USER},${OSSEC_GROUP}) -d ${PREFIX}/logs/archives
477 $(call INSTALL_CMD,0750,${OSSEC_USER},${OSSEC_GROUP}) -d ${PREFIX}/logs/alerts
478 $(call INSTALL_CMD,0750,${OSSEC_USER},${OSSEC_GROUP}) -d ${PREFIX}/logs/firewall
480 $(call INSTALL_CMD,0550,root,0) ossec-agentlessd ${PREFIX}/bin
481 $(call INSTALL_CMD,0550,root,0) ossec-analysisd ${PREFIX}/bin
482 $(call INSTALL_CMD,0550,root,0) ossec-monitord ${PREFIX}/bin
483 $(call INSTALL_CMD,0550,root,0) ossec-reportd ${PREFIX}/bin
484 $(call INSTALL_CMD,0550,root,0) ossec-maild ${PREFIX}/bin
485 $(call INSTALL_CMD,0550,root,0) ossec-remoted ${PREFIX}/bin
486 $(call INSTALL_CMD,0550,root,0) ossec-logtest ${PREFIX}/bin
487 $(call INSTALL_CMD,0550,root,0) ossec-csyslogd ${PREFIX}/bin
488 $(call INSTALL_CMD,0550,root,0) ossec-authd ${PREFIX}/bin
489 $(call INSTALL_CMD,0550,root,0) ossec-dbd ${PREFIX}/bin
490 $(call INSTALL_CMD,0550,root,0) ossec-makelists ${PREFIX}/bin
491 $(call INSTALL_CMD,0550,root,0) verify-agent-conf ${PREFIX}/bin/
492 $(call INSTALL_CMD,0550,root,0) clear_stats ${PREFIX}/bin/
493 $(call INSTALL_CMD,0550,root,0) list_agents ${PREFIX}/bin/
494 $(call INSTALL_CMD,0550,root,0) ossec-regex ${PREFIX}/bin/
495 $(call INSTALL_CMD,0550,root,0) syscheck_update ${PREFIX}/bin/
496 $(call INSTALL_CMD,0550,root,0) agent_control ${PREFIX}/bin/
497 $(call INSTALL_CMD,0550,root,0) syscheck_control ${PREFIX}/bin/
498 $(call INSTALL_CMD,0550,root,0) rootcheck_control ${PREFIX}/bin/
500 $(call INSTALL_CMD,0750,${OSSEC_USER},${OSSEC_GROUP}) -d ${PREFIX}/stats
501 $(call INSTALL_CMD,0550,root,${OSSEC_GROUP}) -d ${PREFIX}/rules
502 ifneq (,$(wildcard ${PREFIX}/rules/local_rules.xml))
503 cp ${PREFIX}/rules/local_rules.xml ${PREFIX}/rules/local_rules.xml.installbackup
504 $(call INSTALL_CMD,0640,root,${OSSEC_GROUP}) -b ../etc/rules/*.xml ${PREFIX}/rules
505 $(call INSTALL_CMD,0640,root,${OSSEC_GROUP}) ${PREFIX}/rules/local_rules.xml.installbackup ${PREFIX}/rules/local_rules.xml
506 rm ${PREFIX}/rules/local_rules.xml.installbackup
508 $(call INSTALL_CMD,0640,root,${OSSEC_GROUP}) -b ../etc/rules/*.xml ${PREFIX}/rules
511 $(call INSTALL_CMD,0750,${OSSEC_USER},${OSSEC_GROUP}) -d ${PREFIX}/queue/fts
513 $(call INSTALL_CMD,0750,${OSSEC_USER},${OSSEC_GROUP}) -d ${PREFIX}/queue/rootcheck
515 $(call INSTALL_CMD,0750,${OSSEC_USER_REM},${OSSEC_GROUP}) -d ${PREFIX}/queue/agent-info
516 $(call INSTALL_CMD,0750,${OSSEC_USER},${OSSEC_GROUP}) -d ${PREFIX}/queue/agentless
518 $(call INSTALL_CMD,0750,${OSSEC_USER_REM},${OSSEC_GROUP}) -d ${PREFIX}/queue/rids
520 $(call INSTALL_CMD,0640,root,${OSSEC_GROUP}) ../etc/decoder.xml ${PREFIX}/etc/
522 rm -f ${PREFIX}/etc/shared/merged.mg
527 @echo "TARGET is required: "
528 @echo " make TARGET=server to build the server"
529 @echo " make TARGET=local - local version of server"
530 @echo " make TARGET=hybrid - hybrid version of server"
531 @echo " make TARGET=agent to build the unix agent"
532 @echo " make TARGET=winagent to build the windows agent"
537 @echo "General options: "
538 @echo " make V=1 Display full compiler messages"
539 @echo " make DEBUG=1 Build with symbols and without optimization"
540 @echo " make PREFIX=/path Install OSSEC to '/path'. Defaults to /var/ossec"
541 @echo " make MAXAGENTS=NUMBER Set the number of maximum agents to NUMBER. Defaults to 2048"
542 @echo " make REUSE_ID=yes Enables agent ID re-use"
544 @echo "Database options: "
545 @echo " make DATABASE=mysql Build with MYSQL Support"
546 @echo " Use MYSQL_CFLAGS and MYSQL_LIBS to override defaults"
547 @echo " make DATABASE=pgsql Build with PostgreSQL Support "
548 @echo " Use PGSQL_CFLAGS and PGSQL_LIBS to override defaults"
550 @echo "Geoip support: "
551 @echo " make USE_GEOIP=1 Build with GeoIP support"
553 @echo "External source options: "
554 @echo " make LUA_ENABLE=no Disable LUA build"
555 @echo " make ZLIB_SYSTEM=yes Use zlib sources from system"
556 @echo " make PCRE2_SYSTEM=yes Use pcre2 sources from system"
558 @echo "Examples: Client with debugging enabled"
559 @echo " make TARGET=agent DEBUG=1"
564 @echo "General settings:"
565 @echo " TARGET: ${TARGET}"
567 @echo " DEBUG: ${DEBUG}"
568 @echo " DEBUGAD: ${DEBUGAD}"
569 @echo " PREFIX: ${PREFIX}"
570 @echo " MAXAGENTS: ${MAXAGENTS}"
571 @echo " REUSE_ID: ${REUSE_ID}"
572 @echo " DATABASE: ${DATABASE}"
573 @echo " ONEWAY: ${ONEWAY}"
574 @echo " CLEANFULL: ${CLEANFULL}"
575 @echo "User settings:"
576 @echo " OSSEC_GROUP: ${OSSEC_GROUP}"
577 @echo " OSSEC_USER: ${OSSEC_USER}"
578 @echo " OSSEC_USER_MAIL: ${OSSEC_USER_MAIL}"
579 @echo " OSSEC_USER_REM: ${OSSEC_USER_REM}"
580 @echo "ZLIB settings:"
581 @echo " ZLIB_SYSTEM: ${ZLIB_SYSTEM}"
582 @echo " ZLIB_INCLUDE: ${ZLIB_INCLUDE}"
583 @echo " ZLIB_LIB: ${ZLIB_LIB}"
584 @echo "PCRE2 settings:"
585 @echo " PCRE2_SYSTEM: ${PCRE2_SYSTEM}"
586 @echo " PCRE2_INCLUDE: ${PCRE2_INCLUDE}"
587 @echo "Lua settings:"
588 @echo " LUA_PLAT: ${LUA_PLAT}"
589 @echo " LUA_ENABLE: ${LUA_ENABLE}"
590 @echo "USE settings:"
591 @echo " USE_ZEROMQ: ${USE_ZEROMQ}"
592 @echo " USE_GEOIP: ${USE_GEOIP}"
593 @echo " USE_PRELUDE: ${USE_PRELUDE}"
594 @echo " USE_OPENSSL: ${USE_OPENSSL}"
595 @echo " USE_INOTIFY: ${USE_INOTIFY}"
596 @echo " USE_SQLITE: ${USE_SQLITE}"
597 @echo " USE_PCRE2_JIT: ${USE_PCRE2_JIT}"
598 @echo "Mysql settings:"
599 @echo " includes: ${MI}"
601 @echo "Pgsql settings:"
602 @echo " includes: ${PI}"
607 @echo " CFLAGS ${OSSEC_CFLAGS}"
608 @echo " LDFLAGS ${OSSEC_LDFLAGS}"
610 @echo " MAKE ${MAKE}"
613 BUILD_SERVER+=external
614 BUILD_SERVER+=ossec-maild
615 BUILD_SERVER+=ossec-csyslogd
616 BUILD_SERVER+=ossec-agentlessd
617 BUILD_SERVER+=ossec-execd
618 BUILD_SERVER+=ossec-logcollector
619 BUILD_SERVER+=ossec-remoted
620 BUILD_SERVER+=ossec-agentd
621 BUILD_SERVER+=manage_agents
623 BUILD_SERVER+=ossec-syscheckd
624 BUILD_SERVER+=ossec-monitord
625 BUILD_SERVER+=ossec-reportd
626 ifneq (,$(filter ${USE_OPENSSL},auto yes))
627 BUILD_SERVER+=ossec-authd
629 BUILD_SERVER+=ossec-analysisd
630 BUILD_SERVER+=ossec-logtest
631 BUILD_SERVER+=ossec-makelists
632 BUILD_SERVER+=ossec-dbd
634 BUILD_AGENT+=external
635 BUILD_AGENT+=ossec-agentd
636 ifneq (,$(filter ${USE_OPENSSL},auto yes))
637 BUILD_AGENT+=agent-auth
639 BUILD_AGENT+=ossec-logcollector
640 BUILD_AGENT+=ossec-syscheckd
641 BUILD_AGENT+=ossec-execd
642 BUILD_AGENT+=manage_agents
644 .PHONY: server local hybrid agent
645 ifeq (${MAKECMDGOALS},server)
646 $(error Do not use 'server' directly, use 'TARGET=server')
648 server: ${BUILD_SERVER}
650 ifeq (${MAKECMDGOALS},local)
651 $(error Do not use 'local' directly, use 'TARGET=local')
653 local: ${BUILD_SERVER}
655 ifeq (${MAKECMDGOALS},hybrid)
656 $(error Do not use 'hybrid' directly, use 'TARGET=hybrid')
658 hybrid: ${BUILD_SERVER}
660 ifeq (${MAKECMDGOALS},agent)
661 $(error Do not use 'agent' directly, use 'TARGET=agent')
663 agent: ${BUILD_AGENT}
666 WINDOWS_BINS:=win32/ossec-agent.exe win32/ossec-agent-eventchannel.exe win32/ossec-rootcheck.exe win32/manage_agents.exe win32/setup-windows.exe win32/setup-syscheck.exe win32/setup-iis.exe win32/add-localfile.exe win32/os_win32ui.exe win32/agent-auth.exe
668 ifeq (${MAKECMDGOALS},winagent)
669 $(error Do not use 'winagent' directly, use 'TARGET=winagent')
673 ${MAKE} ${WINDOWS_BINS} CFLAGS="-DCLIENT -DWIN32 -I./${EXTERNAL_ZLIB} -I./${EXTERNAL_PCRE2}/install/include" LDFLAGS="-lwsock32 -lwevtapi -lshlwapi -lcomctl32 -lws2_32"
674 #cd ${EXTERNAL_LUA}src/ && ${MAKE} CC=${MING_BASE}${CC} -f Makefile.mingw mingw
675 #cp ${EXTERNAL_LUA}src/ossec-lua.exe win32/
676 #cp ${EXTERNAL_LUA}src/ossec-luac.exe win32/
677 cd win32/ && ./unix2dos.pl ossec.conf > default-ossec.conf
678 cd win32/ && ./unix2dos.pl help.txt > help_win.txt
679 cd win32/ && ./unix2dos.pl ../../etc/internal_options.conf > internal_options.conf
680 cd win32/ && ./unix2dos.pl ../../etc/local_internal_options-win.conf > default-local_internal_options.conf
681 cd win32/ && ./unix2dos.pl ../../LICENSE > LICENSE.txt
682 cd win32/ && ./unix2dos.pl ../../active-response/win/route-null.cmd > route-null.cmd
683 cd win32/ && ./unix2dos.pl ../../active-response/win/restart-ossec.cmd > restart-ossec.cmd
684 cd win32/ && makensis ossec-installer.nsi
692 ifeq (${PCRE2_SYSTEM},no)
693 external: libcJSON.a ${EXTERNAL_ZLIB}libz.a lua libpcre2-8.a
695 external: libcJSON.a ${EXTERNAL_ZLIB}libz.a lua
699 ifeq (${LUA_ENABLE},yes)
700 cd ${EXTERNAL_LUA} && ${MAKE} ${LUA_PLAT}
703 ${EXTERNAL_ZLIB}libz.a:
704 ifeq (${TARGET},winagent)
705 cd ${EXTERNAL_ZLIB} && cp zconf.h.in zconf.h && ${MAKE} -f win32/Makefile.gcc PREFIX=${MING_BASE} libz.a
707 ifeq (${ZLIB_SYSTEM},no)
708 cd ${EXTERNAL_ZLIB} && ./configure && ${MAKE} libz.a
714 ifeq (${ZLIB_SYSTEM},no)
715 ZLIB_LIB=os_zlib.a ${EXTERNAL_ZLIB}libz.a
716 ZLIB_INCLUDE=-I./${EXTERNAL_ZLIB}
723 os_zlib_c := os_zlib/os_zlib.c
724 os_zlib_o := $(os_zlib_c:.c=.o)
726 os_zlib/%.o: os_zlib/%.c
727 ${OSSEC_CC} ${OSSEC_CFLAGS} -c $< -o $@
729 os_zlib.a: ${os_zlib_o}
738 JSON_INCLUDE=-I./${EXTERNAL_JSON}
740 cjson_c := ${EXTERNAL_JSON}cJSON.c
741 cjson_o := $(cjson_c:.c=.o)
743 ${EXTERNAL_JSON}%.o: ${EXTERNAL_JSON}%.c
744 ${OSSEC_CC} ${OSSEC_CFLAGS} -c $^ -o $@
746 libcJSON.a: ${cjson_o}
752 #### pcre2 ##########
754 ifeq (${PCRE2_SYSTEM},no)
755 libpcre2-8.a: ${EXTERNAL_PCRE2}/install/lib/libpcre2-8.a
759 ${EXTERNAL_PCRE2}/install/lib/libpcre2-8.a:
760 ifeq (${TARGET}, winagent)
761 cd ${EXTERNAL_PCRE2} && \
763 --prefix=$(shell pwd)/${EXTERNAL_PCRE2}/install \
764 ${PCRE2_CONFIGURE_JIT} \
767 --host=${MING_BASE:%-=%} && \
768 make install-libLTLIBRARIES install-nodist_includeHEADERS
770 cd ${EXTERNAL_PCRE2} && \
772 --prefix=$(shell pwd)/${EXTERNAL_PCRE2}/install \
773 ${PCRE2_CONFIGURE_JIT} \
776 make install-libLTLIBRARIES install-nodist_includeHEADERS
785 ossec_libs = os_crypto.a config.a shared.a os_net.a os_regex.a os_xml.a
789 os_xml_c := $(wildcard os_xml/*.c)
790 os_xml_o := $(os_xml_c:.c=.o)
792 os_xml/%.o: os_xml/%.c
793 ${OSSEC_CC} ${OSSEC_CFLAGS} -c $^ -o $@
795 os_xml.a: ${os_xml_o}
802 os_regex_c := $(wildcard os_regex/*.c)
803 os_regex_o := $(os_regex_c:.c=.o)
805 os_regex/%.o: os_regex/%.c
806 ${OSSEC_CC} ${OSSEC_CFLAGS} -c $^ -o $@
808 ifeq (${PCRE2_SYSTEM},no)
809 os_regex.a: ${os_regex_o} libpcre2-8.a
810 (mkdir -p libpcre2_objs && cd libpcre2_objs && ${QUIET_LINK}${MING_BASE}ar -x ../libpcre2-8.a)
811 ${OSSEC_LINK} $@ ${os_regex_o} $(addprefix libpcre2_objs/,$(shell ${MING_BASE}ar -t libpcre2-8.a))
815 os_regex.a: ${os_regex_o}
820 #### os_net ##########
822 os_net_c := $(wildcard os_net/*.c)
823 os_net_o := $(os_net_c:.c=.o)
825 os_net/%.o: os_net/%.c
826 ${OSSEC_CC} ${OSSEC_CFLAGS} -c $^ -o $@
828 os_net.a: ${os_net_o}
832 #### Shared ##########
834 shared_c := $(wildcard shared/*.c)
835 shared_o := $(shared_c:.c=.o)
837 shared/%.o: shared/%.c
838 ${OSSEC_CC} ${OSSEC_CFLAGS} -c $^ -o $@
840 shared.a: ${shared_o}
844 #### Config ##########
846 config_c := $(wildcard config/*.c)
847 config_o := $(config_c:.c=.o)
849 config/%.o: config/%.c
850 ${OSSEC_CC} ${OSSEC_CFLAGS} -c $^ -o $@
852 config.a: ${config_o}
856 #### crypto ##########
858 crypto_blowfish_c := os_crypto/blowfish/bf_op.c \
859 os_crypto/blowfish/bf_skey.c \
860 os_crypto/blowfish/bf_enc.c
861 crypto_blowfish_o := $(crypto_blowfish_c:.c=.o)
863 os_crypto/blowfish/%.o: os_crypto/blowfish/%.c
864 ${OSSEC_CC} ${OSSEC_CFLAGS} -Wno-implicit-fallthrough -c $^ -o $@
866 crypto_md5_c := os_crypto/md5/md5.c \
867 os_crypto/md5/md5_op.c
868 crypto_md5_o := $(crypto_md5_c:.c=.o)
870 os_crypto/md5/%.o: os_crypto/md5/%.c
871 ${OSSEC_CC} ${OSSEC_CFLAGS} -c $^ -o $@
873 crypto_sha1_c := os_crypto/sha1/sha1_op.c
874 crypto_sha1_o := $(crypto_sha1_c:.c=.o)
876 os_crypto/sha1/%.o: os_crypto/sha1/%.c
877 ${OSSEC_CC} ${OSSEC_CFLAGS} -Wno-implicit-fallthrough -c $^ -o $@
879 crypto_md5_sha1_c := os_crypto/md5_sha1/md5_sha1_op.c
880 crypto_md5_sha1_o := $(crypto_md5_sha1_c:.c=.o)
882 os_crypto/md5_sha1/%.o: os_crypto/md5_sha1/%.c
883 ${OSSEC_CC} ${OSSEC_CFLAGS} -c $^ -o $@
885 crypto_shared_c := $(wildcard os_crypto/shared/*.c)
886 crypto_shared_o := $(crypto_shared_c:.c=.o)
888 os_crypto/shared/%.o: os_crypto/shared/%.c ${ZLIB_LIB}
889 ${OSSEC_CC} ${OSSEC_CFLAGS} -c $< -o $@
892 crypto_o := ${crypto_blowfish_o} \
898 os_crypto.a: ${crypto_o}
903 #### os_mail #########
905 os_maild_c := $(wildcard os_maild/*.c)
906 os_maild_o := $(os_maild_c:.c=.o)
908 os_maild/%.o: os_maild/%.c
909 ${OSSEC_CC} ${OSSEC_CFLAGS} -DARGV0=\"ossec-maild\" -c $^ -o $@
911 ossec-maild: ${os_maild_o} ${ossec_libs}
912 ${OSSEC_CCBIN} ${OSSEC_CFLAGS} $^ ${OSSEC_LDFLAGS} -o $@
914 #### os_dbd ##########
916 os_dbd_c := $(wildcard os_dbd/*.c)
917 os_dbd_o := $(os_dbd_c:.c=.o)
919 os_dbd/%.o: os_dbd/%.c
920 ${OSSEC_CC} ${OSSEC_CFLAGS} ${MI} ${PI} -DARGV0=\"ossec-dbd\" -c $^ -o $@
922 ossec-dbd: ${os_dbd_o} ${ossec_libs}
923 ${OSSEC_CCBIN} ${OSSEC_CFLAGS} ${MI} ${PI} ${JSON_INCLUDE} $^ -lm ${OSSEC_LDFLAGS} -o $@
926 #### os_csyslogd #####
928 os_csyslogd_c := $(wildcard os_csyslogd/*.c)
929 os_csyslogd_o := $(os_csyslogd_c:.c=.o)
931 os_csyslogd/%.o: os_csyslogd/%.c
932 ${OSSEC_CC} ${OSSEC_CFLAGS} ${JSON_INCLUDE} -DARGV0=\"ossec-csyslogd\" -c $^ -o $@
934 ossec-csyslogd: ${os_csyslogd_o} ${ossec_libs} ${JSON_LIB}
935 ${OSSEC_CCBIN} ${OSSEC_CFLAGS} ${JSON_INCLUDE} $^ -lm ${OSSEC_LDFLAGS} -o $@
940 os_agentlessd_c := $(wildcard agentlessd/*.c)
941 os_agentlessd_o := $(os_agentlessd_c:.c=.o)
943 agentlessd/%.o: agentlessd/%.c
944 ${OSSEC_CC} ${OSSEC_CFLAGS} -DARGV0=\"ossec-agentlessd\" -c $^ -o $@
946 ossec-agentlessd: ${os_agentlessd_o} ${ossec_libs}
947 ${OSSEC_CCBIN} ${OSSEC_CFLAGS} $^ ${OSSEC_LDFLAGS} -o $@
951 os_execd_c := $(wildcard os_execd/*.c)
952 os_execd_o := $(os_execd_c:.c=.o)
954 os_execd/%.o: os_execd/%.c
955 ${OSSEC_CC} ${OSSEC_CFLAGS} -DARGV0=\"ossec-execd\" -c $^ -o $@
957 ossec-execd: ${os_execd_o} ${ossec_libs} ${JSON_LIB}
958 ${OSSEC_CCBIN} ${OSSEC_CFLAGS} ${JSON_INCLUDE} $^ -lm ${OSSEC_LDFLAGS} -o $@
961 #### logcollectord ####
963 os_logcollector_c := $(wildcard logcollector/*.c)
964 os_logcollector_o := $(os_logcollector_c:.c=.o)
965 os_logcollector_eventchannel_o := $(os_logcollector_c:.c=-event.o)
967 logcollector/%.o: logcollector/%.c
968 ${OSSEC_CC} ${OSSEC_CFLAGS} -DARGV0=\"ossec-logcollector\" -c $^ -o $@
970 logcollector/%-event.o: logcollector/%.c
971 ${OSSEC_CC} ${OSSEC_CFLAGS} -DEVENTCHANNEL_SUPPORT -DARGV0=\"ossec-logcollector\" -c $^ -o $@
973 ossec-logcollector: ${os_logcollector_o} ${ossec_libs}
974 ${OSSEC_CCBIN} ${OSSEC_CFLAGS} $^ ${OSSEC_LDFLAGS} -o $@
976 #### remoted #########
978 remoted_c := $(wildcard remoted/*.c)
979 remoted_o := $(remoted_c:.c=.o)
981 remoted/%.o: remoted/%.c
982 ${OSSEC_CC} ${OSSEC_CFLAGS} -I./remoted ${ZLIB_INCLUDE} -DARGV0=\"ossec-remoted\" -c $^ -o $@
984 ossec-remoted: ${remoted_o} ${ossec_libs} ${ZLIB_LIB}
985 ${OSSEC_CCBIN} ${OSSEC_CFLAGS} ${ZLIB_INCLUDE} $^ ${OSSEC_LDFLAGS} -o $@
987 #### ossec-agentd ####
989 client_agent_c := $(wildcard client-agent/*.c)
990 client_agent_o := $(client_agent_c:.c=.o)
992 client-agent/%.o: client-agent/%.c
993 ${OSSEC_CC} ${OSSEC_CFLAGS} -I./client-agent ${ZLIB_INCLUDE} -DARGV0=\"ossec-agentd\" -c $^ -o $@
995 ossec-agentd: ${client_agent_o} ${ossec_libs} ${ZLIB_LIB}
996 ${OSSEC_CCBIN} ${OSSEC_CFLAGS} ${ZLIB_INCLUDE} $^ ${OSSEC_LDFLAGS} -o $@
1000 addagent_c := $(wildcard addagent/*.c)
1001 addagent_o := $(addagent_c:.c=.o)
1003 addagent/%.o: addagent/%.c
1004 ${OSSEC_CC} ${OSSEC_CFLAGS} -I./addagent ${ZLIB_INCLUDE} -DARGV0=\"manage_agents\" -c $^ -o $@
1007 manage_agents: ${addagent_o} ${ossec_libs} ${ZLIB_LIB} ${JSON_LIB}
1008 ${OSSEC_CCBIN} ${OSSEC_CFLAGS} ${ZLIB_INCLUDE} ${JSON_INCLUDE} $^ ${OSSEC_LDFLAGS} -o $@
1010 #### Util ##########
1012 util_programs = syscheck_update clear_stats list_agents agent_control syscheck_control rootcheck_control verify-agent-conf ossec-regex ossec-regex-convert
1015 utils: ${util_programs}
1017 util_c := $(wildcard util/*.c)
1018 util_o := $(util_c:.c=.o)
1021 ${OSSEC_CC} ${OSSEC_CFLAGS} -I./util ${ZLIB_INCLUDE} -DARGV0=\"utils\" -c $^ -o $@
1023 syscheck_update: util/syscheck_update.o addagent/validate.o ${ossec_libs} ${ZLIB_LIB} ${JSON_LIB}
1024 ${OSSEC_CCBIN} ${OSSEC_CFLAGS} ${ZLIB_INCLUDE} ${JSON_INCLUDE} $^ ${OSSEC_LDFLAGS} -o $@
1026 clear_stats: util/clear_stats.o ${ossec_libs} ${ZLIB_LIB}
1027 ${OSSEC_CCBIN} ${OSSEC_CFLAGS} ${ZLIB_INCLUDE} $^ ${OSSEC_LDFLAGS} -o $@
1029 list_agents: util/list_agents.o ${ossec_libs} ${ZLIB_LIB} ${JSON_LIB}
1030 ${OSSEC_CCBIN} ${OSSEC_CFLAGS} ${ZLIB_INCLUDE} $^ ${OSSEC_LDFLAGS} -o $@
1032 verify-agent-conf: util/verify-agent-conf.o ${ossec_libs} ${ZLIB_LIB}
1033 ${OSSEC_CCBIN} ${OSSEC_CFLAGS} ${ZLIB_INCLUDE} $^ ${OSSEC_LDFLAGS} -o $@
1035 agent_control: util/agent_control.o addagent/validate.o ${ossec_libs} ${ZLIB_LIB} ${JSON_LIB}
1036 ${OSSEC_CCBIN} ${OSSEC_CFLAGS} ${ZLIB_INCLUDE} ${JSON_INCLUDE} $^ -lm ${OSSEC_LDFLAGS} -o $@
1038 syscheck_control: util/syscheck_control.o addagent/validate.o ${ossec_libs} ${ZLIB_LIB} ${JSON_LIB}
1039 ${OSSEC_CCBIN} ${OSSEC_CFLAGS} ${ZLIB_INCLUDE} ${JSON_INCLUDE} $^ ${OSSEC_LDFLAGS} -o $@
1041 rootcheck_control: util/rootcheck_control.o addagent/validate.o ${ossec_libs} ${ZLIB_LIB} ${JSON_LIB}
1042 ${OSSEC_CCBIN} ${OSSEC_CFLAGS} ${ZLIB_INCLUDE} ${JSON_INCLUDE} $^ ${OSSEC_LDFLAGS} -o $@
1044 ossec-regex: util/ossec-regex.o ${ossec_libs} ${ZLIB_LIB}
1045 ${OSSEC_CCBIN} ${OSSEC_CFLAGS} ${ZLIB_INCLUDE} $^ ${OSSEC_LDFLAGS} -o $@
1047 ossec-regex-convert: util/ossec-regex-convert.o ${ossec_libs} ${ZLIB_LIB}
1048 ${OSSEC_CCBIN} ${OSSEC_CFLAGS} $^ ${OSSEC_LDFLAGS} -o $@
1050 #### rootcheck #####
1052 rootcheck_c := $(wildcard rootcheck/*.c)
1053 rootcheck_o := $(rootcheck_c:.c=.o)
1054 rootcheck_rk_o := $(rootcheck_c:.c=_rk.o)
1055 rootcheck_o_lib := $(filter-out rootcheck/rootcheck-config.o, ${rootcheck_o})
1056 rootcheck_o_cmd := $(filter-out rootcheck/config.o, ${rootcheck_o})
1059 rootcheck/%.o: rootcheck/%.c
1060 ${OSSEC_CC} ${OSSEC_CFLAGS} -DARGV0=\"rootcheck\" -c $^ -o $@
1062 rootcheck/%_rk.o: rootcheck/%.c
1063 ${OSSEC_CC} ${OSSEC_CFLAGS} -DARGV0=\"rootcheck\" -UOSSECHIDS -c $^ -o $@
1066 rootcheck.a: ${rootcheck_o_lib}
1070 #ossec-rootcheck: rootcheck/rootcheck-config.o rootcheck.a ${ossec_libs}
1071 # @echo ${rootcheck_o_cmd}
1072 # @echo ${rootcheck_o_lib}
1073 # @echo ${rootcheck_o}
1074 # ${OSSEC_CC} ${OSSEC_CFLAGS} ${ZLIB_INCLUDE} rootcheck/rootcheck-config.o rootcheck.a rootcheck/rootcheck.c ${ZLIB_LIB} ${ossec_libs} -o $@
1076 #### syscheck ######
1079 syscheck_c := $(wildcard syscheckd/*.c)
1080 syscheck_o := $(syscheck_c:.c=.o)
1082 syscheckd/%.o: syscheckd/%.c
1083 ${OSSEC_CC} ${OSSEC_CFLAGS} -DARGV0=\"ossec-syscheckd\" -c $^ -o $@
1085 ossec-syscheckd: ${syscheck_o} rootcheck.a ${ossec_libs} ${ZLIB_LIB}
1086 ${OSSEC_CCBIN} ${OSSEC_CFLAGS} ${ZLIB_INCLUDE} $^ ${OSSEC_LDFLAGS} -o $@
1088 #### Monitor #######
1090 monitor_c := $(wildcard monitord/*.c)
1091 monitor_o := $(monitor_c:.c=.o)
1093 monitord/%.o: monitord/%.c ${ZLIB_LIB}
1094 ${OSSEC_CC} ${OSSEC_CFLAGS} -DARGV0=\"ossec-monitord\" -c $< -o $@
1096 ossec-monitord: ${monitor_o} ${ossec_libs} ${ZLIB_LIB} ${JSON_LIB}
1097 ${OSSEC_CCBIN} ${OSSEC_CFLAGS} ${ZLIB_INCLUDE} $^ ${OSSEC_LDFLAGS} -o $@
1100 #### reportd #######
1102 report_c := reportd/report.c
1103 report_o := $(report_c:.c=.o)
1105 reportd/%.o: reportd/%.c
1106 ${OSSEC_CC} ${OSSEC_CFLAGS} -DARGV0=\"ossec-reportd\" -c $^ -o $@
1108 ossec-reportd: ${report_o} ${ossec_libs}
1109 ${OSSEC_CCBIN} ${OSSEC_CFLAGS} $^ ${OSSEC_LDFLAGS} -o $@
1112 #### os_auth #######
1114 os_auth_c := ${wildcard os_auth/*.c}
1115 os_auth_o := $(os_auth_c:.c=.o)
1117 os_auth/%.o: os_auth/%.c
1118 ${OSSEC_CC} ${OSSEC_CFLAGS} -I./os_auth -DARGV0=\"ossec-authd\" -c $^ -o $@
1120 agent-auth: addagent/validate.o os_auth/main-client.o os_auth/ssl.o os_auth/check_cert.o ${ossec_libs} ${ZLIB_LIB} ${JSON_LIB}
1121 ${OSSEC_CCBIN} ${OSSEC_CFLAGS} ${JSON_INCLUDE} -I./os_auth $^ ${OSSEC_LDFLAGS} -o $@
1123 ossec-authd: addagent/validate.o os_auth/main-server.o os_auth/ssl.o os_auth/check_cert.o ${ossec_libs} ${ZLIB_LIB} ${JSON_LIB}
1124 ${OSSEC_CCBIN} ${OSSEC_CFLAGS} ${JSON_INCLUDE} -I./os_auth $^ ${OSSEC_LDFLAGS} -o $@
1126 #### analysisd #####
1128 cdb_c := ${wildcard analysisd/cdb/*.c}
1129 cdb_o := $(cdb_c:.c=.o)
1130 all_analysisd_o += ${cdb_o}
1131 all_analysisd_libs += cdb.a
1133 analysisd/cdb/%.o: analysisd/cdb/%.c
1134 ${OSSEC_CC} ${OSSEC_CFLAGS} -DARGV0=\"ossec-analysisd\" -I./analysisd -I./analysisd/cdb -c $^ -o $@
1141 alerts_c := ${wildcard analysisd/alerts/*.c}
1142 alerts_o := $(alerts_c:.c=.o)
1143 all_analysisd_o += ${alerts_o}
1144 all_analysisd_libs += alerts.a
1146 analysisd/alerts/%.o: analysisd/alerts/%.c
1147 ${OSSEC_CC} ${OSSEC_CFLAGS} -DARGV0=\"ossec-analysisd\" -I./analysisd -I./analysisd/alerts -c $^ -o $@
1149 alerts.a: ${alerts_o}
1152 decoders_c := ${wildcard analysisd/decoders/*.c} ${wildcard analysisd/decoders/plugins/*.c} ${wildcard analysisd/compiled_rules/*.c}
1153 decoders_o := $(decoders_c:.c=.o)
1155 decoders_test_o := $(decoders_c:.c=-test.o)
1156 decoders_live_o := $(decoders_c:.c=-live.o)
1158 all_analysisd_o += ${decoders_o} ${decoders_test_o} ${decoders_live_o}
1159 all_analysisd_libs += decoders.a decoders-test.a decoders-live.a
1162 analysisd/decoders/%-test.o: analysisd/decoders/%.c
1163 ${OSSEC_CC} ${OSSEC_CFLAGS} -DTESTRULE -DARGV0=\"ossec-analysisd\" -I./analysisd -I./analysisd/decoders -c $^ -o $@
1166 analysisd/decoders/%-live.o: analysisd/decoders/%.c
1167 ${OSSEC_CC} ${OSSEC_CFLAGS} -DARGV0=\"ossec-analysisd\" -I./analysisd -I./analysisd/decoders -c $^ -o $@
1169 analysisd/decoders/plugins/%-test.o: analysisd/decoders/plugins/%.c
1170 ${OSSEC_CC} ${OSSEC_CFLAGS} -DTESTRULE -DARGV0=\"ossec-analysisd\" -I./analysisd -I./analysisd/decoders -c $^ -o $@
1173 analysisd/decoders/plugins/%-live.o: analysisd/decoders/plugins/%.c
1174 ${OSSEC_CC} ${OSSEC_CFLAGS} -DARGV0=\"ossec-analysisd\" -I./analysisd -I./analysisd/decoders -c $^ -o $@
1176 analysisd/compiled_rules/compiled_rules.h: analysisd/compiled_rules/.function_list analysisd/compiled_rules/register_rule.sh
1177 ./analysisd/compiled_rules/register_rule.sh build
1179 analysisd/compiled_rules/%-test.o: analysisd/compiled_rules/%.c
1180 ${OSSEC_CC} ${OSSEC_CFLAGS} -DTESTRULE -DARGV0=\"ossec-analysisd\" -I./analysisd -I./analysisd/decoders -c $^ -o $@
1182 analysisd/compiled_rules/%-live.o: analysisd/compiled_rules/%.c
1183 ${OSSEC_CC} ${OSSEC_CFLAGS} -DARGV0=\"ossec-analysisd\" -I./analysisd -I./analysisd/decoders -c $^ -o $@
1185 decoders-live.a: ${decoders_live_o}
1188 decoders-test.a: ${decoders_test_o}
1191 format_c := ${wildcard analysisd/format/*.c}
1192 format_o := ${format_c:.c=.o}
1193 all_analysisd_o += ${format_o}
1195 analysisd/format/%.o: analysisd/format/%.c
1196 ${OSSEC_CC} ${OSSEC_CFLAGS} ${JSON_INCLUDE} -DARGV0=\"ossec-analysisd\" -I./analysisd -I./analysisd/decoders -c $^ -o $@
1198 output_c := ${wildcard analysisd/output/*c}
1199 output_o := ${output_c:.c=.o}
1200 all_analysisd_o += ${output_o}
1202 analysisd/output/%.o: analysisd/output/%.c
1203 ${OSSEC_CC} ${OSSEC_CFLAGS} -DARGV0=\"ossec-analysisd\" -I./analysisd -I./analysisd/decoders -c $^ -o $@
1207 analysisd_c := ${filter-out analysisd/analysisd.c, ${filter-out analysisd/testrule.c, ${filter-out analysisd/makelists.c, ${wildcard analysisd/*.c}}}}
1208 analysisd_o := ${analysisd_c:.c=.o}
1209 all_analysisd_o += ${analysisd_o}
1211 analysisd_test_o := $(analysisd_o:.o=-test.o)
1212 analysisd_live_o := $(analysisd_o:.o=-live.o)
1213 all_analysisd_o += ${analysisd_test_o} ${analysisd_live_o} analysisd/testrule-test.o analysisd/analysisd-live.o analysisd/analysisd-test.o analysisd/makelists-live.o
1215 analysisd/%-live.o: analysisd/%.c analysisd/compiled_rules/compiled_rules.h
1216 ${OSSEC_CC} ${OSSEC_CFLAGS} -DARGV0=\"ossec-analysisd\" -I./analysisd -c $< -o $@
1218 analysisd/%-test.o: analysisd/%.c analysisd/compiled_rules/compiled_rules.h
1219 ${OSSEC_CC} ${OSSEC_CFLAGS} -DTESTRULE -DARGV0=\"ossec-analysisd\" -I./analysisd -c $< -o $@
1222 ossec-logtest: ${analysisd_test_o} ${output_o} ${format_o} analysisd/testrule-test.o analysisd/analysisd-test.o alerts.a cdb.a decoders-test.a ${ossec_libs} ${ZLIB_LIB} ${JSON_LIB}
1223 ${OSSEC_CCBIN} ${OSSEC_CFLAGS} -DTESTRULE $^ ${OSSEC_LDFLAGS} ${ANALYSISD_FLAGS} -o $@
1225 ossec-analysisd: ${analysisd_live_o} analysisd/analysisd-live.o ${output_o} ${format_o} alerts.a cdb.a decoders-live.a ${ossec_libs} ${ZLIB_LIB} ${JSON_LIB}
1226 ${OSSEC_CCBIN} ${OSSEC_CFLAGS} $^ ${OSSEC_LDFLAGS} ${ANALYSISD_FLAGS} -o $@
1228 ossec-makelists: analysisd/makelists-live.o ${analysisd_live_o} ${format_o} alerts.a cdb.a decoders-live.a ${ossec_libs} ${ZLIB_LIB} ${JSON_LIB}
1229 ${OSSEC_CCBIN} ${OSSEC_CFLAGS} $^ ${OSSEC_LDFLAGS} -o $@
1232 ####################
1233 #### test ##########
1234 ####################
1236 CFLAGS_TEST = -g -O0 --coverage
1238 LDFLAGS_TEST = -lcheck -lm -pthread -lrt
1241 OSSEC_CFLAGS+=${CFLAGS_TEST}
1242 OSSEC_LDFLAGS+=${LDFLAGS_TEST}
1245 test_programs = test_os_zlib test_os_xml test_os_regex test_os_crypto test_shared
1247 .PHONY: test run_tests build_tests test_valgrind test_coverage
1253 @$(foreach bin,${test_programs},./${bin} || exit 1;)
1255 build_tests: external
1256 ${MAKE} DEBUG=1 TEST=1 ${test_programs}
1258 test_c := $(wildcard tests/*.c)
1259 test_o := $(test_c:.c=.o)
1261 tests/%.o: tests/%.c
1262 ${OSSEC_CC} ${OSSEC_CFLAGS} -c $^ -o $@
1264 test_os_zlib: tests/test_os_zlib.o ${ZLIB_LIB}
1265 ${OSSEC_CCBIN} ${OSSEC_CFLAGS} $^ ${OSSEC_LDFLAGS} -o $@
1267 test_os_xml: tests/test_os_xml.o os_xml.a
1268 ${OSSEC_CCBIN} ${OSSEC_CFLAGS} $^ ${OSSEC_LDFLAGS} -o $@
1270 test_os_regex: tests/test_os_regex.c os_regex.a
1271 ${OSSEC_CCBIN} ${OSSEC_CFLAGS} $^ ${OSSEC_LDFLAGS} -o $@
1273 test_os_crypto: tests/test_os_crypto.c os_crypto.a shared.a os_xml.a os_net.a os_regex.a ${ZLIB_LIB} ${JSON_LIB}
1274 ${OSSEC_CCBIN} ${OSSEC_CFLAGS} $^ ${OSSEC_LDFLAGS} -o $@
1276 #test_os_net: tests/test_os_net.c os_net.a shared.a os_regex.a os_xml.a
1277 # ${OSSEC_CCBIN} ${OSSEC_CFLAGS} $^ ${OSSEC_LDFLAGS} -o $@
1279 test_shared: tests/test_shared.c shared.a os_xml.a os_net.a os_regex.a ${JSON_LIB}
1280 ${OSSEC_CCBIN} ${OSSEC_CFLAGS} $^ ${OSSEC_LDFLAGS} -o $@
1282 test_valgrind: build_tests
1283 valgrind --leak-check=full --track-origins=yes --trace-children=yes --vgdb=no --error-exitcode=1 --gen-suppressions=all --suppressions=tests/valgrind.supp ${MAKE} run_tests
1286 test_coverage: build_tests
1287 lcov --base-directory . --directory . --zerocounters --rc lcov_branch_coverage=1 --quiet
1288 @echo "Running tests\n"
1292 @echo "\nTests finished."
1294 lcov --base-directory . --directory . --capture --quiet --rc lcov_branch_coverage=1 --output-file ossec.test
1296 rm -rf coverage-report/
1297 genhtml --branch-coverage --output-directory coverage-report/ --title "ossec test coverage" --show-details --legend --num-spaces 4 --quiet ossec.test
1299 ####################
1300 #### RUule Tests ###
1301 ####################
1304 ( cd ../contrib/ossec-testing && sudo python runtests.py)
1307 ####################
1308 #### windows #######
1309 ####################
1311 win32/icon.o: win32/icofile.rc
1312 ${OSSEC_WINDRES} -i $< -o $@
1314 win32_c := $(wildcard win32/*.c)
1315 win32_o := $(win32_c:.c=.o)
1317 win32/%.o: win32/%.c
1318 ${OSSEC_CC} ${OSSEC_CFLAGS} -DARGV0=\"ossec-agent\" -c $^ -o $@
1320 win32/%_rk.o: win32/%.c
1321 ${OSSEC_CC} ${OSSEC_CFLAGS} -UOSSECHIDS -DARGV0=\"ossec-agent\" -c $^ -o $@
1323 win32_ui_c := $(wildcard win32/ui/*.c)
1324 win32_ui_o := $(win32_ui_c:.c=.o)
1326 win32/ui/%.o: win32/ui/%.c
1327 ${OSSEC_CC} ${OSSEC_CFLAGS} -UOSSECHIDS -DARGV0=\"ossec-win32ui\" -c $^ -o $@
1329 win32/ossec-agent.exe: win32/icon.o win32/win_agent.o win32/win_service.o $(filter-out syscheckd/seechanges.o, ${syscheck_o}) ${rootcheck_o} $(filter-out client-agent/main.o, $(filter-out client-agent/agentd.o, $(filter-out client-agent/event-forward.o, ${client_agent_o}))) $(filter-out logcollector/main.o, ${os_logcollector_o}) ${os_execd_o} ${ossec_libs} ${ZLIB_LIB}
1330 ${OSSEC_CCBIN} -DARGV0=\"ossec-agent\" -DOSSECHIDS ${OSSEC_CFLAGS} $^ ${OSSEC_LDFLAGS} -o $@
1332 win32/ossec-agent-eventchannel.exe: win32/icon.o win32/win_agent.o win32/win_service.o $(filter-out syscheckd/seechanges.o, ${syscheck_o}) ${rootcheck_o} $(filter-out client-agent/main.o, $(filter-out client-agent/agentd.o, $(filter-out client-agent/event-forward.o, ${client_agent_o}))) $(filter-out logcollector/main-event.o, ${os_logcollector_eventchannel_o}) ${os_execd_o} ${ossec_libs} ${ZLIB_LIB}
1333 ${OSSEC_CCBIN} -DARGV0=\"ossec-agent\" -DOSSECHIDS -DEVENTCHANNEL_SUPPORT ${OSSEC_CFLAGS} $^ ${OSSEC_LDFLAGS} -o $@
1335 win32/ossec-rootcheck.exe: win32/icon.o win32/win_service_rk.o ${rootcheck_rk_o} ${ossec_libs}
1336 ${OSSEC_CCBIN} -DARGV0=\"ossec-rootcheck\" ${OSSEC_CFLAGS} $^ ${OSSEC_LDFLAGS} -o $@
1338 win32/manage_agents.exe: win32/win_service_rk.o ${addagent_o} ${ossec_libs} ${ZLIB_LIB} ${JSON_LIB}
1339 ${OSSEC_CCBIN} -DARGV0=\"manage-agents\" -DMA ${OSSEC_CFLAGS} $^ ${OSSEC_LDFLAGS} -o $@
1341 win32/setup-windows.exe: win32/win_service_rk.o win32/setup-win.o win32/setup-shared.o ${ossec_libs}
1342 ${OSSEC_CCBIN} -DARGV0=\"setup-windows\" ${OSSEC_CFLAGS} $^ ${OSSEC_LDFLAGS} -o $@
1344 win32/setup-syscheck.exe: win32/setup-syscheck.o win32/setup-shared.o ${ossec_libs}
1345 ${OSSEC_CCBIN} -DARGV0=\"setup-syscheck\" ${OSSEC_CFLAGS} $^ ${OSSEC_LDFLAGS} -o $@
1347 win32/setup-iis.exe: win32/setup-iis.o ${ossec_libs}
1348 ${OSSEC_CCBIN} -DARGV0=\"setup-iis\" ${OSSEC_CFLAGS} $^ ${OSSEC_LDFLAGS} -o $@
1350 win32/add-localfile.exe: win32/add-localfile.o ${ossec_libs}
1351 ${OSSEC_CCBIN} -DARGV0=\"add-localfile\" ${OSSEC_CFLAGS} $^ ${OSSEC_LDFLAGS} -o $@
1353 win32/resource.o: win32/ui/win32ui.rc
1354 ${OSSEC_WINDRES} -i $< -o $@
1356 win32/os_win32ui.exe: win32/resource.o win32/win_service_rk.o ${win32_ui_o} addagent/b64.o ${ossec_libs}
1357 ${OSSEC_CCBIN} -DARGV0=\"ossec-win32ui\" ${OSSEC_CFLAGS} $^ ${OSSEC_LDFLAGS} -mwindows -o $@
1359 win32/agent-auth.exe: win32/win_service_rk.o addagent/validate.c win32/agent_auth.c ${ossec_libs} ${ZLIB_LIB} ${JSON_LIB}
1360 ${OSSEC_CCBIN} -DARGV0=\"agent-auth\" -DOSSECHIDS ${OSSEC_CFLAGS} $^ ${OSSEC_LDFLAGS} -lshlwapi -lwsock32 -lsecur32 -flto -o $@
1365 ####################
1366 #### Clean #########
1367 ####################
1369 clean: clean-test clean-internals clean-external clean-windows
1372 rm -f ${test_o} ${test_programs} ossec.test
1373 rm -Rf coverage-report/
1374 find . -name "*.gcno" -exec rm {} \;
1375 find . -name "*.gcda" -exec rm {} \;
1378 rm -f ${cjson_o} libcJSON.a libpcre2-8.a
1379 cd ${EXTERNAL_ZLIB} && ${MAKE} -f Makefile.in distclean
1380 cd ${EXTERNAL_LUA} && ${MAKE} clean
1381 #cd ${EXTERNAL_PCRE2} && ${MAKE} distclean
1385 rm -f ${os_zlib_o} os_zlib.a
1386 rm -f ${os_xml_o} os_xml.a
1387 rm -f ${os_regex_o} os_regex.a
1388 rm -f ${os_net_o} os_net.a
1389 rm -f ${shared_o} shared.a
1390 rm -f ${config_o} config.a
1391 rm -f ${os_maild_o} ossec-maild
1392 rm -f ${crypto_o} os_crypto.a
1393 rm -f ${os_csyslogd_o} ossec-csyslogd
1394 rm -f ${os_dbd_o} ossec-dbd
1395 rm -f ${os_agentlessd_o} ossec-agentlessd
1396 rm -f ${os_execd_o} ossec-execd
1397 rm -f ${os_logcollector_o} ${os_logcollector_eventchannel_o} ossec-logcollector
1398 rm -f ${remoted_o} ossec-remoted
1399 rm -f ${report_o} ossec-reportd
1400 rm -f ${client_agent_o} ossec-agentd
1401 rm -f ${addagent_o} manage_agents
1402 rm -f ${util_o} ${util_programs}
1403 rm -f ${rootcheck_o} ${rootcheck_rk_o} rootcheck.a
1404 rm -f ${syscheck_o} ossec-syscheckd
1405 rm -f ${monitor_o} ossec-monitord
1406 rm -f ${os_auth_o} ossec-authd agent-auth
1407 rm -f ${all_analysisd_o} ${all_analysisd_libs} analysisd/compiled_rules/compiled_rules.h
1408 rm -f ossec-logtest ossec-analysisd ossec-makelists
1411 rm -f win32/LICENSE.txt
1412 rm -f win32/help_win.txt
1413 rm -f win32/internal_options.conf
1414 rm -f win32/default-local_internal_options.conf
1415 rm -f win32/default-ossec.conf
1416 rm -f win32/restart-ossec.cmd
1417 rm -f win32/route-null.cmd
1418 rm -f ${win32_o} ${win32_ui_o} win32/win_service_rk.o
1419 rm -f win32/icon.o win32/resource.o
1420 rm -f ${WINDOWS_BINS}
1421 #rm -f ${EXTERNAL_LUA}src/lua52.dll
1422 #rm -f ${EXTERNAL_LUA}src/ossec-lua.exe
1423 #rm -f ${EXTERNAL_LUA}src/ossec-luac.exe
1424 #rm -f win32/ossec-lua.exe
1425 #rm -f win32/ossec-luac.exe
1426 rm -f win32/ossec-win32-agent.exe