Changeset 283


Ignore:
Timestamp:
May 4, 2010, 10:28:11 PM (10 years ago)
Author:
katerina
Message:

Patch for ticket #207 (server logs client reports to prelude).

Location:
trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/samhain.h

    r265 r283  
    3636#define REPLACE_OLD
    3737
    38 /* Standard buffer sizes.
    39  */
     38/* Standard buffer sizes.
     39 * IPv6 is 8 groups of 4 hex digits seperated by colons.
     40 */
     41#define SH_IP_BUF        40
    4042#define SH_MINIBUF       64
    4143#define SH_BUFSIZE     1024
  • trunk/include/sh_error.h

    r279 r283  
    101101
    102102#ifdef SH_WITH_SERVER
     103
    103104void sh_error_set_peer(const char * str);
     105#ifdef HAVE_LIBPRELUDE
     106void sh_error_set_peer_ip(const char * str);
     107#endif
    104108int  set_flag_sep_log (const char * str);
    105109#endif
  • trunk/include/sh_prelude.h

    r170 r283  
    99
    1010int sh_prelude_alert (int priority, int class, char * message,
    11                       long msgflags, unsigned long msgid);
     11                      long msgflags, unsigned long msgid, char * inet_peer_ip);
    1212
    1313/* map severity levels
  • trunk/src/sh_error.c

    r272 r283  
    841841#ifdef SH_WITH_SERVER
    842842static char inet_peer[SH_MINIBUF] = { '\0' };
     843#ifdef HAVE_LIBPRELUDE
     844static char inet_peer_ip[SH_IP_BUF] = { '\0' };
     845
     846void sh_error_set_peer_ip(const char * str)
     847{
     848  if (str == NULL)
     849    inet_peer_ip[0] = '\0';
     850  else
     851    sl_strlcpy(inet_peer_ip, str, sizeof(inet_peer_ip));
     852}
     853#endif
    843854
    844855void sh_error_set_peer(const char * str)
     
    847858    inet_peer[0] = '\0';
    848859  else
    849     sl_strlcpy(inet_peer, str, SH_MINIBUF);
     860    sl_strlcpy(inet_peer, str, sizeof(inet_peer));
    850861}
    851862#endif
     
    880891  int    class_inet = clt_class;      /* initialize from global */
    881892  char   local_inet_peer[SH_MINIBUF];
     893#ifdef HAVE_LIBPRELUDE
     894  char   local_inet_peer_ip[SH_IP_BUF];
     895#endif   
    882896#endif
    883897
     
    924938  if ((msg_id == MSG_TCP_MSG) && (inet_peer[0] != '\0'))
    925939    {
    926       sl_strlcpy(local_inet_peer, inet_peer, SH_MINIBUF);
     940      sl_strlcpy(local_inet_peer, inet_peer, sizeof(local_inet_peer));
    927941      sh_error_set_peer(NULL);
    928942    }
    929943  else
    930944    local_inet_peer[0] = '\0';
     945
     946#ifdef HAVE_LIBPRELUDE
     947  if ((msg_id == MSG_TCP_MSG) && (inet_peer_ip[0] != '\0'))
     948    {
     949      sl_strlcpy(local_inet_peer_ip, inet_peer_ip, sizeof(local_inet_peer_ip));
     950      sh_error_set_peer_ip(NULL);
     951    }
     952  else
     953    local_inet_peer_ip[0] = '\0';
     954#endif
    931955
    932956  clt_class = (-1);      /* reset global */
     
    12631287               *  Reports first error after failure. Always tries.
    12641288               */
    1265               (void) sh_prelude_alert (severity, (int) class, lmsg->msg,
    1266                                        lmsg->status, msg_id);
    1267 
     1289#if defined(HAVE_LIBPRELUDE) && defined(SH_WITH_SERVER)
     1290              (void) sh_prelude_alert (severity, (int) class,
     1291                                       lmsg->msg, lmsg->status, msg_id,
     1292                                       local_inet_peer_ip);
     1293#else
     1294              (void) sh_prelude_alert (severity, (int) class,
     1295                                       lmsg->msg, lmsg->status, msg_id,
     1296                                       NULL);
     1297#endif
    12681298              prelude_block = 0;
    12691299            }
     
    13011331                    (void) sh_log_file (lmsg->msg, NULL);
    13021332                  else
    1303                     (void) sh_log_file (lmsg->msg, local_inet_peer);
     1333                    (void) sh_log_file (lmsg->msg, local_inet_peer);
    13041334                }
    13051335#else
  • trunk/src/sh_forward.c

    r270 r283  
    36613661                  /* push client name to error routine
    36623662                   */
     3663#if defined(SH_WITH_SERVER) && defined(HAVE_LIBPRELUDE)
     3664                  sh_error_set_peer_ip( inet_ntoa (*(struct in_addr *) &(conn->addr_peer.sin_addr)) );                       
     3665#endif
    36633666                  sh_error_set_peer(sh_strip_domain (conn->peer));
    36643667                  sh_error_handle(clt_sev, FIL__, __LINE__, 0, MSG_TCP_MSG,
     
    36663669                                  ptok);
    36673670                  sh_error_set_peer(NULL);
    3668 
     3671#if defined(SH_WITH_SERVER) && defined(HAVE_LIBPRELUDE)
     3672                  sh_error_set_peer_ip(NULL);
     3673#endif
     3674                 
    36693675                  TPT((0, FIL__, __LINE__, _("msg=<%s>\n"), ptok));
    36703676                  SH_FREE(ptok);
  • trunk/src/sh_prelude.c

    r227 r283  
    219219{
    220220        char *ret = NULL;
    221        
     221#if defined(SH_WITH_SERVER)
     222        int    delim_start_count = 0;
     223        int    found = 0;
     224#endif               
     225
    222226        ptr = strchr(ptr, delim_start);
    223227        if ( ! ptr )
     
    225229
    226230        ret = ++ptr;
    227 
     231#if defined(SH_WITH_SERVER)
     232        while ((*ptr != '\0') && (!found)){
     233                if (*ptr == delim_end) {
     234                        if (delim_start_count == 0)
     235                                found = 1;
     236                        delim_start_count--;
     237                }
     238                else if (*ptr == delim_start)
     239                        delim_start_count++;
     240                ptr++;
     241        }
     242        ptr = (found) ? ptr-1 : NULL ;
     243#else
    228244        ptr = strchr(ptr, delim_end);
     245#endif
    229246        if ( ! ptr )
    230247                return NULL;
     
    555572
    556573                free(uid);
     574                /* Don't free(ptr) because of prelude_string_set_nodup(str, ptr) */
    557575        }
    558576
     
    597615
    598616                free(gid);
     617                /* Don't free(ptr) because of prelude_string_set_nodup(str, ptr) */
    599618        }
    600619
     
    683702                return -1;
    684703        }
    685        
     704
     705#if defined(SH_WITH_SERVER)
     706        /* when using yule, theres a msg=<... msg=<...> >*/
     707        do {
     708                msg = ptr;
     709                ptr = get_value(msg, _("msg"), NULL);
     710                if ( ! ptr ) {
     711                        ptr = msg;
     712                        break;
     713                } else {
     714                        free(msg);
     715                }
     716        } while (1);
     717#endif       
     718
    686719        ret = prelude_string_cat(out, ptr);
    687720        free(ptr);
     
    11151148
    11161149
     1150static int node_set_address(idmef_node_t *node, const char *addr)
     1151{
     1152        int ret;
     1153        prelude_string_t *prelude_str;
     1154        idmef_address_t *idmef_addr;
     1155
     1156        ret = prelude_string_new(&prelude_str);
     1157        if ( ret < 0 )
     1158                goto err;
     1159     
     1160        ret = prelude_string_set_ref(prelude_str, addr);
     1161        if ( ret < 0 )
     1162                goto err;
     1163
     1164        ret = idmef_address_new(&idmef_addr);
     1165        if ( ret < 0 )
     1166                goto err;
     1167     
     1168        idmef_address_set_category(idmef_addr, IDMEF_ADDRESS_CATEGORY_IPV4_ADDR);
     1169        idmef_address_set_address(idmef_addr, prelude_str);
     1170        idmef_node_set_address(node, idmef_addr, 0);
     1171
     1172        return 0;
     1173 err:
     1174        return -1;
     1175}
     1176
     1177                                         
     1178
    11171179static int samhain_alert_prelude(int priority, int sh_class,
    1118                                  char *message, unsigned long msgid)
     1180                                 char *message, unsigned long msgid, char * inet_peer_ip)
    11191181{
    11201182        int ret;
     
    11291191        idmef_confidence_t *confidence;
    11301192        prelude_string_t *str;
     1193#if defined(SH_WITH_SERVER)
     1194        idmef_node_t *node;
     1195#endif
    11311196               
    11321197        if ( !client || sh_class == STAMP)
     
    11621227
    11631228        idmef_target_set_decoy(target, IDMEF_TARGET_DECOY_NO);
    1164        
     1229
     1230#if defined(SH_WITH_SERVER)
     1231        if ( inet_peer_ip != NULL){
     1232                ret = idmef_target_new_node(target, &node);
     1233       
     1234                ret = node_set_address(node, inet_peer_ip);
     1235                if ( ret < 0 )
     1236                          goto err;
     1237                         
     1238                idmef_target_set_node(target, idmef_node_ref(node));
     1239        }
     1240        else
    11651241        if ( idmef_analyzer_get_node(prelude_client_get_analyzer(client)) ) {
    11661242                idmef_node_ref(idmef_analyzer_get_node(prelude_client_get_analyzer(client)));
    11671243                idmef_target_set_node(target, idmef_analyzer_get_node(prelude_client_get_analyzer(client)));
    11681244        }
    1169        
     1245#else       
     1246        if ( idmef_analyzer_get_node(prelude_client_get_analyzer(client)) ) {
     1247                idmef_node_ref(idmef_analyzer_get_node(prelude_client_get_analyzer(client)));
     1248                idmef_target_set_node(target, idmef_analyzer_get_node(prelude_client_get_analyzer(client)));
     1249        }
     1250#endif       
    11701251        if ( strstr(message, _("path=")) ) {
    11711252#if defined(SH_WITH_CLIENT) || defined(SH_STANDALONE)
     
    12481329
    12491330
    1250 int sh_prelude_alert(int priority, int sh_class, char *message, long msgflags, unsigned long msgid)
     1331int sh_prelude_alert(int priority, int sh_class, char *message, long msgflags, unsigned long msgid, char *inet_peer_ip)
    12511332{
    12521333        int ret;
     
    12571338                return -1;
    12581339       
    1259         ret = samhain_alert_prelude(priority, sh_class, message, msgid);
     1340        ret = samhain_alert_prelude(priority, sh_class, message, msgid, inet_peer_ip);
    12601341        if ( ret < 0 ) {
    12611342                sh_error_handle((-1), FIL__, __LINE__, -1, MSG_E_SUBGEN,
Note: See TracChangeset for help on using the changeset viewer.