Changeset 415


Ignore:
Timestamp:
Nov 1, 2012, 7:45:54 AM (8 years ago)
Author:
katerina
Message:

Fixes for tickets #314, #315, #316, #317, #318, #319, #320, and #321.

Location:
trunk
Files:
19 edited

Legend:

Unmodified
Added
Removed
  • trunk/Makefile.in

    r414 r415  
    960960rpmspec-light: samhain.spec
    961961        @echo "Stripping docs from samhain.spec"; \
    962         cat samhain.spec | sed 's,make DESTDIR=$${RPM_BUILD_ROOT} install,make   DESTDIR=$${RPM_BUILD_ROOT} install-light,' | sed s,shkeep=yes,shkeep=no, | sed s,%doc.*,, | sed s,%attr.*,, > samhain.spec-light; \
     962        cat samhain.spec | sed 's,make DESTDIR=$${RPM_BUILD_ROOT} install,make   DESTDIR=$${RPM_BUILD_ROOT} install-light,' | sed s,shkeep=yes,shkeep=no, | sed s,%doc.*,, | sed '/logrotate/! { s,%attr.*,, }' > samhain.spec-light; \
    963963        mv samhain.spec-light samhain.spec
    964964
  • trunk/aclocal.m4

    r412 r415  
    13791379  #
    13801380  if test "x$GCC" = xyes; then
    1381     SAMHAIN_X86_64
     1381     case "$host_os" in
     1382        *linux*)
     1383        SAMHAIN_X86_64
     1384        ;;
     1385        *bsd*)
     1386        SAMHAIN_X86_64
     1387        ;;
     1388        *)
     1389        SAMHAIN_X86_64
     1390        ;;
     1391      esac     
    13821392  fi
    13831393fi
  • trunk/configure.ac

    r412 r415  
    1212dnl start
    1313dnl
    14 AM_INIT_AUTOMAKE(samhain, 3.0.6)
     14AM_INIT_AUTOMAKE(samhain, 3.0.8)
    1515AC_DEFINE([SAMHAIN], 1, [Application is samhain])
    1616AC_CANONICAL_HOST
     
    14251425
    14261426        elif test "x${withval}" = "xoracle"; then
    1427           AC_MSG_CHECKING(for oracle in /usr /usr/local ORACLE_HOME)
     1427
     1428          AC_MSG_CHECKING(for oracle in ORACLE_HOME /usr/local /usr)
     1429
    14281430          oracle_directory="/usr /usr/local ${ORACLE_HOME}"
    14291431          for i in $oracle_directory; do
    1430             if test -r $i/rdbms/demo/oci.h; then
    1431             ORACLE_DIR=$i
    1432           fi 
    1433           done
     1432
     1433              ff=`find $i -name oci.h 2>/dev/null | tail -1`
     1434              if test "x$ff" = "x"; then
     1435                 :
     1436              else
     1437                 ORACLE_INC=`dirname $ff`
     1438              fi
     1439
     1440              fg=`find $i -name libclntsh.so 2>/dev/null | tail -1`
     1441              if test "x$fg" = "x"; then
     1442                 :
     1443              else
     1444                 ORACLE_LIB=`dirname $fg`
     1445              fi
     1446
     1447           done
    14341448         
    1435           if test -z "$ORACLE_DIR"; then
     1449          if test -z "$ORACLE_INC"; then
     1450
    14361451              tmp=""
    14371452              for i in $oracle_directory; do
    1438                 tmp="$tmp $i/rdbms/demo"
     1453                tmp="$tmp $i"
    14391454              done
    1440               FAIL_MESSAGE("OCI header file (oci.h)", $tmp)
    1441           else
    1442             for i in rdbms/demo rdbms/public network/public; do
    1443               ORACLE_CPP_FLAGS="$ORACLE_CPP_FLAGS -I$ORACLE_DIR/$i"
    1444             done
    1445             ORACLE_LIB_DIR="$ORACLE_DIR/lib"
    1446             AC_MSG_RESULT(yes)
     1455              FAIL_MESSAGE("OCI header file (oci.h) please define ORACLE_INC directory where oci.h resides", $tmp)
     1456
     1457          elif test -z "$ORACLE_LIB"; then
     1458
     1459              tmp=""
     1460              for i in $oracle_directory; do
     1461                tmp="$tmp $i"
     1462              done
     1463              FAIL_MESSAGE("OCI library file (libclntsh.so) please define ORACLE_LIB directory where libclntsh.so resides", $tmp)
     1464
     1465          else
     1466
     1467            ORACLE_CPP_FLAGS="-I$ORACLE_INC"
     1468            ORACLE_LIB_DIR="$ORACLE_LIB"
     1469
     1470            AC_MSG_RESULT([$ORACLE_INC $ORACLE_LIB])
    14471471
    14481472            CPPFLAGS="${CPPFLAGS} ${ORACLE_CPP_FLAGS}"
    14491473
    14501474            ORACLE_LIBS="-lclntsh"
     1475
     1476            if test -r $ORACLE_LIB_DIR/libnnz11.so; then
     1477              ORACLE_LIBS="${ORACLE_LIBS} -lnnz11"
     1478            fi
    14511479            if test -r $ORACLE_LIB_DIR/libwtc9.so; then
    14521480              ORACLE_LIBS="${ORACLE_LIBS} -lwtc9"
  • trunk/docs/Changelog

    r414 r415  
     13.0.8:
     2        * rename to 3.0.8 for release
     3        * useful exit status for samhainadmin.pl --examine
     4
     53.0.7a:
     6        * add ability to create RPM with preset password (use
     7          env var PASSWORD)
     8        * fix the rpm-light makefile target
     9        * fix minor bug in samhain_setpwd.c (incorrect error message)
     10
     113.0.7:
     12        * update documentation for prelude
     13        * fix configure to properly search for Oracle Instantclient SDK
     14        * pass through TNS_ADMIN environment variable for Oracle
     15        * optimize audit rules automatically
     16        * zero out the html status file at server exit
     17        * don't check for assembly optimization unless linux or *BSD
     18
    1193.0.6:
    220        * install logrotate script if /etc/logrotate.d is detected
  • trunk/include/samhain.h

    r412 r415  
    125125#define UINT32 unsigned short
    126126#define SINT32 short
     127#else
     128#error "No 32 bit integer type found"
    127129#endif
    128130
  • trunk/include/sh_extern.h

    r294 r415  
    11#ifndef SH_EXTERN_H
    22#define SH_EXTERN_H
     3
     4#include <stdarg.h>
    35
    46typedef struct
     
    4042 *    executes shell command
    4143 */
    42 int sh_ext_popen_init (sh_tas_t * task, char * command);
     44int sh_ext_popen_init (sh_tas_t * task, char * command, char * argv0, ...) SH_GNUC_SENTINEL;
    4345
    4446/*
    4547 * -- Execute command, return first line of output
    4648 */
    47 int sh_ext_system (char * command);
     49int sh_ext_system (char * command, char * argv0, ...) SH_GNUC_SENTINEL;
    4850
    4951/*
  • trunk/include/sh_files.h

    r373 r415  
    2222
    2323void sh_audit_mark (const char * file);
     24void sh_audit_commit ();
    2425void sh_audit_delete_all ();
    2526char * sh_audit_fetch (char * file, time_t time, char * result, size_t rsize);
  • trunk/samhain.spec.in

    r412 r415  
    1414Packager: Andre Oliveira da Costa <brblueser@uol.com.br>
    1515Provides: %{name}
     16Requires(pre): shadow-utils
    1617
    1718# dummy (fix configure warning)
     
    1920
    2021# no quotes here - aparently will be expanded literally
     22
     23%define password %(echo $PASSWORD)
    2124
    2225%define withpwd_prg x@clmytclient@
     
    6568./configure @mydefargs@
    6669make
     70%if "%{withpwd_prg}" == "xDSH_WITH_CLIENT"
     71%if 0%{?password:1}
     72        ./samhain_setpwd samhain new %{password}
     73        mv samhain samhain.old
     74        mv samhain.new samhain
     75%endif
     76%endif
     77
    6778
    6879%install
    69 
    7080rm -rf ${RPM_BUILD_ROOT}
    7181# sstrip shouldn't be used since binaries will be stripped later
     
    8898%clean
    8999rm -rf ${RPM_BUILD_ROOT}
     100
     101%pre
     102if test "x@install_name@" = "xyule"
     103then
     104    getent group samhain >/dev/null || groupadd -r samhain
     105    getent passwd yule >/dev/null || \
     106        useradd -r -g samhain -d  @mydataroot@ -s /sbin/nologin \
     107        -c "samhain server daemon" yule
     108
     109fi
     110exit 0
    90111
    91112%post
     
    197218%attr(644,root,root) @mandir@/man8/@install_name@*
    198219%attr(644,root,root) /etc/logrotate.d/@install_name@
     220%if "%{name}" == "yule"
     221%attr(750,root,samhain) @mydataroot@
     222%attr(750,yule,samhain) @mylogdir@
     223%endif
    199224%config(noreplace) @myrpmconffile@
    200225
    201226%changelog
     227* Tue Oct 23 2012 Rainer Wichmann
     228- fixes for yule installation
     229
    202230* Tue May 16 2006 Rainer Wichmann
    203231- fix manual version, noticed by Imre Gergely
  • trunk/scripts/samhainadmin.pl.in

    r330 r415  
    687687    check_gpg_verify();
    688688    my $i = 0;
     689    my $ret = 0;
    689690    while (defined($ARGV[$i])) {
    690691        print "\n";
    691692        $file1 = $ARGV[$i];
    692         examine ();
     693        $ret += examine ();
    693694        ++$i;
    694695        print "\n--------------------------------\n" if (defined($ARGV[$i]));
    695696    }
     697    exit($ret);
    696698}
    697699
  • trunk/src/samhain.c

    r411 r415  
    712712#if defined(SH_WITH_SERVER)
    713713  extern int sh_socket_remove (void);
     714  extern int sh_html_zero();
    714715#endif
    715716
     
    743744   */
    744745#if defined(SH_WITH_SERVER)
    745   sh_forward_html_write();
     746  /* zero out the status file at exit, such that the status
     747   * of client becomes unknown in the beltane interface
     748   */
     749  sh_html_zero();
     750  /* sh_forward_html_write(); */
    746751#endif
    747752
     
    11741179      FileSchedIn = NULL;
    11751180      *status = 0;
    1176       return 0;
     1181      return NULL;
    11771182    }
    11781183
     
    17221727  (void) sh_files_setrec();
    17231728  (void) sh_files_test_setup();
     1729  sh_audit_commit ();
    17241730
    17251731  /* --------  NICE LEVEL   ---------
     
    18581864              (void) sh_files_setrec();
    18591865              (void) sh_files_test_setup();
     1866              sh_audit_commit ();
     1867
     1868              fprintf(stderr, "FIXME: %d\n", (int) sh.fileCheck.alarm_interval);
     1869              fprintf(stderr, "FIXME: FileSchedOne %s\n",
     1870                      FileSchedOne == NULL ? "NULL" : "NOT NULL");
     1871              fprintf(stderr, "FIXME: FileSchedTwo %s\n",
     1872                      FileSchedTwo == NULL ? "NULL" : "NOT NULL");
     1873
    18601874
    18611875              if (0 != sh.flag.nice)
  • trunk/src/samhain_setpwd.c

    r212 r415  
    279279  if (strlen(argv[3]) != 16)
    280280    {
    281       fprintf (stdout, _("ERROR <new_password> %s has not exactly 16 chars\n"),
    282                argv[0]);
     281      fprintf (stdout,
     282               _("ERROR <new_password> |%s| has not exactly 16 chars\n"),
     283               argv[3]);
    283284      fflush(stdout);
    284285      return  EXIT_FAILURE;
  • trunk/src/sh_audit.c

    r373 r415  
    211211  if (p >= 0)
    212212    {
    213       char command[64];
    214 
    215       sl_snprintf(command, sizeof(command), _("%s -D -k samhain"),
     213      char ctl[64];
     214
     215      sl_snprintf(ctl, sizeof(ctl), _("%s -D -k samhain"),
    216216                  _(actl_paths[p]));
    217217      sh_error_handle (SH_ERR_ALL, FIL__, __LINE__,
     
    219219                       _("Deleting audit daemon rules with key samhain"),
    220220                       _("sh_audit_delete_all") );
    221       sh_ext_system(command);
    222     }
    223   return;
    224 }
    225 
    226 void sh_audit_mark (const char * file)
     221
     222      sl_strlcpy(ctl, _(actl_paths[p]), sizeof(ctl));
     223      sh_ext_system(ctl, ctl, "-D", "-k", _("samhain"), NULL);
     224    }
     225  return;
     226}
     227
     228static void sh_audit_mark_int (const char * file)
    227229{
    228230  static int flushRules = 0;
     
    243245      char * command = SH_ALLOC(len);
    244246      char * safe;
     247      char   ctl[64];
    245248
    246249      sl_snprintf(command, len, _("%s -w %s -p wa -k samhain"),
     
    255258      SH_FREE(safe);
    256259
    257       sh_ext_system(command);
    258     }
    259   return;
    260 }
    261 
     260      sl_strlcpy(ctl, _(actl_paths[p]), sizeof(ctl));
     261      sl_strlcpy(command, file, len);
     262
     263      sh_ext_system(ctl, ctl, "-w", command, "-p", "wa", "-k", _("samhain"), NULL);
     264
     265      SH_FREE(command);
     266    }
     267  return;
     268}
     269
     270struct aud_list {
     271  char * file;
     272  struct aud_list * next;
     273};
     274
     275struct aud_list * mark_these = NULL;
     276
     277static void add_this (char * file)
     278{
     279  struct aud_list * this = SH_ALLOC(sizeof(struct aud_list));
     280  this->file = sh_utils_strdup(file);
     281  this->next = mark_these;
     282  return;
     283}
     284
     285static int test_exchange (struct aud_list * this, char * file)
     286{
     287  size_t len0 = sl_strlen(this->file);
     288  size_t len1 = sl_strlen(file);
     289  int    ret  = -1;
     290
     291  if (len0 == len1)
     292    {
     293      return strcmp(this->file, file);
     294    }
     295  else
     296    {
     297      char * s0 = SH_ALLOC(len0 + 2);
     298      char * s1 = SH_ALLOC(len1 + 2);
     299
     300       sl_strlcpy(s0, this->file, len0 + 2);
     301       sl_strlcpy(s1, file,       len1 + 2);
     302
     303       if (s0 < s1)
     304         {
     305           sl_strlcat(s0, "/", len0 + 2);
     306           ret = strncmp(s0, s1, len0 + 1);
     307         }
     308       else
     309         {
     310           sl_strlcat(s1, "/", len1 + 2);
     311           if (0 == strncmp(s0, s1, len1 + 1))
     312             {
     313               SH_FREE(this->file);
     314               this->file = sh_utils_strdup(file);
     315               ret = 0;
     316             }
     317         }
     318       SH_FREE(s0);
     319       SH_FREE(s1);
     320    }
     321 
     322  return ret;
     323}
     324
     325void sh_audit_mark (char * file)
     326{
     327  struct aud_list * all  = mark_these;
     328  struct aud_list * this = mark_these;
     329
     330  if (!mark_these) {
     331    add_this (file);
     332    return;
     333  }
     334
     335  while (this)
     336    {
     337      if (0 == test_exchange(this, file))
     338        return;
     339      this = this->next;
     340    }
     341
     342  add_this (file);
     343  return;
     344}
     345
     346void sh_audit_commit ()
     347{
     348  struct aud_list * next;
     349  struct aud_list * this = mark_these;
     350
     351  mark_these = NULL;
     352
     353  while (this)
     354    {
     355      sh_audit_mark_int (this->file);
     356      next = this->next;
     357      SH_FREE(this->file);
     358      SH_FREE(this);
     359      this = next;
     360    }
     361 
     362}
    262363
    263364static int sh_audit_checkdaemon()
     
    381482  return;
    382483}
     484void sh_audit_commit ()
     485{
     486  return;
     487}
    383488#endif
    384489
  • trunk/src/sh_extern.c

    r400 r415  
    847847}
    848848
    849 int sh_ext_popen_init (sh_tas_t * task, char * command)
    850 {
    851   int status;
    852 
     849static void task_init (sh_tas_t * task)
     850{
    853851  sh_ext_tas_init(task);
    854852
     
    858856                              _("/sbin:/bin:/usr/sbin:/usr/bin:/usr/ucb"));
    859857  (void) sh_ext_tas_add_envv (task, _("IFS"), " \n\t");
     858
    860859  if (sh.timezone != NULL)
    861860    {
    862861      (void) sh_ext_tas_add_envv(task,  "TZ", sh.timezone);
    863862    }
     863  return;
     864}
     865
     866int sh_ext_popen_init (sh_tas_t * task, char * command, char * argv0, ...)
     867{
     868  va_list vl;
     869  int status;
     870
     871  task_init (task);
    864872 
    865   sh_ext_tas_command(task,  _("/bin/sh"));
    866 
    867   (void) sh_ext_tas_add_argv(task,  _("/bin/sh"));
    868   (void) sh_ext_tas_add_argv(task,  _("-c"));
    869   (void) sh_ext_tas_add_argv(task,  command);
    870  
     873  if (!argv0)
     874    {
     875      sh_ext_tas_command(task,  _("/bin/sh"));
     876
     877      (void) sh_ext_tas_add_argv(task,  _("/bin/sh"));
     878      (void) sh_ext_tas_add_argv(task,  _("-c"));
     879      (void) sh_ext_tas_add_argv(task,  command);
     880    }
     881  else
     882    {
     883      char * s;
     884
     885      sh_ext_tas_command(task,  command);
     886
     887      (void) sh_ext_tas_add_argv(task, argv0);
     888
     889      va_start (vl, argv0);
     890      s = va_arg (vl, char * );
     891      while (s != NULL)
     892        {
     893          (void) sh_ext_tas_add_argv(task, s);
     894          s = va_arg (vl, char * );
     895        }
     896      va_end (vl);
     897
     898    }
    871899  task->rw = 'r';
    872900  task->fork_twice = S_FALSE;
     
    879907/* Execute a system command */
    880908
    881 int sh_ext_system (char * command)
     909int sh_ext_system (char * command, char * argv0, ...)
    882910{
    883911  sh_tas_t task;
    884912  int    status;
     913  va_list vl;
     914  char * s;
    885915
    886916  SL_ENTER(_("sh_ext_system"));
    887917
    888   status = sh_ext_popen_init (&task, command);
     918  task_init (&task);
     919 
     920  sh_ext_tas_command(&task,  command);
     921
     922  (void) sh_ext_tas_add_argv(&task, argv0);
     923 
     924  va_start (vl, argv0);
     925  s = va_arg (vl, char * );
     926  while (s != NULL)
     927    {
     928      (void) sh_ext_tas_add_argv(&task, s);
     929      s = va_arg (vl, char * );
     930    }
     931  va_end (vl);
     932
     933  task.rw = 'r';
     934  task.fork_twice = S_FALSE;
     935
     936  status = sh_ext_popen(&task);
    889937
    890938  if (status != 0)
     
    915963  SL_ENTER(_("sh_ext_popen_str"));
    916964
    917   status = sh_ext_popen_init (&task, command);
     965  status = sh_ext_popen_init (&task, command, NULL, NULL);
    918966
    919967  if (status != 0)
  • trunk/src/sh_getopt.c

    r367 r415  
    401401  printf (_("Client executable (port %d)"), SH_DEFAULT_PORT); ++num;
    402402#endif
    403 #if defined(SH_WITH_CLIENT)
     403#if defined(SH_WITH_SERVER)
    404404  if (num > 0) fputc ('\n', stdout);
    405405  printf (_("Server executable (port %d, user %s)"),
  • trunk/src/sh_html.c

    r383 r415  
    503503}
    504504
     505int sh_html_zero()
     506{
     507  long fd;
     508
     509  SL_ENTER(_("sh_html_zero"));
     510
     511  if (0 != (fd = tf_trust_check (DEFAULT_HTML_FILE, SL_YESPRIV)))
     512    {
     513      SL_RETURN((-1), _("sh_html_zero"));
     514    }
     515
     516  fd = sl_open_write_trunc (FIL__, __LINE__, DEFAULT_HTML_FILE, SL_YESPRIV);
     517
     518  if (SL_ISERROR(fd))
     519    {
     520     SL_RETURN((-1), _("sh_html_zero"));
     521    }
     522
     523  sh_html_head(fd);
     524  sh_html_foot(fd);
     525
     526  sl_close(fd);
     527
     528  SL_RETURN((0), _("sh_html_zero"));
     529}
     530
    505531/* SH_WITH_SERVER */
    506532#endif
  • trunk/src/sh_log_check.c

    r379 r415  
    915915  entry = SH_ALLOC(sizeof(struct task_entry));
    916916
    917   status = sh_ext_popen_init (&(entry->task), logfile->filename);
     917  status = sh_ext_popen_init (&(entry->task), logfile->filename, logfile->filename, NULL);
    918918  if (0 == status)
    919919    {
  • trunk/src/sh_unix.c

    r411 r415  
    15191519#ifdef WITH_ORACLE
    15201520    /*
    1521      * Skip the ORACLE_HOME environment variable; Oracle may need it.
     1521     * Skip the ORACLE_HOME and TNS_ADMIN environment variables;
     1522     * Oracle may need them.
    15221523     */
    15231524    if (0 == sl_strncmp((*env), _("ORACLE_HOME="), 12))
     1525      {
     1526        ++(env);
     1527        continue;
     1528      }
     1529    if (0 == sl_strncmp((*env), _("TNS_ADMIN="), 10))
    15241530      {
    15251531        ++(env);
  • trunk/test/testrun_2.sh

    r369 r415  
    537537        fi
    538538
     539        cp $HTML  ${HTML}.tmp
     540
    539541        kill $PROC_Y
    540542        five_sec_sleep
     
    568570        fi
    569571
    570         egrep '<!-- head -->' $HTML >/dev/null 2>&1
     572        egrep '<!-- head -->' ${HTML}.tmp >/dev/null 2>&1
    571573        if [ $? -ne 0 ]; then
    572574            [ -z "$verbose" ] || log_msg_fail "head.html";
    573575            return 1
    574576        fi
    575         egrep '<!-- ehead -->' $HTML >/dev/null 2>&1
     577        egrep '<!-- ehead -->' ${HTML}.tmp >/dev/null 2>&1
    576578        if [ $? -ne 0 ]; then
    577579            [ -z "$verbose" ] || log_msg_fail "end head.html";
     
    579581        fi
    580582
    581         egrep '<!-- entry -->' $HTML >/dev/null 2>&1
     583        egrep '<!-- entry -->' ${HTML}.tmp >/dev/null 2>&1
    582584        if [ $? -ne 0 ]; then
    583585            [ -z "$verbose" ] || log_msg_fail "entry.html";
    584586            return 1
    585587        fi
    586         egrep '<!-- eentry -->' $HTML >/dev/null 2>&1
     588        egrep '<!-- eentry -->' ${HTML}.tmp >/dev/null 2>&1
    587589        if [ $? -ne 0 ]; then
    588590            [ -z "$verbose" ] || log_msg_fail "end entry.html";
     
    590592        fi
    591593
    592         egrep '<!-- foot -->' $HTML >/dev/null 2>&1
     594        egrep '<!-- foot -->' ${HTML}.tmp >/dev/null 2>&1
    593595        if [ $? -ne 0 ]; then
    594596            [ -z "$verbose" ] || log_msg_fail "foot.html";
    595597            return 1
    596598        fi
    597         egrep '<!-- efoot -->' $HTML >/dev/null 2>&1
     599        egrep '<!-- efoot -->' ${HTML}.tmp >/dev/null 2>&1
    598600        if [ $? -ne 0 ]; then
    599601            [ -z "$verbose" ] || log_msg_fail "end foot.html";
     
    609611            fi;
    610612        }
     613
     614        rm ${HTML}.tmp
    611615
    612616        return 0
  • trunk/yulerc.template

    r30 r415  
    4747##
    4848# MailSeverity=none
    49 MailSeverity=crit
    5049
    5150## Console
    5251##
    53 # PrintSeverity=info
     52PrintSeverity=none
    5453
    5554## Logfile
    5655##
    57 # LogSeverity=none
     56LogSeverity = warn
    5857
    5958## Syslog
     
    9796## Log the server timestamp for received messages
    9897#
    99 SetDBServerTstamp = True
     98# SetDBServerTstamp = True
    10099
    101100## Use a persistent connection
    102101#
    103 UsePersistent = True
     102# UsePersistent = True
    104103
    105104
Note: See TracChangeset for help on using the changeset viewer.