# Use the following DFLAGS for non-SMP systems and run StJude in ACTIVE mode.
#DFLAGS	= 
#
# Use the following DFLAGS for non-SMP systems and run StJude in LEARNING mode.
DFLAGS 	= -DLEARNING
#
# Use the following DFLAGS for SMP systems and run StJude in ACTIVE mode.
#DFLAGS	= -D__SMP__
#
# Use the following DFLAGS for SMP systems and run StJude in LEARNING mode.
#DFLAGS 	= -DLEARNING -D__SMP__
#

MINESUP   = 6 
MINESDOWN = 7
#
# Minefield...
#
MFLAGS = -DSJ_MINES_FORWARD=$(MINESUP) -DSJ_MINES_BACK=$(MINESDOWN)

# Responses -- ie what do we do when an event/intrusion occurs.
# Do not append .c or .o on to the filename, we play some makefile
# games -- we just need the base of the name... We also assume you
# have the .c file, not a precompiled .o
#
# Note, Response does not occur if compiled with -DLEARNING.
#
# Response Module, Default (Just kills the offending process)
#
#RESPONSE = StJude_response_default
#
# Response Module, Redirect. See comments in the StJude_response_redirect.c
# file.
#
RESPONSE = StJude_response_redirect
#
# CFLAGS
#
CFLAGS = -O3  
#
# Edit the below line to point to your Linux kenrel Include directory
# If you store it somewhere other then /usr/src/linux.
#
IFLAGS = -I/usr/src/linux/include
#
# The below CFLAGS is what I have found provides the best performance
# on a Pentium II/III Processor. If you feel brave, and want to try
# them out, replace the above CFLAGS line with this one.
#
#CFLAGS = -O3 -fomit-frame-pointer -mpentiumpro -march=pentiumpro -malign-functions=4 -funroll-loops -fexpensive-optimizations -malign-double -fschedule-insns2 -mwide-multiply
#
# Compiler
# In Redhat 7.0 and systems using versions of GCC greater then 2.95, the
# Kernel will not compile... Those systems have a kgcc installed for compiling
# the kernel, which is an older version of the gcc package. On these systems
# it is necessary to use kgcc to compile Stjude also. Compiling StJude
# with newer versions of GCC may result in faild insmods (undefined symbols)
# or in seemingly random kernel oopses (whatever the plural of oops is).
#
CC	= kgcc
#
# If the above note does not apply to you, or your system is using an older
# GCC, uncoment the following line and comment out the preceeding definition
# of "CC".
#
#CC      = gcc
#
#
# The Objects...
#
OBJS	= StJude_lkm.o\
StJude_mm_util.o\
StJude_priv_util.o\
StJude_string_util.o\
StJude_argv_memory_util.o\
StJude_syscall_delete_module_wrapper.o\
StJude_landmine.o\
StJude_suid_hack.o\
StJude_syscall_clone_wrapper.o\
StJude_syscall_create_module_wrapper.o\
StJude_syscall_execve_wrapper.o\
StJude_syscall_exit_wrapper.o\
StJude_syscall_fork_wrapper.o\
StJude_syscall_setreuid_wrapper.o\
StJude_syscall_setuid_wrapper.o\
StJude_syscall_vfork_wrapper.o\
$(RESPONSE).o


all:  StJude.o


StJude.o:  $(OBJS)
	ld -o StJude.o -r $(OBJS)
	#
	#
	#
	# To activate Saint Jude, Load the module "StJude.o" via /sbin/insmod.
	#
	#
	#

StJude_lkm.o:  StJude_lkm.h StJude_Rulebase.h
	$(CC) $(CFLAGS) $(IFLAGS) $(DFLAGS) $(MFLAGS) -o StJude_lkm.o -c StJude_lkm.c
StJude_mm_util.o:  StJude_lkm.h 
	$(CC) $(CFLAGS) $(IFLAGS) $(DFLAGS) -o StJude_mm_util.o -c StJude_mm_util.c
