Changeset 142


Ignore:
Timestamp:
Oct 30, 2007, 12:17:00 AM (11 years ago)
Author:
rainer
Message:

Login watch runs in thread.

Location:
trunk/src
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/samhain.c

    r140 r142  
    704704  for (modnum = 0; modList[modnum].name != NULL; ++modnum)  
    705705    { 
    706       if (modList[modnum].initval == GOOD) 
     706      if (modList[modnum].initval == SH_MOD_ACTIVE) 
    707707        (void) modList[modnum].mod_cleanup(); 
    708708    } 
     709#ifdef HAVE_PTHREAD 
     710  sh_pthread_cancel_all(); 
     711#endif 
    709712#endif 
    710713 
     
    16371640  for (modnum = 0; modList[modnum].name != NULL; ++modnum)  
    16381641    { 
    1639       if ( 0 != (status = modList[modnum].mod_init(&(modList[modnum]))) ) 
     1642      status = modList[modnum].mod_init(&(modList[modnum])); 
     1643      if ( status < 0 ) 
    16401644        { 
    16411645          if (status == (-1)) { 
     
    16491653                             status); 
    16501654          } 
    1651           modList[modnum].initval = S_FALSE; 
     1655          modList[modnum].initval = SH_MOD_FAILED; 
    16521656        } 
    16531657      else 
     
    16551659          sh_error_handle ((-1), FIL__, __LINE__, 0, MSG_MOD_OK, 
    16561660                           _(modList[modnum].name)); 
    1657           modList[modnum].initval = S_TRUE; 
     1661          modList[modnum].initval = status; 
    16581662        } 
    16591663    } 
     
    17441748              for (modnum = 0; modList[modnum].name != NULL; ++modnum)  
    17451749                { 
    1746                   if (modList[modnum].initval == GOOD) 
     1750                  if (modList[modnum].initval >= SH_MOD_ACTIVE) 
    17471751                    (void) modList[modnum].mod_reconf(); 
    17481752                } 
     
    17951799              for (modnum = 0; modList[modnum].name != NULL; ++modnum)  
    17961800                { 
    1797                   if (0 != (status = modList[modnum].mod_init(&(modList[modnum])))) 
     1801                  status = modList[modnum].mod_init(&(modList[modnum])); 
     1802 
     1803                  if (status < 0) 
    17981804                    { 
    17991805                      if (status == (-1)) { 
     
    18081814                                         status); 
    18091815                      } 
    1810                       modList[modnum].initval = S_FALSE; 
     1816                      modList[modnum].initval = SH_MOD_FAILED; 
    18111817                    } 
    18121818                  else 
     
    18141820                      sh_error_handle ((-1), FIL__, __LINE__, 0, MSG_MOD_OK, 
    18151821                                       _(modList[modnum].name)); 
    1816                       modList[modnum].initval = S_TRUE; 
     1822                      modList[modnum].initval = status; 
    18171823                    } 
    18181824                } 
     
    20252031      for (modnum = 0; modList[modnum].name != NULL; ++modnum)  
    20262032        { 
    2027           if (modList[modnum].initval == GOOD && 
     2033          if (modList[modnum].initval == SH_MOD_ACTIVE && 
    20282034              0 != modList[modnum].mod_timer(tcurrent)) 
    20292035            if (0 != (status = modList[modnum].mod_check())) 
  • trunk/src/sh_error.c

    r140 r142  
    2020#include "config_xor.h" 
    2121 
    22 /* required on linux to get the correct strerror_r function 
     22/* Required on linux to get the correct strerror_r function. Also 
     23 * for recursive mutexes (_XOPEN_SOURCE >= 500). 
    2324 */ 
    2425#define _XOPEN_SOURCE 600 
  • trunk/src/sh_modules.c

    r140 r142  
    2121  { 
    2222    N_("UTMP"), 
    23     0, 
     23    -1, 
    2424    sh_utmp_init, 
    2525    sh_utmp_timer, 
     
    3737  { 
    3838    N_("MOUNTS"), 
    39     0, 
     39    -1, 
    4040    sh_mounts_init, 
    4141    sh_mounts_timer, 
     
    5353  { 
    5454    N_("USERFILES"), 
    55     0, 
     55    -1, 
    5656    sh_userfiles_init, 
    5757    sh_userfiles_timer, 
     
    6969  { 
    7070    N_("KERNEL"), 
    71     0, 
     71    -1, 
    7272    sh_kern_init, 
    7373    sh_kern_timer, 
     
    8585  { 
    8686    N_("SUIDCHECK"), 
    87     0, 
     87    -1, 
    8888    sh_suidchk_init, 
    8989    sh_suidchk_timer, 
     
    101101  { 
    102102    N_("PROCESSCHECK"), 
    103     0, 
     103    -1, 
    104104    sh_prochk_init, 
    105105    sh_prochk_timer, 
     
    117117  { 
    118118    N_("PORTCHECK"), 
    119     0, 
     119    -1, 
    120120    sh_portchk_init, 
    121121    sh_portchk_timer, 
     
    132132  { 
    133133    NULL, 
    134     0, 
     134    -1, 
    135135 
    136136    NULL, 
  • trunk/src/sh_pthread.c

    r141 r142  
    4040 
    4141/* MODULES: init() 
    42  *             -- starts thread_run() function if threaded 
    43  *             -- fallback on internal_init if threading fails 
    44  *             -- and returns MODULE_INACTIVE/MODULE_ACTIVE/MODULE_THREADED 
    45  * 
    46  *                int retval = MODULE_INACTIVE; 
    47  *                if (0 != sh_pthread_create(thread_run, NULL)) 
    48  *                   return internal_init(); 
    49  *                return MODULE_THREADED; 
    50  * 
    51  *          thread_run()  
     42 * 
     43 * #ifdef HAVE_PTHREAD 
     44 *  if (arg != NULL) 
     45 *    { 
     46 *      if (0 == sh_pthread_create(sh_threaded_module_run, (void *)arg)) 
     47 *        return SH_MOD_THREAD; 
     48 *      else 
     49 *        return SH_MOD_FAILED; 
     50 *    } 
     51 * #else 
     52 *  return sh_utmp_init_internal(); 
     53 * #endif 
     54 * 
     55 * 
     56 *          sh_threaded_module_run(module_struct)  
    5257 *             -- calls internal init,  
    5358 *             -- polls timer,  
     
    131136/* ---- Utility functions for modules ---- 
    132137 */ 
    133 void sh_threaded_module_reconf(void *arg) 
     138void sh_threaded_module_cleanup(void *arg) 
    134139{ 
    135140  sh_mtype * this_module = (sh_mtype *) arg; 
    136   this_module->mod_reconf(); 
     141  this_module->mod_cleanup(); 
    137142  return; 
    138143} 
    139144 
    140 void sh_threaded_module_run(void *arg) 
     145void * sh_threaded_module_run(void *arg) 
    141146{ 
    142147  sh_mtype * this_module = (sh_mtype *) arg; 
     
    153158      if (0 == this_module->mod_init(NULL)) 
    154159        { 
    155           pthread_cleanup_push(sh_threaded_module_reconf, arg); 
     160          pthread_cleanup_push(sh_threaded_module_cleanup, arg); 
    156161 
    157162          while (1) 
     
    159164              if (0 != this_module->mod_timer(time(NULL))) 
    160165                { 
    161                   this_module->mod_check(); 
     166                  /* If module has been de-activated on reconfigure, 
     167                   * mod_check() must return non-zero. 
     168                   * The mod_cleanup() routine must then enable the  
     169                   * module to be re-activated eventually. 
     170                   */ 
     171                  if (0 != this_module->mod_check()) 
     172                    break; 
    162173                  pthread_testcancel(); 
    163174                  retry_msleep(1,0); 
     
    171182  pthread_cleanup_pop(1); 
    172183 
    173   return; 
     184  return NULL; 
    174185} 
    175186 
  • trunk/src/sh_utmp.c

    r140 r142  
    455455static struct log_user   * userlist   = NULL; 
    456456static time_t  lastcheck; 
     457static int     init_done = 0; 
    457458 
    458459/************* 
     
    461462 * 
    462463 *************/ 
    463 int sh_utmp_init (struct mod_type * arg) 
    464 { 
    465   static int done = 0; 
    466   (void) arg; 
     464 
     465static int sh_utmp_init_internal () 
     466{ 
    467467 
    468468  SL_ENTER(_("sh_utmp_init")); 
     
    472472  /* do not re-initialize after a re-configuration 
    473473   */ 
    474   if (done == 1) { 
     474  if (init_done == 1) { 
    475475    SL_RETURN( (0), _("sh_utmp_init")); 
    476476  } 
     
    480480  sh_utmp_check_internal (2); /* current logins */ 
    481481  sh_utmp_check_internal (0); 
    482   done = 1; 
     482  init_done = 1; 
    483483  SL_RETURN( (0), _("sh_utmp_init")); 
     484} 
     485 
     486int sh_utmp_init (struct mod_type * arg) 
     487{ 
     488  if (ShUtmpActive == BAD) 
     489    return SH_MOD_FAILED; 
     490#ifdef HAVE_PTHREAD 
     491  if (arg != NULL && arg->initval < 0) 
     492    { 
     493      if (0 == sh_pthread_create(sh_threaded_module_run, (void *)arg)) 
     494        return SH_MOD_THREAD; 
     495      else 
     496        return SH_MOD_FAILED; 
     497    } 
     498#endif 
     499  return sh_utmp_init_internal(); 
    484500} 
    485501 
     
    509525  (void) sh_utmp_login_clean(); 
    510526#endif 
     527  /* Reset the flag, such that the module 
     528   * can be re-enabled. 
     529   */ 
     530  ShUtmpActive       = S_TRUE; 
     531  init_done          = 0; 
    511532  SL_RETURN( (0), _("sh_utmp_end")); 
    512533} 
     
    536557{ 
    537558  SL_ENTER(_("sh_utmp_check")); 
     559  if (ShUtmpActive == BAD) 
     560    SL_RETURN( (-1), _("sh_utmp_check")); 
    538561  sh_error_handle ((-1), FIL__, __LINE__, 0, MSG_UT_CHECK); 
    539562  sh_utmp_check_internal (1); 
Note: See TracChangeset for help on using the changeset viewer.