StJude_priv_util.o:  StJude_lkm.h StJude_Rulebase.h
	$(CC) $(CFLAGS) $(IFLAGS) $(DFLAGS) -o StJude_priv_util.o -c StJude_priv_util.c
StJude_argv_memory_util.o:  StJude_lkm.h 
	$(CC) $(CFLAGS) $(IFLAGS) $(DFLAGS) -o StJude_argv_memory_util.o -c StJude_argv_memory_util.c
StJude_string_util.o:  StJude_lkm.h 
	$(CC) $(CFLAGS) $(IFLAGS) $(DFLAGS) -o StJude_string_util.o -c StJude_string_util.c
StJude_landmine.o:  StJude_lkm.h
	$(CC) $(CFLAGS) $(IFLAGS) $(DFLAGS) -o StJude_landmine.o -c StJude_landmine.c
StJude_suid_hack.o:  StJude_lkm.h StJude_Rulebase.h
	$(CC) $(CFLAGS) $(IFLAGS) $(DFLAGS) -o StJude_suid_hack.o -c StJude_suid_hack.c
StJude_syscall_clone_wrapper.o:  StJude_lkm.h StJude_Rulebase.h
	$(CC) $(CFLAGS) $(IFLAGS) $(DFLAGS) -o StJude_syscall_clone_wrapper.o -c StJude_syscall_clone_wrapper.c
StJude_syscall_create_module_wrapper.o:  StJude_lkm.h StJude_Rulebase.h
	$(CC) $(CFLAGS) $(IFLAGS) $(DFLAGS) -o StJude_syscall_create_module_wrapper.o -c StJude_syscall_create_module_wrapper.c
StJude_syscall_delete_module_wrapper.o:  StJude_lkm.h StJude_Rulebase.h
	$(CC) $(CFLAGS) $(IFLAGS) $(DFLAGS) -o StJude_syscall_delete_module_wrapper.o -c StJude_syscall_delete_module_wrapper.c
StJude_syscall_execve_wrapper.o:  StJude_lkm.h StJude_Rulebase.h
	$(CC) $(CFLAGS) $(IFLAGS) $(DFLAGS) -o StJude_syscall_execve_wrapper.o -c StJude_syscall_execve_wrapper.c
StJude_syscall_exit_wrapper.o:  StJude_lkm.h StJude_Rulebase.h
	$(CC) $(CFLAGS) $(IFLAGS) $(DFLAGS) -o StJude_syscall_exit_wrapper.o -c StJude_syscall_exit_wrapper.c
StJude_syscall_fork_wrapper.o:  StJude_lkm.h StJude_Rulebase.h
	$(CC) $(CFLAGS) $(IFLAGS) $(DFLAGS) -o StJude_syscall_fork_wrapper.o -c StJude_syscall_fork_wrapper.c
StJude_syscall_setreuid_wrapper.o:  StJude_lkm.h StJude_Rulebase.h
	$(CC) $(CFLAGS) $(IFLAGS) $(DFLAGS) -o StJude_syscall_setreuid_wrapper.o -c StJude_syscall_setreuid_wrapper.c
StJude_syscall_setuid_wrapper.o:  StJude_lkm.h StJude_Rulebase.h
	$(CC) $(CFLAGS) $(IFLAGS) $(DFLAGS) -o StJude_syscall_setuid_wrapper.o -c StJude_syscall_setuid_wrapper.c
StJude_syscall_vfork_wrapper.o:  StJude_lkm.h StJude_Rulebase.h
	$(CC) $(CFLAGS) $(IFLAGS) $(DFLAGS) -o StJude_syscall_vfork_wrapper.o -c StJude_syscall_vfork_wrapper.c

$(RESPONSE).o:  StJude_lkm.h  StJude_Rulebase.h
	$(CC) $(CFLAGS) $(IFLAGS) $(DFLAGS) -o $(RESPONSE).o -c $(RESPONSE).c

clean: 
	rm -f $(OBJS) StJude.o
